//\r
package com.stevesoft.pat;\r
\r
-import com.stevesoft.pat.wrap.StringWrap;\r
+import com.stevesoft.pat.wrap.*;\r
\r
/** Replacement rule used by the Transformer.\r
@see com.stevesoft.pat.Transformer\r
- */\r
-class TransRepRule extends ReplaceRule {\r
- Transformer t;\r
- TransRepRule(Transformer t) { this.t = t; }\r
- public String toString1() { return ""; }\r
- public Object clone1() { return new TransRepRule(t); }\r
- public void apply(StringBufferLike sb,RegRes rr) {\r
- // get the ReplaceRule of the Regex that matched.\r
- next = t.tp.ra[t.tp.pn].getReplaceRule();\r
- }\r
+ */\r
+class TransRepRule\r
+ extends ReplaceRule\r
+{\r
+ Transformer t;\r
+ TransRepRule(Transformer t)\r
+ {\r
+ this.t = t;\r
+ }\r
+\r
+ public String toString1()\r
+ {\r
+ return "";\r
+ }\r
+\r
+ public Object clone1()\r
+ {\r
+ return new TransRepRule(t);\r
+ }\r
+\r
+ public void apply(StringBufferLike sb, RegRes rr)\r
+ {\r
+ // get the ReplaceRule of the Regex that matched.\r
+ next = t.tp.ra[t.tp.pn].getReplaceRule();\r
+ }\r
}\r
\r
/** Sometimes you want to replace a whole bunch of things\r
<p>\r
So far, at least, this class does not have the capability of\r
turning into a giant robot :-)\r
- */\r
-public class Transformer {\r
- TransPat tp;\r
- Regex rp = new Regex();\r
- boolean auto_optimize;\r
-\r
- /** Get a replacer to that works with the current Regex.\r
- @see com.stevesoft.pat.Replacer\r
- */\r
- public Replacer getReplacer() { return rp.getReplacer(); }\r
-\r
- /** Instantiate a new Transformer object. */\r
- public Transformer(boolean auto) {\r
- auto_optimize = auto;\r
- tp = new TransPat();\r
- rp.setReplaceRule(new TransRepRule(this));\r
- rp.thePattern = tp;\r
- }\r
+ */\r
+public class Transformer\r
+{\r
+ TransPat tp;\r
+ Regex rp = new Regex();\r
+ boolean auto_optimize;\r
\r
- /** Add a new Regex to the set of Regex's. */\r
- public void add(Regex r) {\r
- if(auto_optimize) r.optimize();\r
- tp.ra[tp.ra_len++] = r;\r
- if(tp.ra.length==tp.ra_len) {\r
- Regex[] ra2 = new Regex[tp.ra_len+10];\r
- for(int i=0;i<tp.ra_len;i++)\r
- ra2[i] = tp.ra[i];\r
- tp.ra = ra2;\r
- }\r
- rp.numSubs_ = r.numSubs_ > rp.numSubs_ ? r.numSubs_ : rp.numSubs_;\r
- }\r
+ /** Get a replacer to that works with the current Regex.\r
+ @see com.stevesoft.pat.Replacer\r
+ */\r
+ public Replacer getReplacer()\r
+ {\r
+ return rp.getReplacer();\r
+ }\r
\r
- /** Returns the number of Regex's in this Transformer. */\r
- public int patterns() { return tp.ra_len; }\r
+ /** Instantiate a new Transformer object. */\r
+ public Transformer(boolean auto)\r
+ {\r
+ auto_optimize = auto;\r
+ tp = new TransPat();\r
+ rp.setReplaceRule(new TransRepRule(this));\r
+ rp.thePattern = tp;\r
+ }\r
\r
- /** Get the Regex at position i in this Transformer. */\r
- public Regex getRegexAt(int i) {\r
- if(i >= tp.ra_len)\r
- throw new ArrayIndexOutOfBoundsException("i="+i+">="+patterns());\r
- if(i < 0)\r
- throw new ArrayIndexOutOfBoundsException("i="+i+"< 0");\r
- return tp.ra[i];\r
- }\r
- /** Set the Regex at position i in this Transformer. */\r
- public void setRegexAt(Regex rx,int i) {\r
- if(i >= tp.ra_len)\r
- throw new ArrayIndexOutOfBoundsException("i="+i+">="+patterns());\r
- if(i < 0)\r
- throw new ArrayIndexOutOfBoundsException("i="+i+"< 0");\r
- tp.ra[i] = rx;\r
- }\r
+ /** Add a new Regex to the set of Regex's. */\r
+ public void add(Regex r)\r
+ {\r
+ if (auto_optimize)\r
+ {\r
+ r.optimize();\r
+ }\r
+ tp.ra[tp.ra_len++] = r;\r
+ if (tp.ra.length == tp.ra_len)\r
+ {\r
+ Regex[] ra2 = new Regex[tp.ra_len + 10];\r
+ for (int i = 0; i < tp.ra_len; i++)\r
+ {\r
+ ra2[i] = tp.ra[i];\r
+ }\r
+ tp.ra = ra2;\r
+ }\r
+ rp.numSubs_ = r.numSubs_ > rp.numSubs_ ? r.numSubs_ : rp.numSubs_;\r
+ }\r
\r
- /** Add a new Regex by calling Regex.perlCode\r
- @see com.stevesoft.pat.Regex#perlCode(java.lang.String)\r
- */\r
- public void add(String rs) {\r
- Regex r = Regex.perlCode(rs);\r
- if(r == null) throw new NullPointerException("bad pattern to Regex.perlCode: "+rs);\r
- add(r);\r
- }\r
- /** Add an array of Strings (which will be converted to\r
- Regex's via the Regex.perlCode method.\r
- @see com.stevesoft.pat.Regex#perlCode(java.lang.String)\r
- */\r
- public void add(String[] array) {\r
- for(int i=0;i<array.length;i++)\r
- add(array[i]);\r
- }\r
- /** Replace all matches in the current String. */\r
- public String replaceAll(String s) {\r
- return dorep(s,0,s.length());\r
- }\r
- public StringLike replaceAll(StringLike s) {\r
- return dorep(s,0,s.length());\r
- }\r
- /** Replace all matching patterns beginning at position start. */\r
- public String replaceAllFrom(String s,int start) {\r
- return dorep(s,start,s.length());\r
- }\r
- /** Replace all matching patterns beginning between the positions\r
- start and end inclusive. */\r
- public String replaceAllRegion(String s,int start,int end) {\r
- return dorep(s,start,end);\r
- }\r
+ /** Returns the number of Regex's in this Transformer. */\r
+ public int patterns()\r
+ {\r
+ return tp.ra_len;\r
+ }\r
\r
- Replacer repr = new Replacer();\r
- final StringLike dorep(StringLike s,int start,int end) {\r
- StringLike tfmd = repr.replaceAllRegion(s,rp,start,end);\r
- tp.lastMatchedTo = repr.lastMatchedTo;\r
- return tfmd;\r
- }\r
- final String dorep(String s,int start,int end) {\r
- return dorep(new StringWrap(s),start,end).toString();\r
- }\r
+ /** Get the Regex at position i in this Transformer. */\r
+ public Regex getRegexAt(int i)\r
+ {\r
+ if (i >= tp.ra_len)\r
+ {\r
+ throw new ArrayIndexOutOfBoundsException("i=" + i + ">=" + patterns());\r
+ }\r
+ if (i < 0)\r
+ {\r
+ throw new ArrayIndexOutOfBoundsException("i=" + i + "< 0");\r
+ }\r
+ return tp.ra[i];\r
+ }\r
\r
- /** Replace the first matching pattern in String s. */\r
- public String replaceFirst(String s) {\r
- return dorep(s,0,s.length());\r
- }\r
- /** Replace the first matching pattern after position start in\r
- String s. */\r
- public String replaceFirstFrom(String s,int start) {\r
- return dorep(s,start,s.length());\r
- }\r
- /** Replace the first matching pattern that begins between\r
- start and end inclusive. */\r
- public String replaceFirstRegion(String s,int start,int end) {\r
- return dorep(s,start,end);\r
- }\r
+ /** Set the Regex at position i in this Transformer. */\r
+ public void setRegexAt(Regex rx, int i)\r
+ {\r
+ if (i >= tp.ra_len)\r
+ {\r
+ throw new ArrayIndexOutOfBoundsException("i=" + i + ">=" + patterns());\r
+ }\r
+ if (i < 0)\r
+ {\r
+ throw new ArrayIndexOutOfBoundsException("i=" + i + "< 0");\r
+ }\r
+ tp.ra[i] = rx;\r
+ }\r
+\r
+ /** Add a new Regex by calling Regex.perlCode\r
+ @see com.stevesoft.pat.Regex#perlCode(java.lang.String)\r
+ */\r
+ public void add(String rs)\r
+ {\r
+ Regex r = Regex.perlCode(rs);\r
+ if (r == null)\r
+ {\r
+ throw new NullPointerException("bad pattern to Regex.perlCode: " + rs);\r
+ }\r
+ add(r);\r
+ }\r
+\r
+ /** Add an array of Strings (which will be converted to\r
+ Regex's via the Regex.perlCode method.\r
+ @see com.stevesoft.pat.Regex#perlCode(java.lang.String)\r
+ */\r
+ public void add(String[] array)\r
+ {\r
+ for (int i = 0; i < array.length; i++)\r
+ {\r
+ add(array[i]);\r
+ }\r
+ }\r
+\r
+ /** Replace all matches in the current String. */\r
+ public String replaceAll(String s)\r
+ {\r
+ return dorep(s, 0, s.length());\r
+ }\r
+\r
+ public StringLike replaceAll(StringLike s)\r
+ {\r
+ return dorep(s, 0, s.length());\r
+ }\r
+\r
+ /** Replace all matching patterns beginning at position start. */\r
+ public String replaceAllFrom(String s, int start)\r
+ {\r
+ return dorep(s, start, s.length());\r
+ }\r
+\r
+ /** Replace all matching patterns beginning between the positions\r
+ start and end inclusive. */\r
+ public String replaceAllRegion(String s, int start, int end)\r
+ {\r
+ return dorep(s, start, end);\r
+ }\r
+\r
+ Replacer repr = new Replacer();\r
+ final StringLike dorep(StringLike s, int start, int end)\r
+ {\r
+ StringLike tfmd = repr.replaceAllRegion(s, rp, start, end);\r
+ tp.lastMatchedTo = repr.lastMatchedTo;\r
+ return tfmd;\r
+ }\r
+\r
+ final String dorep(String s, int start, int end)\r
+ {\r
+ return dorep(new StringWrap(s), start, end).toString();\r
+ }\r
+\r
+ /** Replace the first matching pattern in String s. */\r
+ public String replaceFirst(String s)\r
+ {\r
+ return dorep(s, 0, s.length());\r
+ }\r
+\r
+ /** Replace the first matching pattern after position start in\r
+ String s. */\r
+ public String replaceFirstFrom(String s, int start)\r
+ {\r
+ return dorep(s, start, s.length());\r
+ }\r
+\r
+ /** Replace the first matching pattern that begins between\r
+ start and end inclusive. */\r
+ public String replaceFirstRegion(String s, int start, int end)\r
+ {\r
+ return dorep(s, start, end);\r
+ }\r
}\r