antoine     2003/12/01 14:03:26

  Modified:    src/main/org/apache/tools/ant/types RegularExpression.java
               docs/manual conceptstypeslist.html
               docs/manual/CoreTypes filterchain.html
               docs/manual/OptionalTasks replaceregexp.html
  Added:       docs/manual/CoreTypes regexp.html
  Log:
  Make the choice of regular expression implementation possible with
  ant.regexp.regexpimpl as a normal project property
  PR: 15390
  
  Revision  Changes    Path
  1.16      +46 -7     
ant/src/main/org/apache/tools/ant/types/RegularExpression.java
  
  Index: RegularExpression.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/types/RegularExpression.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- RegularExpression.java    19 Jul 2003 08:11:07 -0000      1.15
  +++ RegularExpression.java    1 Dec 2003 22:03:25 -0000       1.16
  @@ -1,7 +1,7 @@
   /*
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
  + * Copyright (c) 2001-2003 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -99,42 +99,81 @@
   public class RegularExpression extends DataType {
       /** Name of this data type */
       public static final String DATA_TYPE_NAME = "regexp";
  +    private boolean alreadyInit = false;
   
       // The regular expression factory
  -    private static final RegexpFactory factory = new RegexpFactory();
  +    private static final RegexpFactory FACTORY = new RegexpFactory();
   
  -    private Regexp regexp;
  +    private Regexp regexp = null;
  +    // temporary variable
  +    private String myPattern;
  +    private boolean setPatternPending = false;
   
  +    /**
  +     * default constructor
  +     */
       public RegularExpression() {
  -        this.regexp = factory.newRegexp();
       }
   
  +    private void init(Project p) {
  +        if (!alreadyInit) {
  +            this.regexp = FACTORY.newRegexp(p);
  +            alreadyInit = true;
  +        }
  +    }
  +    private void setPattern() {
  +        if (setPatternPending) {
  +            regexp.setPattern(myPattern);
  +            setPatternPending = false;
  +        }
  +    }
  +    /**
  +     * sets the regular expression pattern
  +     * @param pattern regular expression pattern
  +     */
       public void setPattern(String pattern) {
  -        this.regexp.setPattern(pattern);
  +        if (regexp == null) {
  +            myPattern = pattern;
  +            setPatternPending = true;
  +        } else {
  +            regexp.setPattern(pattern);
  +        }
       }
   
       /***
        * Gets the pattern string for this RegularExpression in the
        * given project.
  +     * @param p project
  +     * @return pattern
        */
       public String getPattern(Project p) {
  +        init(p);
           if (isReference()) {
               return getRef(p).getPattern(p);
           }
  -
  +        setPattern();
           return regexp.getPattern();
       }
   
  +    /**
  +     * provides a reference to the Regexp contained in this
  +     * @param p  project
  +     * @return   Regexp instance associated with this RegularExpression 
instance
  +     */
       public Regexp getRegexp(Project p) {
  +        init(p);
           if (isReference()) {
               return getRef(p).getRegexp(p);
           }
  +        setPattern();
           return this.regexp;
       }
   
       /***
        * Get the RegularExpression this reference refers to in
        * the given project.  Check for circular references too
  +     * @param p project
  +     * @return resolved RegularExpression instance
        */
       public RegularExpression getRef(Project p) {
           if (!isChecked()) {
  @@ -147,7 +186,7 @@
           Object o = getRefid().getReferencedObject(p);
           if (!(o instanceof RegularExpression)) {
               String msg = getRefid().getRefId() + " doesn\'t denote a "
  -                + DATA_TYPE_NAME;
  +                    + DATA_TYPE_NAME;
               throw new BuildException(msg);
           } else {
               return (RegularExpression) o;
  
  
  
  1.14      +1 -0      ant/docs/manual/conceptstypeslist.html
  
  Index: conceptstypeslist.html
  ===================================================================
  RCS file: /home/cvs/ant/docs/manual/conceptstypeslist.html,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- conceptstypeslist.html    1 Sep 2003 14:22:04 -0000       1.13
  +++ conceptstypeslist.html    1 Dec 2003 22:03:25 -0000       1.14
  @@ -27,6 +27,7 @@
   <a href="using.html#path">Path-like Structures</a><br>
   <a href="CoreTypes/permissions.html">Permissions</a><br>
   <a href="CoreTypes/propertyset.html">PropertySet</a><br>
  +<a href="CoreTypes/regexp.html">Regexp</a><br>
   <a href="CoreTypes/selectors.html">Selectors</a><br>
   <a href="CoreTypes/xmlcatalog.html">XMLCatalog</a><br>
   <a href="CoreTypes/zipfileset.html">ZipFileSet</a><br>
  
  
  
  1.15      +12 -21    ant/docs/manual/CoreTypes/filterchain.html
  
  Index: filterchain.html
  ===================================================================
  RCS file: /home/cvs/ant/docs/manual/CoreTypes/filterchain.html,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- filterchain.html  12 Nov 2003 09:35:31 -0000      1.14
  +++ filterchain.html  1 Dec 2003 22:03:25 -0000       1.15
  @@ -333,19 +333,8 @@
   Filter which includes only those lines that contain the user-specified
   regular expression matching strings.
   
  -<TABLE cellSpacing=0 cellPadding=2 border=1>
  -  <TR>
  -    <TD vAlign=top><B>Parameter Type</B></TD>
  -    <TD vAlign=top><B>Parameter Value</B></TD>
  -    <TD vAlign=top align="center"><B>Required</B></TD>
  -  </TR>
  -  <TR>
  -    <TD vAlign=top>regexp</TD>
  -    <TD vAlign=top align="center">Pattern of the substring to be searched 
for.</TD>
  -    <TD vAlign=top align="center">Yes</TD>
  -  </TR>
  -</TABLE>
  -<P>
  +See <a href="../CoreTypes/regexp.html">Regexp Type</a> for the description 
of the nested element regexp and of
  +the choice of regular expression implementation.
   <H4>Example:</H4>
   
   This will fetch all those lines that contain the pattern <code>foo</code>
  @@ -1112,10 +1101,12 @@
   </PRE></BLOCKQUOTE>
   
   <p><b><em><a name="replaceregex">ReplaceRegex</a></em></b></p>
  -This string filter replaces regular expressions. See
  -<a href="../OptionalTasks/replaceregexp.html">ReplaceRegexp</a>
  -for an explanation on regular expressions.
  +This string filter replaces regular expressions.
   This filter may be used directly within a filterchain.
  +<p>
  + See <a href="../CoreTypes/regexp.html#implementation">Regexp Type</a>
  +concerning the choice of the implementation.
  +</p>
   
   <TABLE cellSpacing=0 cellPadding=2 border=1>
     <TR>
  @@ -1143,7 +1134,6 @@
       <TD vAlign=top align="center">No</TD>
     </TR>
   </TABLE>
  -
   <H4>Examples:</H4>
   
   Replace all occurances of "hello" with "world", ignoring case.
  @@ -1158,11 +1148,12 @@
   <p><b><em><a name="containsregex">ContainsRegex</a></em></b></p>
   This filters strings that match regular expressions.
   The filter may optionally replace the matched regular expression.
  -See
  -<a href="../OptionalTasks/replaceregexp.html">ReplaceRegexp</a>
  -for an explanation on regular expressions.
   This filter may be used directly within a filterchain.
  -
  +<p>
  +See
  +<a href="../CoreTypes/regexp.html#implementation">Regexp Type</a>
  +concerning the choice of regular expression implementation.
  +</p>
   <TABLE cellSpacing=0 cellPadding=2 border=1>
     <TR>
       <TD vAlign=top><B>Attribute</B></TD>
  
  
  
  1.1                  ant/docs/manual/CoreTypes/regexp.html
  
  Index: regexp.html
  ===================================================================
  <html>
  
  <head>
  <meta http-equiv="Content-Language" content="en-us">
  <title>Regexp Type</title>
  </head>
  
  <body>
  
  <h2><a name="regexp">Regexp</a></h2>
  <p>
  Regexp represents a regular expression.
  <h3>Parameters</h3>
  <table border="1" cellpadding="2" cellspacing="0">
    <tr>
      <td valign="top"><b>Attribute</b></td>
      <td valign="top"><b>Description</b></td>
      <td align="center" valign="top"><b>Required</b></td>
    </tr>
    <tr>
      <td valign="top">pattern</td>
      <td valign="top">regular expression pattern</td>
      <td valign="top" align="center">Yes</td>
    </tr>
  </table>
  
  <h3>Examples</h3>
  <blockquote><pre>
       &lt;regexp id="myregexp" pattern="alpha(.+)beta"/&gt;<br />
  </pre></blockquote>
  <p>
  Defines a regular expression for later use with id myregexp.
  </p>
  <blockquote><pre>
       &lt;regexp refid="myregexp"/&gt;<br />
  </pre></blockquote>
  <p>
  Use the regular expression with id myregexp.
  </p>
  <a name="implementation"/>
  <h3>Choice of regular expression implementation</h3>
  <p>
  Ant comes with
  wrappers for
  <a 
href="http://java.sun.com/j2se/1.4/docs/api/java/util/regex/package-summary.html";
 target="_top">the java.util.regex package of JDK 1.4</a>,
  <a href="http://jakarta.apache.org/regexp/"; target="_top">jakarta-regexp</a>
  and <a href="http://jakarta.apache.org/oro/"; target="_top">jakarta-ORO</a>,
  See <a href="../install.html#librarydependencies">installation 
dependencies</a>
   concerning the supporting libraries.</p>
  <p>
  The property <code>ant.regexp.regexpimpl</code> governs which regular 
expression implementation will be chosen.
  Possible values for this property are :
  <ul>
  <li>
  org.apache.tools.ant.util.regexp.Jdk14RegexpRegexp
  </li>
  <li>
  org.apache.tools.ant.util.regexp.JakartaOroRegexp
  </li>
  <li>
  org.apache.tools.ant.util.regexp.JakartaRegexpRegexp
  </li>
  </ul>
  It can also be another implementation of the interface 
<code>org.apache.tools.ant.util.regexp.Regexp</code>.
  If <code>ant.regexp.regexpimpl</code> is not defined, ant checks in the order 
Jdk14Regexp, JakartaOroRegexp,
   JakartaRegexp for the availability of the corresponding library. The first 
of these 3 which is found will be used.</p>
  <p>
  There are cross-platform issues for matches related to line terminator.
  For example if you use $ to anchor your regular expression on the end of a 
line
  the results might be very different depending on both your platform and the 
regular
  expression library you use. It is 'highly recommended' that you test your 
pattern on
  both Unix and Windows platforms before you rely on it.
  <ul>
      <li>Jakarta Oro defines a line terminator as '\n' and is consistent with 
Perl.</li>
      <li>Jakarta RegExp uses a system-dependant line terminator.</li>
      <li>JDK 1.4 uses '\n', '\r\n', '\u0085', '\u2028', '\u2029' as a default
      but is configured in the wrapper to use only '\n' (UNIX_LINE)</li>
  </ul>
  <em>We <b>strongly</b> recommend that you use Jakarta Oro.</em>
  </p>
  <h3>Usage</h3>
  The following tasks and types use the Regexp type :
  <ul>
  <li><a href="CoreTasks/replaceregexp.html">ReplaceRegExp task</a></li>
  <li><a href="filterchain.html#linecontainsregexp">LineContainsRegexp 
filter</a></li>
  </ul>
  <p>
  These string filters also use the mechanism of regexp to choose a regular 
expression implementation :
  </p>
  <ul>
  <li><a href="filterchain.html#containsregex">ContainsRegex string 
filter</a></li>
  <li><a href="filterchain.html#replaceregex">ReplaceRegex string 
filter</a></li>
  </ul>
  <hr>
  <p align="center">Copyright &copy; 2003 Apache Software Foundation.
  All rights Reserved.</p>
  </body>
  </html>
  
  
  
  1.18      +4 -43     ant/docs/manual/OptionalTasks/replaceregexp.html
  
  Index: replaceregexp.html
  ===================================================================
  RCS file: /home/cvs/ant/docs/manual/OptionalTasks/replaceregexp.html,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- replaceregexp.html        24 Nov 2003 21:56:53 -0000      1.17
  +++ replaceregexp.html        1 Dec 2003 22:03:25 -0000       1.18
  @@ -19,7 +19,8 @@
   <p>Similar to <a href="../CoreTypes/mapper.html#regexp-mapper">regexp
   type mappers</a> this task needs a supporting regular expression
   library and an implementation of
  -<code>org.apache.tools.ant.util.regexp.Regexp</code>. See details <a 
href="#implementation">below</a>. </p>
  +<code>org.apache.tools.ant.util.regexp.Regexp</code>.
  +See details in the documentation of the <a 
href=../CoreTypes/regexp.html#implementation">Regexp Type</a>. </p>
   
   <h3>Parameters</h3>
   <table border="1" cellpadding="2" cellspacing="0">
  @@ -79,51 +80,11 @@
   <p>replaces occurrences of the property name &quot;OldProperty&quot;
    with &quot;NewProperty&quot; in a properties file, preserving the existing
   value, in the file <code>${src}/build.properties</code></p>
  -<a name="implementation"/>
  -<h3>Choice of regular expression implementation</h3>
  -<p>
  -Ant comes with
  -wrappers for
  -<a 
href="http://java.sun.com/j2se/1.4/docs/api/java/util/regex/package-summary.html";
 target="_top">the java.util.regex package of JDK 1.4</a>,
  -<a href="http://jakarta.apache.org/regexp/"; target="_top">jakarta-regexp</a>
  -and <a href="http://jakarta.apache.org/oro/"; target="_top">jakarta-ORO</a>,
  -See <a href="../install.html#librarydependencies">installation 
dependencies</a>
  - concerning the supporting libraries.</p>
  -<p>
  -The system property <code>ant.regexp.regexpimpl</code> governs which regular 
expression implementation will be chosen.
  -Possible values for this property are :
  -<ul>
  -<li>
  -org.apache.tools.ant.util.regexp.Jdk14RegexpRegexp
  -</li>
  -<li>
  -org.apache.tools.ant.util.regexp.JakartaOroRegexp
  -</li>
  -<li>
  -org.apache.tools.ant.util.regexp.JakartaRegexpRegexp
  -</li>
  -</ul>
  -It can also be another implementation of the interface 
<code>org.apache.tools.ant.util.regexp.Regexp</code>.
  -If <code>ant.regexp.regexpimpl</code> is not defined, ant checks in the 
order Jdk14Regexp, JakartaOroRegexp,
  - JakartaRegexp for the availability of the corresponding library. The first 
of these 3 which is found will be used.</p>
  -<p>
  -There are cross-platform issues for matches related to line terminator.
  -For example if you use $ to anchor your regular expression on the end of a 
line
  -the results might be very different depending on both your platform and the 
regular
  -expression library you use. It is 'highly recommended' that you test your 
pattern on
  -both Unix and Windows platforms before you rely on it.
  -<ul>
  -    <li>Jakarta Oro defines a line terminator as '\n' and is consistent with 
Perl.</li>
  -    <li>Jakarta RegExp uses a system-dependant line terminator.</li>
  -    <li>JDK 1.4 uses '\n', '\r\n', '\u0085', '\u2028', '\u2029' as a default
  -    but is configured in the wrapper to use only '\n' (UNIX_LINE)</li>
  -</ul>
  -<em>We <b>strongly</b> recommend that you use Jakarta Oro.</em>
  -</p>
  +
   <h3>Parameters specified as nested elements</h3>
   <p>This task supports a nested <a 
href="../CoreTypes/fileset.html">FileSet</a>
      element.</p>
  -<p>This task supports a nested <i>Regexp</i> element to specify
  +<p>This task supports a nested <i><a 
href="../CoreTypes/regexp.html">Regexp</a></i> element to specify
      the regular expression.  You can use this element to refer to a previously
      defined regular expression datatype instance.</p>
   <blockquote>
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to