ant.regexp.regexpimpl as a normal project property PR: 15390 git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@275722 13f79535-47bb-0310-9956-ffa450edef68master
@@ -333,19 +333,8 @@ Convenience method: | |||
Filter which includes only those lines that contain the user-specified | |||
regular expression matching strings. | |||
<TABLE cellSpacing=0 cellPadding=2 border=1> | |||
<TR> | |||
<TD vAlign=top><B>Parameter Type</B></TD> | |||
<TD vAlign=top><B>Parameter Value</B></TD> | |||
<TD vAlign=top align="center"><B>Required</B></TD> | |||
</TR> | |||
<TR> | |||
<TD vAlign=top>regexp</TD> | |||
<TD vAlign=top align="center">Pattern of the substring to be searched for.</TD> | |||
<TD vAlign=top align="center">Yes</TD> | |||
</TR> | |||
</TABLE> | |||
<P> | |||
See <a href="../CoreTypes/regexp.html">Regexp Type</a> for the description of the nested element regexp and of | |||
the choice of regular expression implementation. | |||
<H4>Example:</H4> | |||
This will fetch all those lines that contain the pattern <code>foo</code> | |||
@@ -1112,10 +1101,12 @@ Include only lines that contain "foo"; | |||
</PRE></BLOCKQUOTE> | |||
<p><b><em><a name="replaceregex">ReplaceRegex</a></em></b></p> | |||
This string filter replaces regular expressions. See | |||
<a href="../OptionalTasks/replaceregexp.html">ReplaceRegexp</a> | |||
for an explanation on regular expressions. | |||
This string filter replaces regular expressions. | |||
This filter may be used directly within a filterchain. | |||
<p> | |||
See <a href="../CoreTypes/regexp.html#implementation">Regexp Type</a> | |||
concerning the choice of the implementation. | |||
</p> | |||
<TABLE cellSpacing=0 cellPadding=2 border=1> | |||
<TR> | |||
@@ -1143,7 +1134,6 @@ for an explanation of regex flags.</TD> | |||
<TD vAlign=top align="center">No</TD> | |||
</TR> | |||
</TABLE> | |||
<H4>Examples:</H4> | |||
Replace all occurances of "hello" with "world", ignoring case. | |||
@@ -1158,11 +1148,12 @@ Replace all occurances of "hello" with "world", ignoring case. | |||
<p><b><em><a name="containsregex">ContainsRegex</a></em></b></p> | |||
This filters strings that match regular expressions. | |||
The filter may optionally replace the matched regular expression. | |||
See | |||
<a href="../OptionalTasks/replaceregexp.html">ReplaceRegexp</a> | |||
for an explanation on regular expressions. | |||
This filter may be used directly within a filterchain. | |||
<p> | |||
See | |||
<a href="../CoreTypes/regexp.html#implementation">Regexp Type</a> | |||
concerning the choice of regular expression implementation. | |||
</p> | |||
<TABLE cellSpacing=0 cellPadding=2 border=1> | |||
<TR> | |||
<TD vAlign=top><B>Attribute</B></TD> | |||
@@ -0,0 +1,98 @@ | |||
<html> | |||
<head> | |||
<meta http-equiv="Content-Language" content="en-us"> | |||
<title>Regexp Type</title> | |||
</head> | |||
<body> | |||
<h2><a name="regexp">Regexp</a></h2> | |||
<p> | |||
Regexp represents a regular expression. | |||
<h3>Parameters</h3> | |||
<table border="1" cellpadding="2" cellspacing="0"> | |||
<tr> | |||
<td valign="top"><b>Attribute</b></td> | |||
<td valign="top"><b>Description</b></td> | |||
<td align="center" valign="top"><b>Required</b></td> | |||
</tr> | |||
<tr> | |||
<td valign="top">pattern</td> | |||
<td valign="top">regular expression pattern</td> | |||
<td valign="top" align="center">Yes</td> | |||
</tr> | |||
</table> | |||
<h3>Examples</h3> | |||
<blockquote><pre> | |||
<regexp id="myregexp" pattern="alpha(.+)beta"/><br /> | |||
</pre></blockquote> | |||
<p> | |||
Defines a regular expression for later use with id myregexp. | |||
</p> | |||
<blockquote><pre> | |||
<regexp refid="myregexp"/><br /> | |||
</pre></blockquote> | |||
<p> | |||
Use the regular expression with id myregexp. | |||
</p> | |||
<a name="implementation"/> | |||
<h3>Choice of regular expression implementation</h3> | |||
<p> | |||
Ant comes with | |||
wrappers for | |||
<a href="http://java.sun.com/j2se/1.4/docs/api/java/util/regex/package-summary.html" target="_top">the java.util.regex package of JDK 1.4</a>, | |||
<a href="http://jakarta.apache.org/regexp/" target="_top">jakarta-regexp</a> | |||
and <a href="http://jakarta.apache.org/oro/" target="_top">jakarta-ORO</a>, | |||
See <a href="../install.html#librarydependencies">installation dependencies</a> | |||
concerning the supporting libraries.</p> | |||
<p> | |||
The property <code>ant.regexp.regexpimpl</code> governs which regular expression implementation will be chosen. | |||
Possible values for this property are : | |||
<ul> | |||
<li> | |||
org.apache.tools.ant.util.regexp.Jdk14RegexpRegexp | |||
</li> | |||
<li> | |||
org.apache.tools.ant.util.regexp.JakartaOroRegexp | |||
</li> | |||
<li> | |||
org.apache.tools.ant.util.regexp.JakartaRegexpRegexp | |||
</li> | |||
</ul> | |||
It can also be another implementation of the interface <code>org.apache.tools.ant.util.regexp.Regexp</code>. | |||
If <code>ant.regexp.regexpimpl</code> is not defined, ant checks in the order Jdk14Regexp, JakartaOroRegexp, | |||
JakartaRegexp for the availability of the corresponding library. The first of these 3 which is found will be used.</p> | |||
<p> | |||
There are cross-platform issues for matches related to line terminator. | |||
For example if you use $ to anchor your regular expression on the end of a line | |||
the results might be very different depending on both your platform and the regular | |||
expression library you use. It is 'highly recommended' that you test your pattern on | |||
both Unix and Windows platforms before you rely on it. | |||
<ul> | |||
<li>Jakarta Oro defines a line terminator as '\n' and is consistent with Perl.</li> | |||
<li>Jakarta RegExp uses a system-dependant line terminator.</li> | |||
<li>JDK 1.4 uses '\n', '\r\n', '\u0085', '\u2028', '\u2029' as a default | |||
but is configured in the wrapper to use only '\n' (UNIX_LINE)</li> | |||
</ul> | |||
<em>We <b>strongly</b> recommend that you use Jakarta Oro.</em> | |||
</p> | |||
<h3>Usage</h3> | |||
The following tasks and types use the Regexp type : | |||
<ul> | |||
<li><a href="CoreTasks/replaceregexp.html">ReplaceRegExp task</a></li> | |||
<li><a href="filterchain.html#linecontainsregexp">LineContainsRegexp filter</a></li> | |||
</ul> | |||
<p> | |||
These string filters also use the mechanism of regexp to choose a regular expression implementation : | |||
</p> | |||
<ul> | |||
<li><a href="filterchain.html#containsregex">ContainsRegex string filter</a></li> | |||
<li><a href="filterchain.html#replaceregex">ReplaceRegex string filter</a></li> | |||
</ul> | |||
<hr> | |||
<p align="center">Copyright © 2003 Apache Software Foundation. | |||
All rights Reserved.</p> | |||
</body> | |||
</html> |
@@ -19,7 +19,8 @@ have been regenerated by this task.</p> | |||
<p>Similar to <a href="../CoreTypes/mapper.html#regexp-mapper">regexp | |||
type mappers</a> this task needs a supporting regular expression | |||
library and an implementation of | |||
<code>org.apache.tools.ant.util.regexp.Regexp</code>. See details <a href="#implementation">below</a>. </p> | |||
<code>org.apache.tools.ant.util.regexp.Regexp</code>. | |||
See details in the documentation of the <a href=../CoreTypes/regexp.html#implementation">Regexp Type</a>. </p> | |||
<h3>Parameters</h3> | |||
<table border="1" cellpadding="2" cellspacing="0"> | |||
@@ -79,51 +80,11 @@ library and an implementation of | |||
<p>replaces occurrences of the property name "OldProperty" | |||
with "NewProperty" in a properties file, preserving the existing | |||
value, in the file <code>${src}/build.properties</code></p> | |||
<a name="implementation"/> | |||
<h3>Choice of regular expression implementation</h3> | |||
<p> | |||
Ant comes with | |||
wrappers for | |||
<a href="http://java.sun.com/j2se/1.4/docs/api/java/util/regex/package-summary.html" target="_top">the java.util.regex package of JDK 1.4</a>, | |||
<a href="http://jakarta.apache.org/regexp/" target="_top">jakarta-regexp</a> | |||
and <a href="http://jakarta.apache.org/oro/" target="_top">jakarta-ORO</a>, | |||
See <a href="../install.html#librarydependencies">installation dependencies</a> | |||
concerning the supporting libraries.</p> | |||
<p> | |||
The system property <code>ant.regexp.regexpimpl</code> governs which regular expression implementation will be chosen. | |||
Possible values for this property are : | |||
<ul> | |||
<li> | |||
org.apache.tools.ant.util.regexp.Jdk14RegexpRegexp | |||
</li> | |||
<li> | |||
org.apache.tools.ant.util.regexp.JakartaOroRegexp | |||
</li> | |||
<li> | |||
org.apache.tools.ant.util.regexp.JakartaRegexpRegexp | |||
</li> | |||
</ul> | |||
It can also be another implementation of the interface <code>org.apache.tools.ant.util.regexp.Regexp</code>. | |||
If <code>ant.regexp.regexpimpl</code> is not defined, ant checks in the order Jdk14Regexp, JakartaOroRegexp, | |||
JakartaRegexp for the availability of the corresponding library. The first of these 3 which is found will be used.</p> | |||
<p> | |||
There are cross-platform issues for matches related to line terminator. | |||
For example if you use $ to anchor your regular expression on the end of a line | |||
the results might be very different depending on both your platform and the regular | |||
expression library you use. It is 'highly recommended' that you test your pattern on | |||
both Unix and Windows platforms before you rely on it. | |||
<ul> | |||
<li>Jakarta Oro defines a line terminator as '\n' and is consistent with Perl.</li> | |||
<li>Jakarta RegExp uses a system-dependant line terminator.</li> | |||
<li>JDK 1.4 uses '\n', '\r\n', '\u0085', '\u2028', '\u2029' as a default | |||
but is configured in the wrapper to use only '\n' (UNIX_LINE)</li> | |||
</ul> | |||
<em>We <b>strongly</b> recommend that you use Jakarta Oro.</em> | |||
</p> | |||
<h3>Parameters specified as nested elements</h3> | |||
<p>This task supports a nested <a href="../CoreTypes/fileset.html">FileSet</a> | |||
element.</p> | |||
<p>This task supports a nested <i>Regexp</i> element to specify | |||
<p>This task supports a nested <i><a href="../CoreTypes/regexp.html">Regexp</a></i> element to specify | |||
the regular expression. You can use this element to refer to a previously | |||
defined regular expression datatype instance.</p> | |||
<blockquote> | |||
@@ -27,6 +27,7 @@ | |||
<a href="using.html#path">Path-like Structures</a><br> | |||
<a href="CoreTypes/permissions.html">Permissions</a><br> | |||
<a href="CoreTypes/propertyset.html">PropertySet</a><br> | |||
<a href="CoreTypes/regexp.html">Regexp</a><br> | |||
<a href="CoreTypes/selectors.html">Selectors</a><br> | |||
<a href="CoreTypes/xmlcatalog.html">XMLCatalog</a><br> | |||
<a href="CoreTypes/zipfileset.html">ZipFileSet</a><br> | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2001-2002 The Apache Software Foundation. All rights | |||
* Copyright (c) 2001-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -99,42 +99,81 @@ import org.apache.tools.ant.util.regexp.RegexpFactory; | |||
public class RegularExpression extends DataType { | |||
/** Name of this data type */ | |||
public static final String DATA_TYPE_NAME = "regexp"; | |||
private boolean alreadyInit = false; | |||
// The regular expression factory | |||
private static final RegexpFactory factory = new RegexpFactory(); | |||
private static final RegexpFactory FACTORY = new RegexpFactory(); | |||
private Regexp regexp; | |||
private Regexp regexp = null; | |||
// temporary variable | |||
private String myPattern; | |||
private boolean setPatternPending = false; | |||
/** | |||
* default constructor | |||
*/ | |||
public RegularExpression() { | |||
this.regexp = factory.newRegexp(); | |||
} | |||
private void init(Project p) { | |||
if (!alreadyInit) { | |||
this.regexp = FACTORY.newRegexp(p); | |||
alreadyInit = true; | |||
} | |||
} | |||
private void setPattern() { | |||
if (setPatternPending) { | |||
regexp.setPattern(myPattern); | |||
setPatternPending = false; | |||
} | |||
} | |||
/** | |||
* sets the regular expression pattern | |||
* @param pattern regular expression pattern | |||
*/ | |||
public void setPattern(String pattern) { | |||
this.regexp.setPattern(pattern); | |||
if (regexp == null) { | |||
myPattern = pattern; | |||
setPatternPending = true; | |||
} else { | |||
regexp.setPattern(pattern); | |||
} | |||
} | |||
/*** | |||
* Gets the pattern string for this RegularExpression in the | |||
* given project. | |||
* @param p project | |||
* @return pattern | |||
*/ | |||
public String getPattern(Project p) { | |||
init(p); | |||
if (isReference()) { | |||
return getRef(p).getPattern(p); | |||
} | |||
setPattern(); | |||
return regexp.getPattern(); | |||
} | |||
/** | |||
* provides a reference to the Regexp contained in this | |||
* @param p project | |||
* @return Regexp instance associated with this RegularExpression instance | |||
*/ | |||
public Regexp getRegexp(Project p) { | |||
init(p); | |||
if (isReference()) { | |||
return getRef(p).getRegexp(p); | |||
} | |||
setPattern(); | |||
return this.regexp; | |||
} | |||
/*** | |||
* Get the RegularExpression this reference refers to in | |||
* the given project. Check for circular references too | |||
* @param p project | |||
* @return resolved RegularExpression instance | |||
*/ | |||
public RegularExpression getRef(Project p) { | |||
if (!isChecked()) { | |||
@@ -147,7 +186,7 @@ public class RegularExpression extends DataType { | |||
Object o = getRefid().getReferencedObject(p); | |||
if (!(o instanceof RegularExpression)) { | |||
String msg = getRefid().getRefId() + " doesn\'t denote a " | |||
+ DATA_TYPE_NAME; | |||
+ DATA_TYPE_NAME; | |||
throw new BuildException(msg); | |||
} else { | |||
return (RegularExpression) o; | |||