git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@277248 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -34,11 +34,15 @@ public class JakartaOroMatcher implements RegexpMatcher { | |||
| protected final Perl5Compiler compiler = new Perl5Compiler(); | |||
| protected final Perl5Matcher matcher = new Perl5Matcher(); | |||
| /** | |||
| * Constructor for JakartaOroMatcher. | |||
| */ | |||
| public JakartaOroMatcher() { | |||
| } | |||
| /** | |||
| * Set the regexp pattern from the String description. | |||
| * @param pattern the pattern to match | |||
| */ | |||
| public void setPattern(String pattern) { | |||
| this.pattern = pattern; | |||
| @@ -46,6 +50,7 @@ public class JakartaOroMatcher implements RegexpMatcher { | |||
| /** | |||
| * Get a String representation of the regexp pattern | |||
| * @return the pattern | |||
| */ | |||
| public String getPattern() { | |||
| return this.pattern; | |||
| @@ -53,6 +58,9 @@ public class JakartaOroMatcher implements RegexpMatcher { | |||
| /** | |||
| * Get a compiled representation of the regexp pattern | |||
| * @param options the options | |||
| * @return the compiled pattern | |||
| * @throws BuildException on error | |||
| */ | |||
| protected Pattern getCompiledPattern(int options) | |||
| throws BuildException { | |||
| @@ -66,7 +74,10 @@ public class JakartaOroMatcher implements RegexpMatcher { | |||
| } | |||
| /** | |||
| * Does the given argument match the pattern? | |||
| * Does the given argument match the pattern using default options? | |||
| * @param argument the string to match against | |||
| * @return true if the pattern matches | |||
| * @throws BuildException on error | |||
| */ | |||
| public boolean matches(String argument) throws BuildException { | |||
| return matches(argument, MATCH_DEFAULT); | |||
| @@ -74,6 +85,10 @@ public class JakartaOroMatcher implements RegexpMatcher { | |||
| /** | |||
| * Does the given argument match the pattern? | |||
| * @param input the string to match against | |||
| * @param options the regex options to use | |||
| * @return true if the pattern matches | |||
| * @throws BuildException on error | |||
| */ | |||
| public boolean matches(String input, int options) | |||
| throws BuildException { | |||
| @@ -82,10 +97,15 @@ public class JakartaOroMatcher implements RegexpMatcher { | |||
| } | |||
| /** | |||
| * Returns a Vector of matched groups found in the argument. | |||
| * Returns a Vector of matched groups found in the argument | |||
| * using default options. | |||
| * | |||
| * <p>Group 0 will be the full match, the rest are the | |||
| * parenthesized subexpressions</p>. | |||
| * | |||
| * @param argument the string to match against | |||
| * @return the vector of groups | |||
| * @throws BuildException on error | |||
| */ | |||
| public Vector getGroups(String argument) throws BuildException { | |||
| return getGroups(argument, MATCH_DEFAULT); | |||
| @@ -96,6 +116,11 @@ public class JakartaOroMatcher implements RegexpMatcher { | |||
| * | |||
| * <p>Group 0 will be the full match, the rest are the | |||
| * parenthesized subexpressions</p>. | |||
| * | |||
| * @param input the string to match against | |||
| * @param options the regex options to use | |||
| * @return the vector of groups | |||
| * @throws BuildException on error | |||
| */ | |||
| public Vector getGroups(String input, int options) | |||
| throws BuildException { | |||
| @@ -116,6 +141,11 @@ public class JakartaOroMatcher implements RegexpMatcher { | |||
| return v; | |||
| } | |||
| /** | |||
| * Convert the generic options to the regex compiler specific options. | |||
| * @param options the generic options | |||
| * @return the specific options | |||
| */ | |||
| protected int getCompilerOptions(int options) { | |||
| int cOptions = Perl5Compiler.DEFAULT_MASK; | |||
| @@ -28,10 +28,19 @@ import org.apache.tools.ant.BuildException; | |||
| */ | |||
| public class JakartaOroRegexp extends JakartaOroMatcher implements Regexp { | |||
| /** Constructor for JakartaOroRegexp */ | |||
| public JakartaOroRegexp() { | |||
| super(); | |||
| } | |||
| /** | |||
| * Perform a substitution on the regular expression. | |||
| * @param input The string to substitute on | |||
| * @param argument The string which defines the substitution | |||
| * @param options The list of options for the match and replace. | |||
| * @return the result of the operation | |||
| * @throws BuildException on error | |||
| */ | |||
| public String substitute(String input, String argument, int options) | |||
| throws BuildException { | |||
| // translate \1 to $1 so that the Perl5Substitution will work | |||
| @@ -71,6 +80,12 @@ public class JakartaOroRegexp extends JakartaOroMatcher implements Regexp { | |||
| getSubsOptions(options)); | |||
| } | |||
| /** | |||
| * Convert ant regexp substitution option to oro options. | |||
| * | |||
| * @param options the ant regexp options | |||
| * @return the oro substition options | |||
| */ | |||
| protected int getSubsOptions(int options) { | |||
| boolean replaceAll = RegexpUtil.hasFlag(options, REPLACE_ALL); | |||
| int subsOptions = 1; | |||
| @@ -32,6 +32,7 @@ public class JakartaRegexpMatcher implements RegexpMatcher { | |||
| /** | |||
| * Set the regexp pattern from the String description. | |||
| * @param pattern the pattern to match | |||
| */ | |||
| public void setPattern(String pattern) { | |||
| this.pattern = pattern; | |||
| @@ -39,11 +40,19 @@ public class JakartaRegexpMatcher implements RegexpMatcher { | |||
| /** | |||
| * Get a String representation of the regexp pattern | |||
| * @return the pattern | |||
| */ | |||
| public String getPattern() { | |||
| return pattern; | |||
| } | |||
| /** | |||
| * Compile the pattern. | |||
| * | |||
| * @param options the ant regexp options | |||
| * @return a compiled pattern | |||
| * @exception BuildException if an error occurs | |||
| */ | |||
| protected RE getCompiledPattern(int options) | |||
| throws BuildException { | |||
| int cOptions = getCompilerOptions(options); | |||
| @@ -58,6 +67,9 @@ public class JakartaRegexpMatcher implements RegexpMatcher { | |||
| /** | |||
| * Does the given argument match the pattern? | |||
| * @param argument the string to match against | |||
| * @return true if the pattern matches | |||
| * @throws BuildException on error | |||
| */ | |||
| public boolean matches(String argument) throws BuildException { | |||
| return matches(argument, MATCH_DEFAULT); | |||
| @@ -65,6 +77,10 @@ public class JakartaRegexpMatcher implements RegexpMatcher { | |||
| /** | |||
| * Does the given argument match the pattern? | |||
| * @param input the string to match against | |||
| * @param options the regex options to use | |||
| * @return true if the pattern matches | |||
| * @throws BuildException on error | |||
| */ | |||
| public boolean matches(String input, int options) | |||
| throws BuildException { | |||
| @@ -76,15 +92,31 @@ public class JakartaRegexpMatcher implements RegexpMatcher { | |||
| } | |||
| /** | |||
| * Returns a Vector of matched groups found in the argument. | |||
| * Returns a Vector of matched groups found in the argument | |||
| * using default options. | |||
| * | |||
| * <p>Group 0 will be the full match, the rest are the | |||
| * parenthesized subexpressions</p>. | |||
| * | |||
| * @param argument the string to match against | |||
| * @return the vector of groups | |||
| * @throws BuildException on error | |||
| */ | |||
| public Vector getGroups(String argument) throws BuildException { | |||
| return getGroups(argument, MATCH_DEFAULT); | |||
| } | |||
| /** | |||
| * Returns a Vector of matched groups found in the argument. | |||
| * | |||
| * <p>Group 0 will be the full match, the rest are the | |||
| * parenthesized subexpressions</p>. | |||
| * | |||
| * @param input the string to match against | |||
| * @param options the regex options to use | |||
| * @return the vector of groups | |||
| * @throws BuildException on error | |||
| */ | |||
| public Vector getGroups(String input, int options) | |||
| throws BuildException { | |||
| RE reg = getCompiledPattern(options); | |||
| @@ -104,6 +136,11 @@ public class JakartaRegexpMatcher implements RegexpMatcher { | |||
| return v; | |||
| } | |||
| /** | |||
| * Convert the generic options to the regex compiler specific options. | |||
| * @param options the generic options | |||
| * @return the specific options | |||
| */ | |||
| protected int getCompilerOptions(int options) { | |||
| int cOptions = RE.MATCH_NORMAL; | |||
| @@ -27,10 +27,17 @@ import org.apache.tools.ant.BuildException; | |||
| public class JakartaRegexpRegexp extends JakartaRegexpMatcher | |||
| implements Regexp { | |||
| /** Constructor for JakartaRegexpRegexp */ | |||
| public JakartaRegexpRegexp() { | |||
| super(); | |||
| } | |||
| /** | |||
| * Convert ant regexp substitution option to apache regex options. | |||
| * | |||
| * @param options the ant regexp options | |||
| * @return the apache regex substition options | |||
| */ | |||
| protected int getSubsOptions(int options) { | |||
| int subsOptions = RE.REPLACE_FIRSTONLY; | |||
| if (RegexpUtil.hasFlag(options, REPLACE_ALL)) { | |||
| @@ -39,6 +46,14 @@ public class JakartaRegexpRegexp extends JakartaRegexpMatcher | |||
| return subsOptions; | |||
| } | |||
| /** | |||
| * Perform a substitution on the regular expression. | |||
| * @param input The string to substitute on | |||
| * @param argument The string which defines the substitution | |||
| * @param options The list of options for the match and replace. | |||
| * @return the result of the operation | |||
| * @throws BuildException on error | |||
| */ | |||
| public String substitute(String input, String argument, int options) | |||
| throws BuildException { | |||
| Vector v = getGroups(input, options); | |||
| @@ -32,11 +32,13 @@ public class Jdk14RegexpMatcher implements RegexpMatcher { | |||
| private String pattern; | |||
| /** Constructor for JakartaOroRegexp */ | |||
| public Jdk14RegexpMatcher() { | |||
| } | |||
| /** | |||
| * Set the regexp pattern from the String description. | |||
| * @param pattern the pattern to match | |||
| */ | |||
| public void setPattern(String pattern) { | |||
| this.pattern = pattern; | |||
| @@ -44,11 +46,19 @@ public class Jdk14RegexpMatcher implements RegexpMatcher { | |||
| /** | |||
| * Get a String representation of the regexp pattern | |||
| * @return the pattern | |||
| * @throws BuildException on error | |||
| */ | |||
| public String getPattern() { | |||
| return pattern; | |||
| } | |||
| /** | |||
| * Get a compiled representation of the regexp pattern | |||
| * @param options the options | |||
| * @return the compiled pattern | |||
| * @throws BuildException on error | |||
| */ | |||
| protected Pattern getCompiledPattern(int options) | |||
| throws BuildException { | |||
| int cOptions = getCompilerOptions(options); | |||
| @@ -61,7 +71,10 @@ public class Jdk14RegexpMatcher implements RegexpMatcher { | |||
| } | |||
| /** | |||
| * Does the given argument match the pattern? | |||
| * Does the given argument match the pattern using default options? | |||
| * @param argument the string to match against | |||
| * @return true if the pattern matches | |||
| * @throws BuildException on error | |||
| */ | |||
| public boolean matches(String argument) throws BuildException { | |||
| return matches(argument, MATCH_DEFAULT); | |||
| @@ -69,6 +82,10 @@ public class Jdk14RegexpMatcher implements RegexpMatcher { | |||
| /** | |||
| * Does the given argument match the pattern? | |||
| * @param input the string to match against | |||
| * @param options the regex options to use | |||
| * @return true if the pattern matches | |||
| * @throws BuildException on error | |||
| */ | |||
| public boolean matches(String input, int options) | |||
| throws BuildException { | |||
| @@ -81,10 +98,15 @@ public class Jdk14RegexpMatcher implements RegexpMatcher { | |||
| } | |||
| /** | |||
| * Returns a Vector of matched groups found in the argument. | |||
| * Returns a Vector of matched groups found in the argument | |||
| * using default options. | |||
| * | |||
| * <p>Group 0 will be the full match, the rest are the | |||
| * parenthesized subexpressions</p>. | |||
| * | |||
| * @param argument the string to match against | |||
| * @return the vector of groups | |||
| * @throws BuildException on error | |||
| */ | |||
| public Vector getGroups(String argument) throws BuildException { | |||
| return getGroups(argument, MATCH_DEFAULT); | |||
| @@ -95,6 +117,11 @@ public class Jdk14RegexpMatcher implements RegexpMatcher { | |||
| * | |||
| * <p>Group 0 will be the full match, the rest are the | |||
| * parenthesized subexpressions</p>. | |||
| * | |||
| * @param input the string to match against | |||
| * @param options the regex options to use | |||
| * @return the vector of groups | |||
| * @throws BuildException on error | |||
| */ | |||
| public Vector getGroups(String input, int options) | |||
| throws BuildException { | |||
| @@ -116,6 +143,11 @@ public class Jdk14RegexpMatcher implements RegexpMatcher { | |||
| return v; | |||
| } | |||
| /** | |||
| * Convert the generic options to the regex compiler specific options. | |||
| * @param options the generic options | |||
| * @return the specific options | |||
| */ | |||
| protected int getCompilerOptions(int options) { | |||
| // be strict about line separator | |||
| int cOptions = Pattern.UNIX_LINES; | |||
| @@ -27,10 +27,17 @@ import org.apache.tools.ant.BuildException; | |||
| */ | |||
| public class Jdk14RegexpRegexp extends Jdk14RegexpMatcher implements Regexp { | |||
| /** Constructor for Jdk14RegexpRegexp */ | |||
| public Jdk14RegexpRegexp() { | |||
| super(); | |||
| } | |||
| /** | |||
| * Convert ant regexp substitution option to jdk1.4 options. | |||
| * | |||
| * @param options the ant regexp options | |||
| * @return the jdk14 substition options | |||
| */ | |||
| protected int getSubsOptions(int options) { | |||
| int subsOptions = REPLACE_FIRST; | |||
| if (RegexpUtil.hasFlag(options, REPLACE_ALL)) { | |||
| @@ -39,6 +46,14 @@ public class Jdk14RegexpRegexp extends Jdk14RegexpMatcher implements Regexp { | |||
| return subsOptions; | |||
| } | |||
| /** | |||
| * Perform a substitution on the regular expression. | |||
| * @param input The string to substitute on | |||
| * @param argument The string which defines the substitution | |||
| * @param options The list of options for the match and replace. | |||
| * @return the result of the operation | |||
| * @throws BuildException on error | |||
| */ | |||
| public String substitute(String input, String argument, int options) | |||
| throws BuildException { | |||
| // translate \1 to $(1) so that the Matcher will work | |||
| @@ -41,6 +41,8 @@ public interface Regexp extends RegexpMatcher { | |||
| * @param argument The string which defines the substitution | |||
| * @param options The list of options for the match and replace. See the | |||
| * MATCH_ and REPLACE_ constants above. | |||
| * @return the result of the operation | |||
| * @throws BuildException on error | |||
| */ | |||
| String substitute(String input, String argument, int options) | |||
| throws BuildException; | |||
| @@ -27,11 +27,15 @@ import org.apache.tools.ant.Project; | |||
| * @version $Revision$ | |||
| */ | |||
| public class RegexpFactory extends RegexpMatcherFactory { | |||
| /** Constructor for RegexpFactory */ | |||
| public RegexpFactory() { | |||
| } | |||
| /*** | |||
| * Create a new regular expression matcher instance. | |||
| * @return the matcher instance | |||
| * @throws BuildException on error | |||
| */ | |||
| public Regexp newRegexp() throws BuildException { | |||
| return (Regexp) newRegexp(null); | |||
| @@ -41,6 +45,8 @@ public class RegexpFactory extends RegexpMatcherFactory { | |||
| * Create a new regular expression matcher instance. | |||
| * | |||
| * @param p Project whose ant.regexp.regexpimpl property will be used. | |||
| * @return the matcher instance | |||
| * @throws BuildException on error | |||
| */ | |||
| public Regexp newRegexp(Project p) throws BuildException { | |||
| String systemDefault = null; | |||
| @@ -50,24 +50,36 @@ public interface RegexpMatcher { | |||
| /** | |||
| * Set the regexp pattern from the String description. | |||
| * @param pattern the pattern to match | |||
| * @throws BuildException on error | |||
| */ | |||
| void setPattern(String pattern) throws BuildException; | |||
| /** | |||
| * Get a String representation of the regexp pattern | |||
| * @return the pattern | |||
| * @throws BuildException on error | |||
| */ | |||
| String getPattern() throws BuildException; | |||
| /** | |||
| * Does the given argument match the pattern? | |||
| * @param argument the string to match against | |||
| * @return true if the pattern matches | |||
| * @throws BuildException on error | |||
| */ | |||
| boolean matches(String argument) throws BuildException; | |||
| /** | |||
| * Returns a Vector of matched groups found in the argument. | |||
| * Returns a Vector of matched groups found in the argument | |||
| * using default options. | |||
| * | |||
| * <p>Group 0 will be the full match, the rest are the | |||
| * parenthesized subexpressions</p>. | |||
| * | |||
| * @param argument the string to match against | |||
| * @return the vector of groups | |||
| * @throws BuildException on error | |||
| */ | |||
| Vector getGroups(String argument) throws BuildException; | |||
| @@ -77,6 +89,8 @@ public interface RegexpMatcher { | |||
| * @param input The string to check for a match | |||
| * @param options The list of options for the match. See the | |||
| * MATCH_ constants above. | |||
| * @return true if the pattern matches | |||
| * @throws BuildException on error | |||
| */ | |||
| boolean matches(String input, int options) throws BuildException; | |||
| @@ -86,6 +100,8 @@ public interface RegexpMatcher { | |||
| * @param input The string to check for a match | |||
| * @param options The list of options for the match. See the | |||
| * MATCH_ constants above. | |||
| * @return the vector of groups | |||
| * @throws BuildException on error | |||
| */ | |||
| Vector getGroups(String input, int options) throws BuildException; | |||
| @@ -32,11 +32,14 @@ import org.apache.tools.ant.Project; | |||
| */ | |||
| public class RegexpMatcherFactory { | |||
| /** Constructor for RegexpMatcherFactory. */ | |||
| public RegexpMatcherFactory() { | |||
| } | |||
| /*** | |||
| * Create a new regular expression instance. | |||
| * @return the matcher | |||
| * @throws BuildException on error | |||
| */ | |||
| public RegexpMatcher newRegexpMatcher() throws BuildException { | |||
| return newRegexpMatcher(null); | |||
| @@ -46,6 +49,8 @@ public class RegexpMatcherFactory { | |||
| * Create a new regular expression instance. | |||
| * | |||
| * @param p Project whose ant.regexp.regexpimpl property will be used. | |||
| * @return the matcher | |||
| * @throws BuildException on error | |||
| */ | |||
| public RegexpMatcher newRegexpMatcher(Project p) | |||
| throws BuildException { | |||
| @@ -86,6 +91,13 @@ public class RegexpMatcherFactory { | |||
| throw new BuildException("No supported regular expression matcher found"); | |||
| } | |||
| /** | |||
| * Create an instance of a matcher from a classname. | |||
| * | |||
| * @param className a <code>String</code> value | |||
| * @return a <code>RegexpMatcher</code> value | |||
| * @exception BuildException if an error occurs | |||
| */ | |||
| protected RegexpMatcher createInstance(String className) | |||
| throws BuildException { | |||
| try { | |||
| @@ -96,6 +108,12 @@ public class RegexpMatcherFactory { | |||
| } | |||
| } | |||
| /** | |||
| * Test if a particular class is available to be used. | |||
| * | |||
| * @param className a <code>String</code> value | |||
| * @exception BuildException if an error occurs | |||
| */ | |||
| protected void testAvailability(String className) throws BuildException { | |||
| try { | |||
| Class.forName(className); | |||
| @@ -17,18 +17,32 @@ | |||
| package org.apache.tools.ant.util.regexp; | |||
| /*** | |||
| * Regular expression utilities class which handles flag operations | |||
| * Regular expression utilities class which handles flag operations. | |||
| * | |||
| */ | |||
| public class RegexpUtil { | |||
| public final class RegexpUtil { | |||
| private RegexpUtil() { | |||
| } | |||
| public static final boolean hasFlag(int options, int flag) { | |||
| /** | |||
| * Check the options has a particular flag set. | |||
| * | |||
| * @param options an <code>int</code> value | |||
| * @param flag an <code>int</code> value | |||
| * @return true if the flag is set | |||
| */ | |||
| public static boolean hasFlag(int options, int flag) { | |||
| return ((options & flag) > 0); | |||
| } | |||
| public static final int removeFlag(int options, int flag) { | |||
| /** | |||
| * Remove a particular flag from an int value contains the option flags. | |||
| * | |||
| * @param options an <code>int</code> value | |||
| * @param flag an <code>int</code> value | |||
| * @return the options with the flag unset | |||
| */ | |||
| public static int removeFlag(int options, int flag) { | |||
| return (options & (0xFFFFFFFF - flag)); | |||
| } | |||
| } | |||