FileDocCategorySizeDatePackage
JakartaOroRegexp.javaAPI DocApache Ant 1.703504Wed Dec 13 06:16:18 GMT 2006org.apache.tools.ant.util.regexp

JakartaOroRegexp

public class JakartaOroRegexp extends JakartaOroMatcher implements Regexp
Regular expression implementation using the Jakarta Oro package

Fields Summary
Constructors Summary
public JakartaOroRegexp()
Constructor for JakartaOroRegexp

        super();
    
Methods Summary
protected intgetSubsOptions(int options)
Convert ant regexp substitution option to oro options.

param
options the ant regexp options
return
the oro substition options

        boolean replaceAll = RegexpUtil.hasFlag(options, REPLACE_ALL);
        int subsOptions = 1;
        if (replaceAll) {
            subsOptions = Util.SUBSTITUTE_ALL;
        }
        return subsOptions;
    
public java.lang.Stringsubstitute(java.lang.String input, java.lang.String argument, int options)
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

        // translate \1 to $1 so that the Perl5Substitution will work
        StringBuffer subst = new StringBuffer();
        for (int i = 0; i < argument.length(); i++) {
            char c = argument.charAt(i);
            if (c == '$") {
                subst.append('\\");
                subst.append('$");
            } else if (c == '\\") {
                if (++i < argument.length()) {
                    c = argument.charAt(i);
                    int value = Character.digit(c, 10);
                    if (value > -1) {
                        subst.append("$").append(value);
                    } else {
                        subst.append(c);
                    }
                } else {
                    // XXX - should throw an exception instead?
                    subst.append('\\");
                }
            } else {
                subst.append(c);
            }
        }


        // Do the substitution
        Substitution s =
            new Perl5Substitution(subst.toString(),
                                  Perl5Substitution.INTERPOLATE_ALL);
        return Util.substitute(matcher,
                               getCompiledPattern(options),
                               s,
                               input,
                               getSubsOptions(options));