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