You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by bo...@apache.org on 2010/08/17 21:16:19 UTC
svn commit: r986457 - in /ant/core/trunk: WHATSNEW
docs/manual/Types/filterchain.html docs/manual/Types/selectors.html
src/main/org/apache/tools/ant/filters/LineContainsRegExp.java
src/main/org/apache/tools/ant/types/selectors/ContainsRegexpSelector.java
Author: bodewig
Date: Tue Aug 17 19:16:19 2010
New Revision: 986457
URL: http://svn.apache.org/viewvc?rev=986457&view=rev
Log:
support casesensitive in linecontainsregexp and casesensitive, multiline and singleline in containsregexp. PR 49764
Modified:
ant/core/trunk/WHATSNEW
ant/core/trunk/docs/manual/Types/filterchain.html
ant/core/trunk/docs/manual/Types/selectors.html
ant/core/trunk/src/main/org/apache/tools/ant/filters/LineContainsRegExp.java
ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/ContainsRegexpSelector.java
Modified: ant/core/trunk/WHATSNEW
URL: http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?rev=986457&r1=986456&r2=986457&view=diff
==============================================================================
--- ant/core/trunk/WHATSNEW (original)
+++ ant/core/trunk/WHATSNEW Tue Aug 17 19:16:19 2010
@@ -169,6 +169,13 @@ Other changes:
* <copy tofile=""> now also works for non-filesystem resources.
Bugzilla Report 49756.
+ * The <linecontainsregexp> filter now supports a casesensitive
+ attribute.
+
+ * The <containsregexp> selector now supports casesensitive, multiline
+ and singleline attributes.
+ Bugzilla Report 49764.
+
Changes from Ant 1.8.0 TO Ant 1.8.1
===================================
Modified: ant/core/trunk/docs/manual/Types/filterchain.html
URL: http://svn.apache.org/viewvc/ant/core/trunk/docs/manual/Types/filterchain.html?rev=986457&r1=986456&r2=986457&view=diff
==============================================================================
--- ant/core/trunk/docs/manual/Types/filterchain.html (original)
+++ ant/core/trunk/docs/manual/Types/filterchain.html Tue Aug 17 19:16:19 2010
@@ -414,6 +414,12 @@ regular expression matching strings.
<i>non-</i>matching lines only. <b>Since Ant 1.7</b></td>
<td vAlign=top align="center">No</td>
</tr>
+ <tr>
+ <td vAlign=top>casesensitive</td>
+ <td vAlign=top align="center">Perform a case sensitive
+ match. Default is true. <b>Since Ant 1.8.2</b></td>
+ <td vAlign=top align="center">No</td>
+ </tr>
</table>
See <a href="regexp.html">Regexp Type</a> for the description of the nested element regexp and of
Modified: ant/core/trunk/docs/manual/Types/selectors.html
URL: http://svn.apache.org/viewvc/ant/core/trunk/docs/manual/Types/selectors.html?rev=986457&r1=986456&r2=986457&view=diff
==============================================================================
--- ant/core/trunk/docs/manual/Types/selectors.html (original)
+++ ant/core/trunk/docs/manual/Types/selectors.html Tue Aug 17 19:16:19 2010
@@ -557,6 +557,28 @@
match true in every file</td>
<td valign="top" align="center">Yes</td>
</tr>
+ <tr>
+ <td valign="top">casesensitive</td>
+ <td valign="top">Perform a case sensitive match. Default is
+ true. <em>since Ant 1.8.2</em></td>
+ <td valign="top" align="center">No</td>
+ </tr>
+ <tr>
+ <td valign="top">multiline</td>
+ <td valign="top">
+ Perform a multi line match.
+ Default is false. <em>since Ant 1.8.2</em></td>
+ <td valign="top" align="center">No</td>
+ </tr>
+ <tr>
+ <td valign="top">singleline</td>
+ <td valign="top">
+ This allows '.' to match new lines.
+ SingleLine is not to be confused with multiline, SingleLine is a perl
+ regex term, it corresponds to dotall in java regex.
+ Default is false. <em>since Ant 1.8.2</em></td>
+ <td valign="top" align="center">No</td>
+ </tr>
</table>
<p>Here is an example of how to use the regular expression Selector:</p>
Modified: ant/core/trunk/src/main/org/apache/tools/ant/filters/LineContainsRegExp.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/filters/LineContainsRegExp.java?rev=986457&r1=986456&r2=986457&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/filters/LineContainsRegExp.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/filters/LineContainsRegExp.java Tue Aug 17 19:16:19 2010
@@ -24,6 +24,7 @@ import org.apache.tools.ant.Project;
import org.apache.tools.ant.types.Parameter;
import org.apache.tools.ant.types.RegularExpression;
import org.apache.tools.ant.util.regexp.Regexp;
+import org.apache.tools.ant.util.regexp.RegexpUtil;
/**
* Filter which includes only those lines that contain the user-specified
@@ -49,9 +50,12 @@ public final class LineContainsRegExp
/** Parameter name for the regular expression to filter on. */
private static final String REGEXP_KEY = "regexp";
- /** Parameter name for the words to filter on. */
+ /** Parameter name for the negate attribute. */
private static final String NEGATE_KEY = "negate";
+ /** Parameter name for the casesensitive attribute. */
+ private static final String CS_KEY = "casesensitive";
+
/** Vector that holds the expressions that input lines must contain. */
private Vector regexps = new Vector();
@@ -63,6 +67,7 @@ public final class LineContainsRegExp
private String line = null;
private boolean negate = false;
+ private int regexpOptions = Regexp.MATCH_DEFAULT;
/**
* Constructor for "dummy" instances.
@@ -118,7 +123,7 @@ public final class LineContainsRegExp
RegularExpression regexp
= (RegularExpression) regexps.elementAt(i);
Regexp re = regexp.getRegexp(getProject());
- matches = re.matches(line);
+ matches = re.matches(line, regexpOptions);
}
if (matches ^ isNegated()) {
break;
@@ -182,6 +187,10 @@ public final class LineContainsRegExp
LineContainsRegExp newFilter = new LineContainsRegExp(rdr);
newFilter.setRegexps(getRegexps());
newFilter.setNegate(isNegated());
+ newFilter
+ .setCaseSensitive(!RegexpUtil.hasFlag(regexpOptions,
+ Regexp.MATCH_CASE_INSENSITIVE)
+ );
return newFilter;
}
@@ -194,6 +203,14 @@ public final class LineContainsRegExp
}
/**
+ * Whether to match casesensitevly.
+ * @since Ant 1.8.2
+ */
+ public void setCaseSensitive(boolean b) {
+ regexpOptions = RegexpUtil.asOptions(b);
+ }
+
+ /**
* Find out whether we have been negated.
* @return boolean negation flag.
*/
@@ -215,6 +232,8 @@ public final class LineContainsRegExp
regexps.addElement(regexp);
} else if (NEGATE_KEY.equals(params[i].getType())) {
setNegate(Project.toBoolean(params[i].getValue()));
+ } else if (CS_KEY.equals(params[i].getType())) {
+ setCaseSensitive(Project.toBoolean(params[i].getValue()));
}
}
}
Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/ContainsRegexpSelector.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/ContainsRegexpSelector.java?rev=986457&r1=986456&r2=986457&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/ContainsRegexpSelector.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/selectors/ContainsRegexpSelector.java Tue Aug 17 19:16:19 2010
@@ -24,12 +24,14 @@ import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
import org.apache.tools.ant.types.Parameter;
import org.apache.tools.ant.types.RegularExpression;
import org.apache.tools.ant.types.Resource;
import org.apache.tools.ant.types.resources.FileResource;
import org.apache.tools.ant.types.resources.selectors.ResourceSelector;
import org.apache.tools.ant.util.regexp.Regexp;
+import org.apache.tools.ant.util.regexp.RegexpUtil;
/**
* Selector that filters files based on a regular expression.
@@ -42,8 +44,17 @@ public class ContainsRegexpSelector exte
private String userProvidedExpression = null;
private RegularExpression myRegExp = null;
private Regexp myExpression = null;
+ private boolean caseSensitive = true;
+ private boolean multiLine = false;
+ private boolean singleLine = false;
/** Key to used for parameterized custom selector */
public static final String EXPRESSION_KEY = "expression";
+ /** Parameter name for the casesensitive attribute. */
+ private static final String CS_KEY = "casesensitive";
+ /** Parameter name for the multiline attribute. */
+ private static final String ML_KEY = "multiline";
+ /** Parameter name for the singleline attribute. */
+ private static final String SL_KEY = "singleline";
/**
* Creates a new <code>ContainsRegexpSelector</code> instance.
@@ -72,6 +83,34 @@ public class ContainsRegexpSelector exte
}
/**
+ * Whether to ignore case or not.
+ * @param b if false, ignore case.
+ * @since Ant 1.8.2
+ */
+ public void setCaseSensitive(boolean b) {
+ caseSensitive = b;
+ }
+
+ /**
+ * Whether to match should be multiline.
+ * @param b the value to set.
+ * @since Ant 1.8.2
+ */
+ public void setMultiLine(boolean b) {
+ multiLine = b;
+ }
+
+ /**
+ * Whether to treat input as singleline ('.' matches newline).
+ * Corresponsds to java.util.regex.Pattern.DOTALL.
+ * @param b the value to set.
+ * @since Ant 1.8.2
+ */
+ public void setSingleLine(boolean b) {
+ singleLine = b;
+ }
+
+ /**
* When using this as a custom selector, this method will be called.
* It translates each parameter into the appropriate setXXX() call.
*
@@ -84,6 +123,13 @@ public class ContainsRegexpSelector exte
String paramname = parameters[i].getName();
if (EXPRESSION_KEY.equalsIgnoreCase(paramname)) {
setExpression(parameters[i].getValue());
+ } else if (CS_KEY.equalsIgnoreCase(paramname)) {
+ setCaseSensitive(Project
+ .toBoolean(parameters[i].getValue()));
+ } else if (ML_KEY.equalsIgnoreCase(paramname)) {
+ setMultiLine(Project.toBoolean(parameters[i].getValue()));
+ } else if (SL_KEY.equalsIgnoreCase(paramname)) {
+ setSingleLine(Project.toBoolean(parameters[i].getValue()));
} else {
setError("Invalid parameter " + paramname);
}
@@ -148,7 +194,10 @@ public class ContainsRegexpSelector exte
while (teststr != null) {
- if (myExpression.matches(teststr)) {
+ if (myExpression.matches(teststr,
+ RegexpUtil.asOptions(caseSensitive,
+ multiLine,
+ singleLine))) {
return true;
}
teststr = in.readLine();