X-Git-Url: http://source.jalview.org/gitweb/?p=jalviewjs.git;a=blobdiff_plain;f=site%2Fj2s%2Fcom%2Fstevesoft%2Fpat%2FparsePerl.js;h=d34fbd47bb4b20f4c721f2e8da8bf8435f5324bf;hp=005236e7b48f3e8c6cdd24eeb457349af5016905;hb=b9b7a352eee79b7764c3b09c9d19663075061d8c;hpb=8ffd05b3abe52c0b6b79b011c0966361f82d5fe6 diff --git a/site/j2s/com/stevesoft/pat/parsePerl.js b/site/j2s/com/stevesoft/pat/parsePerl.js index 005236e..d34fbd4 100644 --- a/site/j2s/com/stevesoft/pat/parsePerl.js +++ b/site/j2s/com/stevesoft/pat/parsePerl.js @@ -1,267 +1,267 @@ -Clazz.declarePackage ("com.stevesoft.pat"); -Clazz.load (null, "com.stevesoft.pat.parsePerl", ["com.stevesoft.pat.CaseMgr", "$.Prop", "$.RegSyntaxError", "$.Regex", "$.ReplaceRule", "$.StringRule", "java.lang.StringBuffer"], function () { -c$ = Clazz.declareType (com.stevesoft.pat, "parsePerl"); -c$.close = Clazz.defineMethod (c$, "close", -function (c) { -if (c == '<') { -return '>'; -}if (c == '[') { -return ']'; -}if (c == '(') { -return ')'; -}if (c == '{') { -return '}'; -}return c; -}, "~S"); -c$.codify = Clazz.defineMethod (c$, "codify", -function (s, keepbs) { -return com.stevesoft.pat.parsePerl.codifyRange (s, 0, s.length, keepbs); -}, "~S,~B"); -c$.codifyRange = Clazz.defineMethod (c$, "codifyRange", -function (s, i0, iN, keepbs) { -var sb = new StringBuffer (); -var ucmode = false; -var lcmode = false; -var litmode = false; -var uc1 = false; -var lc1 = false; -var modified = false; -for (var i = i0; i < iN; i++) { -var c = s.charAt (i); -var mf = true; -var app = true; -if (c == '\\') { -app = false; -i++; -if (i < s.length) { -var c2 = s.charAt (i); -switch (c2) { -case 'Q': -litmode = true; -break; -case 'U': -ucmode = true; -break; -case 'L': -lcmode = true; -break; -case 'u': -uc1 = true; -break; -case 'l': -lc1 = true; -break; -case 'E': -uc1 = lc1 = ucmode = lcmode = litmode = false; -break; -default: -if (keepbs) { -sb.append ('\\'); -}c = c2; -if (keepbs) { -mf = false; -}app = true; -break; -} -modified = new Boolean (modified | mf).valueOf (); -}}if (app) { -if (lc1) { -c = com.stevesoft.pat.parsePerl.lc (c); -lc1 = false; -} else if (uc1) { -c = com.stevesoft.pat.parsePerl.uc (c); -uc1 = false; -} else if (ucmode) { -c = com.stevesoft.pat.parsePerl.uc (c); -} else if (lcmode) { -c = com.stevesoft.pat.parsePerl.lc (c); -}if (litmode && com.stevesoft.pat.parsePerl.needbs (c)) { -sb.append ('\\'); -}sb.append (c); -}} -return modified ? sb.toString () : s; -}, "~S,~N,~N,~B"); -c$.uc = Clazz.defineMethod (c$, "uc", -function (c) { -return com.stevesoft.pat.CaseMgr.toUpperCaseC (c); -}, "~S"); -c$.lc = Clazz.defineMethod (c$, "lc", -function (c) { -return com.stevesoft.pat.CaseMgr.toLowerCaseC (c); -}, "~S"); -c$.needbs = Clazz.defineMethod (c$, "needbs", -function (c) { -if (c >= 'a' && c <= 'z') { -return false; -}if (c >= 'A' && c <= 'Z') { -return false; -}if (c >= '0' && c <= '9') { -return false; -}if (c == '_') { -return false; -}return true; -}, "~S"); -c$.parse = Clazz.defineMethod (c$, "parse", -function (s) { -var igncase = false; -var optim = false; -var gFlag = false; -var sFlag = false; -var mFlag = false; -var xFlag = false; -var s1 = new StringBuffer (); -var s2 = new StringBuffer (); -var i = 0; -var count = 0; -var mode; -var delim = '/'; -var cdelim = '/'; -if (s.length >= 3 && s.charAt (0) == 's') { -mode = 's'; -delim = s.charAt (1); -cdelim = com.stevesoft.pat.parsePerl.close (delim); -i = 2; -} else if (s.length >= 2 && s.charAt (0) == 'm') { -mode = 'm'; -delim = s.charAt (1); -cdelim = com.stevesoft.pat.parsePerl.close (delim); -i = 2; -} else if (s.length >= 1 && s.charAt (0) == '/') { -mode = 'm'; -i = 1; -} else { -try { -com.stevesoft.pat.RegSyntaxError.endItAll ("Regex.perlCode should be of the form s/// or m// or //"); -} catch (rs) { -if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) { -} else { -throw rs; -} -} -return null; -}for (; i < s.length; i++) { -if (s.charAt (i) == '\\') { -s1.append ('\\'); -i++; -} else if (s.charAt (i) == cdelim && count == 0) { -i++; -break; -} else if (s.charAt (i) == delim && cdelim != delim) { -count++; -} else if (s.charAt (i) == cdelim && cdelim != delim) { -count--; -}s1.append (s.charAt (i)); -} -if (mode == 's' && cdelim != delim) { -while (i < s.length && com.stevesoft.pat.Prop.isWhite (s.charAt (i))) { -i++; -} -if (i >= s.length) { -try { -com.stevesoft.pat.RegSyntaxError.endItAll ("" + mode + delim + " needs " + cdelim); -} catch (rs) { -if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) { -} else { -throw rs; -} -} -return null; -}cdelim = com.stevesoft.pat.parsePerl.close (delim = s.charAt (i)); -i++; -}count = 0; -if (mode == 's') { -for (; i < s.length; i++) { -if (s.charAt (i) == '\\') { -s2.append ('\\'); -i++; -} else if (s.charAt (i) == cdelim && count == 0) { -i++; -break; -} else if (s.charAt (i) == delim && cdelim != delim) { -count++; -} else if (s.charAt (i) == cdelim && cdelim != delim) { -count--; -}s2.append (s.charAt (i)); -} -}for (; i < s.length; i++) { -var c = s.charAt (i); -switch (c) { -case 'x': -xFlag = true; -break; -case 'i': -igncase = true; -break; -case 'o': -optim = true; -break; -case 's': -sFlag = true; -break; -case 'm': -mFlag = true; -break; -case 'g': -gFlag = true; -break; -default: -try { -com.stevesoft.pat.RegSyntaxError.endItAll ("Illegal flag to pattern: " + c); -} catch (rs) { -if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) { -} else { -throw rs; -} -} -return null; -} -} -var r = new com.stevesoft.pat.Regex (null, ""); -try { -var pat = s1.toString (); -var reprul = s2.toString (); -if (xFlag) { -pat = com.stevesoft.pat.parsePerl.strip (pat); -reprul = com.stevesoft.pat.parsePerl.strip (reprul); -}r.compile (pat); -r.ignoreCase = new Boolean (r.ignoreCase | igncase).valueOf (); -r.gFlag = new Boolean (r.gFlag | gFlag).valueOf (); -r.sFlag = new Boolean (r.sFlag | sFlag).valueOf (); -r.mFlag = new Boolean (r.mFlag | mFlag).valueOf (); -if (optim) { -r.optimize (); -}if (delim == '\'') { -r.setReplaceRule ( new com.stevesoft.pat.StringRule (reprul)); -} else { -r.setReplaceRule (com.stevesoft.pat.ReplaceRule.perlCode (reprul)); -}} catch (rs) { -if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) { -r = null; -} else { -throw rs; -} -} -return r; -}, "~S"); -c$.strip = Clazz.defineMethod (c$, "strip", -function (s) { -var sb = new StringBuffer (); -for (var i = 0; i < s.length; i++) { -var c = s.charAt (i); -if (com.stevesoft.pat.Prop.isWhite (c)) { -;} else if (c == '#') { -i++; -while (i < s.length) { -if (s.charAt (i) == '\n') { -break; -}i++; -} -} else if (c == '\\') { -sb.append (c); -sb.append (s.charAt (++i)); -} else { -sb.append (c); -}} -return sb.toString (); -}, "~S"); -}); +Clazz.declarePackage ("com.stevesoft.pat"); +Clazz.load (null, "com.stevesoft.pat.parsePerl", ["com.stevesoft.pat.CaseMgr", "$.Prop", "$.RegSyntaxError", "$.Regex", "$.ReplaceRule", "$.StringRule", "java.lang.StringBuffer"], function () { +c$ = Clazz.declareType (com.stevesoft.pat, "parsePerl"); +c$.close = Clazz.defineMethod (c$, "close", +function (c) { +if (c == '<') { +return '>'; +}if (c == '[') { +return ']'; +}if (c == '(') { +return ')'; +}if (c == '{') { +return '}'; +}return c; +}, "~S"); +c$.codify = Clazz.defineMethod (c$, "codify", +function (s, keepbs) { +return com.stevesoft.pat.parsePerl.codifyRange (s, 0, s.length, keepbs); +}, "~S,~B"); +c$.codifyRange = Clazz.defineMethod (c$, "codifyRange", +function (s, i0, iN, keepbs) { +var sb = new StringBuffer (); +var ucmode = false; +var lcmode = false; +var litmode = false; +var uc1 = false; +var lc1 = false; +var modified = false; +for (var i = i0; i < iN; i++) { +var c = s.charAt (i); +var mf = true; +var app = true; +if (c == '\\') { +app = false; +i++; +if (i < s.length) { +var c2 = s.charAt (i); +switch (c2) { +case 'Q': +litmode = true; +break; +case 'U': +ucmode = true; +break; +case 'L': +lcmode = true; +break; +case 'u': +uc1 = true; +break; +case 'l': +lc1 = true; +break; +case 'E': +uc1 = lc1 = ucmode = lcmode = litmode = false; +break; +default: +if (keepbs) { +sb.append ('\\'); +}c = c2; +if (keepbs) { +mf = false; +}app = true; +break; +} +modified = new Boolean (modified | mf).valueOf (); +}}if (app) { +if (lc1) { +c = com.stevesoft.pat.parsePerl.lc (c); +lc1 = false; +} else if (uc1) { +c = com.stevesoft.pat.parsePerl.uc (c); +uc1 = false; +} else if (ucmode) { +c = com.stevesoft.pat.parsePerl.uc (c); +} else if (lcmode) { +c = com.stevesoft.pat.parsePerl.lc (c); +}if (litmode && com.stevesoft.pat.parsePerl.needbs (c)) { +sb.append ('\\'); +}sb.append (c); +}} +return modified ? sb.toString () : s; +}, "~S,~N,~N,~B"); +c$.uc = Clazz.defineMethod (c$, "uc", +function (c) { +return com.stevesoft.pat.CaseMgr.toUpperCaseC (c); +}, "~S"); +c$.lc = Clazz.defineMethod (c$, "lc", +function (c) { +return com.stevesoft.pat.CaseMgr.toLowerCaseC (c); +}, "~S"); +c$.needbs = Clazz.defineMethod (c$, "needbs", +function (c) { +if (c >= 'a' && c <= 'z') { +return false; +}if (c >= 'A' && c <= 'Z') { +return false; +}if (c >= '0' && c <= '9') { +return false; +}if (c == '_') { +return false; +}return true; +}, "~S"); +c$.parse = Clazz.defineMethod (c$, "parse", +function (s) { +var igncase = false; +var optim = false; +var gFlag = false; +var sFlag = false; +var mFlag = false; +var xFlag = false; +var s1 = new StringBuffer (); +var s2 = new StringBuffer (); +var i = 0; +var count = 0; +var mode; +var delim = '/'; +var cdelim = '/'; +if (s.length >= 3 && s.charAt (0) == 's') { +mode = 's'; +delim = s.charAt (1); +cdelim = com.stevesoft.pat.parsePerl.close (delim); +i = 2; +} else if (s.length >= 2 && s.charAt (0) == 'm') { +mode = 'm'; +delim = s.charAt (1); +cdelim = com.stevesoft.pat.parsePerl.close (delim); +i = 2; +} else if (s.length >= 1 && s.charAt (0) == '/') { +mode = 'm'; +i = 1; +} else { +try { +com.stevesoft.pat.RegSyntaxError.endItAll ("Regex.perlCode should be of the form s/// or m// or //"); +} catch (rs) { +if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) { +} else { +throw rs; +} +} +return null; +}for (; i < s.length; i++) { +if (s.charAt (i) == '\\') { +s1.append ('\\'); +i++; +} else if (s.charAt (i) == cdelim && count == 0) { +i++; +break; +} else if (s.charAt (i) == delim && cdelim != delim) { +count++; +} else if (s.charAt (i) == cdelim && cdelim != delim) { +count--; +}s1.append (s.charAt (i)); +} +if (mode == 's' && cdelim != delim) { +while (i < s.length && com.stevesoft.pat.Prop.isWhite (s.charAt (i))) { +i++; +} +if (i >= s.length) { +try { +com.stevesoft.pat.RegSyntaxError.endItAll ("" + mode + delim + " needs " + cdelim); +} catch (rs) { +if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) { +} else { +throw rs; +} +} +return null; +}cdelim = com.stevesoft.pat.parsePerl.close (delim = s.charAt (i)); +i++; +}count = 0; +if (mode == 's') { +for (; i < s.length; i++) { +if (s.charAt (i) == '\\') { +s2.append ('\\'); +i++; +} else if (s.charAt (i) == cdelim && count == 0) { +i++; +break; +} else if (s.charAt (i) == delim && cdelim != delim) { +count++; +} else if (s.charAt (i) == cdelim && cdelim != delim) { +count--; +}s2.append (s.charAt (i)); +} +}for (; i < s.length; i++) { +var c = s.charAt (i); +switch (c) { +case 'x': +xFlag = true; +break; +case 'i': +igncase = true; +break; +case 'o': +optim = true; +break; +case 's': +sFlag = true; +break; +case 'm': +mFlag = true; +break; +case 'g': +gFlag = true; +break; +default: +try { +com.stevesoft.pat.RegSyntaxError.endItAll ("Illegal flag to pattern: " + c); +} catch (rs) { +if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) { +} else { +throw rs; +} +} +return null; +} +} +var r = new com.stevesoft.pat.Regex (null, ""); +try { +var pat = s1.toString (); +var reprul = s2.toString (); +if (xFlag) { +pat = com.stevesoft.pat.parsePerl.strip (pat); +reprul = com.stevesoft.pat.parsePerl.strip (reprul); +}r.compile (pat); +r.ignoreCase = new Boolean (r.ignoreCase | igncase).valueOf (); +r.gFlag = new Boolean (r.gFlag | gFlag).valueOf (); +r.sFlag = new Boolean (r.sFlag | sFlag).valueOf (); +r.mFlag = new Boolean (r.mFlag | mFlag).valueOf (); +if (optim) { +r.optimize (); +}if (delim == '\'') { +r.setReplaceRule ( new com.stevesoft.pat.StringRule (reprul)); +} else { +r.setReplaceRule (com.stevesoft.pat.ReplaceRule.perlCode (reprul)); +}} catch (rs) { +if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) { +r = null; +} else { +throw rs; +} +} +return r; +}, "~S"); +c$.strip = Clazz.defineMethod (c$, "strip", +function (s) { +var sb = new StringBuffer (); +for (var i = 0; i < s.length; i++) { +var c = s.charAt (i); +if (com.stevesoft.pat.Prop.isWhite (c)) { +;} else if (c == '#') { +i++; +while (i < s.length) { +if (s.charAt (i) == '\n') { +break; +}i++; +} +} else if (c == '\\') { +sb.append (c); +sb.append (s.charAt (++i)); +} else { +sb.append (c); +}} +return sb.toString (); +}, "~S"); +});