diff --git a/lib/ace/mode/folding/html_test.js b/lib/ace/mode/folding/html_test.js
index 2698d936..3471ee57 100644
--- a/lib/ace/mode/folding/html_test.js
+++ b/lib/ace/mode/folding/html_test.js
@@ -153,6 +153,30 @@ module.exports = {
assert.range(session.getFoldWidgetRange(0), 0, 5, 5, 0);
assert.range(session.getFoldWidgetRange(5), 0, 5, 5, 0);
+ },
+
+ "test: fold multiple nested optional elements": function() {
+ var session = new EditSession([
+ '
',
+ '
',
+ 'juhu',
+ '
',
+ 'kinners',
+ '
'
+ ]);
+
+ var mode = new HtmlMode();
+ session.setMode(mode);
+ session.setFoldStyle("markbeginend");
+
+ assert.equal(session.getFoldWidget(0), "start");
+ assert.equal(session.getFoldWidget(1), "start");
+ assert.equal(session.getFoldWidget(2), "start");
+ assert.equal(session.getFoldWidget(3), "start");
+ assert.equal(session.getFoldWidget(4), "");
+ assert.equal(session.getFoldWidget(5), "end");
+
+ assert.range(session.getFoldWidgetRange(1), 1, 4, 5, 0);
}
};
diff --git a/lib/ace/mode/folding/xml.js b/lib/ace/mode/folding/xml.js
index 3a353eba..27f57a8c 100644
--- a/lib/ace/mode/folding/xml.js
+++ b/lib/ace/mode/folding/xml.js
@@ -192,9 +192,6 @@ function is(token, type) {
if (!tag || top.tagName == tag.tagName) {
return stack.pop();
}
- else if (this.optionalEndTags.hasOwnProperty(tag.tagName)) {
- return;
- }
else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {
stack.pop();
continue;