1. /*
  2. * @(#)BluecurveEngineParser.java 1.5 03/12/19
  3. *
  4. * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
  5. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  6. */
  7. package com.sun.java.swing.plaf.gtk;
  8. import java.io.IOException;
  9. import java.util.ArrayList;
  10. import java.awt.Font;
  11. import java.awt.Insets;
  12. /**
  13. * A parser for the "bluecurve" engine sections in GTK rc theme files.
  14. *
  15. * @author Shannon Hickey
  16. * @version 1.5 12/19/03
  17. */
  18. class BluecurveEngineParser extends GTKEngineParser {
  19. private static final int SYM_CONTRAST = GTKScanner.TOKEN_LAST + 1;
  20. private static final int SYM_WIDE = SYM_CONTRAST + 1;
  21. private static final int SYM_TRUE = SYM_WIDE + 1;
  22. private static final int SYM_FALSE = SYM_TRUE + 1;
  23. private static final int[] symbolVals = {
  24. SYM_CONTRAST, SYM_WIDE, SYM_TRUE, SYM_FALSE
  25. };
  26. private static final String[] symbolNames = {
  27. "contrast", // SYM_CONTRAST
  28. "wide", // SYM_WIDE
  29. "TRUE", // SYM_TRUE
  30. "FALSE" // SYM_FALSE
  31. };
  32. private static class BluecurveEngineInfo extends GTKParser.EngineInfo {
  33. GTKStyle constructGTKStyle(GTKStyle.GTKStateInfo[] infoArray,
  34. CircularIdentityList props,
  35. Font font,
  36. int xThickness,
  37. int yThickness,
  38. GTKStyle.GTKStockIconInfo[] stockArray) {
  39. return new BluecurveStyle(infoArray,
  40. props,
  41. font,
  42. xThickness,
  43. yThickness,
  44. stockArray);
  45. }
  46. }
  47. private GTKScanner scanner;
  48. private GTKParser parser;
  49. private BluecurveEngineInfo engineInfo;
  50. private void registerSymbolsIfNecessary() {
  51. if (scanner.containsSymbol(symbolNames[0])) {
  52. return;
  53. }
  54. for (int i = 0; i < symbolNames.length; i++) {
  55. scanner.addSymbol(symbolNames[i], symbolVals[i]);
  56. }
  57. }
  58. int parse(GTKScanner scanner,
  59. GTKParser parser,
  60. GTKParser.EngineInfo[] retVal) throws IOException {
  61. this.scanner = scanner;
  62. this.parser = parser;
  63. if (retVal[0] == null) {
  64. engineInfo = new BluecurveEngineInfo();
  65. } else {
  66. engineInfo = (BluecurveEngineInfo)retVal[0];
  67. }
  68. int oldScope = scanner.setScope(uniqueScopeID);
  69. registerSymbolsIfNecessary();
  70. // At this time we don't know how bluecurve allows
  71. // itself to be customized, so we'll just skip over
  72. // the block.
  73. int token;
  74. int curlys = 1;
  75. while (curlys > 0) {
  76. token = scanner.getToken();
  77. switch(token) {
  78. case GTKScanner.TOKEN_EOF:
  79. case GTKScanner.TOKEN_ERROR:
  80. return GTKScanner.TOKEN_RIGHT_CURLY;
  81. case GTKScanner.TOKEN_LEFT_CURLY:
  82. curlys++;
  83. break;
  84. case GTKScanner.TOKEN_RIGHT_CURLY:
  85. curlys--;
  86. break;
  87. default:
  88. // ignore
  89. }
  90. }
  91. retVal[0] = engineInfo;
  92. scanner.setScope(oldScope);
  93. return GTKScanner.TOKEN_NONE;
  94. }
  95. }