needed for applet search
[jalview.git] / src / com / stevesoft / pat / StrPos.java
diff --git a/src/com/stevesoft/pat/StrPos.java b/src/com/stevesoft/pat/StrPos.java
new file mode 100755 (executable)
index 0000000..4a9f287
--- /dev/null
@@ -0,0 +1,117 @@
+//\r
+// This software is now distributed according to\r
+// the Lesser Gnu Public License.  Please see\r
+// http://www.gnu.org/copyleft/lesser.txt for\r
+// the details.\r
+//    -- Happy Computing!\r
+//\r
+package com.stevesoft.pat;\r
+/** \r
+        Shareware: package pat\r
+   <a href="copyright.html">Copyright 2001, Steven R. Brandt</a>\r
+*/ /**\r
+StrPos is used internally by regex to parse the regular expression. */\r
+public class StrPos {\r
+    String s;\r
+    int pos;\r
+    /** Return the position in the string pointed to */\r
+    public int pos() { return pos; }\r
+\r
+    /** This contains the escape character, which is \ by default. */\r
+    public char esc=Pattern.ESC;\r
+    char c;\r
+    /** Returns the current, possibly escaped, character. */\r
+    public char thisChar() { return c; }\r
+\r
+    boolean dontMatch,eos;\r
+\r
+    /** tell whether we are at end of string */\r
+    public boolean eos() { return eos; }\r
+    /** initialize a StrPos from another StrPos. */\r
+    public StrPos(StrPos sp) {\r
+        dup(sp);\r
+    }\r
+    /** copy a StrPos from sp to this. */\r
+    public void dup(StrPos sp) {\r
+        s = sp.s;\r
+        pos = sp.pos;\r
+        c = sp.c;\r
+        dontMatch = sp.dontMatch;\r
+        eos = sp.eos;\r
+    }\r
+    /** Initialize a StrPos by giving it a String, and a\r
+         position within the String. */\r
+    public StrPos(String s,int pos) {\r
+        this.s=s;\r
+        this.pos=pos-1;\r
+        inc();\r
+    }\r
+    /** Advance the place where StrPos points within the String.\r
+         Counts a backslash as part of the next character. */\r
+    public StrPos inc() {\r
+        pos++;\r
+        if(pos >= s.length()) {\r
+            eos = true;\r
+            return this;\r
+        }\r
+        eos = false;\r
+        c = s.charAt(pos);\r
+        if(c == esc && pos+1<s.length()) {\r
+            pos++;\r
+            c = s.charAt(pos);\r
+            if(c != esc)\r
+                dontMatch = true;\r
+            else\r
+                dontMatch = false;\r
+        } else\r
+            dontMatch = false;\r
+        return this;\r
+    }\r
+    /** Compare the (possibly escaped) character\r
+         pointed to by StrPos.  Return true if they are the\r
+         same, but lways return if character pointed to is escaped. */\r
+    public boolean match(char ch) {\r
+        if(dontMatch || eos) return false;\r
+        return c == ch;\r
+    }\r
+    /** As match, but only matches if the character is escaped. */\r
+    public boolean escMatch(char ch) {\r
+        if(!dontMatch || eos) return false;\r
+        return c == ch;\r
+    }\r
+\r
+    /** Returns true if the current\r
+        character is escaped (preceeded by "\"). */\r
+    public boolean escaped() { return dontMatch; }\r
+    /** Increment the string pointer by each character in\r
+         <pre>st</pre> that matches a non-escaped\r
+         character. */\r
+    public boolean incMatch(String st) {\r
+        StrPos sp = new StrPos(this);\r
+        int i;\r
+        for(i=0;i<st.length();i++) {\r
+            if(!sp.match(st.charAt(i)) )\r
+                return false;\r
+            sp.inc();\r
+        }\r
+        dup(sp);\r
+        return true;\r
+    }\r
+    /** Read in an integer. */\r
+    public patInt getPatInt() {\r
+        patInt pi = null;\r
+        if(incMatch("inf"))\r
+            return new patInf();\r
+        int i,cnt=0;\r
+        StrPos sp = new StrPos(this);\r
+        for(i=0;!sp.eos && sp.c >= '0' && sp.c <= '9';i++) {\r
+            cnt = 10*cnt+sp.c-'0';\r
+            sp.inc();\r
+        }\r
+        if(i==0) return null;\r
+        dup(sp);\r
+        return new patInt(cnt);\r
+    }\r
+    /** get the string that we are processing. */\r
+    public String getString() { return s; }\r
+};\r