JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
fix self-closing and mathml ints
authorJason Woofenden <jason@jasonwoof.com>
Thu, 24 Dec 2015 04:00:07 +0000 (23:00 -0500)
committerJason Woofenden <jason@jasonwoof.com>
Thu, 24 Dec 2015 04:00:07 +0000 (23:00 -0500)
parse-html.coffee

index 0e79a1d..2b8fda7 100644 (file)
@@ -112,7 +112,7 @@ class Node
                        @id = "#{++prev_node_id}"
        acknowledge_self_closing: ->
                if @token?
-                       @token.flag 'did_self_close'
+                       @token.flag 'did_self_close', true
                else
                        @flag 'did_self_close', true
        flag: (key, value = null) ->
@@ -649,10 +649,10 @@ parse_html = (args) ->
        standard_scopers = {
                applet: NS_HTML, caption: NS_HTML, html: NS_HTML, table: NS_HTML,
                td: NS_HTML, th: NS_HTML, marquee: NS_HTML, object: NS_HTML,
-               template: NS_HTML, mi: NS_MATHML,
+               template: NS_HTML,
 
-               mo: NS_MATHML, mn: NS_MATHML, ms: NS_MATHML, mtext: NS_MATHML,
-               'annotation-xml': NS_MATHML,
+               mi: NS_MATHML, mo: NS_MATHML, mn: NS_MATHML, ms: NS_MATHML,
+               mtext: NS_MATHML, 'annotation-xml': NS_MATHML,
 
                foreignObject: NS_SVG, desc: NS_SVG, title: NS_SVG
        }
@@ -1213,7 +1213,7 @@ parse_html = (args) ->
                        ins_mode t
                        return
                if is_mathml_text_integration_point(acn)
-                       if t.type is TYPE_START_TAG and (t.name is 'mglyph' or t.name is 'malignmark')
+                       if t.type is TYPE_START_TAG and not (t.name is 'mglyph' or t.name is 'malignmark')
                                ins_mode t
                                return
                        if t.type is TYPE_TEXT
@@ -2872,7 +2872,7 @@ parse_html = (args) ->
                        adjust_svg_attributes t
                adjust_foreign_attributes t
                insert_foreign_element t, acn.namespace
-               if t.flag 'self-closing' # FIXME CONTINUE this isn't getting set
+               if t.flag 'self-closing'
                        if t.name is 'script'
                                t.acknowledge_self_closing()
                                in_foreign_content_end_script()
@@ -2906,8 +2906,7 @@ parse_html = (args) ->
                                return
                        loop # is this safe?
                                open_els.shift()
-                               cn = open_els[0]
-                               if is_mathml_text_integration_point(cn) or is_html_integration(cn) or cn.namespace is NS_HTML
+                               if is_mathml_text_integration_point(open_els[0]) or is_html_integration(open_els[0]) or open_els[0].namespace is NS_HTML
                                        break
                        process_token t
                        return
@@ -2918,9 +2917,11 @@ parse_html = (args) ->
                        in_foreign_content_end_script()
                        return
                if t.type is TYPE_END_TAG
-                       if open_els[0].name.toLowerCase() isnt t.name
+                       i = 0
+                       node = open_els[i]
+                       if node.name.toLowerCase() isnt t.name
                                parse_error()
-                       for node in open_els
+                       loop
                                if node is open_els[open_els.length - 1]
                                        return
                                if node.name.toLowerCase() is t.name
@@ -2928,6 +2929,8 @@ parse_html = (args) ->
                                                el = open_els.shift()
                                                if el is node
                                                        return
+                               i += 1
+                               node = open_els[i]
                                if node.namespace is NS_HTML
                                        break
                        ins_mode t # explicitly call HTML insertion mode
@@ -3767,7 +3770,7 @@ parse_html = (args) ->
        tok_state_self_closing_start_tag = ->
                c = txt.charAt(cur++)
                if c is '>'
-                       tok_cur_tag.flag 'self-closing'
+                       tok_cur_tag.flag 'self-closing', true
                        tok_state = tok_state_data
                        return tok_cur_tag
                if c is ''