You can use a custom filter or use a reference -
      <filterchain id="filter.props">
        <replaceregex pattern="@([EMAIL PROTECTED])@" replace="${\1}" 
flags="g"/>
        <expandproperties/>
      </filterchain>

<copy ...>
   <filterchain refid="filter.props"/>
</copy>

Peter

On Wednesday 28 May 2003 14:27, David Kavanagh wrote:
> Thanks for trying. The below starts getting a bit verbose in the
> build.xml. All I'm trying to do is use the existing filtering (using the
> <filter> tag) with the project properties. I could easily add another
> mode to the <filter> tag that would make use of the project properties.
> I can understand not wanting to confuse the <filterchain> by building in
> different ways to accomplish the same thing.
> How about I provide for something like this.
> <copy ...>
>     <filter projectprops="true"/>
>      ....
> </copy>
> I could implement this as easily as the other two mechanisms.
>
> David
>
> PS. I hate to seem like I'm stuck on this, but we have 7 projects on a
> tight schedule who use the @token@ in a bunch of files. I'm trying to
> provide a mechanism that we can go foward with that would keep a bunch
> of people from having to switch over our tokenized files.
>
> Magesh Umasankar wrote:
> >oh, ok.  That takes care of David's needs,
> >I would think.
> >
> >Cheers,
> >Magesh
> >
> >----- Original Message -----
>
> From: "peter reilly" <[EMAIL PROTECTED]>
>
> >To: "Ant Developers List" <[EMAIL PROTECTED]>
> >Sent: Wednesday, May 28, 2003 7:38 AM
> >Subject: Re: copy task addition
> >
> >
> >I do not think this is a good idea. It will
> >add @property@ to ${property} as a way
> >for dealing with properties.
> >
> >This could be a custom filter or nearly
> >the same behaviour could be achieved by
> >using replaceregex and expandproperties:
> >
> >      <filterchain>
> >        <replaceregex pattern="@([EMAIL PROTECTED])@" replace="${\1}" 
> > flags="g"/>
> >        <expandproperties/>
> >      </filterchain>
> >
> >(when I fix the bug with regex handling of $)
> >
> >Peter
> >
> >On Wednesday 28 May 2003 12:22, Magesh Umasankar wrote:
> >>I will take a look at commiting it in the next few days...
> >>
> >>----- Original Message -----
> >>From: David Kavanagh
> >>To: Ant Developers List
> >>Sent: Wednesday, May 28, 2003 1:52 AM
> >>Subject: Re: copy task addition
> >>
> >>
> >>OK, so I made a FilterProperties class that does the token filtering like
> >
> >I
> >
> >>wanted. I've attached the code for that class and the diff for the
> >>FilterChain.java file.
> >>In the <copy> task, you can now use
> >>
> >><filterchain>
> >>    <filterproperties/>
> >></filterchain>
> >>
> >>and filter for tokens of the form @token@ based on the project
> >> properties. As a refresher, I needed this because I wanted to read
> >> properties from ${user.dir} and ${base.dir} and use the same @token@
> >> notation.
> >>What's the chance this could be added to the next release. It is pretty
> >>harmless.
> >>
> >>David
> >>
> >>Stefan Bodewig wrote:
> >>
> >>On Tue, 27 May 2003, David Kavanagh <[EMAIL PROTECTED]> wrote:
> >>
> >>
> >>My stuff must function differently,
> >>
> >>
> >><expandproperties/> will replace ${foo} style constructs while you
> >>need to replace @foo@ IIUC.
> >>
> >>
> >>but I can see that implementing it as a filterchain option would be
> >>better than the attribute I chose to use.
> >>
> >>
> >>Yes, I think so.
> >>
> >>Stefan
> >>
> >>---------------------------------------------------------------------
> >>To unsubscribe, e-mail: [EMAIL PROTECTED]
> >>For additional commands, e-mail: [EMAIL PROTECTED]
> >>
> >>
> >>
> >>
> >>
> >>
> >>/*
> >> * The Apache Software License, Version 1.1
> >> *
> >> * Copyright (c) 2002 The Apache Software Foundation.  All rights
> >> * reserved.
> >> *
> >> * Redistribution and use in source and binary forms, with or without
> >> * modification, are permitted provided that the following conditions
> >> * are met:
> >> *
> >> * 1. Redistributions of source code must retain the above copyright
> >> *    notice, this list of conditions and the following disclaimer.
> >> *
> >> * 2. Redistributions in binary form must reproduce the above copyright
> >> *    notice, this list of conditions and the following disclaimer in
> >> *    the documentation and/or other materials provided with the
> >> *    distribution.
> >> *
> >> * 3. The end-user documentation included with the redistribution, if
> >> *    any, must include the following acknowlegement:
> >> *       "This product includes software developed by the
> >> *        Apache Software Foundation (http://www.apache.org/)."
> >> *    Alternately, this acknowlegement may appear in the software itself,
> >> *    if and wherever such third-party acknowlegements normally appear.
> >> *
> >> * 4. The names "Ant" and "Apache Software
> >> *    Foundation" must not be used to endorse or promote products derived
> >> *    from this software without prior written permission. For written
> >> *    permission, please contact [EMAIL PROTECTED]
> >> *
> >> * 5. Products derived from this software may not be called "Apache"
> >> *    nor may "Apache" appear in their names without prior written
> >> *    permission of the Apache Group.
> >> *
> >> * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
> >> * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
> >> * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> >> * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
> >> * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> >> * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> >> * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
> >> * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
> >> * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
> >> * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
> >> * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> >> * SUCH DAMAGE.
> >> * ====================================================================
> >> *
> >> * This software consists of voluntary contributions made by many
> >> * individuals on behalf of the Apache Software Foundation.  For more
> >> * information on the Apache Software Foundation, please see
> >> * <http://www.apache.org/>.
> >> */
> >>package org.apache.tools.ant.filters;
> >>
> >>import java.io.IOException;
> >>import java.io.Reader;
> >>import java.util.Iterator;
> >>import java.util.Hashtable;
> >>
> >>import org.apache.tools.ant.Project;
> >>import org.apache.tools.ant.types.FilterSet;
> >>
> >>/**
> >> * Expands Ant properties, if any, in the data. Derived from
> >>ExpandProperties,
> >> * but uses FilterSet token ('@').
> >> * <p>
> >> * Example:<br>
> >> * <pre>&lt;filterproperties/&gt;</pre>
> >> * Or:
> >> * <pre>&lt;filterreader
> >
> >classname=&quot;org.apache.tools.ant.filters.FilterProperties&quot;/&gt;</
> >p
> >
> >>r e>
> >> *
> >> * @author David Kavanagh
> >> * @author Magesh Umasankar
> >> */
> >>public final class FilterProperties
> >>    extends BaseFilterReader
> >>    implements ChainableReader {
> >>    /** Data that must be read from, if not null. */
> >>    private String queuedData = null;
> >>private FilterSet props;
> >>private boolean inited = false;
> >>
> >>    /**
> >>     * Constructor for "dummy" instances.
> >>     *
> >>     * @see BaseFilterReader#BaseFilterReader()
> >>     */
> >>    public FilterProperties() {
> >>        super();
> >>    }
> >>
> >>    /**
> >>     * Creates a new filtered reader.
> >>     *
> >>     * @param in A Reader object providing the underlying stream.
> >>     *           Must not be <code>null</code>.
> >>     */
> >>    public FilterProperties(final Reader in) {
> >>        super(in);
> >>    }
> >>
> >>    /**
> >>     * Returns the next character in the filtered stream. The original
> >>     * stream is first read in fully, and the Ant properties are
> >> expanded. * The results of this expansion are then queued so they can be
> >> read * character-by-character.
> >>     *
> >>     * @return the next character in the resulting stream, or -1
> >>     * if the end of the resulting stream has been reached
> >>     *
> >>     * @exception IOException if the underlying stream throws an
> >>IOException * during reading
> >>     */
> >>    public final int read() throws IOException {
> >>if (!inited)
> >>init();
> >>
> >>        int ch = -1;
> >>
> >>        if (queuedData != null && queuedData.length() == 0) {
> >>            queuedData = null;
> >>        }
> >>
> >>        if (queuedData != null) {
> >>            ch = queuedData.charAt(0);
> >>            queuedData = queuedData.substring(1);
> >>            if (queuedData.length() == 0) {
> >>                queuedData = null;
> >>            }
> >>        } else {
> >>            queuedData = readFully();
> >>            if (queuedData == null) {
> >>                ch = -1;
> >>            } else {
> >>                queuedData = props.replaceTokens(queuedData);
> >>                return read();
> >>            }
> >>        }
> >>        return ch;
> >>    }
> >>
> >>    /**
> >>     * Creates a new FilterProperties filter using the passed in
> >>     * Reader for instantiation.
> >>     *
> >>     * @param rdr A Reader object providing the underlying stream.
> >>     *            Must not be <code>null</code>.
> >>     *
> >>     * @return a new filter based on this configuration, but filtering
> >>     *         the specified reader
> >>     */
> >>    public final Reader chain(final Reader rdr) {
> >>        FilterProperties newFilter = new FilterProperties(rdr);
> >>        newFilter.setProject(getProject());
> >>        return newFilter;
> >>    }
> >>
> >>/**
> >>* Sets up a filter set based on project properties.
> >>*/
> >>private void init() {
> >>synchronized(this) {
> >>this.props = new FilterSet();
> >>Hashtable projectProps = getProject().getProperties();
> >>Iterator iter = projectProps.keySet().iterator();
> >>while (iter.hasNext()) {
> >>String name = (String)iter.next();
> >>this.props.addFilter(name, (String)projectProps.get(name));
> >>}
> >>this.inited = true;
> >>}
> >>}
> >>}
> >>
> >>
> >>
> >>
> >>*** FilterChain.java.orig Wed May 28 01:25:08 2003
> >>--- FilterChain.java Wed May 28 01:25:34 2003
> >>***************
> >>*** 58,63 ****
> >>--- 58,64 ----
> >>  import org.apache.tools.ant.BuildException;
> >>  import org.apache.tools.ant.filters.ClassConstants;
> >>  import org.apache.tools.ant.filters.ExpandProperties;
> >>+ import org.apache.tools.ant.filters.FilterProperties;
> >>  import org.apache.tools.ant.filters.HeadFilter;
> >>  import org.apache.tools.ant.filters.LineContains;
> >>  import org.apache.tools.ant.filters.LineContainsRegExp;
> >>***************
> >>*** 94,99 ****
> >>--- 95,104 ----
> >>          filterReaders.addElement(expandProperties);
> >>      }
> >>
> >>+     public final void addFilterProperties(final FilterProperties
> >>filterProperties) {
> >>+         filterReaders.addElement(filterProperties);
> >>+     }
> >>+
> >>      public final void addHeadFilter(final HeadFilter headFilter) {
> >>          filterReaders.addElement(headFilter);
> >>      }
> >>
> >>
> >>
> >>
> >>
> >>---------------------------------------------------------------------
> >>To unsubscribe, e-mail: [EMAIL PROTECTED]
> >>For additional commands, e-mail: [EMAIL PROTECTED]
> >>
> >>
> >>---------------------------------------------------------------------
> >>To unsubscribe, e-mail: [EMAIL PROTECTED]
> >>For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >---------------------------------------------------------------------
> >To unsubscribe, e-mail: [EMAIL PROTECTED]
> >For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> >
> >---------------------------------------------------------------------
> >To unsubscribe, e-mail: [EMAIL PROTECTED]
> >For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to