/*
* @(#)BluecurveEngineParser.java 1.5 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;
/**
* A parser for the "bluecurve" engine sections in GTK rc theme files.
*
* @author Shannon Hickey
* @version 1.5 12/19/03
*/
class BluecurveEngineParser extends GTKEngineParser {
private static final int SYM_CONTRAST = GTKScanner.TOKEN_LAST + 1;
private static final int SYM_WIDE = SYM_CONTRAST + 1;
private static final int SYM_TRUE = SYM_WIDE + 1;
private static final int SYM_FALSE = SYM_TRUE + 1;
private static final int[] symbolVals = {
SYM_CONTRAST, SYM_WIDE, SYM_TRUE, SYM_FALSE
};
private static final String[] symbolNames = {
"contrast", // SYM_CONTRAST
"wide", // SYM_WIDE
"TRUE", // SYM_TRUE
"FALSE" // SYM_FALSE
};
private static class BluecurveEngineInfo extends GTKParser.EngineInfo {
GTKStyle constructGTKStyle(GTKStyle.GTKStateInfo[] infoArray,
CircularIdentityList props,
Font font,
int xThickness,
int yThickness,
GTKStyle.GTKStockIconInfo[] stockArray) {
return new BluecurveStyle(infoArray,
props,
font,
xThickness,
yThickness,
stockArray);
}
}
private GTKScanner scanner;
private GTKParser parser;
private BluecurveEngineInfo 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 BluecurveEngineInfo();
} else {
engineInfo = (BluecurveEngineInfo)retVal[0];
}
int oldScope = scanner.setScope(uniqueScopeID);
registerSymbolsIfNecessary();
// At this time we don't know how bluecurve allows
// itself to be customized, so we'll just skip over
// the block.
int token;
int curlys = 1;
while (curlys > 0) {
token = scanner.getToken();
switch(token) {
case GTKScanner.TOKEN_EOF:
case GTKScanner.TOKEN_ERROR:
return GTKScanner.TOKEN_RIGHT_CURLY;
case GTKScanner.TOKEN_LEFT_CURLY:
curlys++;
break;
case GTKScanner.TOKEN_RIGHT_CURLY:
curlys--;
break;
default:
// ignore
}
}
retVal[0] = engineInfo;
scanner.setScope(oldScope);
return GTKScanner.TOKEN_NONE;
}
}
|