📄 javacodeviewer.java
字号:
buffer.append(char_line, head_idx, (tail_idx-head_idx)); buffer.append(curr_char); state = ENTRY; } } else if (curr_char == '[' || curr_char == ']') { // eg: char[], etc tail_idx = i; token = new String(char_line, head_idx, (tail_idx-head_idx)); if(reservedWords.containsKey(token)) { buffer.append(reservedWordStart); buffer.append(char_line, head_idx, (tail_idx-head_idx)); buffer.append(reservedWordEnd); buffer.append(curr_char); state = ACCEPT; } else { buffer.append(char_line, head_idx, (tail_idx-head_idx)); buffer.append(curr_char); state = ENTRY; } } else if (curr_char == '{' || curr_char == '}') { // eg: static{, etc tail_idx = i; token = new String(char_line, head_idx, (tail_idx-head_idx)); if(reservedWords.containsKey(token)) { buffer.append(reservedWordStart); buffer.append(char_line, head_idx, (tail_idx-head_idx)); buffer.append(reservedWordEnd); state = ACCEPT; i--; } else { buffer.append(char_line, head_idx, (tail_idx-head_idx)); state = ENTRY; i--; } } else if (curr_char == '/') { // should check for keyword tail_idx = i; buffer.append(char_line, head_idx, (tail_idx-head_idx)); state = ENTRY; i--; } else if (curr_char == '\"') { // should check for keyword tail_idx = i; buffer.append(char_line, head_idx, (tail_idx-head_idx)); state = ENTRY; i--; } else if (curr_char == '\'') { // should check for keyword tail_idx = i; buffer.append(char_line, head_idx, (tail_idx-head_idx)); state = ENTRY; i--; } else if (curr_char == ' ') { tail_idx = i; token = new String(char_line, head_idx, (tail_idx-head_idx)); if (reservedWords.containsKey(token)) { buffer.append(reservedWordStart); buffer.append(char_line, head_idx, (tail_idx-head_idx)); buffer.append(reservedWordEnd); state = ACCEPT; i--; } else { // can also do some highlighing in here, seeing as we have an identifier buffer.append(char_line, head_idx, (tail_idx-head_idx)); state = ENTRY; i--; } } else if (curr_char == '\n') { // possible multiple newlines // check if a keyword is matched tail_idx = i; token = new String(char_line, head_idx, (tail_idx-head_idx)); if (reservedWords.containsKey(token)) { buffer.append(reservedWordStart); buffer.append(char_line, head_idx, (tail_idx-head_idx)); buffer.append(reservedWordEnd); state = ACCEPT; i--; } else { buffer.append(char_line, head_idx, (tail_idx-head_idx)); state = ACCEPT; i--; } } else if (curr_char == '\t') { // this recognizes keyword\t // eg: else\t... tail_idx = i; token = new String(char_line, head_idx, (tail_idx-head_idx)); if (reservedWords.containsKey(token)) { buffer.append(reservedWordStart); buffer.append(char_line, head_idx, (tail_idx-head_idx)); buffer.append(reservedWordEnd); state = ACCEPT; i--; } else { buffer.append(char_line, head_idx, (tail_idx-head_idx)); state = ACCEPT; i--; } } else { // so int+, int;, public+, etc, are ignored :) tail_idx = i; buffer.append(char_line, head_idx, (tail_idx-head_idx)); state = ENTRY; i--; } break; case ACCEPT: if (Character.isJavaIdentifierPart(curr_char)) { // keyword, id, num literal head_idx = i; if (Character.isDigit(curr_char)) { if (curr_char == '0') { state = NUMBER_HEX_BEGIN; } else { state = NUMBER_BIN_INT_FLOAT_OCTAL; } } else { state = INTERIM; } } else if (curr_char == '+' || curr_char == '-') { // number literals if (i<char_line.length-1) { if (!Character.isDigit(char_line[i+1])) { // +0x43<-- this cannot be hex buffer.append(curr_char); state = ENTRY; } else { head_idx = i; state = NUMBER_BIN_INT_FLOAT_OCTAL; } } else { buffer.append(curr_char); state = NUMBER_BIN_INT_FLOAT_OCTAL; } } else if (curr_char == '/') { head_idx = i; state = IGNORE_BEGIN; } else if (curr_char == '\"') { head_idx = i; state = STRING_ENTRY; } else if (curr_char == '{' || curr_char == '}') { buffer.append(bracketStart); buffer.append(curr_char); buffer.append(bracketEnd); state = ACCEPT; } else { state = ENTRY; i--; } break; case IGNORE_BEGIN: if (curr_char == '/') { state = INLINE_IGNORE; } else if (curr_char == '*') { state = MULTILINE_IGNORE; } else if (Character.isJavaIdentifierPart(curr_char)) { head_idx = i; if (Character.isDigit(curr_char)) { buffer.append('/'); if (curr_char == '0') { state = NUMBER_HEX_BEGIN; i--; } else { state = NUMBER_BIN_INT_FLOAT_OCTAL; i--; } } else { buffer.append('/'); state = ENTRY; i--; } } else if (curr_char == '\n') { buffer.append('/'); state = NEWLINE_ENTRY; i--; } else { // space, \t, etc buffer.append('/'); state = ENTRY; i--; } break; case INLINE_IGNORE: if (curr_char != '\n') { state = INLINE_IGNORE; } else if (curr_char == '\n') { tail_idx = i; buffer.append(commentStart); buffer.append(char_line, head_idx, (tail_idx-head_idx)); buffer.append(commentEnd); i--; state = ACCEPT; } else { // what did we miss ; } break; case MULTILINE_IGNORE: if (curr_char == '*') { state = MULTILINE_EXIT; } else if(curr_char=='\n' && i==char_line.length-1) { // treat as MULTILINE_EXIT after reading a '/' tail_idx = i; buffer.append(commentStart); buffer.append(char_line, head_idx, (tail_idx-head_idx+1)); buffer.append(commentEnd); state = ACCEPT; } else { state = MULTILINE_IGNORE; } break; case MULTILINE_EXIT: if (curr_char == '/') { tail_idx = i; buffer.append(commentStart); buffer.append(char_line, head_idx, (tail_idx-head_idx+1)); buffer.append(commentEnd); state = ACCEPT; } else if(curr_char == '*') { state = MULTILINE_EXIT; } else if(curr_char=='\n') { if(i==char_line.length-1) { tail_idx = i; buffer.append(commentStart); buffer.append(char_line, head_idx, (tail_idx-head_idx+1)); buffer.append(commentEnd); state = ACCEPT; } else { state = MULTILINE_EXIT; } } else { state = MULTILINE_IGNORE; } break; default: break; } i++; } return buffer.toString(); } /* * Load Hashtable (or HashMap) with Java reserved words. Improved list * in version 1.1 taken directly from Java language spec. */ private static void loadKeywords() { reservedWords.put("abstract", "abstract"); reservedWords.put("assert", "assert"); 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("false", "false"); 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("null", "null"); 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("true", "true"); reservedWords.put("try", "try"); reservedWords.put("void", "void"); reservedWords.put("volatile", "volatile"); reservedWords.put("while", "while"); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -