⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 htmlprocessor.java

📁 OS(OpenSymphony)的SiteMesh是一个用来在JSP中实现页面布局和装饰(layout and decoration)的框架组件
💻 JAVA
字号:
package com.opensymphony.module.sitemesh.html;import com.opensymphony.module.sitemesh.html.tokenizer.TagTokenizer;import com.opensymphony.module.sitemesh.html.tokenizer.TokenHandler;import com.opensymphony.module.sitemesh.html.util.CharArray;import com.opensymphony.module.sitemesh.util.CharArrayWriter;import java.io.Reader;import java.io.Writer;//import java.io.CharArrayWriter;import java.io.IOException;public class HTMLProcessor {    private final char[] in;    private final CharArray out;    private final State defaultState = new State();    private State currentState = defaultState;    private Writer outStream;    public HTMLProcessor(char[] in, CharArray out) {        this.in = in;        this.out = out;    }    public HTMLProcessor(Reader in, Writer out) throws IOException {        CharArrayWriter inBuffer = new CharArrayWriter();        char[] buffer = new char[2048];        int n;        while (-1 != (n = in.read(buffer))) {            inBuffer.write(buffer, 0, n);        }        this.in = inBuffer.toCharArray();        this.out = new CharArray(2048);        this.outStream = out;    }    public State defaultState() {        return defaultState;    }    /**     * Equivalent of htmlProcessor.defaultState().addRule()     */     public void addRule(TagRule rule) {        defaultState.addRule(rule);    }    public void process() throws IOException {        TagTokenizer tokenizer = new TagTokenizer(in);        final HTMLProcessorContext context = new HTMLProcessorContext() {            public State currentState() {                return currentState;            }            public void changeState(State newState) {                currentState = newState;            }            private CharArray[] buffers = new CharArray[10];            private int size;            public void pushBuffer(CharArray buffer) {                if(size == buffers.length) {                  CharArray[] newBuffers = new CharArray[buffers.length * 2];                  System.arraycopy(buffers, 0, newBuffers, 0, buffers.length);                  buffers = newBuffers;                }                buffers[size++] = buffer;            }              public CharArray currentBuffer() {                return buffers[size - 1];            }              public CharArray popBuffer() {                CharArray last = buffers[size - 1];                buffers[--size] = null;                return last;            }              public void mergeBuffer() {                CharArray top = buffers[size - 1];                CharArray nextDown = buffers[size - 2];                nextDown.append(top);            }        };        context.pushBuffer(out);        tokenizer.start(new TokenHandler() {            public boolean shouldProcessTag(String name) {                return currentState.shouldProcessTag(name.toLowerCase());            }            public void tag(Tag tag) {                TagRule tagRule = currentState.getRule(tag.getName().toLowerCase());                tagRule.setContext(context);                tagRule.process(tag);            }            public void text(Text text) {                currentState.handleText(text, context);            }            public void warning(String message, int line, int column) {                // TODO                // System.out.println(line + "," + column + ": " + message);            }        });        defaultState.endOfState();        if (outStream != null) {            outStream.write(out.toString());        }    }    public void addTextFilter(TextFilter textFilter) {        currentState.addTextFilter(textFilter);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -