Browse Source

add casesensitive and handledirchar to globmapper and regexpmapper

PR: 16686 and 32487


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@277235 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Reilly 20 years ago
parent
commit
ae0dd4dca8
2 changed files with 86 additions and 4 deletions
  1. +51
    -2
      src/main/org/apache/tools/ant/util/GlobPatternMapper.java
  2. +35
    -2
      src/main/org/apache/tools/ant/util/RegexpPatternMapper.java

+ 51
- 2
src/main/org/apache/tools/ant/util/GlobPatternMapper.java View File

@@ -31,6 +31,7 @@ package org.apache.tools.ant.util;
*
*/
public class GlobPatternMapper implements FileNameMapper {

/**
* Part of "from" pattern before the *.
*/
@@ -61,8 +62,33 @@ public class GlobPatternMapper implements FileNameMapper {
*/
protected String toPostfix = null;

private boolean handleDirChar = false;
private boolean caseSensitive = true;

/**
* Attribute specifing whether to ignore the difference
* between / and \ (the two common directory characters).
* @param handleDirChar a boolean, default is false.
* @since Ant 1.6.3
*/
public void setHandleDirChar(boolean handleDirChar) {
this.handleDirChar = handleDirChar;
}

/**
* Attribute specifing whether to ignore the case difference
* in the names.
*
* @param caseSensitive a boolean, default is false.
* @since Ant 1.6.3
*/
public void setCaseSensitive(boolean caseSensitive) {
this.caseSensitive = caseSensitive;
}

/**
* Sets the "from" pattern. Required.
* @param from a string
*/
public void setFrom(String from) {
int index = from.lastIndexOf("*");
@@ -79,6 +105,7 @@ public class GlobPatternMapper implements FileNameMapper {

/**
* Sets the "to" pattern. Required.
* @param to a string
*/
public void setTo(String to) {
int index = to.lastIndexOf("*");
@@ -95,11 +122,13 @@ public class GlobPatternMapper implements FileNameMapper {
* Returns null if the source file name doesn't match the
* "from" pattern, an one-element array containing the
* translated file otherwise.
* @param sourceFileName the filename to map
* @return a list of converted filenames
*/
public String[] mapFileName(String sourceFileName) {
if (fromPrefix == null
|| !sourceFileName.startsWith(fromPrefix)
|| !sourceFileName.endsWith(fromPostfix)) {
|| !modifyName(sourceFileName).startsWith(modifyName(fromPrefix))
|| !modifyName(sourceFileName).endsWith(modifyName(fromPostfix))) {
return null;
}
return new String[] {toPrefix
@@ -110,9 +139,29 @@ public class GlobPatternMapper implements FileNameMapper {
/**
* Returns the part of the given string that matches the * in the
* "from" pattern.
* @param name the source file name
* @return the variable part of the name
*/
protected String extractVariablePart(String name) {
return name.substring(prefixLength,
name.length() - postfixLength);
}


/**
* modify string based on dir char mapping and case sensitivity
* @param name the name to convert
* @return the converted name
*/
private String modifyName(String name) {
if (!caseSensitive) {
name = name.toLowerCase();
}
if (handleDirChar) {
if (name.indexOf('\\') != -1) {
name = name.replace('\\', '/');
}
}
return name;
}
}

+ 35
- 2
src/main/org/apache/tools/ant/util/RegexpPatternMapper.java View File

@@ -36,6 +36,34 @@ public class RegexpPatternMapper implements FileNameMapper {
reg = (new RegexpMatcherFactory()).newRegexpMatcher();
}

private boolean handleDirChar = false;
private int regexpOptions = 0;

/**
* Attribute specifing whether to ignore the difference
* between / and \ (the two common directory characters).
* @param handleDirChar a boolean, default is false.
* @since Ant 1.6.3
*/
public void setHandleDirChar(boolean handleDirChar) {
this.handleDirChar = handleDirChar;
}

/**
* Attribute specifing whether to ignore the case difference
* in the names.
*
* @param caseSensitive a boolean, default is false.
* @since Ant 1.6.3
*/
public void setCaseSensitive(boolean caseSensitive) {
if (!caseSensitive) {
regexpOptions = RegexpMatcher.MATCH_CASE_INSENSITIVE;
} else {
regexpOptions = 0;
}
}

/**
* Sets the "from" pattern. Required.
*/
@@ -63,8 +91,13 @@ public class RegexpPatternMapper implements FileNameMapper {
* translated file otherwise.
*/
public String[] mapFileName(String sourceFileName) {
if (handleDirChar) {
if (sourceFileName.indexOf("\\") != -1) {
sourceFileName = sourceFileName.replace('\\', '/');
}
}
if (reg == null || to == null
|| !reg.matches(sourceFileName)) {
|| !reg.matches(sourceFileName, regexpOptions)) {
return null;
}
return new String[] {replaceReferences(sourceFileName)};
@@ -75,7 +108,7 @@ public class RegexpPatternMapper implements FileNameMapper {
* groups of the source.
*/
protected String replaceReferences(String source) {
Vector v = reg.getGroups(source);
Vector v = reg.getGroups(source, regexpOptions);

result.setLength(0);
for (int i = 0; i < to.length; i++) {


Loading…
Cancel
Save