git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@986445 13f79535-47bb-0310-9956-ffa450edef68master
@@ -29,6 +29,7 @@ import org.apache.tools.ant.util.Tokenizer; | |||||
import org.apache.tools.ant.util.LineTokenizer; | import org.apache.tools.ant.util.LineTokenizer; | ||||
import org.apache.tools.ant.util.StringUtils; | import org.apache.tools.ant.util.StringUtils; | ||||
import org.apache.tools.ant.util.regexp.Regexp; | import org.apache.tools.ant.util.regexp.Regexp; | ||||
import org.apache.tools.ant.util.regexp.RegexpUtil; | |||||
/** | /** | ||||
* This splits up input into tokens and passes | * This splits up input into tokens and passes | ||||
@@ -705,22 +706,6 @@ public class TokenFilter extends BaseFilterReader | |||||
* @return the Regexp option bits | * @return the Regexp option bits | ||||
*/ | */ | ||||
public static int convertRegexOptions(String flags) { | public static int convertRegexOptions(String flags) { | ||||
if (flags == null) { | |||||
return 0; | |||||
} | |||||
int options = 0; | |||||
if (flags.indexOf('g') != -1) { | |||||
options |= Regexp.REPLACE_ALL; | |||||
} | |||||
if (flags.indexOf('i') != -1) { | |||||
options |= Regexp.MATCH_CASE_INSENSITIVE; | |||||
} | |||||
if (flags.indexOf('m') != -1) { | |||||
options |= Regexp.MATCH_MULTILINE; | |||||
} | |||||
if (flags.indexOf('s') != -1) { | |||||
options |= Regexp.MATCH_SINGLELINE; | |||||
} | |||||
return options; | |||||
return RegexpUtil.asOptions(flags); | |||||
} | } | ||||
} | } |
@@ -19,9 +19,9 @@ package org.apache.tools.ant.taskdefs.condition; | |||||
import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
import org.apache.tools.ant.ProjectComponent; | import org.apache.tools.ant.ProjectComponent; | ||||
import org.apache.tools.ant.util.regexp.Regexp; | |||||
import org.apache.tools.ant.types.RegularExpression; | import org.apache.tools.ant.types.RegularExpression; | ||||
import org.apache.tools.ant.util.regexp.RegexpMatcher; | |||||
import org.apache.tools.ant.util.regexp.Regexp; | |||||
import org.apache.tools.ant.util.regexp.RegexpUtil; | |||||
/** | /** | ||||
* Simple regular expression condition. | * Simple regular expression condition. | ||||
@@ -112,16 +112,7 @@ public class Matches extends ProjectComponent implements Condition { | |||||
if (regularExpression == null) { | if (regularExpression == null) { | ||||
throw new BuildException("Missing pattern in matches."); | throw new BuildException("Missing pattern in matches."); | ||||
} | } | ||||
int options = RegexpMatcher.MATCH_DEFAULT; | |||||
if (!caseSensitive) { | |||||
options = options | RegexpMatcher.MATCH_CASE_INSENSITIVE; | |||||
} | |||||
if (multiLine) { | |||||
options = options | RegexpMatcher.MATCH_MULTILINE; | |||||
} | |||||
if (singleLine) { | |||||
options = options | RegexpMatcher.MATCH_SINGLELINE; | |||||
} | |||||
int options = RegexpUtil.asOptions(caseSensitive, multiLine, singleLine); | |||||
Regexp regexp = regularExpression.getRegexp(getProject()); | Regexp regexp = regularExpression.getRegexp(getProject()); | ||||
return regexp.matches(string, options); | return regexp.matches(string, options); | ||||
} | } | ||||
@@ -43,6 +43,7 @@ import org.apache.tools.ant.types.resources.FileProvider; | |||||
import org.apache.tools.ant.types.resources.Union; | import org.apache.tools.ant.types.resources.Union; | ||||
import org.apache.tools.ant.util.FileUtils; | import org.apache.tools.ant.util.FileUtils; | ||||
import org.apache.tools.ant.util.regexp.Regexp; | import org.apache.tools.ant.util.regexp.Regexp; | ||||
import org.apache.tools.ant.util.regexp.RegexpUtil; | |||||
/** | /** | ||||
* Performs regular expression string replacements in a text | * Performs regular expression string replacements in a text | ||||
@@ -513,23 +514,7 @@ public class ReplaceRegExp extends Task { | |||||
+ "time."); | + "time."); | ||||
} | } | ||||
int options = 0; | |||||
if (flags.indexOf('g') != -1) { | |||||
options |= Regexp.REPLACE_ALL; | |||||
} | |||||
if (flags.indexOf('i') != -1) { | |||||
options |= Regexp.MATCH_CASE_INSENSITIVE; | |||||
} | |||||
if (flags.indexOf('m') != -1) { | |||||
options |= Regexp.MATCH_MULTILINE; | |||||
} | |||||
if (flags.indexOf('s') != -1) { | |||||
options |= Regexp.MATCH_SINGLELINE; | |||||
} | |||||
int options = RegexpUtil.asOptions(flags); | |||||
if (file != null && file.exists()) { | if (file != null && file.exists()) { | ||||
try { | try { | ||||
@@ -22,6 +22,7 @@ import org.apache.tools.ant.types.RegularExpression; | |||||
import org.apache.tools.ant.types.Resource; | import org.apache.tools.ant.types.Resource; | ||||
import org.apache.tools.ant.types.selectors.SelectorUtils; | import org.apache.tools.ant.types.selectors.SelectorUtils; | ||||
import org.apache.tools.ant.util.regexp.Regexp; | import org.apache.tools.ant.util.regexp.Regexp; | ||||
import org.apache.tools.ant.util.regexp.RegexpUtil; | |||||
/** | /** | ||||
* Name ResourceSelector. | * Name ResourceSelector. | ||||
@@ -137,11 +138,7 @@ public class Name implements ResourceSelector { | |||||
reg.setPattern(regex); | reg.setPattern(regex); | ||||
expression = reg.getRegexp(project); | expression = reg.getRegexp(project); | ||||
} | } | ||||
int options = Regexp.MATCH_DEFAULT; | |||||
if (!cs) { | |||||
options |= Regexp.MATCH_CASE_INSENSITIVE; | |||||
} | |||||
return expression.matches(modify(name), options); | |||||
return expression.matches(modify(name), RegexpUtil.asOptions(cs)); | |||||
} | } | ||||
} | } | ||||
@@ -24,6 +24,7 @@ import org.apache.tools.ant.Project; | |||||
import org.apache.tools.ant.types.Parameter; | import org.apache.tools.ant.types.Parameter; | ||||
import org.apache.tools.ant.types.RegularExpression; | import org.apache.tools.ant.types.RegularExpression; | ||||
import org.apache.tools.ant.util.regexp.Regexp; | import org.apache.tools.ant.util.regexp.Regexp; | ||||
import org.apache.tools.ant.util.regexp.RegexpUtil; | |||||
/** | /** | ||||
* Selector that filters files based on the filename. | * Selector that filters files based on the filename. | ||||
@@ -185,10 +186,7 @@ public class FilenameSelector extends BaseExtendSelector { | |||||
reg.setPattern(regex); | reg.setPattern(regex); | ||||
expression = reg.getRegexp(getProject()); | expression = reg.getRegexp(getProject()); | ||||
} | } | ||||
int options = Regexp.MATCH_DEFAULT; | |||||
if (!casesensitive) { | |||||
options |= Regexp.MATCH_CASE_INSENSITIVE; | |||||
} | |||||
int options = RegexpUtil.asOptions(casesensitive); | |||||
return expression.matches(filename, options) == !negated; | return expression.matches(filename, options) == !negated; | ||||
} | } | ||||
} | } | ||||
@@ -22,6 +22,7 @@ import java.util.Vector; | |||||
import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
import org.apache.tools.ant.util.regexp.RegexpMatcher; | import org.apache.tools.ant.util.regexp.RegexpMatcher; | ||||
import org.apache.tools.ant.util.regexp.RegexpMatcherFactory; | import org.apache.tools.ant.util.regexp.RegexpMatcherFactory; | ||||
import org.apache.tools.ant.util.regexp.RegexpUtil; | |||||
/** | /** | ||||
* Implementation of FileNameMapper that does regular expression | * Implementation of FileNameMapper that does regular expression | ||||
@@ -67,11 +68,7 @@ public class RegexpPatternMapper implements FileNameMapper { | |||||
* @since Ant 1.6.3 | * @since Ant 1.6.3 | ||||
*/ | */ | ||||
public void setCaseSensitive(boolean caseSensitive) { | public void setCaseSensitive(boolean caseSensitive) { | ||||
if (!caseSensitive) { | |||||
regexpOptions = RegexpMatcher.MATCH_CASE_INSENSITIVE; | |||||
} else { | |||||
regexpOptions = 0; | |||||
} | |||||
regexpOptions = RegexpUtil.asOptions(caseSensitive); | |||||
} | } | ||||
/** | /** | ||||
@@ -46,4 +46,64 @@ public class RegexpUtil { | |||||
public static int removeFlag(int options, int flag) { | public static int removeFlag(int options, int flag) { | ||||
return (options & (0xFFFFFFFF - flag)); | return (options & (0xFFFFFFFF - flag)); | ||||
} | } | ||||
/** | |||||
* convert regex option flag characters to regex options | |||||
* <dl> | |||||
* <li>g - Regexp.REPLACE_ALL</li> | |||||
* <li>i - RegexpMatcher.MATCH_CASE_INSENSITIVE</li> | |||||
* <li>m - RegexpMatcher.MATCH_MULTILINE</li> | |||||
* <li>s - RegexpMatcher.MATCH_SINGLELINE</li> | |||||
* </dl> | |||||
* @param flags the string containing the flags | |||||
* @return the Regexp option bits | |||||
* @since Ant 1.8.2 | |||||
*/ | |||||
public static int asOptions(String flags) { | |||||
int options = RegexpMatcher.MATCH_DEFAULT; | |||||
if (flags != null) { | |||||
options = asOptions(flags.indexOf('i') == -1, | |||||
flags.indexOf('m') != -1, | |||||
flags.indexOf('s') != -1); | |||||
if (flags.indexOf('g') != -1) { | |||||
options |= Regexp.REPLACE_ALL; | |||||
} | |||||
} | |||||
return options; | |||||
} | |||||
/** | |||||
* Convert flag to regex options. | |||||
* | |||||
* @param caseSensitive opposite of RegexpMatcher.MATCH_CASE_INSENSITIVE | |||||
* @return the Regexp option bits | |||||
* @since Ant 1.8.2 | |||||
*/ | |||||
public static int asOptions(boolean caseSensitive) { | |||||
return asOptions(caseSensitive, false, false); | |||||
} | |||||
/** | |||||
* Convert flags to regex options. | |||||
* | |||||
* @param caseSensitive opposite of RegexpMatcher.MATCH_CASE_INSENSITIVE | |||||
* @param multiLine RegexpMatcher.MATCH_MULTILINE | |||||
* @param singleLine RegexpMatcher.MATCH_SINGLELINE | |||||
* @return the Regexp option bits | |||||
* @since Ant 1.8.2 | |||||
*/ | |||||
public static int asOptions(boolean caseSensitive, boolean multiLine, | |||||
boolean singleLine) { | |||||
int options = RegexpMatcher.MATCH_DEFAULT; | |||||
if (!caseSensitive) { | |||||
options = options | RegexpMatcher.MATCH_CASE_INSENSITIVE; | |||||
} | |||||
if (multiLine) { | |||||
options = options | RegexpMatcher.MATCH_MULTILINE; | |||||
} | |||||
if (singleLine) { | |||||
options = options | RegexpMatcher.MATCH_SINGLELINE; | |||||
} | |||||
return options; | |||||
} | |||||
} | } |