X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fcom%2Fstevesoft%2Fpat%2FReplacer.java;h=77570f9c343eb60c2fe630d4608e551fa4700966;hb=055eda0580313a9449ec41004f26e5b06ebdfc07;hp=c78a11dd8c1cd40a18abbd019002e53831a1a3e8;hpb=c40cf903f740a72ab63dd1abc10fa33450ce660d;p=jalview.git
diff --git a/src/com/stevesoft/pat/Replacer.java b/src/com/stevesoft/pat/Replacer.java
index c78a11d..77570f9 100755
--- a/src/com/stevesoft/pat/Replacer.java
+++ b/src/com/stevesoft/pat/Replacer.java
@@ -7,28 +7,32 @@
//
package com.stevesoft.pat;
-import java.util.*;
-import com.stevesoft.pat.wrap.StringWrap;
+import com.stevesoft.pat.wrap.*;
/** Internally used class. */
-class RegHolder {
- Regex me = null;
- RegHolder prev = null;
+class RegHolder
+{
+ Regex me = null;
+ RegHolder prev = null;
}
/** Internally used class.
- * @see CodeRule
- */
-class CodeVal {
- int pos;
- char code;
- CodeVal(int p,char c) {
- pos = p;
- code = c;
- }
- public String toString() {
- return "("+pos+","+code+")";
- }
+ * @see CodeRule
+ */
+class CodeVal
+{
+ int pos;
+ char code;
+ CodeVal(int p, char c)
+ {
+ pos = p;
+ code = c;
+ }
+
+ public String toString()
+ {
+ return "(" + pos + "," + code + ")";
+ }
}
/**
@@ -44,218 +48,310 @@ class CodeVal {
trans3.java.
@see com.stevesoft.pat.Transformer
@see com.stevesoft.pat.Regex
-*/
-public class Replacer {
- boolean first;
+ */
+public class Replacer
+{
+ boolean first;
- /** Instantiate a new Replacer. */
- public Replacer() {}
+ /** Instantiate a new Replacer. */
+ public Replacer()
+ {}
- public StringLike replaceFirstRegion(String s,Regex r,
- int start,int end) {
- return replaceFirstRegion(new StringWrap(s),r,start,end);
- }
- /** This method replaces the first occurence of the Regex in the
- String starting with position pos
- according to the Replacer rule of this object. */
- public StringLike replaceFirstRegion(StringLike s,Regex r,
- int start,int end) {
- first = true;
- rh.me = r;
- rh.prev = null;
- return dorep(s,start,end);
- }
- public StringLike replaceFirst(StringLike s) {
- return replaceFirstRegion(s,0,s.length());
- }
- public StringLike replaceFirstFrom(StringLike s,int start) {
- return replaceFirstRegion(s,start,s.length());
- }
- public StringLike replaceFirstRegion(StringLike s,int start,int end) {
- first = true;
- return dorep(s,start,end);
- }
+ public StringLike replaceFirstRegion(String s, Regex r,
+ int start, int end)
+ {
+ return replaceFirstRegion(new StringWrap(s), r, start, end);
+ }
- RegHolder rh = new RegHolder();
+ /** This method replaces the first occurence of the Regex in the
+ String starting with position pos
+ according to the Replacer rule of this object. */
+ public StringLike replaceFirstRegion(StringLike s, Regex r,
+ int start, int end)
+ {
+ first = true;
+ rh.me = r;
+ rh.prev = null;
+ return dorep(s, start, end);
+ }
- public StringLike replaceAllRegion(String s,Regex r,
- int start, int end) {
- return replaceAllRegion(new StringWrap(s),r,start,end);
- }
- /** This method replaces all occurences of the Regex in the
- String starting with postition pos
- according to the Replacer rule of this object. */
- public StringLike replaceAllRegion(StringLike s,Regex r,
- int start,int end) {
- first = false;
- // reset
- rh.me = r;
- rh.prev = null;
- return dorep(s,start,end);
- }
- public StringLike replaceAll(StringLike s) {
- return replaceAllRegion(s,0,s.length());
- }
- public StringLike replaceAllFrom(StringLike s,int start) {
- return replaceAllRegion(s,start,s.length());
- }
- public StringLike replaceAllRegion(StringLike s,int start,int end) {
- first = false;
- return dorep(s,start,end);
- }
+ public StringLike replaceFirst(StringLike s)
+ {
+ return replaceFirstRegion(s, 0, s.length());
+ }
- public String replaceAll(String s) {
- return replaceAllRegion(new StringWrap(s),0,s.length()).toString();
- }
- public String replaceAllFrom(String s,int start) {
- return replaceAllRegion(new StringWrap(s),start,s.length()).toString();
- }
- public String replaceAllRegion(String s,int start,int end) {
- first = false;
- return dorep(new StringWrap(s),start,end).toString();
- }
+ public StringLike replaceFirstFrom(StringLike s, int start)
+ {
+ return replaceFirstRegion(s, start, s.length());
+ }
- final public boolean isSpecial(ReplaceRule x) {
- while(x != null) {
- if(x instanceof SpecialRule
- || (x instanceof RuleHolder && ((RuleHolder)x).held instanceof SpecialRule))
- return true;
- x = x.next;
- }
- return false;
- }
- final public void apply1(RegRes rr) {
- rr.charsMatched_++;
- apply(rr,null);
- rr.charsMatched_--;
+ public StringLike replaceFirstRegion(StringLike s, int start, int end)
+ {
+ first = true;
+ return dorep(s, start, end);
+ }
+
+ RegHolder rh = new RegHolder();
+
+ public StringLike replaceAllRegion(String s, Regex r,
+ int start, int end)
+ {
+ return replaceAllRegion(new StringWrap(s), r, start, end);
+ }
+
+ /** This method replaces all occurences of the Regex in the
+ String starting with postition pos
+ according to the Replacer rule of this object. */
+ public StringLike replaceAllRegion(StringLike s, Regex r,
+ int start, int end)
+ {
+ first = false;
+ // reset
+ rh.me = r;
+ rh.prev = null;
+ return dorep(s, start, end);
+ }
+
+ public StringLike replaceAll(StringLike s)
+ {
+ return replaceAllRegion(s, 0, s.length());
+ }
+
+ public StringLike replaceAllFrom(StringLike s, int start)
+ {
+ return replaceAllRegion(s, start, s.length());
+ }
+
+ public StringLike replaceAllRegion(StringLike s, int start, int end)
+ {
+ first = false;
+ return dorep(s, start, end);
+ }
+
+ public String replaceAll(String s)
+ {
+ return replaceAllRegion(new StringWrap(s), 0, s.length()).toString();
+ }
+
+ public String replaceAllFrom(String s, int start)
+ {
+ return replaceAllRegion(new StringWrap(s), start, s.length()).toString();
+ }
+
+ public String replaceAllRegion(String s, int start, int end)
+ {
+ first = false;
+ return dorep(new StringWrap(s), start, end).toString();
+ }
+
+ final public boolean isSpecial(ReplaceRule x)
+ {
+ while (x != null)
+ {
+ if (x instanceof SpecialRule
+ ||
+ (x instanceof RuleHolder && ( (RuleHolder) x).held instanceof SpecialRule))
+ {
+ return true;
+ }
+ x = x.next;
}
+ return false;
+ }
+
+ final public void apply1(RegRes rr)
+ {
+ rr.charsMatched_++;
+ apply(rr, null);
+ rr.charsMatched_--;
+ }
- final StringLike dorep(StringLike s,int start,int end) {
- StringLike ret = s;
- want_more_text = false;
- lastMatchedTo = 0;
- if(rh.me == null)
- throw new NullPointerException("Replacer has null Regex pointer");
- if(rh.me._search(s,start,end)) {
- int rmn = rh.me.matchedTo();
- if(rh.me.charsMatched()==0 && !isSpecial(rh.me.getReplaceRule())) {
- apply1(rh.me);
- rmn++;
+ final StringLike dorep(StringLike s, int start, int end)
+ {
+ StringLike ret = s;
+ want_more_text = false;
+ lastMatchedTo = 0;
+ if (rh.me == null)
+ {
+ throw new NullPointerException("Replacer has null Regex pointer");
+ }
+ if (rh.me._search(s, start, end))
+ {
+ int rmn = rh.me.matchedTo();
+ if (rh.me.charsMatched() == 0 && !isSpecial(rh.me.getReplaceRule()))
+ {
+ apply1(rh.me);
+ rmn++;
+ }
+ apply(rh.me);
+ if (!first)
+ {
+ for (int i = rmn;
+ !want_more_text && rh.me._search(s, i, end); i = rmn)
+ {
+ rmn = rh.me.matchedTo();
+ if (rh.me.charsMatched() == 0)
+ {
+ if (!isSpecial(rh.me.getReplaceRule()))
+ {
+ apply1(rh.me);
}
- apply(rh.me);
- if(!first)
- for(int i=rmn;
- !want_more_text && rh.me._search(s,i,end);i=rmn) {
- rmn = rh.me.matchedTo();
- if(rh.me.charsMatched()==0) {
- if(!isSpecial(rh.me.getReplaceRule()))
- apply1(rh.me);
- rmn++;
- }
- apply(rh.me);
- }
- ret = finish();
- ret = ret == null ? s : ret;
+ rmn++;
+ }
+ apply(rh.me);
}
- return ret;
+ }
+ ret = finish();
+ ret = ret == null ? s : ret;
+ }
+ return ret;
+ }
+
+ StringBufferLike sb = null;
+ StringLike src = null;
+ int pos = 0;
+ /** This method allows you to apply the results of several
+ matches in a sequence to modify a String of text. Each
+ call in the sequence must operate on the same piece of
+ text and the matchedFrom() of each RegRes given to this
+ method must be greater in value than the preceeding
+ RegRes's matchedTo() value.
+ */
+ public void apply(RegRes r, ReplaceRule rp)
+ {
+ if (rp == null || (rp.next == null && rp instanceof AmpersandRule))
+ {
+ return;
}
+ if (r.didMatch())
+ {
+ if (src == null)
+ {
+ src = r.getStringLike();
+ }
+ if (sb == null)
+ {
+ sb = new StringBufferLike(src.newStringBufferLike());
+ }
+ int rmf = r.matchedFrom();
+ for (int ii = pos; ii < rmf; ii++)
+ {
+ sb.append(src.charAt(ii));
+ }
- StringBufferLike sb = null;
- StringLike src = null;
- int pos = 0;
- /** This method allows you to apply the results of several
- matches in a sequence to modify a String of text. Each
- call in the sequence must operate on the same piece of
- text and the matchedFrom() of each RegRes given to this
- method must be greater in value than the preceeding
- RegRes's matchedTo() value.
- */
- public void apply(RegRes r,ReplaceRule rp) {
- if(rp==null ||(rp.next == null && rp instanceof AmpersandRule))
- return;
- if(r.didMatch()) {
- if(src == null)
- src = r.getStringLike();
- if(sb == null)
- sb = new StringBufferLike(src.newStringBufferLike());
- int rmf = r.matchedFrom();
- for(int ii=pos;ii