Author: mbenson
Date: Wed Sep 27 15:35:01 2006
New Revision: 450610
URL: http://svn.apache.org/viewvc?view=rev&rev=450610
Log:
Extract StringTokenizer and FileTokenizer from TokenFilter.
Added:
ant/core/trunk/src/main/org/apache/tools/ant/util/FileTokenizer.java
(with props)
ant/core/trunk/src/main/org/apache/tools/ant/util/StringTokenizer.java
(with props)
Modified:
ant/core/trunk/src/main/org/apache/tools/ant/filters/TokenFilter.java
ant/core/trunk/src/main/org/apache/tools/ant/util/StringUtils.java
Modified: ant/core/trunk/src/main/org/apache/tools/ant/filters/TokenFilter.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/filters/TokenFilter.java?view=diff&rev=450610&r1=450609&r2=450610
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/filters/TokenFilter.java
(original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/filters/TokenFilter.java Wed
Sep 27 15:35:01 2006
@@ -27,7 +27,10 @@
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.FileTokenizer;
import org.apache.tools.ant.util.LineTokenizer;
+import org.apache.tools.ant.util.StringTokenizer;
+import org.apache.tools.ant.util.StringUtils;
import org.apache.tools.ant.util.regexp.Regexp;
/**
@@ -275,32 +278,15 @@
// --------------------------------------------
//
- // Tokenizer Classes
+ // Tokenizer Classes (impls moved to oata.util)
//
// --------------------------------------------
/**
* class to read the complete input into a string
*/
- public static class FileTokenizer extends ProjectComponent
- implements Tokenizer {
- /**
- * Get the complete input as a string
- * @param in the reader object
- * @return the complete input
- * @throws IOException if error reading
- */
- public String getToken(Reader in) throws IOException {
- return FileUtils.readFully(in);
- }
-
- /**
- * Return the intra-token string
- * @return an empty string always
- */
- public String getPostToken() {
- return "";
- }
+ public static class FileTokenizer
+ extends org.apache.tools.ant.util.FileTokenizer {
}
/**
@@ -308,132 +294,11 @@
* by white space, or by a specified list of
* delim characters. Behaves like java.util.StringTokenizer.
* if the stream starts with delim characters, the first
- * token will be an empty string (unless the treat tokens
- * as delims flag is set).
+ * token will be an empty string (unless the treat delims
+ * as tokens flag is set).
*/
- public static class StringTokenizer extends ProjectComponent
- implements Tokenizer {
- private String intraString = "";
- private int pushed = -2;
- private char[] delims = null;
- private boolean delimsAreTokens = false;
- private boolean suppressDelims = false;
- private boolean includeDelims = false;
-
- /**
- * attribute delims - the delimiter characters
- * @param delims a string containing the delimiter characters
- */
- public void setDelims(String delims) {
- this.delims = resolveBackSlash(delims).toCharArray();
- }
-
- /**
- * attribute delimsaretokens - treat delimiters as
- * separate tokens.
- * @param delimsAreTokens true if delimiters are to be separate
- */
-
- public void setDelimsAreTokens(boolean delimsAreTokens) {
- this.delimsAreTokens = delimsAreTokens;
- }
- /**
- * attribute suppressdelims - suppress delimiters.
- * default - false
- * @param suppressDelims if true do not report delimiters
- */
- public void setSuppressDelims(boolean suppressDelims) {
- this.suppressDelims = suppressDelims;
- }
-
- /**
- * attribute includedelims - treat delimiters as part
- * of the token.
- * default - false
- * @param includeDelims if true add delimiters to the token
- */
- public void setIncludeDelims(boolean includeDelims) {
- this.includeDelims = includeDelims;
- }
-
- /**
- * find and return the next token
- *
- * @param in the input stream
- * @return the token
- * @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;
- }
- boolean inToken = true;
- intraString = "";
- StringBuffer word = new StringBuffer();
- StringBuffer padding = new StringBuffer();
- while (ch != -1) {
- char c = (char) ch;
- boolean isDelim = isDelim(c);
- if (inToken) {
- if (isDelim) {
- if (delimsAreTokens) {
- if (word.length() == 0) {
- word.append(c);
- } else {
- pushed = ch;
- }
- break;
- }
- padding.append(c);
- inToken = false;
- } else {
- word.append(c);
- }
- } else {
- if (isDelim) {
- padding.append(c);
- } else {
- pushed = ch;
- break;
- }
- }
- ch = in.read();
- }
- intraString = padding.toString();
- if (includeDelims) {
- word.append(intraString);
- }
- return word.toString();
- }
-
- /**
- * @return the intratoken string
- */
- public String getPostToken() {
- if (suppressDelims || includeDelims) {
- return "";
- }
- return intraString;
- }
-
- private boolean isDelim(char ch) {
- if (delims == null) {
- return Character.isWhitespace(ch);
- }
- for (int i = 0; i < delims.length; ++i) {
- if (delims[i] == ch) {
- return true;
- }
- }
- return false;
- }
+ public static class StringTokenizer
+ extends org.apache.tools.ant.util.StringTokenizer {
}
// --------------------------------------------
@@ -823,43 +688,7 @@
* @return converted string
*/
public static String resolveBackSlash(String input) {
- StringBuffer b = new StringBuffer();
- boolean backSlashSeen = false;
- for (int i = 0; i < input.length(); ++i) {
- char c = input.charAt(i);
- if (!backSlashSeen) {
- if (c == '\\') {
- backSlashSeen = true;
- } else {
- b.append(c);
- }
- } else {
- switch (c) {
- case '\\':
- b.append((char) '\\');
- break;
- case 'n':
- b.append((char) '\n');
- break;
- case 'r':
- b.append((char) '\r');
- break;
- case 't':
- b.append((char) '\t');
- break;
- case 'f':
- b.append((char) '\f');
- break;
- case 's':
- b.append(" \t\n\r\f");
- break;
- default:
- b.append(c);
- }
- backSlashSeen = false;
- }
- }
- return b.toString();
+ return StringUtils.resolveBackSlash(input);
}
/**
Added: ant/core/trunk/src/main/org/apache/tools/ant/util/FileTokenizer.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/util/FileTokenizer.java?view=auto&rev=450610
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/util/FileTokenizer.java (added)
+++ ant/core/trunk/src/main/org/apache/tools/ant/util/FileTokenizer.java Wed
Sep 27 15:35:01 2006
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.tools.ant.util;
+
+import java.io.IOException;
+import java.io.Reader;
+import org.apache.tools.ant.ProjectComponent;
+import org.apache.tools.ant.util.FileUtils;
+import org.apache.tools.ant.util.Tokenizer;
+
+/**
+ * Class to read the complete input into a string.
+ * @since Ant 1.7
+ */
+public class FileTokenizer extends ProjectComponent implements Tokenizer {
+
+ /**
+ * Get the complete input as a string
+ * @param in the reader object
+ * @return the complete input
+ * @throws IOException if error reading
+ */
+ public String getToken(Reader in) throws IOException {
+ return FileUtils.readFully(in);
+ }
+
+ /**
+ * Return the intra-token string
+ * @return an empty string always
+ */
+ public String getPostToken() {
+ return "";
+ }
+}
Propchange: ant/core/trunk/src/main/org/apache/tools/ant/util/FileTokenizer.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: ant/core/trunk/src/main/org/apache/tools/ant/util/StringTokenizer.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/util/StringTokenizer.java?view=auto&rev=450610
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/util/StringTokenizer.java
(added)
+++ ant/core/trunk/src/main/org/apache/tools/ant/util/StringTokenizer.java Wed
Sep 27 15:35:01 2006
@@ -0,0 +1,153 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.tools.ant.util;
+
+import java.io.IOException;
+import java.io.Reader;
+import org.apache.tools.ant.ProjectComponent;
+import org.apache.tools.ant.util.Tokenizer;
+
+/**
+ * Class to tokenize the input as areas separated
+ * by white space, or by a specified list of
+ * delim characters. Behaves like java.util.StringTokenizer.
+ * If the stream starts with delim characters, the first
+ * token will be an empty string (unless the treat delims
+ * as tokens flag is set).
+ * @since Ant 1.7
+ */
+public class StringTokenizer extends ProjectComponent implements Tokenizer {
+ private String intraString = "";
+ private int pushed = -2;
+ private char[] delims = null;
+ private boolean delimsAreTokens = false;
+ private boolean suppressDelims = false;
+ private boolean includeDelims = false;
+
+ /**
+ * attribute delims - the delimiter characters
+ * @param delims a string containing the delimiter characters
+ */
+ public void setDelims(String delims) {
+ this.delims = StringUtils.resolveBackSlash(delims).toCharArray();
+ }
+
+ /**
+ * attribute delimsaretokens - treat delimiters as
+ * separate tokens.
+ * @param delimsAreTokens true if delimiters are to be separate
+ */
+
+ public void setDelimsAreTokens(boolean delimsAreTokens) {
+ this.delimsAreTokens = delimsAreTokens;
+ }
+ /**
+ * attribute suppressdelims - suppress delimiters.
+ * default - false
+ * @param suppressDelims if true do not report delimiters
+ */
+ public void setSuppressDelims(boolean suppressDelims) {
+ this.suppressDelims = suppressDelims;
+ }
+
+ /**
+ * attribute includedelims - treat delimiters as part
+ * of the token.
+ * default - false
+ * @param includeDelims if true add delimiters to the token
+ */
+ public void setIncludeDelims(boolean includeDelims) {
+ this.includeDelims = includeDelims;
+ }
+
+ /**
+ * find and return the next token
+ *
+ * @param in the input stream
+ * @return the token
+ * @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;
+ }
+ boolean inToken = true;
+ intraString = "";
+ StringBuffer word = new StringBuffer();
+ StringBuffer padding = new StringBuffer();
+ while (ch != -1) {
+ char c = (char) ch;
+ boolean isDelim = isDelim(c);
+ if (inToken) {
+ if (isDelim) {
+ if (delimsAreTokens) {
+ if (word.length() == 0) {
+ word.append(c);
+ } else {
+ pushed = ch;
+ }
+ break;
+ }
+ padding.append(c);
+ inToken = false;
+ } else {
+ word.append(c);
+ }
+ } else {
+ if (isDelim) {
+ padding.append(c);
+ } else {
+ pushed = ch;
+ break;
+ }
+ }
+ ch = in.read();
+ }
+ intraString = padding.toString();
+ if (includeDelims) {
+ word.append(intraString);
+ }
+ return word.toString();
+ }
+
+ /**
+ * @return the intratoken string
+ */
+ public String getPostToken() {
+ return suppressDelims || includeDelims ? "" : intraString;
+ }
+
+ private boolean isDelim(char ch) {
+ if (delims == null) {
+ return Character.isWhitespace(ch);
+ }
+ for (int i = 0; i < delims.length; ++i) {
+ if (delims[i] == ch) {
+ return true;
+ }
+ }
+ return false;
+ }
+}
Propchange:
ant/core/trunk/src/main/org/apache/tools/ant/util/StringTokenizer.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: ant/core/trunk/src/main/org/apache/tools/ant/util/StringUtils.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/util/StringUtils.java?view=diff&rev=450610&r1=450609&r2=450610
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/util/StringUtils.java
(original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/util/StringUtils.java Wed Sep
27 15:35:01 2006
@@ -130,4 +130,55 @@
}
return true;
}
+
+ /**
+ * xml does not do "c" like interpretation of strings.
+ * i.e. \n\r\t etc.
+ * this method processes \n, \r, \t, \f, \\
+ * also subs \s -> " \n\r\t\f"
+ * a trailing '\' will be ignored
+ *
+ * @param input raw string with possible embedded '\'s
+ * @return converted string
+ * @since Ant 1.7
+ */
+ public static String resolveBackSlash(String input) {
+ StringBuffer b = new StringBuffer();
+ boolean backSlashSeen = false;
+ for (int i = 0; i < input.length(); ++i) {
+ char c = input.charAt(i);
+ if (!backSlashSeen) {
+ if (c == '\\') {
+ backSlashSeen = true;
+ } else {
+ b.append(c);
+ }
+ } else {
+ switch (c) {
+ case '\\':
+ b.append((char) '\\');
+ break;
+ case 'n':
+ b.append((char) '\n');
+ break;
+ case 'r':
+ b.append((char) '\r');
+ break;
+ case 't':
+ b.append((char) '\t');
+ break;
+ case 'f':
+ b.append((char) '\f');
+ break;
+ case 's':
+ b.append(" \t\n\r\f");
+ break;
+ default:
+ b.append(c);
+ }
+ backSlashSeen = false;
+ }
+ }
+ return b.toString();
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]