diff --git a/docs/manual/CoreTypes/filterchain.html b/docs/manual/CoreTypes/filterchain.html
index 53640f3cc..2001d4f7b 100644
--- a/docs/manual/CoreTypes/filterchain.html
+++ b/docs/manual/CoreTypes/filterchain.html
@@ -1256,7 +1256,7 @@ Convert to uppercase.
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.filters.TokenFilter.Tokenizer respectly.
+and org.apache.tools.ant.util.Tokenizer respectly.
They are defined the build file using <typedef/>. For
example a string filter that capitalizes words may be declared as:
diff --git a/src/main/org/apache/tools/ant/filters/HeadFilter.java b/src/main/org/apache/tools/ant/filters/HeadFilter.java
index ae4ea80e7..eb31e68c1 100644
--- a/src/main/org/apache/tools/ant/filters/HeadFilter.java
+++ b/src/main/org/apache/tools/ant/filters/HeadFilter.java
@@ -55,6 +55,7 @@ package org.apache.tools.ant.filters;
import java.io.IOException;
import java.io.Reader;
+import org.apache.tools.ant.util.LineTokenizer;
import org.apache.tools.ant.types.Parameter;
/**
@@ -91,7 +92,7 @@ public final class HeadFilter extends BaseParamFilterReader
private long skip = 0;
/** A line tokenizer */
- private TokenFilter.LineTokenizer lineTokenizer = null;
+ private LineTokenizer lineTokenizer = null;
/** the current line from the input stream */
private String line = null;
@@ -115,7 +116,7 @@ public final class HeadFilter extends BaseParamFilterReader
*/
public HeadFilter(final Reader in) {
super(in);
- lineTokenizer = new TokenFilter.LineTokenizer();
+ lineTokenizer = new LineTokenizer();
lineTokenizer.setIncludeDelims(true);
}
diff --git a/src/main/org/apache/tools/ant/filters/TailFilter.java b/src/main/org/apache/tools/ant/filters/TailFilter.java
index 9792fe8e6..ab0034597 100644
--- a/src/main/org/apache/tools/ant/filters/TailFilter.java
+++ b/src/main/org/apache/tools/ant/filters/TailFilter.java
@@ -57,6 +57,7 @@ import java.io.IOException;
import java.io.Reader;
import java.util.LinkedList;
import org.apache.tools.ant.types.Parameter;
+import org.apache.tools.ant.util.LineTokenizer;
/**
* Reads the last n
lines of a stream. (Default is last10 lines.)
@@ -100,7 +101,7 @@ public final class TailFilter extends BaseParamFilterReader
private int bufferPos = 0;
/** A line tokenizer */
- private TokenFilter.LineTokenizer lineTokenizer = null;
+ private LineTokenizer lineTokenizer = null;
/** the current line from the input stream */
private String line = null;
@@ -126,7 +127,7 @@ public final class TailFilter extends BaseParamFilterReader
*/
public TailFilter(final Reader in) {
super(in);
- lineTokenizer = new TokenFilter.LineTokenizer();
+ lineTokenizer = new LineTokenizer();
lineTokenizer.setIncludeDelims(true);
}
diff --git a/src/main/org/apache/tools/ant/filters/TokenFilter.java b/src/main/org/apache/tools/ant/filters/TokenFilter.java
index e1529519c..e993c83ad 100644
--- a/src/main/org/apache/tools/ant/filters/TokenFilter.java
+++ b/src/main/org/apache/tools/ant/filters/TokenFilter.java
@@ -63,6 +63,8 @@ import org.apache.tools.ant.ProjectComponent;
import org.apache.tools.ant.types.RegularExpression;
import org.apache.tools.ant.types.Substitution;
import org.apache.tools.ant.util.FileUtils;
+import org.apache.tools.ant.util.Tokenizer;
+import org.apache.tools.ant.util.LineTokenizer;
import org.apache.tools.ant.util.regexp.Regexp;
/**
@@ -77,28 +79,6 @@ import org.apache.tools.ant.util.regexp.Regexp;
*/
public class TokenFilter extends BaseFilterReader
implements ChainableReader {
- /**
- * input stream tokenizers implement this interface
- */
- public interface Tokenizer {
- /**
- * get the next token from the input stream
- * @param in the input stream
- * @return the next token, or null for the end
- * of the stream
- * @throws IOException if an error occurs
- */
- String getToken(Reader in)
- throws IOException;
-
- /**
- * return the string between tokens, after the
- * previous token.
- * @return the intra-token string
- */
- String getPostToken();
- }
-
/**
* string filters implement this interface
*/
@@ -361,96 +341,6 @@ public class TokenFilter extends BaseFilterReader
}
}
-
- /**
- * class to tokenize the input as lines seperated
- * by \r (mac style), \r\n (dos/windows style) or \n (unix style)
- */
- public static class LineTokenizer extends ProjectComponent
- implements Tokenizer {
- private String lineEnd = "";
- private int pushed = -2;
- private boolean includeDelims = false;
-
- /**
- * attribute includedelims - whether to include
- * the line ending with the line, or to return
- * it in the posttoken
- * default false
- * @param includeDelims if true include /r and /n in the line
- */
-
- public void setIncludeDelims(boolean includeDelims) {
- this.includeDelims = includeDelims;
- }
-
- /**
- * get the next line from the input
- *
- * @param in the input reader
- * @return the line excluding /r or /n, unless includedelims is set
- * @exception IOException if an error occurs reading
- */
- public String getToken(Reader in) throws IOException {
- int ch = -1;
- if (pushed != -2) {
- ch = pushed;
- pushed = -2;
- } else {
- ch = in.read();
- }
- if (ch == -1) {
- return null;
- }
-
- lineEnd = "";
- StringBuffer line = new StringBuffer();
-
- int state = 0;
- while (ch != -1) {
- if (state == 0) {
- if (ch == '\r') {
- state = 1;
- } else if (ch == '\n') {
- lineEnd = "\n";
- break;
- } else {
- line.append((char) ch);
- }
- } else {
- state = 0;
- if (ch == '\n') {
- lineEnd = "\r\n";
- } else {
- pushed = ch;
- lineEnd = "\r";
- }
- break;
- }
- ch = in.read();
- }
- if (ch == -1 && state == 1) {
- lineEnd = "\r";
- }
-
- if (includeDelims) {
- line.append(lineEnd);
- }
- return line.toString();
- }
-
- /**
- * @return the line ending character(s) for the current line
- */
- public String getPostToken() {
- if (includeDelims) {
- return "";
- }
- return lineEnd;
- }
-
- }
-
/**
* class to tokenize the input as areas seperated
* by white space, or by a specified list of
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/i18n/Translate.java b/src/main/org/apache/tools/ant/taskdefs/optional/i18n/Translate.java
index 1d947d967..2f09ae3b9 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/i18n/Translate.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/i18n/Translate.java
@@ -71,6 +71,7 @@ import org.apache.tools.ant.filters.TokenFilter;
import org.apache.tools.ant.taskdefs.MatchingTask;
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.util.FileUtils;
+import org.apache.tools.ant.util.LineTokenizer;
/**
* Translates text embedded in files using Resource Bundle files.
@@ -573,7 +574,7 @@ public class Translate extends MatchingTask {
BufferedReader in
= new BufferedReader(new InputStreamReader(fis, srcEncoding));
String line;
- TokenFilter.LineTokenizer lineTokenizer = new TokenFilter.LineTokenizer();
+ LineTokenizer lineTokenizer = new LineTokenizer();
lineTokenizer.setIncludeDelims(true);
line = lineTokenizer.getToken(in);
while ((line) != null) {
diff --git a/src/main/org/apache/tools/ant/util/FileUtils.java b/src/main/org/apache/tools/ant/util/FileUtils.java
index 4aa96ad23..5089a5846 100644
--- a/src/main/org/apache/tools/ant/util/FileUtils.java
+++ b/src/main/org/apache/tools/ant/util/FileUtils.java
@@ -583,7 +583,7 @@ public class FileUtils {
in = new BufferedReader(rdr);
}
- TokenFilter.LineTokenizer lineTokenizer = new TokenFilter.LineTokenizer();
+ LineTokenizer lineTokenizer = new LineTokenizer();
lineTokenizer.setIncludeDelims(true);
String newline = null;
String line = lineTokenizer.getToken(in);
diff --git a/src/main/org/apache/tools/ant/util/LineTokenizer.java b/src/main/org/apache/tools/ant/util/LineTokenizer.java
new file mode 100644
index 000000000..4553ad832
--- /dev/null
+++ b/src/main/org/apache/tools/ant/util/LineTokenizer.java
@@ -0,0 +1,151 @@
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2003 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 apache@apache.org.
+ *
+ * 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
+ * .
+ */
+package org.apache.tools.ant.util;
+
+import java.io.Reader;
+import java.io.IOException;
+
+import org.apache.tools.ant.ProjectComponent;
+
+/**
+ * class to tokenize the input as lines seperated
+ * by \r (mac style), \r\n (dos/windows style) or \n (unix style)
+ * @author Peter Reilly
+ * @since Ant 1.6
+ */
+public class LineTokenizer extends ProjectComponent
+ implements Tokenizer {
+ private String lineEnd = "";
+ private int pushed = -2;
+ private boolean includeDelims = false;
+
+ /**
+ * attribute includedelims - whether to include
+ * the line ending with the line, or to return
+ * it in the posttoken
+ * default false
+ * @param includeDelims if true include /r and /n in the line
+ */
+
+ public void setIncludeDelims(boolean includeDelims) {
+ this.includeDelims = includeDelims;
+ }
+
+ /**
+ * get the next line from the input
+ *
+ * @param in the input reader
+ * @return the line excluding /r or /n, unless includedelims is set
+ * @exception IOException if an error occurs reading
+ */
+ public String getToken(Reader in) throws IOException {
+ int ch = -1;
+ if (pushed != -2) {
+ ch = pushed;
+ pushed = -2;
+ } else {
+ ch = in.read();
+ }
+ if (ch == -1) {
+ return null;
+ }
+
+ lineEnd = "";
+ StringBuffer line = new StringBuffer();
+
+ int state = 0;
+ while (ch != -1) {
+ if (state == 0) {
+ if (ch == '\r') {
+ state = 1;
+ } else if (ch == '\n') {
+ lineEnd = "\n";
+ break;
+ } else {
+ line.append((char) ch);
+ }
+ } else {
+ state = 0;
+ if (ch == '\n') {
+ lineEnd = "\r\n";
+ } else {
+ pushed = ch;
+ lineEnd = "\r";
+ }
+ break;
+ }
+ ch = in.read();
+ }
+ if (ch == -1 && state == 1) {
+ lineEnd = "\r";
+ }
+
+ if (includeDelims) {
+ line.append(lineEnd);
+ }
+ return line.toString();
+ }
+
+ /**
+ * @return the line ending character(s) for the current line
+ */
+ public String getPostToken() {
+ if (includeDelims) {
+ return "";
+ }
+ return lineEnd;
+ }
+
+}
+
diff --git a/src/main/org/apache/tools/ant/util/Tokenizer.java b/src/main/org/apache/tools/ant/util/Tokenizer.java
new file mode 100644
index 000000000..43d525e7c
--- /dev/null
+++ b/src/main/org/apache/tools/ant/util/Tokenizer.java
@@ -0,0 +1,82 @@
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2003 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 apache@apache.org.
+ *
+ * 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
+ * .
+ */
+package org.apache.tools.ant.util;
+
+import java.io.Reader;
+import java.io.IOException;
+
+/**
+ * input stream tokenizers implement this interface
+ *
+ * @author Peter Reilly
+ * @version Ant 1.6
+ */
+public interface Tokenizer {
+ /**
+ * get the next token from the input stream
+ * @param in the input stream
+ * @return the next token, or null for the end
+ * of the stream
+ * @throws IOException if an error occurs
+ */
+ String getToken(Reader in)
+ throws IOException;
+
+ /**
+ * return the string between tokens, after the
+ * previous token.
+ * @return the intra-token string
+ */
+ String getPostToken();
+}