stephan     2003/02/05 04:55:05

  Modified:    src/blocks/chaperon/java/org/apache/cocoon/transformation
                        PatternTransformer.java
               src/blocks/chaperon/samples sitemap.xmap
               src/blocks/chaperon/samples/grammars link.xlex
               src/blocks/chaperon/samples/stylesheets pattern2link.xsl
  Log:
  Allow pattern groups for the PatternTransformer, with this feature you
  be able to write something like s/([a-z]+)@([a-z]+)/\1 at \2/g in
  a XML world.
  
  Revision  Changes    Path
  1.4       +33 -2     
xml-cocoon2/src/blocks/chaperon/java/org/apache/cocoon/transformation/PatternTransformer.java
  
  Index: PatternTransformer.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/blocks/chaperon/java/org/apache/cocoon/transformation/PatternTransformer.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- PatternTransformer.java   4 Feb 2003 15:14:26 -0000       1.3
  +++ PatternTransformer.java   5 Feb 2003 12:55:05 -0000       1.4
  @@ -72,6 +72,8 @@
   import org.apache.avalon.framework.configuration.SAXConfigurationHandler;
   import org.apache.avalon.framework.logger.LogEnabled;
   import org.apache.avalon.framework.logger.Logger;
  +import org.apache.avalon.framework.parameters.ParameterException;
  +import org.apache.avalon.framework.parameters.Parameterizable;
   import org.apache.avalon.framework.parameters.Parameters;
   import org.apache.cocoon.ProcessingException;
   import org.apache.cocoon.caching.CacheableProcessingComponent;
  @@ -109,7 +111,7 @@
    * @version CVS $Id$
    */
   public class PatternTransformer extends AbstractTransformer
  -  implements LogEnabled, Composable, Recyclable, Disposable,
  +  implements LogEnabled, Composable, Recyclable, Disposable, Parameterizable,
                CacheableProcessingComponent {
   
       /** Namespace for the SAX events. */
  @@ -125,6 +127,8 @@
       private LexicalAutomaton automaton = null;
       private PatternProcessor processor = new PatternProcessor();
   
  +    private boolean groups = false;
  +
       private StringBuffer buffer = new StringBuffer();
       private StringBuffer output = new StringBuffer();
   
  @@ -149,6 +153,18 @@
       }
   
       /**
  +     * Provide component with parameters.
  +     *
  +     * @param parameters the parameters
  +     * @throws ParameterException if parameters are invalid
  +     */
  +    public void parameterize(Parameters parameters)
  +      throws ParameterException {
  +
  +        groups = parameters.getParameterAsBoolean("groups", false);
  +    }
  +
  +    /**
        * Set the SourceResolver, objectModel Map, the source and sitemap
        * Parameters used to process the request.
        *
  @@ -400,6 +416,7 @@
           char[] text = buffer.toString().toCharArray();
   
           String lexemesymbol, lexemetext;
  +        String[] groups = null;
           int lexemeindex = 0;
           int position = 0;
   
  @@ -417,6 +434,11 @@
                        (processor.getGroup().length()>=lexemetext.length()))) {
                       lexemesymbol = automaton.getLexemeSymbol(lexemeindex);
                       lexemetext = processor.getGroup();
  +                    if (this.groups) {
  +                      groups = new String[processor.getGroupCount()];
  +                      for (int group=0; group<processor.getGroupCount(); group++)
  +                        groups[group] = processor.getGroup(group);
  +                    }
                   }
               }
   
  @@ -442,6 +464,15 @@
                       atts.addAttribute("", "text", "text", "CDATA",
                                         lexemetext);
                       contentHandler.startElement(NS, "lexeme", "lexeme", atts);
  +
  +                    if (this.groups) {
  +                      for (int group=0; group<groups.length; group++) {
  +                      contentHandler.startElement(NS, "group", "group", new 
AttributesImpl());
  +                      contentHandler.characters(groups[group].toCharArray(), 0, 
groups[group].length());
  +                      contentHandler.endElement(NS, "group", "group");
  +                      }
  +                    }
  +
                       contentHandler.endElement(NS, "lexeme", "lexeme");
                       contentHandler.endPrefixMapping("");
                   } else if (logger!=null) {
  
  
  
  1.6       +3 -1      xml-cocoon2/src/blocks/chaperon/samples/sitemap.xmap
  
  Index: sitemap.xmap
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/blocks/chaperon/samples/sitemap.xmap,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- sitemap.xmap      4 Feb 2003 20:58:31 -0000       1.5
  +++ sitemap.xmap      5 Feb 2003 12:55:05 -0000       1.6
  @@ -36,7 +36,9 @@
   
      <map:transformer name="pattern" 
                       src="org.apache.cocoon.transformation.PatternTransformer" 
  -                    logger="sitemap.transformer.pattern"/>
  +                    logger="sitemap.transformer.pattern">
  +    <parameter name="groups" value="true"/>
  +   </map:transformer>
      <map:transformer name="lexer" 
                       src="org.apache.cocoon.transformation.LexicalTransformer" 
                       logger="sitemap.transformer.lexer"/>
  
  
  
  1.2       +16 -12    xml-cocoon2/src/blocks/chaperon/samples/grammars/link.xlex
  
  Index: link.xlex
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/blocks/chaperon/samples/grammars/link.xlex,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- link.xlex 4 Feb 2003 13:26:34 -0000       1.1
  +++ link.xlex 5 Feb 2003 12:55:05 -0000       1.2
  @@ -56,19 +56,23 @@
    <lexeme symbol="email">
     <concat>
      <concat>
  -    <cclass maxOccurs="*">
  -     <cinterval min="A" max="Z"/>
  -     <cinterval min="a" max="z"/>
  -     <cinterval min="0" max="9"/>
  -     <cset content="._-:"/>
  -    </cclass>
  +    <group>
  +     <cclass maxOccurs="*">
  +      <cinterval min="A" max="Z"/>
  +      <cinterval min="a" max="z"/>
  +      <cinterval min="0" max="9"/>
  +      <cset content="._-:"/>
  +     </cclass>
  +    </group>
       <cstring content="@"/>
  -    <cclass maxOccurs="*">
  -     <cinterval min="A" max="Z"/>
  -     <cinterval min="a" max="z"/>
  -     <cinterval min="0" max="9"/>
  -     <cset content="._-:"/>
  -    </cclass>
  +    <group>
  +     <cclass maxOccurs="*">
  +      <cinterval min="A" max="Z"/>
  +      <cinterval min="a" max="z"/>
  +      <cinterval min="0" max="9"/>
  +      <cset content="._-:"/>
  +     </cclass>
  +    </group>
      </concat>
     </concat>
    </lexeme>
  
  
  
  1.2       +2 -1      
xml-cocoon2/src/blocks/chaperon/samples/stylesheets/pattern2link.xsl
  
  Index: pattern2link.xsl
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/blocks/chaperon/samples/stylesheets/pattern2link.xsl,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- pattern2link.xsl  4 Feb 2003 13:26:34 -0000       1.1
  +++ pattern2link.xsl  5 Feb 2003 12:55:05 -0000       1.2
  @@ -12,7 +12,8 @@
   
    <xsl:template match="lex:lexeme[@symbol='email']">
     <a href="mailto:{@text}";>
  -   <xsl:value-of select="@text"/>
  +   <xsl:value-of select="lex:group[2]"/> at
  +   <xsl:value-of select="lex:group[3]"/>
     </a>
    </xsl:template>
   
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     [EMAIL PROTECTED]
To unsubscribe, e-mail:          [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to