OSDN Git Service

Version 0.6.138, working X.UI.ScrollBox!, fix Node.prev & Node.next.
[pettanr/clientJs.git] / 0.6.x / js / 02_dom / 09_XHTMLParser.js
index 60b6d27..764ce5f 100644 (file)
@@ -8,7 +8,7 @@
 var X_HTMLParser_CHARS = {\r
                'A':1,'B':1,'C':1,'D':1,'E':1,'F':1,'G':1,'H':1,'I':1,'J':1,'K':1,'L':1,'M':1,'N':1,'O':1,'P':1,'Q':1,'R':1,'S':1,'T':1,'U':1,'V':1,'W':1,'X':1,'Y':1,'Z':1,\r
                'a':2,'b':2,'c':2,'d':2,'e':2,'f':2,'g':2,'h':2,'i':2,'j':2,'k':2,'l':2,'m':2,'n':2,'o':2,'p':2,'q':2,'r':2,'s':2,'t':2,'u':2,'v':2,'w':2,'x':2,'y':2,'z':2,\r
-               // "0" ': 4, "1" : 4, "2" : 4, "3" : 4, "4" : 4, "5" : 4, "6" : 4, "7" : 4, "8" : 4, "9" : 4, closure compiler で minify すると ie4 で error、eval使う\r
+               '!':1,// "0" ': 4, "1" : 4, "2" : 4, "3" : 4, "4" : 4, "5" : 4, "6" : 4, "7" : 4, "8" : 4, "9" : 4, closure compiler で minify すると ie4 で error、eval使う\r
                \r
                '\t' : 16, '\r\n' : 16, '\r' : 16, '\n' : 16, '\f' : 16, '\b' : 16, ' ' : 16\r
        },\r
@@ -55,8 +55,6 @@ var X_HTMLParser_CHARS = {
                var special        = X_HTMLParser_special,\r
                        //plainText      = X_HTMLParser_plainText,\r
                        startTime      = async && X_Timer_now(),\r
-                       _parseStartTag = X_HTMLParser__parseStartTag,\r
-                       _parseEndTag   = X_HTMLParser__parseEndTag,\r
                        stack          = async ? async[ 1 ] : [],\r
                        lastHtml       = html,\r
                        chars, last, text, index;\r
@@ -66,10 +64,10 @@ var X_HTMLParser_CHARS = {
                        last  = stack[ stack.length - 1 ];\r
                        \r
                        // Make sure we're not in a script or style element\r
-                       if ( last && special[ last ] === 1 ) {\r
-                               if( 0 <= ( index = html.toUpperCase().indexOf( '</' + last ) ) ){\r
+                       if ( last && special[ handler.isXML ? last.toUpperCase() : last ] === 1 ) {\r
+                               if( 0 <= ( index = html.toUpperCase().indexOf( '</' + ( handler.isXML ? last.toUpperCase() : last ) ) ) ){\r
                                        handler.chars( html.substring( 0, index ) );\r
-                                       if( index = _parseEndTag( stack, handler, html ) ){\r
+                                       if( index = X_HTMLParser__parseEndTag( stack, handler, html ) ){\r
                                                html = html.substring( index );\r
                                        } else {\r
                                                handler.chars( html );\r
@@ -90,14 +88,14 @@ var X_HTMLParser_CHARS = {
        \r
                                // end tag\r
                                } else if ( html.indexOf("</") === 0 ) {\r
-                                       if ( 2 < ( index = _parseEndTag( stack, handler, html ) ) ) {\r
+                                       if ( 2 < ( index = X_HTMLParser__parseEndTag( stack, handler, html ) ) ) {\r
                                                html = html.substring( index );\r
                                                chars = false;\r
                                        };\r
        \r
                                // start tag\r
                                } else if ( html.indexOf("<") === 0 ) {\r
-                                       if( index = _parseStartTag( stack, last, handler, html ) ){\r
+                                       if( index = X_HTMLParser__parseStartTag( stack, last, handler, html ) ){\r
                                                html  = html.substring( index );\r
                                                chars = false;\r
                                        } else\r
@@ -147,7 +145,7 @@ var X_HTMLParser_CHARS = {
                        i     = 0,\r
                        attrs = [],\r
                        tagName, empty = false,\r
-                       chr, start, attrName, quot, escape;\r
+                       chr, start, attrName, quot, escape, tagUpper;\r
                \r
                while( i < l && phase < 9 ){\r
                        chr = html.charAt( i );\r
@@ -209,7 +207,24 @@ var X_HTMLParser_CHARS = {
                };\r
                if( phase === 9 ){\r
                        if( empty ) ++i;\r
-                       if( X_HTMLParser_parseStartTag( stack, last, handler, tagName.toUpperCase(), attrs, empty, i ) === false ) return false;\r
+                       //if( X_HTMLParser_parseStartTag( stack, last, handler, tagName, attrs, empty, i ) === false ) return false;\r
+                       \r
+                       tagUpper = tagName.toUpperCase();\r
+                       \r
+                       if( !X_HTMLParser_skipFixNesting && X_HTMLParser_block[ tagUpper ] === 1 ){\r
+                               while( last && X_HTMLParser_inline[ handler.isXML ? last.toUpperCase() : last ] === 1 ){\r
+                                       X_HTMLParser_parseEndTag( stack, handler, last );\r
+                                       last = stack[ stack.length - 1 ];\r
+                               };\r
+                       };\r
+                       last && X_HTMLParser_closeSelf[ tagUpper ] === 1 &&\r
+                               ( last === tagName || ( X_HTMLParser_sisters[ tagUpper ] && X_HTMLParser_sisters[ tagUpper ][ handler.isXML ? last.toUpperCase() : last ] === 1 ) ) &&\r
+                                       X_HTMLParser_parseEndTag( stack, handler, last );\r
+                       empty = empty || X_Dom_DTD_EMPTY[ tagUpper ];\r
+                       !empty && ( stack[ stack.length ] = handler.isXML ? tagName : tagUpper );\r
+                       \r
+                       if( handler.start( handler.isXML ? tagName : tagUpper, attrs, empty, i ) === false ) return false;\r
+                       \r
                        return i;\r
                };\r
                return 0; // error\r
@@ -245,7 +260,7 @@ var X_HTMLParser_CHARS = {
                        ++i;\r
                };\r
                if( phase === 9 ){\r
-                       X_HTMLParser_parseEndTag( stack, handler, tagName.toUpperCase() );\r
+                       X_HTMLParser_parseEndTag( stack, handler, handler.isXML ? tagName : tagName.toUpperCase() );\r
                        return i;\r
                };\r
                return 0; // error\r
@@ -264,23 +279,6 @@ var X_HTMLParser_CHARS = {
                };\r
        };\r
 \r
-       function X_HTMLParser_parseStartTag( stack, last, handler, tagName, attrs, empty, index ) {\r
-               var inline   = X_HTMLParser_inline,\r
-                       parseEndTag = X_HTMLParser_parseEndTag,\r
-                       sisters  = X_HTMLParser_sisters;\r
-               if( !X_HTMLParser_skipFixNesting && X_HTMLParser_block[ tagName ] === 1 ){\r
-                       while( last && inline[ last ] === 1 ){\r
-                               parseEndTag( stack, handler, last );\r
-                               last = stack[ stack.length - 1 ];\r
-                       };\r
-               };\r
-               last && X_HTMLParser_closeSelf[ tagName ] === 1 && ( last === tagName || ( sisters[ tagName ] && sisters[ tagName ][ last ] === 1 ) ) && parseEndTag( stack, handler, last );\r
-               empty = empty || X_Dom_DTD_EMPTY[ tagName ];\r
-               !empty && ( stack[ stack.length ] = tagName );\r
-               \r
-               return handler.start( tagName, attrs, empty, index );\r
-       };\r
-\r
        function X_HTMLParser_parseEndTag( stack, handler, tagName ) {\r
                var pos = 0, i = stack.length;\r
                // If no tag name is provided, clean shop\r
@@ -304,6 +302,7 @@ var X_HTMLParser_CHARS = {
 var X_HTMLParser_htmlStringToXNode = {\r
        flat : null,\r
        nest : [],\r
+       isXML : false,\r
        err : function( html ){\r
                X_HTMLParser_htmlStringToXNode.flat.length = 0;\r
                !X_HTMLParser_htmlStringToXNode.ignoreError && X.Logger.warn( 'X_Dom_Parser() error ' + html );\r
@@ -361,6 +360,7 @@ function X_HtmlParser_parse( html, ignoreError ){
 };\r
 \r
 var X_HTMLParser_asyncHtmlStringToXNode = {\r
+       isXML : false,\r
        err : function( html ){\r
                X_HTMLParser_htmlStringToXNode.err( html );\r
                this[ 'asyncDispatch' ]( X_EVENT_ERROR );\r