blueprintengineparser.java
来自「JAVA的一些源码 JAVA2 STANDARD EDITION DEVELO」· Java 代码 · 共 1,112 行 · 第 1/3 页
JAVA
1,112 行
/* * @(#)BlueprintEngineParser.java 1.12 03/12/19 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package com.sun.java.swing.plaf.gtk;import java.io.IOException;import java.util.ArrayList;import java.awt.Font;import java.awt.Insets;import java.awt.Color;import javax.swing.plaf.synth.SynthConstants;/** * A parser for the "blueprint" engine sections in GTK rc theme files. * * @author Shannon Hickey * @version 1.12 12/19/03 */class BlueprintEngineParser extends GTKEngineParser { private static final int SYM_IMAGE = GTKScanner.TOKEN_LAST + 1; private static final int SYM_FUNCTION = SYM_IMAGE + 1; private static final int SYM_FILE = SYM_FUNCTION + 1; private static final int SYM_STRETCH = SYM_FILE + 1; private static final int SYM_RECOLORABLE = SYM_STRETCH + 1; private static final int SYM_BORDER = SYM_RECOLORABLE + 1; private static final int SYM_DETAIL = SYM_BORDER + 1; private static final int SYM_STATE = SYM_DETAIL + 1; private static final int SYM_SHADOW = SYM_STATE + 1; private static final int SYM_GAP_SIDE = SYM_SHADOW + 1; private static final int SYM_GAP_FILE = SYM_GAP_SIDE + 1; private static final int SYM_GAP_BORDER = SYM_GAP_FILE + 1; private static final int SYM_GAP_START_FILE = SYM_GAP_BORDER + 1; private static final int SYM_GAP_START_BORDER = SYM_GAP_START_FILE + 1; private static final int SYM_GAP_END_FILE = SYM_GAP_START_BORDER + 1; private static final int SYM_GAP_END_BORDER = SYM_GAP_END_FILE + 1; private static final int SYM_OVERLAY_FILE = SYM_GAP_END_BORDER + 1; private static final int SYM_OVERLAY_BORDER = SYM_OVERLAY_FILE + 1; private static final int SYM_OVERLAY_STRETCH = SYM_OVERLAY_BORDER + 1; private static final int SYM_ARROW_DIRECTION = SYM_OVERLAY_STRETCH + 1; private static final int SYM_ORIENTATION = SYM_ARROW_DIRECTION + 1; private static final int SYM_PARENT_TYPE = SYM_ORIENTATION + 1; private static final int SYM_COLORIZE_COLOR = SYM_PARENT_TYPE + 1; private static final int SYM_ICON_COLORIZE = SYM_COLORIZE_COLOR + 1; private static final int SYM_ICON_COLORIZE_ANCESTOR_TYPE = SYM_ICON_COLORIZE + 1; private static final int SYM_USE_AS_BKG_MASK = SYM_ICON_COLORIZE_ANCESTOR_TYPE + 1; private static final int SYM_OVERLAY_RECOLORABLE = SYM_USE_AS_BKG_MASK + 1; private static final int SYM_OVERLAY_COLORIZE_COLOR = SYM_OVERLAY_RECOLORABLE + 1; // SYM_D_HLINE and SYM_D_STEPPER are assumed to begin and end the function symbols. // When adding new symbols, only function symbols should be added between them. private static final int SYM_D_HLINE = SYM_OVERLAY_COLORIZE_COLOR + 1; private static final int SYM_D_VLINE = SYM_D_HLINE + 1; private static final int SYM_D_SHADOW = SYM_D_VLINE + 1; private static final int SYM_D_POLYGON = SYM_D_SHADOW + 1; private static final int SYM_D_ARROW = SYM_D_POLYGON + 1; private static final int SYM_D_DIAMOND = SYM_D_ARROW + 1; private static final int SYM_D_OVAL = SYM_D_DIAMOND + 1; private static final int SYM_D_STRING = SYM_D_OVAL + 1; private static final int SYM_D_BOX = SYM_D_STRING + 1; private static final int SYM_D_FLAT_BOX = SYM_D_BOX + 1; private static final int SYM_D_CHECK = SYM_D_FLAT_BOX + 1; private static final int SYM_D_OPTION = SYM_D_CHECK + 1; private static final int SYM_D_CROSS = SYM_D_OPTION + 1; private static final int SYM_D_RAMP = SYM_D_CROSS + 1; private static final int SYM_D_TAB = SYM_D_RAMP + 1; private static final int SYM_D_SHADOW_GAP = SYM_D_TAB + 1; private static final int SYM_D_BOX_GAP = SYM_D_SHADOW_GAP + 1; private static final int SYM_D_EXTENSION = SYM_D_BOX_GAP + 1; private static final int SYM_D_FOCUS = SYM_D_EXTENSION + 1; private static final int SYM_D_SLIDER = SYM_D_FOCUS + 1; private static final int SYM_D_ENTRY = SYM_D_SLIDER + 1; private static final int SYM_D_HANDLE = SYM_D_ENTRY + 1; private static final int SYM_D_LAYOUT = SYM_D_HANDLE + 1; private static final int SYM_D_BACKGROUND = SYM_D_LAYOUT + 1; private static final int SYM_D_STEPPER = SYM_D_BACKGROUND + 1; // end function symbols private static final int SYM_TRUE = SYM_D_STEPPER + 1; private static final int SYM_FALSE = SYM_TRUE + 1; private static final int SYM_TOP = SYM_FALSE + 1; private static final int SYM_UP = SYM_TOP + 1; private static final int SYM_BOTTOM = SYM_UP + 1; private static final int SYM_DOWN = SYM_BOTTOM + 1; private static final int SYM_LEFT = SYM_DOWN + 1; private static final int SYM_RIGHT = SYM_LEFT + 1; private static final int SYM_NORMAL = SYM_RIGHT + 1; private static final int SYM_ACTIVE = SYM_NORMAL + 1; private static final int SYM_PRELIGHT = SYM_ACTIVE + 1; private static final int SYM_SELECTED = SYM_PRELIGHT + 1; private static final int SYM_INSENSITIVE = SYM_SELECTED + 1; private static final int SYM_NONE = SYM_INSENSITIVE + 1; private static final int SYM_IN = SYM_NONE + 1; private static final int SYM_OUT = SYM_IN + 1; private static final int SYM_ETCHED_IN = SYM_OUT + 1; private static final int SYM_ETCHED_OUT = SYM_ETCHED_IN + 1; private static final int SYM_HORIZONTAL = SYM_ETCHED_OUT + 1; private static final int SYM_VERTICAL = SYM_HORIZONTAL + 1; private static final int[] symbolVals = { SYM_IMAGE, SYM_FUNCTION, SYM_FILE, SYM_STRETCH, SYM_RECOLORABLE, SYM_BORDER, SYM_DETAIL, SYM_STATE, SYM_SHADOW, SYM_GAP_SIDE, SYM_GAP_FILE, SYM_GAP_BORDER, SYM_GAP_START_FILE, SYM_GAP_START_BORDER, SYM_GAP_END_FILE, SYM_GAP_END_BORDER, SYM_OVERLAY_FILE, SYM_OVERLAY_BORDER, SYM_OVERLAY_STRETCH, SYM_ARROW_DIRECTION, SYM_ORIENTATION, SYM_PARENT_TYPE, SYM_COLORIZE_COLOR, SYM_ICON_COLORIZE, SYM_ICON_COLORIZE_ANCESTOR_TYPE, SYM_USE_AS_BKG_MASK, SYM_OVERLAY_RECOLORABLE, SYM_OVERLAY_COLORIZE_COLOR, SYM_D_HLINE, SYM_D_VLINE, SYM_D_SHADOW, SYM_D_POLYGON, SYM_D_ARROW, SYM_D_DIAMOND, SYM_D_OVAL, SYM_D_STRING, SYM_D_BOX, SYM_D_FLAT_BOX, SYM_D_CHECK, SYM_D_OPTION, SYM_D_CROSS, SYM_D_RAMP, SYM_D_TAB, SYM_D_SHADOW_GAP, SYM_D_BOX_GAP, SYM_D_EXTENSION, SYM_D_FOCUS, SYM_D_SLIDER, SYM_D_ENTRY, SYM_D_HANDLE, SYM_D_LAYOUT, SYM_D_BACKGROUND, SYM_D_STEPPER, SYM_TRUE, SYM_FALSE, SYM_TOP, SYM_UP, SYM_BOTTOM, SYM_DOWN, SYM_LEFT, SYM_RIGHT, SYM_NORMAL, SYM_ACTIVE, SYM_PRELIGHT, SYM_SELECTED, SYM_INSENSITIVE, SYM_NONE, SYM_IN, SYM_OUT, SYM_ETCHED_IN, SYM_ETCHED_OUT, SYM_HORIZONTAL, SYM_VERTICAL }; private static final String[] symbolNames = { "image", // SYM_IMAGE "function", // SYM_FUNCTION "file", // SYM_FILE "stretch", // SYM_STRETCH "recolorable", // SYM_RECOLORABLE "border", // SYM_BORDER "detail", // SYM_DETAIL "state", // SYM_STATE "shadow", // SYM_SHADOW "gap_side", // SYM_GAP_SIDE "gap_file", // SYM_GAP_FILE "gap_border", // SYM_GAP_BORDER "gap_start_file", // SYM_GAP_START_FILE "gap_start_border", // SYM_GAP_START_BORDER "gap_end_file", // SYM_GAP_END_FILE "gap_end_border", // SYM_GAP_END_BORDER "overlay_file", // SYM_OVERLAY_FILE "overlay_border", // SYM_OVERLAY_BORDER "overlay_stretch", // SYM_OVERLAY_STRETCH "arrow_direction", // SYM_ARROW_DIRECTION "orientation", // SYM_ORIENTATION "parent_type", // SYM_PARENT_TYPE "colorize_color", // SYM_COLORIZE_COLOR "icon_colorize", // SYM_ICON_COLORIZE "icon_colorize_ancestor_type", // SYM_ICON_COLORIZE_ANCESTOR_TYPE "use_as_bkg_mask", // SYM_USE_AS_BKG_MASK "overlay_recolorable", // SYM_OVERLAY_RECOLORABLE "overlay_colorize_color", // SYM_OVERLAY_COLORIZE_COLOR "HLINE", // SYM_D_HLINE "VLINE", // SYM_D_VLINE "SHADOW", // SYM_D_SHADOW "POLYGON", // SYM_D_POLYGON "ARROW", // SYM_D_ARROW "DIAMOND", // SYM_D_DIAMOND "OVAL", // SYM_D_OVAL "STRING", // SYM_D_STRING "BOX", // SYM_D_BOX "FLAT_BOX", // SYM_D_FLAT_BOX "CHECK", // SYM_D_CHECK "OPTION", // SYM_D_OPTION "CROSS", // SYM_D_CROSS "RAMP", // SYM_D_RAMP "TAB", // SYM_D_TAB "SHADOW_GAP", // SYM_D_SHADOW_GAP "BOX_GAP", // SYM_D_BOX_GAP "EXTENSION", // SYM_D_EXTENSION "FOCUS", // SYM_D_FOCUS "SLIDER", // SYM_D_SLIDER "ENTRY", // SYM_D_ENTRY "HANDLE", // SYM_D_HANDLE "LAYOUT", // SYM_D_LAYOUT "BACKGROUND", // SYM_D_BACKGROUND "STEPPER", // SYM_D_STEPPER "TRUE", // SYM_TRUE "FALSE", // SYM_FALSE "TOP", // SYM_TOP "UP", // SYM_UP "BOTTOM", // SYM_BOTTOM "DOWN", // SYM_DOWN "LEFT", // SYM_LEFT "RIGHT", // SYM_RIGHT "NORMAL", // SYM_NORMAL "ACTIVE", // SYM_ACTIVE "PRELIGHT", // SYM_PRELIGHT "SELECTED", // SYM_SELECTED "INSENSITIVE", // SYM_INSENSITIVE "NONE", // SYM_NONE "IN", // SYM_IN "OUT", // SYM_OUT "ETCHED_IN", // SYM_ETCHED_IN "ETCHED_OUT", // SYM_ETCHED_OUT "HORIZONTAL", // SYM_HORIZONTAL "VERTICAL" // SYM_VERTICAL }; private static class BlueprintEngineInfo extends GTKParser.EngineInfo { ArrayList pInfos = new ArrayList(); boolean iconColorize = false; ArrayList iconAncestorTypes = null; Color colorizeColor = null; GTKStyle constructGTKStyle(GTKStyle.GTKStateInfo[] infoArray, CircularIdentityList props, Font font, int xThickness, int yThickness, GTKStyle.GTKStockIconInfo[] stockArray) { BlueprintStyle.Info[] pInfoArray = null; if (pInfos.size() != 0) { pInfoArray = new BlueprintStyle.Info[pInfos.size()]; pInfoArray = (BlueprintStyle.Info[])pInfos.toArray(pInfoArray); } String[] ancestorArray = null; if (iconAncestorTypes != null && iconAncestorTypes.size() != 0) { ancestorArray = new String[iconAncestorTypes.size()]; ancestorArray = (String[])iconAncestorTypes.toArray(ancestorArray); } return new BlueprintStyle(infoArray, props, font, xThickness, yThickness, stockArray, pInfoArray, iconColorize, ancestorArray, colorizeColor); } } private GTKScanner scanner; private GTKParser parser; private BlueprintEngineInfo engineInfo; private void registerSymbolsIfNecessary() { if (scanner.containsSymbol(symbolNames[0])) { return; } for (int i = 0; i < symbolNames.length; i++) { scanner.addSymbol(symbolNames[i], symbolVals[i]); } } int parse(GTKScanner scanner, GTKParser parser, GTKParser.EngineInfo[] retVal) throws IOException { this.scanner = scanner; this.parser = parser; if (retVal[0] == null) { engineInfo = new BlueprintEngineInfo(); } else { engineInfo = (BlueprintEngineInfo)retVal[0]; } int oldScope = scanner.setScope(uniqueScopeID); registerSymbolsIfNecessary(); BlueprintStyle.Info info[] = new BlueprintStyle.Info[1]; int token; token = scanner.peekNextToken(); while (token != GTKScanner.TOKEN_RIGHT_CURLY) { info[0] = null; switch(token) { case SYM_IMAGE: token = parseImage(info); break; case SYM_COLORIZE_COLOR: Color[] col = new Color[1]; token = parseColorizeColor(col); if (token == GTKScanner.TOKEN_NONE) { engineInfo.colorizeColor = col[0]; } break; case SYM_ICON_COLORIZE: token = parseIconColorize(engineInfo); break; case SYM_ICON_COLORIZE_ANCESTOR_TYPE: // consume token scanner.getToken(); if (engineInfo.iconAncestorTypes == null) { engineInfo.iconAncestorTypes = new ArrayList(); } token = parseStringList(engineInfo.iconAncestorTypes); break; default: scanner.getToken(); token = GTKScanner.TOKEN_RIGHT_CURLY; break; } if (token != GTKScanner.TOKEN_NONE) { return token; } if (info[0] != null) { engineInfo.pInfos.add(info[0]); } token = scanner.peekNextToken(); } scanner.getToken(); retVal[0] = engineInfo; scanner.setScope(oldScope); return GTKScanner.TOKEN_NONE; } private int parseImage(BlueprintStyle.Info[] retVal) throws IOException { int token; token = scanner.getToken(); if (token != SYM_IMAGE) { return SYM_IMAGE; } token = scanner.getToken(); if (token != GTKScanner.TOKEN_LEFT_CURLY) { return GTKScanner.TOKEN_LEFT_CURLY; } BlueprintStyle.Info info = new BlueprintStyle.Info(); // to hold the return value from parseFile String[] fileName = new String[1]; // to hold the return value from parseStretch // and parseRecolorable boolean[] bool = new boolean[1]; // to hold the return value from parseBorder Insets[] insets = new Insets[1]; // to hold the return value from parseColorizeColor Color[] col = new Color[1]; token = scanner.peekNextToken(); while (token != GTKScanner.TOKEN_RIGHT_CURLY) { switch(token) { case SYM_FUNCTION: token = parseFunction(info); break; case SYM_RECOLORABLE: token = parseRecolorable(bool); if (token == GTKScanner.TOKEN_NONE) { info.recolorable = bool[0]; } break;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?