You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by bl...@locus.apache.org on 2000/11/16 19:02:27 UTC
cvs commit: xml-cocoon/src/org/apache/cocoon/matching RegexpTargetHostMatcherFactory.java RegexpURIMatcherFactory.java
bloritsch 00/11/16 10:02:27
Modified: src/org/apache/cocoon/matching Tag: xml-cocoon2
RegexpURIMatcherFactory.java
Added: src/org/apache/cocoon/matching Tag: xml-cocoon2
RegexpTargetHostMatcherFactory.java
Log:
Added patch for RegExp parenthesis. Started work on automating the precompiled
regexp lists.
Revision Changes Path
No revision
No revision
1.1.2.15 +32 -16 xml-cocoon/src/org/apache/cocoon/matching/Attic/RegexpURIMatcherFactory.java
Index: RegexpURIMatcherFactory.java
===================================================================
RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/matching/Attic/RegexpURIMatcherFactory.java,v
retrieving revision 1.1.2.14
retrieving revision 1.1.2.15
diff -u -r1.1.2.14 -r1.1.2.15
--- RegexpURIMatcherFactory.java 2000/11/15 16:49:39 1.1.2.14
+++ RegexpURIMatcherFactory.java 2000/11/16 18:02:26 1.1.2.15
@@ -21,7 +21,7 @@
*
* @author <a href="mailto:Giacomo.Pati@pwr.ch">Giacomo Pati</a>
* @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
- * @version CVS $Revision: 1.1.2.14 $ $Date: 2000/11/15 16:49:39 $
+ * @version CVS $Revision: 1.1.2.15 $ $Date: 2000/11/16 18:02:26 $
*/
public class RegexpURIMatcherFactory implements MatcherFactory {
@@ -39,16 +39,16 @@
String name = prefix;
String instructions = name + "PatternInstructions";
String pat = correctPattern (pattern);
- sb.append("\n // Pre-compiled regular expression '")
+ sb.append("// Pre-compiled regular expression '")
.append(pat).append("'\n")
.append(" static char[] ");
- sb.append(instructions).append(" = \n {");
+ sb.append(instructions).append(" = {");
REProgram program = r.compile(pat);
int numColumns = 7;
char[] p = program.getInstructions();
for (int j = 0; j < p.length; j++) {
if ((j % numColumns) == 0) {
- sb.append("\n ");
+ sb.append("\n");
}
String hex = Integer.toHexString(p[j]);
while (hex.length() < 4) {
@@ -56,12 +56,28 @@
}
sb.append("0x").append(hex).append(", ");
}
- sb.append("\n };")
- .append("\n static RE ")
+ sb.append("\n};\nstatic RE ")
.append(name)
.append("_expr = new RE(new REProgram(")
.append(instructions)
- .append("));");
+ .append("));\n")
+ .append("static ArrayList ")
+ .append(name)
+ .append("_list = new ArrayList();\n")
+ .append("static {");
+ // Count number of parens
+ int i = 0;
+ int j = -1;
+ while ((j = pat.indexOf('(', j+1)) != -1) {
+ if (j == 0 || pat.charAt(j-1) != '\\') {
+ sb.append(name)
+ .append("_list.add (")
+ .append(name)
+ .append("_expr.getParen(")
+ .append(++i).append("));");
+ }
+ }
+ sb.append("}");
return sb.toString();
} catch (RESyntaxException rse) {
throw new ConfigurationException (rse.getMessage());
@@ -75,15 +91,15 @@
.append("String uri = ((HttpServletRequest)objectModel.get(Cocoon.REQUEST_OBJECT)).getRequestURI();")
.append("if(uri.startsWith(\"/\")) uri = uri.substring(1);")
.append("if(pattern.match(uri)) {");
- // Count number of parens
-/* int i = 0;
- int j = -1;
- while ((j = pat.indexOf('(', j+1)) != -1) {
- if (j == 0 || pat.charAt(j-1) != '\\') {
- sb.append("list.add (pattern.getParen(")
- .append(++i).append("));");
- }
- }*/
+ /* Handle parenthesised subexpressions. XXX: could be faster if we count
+ * parens *outside* the generated code.
+ * Note: *ONE* based, not zero.
+ */
+ sb.append("int parenCount = pattern.getParenCount();")
+ .append("for (int paren = 1; paren <= parenCount; paren++) {")
+ .append("list.add(pattern.getParen(paren));")
+ .append("}");
+
sb.append("return list; } else { return null; }");
return sb.toString();
}
No revision
No revision
1.1.2.1 +107 -0 xml-cocoon/src/org/apache/cocoon/matching/Attic/RegexpTargetHostMatcherFactory.java