OSDN Git Service

Version 0.6.47, fix for IE5 & Opera7.x.
[pettanr/clientJs.git] / 0.6.x / js / dom / 19_XDomParser.js
index b384393..db0c897 100644 (file)
@@ -22,9 +22,6 @@ X.Dom.Parser = {
        // (and which close themselves)\r
        closeSelf : {colgroup:1,dd:1,dt:1,li:1,options:1,p:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1}, // add tbody\r
 \r
-       // todo:\r
-       plainText : { plaintext : 1, xmp : 1, textarea : 1 },\r
-\r
        sisters : {\r
                th : { td : 1 },\r
                td : { th : 1 },\r
@@ -47,7 +44,7 @@ X.Dom.Parser = {
        fillAttrs : X.Dom.Attr.noValue, //{checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};\r
 \r
        // Special Elements (can contain anything)\r
-       special : {script:1,style:1,plaintext : 1, xmp : 1, textarea : 1},\r
+       special : { script : 1, style : 1, plaintext : 1, xmp : 1, textarea : 1 },\r
        \r
        exec : function( html, handler, async ){\r
                var special        = X.Dom.Parser.special,\r
@@ -144,7 +141,7 @@ X.Dom.Parser = {
                        l     = html.length,\r
                        i     = 0,\r
                        attrs = [],\r
-                       tagName, empty,\r
+                       tagName, empty = false,\r
                        chr, start, attrName, quot, escape;\r
                \r
                while( i < l && phase < 9 ){\r
@@ -198,14 +195,15 @@ X.Dom.Parser = {
                                                ( ( phase = 3 ) && saveAttr( attrs, attrName, html.substring( start, i ) ) ) :\r
                                        ( chr === '>' ) ?\r
                                                ( ( phase = 9 ) && saveAttr( attrs, attrName, html.substring( start, i ) ) ) :\r
-                                       ( !escape && uri.indexOf( attrName ) === -1 && html.substr( i, 2 ) === '\/>' ) && // attr の val が uri で / で終わりかつ、未対応属性の場合\r
-                                               ( empty = true );\r
+                                       !escape && !uri[ attrName ] && ( empty = html.substr( i, 2 ) === '/>' ) && // attr の val が uri で / で終わりかつ、未対応属性の場合\r
+                                               ( phase = 9 );\r
                                        break;\r
                        };\r
                        escape = chr === '\\' && !escape; // \\\\ is not escape for "\r
                        ++i;\r
                };\r
                if( phase === 9 ){\r
+                       if( empty ) ++i;\r
                        if( X.Dom.Parser.parseStartTag( stack, last, handler, tagName, attrs, empty, i ) === false ) return false;\r
                        return i;\r
                };\r
@@ -273,7 +271,7 @@ X.Dom.Parser = {
                        };\r
                };\r
                X.Dom.Parser.closeSelf[ tagLower ] === 1 && ( last === tagName || ( sisters[ tagLower ] && sisters[ tagLower ][ last.toLowerCase() ] === 1 ) ) && parseEndTag( stack, handler, last );\r
-               unary = X.Dom.Parser.empty[ tagLower ] === 1 || !!unary;\r
+               unary = unary || X.Dom.Parser.empty[ tagName.toUpperCase() ];\r
                !unary && ( stack[ stack.length ] = tagName );\r
                \r
                return handler.start( tagName, attrs, unary, index );\r