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 + -
显示快捷键?