OSDN Git Service

Version 0.6.102, rename files.
[pettanr/clientJs.git] / 0.6.x / js / 02_dom / 09_XDomParser.js
diff --git a/0.6.x/js/02_dom/09_XDomParser.js b/0.6.x/js/02_dom/09_XDomParser.js
deleted file mode 100644 (file)
index af11c4b..0000000
+++ /dev/null
@@ -1,396 +0,0 @@
-\r
-/*\r
- * Original code by Erik John Resig (ejohn.org)\r
- * http://ejohn.org/blog/pure-javascript-html-parser/\r
- *\r
- */\r
-\r
-var X_Dom_Parser = { // HTMLParser\r
-       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
-               \r
-               '\t' : 16, '\r\n' : 16, '\r' : 16, '\n' : 16, '\f' : 16, '\b' : 16, ' ' : 16\r
-       },\r
-       alphabets  : 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',\r
-       whiteSpace : '\t\r\n\f\b ',\r
-\r
-       // Empty Elements - HTML 4.01\r
-       empty : X_Dom_DTD_EMPTY,\r
-\r
-       // Block Elements - HTML 4.01\r
-       block : {ADDRESS:1,APPLET:1,BLOCKQUOTE:1,BUTTON:1,CENTER:1,DD:1,DEL:1,DIR:1,DIV:1,DL:1,DT:1,FIELDSET:1,FORM:1,FRAMESET:1,HR:1,IFRAME:1,INS:1,\r
-               ISINDEX:1,LI:1,MAP:1,MENU:1,NOFRAMES:1,NOSCRIPT:1,OBJECT:1,OL:1,P:1,PRE:1,SCRIPT:1,TABLE:1,TBODY:1,TD:1,TFOOT:1,TH:1,THEAD:1,TR:1,UL:1 },\r
-       // Inline Elements - HTML 4.01\r
-       inline : {A:1,ABBR:1,ACRONYM:1,APPLET:1,B:1,BASEFONT:1,BDO:1,BIG:1,BR:1,BUTTON:1,CITE:1,CODE:1,DEL:1,DFN:1,EM:1,FONT:1,I:1,IFRAME:1,IMG:1,\r
-               INPUT:1,INS:1,KBD:1,LABEL:1,MAP:1,OBJECT:1,Q:1,S:1,SAMP:1,SCRIPT:1,SELECT:1,SMALL:1,SPAN:1,STRIKE:1,STRONG:1,SUB:1,SUP:1,TEXTAREA:1,TT:1,U:1,VAR:1},\r
-       // Elements that you can, intentionally, leave open\r
-       // (and which close themselves)\r
-       closeSelf : {OLGROUP: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
-       sisters : {\r
-               TH : { TD : 1 },\r
-               TD : { TH : 1 },\r
-               DT : { DD : 1 },\r
-               DD : { DT : 1 },\r
-               COLGROUP : { CAPTION : 1 },\r
-               THEAD    : { CAPTION : 1, COLGROUP : 1 },\r
-               TFOOT    : { CAPTION : 1, COLGROUP : 1, THEAD : 1, TBODY : 1 },\r
-               TBODY    : { CAPTION : 1, COLGROUP : 1, THEAD : 1, TFOOT : 1 }\r
-       },\r
-       /*\r
-        * http://www.tohoho-web.com/html/tbody.htm\r
-        * HTML4.01では、ヘッダとフッタを先読みして表示するために、<tbody> よりも <tfoot> の方を先に記述しなくてはならないと定義されています。\r
-        * IE5.0 などでは HEAD → BODY → FOOT の順に表示するのですが、\r
-        * <tfoot> に未対応の古いブラウザでは、HEAD → FOOT → BODY の順に表示されてしまいます。\r
-        * また、HTML5 では、<tfoot> と <tbody> の順番はどちらでもよいことになりました。\r
-        */\r
-\r
-       // Attributes that have their values filled in disabled="disabled"\r
-       fillAttrs : X_Node_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
-       \r
-       exec : function( html, handler, async ){\r
-               var special        = X_Dom_Parser.special,\r
-                       //plainText      = X_Dom_Parser.plainText,\r
-                       startTime      = async && X_Timer_now(),\r
-                       _parseStartTag = X_Dom_Parser._parseStartTag,\r
-                       _parseEndTag   = X_Dom_Parser._parseEndTag,\r
-                       stack          = async ? async[ 1 ] : [],\r
-                       lastHtml       = html,\r
-                       chars, last, text, index;\r
-\r
-               while ( html ) {\r
-                       chars = true;\r
-                       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
-                                       handler.chars( html.substring( 0, index ) );\r
-                                       if( index = _parseEndTag( stack, handler, html ) ){\r
-                                               html = html.substring( index );\r
-                                       } else {\r
-                                               handler.chars( html );\r
-                                               html = '';\r
-                                       };\r
-                               } else {\r
-                                       handler.chars( html );\r
-                                       html = '';\r
-                               };\r
-                       } else {\r
-                               // Comment\r
-                               if ( html.indexOf("<!--") === 0 ) {\r
-                                       if ( 0 < ( index = html.indexOf("-->") ) ) {\r
-                                               handler.comment( html.substring( 4, index ) );\r
-                                               html = html.substring( index + 3 );\r
-                                               chars = false;\r
-                                       };\r
-       \r
-                               // end tag\r
-                               } else if ( html.indexOf("</") === 0 ) {\r
-                                       if ( 2 < ( index = _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
-                                               html  = html.substring( index );\r
-                                               chars = false;\r
-                                       } else\r
-                                       if( index === false ){\r
-                                               return;\r
-                                       };\r
-                               };\r
-\r
-                               if ( chars ) {\r
-                                       index = html.indexOf("<");\r
-                                       \r
-                                       text = index < 0 ? html : html.substring( 0, index );\r
-                                       html = index < 0 ? '' : html.substring( index );\r
-                                       \r
-                                       handler.chars( text );\r
-                               };\r
-\r
-                       };\r
-\r
-                       if( html === lastHtml ){\r
-                               handler.err( html );\r
-                               return;\r
-                       };\r
-                       \r
-                       if( async && startTime + 15 <= X_Timer_now() && html ){\r
-                               handler.progress( 1 - html.length / async[ 0 ] );\r
-                               X.Timer.once( 0, X_Dom_Parser.exec, [ html, handler, async ] );\r
-                               return;\r
-                       };\r
-                       \r
-                       lastHtml = html;\r
-               };\r
-               \r
-               // Clean up any remaining tags\r
-               X_Dom_Parser.parseEndTag( stack, handler );\r
-               \r
-               async && handler.complete();\r
-       },\r
-\r
-       _parseStartTag : function( stack, last, handler, html ){\r
-               var alphabets = X_Dom_Parser.CHARS,\r
-                       whiteSpace = X_Dom_Parser.CHARS,\r
-                       saveAttr = X_Dom_Parser.saveAttr,\r
-                       uri   = X_Dom_DTD_ATTR_VAL_IS_URI,\r
-                       phase = 0,\r
-                       l     = html.length,\r
-                       i     = 0,\r
-                       attrs = [],\r
-                       tagName, empty = false,\r
-                       chr, start, attrName, quot, escape;\r
-               \r
-               while( i < l && phase < 9 ){\r
-                       chr = html.charAt( i );\r
-                       switch( phase ){\r
-                               case 0 :\r
-                                       chr === '<' && ( ++phase );\r
-                                       break;\r
-                               case 1 : // タグ名の開始を待つ\r
-                                       ( alphabets[ chr ] & 3 ) && ( ++phase && ( start = i ) );\r
-                                       break;\r
-                               case 2 : // タグ名の終わりの空白文字を待つ\r
-                                       ( whiteSpace[ chr ] & 16 ) ?\r
-                                               ( ++phase && ( tagName = html.substring( start, i ) ) ) :\r
-                                       ( chr === '>' || ( empty = html.substr( i, 2 ) === '/>' ) ) &&\r
-                                               ( ( tagName = html.substring( start, i ) ) && ( phase = 9 ) );\r
-                                       break;\r
-                               case 3 : // 属性名の開始を待つ\r
-                                       ( alphabets[ chr ] & 3 ) ?\r
-                                               ( ++phase && ( start = i ) ) :\r
-                                       ( chr === '>' || ( empty = html.substr( i, 2 ) === '/>' ) ) &&\r
-                                               ( phase = 9 );\r
-                                       break;\r
-                               case 4 : // 属性名の終わりを待つ\r
-                                       chr === '=' ?\r
-                                               ( ( phase = 6 ) && ( attrName = html.substring( start, i ) ) ) :\r
-                                       ( whiteSpace[ chr ] & 16 ) &&\r
-                                               ( ( phase = 5 ) && ( attrName = html.substring( start, i ) ) );\r
-                                       break;\r
-                               case 5 : // 属性の = または次の属性または htmlタグの閉じ\r
-                                       ( whiteSpace[ chr ] & 16 ) ?// ie4 未対応の属性には cite = http:// となる\r
-                                               1 :\r
-                                       ( alphabets[ chr ] & 3 ) ?\r
-                                               ( ( phase = 4 ) && ( attrs[ attrs.length ] = attrName ) && ( start = i ) ) :\r
-                                       chr === '=' ?\r
-                                               ( phase = 6 ) :\r
-                                       ( chr === '>' || ( empty = html.substr( i, 2 ) === '/>' ) ) &&\r
-                                               ( ( phase = 9 ) && ( attrs[ attrs.length ] = attrName ) );\r
-                                       break;\r
-                               case 6 : // 属性値の開始 quot を待つ\r
-                                       ( chr === '"' || chr === "'" ) ?\r
-                                               ( ( phase = 7 ) && ( quot = chr ) && ( start = i + 1 ) ):\r
-                                       !( whiteSpace[ chr ] & 16 ) &&\r
-                                               ( ( phase = 8 ) && ( start = i ) ); // no quot\r
-                                       break;\r
-                               case 7 : //属性値の閉じ quot を待つ\r
-                                       !escape && ( chr === quot ) && ( phase = 3 ) && saveAttr( attrs, attrName, html.substring( start, i ) );\r
-                                       break;\r
-                               case 8 : //閉じ quot のない属性の値\r
-                                       ( whiteSpace[ chr ] & 16 ) ?\r
-                                               ( ( phase = 3 ) && saveAttr( attrs, attrName, html.substring( start, i ) ) ) :\r
-                                       ( chr === '>' ) ?\r
-                                               ( ( phase = 9 ) && saveAttr( attrs, attrName, html.substring( start, i ) ) ) :\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.toUpperCase(), attrs, empty, i ) === false ) return false;\r
-                       return i;\r
-               };\r
-               return 0; // error\r
-       },\r
-\r
-       _parseEndTag : function( stack, handler, html ){\r
-               var alphabets = X_Dom_Parser.CHARS,\r
-                       whiteSpace = X_Dom_Parser.CHARS,\r
-                       phase = 0,\r
-                       l     = html.length,\r
-                       i     = 0,\r
-                       tagName,\r
-                       chr, start;\r
-               \r
-               while( i < l && phase < 9 ){\r
-                       chr = html.charAt( i );\r
-                       switch( phase ){\r
-                               case 0 :\r
-                                       html.substr( i, 2 ) === '</' && ( ++phase && ++i );\r
-                                       break;\r
-                               case 1 : // タグ名の開始を待つ\r
-                                       ( alphabets[ chr ] & 3 ) && ( ++phase && ( start = i ) );\r
-                                       break;\r
-                               case 2 : // タグ名の終わりの空白文字を待つ\r
-                                       ( whiteSpace[ chr ] & 16 ) && ( ++phase );\r
-                                       ( chr === '>' ) && ( phase = 9 );\r
-                                       ( phase !== 2 ) && ( tagName = html.substring( start, i ) );\r
-                                       break;\r
-                               case 3 : // タグの終了を待つ\r
-                                       chr === '>' && ( phase = 9 );\r
-                                       break;\r
-                       };\r
-                       ++i;\r
-               };\r
-               if( phase === 9 ){\r
-                       X_Dom_Parser.parseEndTag( stack, handler, tagName.toUpperCase() );\r
-                       return i;\r
-               };\r
-               return 0; // error\r
-       },\r
-\r
-       saveAttr : function( attrs, name, value ){\r
-               name  = name.toLowerCase();\r
-               value = X_Dom_Parser.fillAttrs[ name ] === 1 ? name : value;\r
-               attrs[ attrs.length ] = {\r
-                       name    : name,\r
-                       value   : value,\r
-                       escaped :\r
-                               value.indexOf( '"' ) !== -1 ?\r
-                                       value.split( '"' ).join( '\\"' ).split( '\\\\"' ).join( '\\"' ) :\r
-                                       value\r
-               };\r
-       },\r
-\r
-       parseStartTag : function( stack, last, handler, tagName, attrs, empty, index ) {\r
-               var inline   = X_Dom_Parser.inline,\r
-                       parseEndTag = X_Dom_Parser.parseEndTag,\r
-                       sisters  = X_Dom_Parser.sisters;\r
-               if ( X_Dom_Parser.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_Dom_Parser.closeSelf[ tagName ] === 1 && ( last === tagName || ( sisters[ tagName ] && sisters[ tagName ][ last ] === 1 ) ) && parseEndTag( stack, handler, last );\r
-               empty = empty || X_Dom_Parser.empty[ tagName ];\r
-               !empty && ( stack[ stack.length ] = tagName );\r
-               \r
-               return handler.start( tagName, attrs, empty, index );\r
-       },\r
-\r
-       parseEndTag : function( stack, handler, tagName ) {\r
-               var pos = 0, i = stack.length;\r
-               // If no tag name is provided, clean shop\r
-               \r
-               // Find the closest opened tag of the same type\r
-               if ( tagName )\r
-                       for ( pos = i; 0 <= pos; )\r
-                               if ( stack[ --pos ] === tagName )\r
-                                       break;\r
-               \r
-               if ( 0 <= pos ) {\r
-                       // Close all the open elements, up the stack\r
-                       for ( ; pos < i; )\r
-                               handler.end( stack[ --i ] );\r
-                       \r
-                       // Remove the open elements from the stack\r
-                       stack.length = pos;\r
-               };\r
-       }\r
-       \r
-};\r
-\r
-var X_HTMLParser_htmlStringToXNode = {\r
-       flat : null,\r
-       nest : [],\r
-       err : function( html ){\r
-               X_HTMLParser_htmlStringToXNode.flat.length = 0;\r
-               X_HTMLParser_htmlStringToXNode.ignoreError !== true && X.Logger.warn( 'X_Dom_Parser() error ' + html );\r
-       },\r
-       start : function( tagName, attrs, noChild, length ){\r
-               var xnode,\r
-                       nest   = X_HTMLParser_htmlStringToXNode.nest,\r
-                       flat   = X_HTMLParser_htmlStringToXNode.flat,\r
-                       l      = nest.length,\r
-                       attr, name, i, _attrs; //, toIndex;\r
-               if( l ){\r
-                       xnode = nest[ l - 1 ].create( tagName );\r
-               } else {\r
-                       xnode = flat[ flat.length ] = X.Dom.Node.create( tagName );\r
-               };\r
-               if( !noChild ) nest[ l ] = xnode;\r
-               if( i = attrs.length ){\r
-                       _attrs = {};\r
-                       for( ; i; ){\r
-                               if( attr = attrs[ --i ] ){\r
-                                       if( X.Type.isString( attr ) ){\r
-                                               name = attr;\r
-                                               _attrs[ name ] = true;\r
-                                       } else {\r
-                                               name = attr.name;\r
-                                               _attrs[ name ] = attr.escaped;\r
-                                       };\r
-                               };\r
-                       };\r
-                       xnode.attr( _attrs );\r
-               };\r
-       },\r
-       end : function(){\r
-               0 < X_HTMLParser_htmlStringToXNode.nest.length && ( --X_HTMLParser_htmlStringToXNode.nest.length );\r
-       },\r
-       chars : function( text ){\r
-               if( X_HTMLParser_htmlStringToXNode.nest.length ){\r
-                       X_HTMLParser_htmlStringToXNode.nest[ X_HTMLParser_htmlStringToXNode.nest.length - 1 ].createText( text );\r
-               } else {\r
-                       X_HTMLParser_htmlStringToXNode.flat[ X_HTMLParser_htmlStringToXNode.flat.length ] = X.Dom.Node.createText( text );\r
-               };\r
-       },\r
-       comment : X.emptyFunction\r
-};\r
-\r
-function X_HtmlParser_parse( html, ignoreError ){\r
-       var worker = X_HTMLParser_htmlStringToXNode, ret;\r
-       worker.flat = [];\r
-       worker.nest.length = 0;\r
-       worker.ignoreError = ignoreError;\r
-       X_Dom_Parser.exec( html, worker );\r
-       ret = worker.flat;\r
-       delete worker.flat;\r
-       return ret;\r
-};\r
-\r
-var X_HTMLParser_asyncHtmlStringToXNode = {\r
-       err : function( html ){\r
-               X_HTMLParser_htmlStringToXNode.err( html );\r
-               this.asyncDispatch( X.Event.ERROR );\r
-       },\r
-       start   : X_HTMLParser_htmlStringToXNode.start,\r
-       end     : X_HTMLParser_htmlStringToXNode.end,\r
-       chars   : X_HTMLParser_htmlStringToXNode.chars,\r
-       comment : X.emptyFunction,\r
-       \r
-       progress : function( pct ){\r
-               this.asyncDispatch( { type : X.Event.PROGRESS, percent : pct } );\r
-       },\r
-       complete : function(){\r
-               var ret = X_HTMLParser_htmlStringToXNode.flat;\r
-               delete X_HTMLParser_htmlStringToXNode.flat;\r
-               this.asyncDispatch( { type : X.Event.SUCCESS, xnodes : ret } );\r
-       }\r
-};\r
-\r
-function X_HTMLParser_asyncParse( html, ignoreError ){\r
-       var dispatcher = X.Class._override( new X.EventDispatcher(), X_HTMLParser_asyncHtmlStringToXNode ),\r
-               worker = X_HTMLParser_htmlStringToXNode;\r
-       dispatcher.listenOnce( X.Event.SUCCESS, dispatcher, dispatcher.kill );\r
-       worker.flat = [];\r
-       worker.nest.length = 0;\r
-       worker.ignoreError = ignoreError;\r
-       X_Dom_Parser.exec( html, dispatcher, [ html.length, [] ] );\r
-       return dispatcher;\r
-};\r