• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/router/APP-IPK/AiCloud-ipk/opt/etc/aicloud_UI/js/davclient.js/minisax.js/
1
2function SAXParser(){};SAXParser.prototype.initialize=function(xml,handler){this.xml=xml;this.handler=handler;this.handler.namespaceToPrefix={};this.starttagreg=/\<([^: \t\n]+:)?([a-zA-Z0-9\-_]+)([^\>]*?)(\/?)\>/m;this.endtagreg=/\<\/([^: \t\n]+:)?([a-zA-Z0-9\-_]+)[^\>]*\>/m;this.attrstringreg=/(([^:=]+:)?[^=]+=\"[^\"]*\")/m;this.attrreg=/([^=]*)=\"([^\"]*)\"/m;this._namespace_stack=[];this._current_nodename_stack=[];this._current_namespace_stack=[];};SAXParser.prototype.parse=function(){var xml=this._removeXMLdeclaration(this.xml);this.handler.startDocument();while(1){var chunk=this._getNextChunk(xml);if(chunk==''){break;};xml=xml.substr(chunk.length);if(chunk.charAt(0)=='<'){if(chunk.charAt(1)=='/'){this.handleEndTag(chunk);this._namespace_stack.pop();}else if(chunk.charAt(1)=='!'){chunk=string.deentitize(chunk);if(!chunk.indexOf('-->')==chunk.length-3){var more=xml.substr(0,xml.indexOf('-->'));xml=xml.substr(more.length);chunk+=more;};chunk=chunk.substr(4,chunk.length-7);this.handler.comment(chunk);}else{var singleton=false;if(chunk.charAt(chunk.length-2)=='/'){singleton=true;};this._pushNamespacesToStack();this.handleStartTag(chunk,singleton);if(singleton){this._namespace_stack.pop();};};}else{chunk=string.deentitize(chunk);this.handler.characters(chunk);};};this.handler.endDocument();};SAXParser.prototype.handleStartTag=function(tag,is_singleton){var match=this.starttagreg.exec(tag);if(!match){throw('Broken start tag: '+tag);};var prefix=match[1];var nodename=match[2];if(prefix){prefix=prefix.substr(0,prefix.length-1);}else{prefix='';};var attrs=this._splitAttributes(match[3]);attrs=this._getAndHandleNamespaceDeclarations(attrs);var attributes={};for(var i=0;i<attrs.length;i++){this.handleAttribute(attrs[i],attributes);};var namespace=this._namespace_stack[this._namespace_stack.length-1][prefix];this.handler.startElement(namespace,nodename,attributes);if(is_singleton){this.handler.endElement(namespace,nodename);}else{this._current_nodename_stack.push(nodename);this._current_namespace_stack.push(namespace);};};SAXParser.prototype.handleEndTag=function(tag){var match=this.endtagreg.exec(tag);if(!match){throw('Broken end tag: '+tag);};var prefix=match[1];var nodename=match[2];if(prefix){prefix=prefix.substr(0,prefix.length-1);}else{prefix='';};namespace=this._namespace_stack[this._namespace_stack.length-1][prefix];var current_nodename=this._current_nodename_stack.pop();var current_namespace=this._current_namespace_stack.pop();if(nodename!=current_nodename||namespace!=current_namespace){var exc='Ending ';if(namespace!=''){exc+=namespace+':';};exc+=nodename+' doesn\'t match opening ';if(current_namespace!=''){exc+=current_namespace+':';};exc+=current_nodename;throw(exc);}
3this.handler.endElement(namespace,nodename);};SAXParser.prototype.handleAttribute=function(attr,attributemapping){var match=this.attrreg.exec(attr);if(!match){throw('Broken attribute: '+attr);};var prefix='';var name=match[1];var lname=match[1];var value=string.deentitize(match[2]);if(name.indexOf(':')>-1){var tuple=name.split(':');prefix=tuple[0];lname=tuple[1];};var namespace='';if(prefix=='xml'){namespace='http://www.w3.org/XML/1998/namespace';if(!this.handler.namespaceToPrefix[namespace]){this.handler.namespaceToPrefix[namespace]=prefix;};}else if(prefix!=''){namespace=this._namespace_stack[this._namespace_stack.length-1][prefix];};if(!attributemapping[namespace]){attributemapping[namespace]={};};attributemapping[namespace][lname]=value;};SAXParser.prototype._removeXMLdeclaration=function(xml){var declreg=/\<\?[^>]*\?\>/g;xml=xml.replace(declreg,'');return xml;};SAXParser.prototype._getNextChunk=function(xml){if(xml.charAt(0)=='<'){return xml.substr(0,xml.indexOf('>')+1);}else{return xml.substr(0,xml.indexOf('<'));};};SAXParser.prototype._splitAttributes=function(attrstring){var attrs=string.strip(attrstring);var attrlist=[];while(1){var match=this.attrstringreg.exec(attrstring);if(!match){break;};attrlist.push(string.strip(match[1]));attrstring=attrstring.replace(match[0],'');};return attrlist;};SAXParser.prototype._getAndHandleNamespaceDeclarations=function(attrarray){var leftover=[];for(var i=0;i<attrarray.length;i++){var attr=attrarray[i];var match=this.attrreg.exec(attr);if(!match){throw('Broken attribute: '+attr);};if(match[1].indexOf('xmlns')==-1){leftover.push(attr);continue;};var nsname=match[1];var value=string.deentitize(match[2]);if(nsname.indexOf(':')>-1){nsname=nsname.split(':')[1];this._registerNamespace(value,nsname);}else{this._registerNamespace(value);};};return leftover;};SAXParser.prototype._registerNamespace=function(namespace,prefix){if(!prefix){prefix='';};if(!this.handler.namespaceToPrefix[namespace]){this.handler.namespaceToPrefix[namespace]=prefix;};this._namespace_stack[this._namespace_stack.length-1][prefix]=namespace;};SAXParser.prototype._pushNamespacesToStack=function(){var newnss={};for(var prefix in
4this._namespace_stack[this._namespace_stack.length-1]){newnss[prefix]=this._namespace_stack[this._namespace_stack.length-1][prefix];};this._namespace_stack.push(newnss);};function SAXHandler(){};SAXHandler.prototype.startDocument=function(){};SAXHandler.prototype.startElement=function(namespaceURI,nodeName,attributes){};SAXHandler.prototype.endElement=function(namespaceURI,nodeName){};SAXHandler.prototype.characters=function(chars){};SAXHandler.prototype.comment=function(comment){};SAXHandler.prototype.endDocument=function(){};