gtkparser.java
来自「java jdk 1.4的源码」· Java 代码 · 共 1,844 行 · 第 1/5 页
JAVA
1,844 行
return SYMBOL_BG_PIXMAP.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; } token = scanner.getToken(); if (token != GTKScanner.TOKEN_STRING) { return GTKScanner.TOKEN_STRING; } String pixmapStr = null; String str = scanner.currValue.stringVal; if (str.equals("<none>") || str.equals("<parent>")) { pixmapStr = str.intern(); } else { pixmapStr = resolvePixmapPath(str); } if (pixmapStr == null) { scanner.printMessage("Unable to locate image file in pixmap_path: \"" + str + "\"", false); } else { info.bgPixmapName[state[0]] = pixmapStr; } return GTKScanner.TOKEN_NONE; } String resolvePixmapPath(String str) { // search in pixmap path if (pixmapPaths != null) { for (int i = 0; i < pixmapPaths.length; i++) { File file = new File(pixmapPaths[i], str); if (file.canRead()) { return file.getAbsolutePath(); } } } // search in rc directory stack File[] dirs = new File[dirStack.size()]; dirs = (File[])dirStack.toArray(dirs); for (int i = dirs.length - 1; i >= 0; i--) { File file = new File(dirs[i], str); if (file.canRead()) { return file.getAbsolutePath(); } } return null; } private int parseFont(int expVal, StyleInfo info) throws IOException { int token; boolean isPango; token = scanner.getToken(); if (token != expVal) { return expVal; } if (token == SYMBOL_FONT_NAME.val) { isPango = true; } else if (token == SYMBOL_FONT.val || token == SYMBOL_FONTSET.val) { isPango = false; } else { return SYMBOL_FONT_NAME.val; } token = scanner.getToken(); if (token != GTKScanner.TOKEN_EQUAL_SIGN) { return GTKScanner.TOKEN_EQUAL_SIGN; } token = scanner.getToken(); if (token != GTKScanner.TOKEN_STRING) { return GTKScanner.TOKEN_STRING; } // only need to parse pango font names if (isPango) { String pangoName = scanner.currValue.stringVal; info.font = PangoFonts.lookupFont(pangoName); } return GTKScanner.TOKEN_NONE; } private GTKEngineParser getParser(String engineName) { Object o = engineParsers.get(engineName); if (o == null) { return null; } if (o instanceof GTKEngineParser) { return (GTKEngineParser)o; } GTKEngineParser parser = null; try { parser = (GTKEngineParser)Class.forName((String)o).newInstance(); } catch (ClassNotFoundException e) { } catch (InstantiationException e) { } catch (IllegalAccessException e) { } if (parser == null) { // no need to keep trying to load it every time engineParsers.remove(engineName); } else { // replace the name with an instance of a parser engineParsers.put(engineName, parser); } return parser; } private int parseEngine(StyleInfo info) throws IOException { int token; token = scanner.getToken(); if (token != SYMBOL_ENGINE.val) { return SYMBOL_ENGINE.val; } token = scanner.getToken(); if (token != GTKScanner.TOKEN_STRING) { return GTKScanner.TOKEN_STRING; } String engineName = scanner.currValue.stringVal; // engine "" {} means to use the default engine if (engineName.length() == 0) { token = scanner.getToken(); if (token != GTKScanner.TOKEN_LEFT_CURLY) { return GTKScanner.TOKEN_LEFT_CURLY; } token = scanner.getToken(); if (token != GTKScanner.TOKEN_RIGHT_CURLY) { return GTKScanner.TOKEN_RIGHT_CURLY; } info.engineInfo = null; return GTKScanner.TOKEN_NONE; } GTKEngineParser parser = getParser(engineName); if (parser == null) { token = ignoreBlock(); if (token != GTKScanner.TOKEN_NONE) { return token; } scanner.printMessage("Engine \"" + engineName + "\" is unsupported, ignoring", false); } else { token = scanner.getToken(); if (token != GTKScanner.TOKEN_LEFT_CURLY) { return GTKScanner.TOKEN_LEFT_CURLY; } EngineInfo[] engineInfo = new EngineInfo[1]; // only pass in the existing engine info if it came from this parser if (info.engineInfo != null && engineName.equals(info.engineInfo.engineName)) { engineInfo[0] = info.engineInfo; } token = parser.parse(scanner, this, engineInfo); if (token != GTKScanner.TOKEN_NONE) { return token; } // tag the returned engine info with the engine name if (engineInfo[0] != null) { engineInfo[0].engineName = engineName; } info.engineInfo = engineInfo[0]; } return GTKScanner.TOKEN_NONE; } private int parseStock(StyleInfo info) throws IOException { String id; int token; token = scanner.getToken(); if (token != SYMBOL_STOCK.val) { return SYMBOL_STOCK.val; } token = scanner.getToken(); if (token != GTKScanner.TOKEN_LEFT_BRACE) { return GTKScanner.TOKEN_LEFT_BRACE; } token = scanner.getToken(); if (token != GTKScanner.TOKEN_STRING) { return GTKScanner.TOKEN_STRING; } id = scanner.currValue.stringVal; token = scanner.getToken(); if (token != GTKScanner.TOKEN_RIGHT_BRACE) { return GTKScanner.TOKEN_RIGHT_BRACE; } token = scanner.getToken(); if (token != GTKScanner.TOKEN_EQUAL_SIGN) { return GTKScanner.TOKEN_EQUAL_SIGN; } token = scanner.getToken(); if (token != GTKScanner.TOKEN_LEFT_CURLY) { return GTKScanner.TOKEN_LEFT_CURLY; } ArrayList iconSources = new ArrayList(); // This array will be used first to hold the return value from // parseIconSource and then the variable will be used in // converting iconSources to an array. GTKStyle.GTKIconSource[] sources = new GTKStyle.GTKIconSource[1]; token = scanner.peekNextToken(); while (token != GTKScanner.TOKEN_RIGHT_CURLY) { token = parseIconSource(sources); if (token != GTKScanner.TOKEN_NONE) { return token; } token = scanner.getToken(); if (token != GTKScanner.TOKEN_COMMA && token != GTKScanner.TOKEN_RIGHT_CURLY) { return GTKScanner.TOKEN_RIGHT_CURLY; } if (sources[0] != null) { iconSources.add(sources[0]); } } if (iconSources.size() != 0) { sources = new GTKStyle.GTKIconSource[iconSources.size()]; sources = (GTKStyle.GTKIconSource[])iconSources.toArray(sources); info.addStockItem(id, sources); } return GTKScanner.TOKEN_NONE; } private GTKStyle.GTKIconSource createIconSource(String path, int direction, int state, String size) { String resolvedPath = resolvePixmapPath(path); if (resolvedPath != null) { return new GTKStyle.GTKIconSource(resolvedPath, direction, state, size); } return null; } private int parseIconSource(GTKStyle.GTKIconSource[] retVal) throws IOException { int token; String pixmapStr = null; int direction = GTKConstants.UNDEFINED; int state = GTKConstants.UNDEFINED; String size = null; token = scanner.getToken(); if (token != GTKScanner.TOKEN_LEFT_CURLY) { return GTKScanner.TOKEN_LEFT_CURLY; } token = scanner.getToken(); if (token != GTKScanner.TOKEN_STRING) { return GTKScanner.TOKEN_STRING; } pixmapStr = scanner.currValue.stringVal; token = scanner.getToken(); if (token == GTKScanner.TOKEN_RIGHT_CURLY) { retVal[0] = createIconSource(pixmapStr, direction, state, size); return GTKScanner.TOKEN_NONE; } else if (token != GTKScanner.TOKEN_COMMA) { return GTKScanner.TOKEN_COMMA; } token = scanner.getToken(); if (token == SYMBOL_RTL.val) { direction = GTKConstants.RTL; } else if (token == SYMBOL_LTR.val) { direction = GTKConstants.LTR; } else if (token == '*') { // nothing } else { return SYMBOL_RTL.val; } token = scanner.getToken(); if (token == GTKScanner.TOKEN_RIGHT_CURLY) { retVal[0] = createIconSource(pixmapStr, direction, state, size); return GTKScanner.TOKEN_NONE; } else if (token != GTKScanner.TOKEN_COMMA) { return GTKScanner.TOKEN_COMMA; } token = scanner.getToken(); if (token == SYMBOL_NORMAL.val) { state = SynthConstants.ENABLED; } else if (token == SYMBOL_ACTIVE.val) { state = SynthConstants.PRESSED; } else if (token == SYMBOL_PRELIGHT.val) { state = SynthConstants.MOUSE_OVER; } else if (token == SYMBOL_SELECTED.val) { state = SynthConstants.SELECTED; } else if (token == SYMBOL_INSENSITIVE.val) { state = SynthConstants.DISABLED; } else if (token == '*') { // nothing } else { return SYMBOL_PRELIGHT.val; } token = scanner.getToken(); if (token == GTKScanner.TOKEN_RIGHT_CURLY) { retVal[0] = createIconSource(pixmapStr, direction, state, size); return GTKScanner.TOKEN_NONE; } else if (token != GTKScanner.TOKEN_COMMA) { return GTKScanner.TOKEN_COMMA; } token = scanner.getToken(); if (token != '*') { if (token != GTKScanner.TOKEN_STRING) { return GTKScanner.TOKEN_STRING; } size = scanner.currValue.stringVal; // if an invalid size, use * instead
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?