1. /*
  2. * @(#)PropertyParser.java 1.10 04/06/24
  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.util.HashMap;
  9. import java.awt.Color;
  10. import java.awt.Insets;
  11. import java.io.*;
  12. /**
  13. * @author Shannon Hickey
  14. * @version 1.10 06/24/04
  15. */
  16. abstract class PropertyParser {
  17. private static final PropertyParser INSETS_PARSER = new PropertyParser() {
  18. public Object parse(String source) {
  19. GTKScanner scanner = new GTKScanner();
  20. scanner.scanReader(new StringReader(source), source);
  21. try {
  22. int left;
  23. int right;
  24. int top;
  25. int bottom;
  26. if (scanner.getToken() != GTKScanner.TOKEN_LEFT_CURLY) {
  27. return null;
  28. }
  29. if (scanner.getToken() != GTKScanner.TOKEN_INT) {
  30. return null;
  31. }
  32. left = (int)scanner.currValue.longVal;
  33. if (scanner.getToken() != GTKScanner.TOKEN_COMMA) {
  34. return null;
  35. }
  36. if (scanner.getToken() != GTKScanner.TOKEN_INT) {
  37. return null;
  38. }
  39. right = (int)scanner.currValue.longVal;
  40. if (scanner.getToken() != GTKScanner.TOKEN_COMMA) {
  41. return null;
  42. }
  43. if (scanner.getToken() != GTKScanner.TOKEN_INT) {
  44. return null;
  45. }
  46. top = (int)scanner.currValue.longVal;
  47. if (scanner.getToken() != GTKScanner.TOKEN_COMMA) {
  48. return null;
  49. }
  50. if (scanner.getToken() != GTKScanner.TOKEN_INT) {
  51. return null;
  52. }
  53. bottom = (int)scanner.currValue.longVal;
  54. if (scanner.getToken() != GTKScanner.TOKEN_RIGHT_CURLY) {
  55. return null;
  56. }
  57. return new Insets(top, left, bottom, right);
  58. } catch (IOException ioe) {
  59. } finally {
  60. scanner.clearScanner();
  61. }
  62. return null;
  63. }
  64. };
  65. private static final PropertyParser BOOLEAN_PARSER = new PropertyParser() {
  66. public Object parse(String source) {
  67. source = source.trim();
  68. if (source.equals("TRUE")) {
  69. return Boolean.TRUE;
  70. } else if (source.equals("FALSE")) {
  71. return Boolean.FALSE;
  72. }
  73. return null;
  74. }
  75. };
  76. private static final PropertyParser SHADOW_PARSER = new PropertyParser() {
  77. public Object parse(String source) {
  78. source = source.trim();
  79. if (source.equals("SHADOW_IN")) {
  80. return new Integer(GTKConstants.SHADOW_IN);
  81. } else if (source.equals("SHADOW_OUT")) {
  82. return new Integer(GTKConstants.SHADOW_OUT);
  83. } else if (source.equals("SHADOW_ETCHED_IN")) {
  84. return new Integer(GTKConstants.SHADOW_ETCHED_IN);
  85. } else if (source.equals("SHADOW_ETCHED_OUT")) {
  86. return new Integer(GTKConstants.SHADOW_ETCHED_OUT);
  87. } else if (source.equals("SHADOW_NONE")) {
  88. return new Integer(GTKConstants.SHADOW_NONE);
  89. }
  90. return null;
  91. }
  92. };
  93. private static final PropertyParser FOCUS_LINE_PARSER = new PropertyParser() {
  94. public Object parse(String source) {
  95. int len = source.length();
  96. int[] retVal = new int[len];
  97. for (int i = 0; i < len; i++) {
  98. retVal[i] = (int)source.charAt(i);
  99. }
  100. return retVal;
  101. }
  102. };
  103. private static final PropertyParser COLOR_PARSER = new PropertyParser() {
  104. public Object parse(String source) {
  105. GTKScanner scanner = new GTKScanner();
  106. scanner.scanReader(new StringReader(source), source);
  107. try {
  108. Color[] ret = new Color[1];
  109. int token = GTKParser.parseColor(scanner, ret, 0);
  110. if (token == GTKScanner.TOKEN_NONE) {
  111. return ret[0];
  112. }
  113. } catch (IOException ioe) {
  114. } finally {
  115. scanner.clearScanner();
  116. }
  117. return null;
  118. }
  119. };
  120. private static final HashMap PARSERS = new HashMap();
  121. static {
  122. PARSERS.put("default-border", INSETS_PARSER);
  123. PARSERS.put("interior-focus", BOOLEAN_PARSER);
  124. PARSERS.put("shadow-type", SHADOW_PARSER);
  125. PARSERS.put("focus-line-pattern", FOCUS_LINE_PARSER);
  126. PARSERS.put("cursor-color", COLOR_PARSER);
  127. }
  128. public static PropertyParser getParserFor(String type) {
  129. return (PropertyParser)PARSERS.get(type);
  130. }
  131. public abstract Object parse(String source);
  132. }