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