<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>
<HEAD>
  <TITLE>FilterChains and FilterReaders</TITLE>
</HEAD>

<BODY>

<H2>FilterChains and FilterReaders</H2>
Look at Unix pipes - they offer you so much flexibility -
say you wanted to copy just those lines that contained the
string blee from the first 10 lines of a file 'foo'
to a file 'bar' - you would do something like<P>
<code>
cat foo|head -n10|grep blee &gt; bar
</code><P>
Ant was not flexible enough.  There was no way for the
&lt;copy&gt; task to do something similar.  If you wanted
the &lt;copy&gt; task to get the first 10 lines, you would have
had to create special attributes:<P>
<code>
&lt;copy file=&quot;foo&quot; tofile=&quot;bar&quot; head=&quot;10&quot; contains=&quot;blee&quot;/&gt;
</code><P>
The obvious problem thus surfaced: Ant tasks would not be able
to accomodate such data transformation attributes as they would
be endless.  The task would also not know in which order these
attributes were to be interpreted.  That is, must the task execute the
contains attribute first and then the head attribute or vice-versa?
What Ant tasks needed was a mechanism to allow pluggable filter (data
tranformer) chains.  Ant would provide a few filters for which there
have been repeated requests.  Users with special filtering needs
would be able to easily write their own and plug them in.<P>

The solution was to refactor data transformation oriented
tasks to support FilterChains.  A FilterChain is a group of
ordered FilterReaders.  Users can define their own FilterReaders
by just extending the java.io.FilterReader class.  Such custom
FilterReaders can be easily plugged in as nested elements of
&lt;filterchain&gt; by using &lt;filterreader&gt; elements.
<P>
Example:
<BLOCKQUOTE><PRE>
&lt;copy file=&quot;${src.file}&quot; tofile=&quot;${dest.file}&quot;&gt;
  &lt;filterchain&gt;
    &lt;filterreader classname=&quot;your.extension.of.java.io.FilterReader&quot;&gt;
      &lt;param name=&quot;foo&quot; value=&quot;bar&quot;/&gt;
    &lt;/filterreader&gt;
    &lt;filterreader classname=&quot;another.extension.of.java.io.FilterReader&quot;&gt;
      &lt;classpath&gt;
        &lt;pathelement path="${classpath}"/&gt;
      &lt;/classpath&gt;
      &lt;param name=&quot;blah&quot; value=&quot;blee&quot;/&gt;
      &lt;param type=&quot;abra&quot; value=&quot;cadabra&quot;/&gt;
    &lt;/filterreader&gt;
  &lt;/filterchain&gt;
&lt;/copy&gt;
</PRE></BLOCKQUOTE>

Ant provides some built-in filter readers.  These filter readers
can also be declared using a syntax similar to the above syntax.
However, they can be declared using some simpler syntax also.<P>
Example:
<BLOCKQUOTE><PRE>
&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.head}&quot;&gt;
  &lt;filterchain&gt;
    &lt;headfilter lines=&quot;15&quot;/&gt;
  &lt;/filterchain&gt;
&lt;/loadfile&gt;
</PRE></BLOCKQUOTE>
is equivalent to:
<BLOCKQUOTE><PRE>
&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.head}&quot;&gt;
  &lt;filterchain&gt;
    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.HeadFilter&quot;&gt;
      &lt;param name=&quot;lines&quot; value=&quot;15&quot;/&gt;
    &lt;/filterreader&gt;
  &lt;/filterchain&gt;
&lt;/loadfile&gt;
</PRE></BLOCKQUOTE>

The following built-in tasks support nested &lt;filterchain&gt; elements.<BR>
<a href="../CoreTasks/concat.html">Concat</a>,<BR>
<a href="../CoreTasks/copy.html">Copy</a>,<BR>
<a href="../CoreTasks/loadfile.html">LoadFile</a>,<BR>
<a href="../CoreTasks/loadproperties.html">LoadProperties</a>,<BR>
<a href="../CoreTasks/move.html">Move</a><BR><BR>

A FilterChain is formed by defining zero or more of the following
nested elements.<BR>
<a href="#filterreader">FilterReader</a><BR>
<a href="#classconstants">ClassConstants</a><BR>
<a href="#escapeunicode">EscapeUnicode</a><BR>
<a href="#expandproperties">ExpandProperties</a><BR>
<a href="#headfilter">HeadFilter</a><BR>
<a href="#linecontains">LineContains</a><BR>
<a href="#linecontainsregexp">LineContainsRegExp</a><BR>
<a href="#prefixlines">PrefixLines</a><BR>
<a href="#replacetokens">ReplaceTokens</a><BR>
<a href="#stripjavacomments">StripJavaComments</a><BR>
<a href="#striplinebreaks">StripLineBreaks</a><BR>
<a href="#striplinecomments">StripLineComments</a><BR>
<a href="#tabstospaces">TabsToSpaces</a><BR>
<a href="#tailfilter">TailFilter</a><BR>
<a href="#deletecharacters">DeleteCharacters</a><BR>
<a href="#concatfilter">ConcatFilter</a><BR>
<a href="#tokenfilter">TokenFilter</a><BR>

<H3><a name="filterreader">FilterReader</a></H3>

The filterreader element is the generic way to
define a filter.  User defined filter elements are
defined in the build file using this.  Please note that
built in filter readers can also be defined using this
syntax.

A FilterReader element must be supplied with a class name as
an attribute value.  The class resolved by this name must
extend java.io.FilterReader.  If the custom filter reader
needs to be parameterized, it must implement
org.apache.tools.type.Parameterizable.

<TABLE cellSpacing=0 cellPadding=2 border=1>
  <TR>
    <TD vAlign=top><B>Attribute</B></TD>
    <TD vAlign=top><B>Description</B></TD>
    <TD vAlign=top align="center"><B>Required</B></TD>
  </TR>
  <TR>
    <TD vAlign=top>classname</TD>
    <TD vAlign=top>The class name of the filter reader.</TD>
    <TD vAlign=top align="center">Yes</TD>
  </TR>
</TABLE>

<P>
<H4>Nested Elements:</H4>
&lt;filterreader&gt; supports &lt;classpath&gt; and &lt;param&gt;
as nested elements.  Each &lt;param&gt; element may take in the following
attributes - name, type and value.
<P>
The following FilterReaders are supplied with the default
distribution.

<H3><a name="classconstants">ClassConstants</a></H3>
<P>
This filters basic constants defined in a Java Class,
and outputs them in lines composed of the format name=value
<P>
<H4>Example:</H4>

This loads the basic constants defined in a Java class as Ant properties.
<BLOCKQUOTE><PRE>
&lt;loadproperties srcfile=&quot;foo.class&quot;&gt;
  &lt;filterchain&gt;
    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.ClassConstants&quot;/&gt;
  &lt;/filterchain&gt;
&lt;/loadproperties&gt;
</PRE></BLOCKQUOTE>

Convenience method:
<BLOCKQUOTE><PRE>
&lt;loadproperties srcfile=&quot;foo.class&quot;&gt;
  &lt;filterchain&gt;
    &lt;classconstants/&gt;
  &lt;/filterchain&gt;
&lt;/loadproperties&gt;
</PRE></BLOCKQUOTE>

<H3><a name="escapeunicode">EscapeUnicode</a></H3>
<P>
This filter converts its input by changing all non US-ASCII characters
into their equivalent unicode escape backslash u plus 4 digits.</p>

<P><em>since Ant 1.6</em></p>

<H4>Example:</H4>

This loads the basic constants defined in a Java class as Ant properties.
<BLOCKQUOTE><PRE>
&lt;loadproperties srcfile=&quot;non_ascii_property.properties&quot;&gt;
  &lt;filterchain&gt;
    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.EscapeUnicode&quot;/&gt;
  &lt;/filterchain&gt;
&lt;/loadproperties&gt;
</PRE></BLOCKQUOTE>

Convenience method:
<BLOCKQUOTE><PRE>
&lt;loadproperties srcfile=&quot;non_ascii_property.properties&quot;&gt;
  &lt;filterchain&gt;
    &lt;escapeunicode/&gt;
  &lt;/filterchain&gt;
&lt;/loadproperties&gt;
</PRE></BLOCKQUOTE>

<H3><a name="expandproperties">ExpandProperties</a></H3>
<P>
If the data contains data that represents Ant
properties (of the form ${...}), that is substituted
with the property's actual value.
<P>
<H4>Example:</H4>

This results in the property modifiedmessage holding the value
&quot;All these moments will be lost in time, like teardrops in the rain&quot;
<BLOCKQUOTE><PRE>
&lt;echo
  message=&quot;All these moments will be lost in time, like teardrops in the ${weather}&quot;
  file=&quot;loadfile1.tmp&quot;
  /&gt;
&lt;property name=&quot;weather&quot; value=&quot;rain&quot; /&gt;
&lt;loadfile property=&quot;modifiedmessage&quot; srcFile=&quot;loadfile1.tmp&quot;&gt;
  &lt;filterchain&gt;
    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.ExpandProperties&quot;/&gt;
  &lt;/filterchain&gt;
&lt;/loadfile&gt;
</PRE></BLOCKQUOTE>

Convenience method:
<BLOCKQUOTE><PRE>
&lt;echo
  message=&quot;All these moments will be lost in time, like teardrops in the ${weather}&quot;
  file=&quot;loadfile1.tmp&quot;
  /&gt;
&lt;property name=&quot;weather&quot; value=&quot;rain&quot; /&gt;
&lt;loadfile property=&quot;modifiedmessage&quot; srcFile=&quot;loadfile1.tmp&quot;&gt;
  &lt;filterchain&gt;
    &lt;expandproperties/&gt;
  &lt;/filterchain&gt;
&lt;/loadfile&gt;
</PRE></BLOCKQUOTE>

<H3><a name="headfilter">HeadFilter</a></H3>

This filter reads the first few lines from the data supplied to it.

<TABLE cellSpacing=0 cellPadding=2 border=1>
  <TR>
    <TD vAlign=top><B>Parameter Name</B></TD>
    <TD vAlign=top><B>Parameter Value</B></TD>
    <TD vAlign=top align="center"><B>Required</B></TD>
  </TR>
  <TR>
    <TD vAlign=top>lines</TD>
    <TD vAlign=top align="center">Number of lines to be read.
    Defaults to &quot;10&quot; <BR> A negative value means that all lines are
    passed (useful with <I>skip</I>)</TD>
    <TD vAlign=top align="center">No</TD>
  </TR>
  <TR>
    <TD vAlign=top>skip</TD>
    <TD vAlign=top align="center">Number of lines to be skipped (from the beginning).
    Defaults to &quot;0&quot;</TD>
    <TD vAlign=top align="center">No</TD>
  </TR>
</TABLE>
<P>
<H4>Example:</H4>

This stores the first 15 lines of the supplied data in the property ${src.file.head}
<BLOCKQUOTE><PRE>
&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.head}&quot;&gt;
  &lt;filterchain&gt;
    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.HeadFilter&quot;&gt;
      &lt;param name=&quot;lines&quot; value=&quot;15&quot;/&gt;
    &lt;/filterreader&gt;
  &lt;/filterchain&gt;
&lt;/loadfile&gt;
</PRE></BLOCKQUOTE>

Convenience method:
<BLOCKQUOTE><PRE>
&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.head}&quot;&gt;
  &lt;filterchain&gt;
    &lt;headfilter lines=&quot;15&quot;/&gt;
  &lt;/filterchain&gt;
&lt;/loadfile&gt;
</PRE></BLOCKQUOTE>

This stores the first 15 lines, skipping the first 2 lines, of the supplied data
in the porperty ${src.file.head}. (Means: lines 3-17)
<BLOCKQUOTE><PRE>
&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.head}&quot;&gt;
  &lt;filterchain&gt;
    &lt;headfilter lines=&quot;15&quot; skip=&quot;2&quot;/&gt;
  &lt;/filterchain&gt;
&lt;/loadfile&gt;
</PRE></BLOCKQUOTE>

See the testcases for more examples (<I>src\etc\testcases\filters\head-tail.xml</I> in the
source distribution).

<H3><a name="linecontains">LineContains</a></H3>

This filter includes only those lines that contain all the user-specified
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>contains</TD>
    <TD vAlign=top align="center">Substring to be searched for.</TD>
    <TD vAlign=top align="center">Yes</TD>
  </TR>
</TABLE>
<P>
<H4>Example:</H4>

This will include only those lines that contain <code>foo</code> and
<code>bar</code>.
<BLOCKQUOTE><PRE>
&lt;filterreader classname=&quot;org.apache.tools.ant.filters.LineContains&quot;&gt;
  &lt;param type=&quot;contains&quot; value=&quot;foo&quot;/&gt;
  &lt;param type=&quot;contains&quot; value=&quot;bar&quot;/&gt;
&lt;/filterreader&gt;
</PRE></BLOCKQUOTE>

Convenience method:
<BLOCKQUOTE><PRE>
&lt;linecontains&gt;
  &lt;contains value=&quot;foo&quot;&gt;
  &lt;contains value=&quot;bar&quot;&gt;
&lt;/linecontains&gt;
</PRE></BLOCKQUOTE>

<H3><a name="linecontainsregexp">LineContainsRegExp</a></H3>

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>
<H4>Example:</H4>

This will fetch all those lines that contain the pattern <code>foo</code>
<BLOCKQUOTE><PRE>
&lt;filterreader classname=&quot;org.apache.tools.ant.filters.LineContainsRegExp&quot;&gt;
  &lt;param type=&quot;regexp&quot; value=&quot;foo*&quot;/&gt;
&lt;/filterreader&gt;
</PRE></BLOCKQUOTE>

Convenience method:
<BLOCKQUOTE><PRE>
&lt;linecontainsregexp&gt;
  &lt;regexp pattern=&quot;foo*&quot;&gt;
&lt;/linecontainsregexp&gt;
</PRE></BLOCKQUOTE>

<H3><a name="prefixlines">PrefixLines</a></H3>

Attaches a prefix to every line.

<TABLE cellSpacing=0 cellPadding=2 border=1>
  <TR>
    <TD vAlign=top><B>Parameter Name</B></TD>
    <TD vAlign=top><B>Parameter Value</B></TD>
    <TD vAlign=top align="center"><B>Required</B></TD>
  </TR>
  <TR>
    <TD vAlign=top>prefix</TD>
    <TD vAlign=top align="center">Prefix to be attached to lines.</TD>
    <TD vAlign=top align="center">Yes</TD>
  </TR>
</TABLE>
<P>
<H4>Example:</H4>

This will attach the prefix <code>Foo</code> to all lines.
<BLOCKQUOTE><PRE>
&lt;filterreader classname=&quot;org.apache.tools.ant.filters.PrefixLines&quot;&gt;
  &lt;param name=&quot;prefix&quot; value=&quot;Foo&quot;/&gt;
&lt;/filterreader&gt;
</PRE></BLOCKQUOTE>

Convenience method:
<BLOCKQUOTE><PRE>
&lt;prefixlines prefix=&quot;Foo&quot;/&gt;
</PRE></BLOCKQUOTE>

<H3><a name="replacetokens">ReplaceTokens</a></H3>

This filter reader replaces all strings that are
sandwiched between begintoken and endtoken with
user defined values.

<TABLE cellSpacing=0 cellPadding=2 border=1>
  <TR>
    <TD vAlign=top><B>Parameter Type</B></TD>
    <TD vAlign=top><B>Parameter Name</B></TD>
    <TD vAlign=top><B>Parameter Value</B></TD>
    <TD vAlign=top align="center"><B>Required</B></TD>
  </TR>
  <TR>
    <TD vAlign=top>tokenchar</TD>
    <TD vAlign=top>begintoken</TD>
    <TD vAlign=top>Character marking the
    beginning of a token.  Defaults to @</TD>
    <TD vAlign=top align="center">No</TD>
  </TR>
  <TR>
    <TD vAlign=top>tokenchar</TD>
    <TD vAlign=top>endtoken</TD>
    <TD vAlign=top>Character marking the
    end of a token.  Defaults to @</TD>
    <TD vAlign=top align="center">No</TD>
  </TR>
  <TR>
    <TD vAlign=top>token</TD>
    <TD vAlign=top>User defined String.</TD>
    <TD vAlign=top>User defined search String</TD>
    <TD vAlign=top align="center">Yes</TD>
  </TR>
</TABLE>
<P>

<H4>Example:</H4>

This replaces occurences of the string &#64;DATE&#64; in the data
with today's date and stores it in the property ${src.file.replaced}
<BLOCKQUOTE><PRE>
&lt;tstamp/&gt;
&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.replaced}&quot;&gt;
  &lt;filterchain&gt;
    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.ReplaceTokens&quot;&gt;
      &lt;param type=&quot;token&quot; name=&quot;DATE&quot; value=&quot;${TODAY}&quot;/&gt;
    &lt;/filterreader&gt;
  &lt;/filterchain&gt;
&lt;/loadfile&gt;
</PRE></BLOCKQUOTE>

Convenience method:
<BLOCKQUOTE><PRE>
&lt;tstamp/&gt;
&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.replaced}&quot;&gt;
  &lt;filterchain&gt;
    &lt;replacetokens&gt;
      &lt;token key=&quot;DATE&quot; value=&quot;${TODAY}&quot;/&gt;
    &lt;/replacetokens&gt;
  &lt;/filterchain&gt;
&lt;/loadfile&gt;
</PRE></BLOCKQUOTE>

<H3><a name="stripjavacomments">StripJavaComments</a></H3>

This filter reader strips away comments from the data,
using Java syntax guidelines.  This filter does not
take in any parameters.
<P>
<H4>Example:</H4>

<BLOCKQUOTE><PRE>
&lt;loadfile srcfile=&quot;${java.src.file}&quot; property=&quot;${java.src.file.nocomments}&quot;&gt;
  &lt;filterchain&gt;
    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.StripJavaComments&quot;/&gt;
  &lt;/filterchain&gt;
&lt;/loadfile&gt;
</PRE></BLOCKQUOTE>

Convenience method:
<BLOCKQUOTE><PRE>
&lt;loadfile srcfile=&quot;${java.src.file}&quot; property=&quot;${java.src.file.nocomments}&quot;&gt;
  &lt;filterchain&gt;
    &lt;stripjavacomments/&gt;
  &lt;/filterchain&gt;
&lt;/loadfile&gt;
</PRE></BLOCKQUOTE>

<H3><a name="striplinebreaks">StripLineBreaks</a></H3>

This filter reader strips away specific characters
from the data supplied to it.

<TABLE cellSpacing=0 cellPadding=2 border=1>
  <TR>
    <TD vAlign=top><B>Parameter Name</B></TD>
    <TD vAlign=top><B>Parameter Value</B></TD>
    <TD vAlign=top align="center"><B>Required</B></TD>
  </TR>
  <TR>
    <TD vAlign=top>linebreaks</TD>
    <TD vAlign=top align="center">Characters that are to
    be stripped out.  Defaults to &quot;\r\n&quot;</TD>
    <TD vAlign=top align="center">No</TD>
  </TR>
</TABLE>
<P>
<H4>Examples:</H4>

This strips the '\r' and '\n' characters.
<BLOCKQUOTE><PRE>
&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.contents}&quot;&gt;
  &lt;filterchain&gt;
    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.StripLineBreaks&quot;/&gt;
  &lt;/filterchain&gt;
&lt;/loadfile&gt;
</PRE></BLOCKQUOTE>

Convenience method:
<BLOCKQUOTE><PRE>
&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.contents}&quot;&gt;
  &lt;filterchain&gt;
    &lt;striplinebreaks/&gt;
  &lt;/filterchain&gt;
&lt;/loadfile&gt;
</PRE></BLOCKQUOTE>

This treats the '(' and ')' characters as line break characters and
strips them.
<BLOCKQUOTE><PRE>
&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.contents}&quot;&gt;
  &lt;filterchain&gt;
    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.StripLineBreaks&quot;&gt;
      &lt;param name=&quot;linebreaks&quot; value=&quot;()&quot;/&gt;
    &lt;/filterreader&gt;
  &lt;/filterchain&gt;
&lt;/loadfile&gt;
</PRE></BLOCKQUOTE>

<H3><a name="striplinecomments">StripLineComments</a></H3>

This filter removes all those lines that begin with strings
that represent comments as specified by the user.

<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>comment</TD>
    <TD vAlign=top align="center">Strings that identify a line as a comment
    when they appear at the start of the line.</TD>
    <TD vAlign=top align="center">Yes</TD>
  </TR>
</TABLE>
<P>
<H4>Examples:</H4>

This removes all lines that begin with #, --, REM, rem and //
<BLOCKQUOTE><PRE>
&lt;filterreader classname=&quot;org.apache.tools.ant.filters.StripLineComments&quot;&gt;
  &lt;param type=&quot;comment&quot; value=&quot;#&quot;/&gt;
  &lt;param type=&quot;comment&quot; value=&quot;--&quot;/&gt;
  &lt;param type=&quot;comment&quot; value=&quot;REM &quot;/&gt;
  &lt;param type=&quot;comment&quot; value=&quot;rem &quot;/&gt;
  &lt;param type=&quot;comment&quot; value=&quot;//&quot;/&gt;
&lt;/filterreader&gt;
</PRE></BLOCKQUOTE>

Convenience method:
<BLOCKQUOTE><PRE>
&lt;striplinecomments&gt;
  &lt;comment value=&quot;#&quot;/&gt;
  &lt;comment value=&quot;--&quot;/&gt;
  &lt;comment value=&quot;REM &quot;/&gt;
  &lt;comment value=&quot;rem &quot;/&gt;
  &lt;comment value=&quot;//&quot;/&gt;
&lt;/striplinecomments&gt;
</PRE></BLOCKQUOTE>

<H3><a name="tabstospaces">TabsToSpaces</a></H3>

This filter replaces tabs with spaces

<TABLE cellSpacing=0 cellPadding=2 border=1>
  <TR>
    <TD vAlign=top><B>Parameter Name</B></TD>
    <TD vAlign=top><B>Parameter Value</B></TD>
    <TD vAlign=top align="center"><B>Required</B></TD>
  </TR>
  <TR>
    <TD vAlign=top>lines</TD>
    <TD vAlign=top align="center">tablength
    Defaults to &quot;8&quot;</TD>
    <TD vAlign=top align="center">No</TD>
  </TR>
</TABLE>
<P>
<H4>Examples:</H4>

This replaces tabs in ${src.file} with spaces.
<BLOCKQUOTE><PRE>
&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.notab}&quot;&gt;
  &lt;filterchain&gt;
    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.TabsToSpaces&quot;/&gt;
  &lt;/filterchain&gt;
&lt;/loadfile&gt;
</PRE></BLOCKQUOTE>

Convenience method:
<BLOCKQUOTE><PRE>
&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.notab}&quot;&gt;
  &lt;filterchain&gt;
    &lt;tabstospaces/&gt;
  &lt;/filterchain&gt;
&lt;/loadfile&gt;
</PRE></BLOCKQUOTE>

<H3><a name="tailfilter">TailFilter</a></H3>

This filter reads the last few lines from the data supplied to it.

<TABLE cellSpacing=0 cellPadding=2 border=1>
  <TR>
    <TD vAlign=top><B>Parameter Name</B></TD>
    <TD vAlign=top><B>Parameter Value</B></TD>
    <TD vAlign=top align="center"><B>Required</B></TD>
  </TR>
  <TR>
    <TD vAlign=top>lines</TD>
    <TD vAlign=top align="center">Number of lines to be read.
    Defaults to &quot;10&quot; <BR> A negative value means that all lines are
    passed (useful with <I>skip</I>)</TD>
    <TD vAlign=top align="center">No</TD>
  </TR>
  <TR>
    <TD vAlign=top>skip</TD>
    <TD vAlign=top align="center">Number of lines to be skipped (from the end).
    Defaults to &quot;0&quot; </TD>
    <TD vAlign=top align="center">No</TD>
  </TR>
</TABLE>
<P>

<H4>Background:</H4>
With HeadFilter and TailFilter you can extract each part of a text file you want.
This graphic shows the dependencies:

<TABLE cellSpacing=0 cellPadding=2 border=1>
<TR>
 <TH> Content </TH>
 <TH></TH>
 <TH></TH>
 <TH></TH>
 <TH> Filter </TH>
</TR>
<TR>
 <TD> Line 1 </TD>
 <TD rowspan="2" bgcolor="#C0C0C0">&nbsp;</TD>
 <TD rowspan="9" bgcolor="#FF00FF">&nbsp;</TD>
 <TD rowspan="4">&nbsp;</TD>
 <TD rowspan="11">
    <TABLE>
    <TR>
     <TD bgcolor="#C0C0C0">&nbsp;</TD>
     <TD><PRE>&lt;filterchain>
    &lt;headfilter lines="2"/&gt;
&lt;/filterchain></PRE></TD>
    </TR>
    <TR>
     <TD bgcolor="#FF00FF">&nbsp;</TD>
     <TD><PRE>&lt;filterchain>
    &lt;tailfilter lines="-1" skip="2"/&gt;
&lt;/filterchain></PRE></TD>
    </TR>
    <TR>
     <TD bgcolor="#008000">&nbsp;</TD>
     <TD><PRE>&lt;filterchain>
    &lt;headfilter lines="-1" skip="2"/&gt;
&lt;/filterchain></PRE></TD>
    </TR>
    <TR>
     <TD bgcolor="#0000FF">&nbsp;</TD>
     <TD><PRE>&lt;filterchain>
    &lt;headfilter lines="-1" skip="2"/>
    &lt;tailfilter lines="-1" skip="2"/>
&lt;/filterchain></PRE></TD>
    </TR>
    <TR>
     <TD bgcolor="#00FF00">&nbsp;</TD>
     <TD><PRE>&lt;filterchain>
    &lt;tailfilter lines="2"/&gt;
&lt;/filterchain></PRE></TD>
    </TR>
    </TABLE>
 </TD>
</TR>
<TR>
 <TD> Line 2 </TD>
</TR>
<TR>
 <TD> Line 3 </TD>
 <TD rowspan="9" bgcolor="#008000">&nbsp;</TD>
</TR>
<TR>
 <TD> Line 4 </TD>
</TR>
<TR>
 <TD> Line 5 </TD>
 <TD rowspan="3" bgcolor="#0000FF">&nbsp;</TD>
</TR>
<TR>
 <TD> Lines ... </TD>
</TR>
<TR>
 <TD> Line 95 </TD>
</TR>
<TR>
 <TD> Line 96 </TD>
 <TD rowspan="4">&nbsp;</TD>
</TR>
<TR>
 <TD> Line 97 </TD>
</TR>
<TR>
 <TD> Line 98 </TD>
 <TD rowspan="2" bgcolor="#00FF00">&nbsp;</TD>
</TR>
<TR>
 <TD> Line 99 </TD>
</TR>
</TABLE>



<H4>Examples:</H4>

This stores the last 15 lines of the supplied data in the property ${src.file.tail}
<BLOCKQUOTE><PRE>
&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.tail}&quot;&gt;
  &lt;filterchain&gt;
    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.TailFilter&quot;&gt;
      &lt;param name=&quot;lines&quot; value=&quot;15&quot;/&gt;
    &lt;/filterreader&gt;
  &lt;/filterchain&gt;
&lt;/loadfile&gt;
</PRE></BLOCKQUOTE>

Convenience method:
<BLOCKQUOTE><PRE>
&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.tail}&quot;&gt;
  &lt;filterchain&gt;
    &lt;tailfilter lines=&quot;15&quot;/&gt;
  &lt;/filterchain&gt;
&lt;/loadfile&gt;
</PRE></BLOCKQUOTE>


This stores the last 5 lines of the first 15 lines of the supplied
data in the property ${src.file.mid}
<BLOCKQUOTE><PRE>
&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.mid}&quot;&gt;
  &lt;filterchain&gt;
    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.HeadFilter&quot;&gt;
      &lt;param name=&quot;lines&quot; value=&quot;15&quot;/&gt;
    &lt;/filterreader&gt;
    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.TailFilter&quot;&gt;
      &lt;param name=&quot;lines&quot; value=&quot;5&quot;/&gt;
    &lt;/filterreader&gt;
  &lt;/filterchain&gt;
&lt;/loadfile&gt;
</PRE></BLOCKQUOTE>

Convenience method:
<BLOCKQUOTE><PRE>
&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.mid}&quot;&gt;
  &lt;filterchain&gt;
    &lt;headfilter lines=&quot;15&quot;/&gt;
    &lt;tailfilter lines=&quot;5&quot;/&gt;
  &lt;/filterchain&gt;
&lt;/loadfile&gt;
</PRE></BLOCKQUOTE>


This stores the last 10 lines, skipping the last 2 lines, of the supplied data
in the porperty ${src.file.head}. (Means: if supplied data contains 60 lines,
lines 49-58 are extracted)
<BLOCKQUOTE><PRE>
&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.head}&quot;&gt;
  &lt;filterchain&gt;
    &lt;tailfilter lines=&quot;10&quot; skip=&quot;2&quot;/&gt;
  &lt;/filterchain&gt;
&lt;/loadfile&gt;
</PRE></BLOCKQUOTE>

<H3><a name="deletecharacters">DeleteCharacters</a></H3>

  <p>This filter deletes specified characters.</p>
  <p><em>since Ant 1.6</em></p>
  <p>This filter is only available in the convenience form.</p>

<TABLE cellSpacing=0 cellPadding=2 border=1>
  <TR>
    <TD vAlign=top><B>Parameter Name</B></TD>
    <TD vAlign=top><B>Parameter Value</B></TD>
    <TD vAlign=top align="center"><B>Required</B></TD>
  </TR>
  <TR>
    <TD vAlign=top>chars</TD>
    <TD vAlign=top>
      The characters to delete. This attribute is
      <a href="#backslash">backslash enabled</a>.
    </TD>
    <TD vAlign=top align="center">Yes</TD>
  </TR>
</TABLE>
<P>
<H4>Examples:</H4>

Delete tabs and returns from the data.
<BLOCKQUOTE><PRE>
&lt;deletecharacters chars="\t\r"/&gt;
</PRE></BLOCKQUOTE>

<H3><a name="concatfilter">ConcatFilter</a></H3>
  <p>This filter prepends or appends the content file to the filtered files.</p>
  <p><em>since Ant 1.6</em></p>
<TABLE cellSpacing=0 cellPadding=2 border=1>
  <TR>
    <TD vAlign=top><B>Parameter Name</B></TD>
    <TD vAlign=top><B>Parameter Value</B></TD>
    <TD vAlign=top align="center"><B>Required</B></TD>
  </TR>
  <TR>
    <TD vAlign=top>prepend</TD>
    <TD vAlign=top>
      The name of the file which content should be prepended to the file.
    </TD>
    <TD vAlign=top align="center">No</TD>
  </TR>
  <TR>
    <TD vAlign=top>append</TD>
    <TD vAlign=top>
      The name of the file which content should be appended to the file.
    </TD>
    <TD vAlign=top align="center">No</TD>
  </TR>
</TABLE>
<P>

<H4>Examples:</H4>

Do nothing:
<BLOCKQUOTE><PRE>
&lt;filterchain&gt;
    &lt;concatfilter/&gt;
&lt;/filterchain&gt;
</PRE></BLOCKQUOTE>

Adds a license text before each java source:
<BLOCKQUOTE><PRE>
&lt;filterchain&gt;
    &lt;concatfilter prepend="apache-license-java.txt"/&gt;
&lt;/filterchain&gt;
</PRE></BLOCKQUOTE>



<H3><a name="tokenfilter">TokenFilter</a></H3>
This filter tokenizes the inputstream into strings and passes these
strings to filters of strings. Unlike the other filterreaders, this does
not support params, only convenience methods are implemented.
The tokenizer and the string filters are defined by nested elements.
<P><em>since Ant 1.6</em></p>
<P>
Only one tokenizer element may be used, the LineTokenizer is the
default if none are specified.  A tokenizer
splits the input into token strings and trailing delimiter strings.
<P>
There may be zero or more string filters. A string filter processes
a token and either returns a string or a null.
It the string is not null it is passed to the next filter. This
proceeds until all the filters are called.
If a string is returned after all the filters, the string is
outputs with its associated token delimitier
(if one is present).
The trailing delimiter may be overridden by the <i>delimOutput</i>
attribute.
<P>
<a name="backslash"><em>blackslash interpretation</em></a>
A number of attributes (including <i>delimOutput</i>) interpret
backslash escapes. The following are understood: \n, \r, \f, \t
and \\.


<TABLE cellSpacing=0 cellPadding=2 border=1>
  <TR>
    <TD vAlign=top><B>Attribute</B></TD>
    <TD vAlign=top><B>Description</B></TD>
    <TD vAlign=top align="center"><B>Required</B></TD>
  </TR>
  <TR>
    <TD vAlign=top>delimOutput</TD>
    <TD vAlign=top>
     This overrides the tokendelimiter
        returned by the tokenizer if it is not empty. This
     attribute is backslash enabled.
</TD>
    <TD vAlign=top align="center">No</TD>
  </TR>
</TABLE>
<P>

    The following tokenizers are provided by the default distribution.
    <p>
        <a href="#linetokenizer">LineTokenizer</a><br>
        <a href="#filetokenizer">FileTokenizer</a><br>
        <a href="#stringtokenizer">StringTokenizer</a><br>
    </p>

    The following string filters are provided by the default distribution.
    <p>
        <a href="#replacestring">ReplaceString</a><br>
        <a href="#containsstring">ContainsString</a><br>
        <a href="#replaceregex">ReplaceRegex</a><br>
        <a href="#containsregex">ContainsRegex</a><br>
        <a href="#trim">Trim</a><br>
        <a href="#ignoreblank">IgnoreBlank</a><br>
        <a href="#filterdeletecharacters">DeleteCharacters</a><br>
    </p>

    The following string filters are provided by the optional distribution.
    <p>
        <a href="#scriptfilter">ScriptFilter</a><br>
    </p>

Some of the filters may be used directly within a filter chain. In this
case a tokenfilter is created implicitly. An extra attribute "byline"
is added to the filter to specify whether to use a linetokenizer
(byline="true") or a filetokenizer (byline="false"). The default
is "true".
<P>

<p><b><em><a name="linetokenizer">LineTokenizer</a></em></b></p>
This tokenizer splits the input into lines.
The tokenizer delimits lines
by "\r", "\n" or "\r\n".
This is the default tokenizer.
<TABLE cellSpacing=0 cellPadding=2 border=1>
  <TR>
    <TD vAlign=top><B>Attribute</B></TD>
    <TD vAlign=top><B>Description</B></TD>
    <TD vAlign=top align="center"><B>Required</B></TD>
  </TR>
  <TR>
    <TD vAlign=top>includeDelims</TD>
    <TD vAlign=top>
      Include the line endings in the token.
      Default is false.
    </TD>
    <TD vAlign=top align="center">No</TD>
  </TR>
</TABLE>
<H4>Examples:</H4>

Convert input current line endings to unix style line endings.
<BLOCKQUOTE><PRE>
&lt;tokenfilter delimoutput=&quot;\n&quot;/&gt;
</PRE></BLOCKQUOTE>


Remove blank lines.
<BLOCKQUOTE><PRE>
&lt;tokenfilter&gt;
    &lt;ignoreblank/&gt;
&lt;/tokenfilter&gt;

</PRE></BLOCKQUOTE>

<p><b><em><a name="filetokenizer">FileTokenizer</a></em></b></p>
This tokenizer treats <b>all</b> the input as a token. So be
careful not to use this on very large input.
<H4>Examples:</H4>

Replace the first occurance of package with //package.
<BLOCKQUOTE><PRE>
&lt;tokenfilter&gt;
      &lt;filetokenizer/&gt;
      &lt;replaceregex pattern="([\n\r]+[ \t]*|^[ \t]*)package"
                    flags="s"
                    replace="\1//package"/&gt;
&lt;/tokenfilter&gt;
</PRE></BLOCKQUOTE>

<p><b><em><a name="stringtokenizer">StringTokenizer</a></em></b></p>
This tokenizer is based on java.util.StringTokenizer.
It splits up the input into strings separated by white space, or
by a specified list of delimiting characters.
If the stream starts with delimiter characters, the first
token will be the empty string (unless the <i>delimsaretokens</i>
attribute is used).

<TABLE cellSpacing=0 cellPadding=2 border=1>
  <TR>
    <TD vAlign=top><B>Attribute</B></TD>
    <TD vAlign=top><B>Description</B></TD>
    <TD vAlign=top align="center"><B>Required</B></TD>
  </TR>
  <TR>
    <TD vAlign=top>delims</TD>
    <TD vAlign=top>The delimiter characters. White space
      is used if this is not set. (White space is defined
      in this case by java.lang.Character.isWhitespace()).
    </TD>
    <TD vAlign=top align="center">No</TD>
  </TR>
  <tr>
    <td valign="top">delimsaretokens</td>
    <td valign="top">If this is true,
      each delimiter character is returned as a token.
      Default is false.
    </td>
    <td valign="top" align="center">No</td>
  </tr>
  <tr>
    <td valign="top">suppressdelims</td>
    <td valign="top">
      If this is true, delimiters are not returned.
      Default is false.
    </td>
    <td valign="top" align="center">No</td>
  </tr>
  <tr>
    <td vAlign=top>includeDelims</td>
    <td vAlign=top>
      Include the delimiters in the token.
      Default is false.
    </td>
    <td vAlign=top align="center">No</td>
  </tr>
</TABLE>

<H4>Examples:</H4>

Surround each non space token with a "[]".

<BLOCKQUOTE><PRE>
&lt;tokenfilter&gt;
    &lt;stringtokenizer/&gt;
    &lt;replaceregex pattern="(.+)" replace="[\1]"/&gt;
&lt;/tokenfilter&gt;

</PRE></BLOCKQUOTE>

<p><b><em><a name="replacestring">ReplaceString</a></em></b></p>
This is a simple filter to replace strings.
This filter may be used directly within a filterchain.

<TABLE cellSpacing=0 cellPadding=2 border=1>
  <TR>
    <TD vAlign=top><B>Attribute</B></TD>
    <TD vAlign=top><B>Description</B></TD>
    <TD vAlign=top align="center"><B>Required</B></TD>
  </TR>
  <TR>
    <TD vAlign=top>from</TD>
    <TD vAlign=top>The string that must be replaced.</TD>
    <TD vAlign=top align="center">Yes</TD>
  </TR>
  <tr>
    <td valign="top">to</td>
    <td valign="top">The new value for the replaced string. When omitted
      an empty string is used.
    </td>
    <td valign="top" align="center">No</td>
  </tr>
</TABLE>

<H4>Examples:</H4>

Replace "sun" with "moon".

<BLOCKQUOTE><PRE>
&lt;tokenfilter&gt;
    &lt;replacestring from="sun" to="moon"/&gt;
&lt;/tokenfilter&gt;
</PRE></BLOCKQUOTE>

<p><b><em><a name="containsstring">ContainsString</a></em></b></p>
This is a simple filter to filter tokens that contains
a specified string.

<TABLE cellSpacing=0 cellPadding=2 border=1>
  <TR>
    <TD vAlign=top><B>Attribute</B></TD>
    <TD vAlign=top><B>Description</B></TD>
    <TD vAlign=top align="center"><B>Required</B></TD>
  </TR>
  <TR>
    <TD vAlign=top>contains</TD>
    <TD vAlign=top>The string that the token must contain.</TD>
    <TD vAlign=top align="center">Yes</TD>
  </TR>
</TABLE>

<H4>Examples:</H4>

Include only lines that contain "foo";

<BLOCKQUOTE><PRE>
&lt;tokenfilter&gt;
    &lt;containsstring contains="foo"/&gt;
&lt;/tokenfilter&gt;

</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 filter may be used directly within a filterchain.

<TABLE cellSpacing=0 cellPadding=2 border=1>
  <TR>
    <TD vAlign=top><B>Attribute</B></TD>
    <TD vAlign=top><B>Description</B></TD>
    <TD vAlign=top align="center"><B>Required</B></TD>
  </TR>
  <TR>
    <TD vAlign=top>pattern</TD>
    <TD vAlign=top>The regular expression pattern to match in
      the token.</TD>
    <TD vAlign=top align="center">Yes</TD>
  </TR>
  <TR>
    <TD vAlign=top>replace</TD>
    <TD vAlign=top>The substitution pattern to replace the matched
      regular expression. When omitted an empty string is used.</TD>
    <TD vAlign=top align="center">No</TD>
  </TR>
  <TR>
    <TD vAlign=top>flags</TD>
    <TD vAlign=top>See
<a href="../OptionalTasks/replaceregexp.html">ReplaceRegexp</a>
for an explanation of regex flags.</TD>
    <TD vAlign=top align="center">No</TD>
  </TR>
</TABLE>

<H4>Examples:</H4>

Replace all occurances of "hello" with "world", ignoring case.

<BLOCKQUOTE><PRE>
&lt;tokenfilter&gt;
    &lt;replaceregex pattern="hello" replace="world" flags="gi"/&gt;
&lt;/tokenfilter&gt;

</PRE></BLOCKQUOTE>

<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.

<TABLE cellSpacing=0 cellPadding=2 border=1>
  <TR>
    <TD vAlign=top><B>Attribute</B></TD>
    <TD vAlign=top><B>Description</B></TD>
    <TD vAlign=top align="center"><B>Required</B></TD>
  </TR>
  <TR>
    <TD vAlign=top>pattern</TD>
    <TD vAlign=top>The regular expression pattern to match in
      the token.</TD>
    <TD vAlign=top align="center">Yes</TD>
  </TR>
  <TR>
    <TD vAlign=top>replace</TD>
    <TD vAlign=top>The substitution pattern to replace the matched
      regular expression. When omitted the orignal token is returned.
    </TD>
    <TD vAlign=top align="center">No</TD>
  </TR>
  <TR>
    <TD vAlign=top>flags</TD>
    <TD vAlign=top>See
<a href="../OptionalTasks/replaceregexp.html">ReplaceRegexp</a>
for an explanation of regex flags.</TD>
    <TD vAlign=top align="center">No</TD>
  </TR>
</TABLE>

<H4>Examples:</H4>

Filter lines that contain "hello" or "world", ignoring case.

<BLOCKQUOTE><PRE>
&lt;tokenfilter&gt;
    &lt;containsregex pattern="(hello|world)" flags="i"/&gt;
&lt;/tokenfilter&gt;

</PRE></BLOCKQUOTE>

This example replaces lines like "SUITE(TestSuite, bits);" with
"void register_bits();" and removes other lines.

<BLOCKQUOTE><PRE>
&lt;tokenfilter&gt;
    &lt;containsregex
        pattern="^ *SUITE\(.*,\s*(.*)\s*\).*"
        replace="void register_\1();"/&gt;
&lt;/tokenfilter&gt;
</PRE></BLOCKQUOTE>

<p><b><em><a name="trim">Trim</a></em></b></p>
This filter trims whitespace from the start and end of
tokens.
This filter may be used directly within a filterchain.
<p><b><em><a name="ignoreblank">IgnoreBlank</a></em></b></p>
This filter removes empty tokens.
This filter may be used directly within a filterchain.
<p><b><em><a name="filterdeletecharacters">DeleteCharacters</a></em></b></p>
This filter deletes specified characters from tokens.

<TABLE cellSpacing=0 cellPadding=2 border=1>
  <TR>
    <TD vAlign=top><B>Attribute</B></TD>
    <TD vAlign=top><B>Description</B></TD>
    <TD vAlign=top align="center"><B>Required</B></TD>
  </TR>
  <TR>
    <TD vAlign=top>chars</TD>
    <TD vAlign=top>The characters to delete. This attribute
      is backslash enabled.</TD>
    <TD vAlign=top align="center">Yes</TD>
  </TR>
</TABLE>

<H4>Examples:</H4>

Delete tabs from lines, trim the lines and removes empty lines.

<BLOCKQUOTE><PRE>
&lt;tokenfilter&gt;
    &lt;deletecharacters chars="\t"/&gt;
    &lt;trim/&gt;
    &lt;ignoreblank/&gt;
&lt;/tokenfilter&gt;

</PRE></BLOCKQUOTE>

<p><b><em><a name="scriptfilter">ScriptFilter</a></em></b></p>
This is an optional filter that executes a script in a
<a href="http://jakarta.apache.org/bsf" target="_top">Apache BSF</a>
supported language.</p>
See the <a href="../OptionalTasks/script.html">Script</a> task for
an explanation of scripts and dependencies.
</p>
<p>
The script is provided with an object <i>self</i> that has
getToken() and setToken(String) methods.
</p>

This filter may be used directly within a filterchain.<p>
<TABLE cellSpacing=0 cellPadding=2 border=1>
  <TR>
    <TD vAlign=top><B>Attribute</B></TD>
    <TD vAlign=top><B>Description</B></TD>
    <TD vAlign=top align="center"><B>Required</B></TD>
  </TR>
  <TR>
    <TD vAlign=top>language</TD>
    <TD vAlign=top> The programming language the script is written in.
Must be a supported Apache BSF language</TD>
    <TD vAlign=top align="center">Yes</TD>
  </TR>
  <TR>
    <TD vAlign=top>src</TD>
    <TD vAlign=top>The location of the script as a file, if not inline
    </TD>
    <TD vAlign=top align="center">No</TD>
  </TR>
  <TR>
</TABLE>

<H4>Examples:</H4>

Convert to uppercase.
<BLOCKQUOTE><PRE>
&lt;tokenfilter&gt;
    &lt;scriptfilter language="javascript"&gt;
        self.setToken(self.getToken().toUpperCase());
    &lt;/scriptfilter&gt;
&lt;/tokenfilter&gt;

</PRE></BLOCKQUOTE>

<H4>Custom tokenizers and string filters</H4>

Custom string filters and tokenizers may be plugged in by
extending the interfaces org.apache.tools.ant.filters.TokenFilter.Filter
and org.apache.tools.ant.util.Tokenizer respectly.

They are defined the build file using &lt;typedef/&gt;. For
example a string filter that capitalizes words may be declared as:
<blockquote><pre>
package my.customant;
import org.apache.tools.ant.filters.TokenFilter;

public class Capitalize
    implements TokenFilter.Filter
{
    public String filter(String token) {
        if (token.length() == 0)
            return token;
        return token.substring(0, 1).toUpperCase() +
                token.substring(1);
   }
}
</pre></blockquote>

This may be used as follows:
<blockquote><pre>
  &lt;typedef type="capitalize" classname="my.customant.Capitalize"
           classpath="my.customant.path"/&gt;
  &lt;copy file="input" tofile="output"&gt;
    &lt;filterchain&gt;
      &lt;tokenfilter&gt;
        &lt;stringtokenizer/&gt;
        &lt;capitalize/&gt;
      &lt;/tokenfilter&gt;
    &lt;/filterchain&gt;
  &lt;/copy&gt;
</pre></blockquote>

<HR>

<P align=center>Copyright &copy; 2002-2003 Apache Software Foundation. All rights
Reserved.</P></BODY></HTML>