📄 prtokeniser.java
字号:
ch = file.read(); if (ch == -1 || isDelimiter(ch) || isWhitespace(ch)) break; if (ch == '#') { ch = (getHex(file.read()) << 4) + getHex(file.read()); } outBuf.append((char)ch); } backOnePosition(); break; } case '>': ch = file.read(); if (ch != '>') throwError("'>' not expected"); type = TK_END_DIC; break; case '<': { int v1 = file.read(); if (v1 == '<') { type = TK_START_DIC; break; } outBuf = new StringBuffer(); type = TK_STRING; int v2 = 0; while (true) { while (isWhitespace(v1)) v1 = file.read(); if (v1 == '>') break; v1 = getHex(v1); if (v1 < 0) break; v2 = file.read(); while (isWhitespace(v2)) v2 = file.read(); if (v2 == '>') { ch = v1 << 4; outBuf.append((char)ch); break; } v2 = getHex(v2); if (v2 < 0) break; ch = (v1 << 4) + v2; outBuf.append((char)ch); v1 = file.read(); } if (v1 < 0 || v2 < 0) throwError("Error reading string"); break; } case '%': type = TK_COMMENT; do { ch = file.read(); } while (ch != -1 && ch != '\r' && ch != '\n'); break; case '(': { outBuf = new StringBuffer(); type = TK_STRING; int nesting = 0; while (true) { ch = file.read(); if (ch == -1) break; if (ch == '(') { ++nesting; } else if (ch == ')') { --nesting; } else if (ch == '\\') { boolean lineBreak = false; ch = file.read(); switch (ch) { case 'n': ch = '\n'; break; case 'r': ch = '\r'; break; case 't': ch = '\t'; break; case 'b': ch = '\b'; break; case 'f': ch = '\f'; break; case '(': case ')': case '\\': break; case '\r': lineBreak = true; ch = file.read(); if (ch != '\n') backOnePosition(); break; case '\n': lineBreak = true; break; default: { if (ch < '0' || ch > '7') { break; } int octal = ch - '0'; ch = file.read(); if (ch < '0' || ch > '7') { ch = octal; backOnePosition(); break; } octal = (octal << 3) + ch - '0'; ch = file.read(); if (ch < '0' || ch > '7') { ch = octal; backOnePosition(); break; } octal = (octal << 3) + ch - '0'; ch = octal & 0xff; break; } } if (lineBreak) continue; if (ch < 0) break; } else if (ch == '\r') { ch = file.read(); if (ch < 0) break; if (ch != '\n') { ch = '\n'; backOnePosition(); } } if (nesting == -1) break; outBuf.append((char)ch); } if (ch == -1) throwError("Error reading string"); break; } default: { outBuf = new StringBuffer(); if (ch == '-' || ch == '+' || ch == '.' || (ch >= '0' && ch <= '9')) { type = TK_NUMBER; do { outBuf.append((char)ch); ch = file.read(); } while (ch != -1 && ((ch >= '0' && ch <= '9') || ch == '.')); } else { type = TK_OTHER; do { outBuf.append((char)ch); ch = file.read(); } while (ch != -1 && !isDelimiter(ch) && !isWhitespace(ch)); } backOnePosition(); break; } } if (outBuf != null) stringValue = outBuf.toString(); return true; } public int intValue() { return Integer.valueOf(stringValue).intValue(); } public boolean readLineSegment(byte input[]) throws IOException { int c = -1; boolean eol = false; int ptr = 0; int len = input.length; while (!eol && ptr < len) { switch (c = read()) { case -1: case '\n': eol = true; break; case '\r': eol = true; int cur = getFilePointer(); if ((read()) != '\n') { seek(cur); } break; default: input[ptr++] = (byte)c; break; } } if (ptr >= len) { eol = false; while (!eol) { switch (c = read()) { case -1: case '\n': eol = true; break; case '\r': eol = true; int cur = getFilePointer(); if ((read()) != '\n') { seek(cur); } break; } } } if ((c == -1) && (ptr == 0)) { return false; } if (ptr + 2 <= len) { input[ptr++] = ' '; input[ptr] = 'X'; } return true; } public static int[] checkObjectStart(byte line[]) { try { PRTokeniser tk = new PRTokeniser(line); int num = 0; int gen = 0; if (!tk.nextToken() || tk.getTokenType() != TK_NUMBER) return null; num = tk.intValue(); if (!tk.nextToken() || tk.getTokenType() != TK_NUMBER) return null; gen = tk.intValue(); if (!tk.nextToken()) return null; if (!tk.getStringValue().equals("obj")) return null; return new int[]{num, gen}; } catch (Exception ioe) { // empty on purpose } return null; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -