- // look for things that can be skipped\r
- static Skip findSkip(Pattern p,boolean ignoreCase,boolean trnc) {\r
- StringBuffer sb = new StringBuffer();\r
- Skip subsk = null;\r
- int offset = 0;\r
- int skipc = -1,skipoff=0;\r
- for(;p != null;p = p.next) {\r
- if(p instanceof oneChar) {\r
- skipc = ((oneChar)p).c;\r
- skipoff = offset;\r
- }\r
- if(p instanceof oneChar && p.next instanceof oneChar) {\r
- Pattern psav = p;\r
- sb.append(((oneChar)p).c);\r
- while(p.next instanceof oneChar) {\r
- sb.append(((oneChar)p.next).c);\r
- p = p.next;\r
- }\r
- String st = sb.toString();\r
- char c0 = st.charAt(0), c1 = st.charAt(1);\r
- Skip sk=null;\r
- if(st.length()>2)\r
- sk = new SkipBMH(st,ignoreCase,offset);\r
- else\r
- sk = new Skip2(st,ignoreCase,offset);\r
- if(trnc && st.length()>2) { // chop out a whole string...\r
- psav.next = new Skipped(st.substring(1));\r
- psav.next.next = p.next;\r
- psav.next.parent = p.parent;\r
- }\r
- return sk;\r
- } else if(p instanceof Or && ((Or)p).v.size()==1\r
- && !((Or)p).leftForm().equals("(?!")\r
- && null != (subsk=\r
- findSkip( (Pattern)((Or)p).v.elementAt(0),ignoreCase,trnc) )) {\r
- subsk.offset += offset;\r
- return subsk;\r
- } else if(p.minChars().equals(p.maxChars())) {\r
- offset += p.minChars().intValue();\r
- } else return skipc < 0 ? null :\r
- new Skip(""+(char)skipc,ignoreCase,skipoff);\r
+ return -1;\r
+ }\r
+\r
+ static Skip findSkip(Regex r)\r
+ {\r
+ return findSkip(r.thePattern, r.ignoreCase, !r.dontMatchInQuotes);\r
+ }\r
+\r
+ // look for things that can be skipped\r
+ static Skip findSkip(Pattern p, boolean ignoreCase, boolean trnc)\r
+ {\r
+ StringBuffer sb = new StringBuffer();\r
+ Skip subsk = null;\r
+ int offset = 0;\r
+ int skipc = -1, skipoff = 0;\r
+ for (; p != null; p = p.next)\r
+ {\r
+ if (p instanceof oneChar)\r
+ {\r
+ skipc = ( (oneChar) p).c;\r
+ skipoff = offset;\r
+ }\r
+ if (p instanceof oneChar && p.next instanceof oneChar)\r
+ {\r
+ Pattern psav = p;\r
+ sb.append( ( (oneChar) p).c);\r
+ while (p.next instanceof oneChar)\r
+ {\r
+ sb.append( ( (oneChar) p.next).c);\r
+ p = p.next;\r
+ }\r
+ String st = sb.toString();\r
+ Skip sk = null;\r
+ if (st.length() > 2)\r
+ {\r
+ sk = new SkipBMH(st, ignoreCase, offset);\r
+ }\r
+ else\r
+ {\r
+ sk = new Skip2(st, ignoreCase, offset);\r
+ }\r
+ if (trnc && st.length() > 2)\r
+ { // chop out a whole string...\r
+ psav.next = new Skipped(st.substring(1));\r
+ psav.next.next = p.next;\r
+ psav.next.parent = p.parent;\r