needed for applet search
[jalview.git] / src / com / stevesoft / pat / lookAhead.java
diff --git a/src/com/stevesoft/pat/lookAhead.java b/src/com/stevesoft/pat/lookAhead.java
new file mode 100755 (executable)
index 0000000..112db7c
--- /dev/null
@@ -0,0 +1,46 @@
+//\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
+import java.util.Hashtable;\r
+\r
+/** Implements "(?=  )" and "(?! )" */\r
+class lookAhead extends Or {\r
+    boolean reverse;\r
+    lookAhead(boolean b) { reverse = b; }\r
+    public Pattern getNext() { return null; }\r
+    public int nextMatch(int pos,Pthings pt) {\r
+        Pattern p = super.getNext();\r
+        if(p != null) return p.matchInternal(pos,pt);\r
+        else return pos;\r
+    }\r
+    public int matchInternal(int pos,Pthings pt) {\r
+        if(super.matchInternal(pos,pt) >= 0) {\r
+            if(reverse) return -1;\r
+            else return nextMatch(pos,pt);\r
+        } else {\r
+            if(reverse) return nextMatch(pos,pt);\r
+            else return -1;\r
+        }\r
+    }\r
+    String leftForm() {\r
+        if(reverse)\r
+            return "(?!";\r
+        else\r
+            return "(?=";\r
+    }\r
+    public patInt minChars() { return new patInt(0); }\r
+    public patInt maxChars() { return new patInt(0); }\r
+    Pattern clone1(Hashtable h) {\r
+        lookAhead la=new lookAhead(reverse);\r
+        h.put(this,la);\r
+        h.put(la,la);\r
+        for(int i=0;i<v.size();i++)\r
+            la.v.addElement( ((Pattern)v.elementAt(i)).clone(h) );\r
+        return la;\r
+    }\r
+}\r