diff --git a/lib/html5/parser.js b/lib/html5/parser.js index 4f380bf7..e7113ff5 100644 --- a/lib/html5/parser.js +++ b/lib/html5/parser.js @@ -1839,8 +1839,10 @@ var Parser = HTML5.Parser = function HTML5Parser(options) { optgroup: 'startTagOptionOptgroup', math: 'startTagMath', svg: 'startTagSVG', - rt: 'startTagRpRt', - rp: 'startTagRpRt', + rt: 'startTagRpRtRbRtc', + rp: 'startTagRpRtRbRtc', + rb: 'startTagRpRtRbRtc', + rtc: 'startTagRpRtRbRtc', "-default": 'startTagOther' }; @@ -2003,9 +2005,14 @@ var Parser = HTML5.Parser = function HTML5Parser(options) { } }; - phases.inBody.startTagRpRt = function(name, attributes) { + phases.inBody.startTagRpRtRbRtc = function(name, attributes) { if (this.inScope('ruby')) { - tree.generateImpliedEndTags(); + if (name === 'rt') { + tree.generateImpliedEndTags('rtc'); + } + else { + tree.generateImpliedEndTags(); + } if (tree.open_elements.last().tagName.toLowerCase() != 'ruby') { parser.parse_error('unexpected-start-tag', {name: name}); } @@ -2344,7 +2351,7 @@ var Parser = HTML5.Parser = function HTML5Parser(options) { } /// @todo Emit parse error on end tags other than the ones listed in http://www.w3.org/TR/html5/tree-construction.html#parsing-main-inbody - // ['dd', 'dt', 'li', 'optgroup', 'option', 'p', 'rp', 'rt', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'body', 'html'] + // ['dd', 'dt', 'li', 'optgroup', 'option', 'p', 'rp', 'rt', 'rb', 'rtc', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'body', 'html'] if (tree.open_elements.last().tagName.toLowerCase() != 'body') { parser.parse_error('expected-one-end-tag-but-got-another', { expectedName: tree.open_elements.last().tagName.toLowerCase(), @@ -2361,7 +2368,7 @@ var Parser = HTML5.Parser = function HTML5Parser(options) { } /// @todo Emit parse error on end tags other than the ones listed in http://www.w3.org/TR/html5/tree-construction.html#parsing-main-inbody - // ['dd', 'dt', 'li', 'optgroup', 'option', 'p', 'rp', 'rt', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'body', 'html'] + // ['dd', 'dt', 'li', 'optgroup', 'option', 'p', 'rp', 'rt', 'rb', 'rtc', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'body', 'html'] if (tree.open_elements.last().tagName.toLowerCase() != 'body') { parser.parse_error('expected-one-end-tag-but-got-another', { expectedName: tree.open_elements.last().tagName.toLowerCase(), diff --git a/lib/html5/treebuilder.js b/lib/html5/treebuilder.js index 53164096..d8241979 100644 --- a/lib/html5/treebuilder.js +++ b/lib/html5/treebuilder.js @@ -245,7 +245,7 @@ b.prototype.generateImpliedEndTags = function(exclude) { return } var name = this.open_elements.last().tagName.toLowerCase(); - if(['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'].indexOf(name) != -1 && name != exclude) { + if(['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt', 'rb', 'rtc'].indexOf(name) != -1 && name != exclude) { var p = this.pop_element(); this.generateImpliedEndTags(exclude); }