gtkparser.java
来自「java jdk 1.4的源码」· Java 代码 · 共 1,844 行 · 第 1/5 页
JAVA
1,844 行
token = scanner.getToken(); if (token != GTKScanner.TOKEN_STRING) { return GTKScanner.TOKEN_STRING; } pattern = scanner.currValue.stringVal; token = scanner.getToken(); if (token == SYMBOL_STYLE.val) { isBinding = false; } else if (token == SYMBOL_BINDING.val) { isBinding = true; } else { return SYMBOL_STYLE.val; } token = scanner.peekNextToken(); if (token == ':') { token = scanner.getToken(); token = scanner.getToken(); if (token != SYMBOL_LOWEST.val && token != SYMBOL_GTK.val && token != SYMBOL_APPLICATION.val && token != SYMBOL_THEME.val && token != SYMBOL_RC.val && token != SYMBOL_HIGHEST.val) { return SYMBOL_APPLICATION.val; } scanner.printMessage("Priority specification is unsupported, ignoring", false); } token = scanner.getToken(); if (token != GTKScanner.TOKEN_STRING) { return GTKScanner.TOKEN_STRING; } // PENDING(shannonh) - When we start handling priority, the information will // probably be stored as part of an Assignment here if (isBinding) { // PENDING(shannonh) - Key binding support scanner.printMessage("Binding assignment is unsupported, ignoring", false); } else { info = (StyleInfo)namedStyles.get(scanner.currValue.stringVal); if (info == null) { return GTKScanner.TOKEN_STRING; } Assignment assignment = new Assignment(type, pattern, info); assignments.add(assignment); } return GTKScanner.TOKEN_NONE; } private int parseModulePath() throws IOException { int token; token = scanner.getToken(); if (token != SYMBOL_MODULE_PATH.val) { return SYMBOL_MODULE_PATH.val; } token = scanner.getToken(); if (token != GTKScanner.TOKEN_STRING) { return GTKScanner.TOKEN_STRING; } scanner.printMessage("module_path directive is now ignored", false); return GTKScanner.TOKEN_NONE; } private int parseIMModuleFile() throws IOException { int token; token = scanner.getToken(); if (token != SYMBOL_IM_MODULE_FILE.val) { return SYMBOL_IM_MODULE_FILE.val; } token = scanner.getToken(); if (token != GTKScanner.TOKEN_STRING) { return GTKScanner.TOKEN_STRING; } scanner.printMessage("im_module_file directive is unsupported, ignoring", false); return GTKScanner.TOKEN_NONE; } private int parseIdentifier() throws IOException { int token; token = scanner.getToken(); if (token != GTKScanner.TOKEN_IDENTIFIER) { return GTKScanner.TOKEN_IDENTIFIER; } String prop; Object[] value = new Object[1]; StringBuffer buf = new StringBuffer(scanner.currValue.stringVal); String validChars = GTKScanner.CHARS_A_2_Z + GTKScanner.CHARS_a_2_z + GTKScanner.CHARS_DIGITS + "-"; // some weird logic that GTK does int len = buf.length(); for (int i = 0; i < len; i++) { if (validChars.indexOf(buf.charAt(i)) == -1) { buf.setCharAt(i, '-'); } } prop = buf.toString().intern(); token = parsePropertyAssignment(value); if (token != GTKScanner.TOKEN_NONE) { return token; } settings.put(prop, value[0]); return GTKScanner.TOKEN_NONE; } private int parseColorSetting(int expVal, StyleInfo info) throws IOException { int token; token = scanner.getToken(); if (token != expVal) { return expVal; } Color[] cols = null; if (token == SYMBOL_FG.val) { cols = info.fg; } else if (token == SYMBOL_BG.val) { cols = info.bg; } else if (token == SYMBOL_TEXT.val) { cols = info.text; } else if (token == SYMBOL_BASE.val) { cols = info.base; } else { return SYMBOL_FG.val; } int[] state = new int[1]; token = parseState(state); if (token != GTKScanner.TOKEN_NONE) { return token; } token = scanner.getToken(); if (token != GTKScanner.TOKEN_EQUAL_SIGN) { return GTKScanner.TOKEN_EQUAL_SIGN; } return parseColor(cols, state[0]); } private int parseState(int[] retVal) throws IOException { int token; token = scanner.getToken(); if (token != GTKScanner.TOKEN_LEFT_BRACE) { return GTKScanner.TOKEN_LEFT_BRACE; } token = scanner.getToken(); if (token == SYMBOL_NORMAL.val) { retVal[0] = StyleInfo.NORMAL; } else if (token == SYMBOL_ACTIVE.val) { retVal[0] = StyleInfo.ACTIVE; } else if (token == SYMBOL_PRELIGHT.val) { retVal[0] = StyleInfo.PRELIGHT; } else if (token == SYMBOL_SELECTED.val) { retVal[0] = StyleInfo.SELECTED; } else if (token == SYMBOL_INSENSITIVE.val) { retVal[0] = StyleInfo.INSENSITIVE; } else { return SYMBOL_NORMAL.val; } token = scanner.getToken(); if (token != GTKScanner.TOKEN_RIGHT_BRACE) { return GTKScanner.TOKEN_RIGHT_BRACE; } return GTKScanner.TOKEN_NONE; } private int parseColor(Color[] colors, int index) throws IOException { int token; long lVal; double dVal; float red; float green; float blue; token = scanner.getToken(); switch(token) { case GTKScanner.TOKEN_LEFT_CURLY: token = scanner.getToken(); if (token == GTKScanner.TOKEN_INT) { red = javaColorVal(scanner.currValue.longVal); } else if (token == GTKScanner.TOKEN_FLOAT) { red = javaColorVal(scanner.currValue.doubleVal); } else { return GTKScanner.TOKEN_FLOAT; } token = scanner.getToken(); if (token != GTKScanner.TOKEN_COMMA) { return GTKScanner.TOKEN_COMMA; } token = scanner.getToken(); if (token == GTKScanner.TOKEN_INT) { green = javaColorVal(scanner.currValue.longVal); } else if (token == GTKScanner.TOKEN_FLOAT) { green = javaColorVal(scanner.currValue.doubleVal); } else { return GTKScanner.TOKEN_FLOAT; } token = scanner.getToken(); if (token != GTKScanner.TOKEN_COMMA) { return GTKScanner.TOKEN_COMMA; } token = scanner.getToken(); if (token == GTKScanner.TOKEN_INT) { blue = javaColorVal(scanner.currValue.longVal); } else if (token == GTKScanner.TOKEN_FLOAT) { blue = javaColorVal(scanner.currValue.doubleVal); } else { return GTKScanner.TOKEN_FLOAT; } token = scanner.getToken(); if (token != GTKScanner.TOKEN_RIGHT_CURLY) { return GTKScanner.TOKEN_RIGHT_CURLY; } colors[index] = new ColorUIResource(red, green, blue); break; case GTKScanner.TOKEN_STRING: Color color = parseColorString(scanner.currValue.stringVal); if (color == null) { scanner.printMessage("Invalid color constant '" + scanner.currValue.stringVal + "'", false); return GTKScanner.TOKEN_STRING; } colors[index] = color; break; default: return GTKScanner.TOKEN_STRING; } return GTKScanner.TOKEN_NONE; } private static Color parseColorString(String str) { if (str.charAt(0) == '#') { str = str.substring(1); int i = str.length(); if (i < 3 || i > 12 || (i % 3) != 0) { return null; } i /= 3; int r; int g; int b; try { r = Integer.parseInt(str.substring(0, i), 16); g = Integer.parseInt(str.substring(i, i * 2), 16); b = Integer.parseInt(str.substring(i * 2, i * 3), 16); } catch (NumberFormatException nfe) { return null; } if (i == 4) { return new ColorUIResource(r / 65535.0f, g / 65535.0f, b / 65535.0f); } else if (i == 1) { return new ColorUIResource(r / 15.0f, g / 15.0f, b / 15.0f); } else if (i == 2) { return new ColorUIResource(r, g, b); } else { return new ColorUIResource(r / 4095.0f, g / 4095.0f, b / 4095.0f); } } else { return XColors.lookupColor(str); } } private static float javaColorVal(long col) { int color = (int)Math.max(Math.min(col, 65535), 0); return col / 65535.0f; } private static float javaColorVal(double col) { float color = (float)Math.max(Math.min(col, 1.0f), 0.0f); return color; } private int parseThickness(int expVal, StyleInfo info) throws IOException { int token; boolean isXThickness; token = scanner.getToken(); if (token != expVal) { return expVal; } if (token == SYMBOL_XTHICKNESS.val) { isXThickness = true; } else if (token == SYMBOL_YTHICKNESS.val) { isXThickness = false; } else { return SYMBOL_XTHICKNESS.val; } token = scanner.getToken(); if (token != GTKScanner.TOKEN_EQUAL_SIGN) { return GTKScanner.TOKEN_EQUAL_SIGN; } token = scanner.getToken(); if (token != GTKScanner.TOKEN_INT) { return GTKScanner.TOKEN_INT; } int thickness = (int)scanner.currValue.longVal; if (isXThickness) { info.xThickness = thickness; } else { info.yThickness = thickness; } return GTKScanner.TOKEN_NONE; } private int parseBGPixmap(StyleInfo info) throws IOException { int token; token = scanner.getToken(); if (token != SYMBOL_BG_PIXMAP.val) {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?