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]