1
2 package org.exolab.castor.xml.dtd.parser;
3
4 import java.util.Hashtable;
5
6 import org.exolab.castor.xml.dtd.DTDException;
7
8
9
10
11
12
13
14
15 public class DTDInitialParser implements DTDInitialParserConstants {
16
17
18
19
20
21
22 final public String Input() throws ParseException, DTDException {
23 Hashtable parameterEntities = new Hashtable();
24 String result = "";
25 Token token;
26 String peReference;
27 String key;
28 String value;
29 label_1: while (true) {
30 switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
31 case TEXT_UNIT:
32 case BEGIN_PE_DECL:
33 case PE_REFERENCE_D:
34 break;
35 default:
36 jj_la1[0] = jj_gen;
37 break label_1;
38 }
39 switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
40 case TEXT_UNIT:
41 token = jj_consume_token(TEXT_UNIT);
42 result += token.image;
43 break;
44 case PE_REFERENCE_D:
45 token = jj_consume_token(PE_REFERENCE_D);
46 peReference = token.image;
47 key = peReference.substring(1, peReference.length() - 1);
48 value = (String) parameterEntities.get(key);
49 if (value == null) {
50 String err = "Initial Parser: parameter entity named \"" + key;
51 err += "\" has not been defined, while is tried to be referenced...";
52 {
53 if (true)
54 throw new DTDException(err);
55 }
56 } else {
57 result += value;
58 }
59 break;
60 case BEGIN_PE_DECL:
61 PEdecl(parameterEntities);
62 break;
63 default:
64 jj_la1[1] = jj_gen;
65 jj_consume_token(-1);
66 throw new ParseException();
67 }
68 }
69 jj_consume_token(0);
70 {
71 if (true)
72 return result;
73 }
74 throw new Error("Missing return statement in function");
75 }
76
77
78
79
80 final public void PEdecl(Hashtable parameterEntities) throws ParseException, DTDException {
81 Token token;
82 String name;
83 String replacementText;
84 jj_consume_token(BEGIN_PE_DECL);
85 token = jj_consume_token(NAME_OF_PE);
86 name = token.image;
87 if (parameterEntities.containsKey(name)) {
88 String err = "Initial Parser: parameter entity named \"" + name;
89 err += "\" has been already defined, while is tried ";
90 err += "to be defined again...";
91 {
92 if (true)
93 throw new DTDException(err);
94 }
95 }
96 jj_consume_token(SPACE);
97 replacementText = EntityValue(parameterEntities);
98 parameterEntities.put(name, replacementText);
99 switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
100 case SPACE:
101 jj_consume_token(SPACE);
102 break;
103 default:
104 jj_la1[2] = jj_gen;
105 }
106 jj_consume_token(END_PE_DECL);
107 }
108
109
110
111
112 final public String EntityValue(Hashtable parameterEntities) throws ParseException, DTDException {
113 Token token;
114 String peReference;
115 String key;
116 String value;
117 String replacementText = "";
118 switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
119 case START_DQ:
120 jj_consume_token(START_DQ);
121 label_2: while (true) {
122 switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
123 case ENTITY_VALUE_TEXT_DQ:
124 case PE_REFERENCE_DQ:
125 break;
126 default:
127 jj_la1[3] = jj_gen;
128 break label_2;
129 }
130 switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
131 case ENTITY_VALUE_TEXT_DQ:
132 token = jj_consume_token(ENTITY_VALUE_TEXT_DQ);
133 replacementText += token.image;
134 break;
135 case PE_REFERENCE_DQ:
136 token = jj_consume_token(PE_REFERENCE_DQ);
137 peReference = token.image;
138 key = peReference.substring(1, peReference.length() - 1);
139 value = (String) parameterEntities.get(key);
140 if (value == null) {
141 String err = "Initial Parser: parameter entity named \"" + key;
142 err += "\" has not been defined, while is tried to be referenced...";
143 {
144 if (true)
145 throw new DTDException(err);
146 }
147 } else {
148 replacementText += value;
149 }
150 break;
151 default:
152 jj_la1[4] = jj_gen;
153 jj_consume_token(-1);
154 throw new ParseException();
155 }
156 }
157 jj_consume_token(END_DQ);
158 break;
159 case START_SQ:
160 jj_consume_token(START_SQ);
161 label_3: while (true) {
162 switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
163 case ENTITY_VALUE_TEXT_SQ:
164 case PE_REFERENCE_SQ:
165 break;
166 default:
167 jj_la1[5] = jj_gen;
168 break label_3;
169 }
170 switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
171 case ENTITY_VALUE_TEXT_SQ:
172 token = jj_consume_token(ENTITY_VALUE_TEXT_SQ);
173 replacementText += token.image;
174 break;
175 case PE_REFERENCE_SQ:
176 token = jj_consume_token(PE_REFERENCE_SQ);
177 peReference = token.image;
178 key = peReference.substring(1, peReference.length() - 1);
179 value = (String) parameterEntities.get(key);
180 if (value == null) {
181 String err = "Initial Parser: parameter entity named \"" + key;
182 err += "\" has not been defined, while is tried to be referenced...";
183 {
184 if (true)
185 throw new DTDException(err);
186 }
187 } else {
188 replacementText += value;
189 }
190 break;
191 default:
192 jj_la1[6] = jj_gen;
193 jj_consume_token(-1);
194 throw new ParseException();
195 }
196 }
197 jj_consume_token(END_SQ);
198 break;
199 default:
200 jj_la1[7] = jj_gen;
201 jj_consume_token(-1);
202 throw new ParseException();
203 }
204 {
205 if (true)
206 return replacementText;
207 }
208 throw new Error("Missing return statement in function");
209 }
210
211 public DTDInitialParserTokenManager token_source;
212 public Token token, jj_nt;
213 private int jj_ntk;
214 private int jj_gen;
215 final private int[] jj_la1 = new int[8];
216 final private int[] jj_la1_0 =
217 {0x700, 0x700, 0x1000, 0x30000, 0x30000, 0x180000, 0x180000, 0x6000,};
218
219 public DTDInitialParser(CharStream stream) {
220 token_source = new DTDInitialParserTokenManager(stream);
221 token = new Token();
222 jj_ntk = -1;
223 jj_gen = 0;
224 for (int i = 0; i < 8; i++)
225 jj_la1[i] = -1;
226 }
227
228 public void ReInit(CharStream stream) {
229 token_source.ReInit(stream);
230 token = new Token();
231 jj_ntk = -1;
232 jj_gen = 0;
233 for (int i = 0; i < 8; i++)
234 jj_la1[i] = -1;
235 }
236
237 public DTDInitialParser(DTDInitialParserTokenManager tm) {
238 token_source = tm;
239 token = new Token();
240 jj_ntk = -1;
241 jj_gen = 0;
242 for (int i = 0; i < 8; i++)
243 jj_la1[i] = -1;
244 }
245
246 public void ReInit(DTDInitialParserTokenManager tm) {
247 token_source = tm;
248 token = new Token();
249 jj_ntk = -1;
250 jj_gen = 0;
251 for (int i = 0; i < 8; i++)
252 jj_la1[i] = -1;
253 }
254
255 final private Token jj_consume_token(int kind) throws ParseException {
256 Token oldToken;
257 if ((oldToken = token).next != null)
258 token = token.next;
259 else
260 token = token.next = token_source.getNextToken();
261 jj_ntk = -1;
262 if (token.kind == kind) {
263 jj_gen++;
264 return token;
265 }
266 token = oldToken;
267 jj_kind = kind;
268 throw generateParseException();
269 }
270
271 final public Token getNextToken() {
272 if (token.next != null)
273 token = token.next;
274 else
275 token = token.next = token_source.getNextToken();
276 jj_ntk = -1;
277 jj_gen++;
278 return token;
279 }
280
281 final public Token getToken(int index) {
282 Token t = token;
283 for (int i = 0; i < index; i++) {
284 if (t.next != null)
285 t = t.next;
286 else
287 t = t.next = token_source.getNextToken();
288 }
289 return t;
290 }
291
292 final private int jj_ntk() {
293 if ((jj_nt = token.next) == null) {
294 return (jj_ntk = (token.next = token_source.getNextToken()).kind);
295 }
296 return (jj_ntk = jj_nt.kind);
297 }
298
299 private java.util.Vector jj_expentries = new java.util.Vector();
300 private int[] jj_expentry;
301 private int jj_kind = -1;
302
303 final public ParseException generateParseException() {
304 jj_expentries.removeAllElements();
305 boolean[] la1tokens = new boolean[22];
306 for (int i = 0; i < 22; i++) {
307 la1tokens[i] = false;
308 }
309 if (jj_kind >= 0) {
310 la1tokens[jj_kind] = true;
311 jj_kind = -1;
312 }
313 for (int i = 0; i < 8; i++) {
314 if (jj_la1[i] == jj_gen) {
315 for (int j = 0; j < 32; j++) {
316 if ((jj_la1_0[i] & (1 << j)) != 0) {
317 la1tokens[j] = true;
318 }
319 }
320 }
321 }
322 for (int i = 0; i < 22; i++) {
323 if (la1tokens[i]) {
324 jj_expentry = new int[1];
325 jj_expentry[0] = i;
326 jj_expentries.addElement(jj_expentry);
327 }
328 }
329 int[][] exptokseq = new int[jj_expentries.size()][];
330 for (int i = 0; i < jj_expentries.size(); i++) {
331 exptokseq[i] = (int[]) jj_expentries.elementAt(i);
332 }
333 return new ParseException(token, exptokseq, tokenImage);
334 }
335
336 final public void enable_tracing() {}
337
338 final public void disable_tracing() {}
339
340 }