You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by sn...@apache.org on 2005/10/21 23:46:28 UTC

svn commit: r327589 [65/72] - in /incubator/roller/branches/roller_1.x: ./ contrib/ contrib/lib/ contrib/plugins/ contrib/plugins/src/ contrib/plugins/src/org/ contrib/plugins/src/org/roller/ contrib/plugins/src/org/roller/presentation/ contrib/plugins...

Added: incubator/roller/branches/roller_1.x/web/theme/scripts/classes/Element.js
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/web/theme/scripts/classes/Element.js?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/web/theme/scripts/classes/Element.js (added)
+++ incubator/roller/branches/roller_1.x/web/theme/scripts/classes/Element.js Fri Oct 21 14:27:36 2005
@@ -0,0 +1,101 @@
+/*
+ * Element.js
+ * An element node in an XML document
+ *
+ * Copyright (C) 2001 David A. Lindquist (dave@gazingus.org)
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+Element.prototype = new Node();
+Element.prototype.constructor = Element;
+  // Element : Node
+
+function Element( ownerDoc, name ) {
+  this.tagName = name;
+  
+  // inherited from Node
+  this.attributes = new NamedNodeMap();
+  this.childNodes = new NodeList();
+  this.nodeType = Node.ELEMENT_NODE;
+  this.nodeName = name;
+  this.ownerDocument = ownerDoc;
+}
+
+Element.prototype.getAttribute =
+function( name ) {
+  var attr = this.attributes.getNamedItem( name );
+  return ( attr == null ) ? "" : attr.getValue();
+}
+
+Element.prototype.getAttributeNode =
+function( name ) {
+  return this.attributes.getNamedItem( name );
+}
+
+Element.prototype.getElementsByTagName =
+function( tagName ) {
+  return new DeepNodeList( this, tagName );
+}
+
+Element.prototype.getTagName =
+function() {
+  return this.tagName;
+}
+
+Element.prototype.normalize =
+function() {
+  var child, next;
+  for ( child = this.getFirstChild(); child != null; child = next ) {
+    next = child.getNextSibling();
+    if ( child.getNodeType() == Node.TEXT_NODE ) {
+      if ( next != null && next.getNodeType() == Node.TEXT_NODE ) {
+        child.appendData( next.getNodeValue() );
+        this.removeChild( next );
+        next = child;
+      }
+      else {
+        if ( child.getNodeValue().length == 0 ) {
+          this.removeChild( child );
+        }
+      }
+    }
+    else if ( child.getNodeType() == Node.ELEMENT_NODE ) {
+      child.normalize();
+    }
+  }
+}
+
+Element.prototype.removeAttribute = 
+function( name ) {
+  this.attributes.removeNamedItem( name );
+}
+
+Element.prototype.removeAttributeNode =
+function( attr ) {
+  return this.attributes.removeNamedItem( attr.nodeName );
+}
+
+Element.prototype.setAttribute =
+function( name, value ) {
+  var attr = this.ownerDocument.createAttribute( name );
+  arrt.setValue( value );
+  this.attributes.setNamedItem( attr );
+}
+
+Element.prototype.setAttributeNode =
+function( attr ) {
+  return this.attributes.setNamedItem( attr );
+}
\ No newline at end of file

Added: incubator/roller/branches/roller_1.x/web/theme/scripts/classes/EntityReference.js
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/web/theme/scripts/classes/EntityReference.js?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/web/theme/scripts/classes/EntityReference.js (added)
+++ incubator/roller/branches/roller_1.x/web/theme/scripts/classes/EntityReference.js Fri Oct 21 14:27:36 2005
@@ -0,0 +1,32 @@
+/*
+ * EntityReference.js
+ * An entity reference node in a DTD of an XML document
+ *
+ * Copyright (C) 2001 David A. Lindquist (dave@gazingus.org)
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+EntityReference.prototype = new Node();
+EntityReference.prototype.constructor = EntityReference;
+  // EntityReference : Node
+
+function EntityReference( ownerDoc, name ) {
+  
+  // inherited from Node
+  this.nodeName = name;
+  this.nodeType = Node.ENTITY_REFERENCE_NODE;
+  this.ownerDocument = ownerDoc;
+}
\ No newline at end of file

Added: incubator/roller/branches/roller_1.x/web/theme/scripts/classes/NamedNodeMap.js
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/web/theme/scripts/classes/NamedNodeMap.js?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/web/theme/scripts/classes/NamedNodeMap.js (added)
+++ incubator/roller/branches/roller_1.x/web/theme/scripts/classes/NamedNodeMap.js Fri Oct 21 14:27:36 2005
@@ -0,0 +1,74 @@
+/*
+ * NamedNodeMap.js
+ * A collection of nodes accessible by name in an XML document
+ *
+ * Copyright (C) 2001 David A. Lindquist (dave@gazingus.org)
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+function NamedNodeMap() {
+  this.length = 0;
+}
+
+NamedNodeMap.prototype.getLength =
+function() {
+  return this.length;
+}
+
+NamedNodeMap.prototype.getNamedItem =
+function( name ) {
+  return ( this[ name ] || null );
+}
+
+NamedNodeMap.prototype.item =
+function( index ) {
+  var item;
+  item = ( index < 0 ) ? this[ this.length + index ]
+                       : this[ index ];
+  return ( item || null );
+}
+
+NamedNodeMap.prototype.removeNamedItem =
+function( name ) {
+  var removed = this[ name ];
+
+  if ( !removed ) {
+    return null;
+  }
+
+  delete this[ name ];
+  for ( var i = 0; i < this.length - 1; i++ ) {
+    if ( !this[i] ) {
+      this[i] = this[ i + 1 ];
+      delete this[ i + 1 ];
+    }
+  }
+  this.length--;
+  return removed;
+}
+
+NamedNodeMap.prototype.setNamedItem =
+function( node ) {
+  var nodeName = node.getNodeName();
+  var item = this.getNamedItem( nodeName );
+  this[ nodeName ] = node;
+  
+  if ( item == null ) {
+    this[ this.length++ ] = node;
+  }
+  
+  return item;
+}
\ No newline at end of file

Added: incubator/roller/branches/roller_1.x/web/theme/scripts/classes/Node.js
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/web/theme/scripts/classes/Node.js?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/web/theme/scripts/classes/Node.js (added)
+++ incubator/roller/branches/roller_1.x/web/theme/scripts/classes/Node.js Fri Oct 21 14:27:36 2005
@@ -0,0 +1,152 @@
+/*
+ * Attr.js
+ * An attribute node in an XML document
+ *
+ * Copyright (C) 2001 David A. Lindquist (dave@gazingus.org)
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+Node.ELEMENT_NODE                =  1;
+Node.ATTRIBUTE_NODE              =  2;
+Node.TEXT_NODE                   =  3;
+Node.CDATA_SECTION_NODE          =  4;
+Node.ENTITY_REFERENCE_NODE       =  5;
+Node.ENTITY_NODE                 =  6; // not used
+Node.PROCESSING_INSTRUCTION_NODE =  7;
+Node.COMMENT_NODE                =  8;
+Node.DOCUMENT_NODE               =  9;
+Node.DOCUMENT_TYPE_NODE          = 10;
+Node.DOCUMENT_FRAGMENT_NODE      = 11;
+Node.NOTATION_NODE               = 12; // not used
+
+function Node() {
+  this.attributes = null;
+  this.childNodes = new NodeList();
+  this.firstChild = null
+  this.lastChild = null;
+  this.nextSibling = null;
+  this.nodeName = null;
+  this.nodeType = null;
+  this.nodeValue = null;
+  this.ownerDocument = null;
+  this.parentNode = null;
+  this.previousSibling = null;
+}
+
+Node.prototype.getAttributes = function() { return this.attributes; }
+Node.prototype.getChildNodes = function() { return this.childNodes; }
+Node.prototype.getFirstChild = function() { return this.firstChild; }
+Node.prototype.getLastChild = function() { return this.lastChild; }
+Node.prototype.getNextSibling = function() { return this.nextSibling; }
+Node.prototype.getNodeName = function() { return this.nodeName; }
+Node.prototype.getNodeType = function() { return this.nodeType; }
+Node.prototype.getNodeValue = function() { return this.nodeValue; }
+Node.prototype.getOwnerDocument = function() { return this.ownerDocument; }
+Node.prototype.getParentNode = function() { return this.parentNode; }
+Node.prototype.getPreviousSibling = function() { return this.previousSibling; }
+
+Node.prototype.setNodeValue =
+function() {
+  // Default behavior is to do nothing;
+  // overridden in some subclasses
+}
+
+Node.prototype.appendChild =
+function( childNode ) {
+  if ( this.nodeType == Node.ELEMENT_NODE ||
+       this.nodeType == Node.ATTRIBUTE_NODE ||
+       this.nodeType == Node.DOCUMENT_NODE ||
+       this.nodeType == Node.DOCUMENT_FRAGMENT_NODE ) {
+    this.childNodes.add( childNode );
+  }
+  else {
+    // :REVISIT: change to DOMException
+    throw new ParseError( "Cannot append child node" );
+  }
+
+  if ( this.ownerDocument != childNode.ownerDocument ) {
+    // :REVISIT: change to DOMException
+    throw new ParseError( "Cannot append child to this document" );
+  }
+  
+  if ( this.childNodes.length == 1 ) {
+    this.firstChild = childNode;
+  }
+
+  this.lastChild = childNode;
+  childNode.parentNode = this;
+  
+  var prevSibling = this.childNodes.item( -2 );
+  childNode.previousSibling = prevSibling;
+  
+  if ( prevSibling != null ) {
+    prevSibling.nextSibling = childNode;
+  }
+}
+
+Node.prototype.cloneNode =
+function( deep ) {
+  // :REVISIT: change to DOMException
+  throw new ParseError( "Not implemented" );
+}
+
+Node.prototype.hasChildNodes =
+function() {
+  return ( this.childNodes.length > 0 );
+}
+
+Node.prototype.insertBefore =
+function( newChild, refChild ) {
+  var currentChildren = this.childNodes;
+  this.childNodes = new NodeList();
+  for ( var i = 0; i < currentChildren.length; ) {
+    var child = currentChildren.item(i);
+    if ( child == refChild && refChild != null ) {
+      this.appendChild( newChild );
+      refChild = null;
+    }
+    else {
+      this.appendChild( child );
+      i++;
+    }
+  }
+}
+
+Node.prototype.removeChild =
+function( oldChild ) {
+  var currentChildren = this.childNodes;
+  this.childNodes = new NodeList();
+  for ( var i = 0; i < currentChildren.length; i++ ) {
+    var child = currentChildren.item(i)
+    if ( child != oldChild ) {
+      this.appendChild( child );
+    }
+  }
+}
+
+Node.prototype.replaceChild =
+function( newChild, oldChild ) {
+  var oldChildren = this.childNodes;
+  this.childNodes = new NodeList();
+  for ( var i = 0; i < oldChildren.length; i++ ) {
+    if ( oldChildren.item(i) == oldChild ) {
+      this.appendChild( newChild );
+    }
+    else {
+      this.appendChild( oldChild );
+    }
+  }
+}
\ No newline at end of file

Added: incubator/roller/branches/roller_1.x/web/theme/scripts/classes/NodeList.js
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/web/theme/scripts/classes/NodeList.js?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/web/theme/scripts/classes/NodeList.js (added)
+++ incubator/roller/branches/roller_1.x/web/theme/scripts/classes/NodeList.js Fri Oct 21 14:27:36 2005
@@ -0,0 +1,42 @@
+/*
+ * NodeList.js
+ * A list of nodes nested at the same level in an XML document
+ *
+ * Copyright (C) 2001 David A. Lindquist (dave@gazingus.org)
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+function NodeList() {
+  this.length = 0;
+}
+
+NodeList.prototype.getLength =
+function() {
+  return this.length;
+}
+
+NodeList.prototype.item =
+function( index ) {
+  var item;
+  item = ( index < 0 ) ? this[ this.length + index ]
+                       : this[ index ];
+  return ( item || null );
+}
+
+NodeList.prototype.add =
+function( node ) {
+  this[ this.length++ ] = node;
+}
\ No newline at end of file

Added: incubator/roller/branches/roller_1.x/web/theme/scripts/classes/ParseError.js
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/web/theme/scripts/classes/ParseError.js?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/web/theme/scripts/classes/ParseError.js (added)
+++ incubator/roller/branches/roller_1.x/web/theme/scripts/classes/ParseError.js Fri Oct 21 14:27:36 2005
@@ -0,0 +1,28 @@
+/*
+ * ParseError.js
+ * An exception that can occur while parsing an XML document
+ *
+ * Copyright (C) 2001 David A. Lindquist (dave@gazingus.org)
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+ParseError.prototype = new Error();
+ParseError.prototype.constructor = ParseError;
+  // ParseError : Error
+
+function ParseError( message ) {
+  this.message = message;
+}
\ No newline at end of file

Added: incubator/roller/branches/roller_1.x/web/theme/scripts/classes/ProcessingInstruction.js
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/web/theme/scripts/classes/ProcessingInstruction.js?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/web/theme/scripts/classes/ProcessingInstruction.js (added)
+++ incubator/roller/branches/roller_1.x/web/theme/scripts/classes/ProcessingInstruction.js Fri Oct 21 14:27:36 2005
@@ -0,0 +1,56 @@
+/*
+ * ProcessingInstruction.js
+ * An processing instruction node in an XML document
+ *
+ * Copyright (C) 2001 David A. Lindquist (dave@gazingus.org)
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+ProcessingInstruction.prototype = new Node();
+ProcessingInstruction.prototype.constructor = ProcessingInstruction;
+  // ProcessingInstruction : Node
+
+function ProcessingInstruction( ownerDoc, target, data ) {
+  this.target = target;
+  this.data = data;
+  
+  // inherited from Node
+  this.nodeName = target;
+  this.nodeType = Node.PROCESSING_INSTRUCTION_NODE;
+  this.nodeValue = data;
+  this.ownerDocument = ownerDoc;
+}
+
+ProcessingInstruction.prototype.getData =
+function() {
+  return this.data;
+}
+
+ProcessingInstruction.prototype.getTarget =
+function() {
+  return this.target;
+}
+
+ProcessingInstruction.prototype.setData =
+function( data ) {
+  this.setNodeValue( data );
+}
+
+ProcessingInstruction.prototype.setNodeValue =
+function( value ) {
+  this.data = data;
+  this.nodeValue = data;
+}
\ No newline at end of file

Added: incubator/roller/branches/roller_1.x/web/theme/scripts/classes/Text.js
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/web/theme/scripts/classes/Text.js?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/web/theme/scripts/classes/Text.js (added)
+++ incubator/roller/branches/roller_1.x/web/theme/scripts/classes/Text.js Fri Oct 21 14:27:36 2005
@@ -0,0 +1,51 @@
+/*
+ * Text.js
+ * An text node in an XML document
+ *
+ * Copyright (C) 2001 David A. Lindquist (dave@gazingus.org)
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+Text.prototype = new CharacterData();
+Text.prototype.constructor = Text;
+  // Text : CharacterData
+
+function Text( ownerDoc, data ) {
+  // inherited from CharacterData
+  this.data = data;
+  
+  // inherited from CharacterData : Node
+  this.nodeName = "#text";
+  this.nodeType = Node.TEXT_NODE;
+  this.nodeValue = data;
+  this.ownerDocument = ownerDoc;
+}
+
+Text.prototype.splitText =
+function( offset ) {
+  // :REVISIT:
+  // check for index out of bounds condition
+  
+  var newText =
+    this.getOwnerDocument().createTextNode( this.data.substring( offset ) );
+  
+  var parentNode = this.getParentNode();
+  if ( parentNode != null ) {
+    parentNode.insetBefore( newText, this.nextSibling );
+  }
+  
+  return newText;
+}
\ No newline at end of file

Added: incubator/roller/branches/roller_1.x/web/theme/scripts/classes/XMLParser.js
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/web/theme/scripts/classes/XMLParser.js?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/web/theme/scripts/classes/XMLParser.js (added)
+++ incubator/roller/branches/roller_1.x/web/theme/scripts/classes/XMLParser.js Fri Oct 21 14:27:36 2005
@@ -0,0 +1,429 @@
+/*
+ * XMLParser.js
+ * A regular expression based XML parser
+ *
+ * Copyright (C) 2001 David A. Lindquist (dave@gazingus.org)
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+XMLParser.VERSION = 1.0;
+
+function XMLParser() {
+  this.doc = new Document();
+  this.xml = null;
+
+  this.openedTags = new Array();
+  this.contextNodes = new Array( this.doc );
+}
+
+XMLParser.prototype.parse =
+function( xml ) {
+  this.xml = xml.trim();
+  this.processProlog();
+  this.processRootElement();
+  this.processMisc();
+
+  if ( this.xml.length != 0 ) {
+    throw( new ParseError( "Illegal construct in XML document" ) );
+  }
+}
+
+XMLParser.prototype.processProlog =
+function() {
+  this.processXmlDecl();
+  this.processMisc();
+  this.processDoctypeDecl();
+  this.processMisc();
+}
+
+XMLParser.prototype.processRootElement =
+function() {
+  var matches;
+  
+  if ( matches = this.xml.match( RegExp.$STag ) ) {
+    this.processSTag( matches );
+    this.xml = this.xml.substring( matches[0].length );
+    this.processContent();
+  }
+  else if ( matches = this.xml.match( RegExp.$EmptyElemTag ) ) {
+    this.processEmptyElemTag( matches );
+    this.xml = this.xml.substring( matches[0].length );
+  }
+  else {
+    throw( new ParseError( "Root element not found" ) );
+  }
+}
+
+XMLParser.prototype.processMisc =
+function() {
+  var matches;
+  
+  while ( RegExp.$Misc.test( this.xml ) ) {
+    
+      // white space
+    if ( matches = this.xml.match( RegExp.$S ) ) {
+      ;
+    }
+      // comment
+    else if ( matches = this.xml.match( RegExp.$Comment ) ) {
+      var comment = this.doc.createComment( matches[1] );
+      
+      this.doc.appendChild( comment );
+    }
+      // processing instruction
+    else if ( matches = this.xml.match( RegExp.$PI ) ) {
+      var target = matches[1];
+      var data = matches[3];
+      var pi = this.doc.createProcessingInstruction( target, data );
+      
+      this.doc.appendChild( pi );
+    }
+      // unknown construct
+    else {
+      throw( new ParseError( "Illegal construct in XML document" ) );
+    }
+    
+    this.xml = this.xml.substring( matches[0].length );
+  }
+}
+
+XMLParser.prototype.processContent =
+function() {
+  var matches;
+
+  while ( this.openedTags.length != 0  ) {
+
+      // start tag
+    if ( matches = this.xml.match( RegExp.$STag ) ) {
+      this.processSTag( matches );
+    }
+      // end tag
+    else if ( matches = this.xml.match( RegExp.$ETag ) ) {
+      this.processETag( matches );
+    }
+      // empty element
+    else if ( matches = this.xml.match( RegExp.$EmptyElemTag ) ) {
+      this.processEmptyElemTag( matches );
+    }
+      // character data
+    else if ( matches = this.xml.match( RegExp.$CharData ) ) {
+      this.processCharData( matches );
+    }
+      // entity reference
+    else if ( matches = this.xml.match( RegExp.$Reference ) ) {
+      this.processReference( matches );
+    }
+      // CDATA section
+    else if ( matches = this.xml.match( RegExp.$CDSect ) ) {
+      this.processCDSect( matches );
+    }
+      // processing instruction
+    else if ( matches = this.xml.match( RegExp.$PI ) ) {
+      this.processPI( matches );
+    }
+      // comment
+    else if ( matches = this.xml.match( RegExp.$Comment ) ) {
+      this.processComment( matches );
+    }
+      // unknown construct
+    else {
+      throw( new ParseError( "Illegal construct in XML document" ) );
+    }
+
+    this.xml = this.xml.substring( matches[0].length );
+  }
+}
+
+XMLParser.prototype.processAttributes =
+function( attString ) {
+  var matches;
+
+  while ( matches = attString.match( RegExp.$Attribute ) ) {
+    var name = matches[1];
+    var value = matches[2].removeQuotes();
+    var attr = this.doc.createAttribute( name );
+    var currentContext = this.contextNodes.lastItem();
+
+    attr.setValue( value );
+    
+    attString = attString.substring( matches[0].length ).trim();
+    currentContext.attributes.setNamedItem( attr );
+  }
+}
+
+XMLParser.prototype.processXmlDecl =
+function() {
+  var matches;
+
+  if ( matches = this.xml.match( RegExp.$XMLDecl ) ) {
+    this.xml = this.xml.substring( matches[0].length );
+  }
+}
+
+XMLParser.prototype.processDoctypeDecl =
+function() {
+  var matches;
+  
+  if ( matches = this.xml.match( RegExp.$doctypedecl ) ) {
+    var name = matches[1];
+    
+    var doctype = new DocumentType( this.doc, name );
+    this.doc.appendChild( doctype );
+    this.doc.doctype = doctype;
+    
+    this.xml = this.xml.substring( matches[0].length );
+  }
+}
+
+XMLParser.prototype.processSTag =
+function( matches ) {
+  var element = this.doc.createElement( matches[1] );
+  var attString = matches[2];
+  
+  this.openedTags.push( matches[1] );
+  this.addNode( element );
+  
+  if ( attString ) {
+    this.processAttributes( attString.trim() );
+  }
+}
+
+XMLParser.prototype.processETag =
+function( matches ) {
+  this.contextNodes.pop();
+  
+  if ( this.openedTags.pop() != matches[1] ) {
+    throw( new ParseError( "End tag does not match opening tag" ) );
+  }
+}
+
+XMLParser.prototype.processEmptyElemTag =
+function( matches ) {
+  var element = this.doc.createElement( matches[1] );
+  var attString = matches[2];
+  
+  this.addNode( element );
+  
+  if ( attString ) {
+    this.processAttributes( attString.trim() );
+  }
+  
+  this.contextNodes.pop();
+}
+
+XMLParser.prototype.processCharData =
+function( matches ) {
+  if ( matches[0].trim() != "" ) {
+    var text = this.doc.createTextNode( matches[0] );
+    this.addNode( text );
+  }
+}
+
+XMLParser.prototype.processReference =
+function( matches ) {
+  var reference = this.doc.createEntityReference( matches[0] );
+  this.addNode( reference );
+}
+
+XMLParser.prototype.processCDSect =
+function( matches ) {
+  var cdsect = this.doc.createCDATASection( matches[1] );
+  this.addNode( cdsect );
+}
+
+XMLParser.prototype.processPI =
+function( matches ) {
+  var target = matches[1];
+  var data = matches[3];
+  var pi = this.doc.createProcessingInstruction( target, data );
+  this.addNode( pi );
+}
+
+XMLParser.prototype.processComment =
+function( matches ) {
+  var comment = this.doc.createComment( matches[1] );
+  this.addNode( comment );
+}
+
+XMLParser.prototype.addNode =
+function( node ) {
+  var currentContext = this.contextNodes.lastItem();
+  currentContext.appendChild( node );
+  
+  if ( node.nodeType == Node.ELEMENT_NODE ) {
+    var contextNode = currentContext.childNodes.item( -1 );
+    this.contextNodes.push( contextNode );
+    
+    if ( !this.doc.documentElement ) {
+      this.doc.documentElement = this.contextNodes.lastItem();
+    }
+  }
+}
+
+/// Utilities //////////////////////////////////////////////////////////////////
+
+/*
+ * Utility. Removes leading and trailing white space
+ * from a string
+ */
+String.prototype.trim =
+function() {
+  return this.replace( /^[ \n\r\t]+|[ \n\r\t]+$/g, "" );
+}
+
+/*
+ * Utility. Like pop(), but does not affect the length
+ * of the array
+ */
+Array.prototype.lastItem =
+function() {
+  return this[ this.length - 1 ];
+}
+
+String.prototype.removeQuotes =
+function() {
+  return this.replace( /^['"]|['"]$/g, "" );
+}
+
+/*
+ * Utility. Translates a string into a regex. Replaces identifiers
+ * (beginning with "$") with corresponding regex fragment
+ */
+String.prototype.resolve =
+function() {
+  var resolved = this;
+  var regex = /(\$[a-zA-Z0-9]+)/;
+  
+  while ( regex.test( resolved ) ) {
+    resolved = resolved.replace( RegExp.$1, String[ RegExp.$1 ] );
+  }
+  
+  return resolved.replace( / /g,"" );
+}
+
+/// Productions ////////////////////////////////////////////////////////////////
+
+// Character Range
+String.$Char          = "(?: \\u0009 | \\u000A | \\u000D | " +
+                        "[\\u0020-\\uD7FF] | [\\uE000-\\uFFFD] | " +
+                        "[\\u10000-\\u10FFFF] )";
+
+// White Space
+String.$S             = "(?: (?: \\u0020 | \\u0009 | \\u000D | \\u000A )+ )";
+
+// Names and matches
+String.$NameChar      = "(?: $Letter | $Digit | \\. | \\- | _ | : | " +
+                        "$CombiningChar | $Extender )";
+String.$Name          = "(?: $Letter | _ | : ) $NameChar*";
+
+// Literals
+String.$AttValue      = "(?: \" (?: [^<&\"] | $Reference )* \" ) | " + 
+                        "(?: ' (?: [^<&'] | $Reference )* ' )";
+String.$SystemLiteral = "(?: (?: \" [^\"]* \") | (?: ' [^']* '))";
+String.$PubidLiteral  = "(?: (?: \" $PubidChar* \") | " +
+                        "(?: ' (?: (?!')$PubidChar)* '))";
+String.$PubidChar     = "(?: \\u0020 | \\u000D | \\u000A | [a-zA-Z0-9] | " +
+                        "[-'()+,./:=?;!*#@$_%])";
+
+// Character Data
+//String.$CharData    = "(?![^<&]*]]>[^<&]*)[^<&]*"; // :REVISIT:
+String.$CharData      = "[^<&]+";
+
+// Comments
+String.$Comment       = "<!-- ( (?: (?: (?!- ) $Char ) | " +
+                        "(?: - (?: (?!- ) $Char ) ) )* ) -->";
+
+// Processing Instructions
+String.$PI            = "<\\? ( $PITarget ) ( $S $Char*? )? \\?>";
+String.$PITarget      = "(?: (?: \\b( $Letter | _ | : ) " +
+                        "(?: $NameChar ){0,1}\\b ) | " +
+                        "(?: (?! [Xx][Mm][Ll] ) (?: $Letter | _ | : ) " +
+                        "(?: $NameChar ){2} | (?: $Letter | _ | : ) " +
+                        "(?: $NameChar ){3,} ) )";
+
+// CDATA Sections
+String.$CDSect        = "<!\\[CDATA\\[ ( $Char*? ) ]]>";
+
+// Prolog
+String.$prolog        = "(?: $XMLDecl? $Misc* (?: $doctypedecl $Misc* )? )";
+String.$XMLDecl       = "<\\?xml $VersionInfo $EncodingDecl? " +
+                        "$SDDecl? $S? \\?>";
+String.$VersionInfo   = "(?: $S version $Eq ( ' $VersionNum ' | " +
+                        "\" $VersionNum \" ) )";
+String.$Eq            = "(?: $S? = $S? )";
+String.$VersionNum    = "(?: (?: [a-zA-Z0-9_.:] | - )+ )";
+String.$Misc          = "(?: $Comment | $PI | $S )";
+
+// Document Type Definition
+String.$doctypedecl   = "<!DOCTYPE $S ( $Name ) (?: $S $ExternalID)? $S? " +
+                        "(?: \\[ [^]]* \\] )? $S? >";
+
+// Standalone Document Declaration
+String.$SDDecl        = "(?: $S standalone $Eq ( (?: \"(?: yes|no )\" ) | " +
+                        "(?: '(?: yes|no)' ) ) )";
+
+// Start-tag
+String.$STag          = "< ( $Name ) ( (?: $S $Attribute )* ) $S? >";
+String.$Attribute     = "( $Name ) $Eq ( $AttValue )";
+
+// End-tag
+String.$ETag          = "</ ( $Name ) $S? >";
+
+// Tags for Empty Elements
+String.$EmptyElemTag  = "< ( $Name ) ( (?: $S $Attribute )* ) $S? />";
+
+// Character Reference
+String.$CharRef       = "(?: &#[0-9]+; | &#x[0-9a-fA-F]+; )";
+
+// Entity Reference
+String.$Reference     = "(?: $EntityRef | $CharRef )";
+String.$EntityRef     = "& $Name ;";
+
+// External Entity Declaration
+String.$ExternalID    = "(?: (?: SYSTEM $S ( $SystemLiteral ) ) | " +
+                        "(?: PUBLIC $S ( $PubidLiteral ) $S " +
+                        "( $SystemLiteral ) ) )";
+
+// Encoding Declaration
+String.$EncodingDecl  = "(?: $S encoding $Eq ( ' $EncName ' | " +
+                        "\" $EncName \" ) )";
+String.$EncName       = "[A-Za-z](?: [A-Za-z0-9._]|- )*";
+
+// Characters
+String.$Letter        = "(?: $BaseChar | $Ideographic )";
+  if (Boolean.$I18N != true) { // if i18n.js is included
+String.$BaseChar      = "(?: [\\u0041-\\u005A] | [\\u0061-\\u007A] )";
+String.$Ideographic   = "\\u0000";
+String.$CombiningChar = "\\u0000";
+String.$Digit         = "[\\u0030-\\u0039]";
+String.$Extender      = "\\u0000";
+  }
+
+// compile regular expressions
+RegExp.$prolog       = new RegExp( "^" + String.$prolog.resolve() );
+RegExp.$XMLDecl      = new RegExp( "^" + String.$XMLDecl.resolve() );
+RegExp.$doctypedecl  = new RegExp( "^" + String.$doctypedecl.resolve() );
+RegExp.$STag         = new RegExp( "^" + String.$STag.resolve() );
+RegExp.$ETag         = new RegExp( "^" + String.$ETag.resolve() );
+RegExp.$EmptyElemTag = new RegExp( "^" + String.$EmptyElemTag.resolve() );
+RegExp.$Attribute    = new RegExp( "^" + String.$Attribute.resolve() );
+RegExp.$CDSect       = new RegExp( "^" + String.$CDSect.resolve() );
+RegExp.$CharData     = new RegExp( "^" + String.$CharData.resolve() );
+RegExp.$Reference    = new RegExp( "^" + String.$Reference.resolve() );
+RegExp.$PI           = new RegExp( "^" + String.$PI.resolve() );
+RegExp.$Comment      = new RegExp( "^" + String.$Comment.resolve() );
+RegExp.$Misc         = new RegExp( "^" + String.$Misc.resolve() );
+RegExp.$S            = new RegExp( "^" + String.$S.resolve() );
\ No newline at end of file

Added: incubator/roller/branches/roller_1.x/web/theme/scripts/demo.html
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/web/theme/scripts/demo.html?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/web/theme/scripts/demo.html (added)
+++ incubator/roller/branches/roller_1.x/web/theme/scripts/demo.html Fri Oct 21 14:27:36 2005
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+  <head>
+    <title>XML Parsing Demo</title>
+    <script type="text/javascript" src="xmlp.js"></script>
+    <script type="text/javascript">
+    <!--
+
+      function doParse() {
+        var parser = new XMLParser();
+        var form = document.forms[0];
+        var start, finish;
+        var doc = null;
+        
+        try {
+          start = new Date().getTime();
+          parser.parse(form.elements[0].value);
+          finish = new Date().getTime();
+          doc = parser.doc;
+        }
+        catch (e) {
+          alert("ERROR: " + e.message);
+        }
+
+        if (doc != null) {
+          form.rootElement.value = doc.getDocumentElement().getTagName();
+          form.elementCount.value = doc.getElementsByTagName("*").getLength();
+          form.hasDoctype.value = (doc.getDoctype() == null) ? "No" : "Yes";
+          form.parseTime.value = (Math.round((finish - start) / 10) / 100) + " sec.";
+        }
+      }
+
+    //-->
+    </script>
+  </head>
+  <body>
+    <form action="javascript:void(0)">
+      <p>
+        <textarea name="xml" id="xml" cols="75" rows="20">
+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;
+   &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
+&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;en&quot; lang=&quot;en&quot;&gt;
+  &lt;head&gt;
+    &lt;title&gt;Sample XHTML page&lt;/title&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+    &lt;p class=&quot;para&quot;&gt;
+      This is a sample paragraph.
+    &lt;/p&gt;
+  &lt;/body&gt;
+&lt;/html&gt;
+        </textarea><br />
+        <input type="button" value="Parse XML" onclick="doParse()" /><br />
+        <br />
+        Root element:<br />
+        <input type="text" name="rootElement" id="rootElement" readonly="readonly" /><br />
+        Number of elements:<br />
+        <input type="text" name="elementCount" id="elementCount" readonly="readonly" /><br />
+        Has DOCTYPE:<br />
+        <input type="text" name="hasDoctype" id="hasDoctype" readonly="readonly" /><br />
+        Parse time:<br />
+        <input type="text" name="parseTime" id="parseTime" readonly="readonly" /><br />
+        (try pasting larger strings of XML to see effect on parse time.)
+      </p>
+    </form>
+  </body>
+</html>

Added: incubator/roller/branches/roller_1.x/web/theme/scripts/i18n.js
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/web/theme/scripts/i18n.js?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/web/theme/scripts/i18n.js (added)
+++ incubator/roller/branches/roller_1.x/web/theme/scripts/i18n.js Fri Oct 21 14:27:36 2005
@@ -0,0 +1,366 @@
+/*
+ * i18n.js
+ * Unicode international characters allowed in an XML document
+ *
+ * NOTE: if international characters are needed, this file must be included
+ * BEFORE xmlp.js
+ *
+ * Copyright (C) 2001 David A. Lindquist (dave@gazingus.org)
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+Boolean.$I18N = true;
+
+String.$BaseChar = "("       +
+  "[\\u0041-\\u005A] | "     +
+  "[\\u0061-\\u007A] | "     +
+  "[\\u00C0-\\u00D6] | "     +
+  "[\\u00D8-\\u00F6] | "     +
+  "[\\u00F8-\\u00FF] | "     +
+  "[\\u0100-\\u0131] | "     +
+  "[\\u0134-\\u013E] | "     +
+  "[\\u0141-\\u0148] | "     +
+  "[\\u014A-\\u017E] | "     +
+  "[\\u0180-\\u01C3] | "     +
+  "[\\u01CD-\\u01F0] | "     +
+  "[\\u01F4-\\u01F5] | "     +
+  "[\\u01FA-\\u0217] | "     +
+  "[\\u0250-\\u02A8] | "     +
+  "[\\u02BB-\\u02C1] | "     +
+  "\\u0386 | "               +
+  "[\\u0388-\\u038A] | "     +
+  "\\u038C | "               +
+  "[\\u038E-\\u03A1] | "     +
+  "[\\u03A3-\\u03CE] | "     +
+  "[\\u03D0-\\u03D6] | "     +
+  "\\u03DA | "               +
+  "\\u03DC | "               +
+  "\\u03DE | "               +
+  "\\u03E0 | "               +
+  "[\\u03E2-\\u03F3] | "     +
+  "[\\u0401-\\u040C] | "     +
+  "[\\u040E-\\u044F] | "     +
+  "[\\u0451-\\u045C] | "     +
+  "[\\u045E-\\u0481] | "     +
+  "[\\u0490-\\u04C4] | "     +
+  "[\\u04C7-\\u04C8] | "     +
+  "[\\u04CB-\\u04CC] | "     +
+  "[\\u04D0-\\u04EB] | "     +
+  "[\\u04EE-\\u04F5] | "     +
+  "[\\u04F8-\\u04F9] | "     +
+  "[\\u0531-\\u0556] | "     +
+  "\\u0559 | "               +
+  "[\\u0561-\\u0586] | "     +
+  "[\\u05D0-\\u05EA] | "     +
+  "[\\u05F0-\\u05F2] | "     +
+  "[\\u0621-\\u063A] | "     +
+  "[\\u0641-\\u064A] | "     +
+  "[\\u0671-\\u06B7] | "     +
+  "[\\u06BA-\\u06BE] | "     +
+  "[\\u06C0-\\u06CE] | "     +
+  "[\\u06D0-\\u06D3] | "     +
+  "\\u06D5 | "               +
+  "[\\u06E5-\\u06E6] | "     +
+  "[\\u0905-\\u0939] | "     +
+  "\\u093D | "               +
+  "[\\u0958-\\u0961] | "     +
+  "[\\u0985-\\u098C] | "     +
+  "[\\u098F-\\u0990] | "     +
+  "[\\u0993-\\u09A8] | "     +
+  "[\\u09AA-\\u09B0] | "     +
+  "\\u09B2 | "               +
+  "[\\u09B6-\\u09B9] | "     +
+  "[\\u09DC-\\u09DD] | "     +
+  "[\\u09DF-\\u09E1] | "     +
+  "[\\u09F0-\\u09F1] | "     +
+  "[\\u0A05-\\u0A0A] | "     +
+  "[\\u0A0F-\\u0A10] | "     +
+  "[\\u0A13-\\u0A28] | "     +
+  "[\\u0A2A-\\u0A30] | "     +
+  "[\\u0A32-\\u0A33] | "     +
+  "[\\u0A35-\\u0A36] | "     +
+  "[\\u0A38-\\u0A39] | "     +
+  "[\\u0A59-\\u0A5C] | "     +
+  "\\u0A5E | "               +
+  "[\\u0A72-\\u0A74] | "     +
+  "[\\u0A85-\\u0A8B] | "     +
+  "\\u0A8D | "               +
+  "[\\u0A8F-\\u0A91] | "     +
+  "[\\u0A93-\\u0AA8] | "     +
+  "[\\u0AAA-\\u0AB0] | "     +
+  "[\\u0AB2-\\u0AB3] | "     +
+  "[\\u0AB5-\\u0AB9] | "     +
+  "\\u0ABD | "               +
+  "\\u0AE0 | "               +
+  "[\\u0B05-\\u0B0C] | "     +
+  "[\\u0B0F-\\u0B10] | "     +
+  "[\\u0B13-\\u0B28] | "     +
+  "[\\u0B2A-\\u0B30] | "     +
+  "[\\u0B32-\\u0B33] | "     +
+  "[\\u0B36-\\u0B39] | "     +
+  "\\u0B3D | "               +
+  "[\\u0B5C-\\u0B5D] | "     +
+  "[\\u0B5F-\\u0B61] | "     +
+  "[\\u0B85-\\u0B8A] | "     +
+  "[\\u0B8E-\\u0B90] | "     +
+  "[\\u0B92-\\u0B95] | "     +
+  "[\\u0B99-\\u0B9A] | "     +
+  "\\u0B9C | "               +
+  "[\\u0B9E-\\u0B9F] | "     +
+  "[\\u0BA3-\\u0BA4] | "     +
+  "[\\u0BA8-\\u0BAA] | "     +
+  "[\\u0BAE-\\u0BB5] | "     +
+  "[\\u0BB7-\\u0BB9] | "     +
+  "[\\u0C05-\\u0C0C] | "     +
+  "[\\u0C0E-\\u0C10] | "     +
+  "[\\u0C12-\\u0C28] | "     +
+  "[\\u0C2A-\\u0C33] | "     +
+  "[\\u0C35-\\u0C39] | "     +
+  "[\\u0C60-\\u0C61] | "     +
+  "[\\u0C85-\\u0C8C] | "     +
+  "[\\u0C8E-\\u0C90] | "     +
+  "[\\u0C92-\\u0CA8] | "     +
+  "[\\u0CAA-\\u0CB3] | "     +
+  "[\\u0CB5-\\u0CB9] | "     +
+  "\\u0CDE | "               +
+  "[\\u0CE0-\\u0CE1] | "     +
+  "[\\u0D05-\\u0D0C] | "     +
+  "[\\u0D0E-\\u0D10] | "     +
+  "[\\u0D12-\\u0D28] | "     +
+  "[\\u0D2A-\\u0D39] | "     +
+  "[\\u0D60-\\u0D61] | "     +
+  "[\\u0E01-\\u0E2E] | "     +
+  "\\u0E30 | "               +
+  "[\\u0E32-\\u0E33] | "     +
+  "[\\u0E40-\\u0E45] | "     +
+  "[\\u0E81-\\u0E82] | "     +
+  "\\u0E84 | "               +
+  "[\\u0E87-\\u0E88] | "     +
+  "\\u0E8A | "               +
+  "\\u0E8D | "               +
+  "[\\u0E94-\\u0E97] | "     +
+  "[\\u0E99-\\u0E9F] | "     +
+  "[\\u0EA1-\\u0EA3] | "     +
+  "\\u0EA5 | "               +
+  "\\u0EA7 | "               +
+  "[\\u0EAA-\\u0EAB] | "     +
+  "[\\u0EAD-\\u0EAE] | "     +
+  "\\u0EB0 | "               +
+  "[\\u0EB2-\\u0EB3] | "     +
+  "\\u0EBD | "               +
+  "[\\u0EC0-\\u0EC4] | "     +
+  "[\\u0F40-\\u0F47] | "     +
+  "[\\u0F49-\\u0F69] | "     +
+  "[\\u10A0-\\u10C5] | "     +
+  "[\\u10D0-\\u10F6] | "     +
+  "\\u1100 | "               +
+  "[\\u1102-\\u1103] | "     +
+  "[\\u1105-\\u1107] | "     +
+  "\\u1109 | "               +
+  "[\\u110B-\\u110C] | "     +
+  "[\\u110E-\\u1112] | "     +
+  "\\u113C | "               +
+  "\\u113E | "               +
+  "\\u1140 | "               +
+  "\\u114C | "               +
+  "\\u114E | "               +
+  "\\u1150 | "               +
+  "[\\u1154-\\u1155] | "     +
+  "\\u1159 | "               +
+  "[\\u115F-\\u1161] | "     +
+  "\\u1163 | "               +
+  "\\u1165 | "               +
+  "\\u1167 | "               +
+  "\\u1169 | "               +
+  "[\\u116D-\\u116E] | "     +
+  "[\\u1172-\\u1173] | "     +
+  "\\u1175 | "               +
+  "\\u119E | "               +
+  "\\u11A8 | "               +
+  "\\u11AB | "               +
+  "[\\u11AE-\\u11AF] | "     +
+  "[\\u11B7-\\u11B8] | "     +
+  "\\u11BA | "               +
+  "[\\u11BC-\\u11C2] | "     +
+  "\\u11EB | "               +
+  "\\u11F0 | "               +
+  "\\u11F9 | "               +
+  "[\\u1E00-\\u1E9B] | "     +
+  "[\\u1EA0-\\u1EF9] | "     +
+  "[\\u1F00-\\u1F15] | "     +
+  "[\\u1F18-\\u1F1D] | "     +
+  "[\\u1F20-\\u1F45] | "     +
+  "[\\u1F48-\\u1F4D] | "     +
+  "[\\u1F50-\\u1F57] | "     +
+  "\\u1F59 | "               +
+  "\\u1F5B | "               +
+  "\\u1F5D | "               +
+  "[\\u1F5F-\\u1F7D] | "     +
+  "[\\u1F80-\\u1FB4] | "     +
+  "[\\u1FB6-\\u1FBC] | "     +
+  "\\u1FBE | "               +
+  "[\\u1FC2-\\u1FC4] | "     +
+  "[\\u1FC6-\\u1FCC] | "     +
+  "[\\u1FD0-\\u1FD3] | "     +
+  "[\\u1FD6-\\u1FDB] | "     +
+  "[\\u1FE0-\\u1FEC] | "     +
+  "[\\u1FF2-\\u1FF4] | "     +
+  "[\\u1FF6-\\u1FFC] | "     +
+  "\\u2126 | "               +
+  "[\\u212A-\\u212B] | "     +
+  "\\u212E | "               +
+  "[\\u2180-\\u2182] | "     +
+  "[\\u3041-\\u3094] | "     +
+  "[\\u30A1-\\u30FA] | "     +
+  "[\\u3105-\\u312C] | "     +
+  "[\\uAC00-\\uD7A3]"        +
+")";
+
+String.$Ideographic = "("    +
+  "[\\u4E00-\\u9FA5] | "     +
+  "\\u3007 | "               +
+  "[\\u3021-\\u3029]"        +
+")";
+
+String.$CombiningChar = "("  +
+  "[\\u0300-\\u0345] | "     +
+  "[\\u0360-\\u0361] | "     +
+  "[\\u0483-\\u0486] | "     +
+  "[\\u0591-\\u05A1] | "     +
+  "[\\u05A3-\\u05B9] | "     +
+  "[\\u05BB-\\u05BD] | "     +
+  "\\u05BF | "               +
+  "[\\u05C1-\\u05C2] | "     +
+  "\\u05C4 | "               +
+  "[\\u064B-\\u0652] | "     +
+  "\\u0670 | "               +
+  "[\\u06D6-\\u06DC] | "     +
+  "[\\u06DD-\\u06DF] | "     +
+  "[\\u06E0-\\u06E4] | "     +
+  "[\\u06E7-\\u06E8] | "     +
+  "[\\u06EA-\\u06ED] | "     +
+  "[\\u0901-\\u0903] | "     +
+  "\\u093C | "               +
+  "[\\u093E-\\u094C] | "     +
+  "\\u094D | "               +
+  "[\\u0951-\\u0954] | "     +
+  "[\\u0962-\\u0963] | "     +
+  "[\\u0981-\\u0983] | "     +
+  "\\u09BC | "               +
+  "\\u09BE | "               +
+  "\\u09BF | "               +
+  "[\\u09C0-\\u09C4] | "     +
+  "[\\u09C7-\\u09C8] | "     +
+  "[\\u09CB-\\u09CD] | "     +
+  "\\u09D7 | "               +
+  "[\\u09E2-\\u09E3] | "     +
+  "\\u0A02 | "               +
+  "\\u0A3C | "               +
+  "\\u0A3E | "               +
+  "\\u0A3F | "               +
+  "[\\u0A40-\\u0A42] | "     +
+  "[\\u0A47-\\u0A48] | "     +
+  "[\\u0A4B-\\u0A4D] | "     +
+  "[\\u0A70-\\u0A71] | "     +
+  "[\\u0A81-\\u0A83] | "     +
+  "\\u0ABC | "               +
+  "[\\u0ABE-\\u0AC5] | "     +
+  "[\\u0AC7-\\u0AC9] | "     +
+  "[\\u0ACB-\\u0ACD] | "     +
+  "[\\u0B01-\\u0B03] | "     +
+  "\\u0B3C | "               +
+  "[\\u0B3E-\\u0B43] | "     +
+  "[\\u0B47-\\u0B48] | "     +
+  "[\\u0B4B-\\u0B4D] | "     +
+  "[\\u0B56-\\u0B57] | "     +
+  "[\\u0B82-\\u0B83] | "     +
+  "[\\u0BBE-\\u0BC2] | "     +
+  "[\\u0BC6-\\u0BC8] | "     +
+  "[\\u0BCA-\\u0BCD] | "     +
+  "\\u0BD7 | "               +
+  "[\\u0C01-\\u0C03] | "     +
+  "[\\u0C3E-\\u0C44] | "     +
+  "[\\u0C46-\\u0C48] | "     +
+  "[\\u0C4A-\\u0C4D] | "     +
+  "[\\u0C55-\\u0C56] | "     +
+  "[\\u0C82-\\u0C83] | "     +
+  "[\\u0CBE-\\u0CC4] | "     +
+  "[\\u0CC6-\\u0CC8] | "     +
+  "[\\u0CCA-\\u0CCD] | "     +
+  "[\\u0CD5-\\u0CD6] | "     +
+  "[\\u0D02-\\u0D03] | "     +
+  "[\\u0D3E-\\u0D43] | "     +
+  "[\\u0D46-\\u0D48] | "     +
+  "[\\u0D4A-\\u0D4D] | "     +
+  "\\u0D57 | "               +
+  "\\u0E31 | "               +
+  "[\\u0E34-\\u0E3A] | "     +
+  "[\\u0E47-\\u0E4E] | "     +
+  "\\u0EB1 | "               +
+  "[\\u0EB4-\\u0EB9] | "     +
+  "[\\u0EBB-\\u0EBC] | "     +
+  "[\\u0EC8-\\u0ECD] | "     +
+  "[\\u0F18-\\u0F19] | "     +
+  "\\u0F35 | "               +
+  "\\u0F37 | "               +
+  "\\u0F39 | "               +
+  "\\u0F3E | "               +
+  "\\u0F3F | "               +
+  "[\\u0F71-\\u0F84] | "     +
+  "[\\u0F86-\\u0F8B] | "     +
+  "[\\u0F90-\\u0F95] | "     +
+  "\\u0F97 | "               +
+  "[\\u0F99-\\u0FAD] | "     +
+  "[\\u0FB1-\\u0FB7] | "     +
+  "\\u0FB9 | "               +
+  "[\\u20D0-\\u20DC] | "     +
+  "\\u20E1 | "               +
+  "[\\u302A-\\u302F] | "     +
+  "\\u3099 | "               +
+  "\\u309A"                  +
+")";
+
+String.$Digit = "("          +
+  "[\\u0030-\\u0039] | "     +
+  "[\\u0660-\\u0669] | "     +
+  "[\\u06F0-\\u06F9] | "     +
+  "[\\u0966-\\u096F] | "     +
+  "[\\u09E6-\\u09EF] | "     +
+  "[\\u0A66-\\u0A6F] | "     +
+  "[\\u0AE6-\\u0AEF] | "     +
+  "[\\u0B66-\\u0B6F] | "     +
+  "[\\u0BE7-\\u0BEF] | "     +
+  "[\\u0C66-\\u0C6F] | "     +
+  "[\\u0CE6-\\u0CEF] | "     +
+  "[\\u0D66-\\u0D6F] | "     +
+  "[\\u0E50-\\u0E59] | "     +
+  "[\\u0ED0-\\u0ED9] | "     +
+  "[\\u0F20-\\u0F29]"        +
+")";
+
+String.$Extender = "("       +
+  "\\u00B7 | "               +
+  "\\u02D0 | "               +
+  "\\u02D1 | "               +
+  "\\u0387 | "               +
+  "\\u0640 | "               +
+  "\\u0E46 | "               +
+  "\\u0EC6 | "               +
+  "\\u3005 | "               +
+  "[\\u3031-\\u3035] | "     +
+  "[\\u309D-\\u309E] | "     +
+  "[\\u30FC-\\u30FE]"        +
+")";
\ No newline at end of file