needed for applet search
[jalview.git] / src / com / stevesoft / pat / Multi.java
diff --git a/src/com/stevesoft/pat/Multi.java b/src/com/stevesoft/pat/Multi.java
new file mode 100755 (executable)
index 0000000..2960b75
--- /dev/null
@@ -0,0 +1,60 @@
+//\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
+/** Matches any number of instances of sub Pattern\r
+ this was the hardest method to write.  It implements\r
+ '+', '*', '?', "{0,10}", "{5,}", "{5}", etc.\r
+ @see pat.Multi_stage2\r
+ @see pat.MultiMin\r
+ */\r
+class Multi extends PatternSub {\r
+    patInt a,b;\r
+    public patInt minChars() { return a.mul(p.countMinChars()); }\r
+    public patInt maxChars() { return b.mul(p.countMaxChars()); }\r
+    Pattern p;\r
+    Multi_stage2 st2;\r
+    public boolean matchFewest = false;\r
+    /**\r
+        @param a The fewest number of times the sub pattern can match.\r
+        @param b The maximum number of times the sub pattern can match.\r
+        @param p The sub pattern.\r
+        @see Multi_stage2\r
+        @see MultiMin\r
+        */\r
+    public Multi(patInt a,patInt b,Pattern p) throws RegSyntax {\r
+        this.a = a;\r
+        this.b = b;\r
+        this.p = p;\r
+        st2 = new Multi_stage2(a,b,p);\r
+        st2.parent = this;\r
+        sub = st2.sub;\r
+    }\r
+    public String toString() {\r
+        st2.matchFewest = matchFewest;\r
+        return st2.toString();\r
+    }\r
+    public int matchInternal(int pos,Pthings pt) {\r
+        try {\r
+            st2 = new Multi_stage2(a,b,p);\r
+        } catch(RegSyntax r__) {}\r
+        st2.matchFewest = matchFewest;\r
+        st2.parent = this;\r
+        return st2.matchInternal(pos,pt);\r
+    }\r
+    public Pattern clone1(Hashtable h) {\r
+        try {\r
+            Multi m = new Multi(a,b,((Pattern)p).clone(h));\r
+            m.matchFewest = matchFewest;\r
+            return m;\r
+        } catch(RegSyntax rs) {\r
+            return null;\r
+        }\r
+    }\r
+};\r