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