Source code: org/alicebot/server/core/parser/GenericReader.java
1 // Decompiled by Jad v1.5.8c. Copyright 2001 Pavel Kouznetsov.
2 // Jad home page: http://www.geocities.com/kpdus/jad.html
3 // Decompiler options: packimports(3)
4
5 package org.alicebot.server.core.parser;
6
7 import java.io.*;
8 import java.lang.reflect.Field;
9 import org.alicebot.server.core.logging.Log;
10 import org.alicebot.server.core.util.*;
11
12 // Referenced classes of package org.alicebot.server.core.parser:
13 // GenericReaderListener
14
15 public abstract class GenericReader
16 {
17 public class TransitionMade extends Throwable
18 {
19
20 public TransitionMade()
21 {
22 }
23 }
24
25
26 public GenericReader(String s, BufferedReader bufferedreader, String s1, boolean flag, GenericReaderListener genericreaderlistener)
27 {
28 done = false;
29 searching = false;
30 tagStart = 0;
31 tagLength = 0;
32 searchStart = 0;
33 lineNumber = 0;
34 buffer = new StringBuffer(bufferStartCapacity);
35 bufferString = null;
36 fileName = s;
37 buffReader = bufferedreader;
38 encoding = s1;
39 countBytes = flag;
40 listener = genericreaderlistener;
41 TRANSITION_MADE = new TransitionMade();
42 initialize();
43 }
44
45 public GenericReader(String s, BufferedReader bufferedreader, GenericReaderListener genericreaderlistener)
46 {
47 done = false;
48 searching = false;
49 tagStart = 0;
50 tagLength = 0;
51 searchStart = 0;
52 lineNumber = 0;
53 buffer = new StringBuffer(bufferStartCapacity);
54 bufferString = null;
55 fileName = s;
56 buffReader = bufferedreader;
57 countBytes = false;
58 listener = genericreaderlistener;
59 TRANSITION_MADE = new TransitionMade();
60 initialize();
61 }
62
63 protected abstract void initialize();
64
65 public void read()
66 {
67 Object obj = null;
68 while(!done)
69 {
70 searching = true;
71 while(searching)
72 {
73 bufferString = buffer.toString();
74 tagStart = bufferString.indexOf("<", searchStart);
75 if(tagStart < 0)
76 try
77 {
78 StringBuffer stringbuffer = new StringBuffer(buffReader.readLine());
79 if(countBytes)
80 try
81 {
82 byteCount += stringbuffer.toString().getBytes(encoding).length;
83 }
84 catch(UnsupportedEncodingException unsupportedencodingexception)
85 {
86 throw new UserError("Encoding \"" + encoding + "\" is not supported by your platform!");
87 }
88 lineNumber++;
89 buffer.append(stringbuffer.toString() + LINE_SEPARATOR);
90 }
91 catch(IOException ioexception)
92 {
93 Trace.userinfo("\"" + fileName + "\" could not be read.");
94 return;
95 }
96 catch(NullPointerException nullpointerexception)
97 {
98 searching = false;
99 }
100 else
101 searching = false;
102 }
103 if(tagStart < 0)
104 {
105 done = true;
106 continue;
107 }
108 try
109 {
110 tryStates();
111 }
112 catch(TransitionMade transitionmade)
113 {
114 continue;
115 }
116 searchStart = tagStart + 1;
117 }
118 }
119
120 protected abstract void tryStates()
121 throws TransitionMade;
122
123 protected boolean succeed(String s, int i)
124 {
125 tagLength = s.length();
126 if(bufferString.regionMatches(tagStart, s, 0, tagLength))
127 {
128 state = i;
129 searchStart = 0;
130 buffer.delete(0, tagStart + tagLength);
131 return true;
132 } else
133 {
134 return false;
135 }
136 }
137
138 protected void transition(String s, int i)
139 throws TransitionMade
140 {
141 if(succeed(s, i))
142 throw TRANSITION_MADE;
143 else
144 return;
145 }
146
147 protected void transition(String s, int i, Field field)
148 throws TransitionMade
149 {
150 if(succeed(s, i))
151 {
152 try
153 {
154 field.set(readerInstance, Toolkit.filterWhitespace(bufferString.substring(0, tagStart)));
155 }
156 catch(Exception exception)
157 {
158 throw new DeveloperError(exception);
159 }
160 throw TRANSITION_MADE;
161 } else
162 {
163 return;
164 }
165 }
166
167 protected void transition(String s, int i, Field field, String s1)
168 throws TransitionMade
169 {
170 if(succeed(s, i))
171 {
172 int j = bufferString.substring(tagStart).indexOf(">");
173 if(j == -1)
174 {
175 Log.userinfo(s + " is missing closing \"" + ">" + "\" at " + lineNumber + " in \"" + fileName + "\".", Log.ERROR);
176 Log.userinfo("Will not process this element.", Log.ERROR);
177 } else
178 {
179 String s2 = Toolkit.getAttributeValue(s1, bufferString.substring(tagStart, tagStart + j));
180 if(s2.length() > 0)
181 {
182 try
183 {
184 field.set(readerInstance, s2);
185 }
186 catch(Exception exception)
187 {
188 throw new DeveloperError(exception);
189 }
190 throw TRANSITION_MADE;
191 }
192 }
193 }
194 }
195
196 protected static final String MARKER_START = "<";
197 protected static final String MARKER_END = ">";
198 protected static final String COMMENT_MARK = "!--";
199 protected static final String EMPTY_STRING = "";
200 protected static final String SLASH = "/";
201 protected static final String QUOTE_MARK = "\"";
202 protected static final String ASTERISK = "*";
203 protected static final String COLON = ":";
204 protected static final String SPACE = " ";
205 protected static final String LINE_SEPARATOR = System.getProperty("line.separator");
206 protected static int bufferStartCapacity = 100;
207 protected GenericReader readerInstance;
208 protected GenericReaderListener listener;
209 protected BufferedReader buffReader;
210 protected String fileName;
211 protected boolean done;
212 protected boolean searching;
213 protected int state;
214 protected int tagStart;
215 protected int tagLength;
216 protected int searchStart;
217 protected int lineNumber;
218 protected StringBuffer buffer;
219 protected String bufferString;
220 protected TransitionMade TRANSITION_MADE;
221 private boolean countBytes;
222 protected long byteCount;
223 protected String encoding;
224
225 }