regexcite/RegExcite/war/RegEx3Compressed.js
2009-05-07 18:53:34 +00:00

1 line
19 KiB
JavaScript

function object(B){function A(){}A.prototype=B;return new A()}ParseState={source:null,index:0,bindingIndex:0,backRefCount:0,current:function(){return this.get(this.index)},next:function(){return this.get(this.index+1)},advance:function(){return this.get(this.index++)},backoff:function(){this.index--},backTo:function(A){this.index=A},get:function(A){if(A>=this.source.length){return null}return this.source.charAt(A)},isComplete:function(){return this.index>=this.source.length},matchString:function(B){if(!B||!this.source){return false}if(B.length+this.index-1>this.source.length){return false}for(var A=0;A<B.length;++A){if(B.charAt(A)!=this.source.charAt(this.index+A)){return false}}this.index+=B.length;return true},root:null,currentNode:null,makeNode:function(A,B){return{nodeName:A,parentNode:B,children:[],value:null,combineable:false,startIndex:0,endIndex:0}},openNode:function(A){this.currentNode=this.makeNode(A,this.currentNode)},closeNode:function(){var A=this.currentNode;if(A.parentNode==null){this.root=A}else{this.currentNode=this.currentNode.parentNode;this.currentNode.children.push(A)}},discardNode:function(){this.currentNode=this.currentNode.parentNode},setNodeValue:function(A){this.currentNode.value=A},setCombinable:function(A){this.currentNode.combineable=A},appendNodeValue:function(A){this.currentNode.value+=A},getAST:function(){var A=this.processNode(this.root);this.combineAtoms(A);A=this.processNode(A);return A},processNode:function(C){if(C==null){return null}if(C.children.length==0){return this.copyNode(C)}if(C.children.length==1){var D=this.processNode(C.children[0]);return D}var A=this.copyNode(C);A.children=[];for(var E in C.children){var B=this.processNode(C.children[E]);B.parentNode=A;A.children.push(B)}return A},combineAtoms:function(D){if(D==null){return null}if(D.nodeName=="alternative"){var C=0;var B=0;var A=true;while(A){A=false;for(var F in D.children){var E=D.children[F];if(E.nodeName!="atom"||!E.combineable){if(C==B){++C;++B}else{A=true;break}}else{++B}}if(B!=C){this.doCombineAtoms(D,C,B-C);C=B=0}}}for(var F in D.children){this.combineAtoms(D.children[F])}},doCombineAtoms:function(D,B,C){var E={nodeName:"combinedAtoms",parentNode:D,children:[],value:"",combineable:false};for(var A=0;A<C;++A){var F=D.children[B+A];if(F==null){E.value+=" UnknownChar"}else{E.value+=" "+F.value}}D.children.splice(B,C,E)},copyNode:function(A){return{nodeName:A.nodeName,parentNode:A.parentNode,children:A.children,value:A.value,combineable:A.combineable,startIndex:A.startIndex,endIndex:A.endIndex}},flags:[{token:"i",note:"CaseInsensitive",value:null},{token:"d",note:"UnixLine",value:null},{token:"m",note:"MultiLine",value:null},{token:"s",note:"DotAll",value:null},{token:"u",note:"UnicodeCase",value:null},{token:"c",note:"CanonicalEquivalence",value:null},{token:"x",note:"Comments",value:null}],clearFlags:function(){for(var A=0;A<this.flags.length;++A){var B=this.flags[A];B.value=null}},setFlag:function(A,D){for(var B=0;B<this.flags.length;++B){var C=this.flags[B];if(A==C.token){C.value=D}}},appendFlagsInfo:function(){for(var A=0;A<this.flags.length;++A){var B=this.flags[A];if(B.value!=null){this.appendNodeValue(" "+B.note+"="+B.value)}}}};Pattern={parse:function(B){var A=object(ParseState);A.source=B;this.tryProduction("disjunction",A);return A},tryProduction:function(A,B){B.openNode(A);B.currentNode.startIndex=B.index;if(this.tryProductionInternal(A,B)){B.currentNode.endIndex=B.index;B.closeNode();return true}else{B.discardNode();return false}},tryProductionInternal:function(A,B){var C=B.index;if(this[A](B)){return true}else{B.index=C;return false}},disjunction:function(A){A.setNodeValue("OR: match either of the followings");while(true){var B=this.tryProduction("alternative",A);if(!B){return false}if(A.current()=="|"){A.advance()}else{break}}return true},alternative:function(B){B.setNodeValue("Sequence: match all of the followings in order");var A=true;while(true){var C=this.tryProduction("term",B);if(!C){break}else{A=false}}if(!A){return true}if(B.current()=="|"||B.current()==")"||B.current()==null){B.setNodeValue("Empty");return true}else{return false}},term:function(A){if(this.tryProduction("assertion",A)){return true}if(this.tryProduction("quantatom",A)){return true}return false},assertionList:[{pattern:"^",note:"BeginOfLine"},{pattern:"$",note:"EndOfLine"},{pattern:"\\b",note:"WordBoundary"},{pattern:"\\B",note:"WordNonBoundary"}],addToList:function(C,A){for(var B=0;B<A.length;++B){C.push(A[B])}},addClassPair:function(A){for(var B=0;B<A.length;++B){this.atomList.push({pattern:"\\p"+A[B].pattern,note:A[B].note});this.atomList.push({pattern:"\\P"+A[B].pattern,note:"NotIn_"+A[B].note})}},assertion:function(D){for(var A=0;A<this.assertionList.length;++A){var C=this.assertionList[A].pattern;var B=this.assertionList[A].note;if(D.matchString(C)){D.setNodeValue(B);return true}}return false},quantatom:function(A){A.setNodeValue("Repeat");if(!this.tryProduction("atom",A)){return false}while(true){if(!this.tryProduction("quantifier",A)){break}}return true},atomList:[{pattern:".",note:"AnyCharacterExcept\\n"},{pattern:"\\f",note:"FormFeed"},{pattern:"\\n",note:"NewLine"},{pattern:"\\r",note:"CarriageReturn"},{pattern:"\\t",note:"HorizontalTab"},{pattern:"\\v",note:"VerticalTab"},{pattern:"\\d",note:"Digit"},{pattern:"\\D",note:"NonDigit"},{pattern:"\\w",note:"WordCharacter"},{pattern:"\\W",note:"NonWordCharacter"},{pattern:"\\s",note:"WhiteSpaceCharacter"},{pattern:"\\S",note:"NonWhiteSpaceCharacter"}],atom:function(E){for(var A=0;A<this.atomList.length;++A){var D=this.atomList[A].pattern;var C=this.atomList[A].note;if(E.matchString(D)){E.setNodeValue(C);return true}}var F=false;var G=E.advance();if(G==null){return false}switch(G){case"*":case"+":case"?":case"{":case")":case"|":F=false;break;case"(":E.setNodeValue("CapturingGroup");if(!this.tryProduction("atomAssert",E)){break}if(E.current()!=")"){if(!this.tryProduction("disjunction",E)){break}}var B=E.advance();if(B==")"){F=true}break;case"[":if(this.tryProduction("charClass",E)){var B=E.advance();if(B=="]"){F=true}}break;case"\\":if(this.tryProduction("escapeAtom",E)){F=true}break;default:E.setNodeValue(G);E.setCombinable(true);F=true;break}return F},quantifier:function(B){var C=false;var E=B.advance();switch(E){case"{":var D=B.advance();if(D>="0"&&D<="9"){E=B.advance();if(E=="}"){B.setNodeValue(D+" times");C=true}else{if(E==","){var A=B.advance();if(A=="}"){B.setNodeValue(D+" or more times");C=true}else{if(A>="0"&&A<="9"){E=B.advance();if(E=="}"){B.setNodeValue(D+" to "+A+" times");C=true}}}}}}break;case"*":B.setNodeValue("zero or more times");C=true;break;case"+":B.setNodeValue("one or more times");C=true;break;case"?":B.setNodeValue("optional");C=true;break}if(C){this.quantifierExtention(B)}return C},quantifierExtention:function(A){if(A.current()=="?"){c=A.advance();A.appendNodeValue(" (ungreedy)")}},atomAssert:function(A){var B=false;if(A.current()!="?"){A.backRefCount++;A.setNodeValue("GroupNumber:"+A.backRefCount);return true}var C=A.advance();C=A.advance();switch(C){case":":A.setNodeValue("(DoNotSave)");B=true;break;case"=":A.setNodeValue("MatchOnlyIfFollowedBy");B=true;break;case"!":A.setNodeValue("MatchOnlyIfNotFollowedBy");B=true;break}return B},charClass:function(A){var B="";var D=A.advance();if(D==null){return false}if(D=="^"){B+="AnyCharNotIn[";D=A.advance()}else{B+="AnyCharIn["}if(D=="]"){return false}while(D!="]"&&D!=null){if(D=="\\"){D=A.advance();if(D=="b"){B+=" BackSpace"}else{if(D=="f"){B+=" FormFeed"}else{if(D=="n"){B+=" NewLine"}else{if(D=="r"){B+=" CarriageReturn"}else{if(D=="t"){B+=" HorizontalTab"}else{if(D=="v"){B+=" VerticalTab"}else{if(D=="c"){var C=A.current();if(C!="]"&&C!="\\"&&C!=null){D=A.advance();B+=" ctrl-"+D}else{B+=" c"}}else{if(D=="d"){B+=" Digit"}else{if(D=="D"){B+=" NonDigit"}else{if(D=="s"){B+=" WhiteSpaceCharacter"}else{if(D=="S"){B+=" NonWhiteSpaceCharacter"}else{if(D=="w"){B+=" WordCharacter"}else{if(D=="W"){B+=" NonWordCharacter"}else{B+=" "+D}}}}}}}}}}}}}}else{if(D=="-"){B+=" to"}else{B+=" "+D}}D=A.advance()}if(D==null){return false}A.backoff();B+="]";A.setNodeValue(B);return true},escapeAtom:function(E){var D=2;var G=false;var C=E.advance();switch(C){case"0":var F="";do{c=E.advance();if(c==null){break}if(c>="0"&&c<="7"){F+=c}else{E.backoff();break}}while(F.length<3);if(F.length>0){E.setNodeValue("(NoneECMACompliantExtension)oct_"+F)}else{E.setNodeValue("NUL")}G=true;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":E.setNodeValue("BackReferenceToCapturingGroup("+C+")");G=true;break;case"u":D+=2;case"x":c=E.advance();var B="";var A=0;while(c!=null&&A<D&&((c>="0"&&c<="9")||(c>="A"&&c<="F")||(c>="a"&&c<="f"))){B+=c;A++;c=E.advance()}if(B.length>0){E.setNodeValue("hex:"+B);E.backoff();G=true}else{G=false}break;case"c":if(E.current()!=null){c=E.advance();E.setNodeValue("control-"+c);G=true}else{G=false}break;default:if(C!=null){E.setNodeValue(C);G=true}else{G=false}}return G},escapeOct:function(A){}};PatternJS=object(Pattern);PatternJava=object(Pattern);PatternJava.assertionList=[];PatternJava.addToList(PatternJava.assertionList,Pattern.assertionList);PatternJava.addToList(PatternJava.assertionList,[{pattern:"\\A",note:"BeginningOfInput"},{pattern:"\\G",note:"EndOfPreviousMatch"},{pattern:"\\Z",note:"EndOfInputButFinalTerminator"},{pattern:"\\z",note:"EndOfInput"}]);PatternJava.atomList=[];PatternJava.addToList(PatternJava.atomList,Pattern.atomList);PatternJava.addToList(PatternJava.atomList,[{pattern:"\\a",note:"AlertBellCharacter"},{pattern:"\\e",note:"EscapeCharacter"}]);PatternJava.addClassPair([{pattern:"{Cn}",note:"Unassigned"},{pattern:"{Lu}",note:"UpperCaseLetter"},{pattern:"{Ll}",note:"LowerCaseLetter"},{pattern:"{Lt}",note:"TitleCaseLetter"},{pattern:"{Lm}",note:"ModifierLetter"},{pattern:"{Lo}",note:"OtherLetter"},{pattern:"{Mn}",note:"NonSpacingMark"},{pattern:"{Me}",note:"EnclosingMark"},{pattern:"{Mc}",note:"CombiningSpacingMark"},{pattern:"{Nd}",note:"DecimalDigitLetter"},{pattern:"{Nl}",note:"LetterNumber"},{pattern:"{No}",note:"OtherNumber"},{pattern:"{Zs}",note:"SpaceSeperator"},{pattern:"{Zl}",note:"LineSeperator"},{pattern:"{Zp}",note:"ParagraphSeperator"},{pattern:"{Cc}",note:"Cntrl"},{pattern:"{Cf}",note:"Format"},{pattern:"{Co}",note:"PrivateUse"},{pattern:"{Cs}",note:"Surrogate"},{pattern:"{Pd}",note:"DashPunctuation"},{pattern:"{Ps}",note:"StartPunctuation"},{pattern:"{Pe}",note:"EndPunctuation"},{pattern:"{Pc}",note:"ConnectorPunctuation"},{pattern:"{Po}",note:"OtherPunctuation"},{pattern:"{Sm}",note:"MathSymbol"},{pattern:"{Sc}",note:"CurrencySymbol"},{pattern:"{Sk}",note:"ModifierSymbol"},{pattern:"{So}",note:"OtherSymbol"},{pattern:"{L}",note:"Letter"},{pattern:"{M}",note:"Mark"},{pattern:"{N}",note:"Number"},{pattern:"{Z}",note:"Seperator"},{pattern:"{C}",note:"Control"},{pattern:"{P}",note:"Punctuation"},{pattern:"{S}",note:"Symbol"},{pattern:"{LD}",note:"LetterOrDigit"},{pattern:"{L1}",note:"Latin-1"},{pattern:"{all}",note:"All"},{pattern:"{ASCII}",note:"ASCIICharacter"},{pattern:"{Alnum}",note:"AlphaNumeric"},{pattern:"{Alpha}",note:"AlphabeticCharacter"},{pattern:"{Blank}",note:"SpaceOrTab"},{pattern:"{Cntrl}",note:"ControlCharacter"},{pattern:"{Digit}",note:"Numeric"},{pattern:"{Graph}",note:"VisibleCharacter"},{pattern:"{Lower}",note:"LowerCaseAlphabeticCharacter"},{pattern:"{Print}",note:"PrintableCharacter"},{pattern:"{Punct}",note:"Punctuation"},{pattern:"{Space}",note:"Whitespace"},{pattern:"{Upper}",note:"UpperCaseAlphabeticCharacter"},{pattern:"{XDigit}",note:"HexadecimalDigit"},{pattern:"{javaLowerCase}",note:"JavaLowerCase"},{pattern:"{javaUpperCase}",note:"JavaUpperCase"},{pattern:"{javaTitleCase}",note:"JavaTitleCase"},{pattern:"{javaDigit}",note:"JavaDigit"},{pattern:"{javaDefined}",note:"JavaDefined"},{pattern:"{javaLetter}",note:"JavaLetter"},{pattern:"{javaLetterOrDigit}",note:"JavaLetterOrDigit"},{pattern:"{javaJavaIdentifierStart}",note:"JavaIdentifierStart"},{pattern:"{javaJavaIdentifierPart}",note:"JavaIdentifierPart"},{pattern:"{javaUnicodeIdentifierStart}",note:"JavaUnicodeIdentifierStart"},{pattern:"{javaUnicodeIdentifierPart}",note:"JavaUnicodeIdentifierPart"},{pattern:"{javaIdentifierIgnorable}",note:"JavaIdentifierIgnorable"},{pattern:"{javaSpaceChar}",note:"JavaSpaceChar"},{pattern:"{javaWhitespace}",note:"JavaWhiteSpace"},{pattern:"{javaISOControl}",note:"JavaISOControl"},{pattern:"{javaMirrored}",note:"JavaMirrored"},{pattern:"{InGreek}",note:"CharacterInGreekBlock"}]);PatternJava.quantifierExtention=function(A){if(A.current()=="?"){c=A.advance();A.appendNodeValue(" (ungreedy)")}if(A.current()=="+"){c=A.advance();A.appendNodeValue(" (possessive)")}};PatternJava.atomAssert=function(A){if(A.current()!="?"){A.backRefCount++;A.setNodeValue("GroupNumber:"+A.backRefCount);return true}var B=false;var C=A.advance();C=A.advance();switch(C){case":":A.setNodeValue("(NonCapturingGroup)");B=true;break;case"=":A.setNodeValue("ZeroWidthPositiveLookahead");B=true;break;case"!":A.setNodeValue("ZeroWidthNegativeLookahead");B=true;break;case">":A.setNodeValue("IndependentNonCapturingGroup");B=true;break;case"<":C=A.advance();if(C=="="){A.setNodeValue("ZeroWidthPositiveLookbehind");B=true}else{if(C=="!"){A.setNodeValue("ZeroWidthNegativeLookbehind");B=true}}break;case"i":case"d":case"m":case"s":case"u":case"x":case"-":A.clearFlags();while(C=="i"||C=="d"||C=="m"||C=="s"||C=="u"||C=="x"){A.setFlag(C,true);C=A.advance()}if(C=="-"){C=A.advance();while(C=="i"||C=="d"||C=="m"||C=="s"||C=="u"||C=="x"){A.setFlag(C,false);C=A.advance()}}if(C==":"){A.setNodeValue("NonCapturingGroupWithFlagsOn/Off");A.appendFlagsInfo();B=true}else{if(C==")"){A.setNodeValue("TurnsFlagOn/Off");A.appendFlagsInfo();A.backoff();B=true}}break}return B};PatternJava.escapeAtom=function(E){var D=2;var G=false;var C=E.advance();switch(C){case"Q":var H=E.advance();var F=H;while(E.current()!=null&&(E.current()!="\\"||E.next()!="E")){H=E.advance();F+=H}if(E.next()!=null){E.advance();E.advance()}E.setNodeValue(F);G=true;break;case"0":var F="";do{H=E.advance();if(H==null){break}if(H>="0"&&H<="7"){F+=H}else{E.backoff();break}}while(F.length<3);if(F.length>0){E.setNodeValue("(NoneECMACompliantExtension)oct_"+F)}else{E.setNodeValue("NUL")}G=true;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":E.setNodeValue("BackReferenceToCapturingGroup("+C+")");G=true;break;case"u":D+=2;case"x":H=E.advance();var B="";var A=0;while(H!=null&&A<D&&((H>="0"&&H<="9")||(H>="A"&&H<="F")||(H>="a"&&H<="f"))){B+=H;A++;H=E.advance()}if(B.length>0){E.setNodeValue("hex:"+B);E.backoff();G=true}else{G=false}break;case"c":if(E.current()!=null){H=E.advance();E.setNodeValue("control-"+H);G=true}else{G=false}break;default:if(C!=null){E.setNodeValue(C);G=true}else{G=false}}return G};PatternJava.charClass=function(A){var B="";var E=1;var D=A.advance();if(D==null){return false}if(D=="^"){B+="AnyCharNotIn[";D=A.advance()}else{B+="AnyCharIn["}if(D=="]"){return false}while(D!=null&&(D!="]"||E>1)){if(D=="\\"){D=A.advance();if(D=="b"){B+=" BackSpace"}else{if(D=="f"){B+=" FormFeed"}else{if(D=="n"){B+=" NewLine"}else{if(D=="r"){B+=" CarriageReturn"}else{if(D=="t"){B+=" HorizontalTab"}else{if(D=="v"){B+=" VerticalTab"}else{if(D=="c"){var C=A.current();if(C!="]"&&C!="\\"&&C!=null){D=A.advance();B+=" ctrl-"+D}else{B+=" c"}}else{if(D=="d"){B+=" Digit"}else{if(D=="D"){B+=" NonDigit"}else{if(D=="s"){B+=" WhiteSpaceCharacter"}else{if(D=="S"){B+=" NonWhiteSpaceCharacter"}else{if(D=="w"){B+=" WordCharacter"}else{if(D=="W"){B+=" NonWordCharacter"}else{B+=" "+D}}}}}}}}}}}}}}else{if(D=="-"){B+=" to"}else{if(D=="]"){--E;B+=" "+D}else{if(D=="["){++E;B+=" "+D}else{B+=" "+D}}}}D=A.advance()}if(D==null){return false}A.backoff();B+="]";A.setNodeValue(B);return true};PatternPerl=object(Pattern);PatternPerl.atomList=[];PatternPerl.addToList(PatternPerl.atomList,Pattern.atomList);PatternPerl.addToList(PatternPerl.atomList,[{pattern:"\\a",note:"AlertBellCharacter"},{pattern:"\\e",note:"EscapeCharacter"},{pattern:"\\l",note:"LowerCaseNextChar"},{pattern:"\\u",note:"UpperCaseNextChar"}]);PatternPerl.escapeAtom=function(A){var I=false;var D=A.advance();switch(D){case"L":case"U":case"Q":if(D=="L"){A.setNodeValue("convert to lower case and match : ")}else{if(D=="U"){A.setNodeValue("convert to upper case and match :")}else{A.setNodeValue("")}}var E=A.advance();var F=E;while(A.current()!=null&&(A.current()!="\\"||A.next()!="E")){E=A.advance();F+=E}if(A.next()!=null){A.advance();A.advance()}if(F!=null){A.appendNodeValue(F)}I=true;break;case"0":var F="";do{E=A.advance();if(E==null){break}if(E>="0"&&E<="7"){F+=E}else{A.backoff();break}}while(F.length<3);if(F.length>0){A.setNodeValue("(NoneECMACompliantExtension)oct_"+F)}else{A.setNodeValue("NUL")}I=true;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":A.setNodeValue("BackReferenceToCapturingGroup("+D+")");I=true;break;case"x":var C=2;E=A.advance();var B=false;if(E=="{"){B=true;C=4;E=A.advance()}var H="";var G=0;while(E!=null&&G<C&&((E>="0"&&E<="9")||(E>="A"&&E<="F")||(E>="a"&&E<="f"))){H+=E;G++;E=A.advance()}if(B){if(E=="}"&&H.length>0){A.setNodeValue("hex:"+H);I=true}}else{if(H.length>0){A.setNodeValue("hex:"+H);A.backoff();I=true}else{I=false}}break;case"N":E=A.advance();if(E=="{"){B=true;E=A.advance();var F="";while(E!=null&&E!="}"){F+=E;E=A.advance()}if(E=="}"&&F.length>0){A.setNodeValue("Named character : "+F);I=true}}else{A.setNodeValue("N");A.backoff();I=true;break}break;case"c":if(A.current()!=null){E=A.advance();A.setNodeValue("control-"+E);I=true}else{I=false}break;default:if(D!=null){A.setNodeValue(D);I=true}else{I=false}}return I};PatternPerl.atomAssert=function(B){if(B.current()!="?"){B.backRefCount++;B.setNodeValue("GroupNumber:"+B.backRefCount);return true}var D=false;var E=B.advance();E=B.advance();var A=false;switch(E){case"#":E=B.advance();var C="";while(E!=null&&E!=")"){C+=E;E=B.advance()}if(E==")"){B.setNodeValue("Comments (skip) : "+C);B.backoff();D=true}break;case"?":A=true;E=B.advance();if(E!="{"){D=false;break}case"{":E=B.advance();var C="";while(E!=null&&E!="}"){C+=E;E=B.advance()}if(E=="}"&&B.current()==")"){if(A){B.setNodeValue("execute code and insert result as part of regular expression")}else{B.setNodeValue("execute code : "+C)}D=true}break;case":":B.setNodeValue("(NonCapturingGroup)");D=true;break;case"=":B.setNodeValue("ZeroWidthPositiveLookahead");D=true;break;case"!":B.setNodeValue("ZeroWidthNegativeLookahead");D=true;break;case">":B.setNodeValue("IndependentNonCapturingGroup");D=true;break;case"<":E=B.advance();if(E=="="){B.setNodeValue("ZeroWidthPositiveLookbehind");D=true}else{if(E=="!"){B.setNodeValue("ZeroWidthNegativeLookbehind");D=true}}break;case"i":case"m":case"s":case"x":case"-":B.clearFlags();while(E=="i"||E=="d"||E=="m"||E=="s"||E=="u"||E=="x"){B.setFlag(E,true);E=B.advance()}if(E=="-"){E=B.advance();while(E=="i"||E=="d"||E=="m"||E=="s"||E=="u"||E=="x"){B.setFlag(E,false);E=B.advance()}}if(E==":"){B.setNodeValue("NonCapturingGroupWithFlagsOn/Off");B.appendFlagsInfo();D=true}else{if(E==")"){B.setNodeValue("TurnsFlagOn/Off");B.appendFlagsInfo();B.backoff();D=true}}break}return D};PatternPosix=object(Pattern);PatternDotNet=object(Pattern);var printTree=function(D,E){if(D!=null){var A="";for(var B=0;B<E;++B){A+=" "}print(A+" "+D.nodeName+" "+((D.value==null)?"":D.value));for(var C in D.children){printTree(D.children[C],E+1)}}};var unitTest=function(){var A=PatternPerl.parse("[\\c]");printTree(A.root,0);A.isComplete()};