1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.qedeq.kernel.bo.parser;
17
18 import java.util.ArrayList;
19 import java.util.List;
20
21 import org.qedeq.base.trace.Trace;
22
23
24
25
26
27
28
29
30
31
32
33
34 public final class AsciiMathParser extends MathParser {
35
36
37 private static final Class CLASS = AsciiMathParser.class;
38
39
40 private static final String SEPARATORS = "()[],{}";
41
42
43
44
45 public AsciiMathParser() {
46 super();
47 }
48
49 protected final String readToken() {
50 final String method = "readToken()";
51 int lines = 0;
52 while (getChar() != -1 && Character.isWhitespace((char) getChar())) {
53 if ('\n' == (char) getChar()) {
54 lines++;
55 }
56 readChar();
57 }
58 if (lines > 1) {
59 return "";
60 }
61 if (eof()) {
62 return null;
63 }
64 if (SEPARATORS.indexOf(getChar()) >= 0) {
65 Trace.param(CLASS, this, method, "Read token", "" + (char) getChar());
66 return "" + (char) readChar();
67 }
68 final StringBuffer token = new StringBuffer();
69 String operator = null;
70 markPosition();
71 while (!eof() && !Character.isWhitespace((char) getChar())
72 && SEPARATORS.indexOf(getChar()) < 0) {
73 token.append((char) readChar());
74 if (null != getOperator(token.toString())) {
75 operator = token.toString();
76 clearMark();
77 markPosition();
78 }
79 }
80 if (operator != null) {
81 rewindPosition();
82 token.setLength(0);
83 token.append(operator);
84 } else {
85 clearMark();
86 }
87 Trace.param(CLASS, this, method, "Read token", token);
88 return token.toString();
89 }
90
91 protected final Operator getOperator(final String token) {
92 Operator result = null;
93 if (token == null) {
94 return result;
95 }
96 for (int i = 0; i < getOperators().size(); i++) {
97 if (token.equals(((Operator) getOperators().get(i)).getStartSymbol())) {
98 result = (Operator) getOperators().get(i);
99 break;
100 }
101 }
102 return result;
103 }
104
105 protected final List getOperators(final String token) {
106 final List result = new ArrayList();
107 if (token == null) {
108 return result;
109 }
110 for (int i = 0; i < getOperators().size(); i++) {
111 if (token.equals(((Operator) getOperators().get(i)).getStartSymbol())) {
112 result.add(getOperators().get(i));
113 }
114 }
115 return result;
116 }
117
118 protected boolean eot(final String token) {
119 return token == null || token.trim().length() == 0;
120 }
121
122 }