JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
fix stuff after </html
[peach-html5-editor.git] / parse-html.coffee
index 9911bc0..0e79a1d 100644 (file)
@@ -340,14 +340,17 @@ special_elements = {
        h2:NS_HTML, h3:NS_HTML, h4:NS_HTML, h5:NS_HTML, h6:NS_HTML, head:NS_HTML,
        header:NS_HTML, hgroup:NS_HTML, hr:NS_HTML, html:NS_HTML, iframe:NS_HTML,
        img:NS_HTML, input:NS_HTML, isindex:NS_HTML, li:NS_HTML, link:NS_HTML,
-       listing:NS_HTML, main:NS_HTML, marquee:NS_HTML, meta:NS_HTML, nav:NS_HTML,
-       noembed:NS_HTML, noframes:NS_HTML, noscript:NS_HTML, object:NS_HTML,
-       ol:NS_HTML, p:NS_HTML, param:NS_HTML, plaintext:NS_HTML, pre:NS_HTML,
-       script:NS_HTML, section:NS_HTML, select:NS_HTML, source:NS_HTML,
-       style:NS_HTML, summary:NS_HTML, table:NS_HTML, tbody:NS_HTML, td:NS_HTML,
-       template:NS_HTML, textarea:NS_HTML, tfoot:NS_HTML, th:NS_HTML,
-       thead:NS_HTML, title:NS_HTML, tr:NS_HTML, track:NS_HTML, ul:NS_HTML,
-       wbr:NS_HTML, xmp:NS_HTML,
+       listing:NS_HTML, main:NS_HTML, marquee:NS_HTML,
+
+       menu:NS_HTML,menuitem:NS_HTML, # WATWG adds these
+
+       meta:NS_HTML, nav:NS_HTML, noembed:NS_HTML, noframes:NS_HTML,
+       noscript:NS_HTML, object:NS_HTML, ol:NS_HTML, p:NS_HTML, param:NS_HTML,
+       plaintext:NS_HTML, pre:NS_HTML, script:NS_HTML, section:NS_HTML,
+       select:NS_HTML, source:NS_HTML, style:NS_HTML, summary:NS_HTML,
+       table:NS_HTML, tbody:NS_HTML, td:NS_HTML, template:NS_HTML,
+       textarea:NS_HTML, tfoot:NS_HTML, th:NS_HTML, thead:NS_HTML, title:NS_HTML,
+       tr:NS_HTML, track:NS_HTML, ul:NS_HTML, wbr:NS_HTML, xmp:NS_HTML,
 
        # MathML:
        mi:NS_MATHML, mo:NS_MATHML, mn:NS_MATHML, ms:NS_MATHML, mtext:NS_MATHML,
@@ -517,6 +520,20 @@ svg_attribute_fixes = {
        ychannelselector: 'yChannelSelector'
        zoomandpan: 'zoomAndPan'
 }
+foreign_attr_fixes = {
+       'xlink:actuate': 'xlink actuate'
+       'xlink:arcrole': 'xlink arcrole'
+       'xlink:href': 'xlink href'
+       'xlink:role': 'xlink role'
+       'xlink:show': 'xlink show'
+       'xlink:title': 'xlink title'
+       'xlink:type': 'xlink type'
+       'xml:base': 'xml base'
+       'xml:lang': 'xml lang'
+       'xml:space': 'xml space'
+       'xmlns': 'xmlns'
+       'xmlns:xlink': 'xmlns xlink'
+}
 adjust_mathml_attributes = (t) ->
        for a in t.attrs_a
                if a[0] is 'definitionurl'
@@ -529,6 +546,9 @@ adjust_svg_attributes = (t) ->
        return
 adjust_foreign_attributes = (t) ->
        # fixfull
+       for a in t.attrs_a
+               if foreign_attr_fixes[a[0]]?
+                       a[0] = foreign_attr_fixes[a[0]]
        return
 
 # decode_named_char_ref()
@@ -2715,7 +2735,9 @@ parse_html = (args) ->
                        ins_mode_in_body t
                        return
                if t.type is TYPE_END_TAG and t.name is 'html'
-                       # fixfull fragment case
+                       if flag_fragment_parsing
+                               parse_error()
+                               return
                        ins_mode = ins_mode_after_after_body
                        return
                if t.type is TYPE_EOF
@@ -2809,6 +2831,7 @@ parse_html = (args) ->
                # Anything else
                parse_error()
                ins_mode = ins_mode_in_body
+               process_token t
                return
 
        # 8.2.5.4.23 http://www.w3.org/TR/html5/syntax.html#the-after-after-frameset-insertion-mode
@@ -2849,10 +2872,11 @@ parse_html = (args) ->
                        adjust_svg_attributes t
                adjust_foreign_attributes t
                insert_foreign_element t, acn.namespace
-               if t.flag 'self-closing'
+               if t.flag 'self-closing' # FIXME CONTINUE this isn't getting set
                        if t.name is 'script'
                                t.acknowledge_self_closing()
                                in_foreign_content_end_script()
+                               # fixfull
                        else
                                open_els.shift()
                                t.acknowledge_self_closing()