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

📄 codeviewer.java

📁 Jive 是一个系统工程
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/** * CodeViewer.java * CoolServlets.com * July 17, 2000 * * Copyright (C) 2000 CoolServlets.com * * 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) Neither the name CoolServlets.com nor the names of its contributors may be *   used to endorse or promote products derived from this software without *   specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY COOLSERVLETS.COM AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS 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 COOLSERVLETS.COM OR 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. */package com.coolservlets.codeviewer;import java.util.*;/** * A class that syntax highlights Java code into html. * <p> * A CodeViewer object is created and then keeps state as * lines are passed in. Each line passed in as java text, is returned as syntax * highlighted html text. * <p> * Users of the class can set how the java code will be highlighted with * setter methods. * <p> * Only valid java lines should be passed in since the object maintains * state and may not handle illegal code gracefully. * <p> * The actual system is implemented as a series of filters that deal with * specific portions of the java code. The filters are as follows: * <p> * <pre> *  htmlFilter *     |__ *        multiLineCommentFilter *           |___ *                inlineCommentFilter *                   |___ *                        stringFilter *                           |__ *                               keywordFilter * </pre> * */public class CodeViewer {    //private static HashMap reservedWords = new HashMap(80); // >= Java2 only (also, not thread-safe)    private static Hashtable reservedWords = new Hashtable(80); // < Java2 (thread-safe)    private boolean inMultiLineComment = false;    private String backgroundColor = "#ffffff";    private String commentStart = "<font color=\"#aa0000\"><i>";    private String commentEnd = "</font></i>";    private String stringStart = "<font color=\"#000099\">";    private String stringEnd = "</font>";    private String reservedWordStart = "<b>";    private String reservedWordEnd = "</b>";    /**     * Load all keywords at class loading time.     */    static {        loadKeywords();    }    /**     * Gets the html for the start of a comment block.     */    public String getCommentStart() {        return commentStart;    }    /**     * Sets the html for the start of a comment block.     */    public void setCommentStart(String commentStart) {        this.commentStart = commentStart;    }    /**     * Gets the html for the end of a comment block.     */    public String getCommentEnd() {        return commentEnd;    }    /**     * Sets the html for the end of a comment block.     */    public void setCommentEnd(String commentEnd) {        this.commentEnd = commentEnd;    }    /**     * Gets the html for the start of a String.     */    public String getStringStart() {        return stringStart;    }    /**     * Sets the html for the start of a String.     */    public void setStringStart(String stringStart) {        this.stringStart = stringStart;    }    /**     * Gets the html for the end of a String.     */    public String getStringEnd() {        return stringEnd;    }    /**     * Sets the html for the end of a String.     */    public void setStringEnd(String stringEnd) {        this.stringEnd = stringEnd;    }    /**     * Gets the html for the start of a reserved word.     */    public String getReservedWordStart() {        return reservedWordStart;    }    /**     * Sets the html for the start of a reserved word.     */    public void setReservedWordStart(String reservedWordStart) {        this.reservedWordStart = reservedWordStart;    }    /**     * Gets the html for the end of a reserved word.     */    public String getReservedWordEnd() {        return reservedWordEnd;    }    /**     * Sets the html for the end of a reserved word.     */    public void setReservedWordEnd(String reservedWordEnd) {        this.reservedWordEnd = reservedWordEnd;    }    /**     * Passes off each line to the first filter.     * @param   line    The line of Java code to be highlighted.     */    public String syntaxHighlight( String line ) {       return htmlFilter(line);    }    /*     * Filter html tags that appear in the java source into more benign text     * that won't disrupt the output.     */    private String htmlFilter( String line ) {        if( line == null || line.equals("") ) {            return "";        }        // replace ampersands with HTML escape sequence for ampersand;        line = replace(line, "&", "&#38;");        // replace \" sequences with HTML escape sequences;        line = replace(line, "\\\"", "&#92;&#34");        // replace the \\ with HTML escape sequences. fixes a problem when        // backslashes preceed quotes.        line = replace(line, "\\\\", "&#92;&#92;" );        // replace less-than signs which might be confused        // by HTML as tag angle-brackets;        line = replace(line, "<", "&#60;");        // replace greater-than signs which might be confused        // by HTML as tag angle-brackets;        line = replace(line, ">", "&#62;");        return multiLineCommentFilter(line);    }    /*     * Filter out multiLine comments. State is kept with a private boolean     * variable.     */    private String multiLineCommentFilter(String line) {        if (line == null || line.equals("")) {            return "";        }        StringBuffer buf = new StringBuffer();        int index;        //First, check for the end of a multi-line comment.        if (inMultiLineComment && (index = line.indexOf("*/")) > -1 && !isInsideString(line,index)) {            inMultiLineComment = false;            buf.append(line.substring(0,index));            buf.append("*/").append(commentEnd);            if (line.length() > index+2) {                buf.append(inlineCommentFilter(line.substring(index+2)));            }            return buf.toString();        }        //If there was no end detected and we're currently in a multi-line        //comment, we don't want to do anymore work, so return line.        else if (inMultiLineComment) {            return line;        }        //We're not currently in a comment, so check to see if the start

⌨️ 快捷键说明

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