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]