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

📄 codesyntaxparser.java

📁 JSP聊天系统
💻 JAVA
字号:
package org.ehotsoft.yekki.filter.util;

import java.util.Hashtable;

public class CodeSyntaxParser {

    private static Hashtable reservedWords = new Hashtable(80);
    private boolean inMultiLineComment;
    private String backgroundColor;
    private String commentStart;
    private String commentEnd;
    private String stringStart;
    private String stringEnd;
    private String reservedWordStart;
    private String reservedWordEnd;

    public CodeSyntaxParser() {

        inMultiLineComment = false;
        backgroundColor = "#ffffff";
        commentStart = "<font color=\"#006600\"><i>";
        commentEnd = "</font></i>";
        stringStart = "<font color=\"#FF00FF\">";
        stringEnd = "</font>";
        reservedWordStart = "<font color=\"#000099\"><b>";
        reservedWordEnd = "</font></b>";
    }

    public String getCommentStart() {

        return commentStart;
    }

    public void setCommentStart(String s) {

        commentStart = s;
    }

    public String getCommentEnd() {

        return commentEnd;
    }

    public void setCommentEnd(String s) {

        commentEnd = s;
    }

    public String getStringStart() {

        return stringStart;
    }

    public void setStringStart(String s) {

        stringStart = s;
    }

    public String getStringEnd() {

        return stringEnd;
    }

    public void setStringEnd(String s) {

        stringEnd = s;
    }

    public String getReservedWordStart() {

        return reservedWordStart;
    }

    public void setReservedWordStart(String s) {

        reservedWordStart = s;
    }

    public String getReservedWordEnd() {

        return reservedWordEnd;
    }

    public void setReservedWordEnd(String s) {

        reservedWordEnd = s;
    }

    public String syntaxHighlight(String s) {

        return htmlFilter(s);
    }

    private String htmlFilter(String s) {

        if(s == null || s.equals(""))
        {
            return "";
        } else
        {
            s = replace(s, "&", "&#38;");
            s = replace(s, "\\\"", "&#92;&#34");
            s = replace(s, "\\\\", "&#92;&#92;");
            s = replace(s, "<", "&#60;");
            s = replace(s, ">", "&#62;");
            return multiLineCommentFilter(s);
        }
    }

    private String multiLineCommentFilter(String s) {

        if(s == null || s.equals(""))
            return "";
        StringBuffer stringbuffer = new StringBuffer();
        int i;
        if(inMultiLineComment && (i = s.indexOf("*/")) > -1 && !isInsideString(s, i))
        {
            inMultiLineComment = false;
            stringbuffer.append(s.substring(0, i));
            stringbuffer.append("*/").append(commentEnd);
            if(s.length() > i + 2)
                stringbuffer.append(inlineCommentFilter(s.substring(i + 2)));
            return stringbuffer.toString();
        }
        if(inMultiLineComment)
            return s;
        if((i = s.indexOf("/*")) > -1 && !isInsideString(s, i))
        {
            inMultiLineComment = true;
            stringbuffer.append(inlineCommentFilter(s.substring(0, i)));
            stringbuffer.append(commentStart).append("/*");
            stringbuffer.append(multiLineCommentFilter(s.substring(i + 2)));
            return stringbuffer.toString();
        } else
        {
            return inlineCommentFilter(s);
        }
    }

    private String inlineCommentFilter(String s) {

        if(s == null || s.equals(""))
            return "";
        StringBuffer stringbuffer = new StringBuffer();
        int i;
        if((i = s.indexOf("//")) > -1 && !isInsideString(s, i))
        {
            stringbuffer.append(stringFilter(s.substring(0, i)));
            stringbuffer.append(commentStart);
            stringbuffer.append(s.substring(i));
            stringbuffer.append(commentEnd);
        } else
        {
            stringbuffer.append(stringFilter(s));
        }
        return stringbuffer.toString();
    }

    private String stringFilter(String s) {

        if(s == null || s.equals(""))
            return "";
        StringBuffer stringbuffer = new StringBuffer();
        if(s.indexOf("\"") <= -1)
            return keywordFilter(s);
        int i = 0;
        byte byte0 = -1;
        byte byte1 = -1;
        int k;
        while((k = s.indexOf("\"")) > -1) 
            if(byte0 == -1)
            {
                byte0 = 0;
                stringbuffer.append(stringFilter(s.substring(i, k)));
                stringbuffer.append(stringStart).append("\"");
                s = s.substring(k + 1);
            } else
            {
                byte0 = -1;
                int j = k;
                stringbuffer.append(s.substring(0, j + 1));
                stringbuffer.append(stringEnd);
                s = s.substring(j + 1);
            }
        stringbuffer.append(keywordFilter(s));
        return stringbuffer.toString();
    }

    private String keywordFilter(String s) {

        if(s == null || s.equals(""))
            return "";
        StringBuffer stringbuffer = new StringBuffer();
        Hashtable hashtable = new Hashtable();
        int i = 0;
        boolean flag = false;
        StringBuffer stringbuffer1 = new StringBuffer();
        while(i < s.length()) 
        {
            stringbuffer1.setLength(0);
            char c = s.charAt(i);
            int j = i;
            while(i < s.length() && (c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z')) 
            {
                stringbuffer1.append(c);
                if(++i < s.length())
                    c = s.charAt(i);
            }
            String s1 = stringbuffer1.toString();
            if(reservedWords.containsKey(s1) && !hashtable.containsKey(s1))
            {
                hashtable.put(s1, s1);
                s = replace(s, s1, reservedWordStart + s1 + reservedWordEnd);
                i += reservedWordStart.length() + reservedWordEnd.length();
            } else
            {
                i++;
            }
        }
        stringbuffer.append(s);
        return stringbuffer.toString();
    }

    public static final String replace(String s, String s1, String s2) {

        int i = 0;
        if((i = s.indexOf(s1, i)) >= 0)
        {
            char ac[] = s.toCharArray();
            char ac1[] = s2.toCharArray();
            int j = s1.length();
            StringBuffer stringbuffer = new StringBuffer(ac.length);
            stringbuffer.append(ac, 0, i).append(ac1);
            i += j;
            int k;
            for(k = i; (i = s.indexOf(s1, i)) > 0; k = i)
            {
                stringbuffer.append(ac, k, i - k).append(ac1);
                i += j;
            }

            stringbuffer.append(ac, k, ac.length - k);
            return stringbuffer.toString();
        } else
        {
            return s;
        }
    }

    private boolean isInsideString(String s, int i) {

        if(s.indexOf("\"") < 0)
            return false;
        String s1 = s.substring(0, i);
        String s2 = s.substring(i);
        int k = 0;
        int l = 0;
        int j;
        while((j = s1.indexOf("\"")) > -1) 
        {
            k++;
            s1 = s1.substring(j + 1);
        }
        while((j = s2.indexOf("\"")) > -1) 
        {
            l++;
            s2 = s2.substring(j + 1);
        }
        return l % 2 != 0 && k % 2 != 0;
    }

    private static void loadKeywords() {

        reservedWords.put("abstract", "abstract");
        reservedWords.put("boolean", "boolean");
        reservedWords.put("break", "break");
        reservedWords.put("byte", "byte");
        reservedWords.put("case", "case");
        reservedWords.put("catch", "catch");
        reservedWords.put("char", "char");
        reservedWords.put("class", "class");
        reservedWords.put("const", "const");
        reservedWords.put("continue", "continue");
        reservedWords.put("default", "default");
        reservedWords.put("do", "do");
        reservedWords.put("double", "double");
        reservedWords.put("else", "else");
        reservedWords.put("extends", "extends");
        reservedWords.put("final", "final");
        reservedWords.put("finally", "finally");
        reservedWords.put("float", "float");
        reservedWords.put("for", "for");
        reservedWords.put("goto", "goto");
        reservedWords.put("if", "if");
        reservedWords.put("implements", "implements");
        reservedWords.put("import", "import");
        reservedWords.put("instanceof", "instanceof");
        reservedWords.put("int", "int");
        reservedWords.put("interface", "interface");
        reservedWords.put("long", "long");
        reservedWords.put("native", "native");
        reservedWords.put("new", "new");
        reservedWords.put("package", "package");
        reservedWords.put("private", "private");
        reservedWords.put("protected", "protected");
        reservedWords.put("public", "public");
        reservedWords.put("return", "return");
        reservedWords.put("short", "short");
        reservedWords.put("static", "static");
        reservedWords.put("strictfp", "strictfp");
        reservedWords.put("super", "super");
        reservedWords.put("switch", "switch");
        reservedWords.put("synchronized", "synchronized");
        reservedWords.put("this", "this");
        reservedWords.put("throw", "throw");
        reservedWords.put("throws", "throws");
        reservedWords.put("transient", "transient");
        reservedWords.put("try", "try");
        reservedWords.put("void", "void");
        reservedWords.put("volatile", "volatile");
        reservedWords.put("while", "while");
    }

    static {

        loadKeywords();
    }
}

⌨️ 快捷键说明

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