// -- Happy Computing!\r
//\r
package com.stevesoft.pat;\r
-import java.util.Hashtable;\r
+\r
+import java.util.*;\r
\r
/** Provides the ability to match a backreference from within\r
- * a Pattern.\r
- */\r
-class BackMatch extends Pattern {\r
- int id;\r
- BackMatch(int id) { this.id = id; }\r
- public String toString() { return "\\"+(id)+nextString(); }\r
- public int matchInternal(int pos,Pthings p) {\r
- int i1 = p.marks[id];\r
- int i2 = p.marks[id+p.nMarks];\r
- int imax = i2-i1;\r
- if(i1<0||imax < 0||pos+imax>p.src.length()) return -1;\r
- int ns = p.src.length()-pos;\r
- if(imax < ns) ns = imax;\r
- for(int i=0;i<ns;i++) {\r
- if(p.src.charAt(i+i1) != p.src.charAt(pos+i))\r
- return -1;\r
- }\r
- return nextMatch(pos+imax,p);\r
+ * a Pattern.\r
+ */\r
+class BackMatch\r
+ extends Pattern\r
+{\r
+ int id;\r
+ BackMatch(int id)\r
+ {\r
+ this.id = id;\r
+ }\r
+\r
+ public String toString()\r
+ {\r
+ return "\\" + (id) + nextString();\r
+ }\r
+\r
+ public int matchInternal(int pos, Pthings p)\r
+ {\r
+ int i1 = p.marks[id];\r
+ int i2 = p.marks[id + p.nMarks];\r
+ int imax = i2 - i1;\r
+ if (i1 < 0 || imax < 0 || pos + imax > p.src.length())\r
+ {\r
+ return -1;\r
}\r
- Pattern clone1(Hashtable h) { return new BackMatch(id); }\r
-}\r
+ int ns = p.src.length() - pos;\r
+ if (imax < ns)\r
+ {\r
+ ns = imax;\r
+ }\r
+ for (int i = 0; i < ns; i++)\r
+ {\r
+ if (p.src.charAt(i + i1) != p.src.charAt(pos + i))\r
+ {\r
+ return -1;\r
+ }\r
+ }\r
+ return nextMatch(pos + imax, p);\r
+ }\r
\r
+ Pattern clone1(Hashtable h)\r
+ {\r
+ return new BackMatch(id);\r
+ }\r
+}\r