ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From anto...@apache.org
Subject cvs commit: ant/docs/manual/OptionalTasks replaceregexp.html
Date Mon, 01 Dec 2003 22:03:26 GMT
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: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org


Mime
View raw message