/* * 作成日: 2004/06/13 * License Apache 2.0 * この生成されたコメントの挿入されるテンプレートを変更するため * ウィンドウ > 設定 > Java > コード生成 > コードとコメント */ package org.jpn.xucker.ant.filter; import java.io.IOException; import java.io.Reader; import java.util.Vector; import org.apache.tools.ant.filters.BaseParamFilterReader; import org.apache.tools.ant.filters.ChainableReader; import org.apache.tools.ant.types.Parameter; public final class StripTag extends BaseParamFilterReader implements ChainableReader { private boolean inTag; private boolean inComment; private boolean inSingleQuote; private boolean inDoubleQuote; private String buffer = null; public StripTag() { super(); } public StripTag(final Reader in) { super(in); } public final int read() throws IOException { if (!getInitialized()) { initialize(); setInitialized(true); } int ch = -1; if (buffer != null) { ch = (int) buffer.charAt(0); buffer = buffer.substring(1); if (buffer.length() == 0) buffer = null; } else { ch = in.read(); if (ch == -1) return ch; //return end. } char character = (char) ch; if (inTag) { //now not support single & double quote.becouse of it is often using of mistaking double or single quote. /* if (inSingleQuote) { if (character == '\'') { inSingleQuote = false; } } else if (inDoubleQuote) { if (character == '"') { inDoubleQuote = false; } } else { */ if (character == '>') { inTag = false; return read(); } /*else if (character == '\'') { inSingleQuote = true; } else if (character == '"') { inDoubleQuote = true; } } */ return read(); } else if (inComment) { if (character == '-') { int next1 = in.read(); int next2 = in.read(); if ((char) next1 == '-' && (char) next2 == '>') { inComment = false; return read(); } else { buffer = ""; if (next1 != -1) buffer += (char) next1; if (next2 != -1) buffer += (char) next2; if (buffer.length() == 0) buffer = null; return read(); } } else { return read(); } } else if (inSingleQuote) { } else if (inDoubleQuote) { } else { if (character == '<') { int next1 = in.read(); int next2 = in.read(); int next3 = in.read(); if ((char) next1 == '!' && (char) next2 == '-' && (char) next3 == '-') { inComment = true; } else { inTag = true; buffer = ""; if (next1 != -1) buffer += (char) next1; if (next2 != -1) buffer += (char) next2; if (next3 != -1) buffer += (char) next3; if (buffer.length() == 0) buffer = null; } return read(); } } return ch; } /** * Creates a new LineContains using the passed in * Reader for instantiation. * * @param rdr A Reader object providing the underlying stream. * Must not be null. * * @return a new filter based on this configuration, but filtering * the specified reader */ public final Reader chain(final Reader rdr) { StripTag newFilter = new StripTag(rdr); newFilter.setInitialized(true); return newFilter; } /** * Parses the parameters to add user-defined contains strings. */ private final void initialize() { inTag = false; inComment = false; inSingleQuote = false; inDoubleQuote = false; } }