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

📄 codeviewer.java

📁 一个小公司要求给写的很简单的任务管理系统。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/** * CodeViewer.java *  * Bill Lynch & Matt Tucker * CoolServlets.com, October 1999 *  * Please visit CoolServlets.com for high quality, open source Java servlets.  * * Copyright (C) 1999  CoolServlets.com *  * Any errors or suggested improvements to this class can be reported * as instructed on Coolservlets.com. We hope you enjoy * this program... your comments will encourage further development! *  * This software is distributed under the terms of The BSD License. *  * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, *   this list of conditions and the following disclaimer. * * 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. * Neither name of 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. *//* * @(#)CodeViewer.java	1.6 02/06/13 */import java.io.*;import java.util.*;/** * A class that syntax highlights Java code by turning it into html. * * <p> A <code>CodeViewer</code> 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: * * <pre> *  htmlFilter *     |__ *        multiLineCommentFilter *           |___ *                inlineCommentFilter *                   |___ *                        stringFilter *                           |__ *                               keywordFilter * </pre> * * @version 1.6 06/13/02 * @author Bill Lynch, Matt Tucker, CoolServlets.com */public class CodeViewer {    private static HashMap reservedWords = new HashMap(); // >= Java2 only (also, not thread-safe)    //private static Hashtable reservedWords = new Hashtable(); // < Java2 (thread-safe)    private boolean inMultiLineComment = false;    private String backgroundColor = "#ffffff";    private String commentStart = "</font><font size=2 color=\"#0000aa\"><i>";    private String commentEnd = "</font></i><font size=2 color=black>";        private String stringStart = "</font><font size=2 color=\"#00bb00\">";    private String stringEnd = "</font><font size=2 color=black>";    private String reservedWordStart = "<b>";    private String reservedWordEnd = "</b>";    static {        loadHash();    }    public CodeViewer() {    }    public void setCommentStart(String commentStart) {        this.commentStart = commentStart;    }    public void setCommentEnd(String commentEnd) {        this.commentEnd = commentEnd;    }    public void setStringStart(String stringStart) {        this.stringStart = stringStart;    }    public void setStringEnd(String stringEnd) {        this.stringEnd = stringEnd;    }    public void setReservedWordStart(String reservedWordStart) {        this.reservedWordStart = reservedWordStart;    }    public void setReservedWordEnd(String reservedWordEnd) {        this.reservedWordEnd = reservedWordEnd;    }    public String getCommentStart() {        return commentStart;    }    public String getCommentEnd() {        return commentEnd;    }    public String getStringStart() {        return stringStart;    }    public String getStringEnd() {        return stringEnd;    }    public String getReservedWordStart() {        return reservedWordStart;    }    public String getReservedWordEnd() {        return 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 into more benign text.     */     private String htmlFilter( String line ) {        if( line == null || line.equals("") ) {            return "";        }        // replace ampersands with HTML escape sequence for ampersand;        line = replace(line, "&", "&#38;");        // replace the \\ with HTML escape sequences. fixes a problem when        // backslashes preceed quotes.        line = replace(line, "\\\\", "&#92;&#92;" );        // replace \" sequences with HTML escape sequences;        line = replace(line, "" + (char)92 + (char)34, "&#92;&#34");        // 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        //of a multi-line comment is in this line.        else if ((index = line.indexOf("/*")) > -1 && !isInsideString(line,index)) {            inMultiLineComment = true;            //Return result of other filters + everything after the start            //of the multiline comment. We need to pass the through the            //to the multiLineComment filter again in case the comment ends            //on the same line.            buf.append(inlineCommentFilter(line.substring(0,index)));            buf.append(commentStart).append("/*");            buf.append(multiLineCommentFilter(line.substring(index+2)));            return buf.toString();        }

⌨️ 快捷键说明

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