]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/parser/SimpleCharStream.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.spreadsheet.graph / src / org / simantics / spreadsheet / graph / parser / SimpleCharStream.java
1 /* Generated By:JavaCC: Do not edit this line. SimpleCharStream.java Version 5.0 */\r
2 /* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */\r
3 package org.simantics.spreadsheet.graph.parser;\r
4 \r
5 /**\r
6  * An implementation of interface CharStream, where the stream is assumed to\r
7  * contain only ASCII characters (without unicode processing).\r
8  */\r
9 \r
10 public class SimpleCharStream\r
11 {\r
12 /** Whether parser is static. */\r
13   public static final boolean staticFlag = false;\r
14   int bufsize;\r
15   int available;\r
16   int tokenBegin;\r
17 /** Position in buffer. */\r
18   public int bufpos = -1;\r
19   protected int bufline[];\r
20   protected int bufcolumn[];\r
21 \r
22   protected int column = 0;\r
23   protected int line = 1;\r
24 \r
25   protected boolean prevCharIsCR = false;\r
26   protected boolean prevCharIsLF = false;\r
27 \r
28   protected java.io.Reader inputStream;\r
29 \r
30   protected char[] buffer;\r
31   protected int maxNextCharInd = 0;\r
32   protected int inBuf = 0;\r
33   protected int tabSize = 8;\r
34 \r
35   protected void setTabSize(int i) { tabSize = i; }\r
36   protected int getTabSize(int i) { return tabSize; }\r
37 \r
38 \r
39   protected void ExpandBuff(boolean wrapAround)\r
40   {\r
41     char[] newbuffer = new char[bufsize + 2048];\r
42     int newbufline[] = new int[bufsize + 2048];\r
43     int newbufcolumn[] = new int[bufsize + 2048];\r
44 \r
45     try\r
46     {\r
47       if (wrapAround)\r
48       {\r
49         System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);\r
50         System.arraycopy(buffer, 0, newbuffer, bufsize - tokenBegin, bufpos);\r
51         buffer = newbuffer;\r
52 \r
53         System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);\r
54         System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);\r
55         bufline = newbufline;\r
56 \r
57         System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);\r
58         System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);\r
59         bufcolumn = newbufcolumn;\r
60 \r
61         maxNextCharInd = (bufpos += (bufsize - tokenBegin));\r
62       }\r
63       else\r
64       {\r
65         System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);\r
66         buffer = newbuffer;\r
67 \r
68         System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);\r
69         bufline = newbufline;\r
70 \r
71         System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);\r
72         bufcolumn = newbufcolumn;\r
73 \r
74         maxNextCharInd = (bufpos -= tokenBegin);\r
75       }\r
76     }\r
77     catch (Throwable t)\r
78     {\r
79       throw new Error(t.getMessage());\r
80     }\r
81 \r
82 \r
83     bufsize += 2048;\r
84     available = bufsize;\r
85     tokenBegin = 0;\r
86   }\r
87 \r
88   protected void FillBuff() throws java.io.IOException\r
89   {\r
90     if (maxNextCharInd == available)\r
91     {\r
92       if (available == bufsize)\r
93       {\r
94         if (tokenBegin > 2048)\r
95         {\r
96           bufpos = maxNextCharInd = 0;\r
97           available = tokenBegin;\r
98         }\r
99         else if (tokenBegin < 0)\r
100           bufpos = maxNextCharInd = 0;\r
101         else\r
102           ExpandBuff(false);\r
103       }\r
104       else if (available > tokenBegin)\r
105         available = bufsize;\r
106       else if ((tokenBegin - available) < 2048)\r
107         ExpandBuff(true);\r
108       else\r
109         available = tokenBegin;\r
110     }\r
111 \r
112     int i;\r
113     try {\r
114       if ((i = inputStream.read(buffer, maxNextCharInd, available - maxNextCharInd)) == -1)\r
115       {\r
116         inputStream.close();\r
117         throw new java.io.IOException();\r
118       }\r
119       else\r
120         maxNextCharInd += i;\r
121       return;\r
122     }\r
123     catch(java.io.IOException e) {\r
124       --bufpos;\r
125       backup(0);\r
126       if (tokenBegin == -1)\r
127         tokenBegin = bufpos;\r
128       throw e;\r
129     }\r
130   }\r
131 \r
132 /** Start. */\r
133   public char BeginToken() throws java.io.IOException\r
134   {\r
135     tokenBegin = -1;\r
136     char c = readChar();\r
137     tokenBegin = bufpos;\r
138 \r
139     return c;\r
140   }\r
141 \r
142   protected void UpdateLineColumn(char c)\r
143   {\r
144     column++;\r
145 \r
146     if (prevCharIsLF)\r
147     {\r
148       prevCharIsLF = false;\r
149       line += (column = 1);\r
150     }\r
151     else if (prevCharIsCR)\r
152     {\r
153       prevCharIsCR = false;\r
154       if (c == '\n')\r
155       {\r
156         prevCharIsLF = true;\r
157       }\r
158       else\r
159         line += (column = 1);\r
160     }\r
161 \r
162     switch (c)\r
163     {\r
164       case '\r' :\r
165         prevCharIsCR = true;\r
166         break;\r
167       case '\n' :\r
168         prevCharIsLF = true;\r
169         break;\r
170       case '\t' :\r
171         column--;\r
172         column += (tabSize - (column % tabSize));\r
173         break;\r
174       default :\r
175         break;\r
176     }\r
177 \r
178     bufline[bufpos] = line;\r
179     bufcolumn[bufpos] = column;\r
180   }\r
181 \r
182 /** Read a character. */\r
183   public char readChar() throws java.io.IOException\r
184   {\r
185     if (inBuf > 0)\r
186     {\r
187       --inBuf;\r
188 \r
189       if (++bufpos == bufsize)\r
190         bufpos = 0;\r
191 \r
192       return buffer[bufpos];\r
193     }\r
194 \r
195     if (++bufpos >= maxNextCharInd)\r
196       FillBuff();\r
197 \r
198     char c = buffer[bufpos];\r
199 \r
200     UpdateLineColumn(c);\r
201     return c;\r
202   }\r
203 \r
204   @Deprecated\r
205   /**\r
206    * @deprecated\r
207    * @see #getEndColumn\r
208    */\r
209 \r
210   public int getColumn() {\r
211     return bufcolumn[bufpos];\r
212   }\r
213 \r
214   @Deprecated\r
215   /**\r
216    * @deprecated\r
217    * @see #getEndLine\r
218    */\r
219 \r
220   public int getLine() {\r
221     return bufline[bufpos];\r
222   }\r
223 \r
224   /** Get token end column number. */\r
225   public int getEndColumn() {\r
226     return bufcolumn[bufpos];\r
227   }\r
228 \r
229   /** Get token end line number. */\r
230   public int getEndLine() {\r
231      return bufline[bufpos];\r
232   }\r
233 \r
234   /** Get token beginning column number. */\r
235   public int getBeginColumn() {\r
236     return bufcolumn[tokenBegin];\r
237   }\r
238 \r
239   /** Get token beginning line number. */\r
240   public int getBeginLine() {\r
241     return bufline[tokenBegin];\r
242   }\r
243 \r
244 /** Backup a number of characters. */\r
245   public void backup(int amount) {\r
246 \r
247     inBuf += amount;\r
248     if ((bufpos -= amount) < 0)\r
249       bufpos += bufsize;\r
250   }\r
251 \r
252   /** Constructor. */\r
253   public SimpleCharStream(java.io.Reader dstream, int startline,\r
254   int startcolumn, int buffersize)\r
255   {\r
256     inputStream = dstream;\r
257     line = startline;\r
258     column = startcolumn - 1;\r
259 \r
260     available = bufsize = buffersize;\r
261     buffer = new char[buffersize];\r
262     bufline = new int[buffersize];\r
263     bufcolumn = new int[buffersize];\r
264   }\r
265 \r
266   /** Constructor. */\r
267   public SimpleCharStream(java.io.Reader dstream, int startline,\r
268                           int startcolumn)\r
269   {\r
270     this(dstream, startline, startcolumn, 4096);\r
271   }\r
272 \r
273   /** Constructor. */\r
274   public SimpleCharStream(java.io.Reader dstream)\r
275   {\r
276     this(dstream, 1, 1, 4096);\r
277   }\r
278 \r
279   /** Reinitialise. */\r
280   public void ReInit(java.io.Reader dstream, int startline,\r
281   int startcolumn, int buffersize)\r
282   {\r
283     inputStream = dstream;\r
284     line = startline;\r
285     column = startcolumn - 1;\r
286 \r
287     if (buffer == null || buffersize != buffer.length)\r
288     {\r
289       available = bufsize = buffersize;\r
290       buffer = new char[buffersize];\r
291       bufline = new int[buffersize];\r
292       bufcolumn = new int[buffersize];\r
293     }\r
294     prevCharIsLF = prevCharIsCR = false;\r
295     tokenBegin = inBuf = maxNextCharInd = 0;\r
296     bufpos = -1;\r
297   }\r
298 \r
299   /** Reinitialise. */\r
300   public void ReInit(java.io.Reader dstream, int startline,\r
301                      int startcolumn)\r
302   {\r
303     ReInit(dstream, startline, startcolumn, 4096);\r
304   }\r
305 \r
306   /** Reinitialise. */\r
307   public void ReInit(java.io.Reader dstream)\r
308   {\r
309     ReInit(dstream, 1, 1, 4096);\r
310   }\r
311   /** Constructor. */\r
312   public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,\r
313   int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException\r
314   {\r
315     this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);\r
316   }\r
317 \r
318   /** Constructor. */\r
319   public SimpleCharStream(java.io.InputStream dstream, int startline,\r
320   int startcolumn, int buffersize)\r
321   {\r
322     this(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);\r
323   }\r
324 \r
325   /** Constructor. */\r
326   public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,\r
327                           int startcolumn) throws java.io.UnsupportedEncodingException\r
328   {\r
329     this(dstream, encoding, startline, startcolumn, 4096);\r
330   }\r
331 \r
332   /** Constructor. */\r
333   public SimpleCharStream(java.io.InputStream dstream, int startline,\r
334                           int startcolumn)\r
335   {\r
336     this(dstream, startline, startcolumn, 4096);\r
337   }\r
338 \r
339   /** Constructor. */\r
340   public SimpleCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException\r
341   {\r
342     this(dstream, encoding, 1, 1, 4096);\r
343   }\r
344 \r
345   /** Constructor. */\r
346   public SimpleCharStream(java.io.InputStream dstream)\r
347   {\r
348     this(dstream, 1, 1, 4096);\r
349   }\r
350 \r
351   /** Reinitialise. */\r
352   public void ReInit(java.io.InputStream dstream, String encoding, int startline,\r
353                           int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException\r
354   {\r
355     ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);\r
356   }\r
357 \r
358   /** Reinitialise. */\r
359   public void ReInit(java.io.InputStream dstream, int startline,\r
360                           int startcolumn, int buffersize)\r
361   {\r
362     ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);\r
363   }\r
364 \r
365   /** Reinitialise. */\r
366   public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException\r
367   {\r
368     ReInit(dstream, encoding, 1, 1, 4096);\r
369   }\r
370 \r
371   /** Reinitialise. */\r
372   public void ReInit(java.io.InputStream dstream)\r
373   {\r
374     ReInit(dstream, 1, 1, 4096);\r
375   }\r
376   /** Reinitialise. */\r
377   public void ReInit(java.io.InputStream dstream, String encoding, int startline,\r
378                      int startcolumn) throws java.io.UnsupportedEncodingException\r
379   {\r
380     ReInit(dstream, encoding, startline, startcolumn, 4096);\r
381   }\r
382   /** Reinitialise. */\r
383   public void ReInit(java.io.InputStream dstream, int startline,\r
384                      int startcolumn)\r
385   {\r
386     ReInit(dstream, startline, startcolumn, 4096);\r
387   }\r
388   /** Get token literal value. */\r
389   public String GetImage()\r
390   {\r
391     if (bufpos >= tokenBegin)\r
392       return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);\r
393     else\r
394       return new String(buffer, tokenBegin, bufsize - tokenBegin) +\r
395                             new String(buffer, 0, bufpos + 1);\r
396   }\r
397 \r
398   /** Get the suffix. */\r
399   public char[] GetSuffix(int len)\r
400   {\r
401     char[] ret = new char[len];\r
402 \r
403     if ((bufpos + 1) >= len)\r
404       System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);\r
405     else\r
406     {\r
407       System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,\r
408                                                         len - bufpos - 1);\r
409       System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);\r
410     }\r
411 \r
412     return ret;\r
413   }\r
414 \r
415   /** Reset buffer when finished. */\r
416   public void Done()\r
417   {\r
418     buffer = null;\r
419     bufline = null;\r
420     bufcolumn = null;\r
421   }\r
422 \r
423   /**\r
424    * Method to adjust line and column numbers for the start of a token.\r
425    */\r
426   public void adjustBeginLineColumn(int newLine, int newCol)\r
427   {\r
428     int start = tokenBegin;\r
429     int len;\r
430 \r
431     if (bufpos >= tokenBegin)\r
432     {\r
433       len = bufpos - tokenBegin + inBuf + 1;\r
434     }\r
435     else\r
436     {\r
437       len = bufsize - tokenBegin + bufpos + 1 + inBuf;\r
438     }\r
439 \r
440     int i = 0, j = 0, k = 0;\r
441     int nextColDiff = 0, columnDiff = 0;\r
442 \r
443     while (i < len && bufline[j = start % bufsize] == bufline[k = ++start % bufsize])\r
444     {\r
445       bufline[j] = newLine;\r
446       nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];\r
447       bufcolumn[j] = newCol + columnDiff;\r
448       columnDiff = nextColDiff;\r
449       i++;\r
450     }\r
451 \r
452     if (i < len)\r
453     {\r
454       bufline[j] = newLine++;\r
455       bufcolumn[j] = newCol + columnDiff;\r
456 \r
457       while (i++ < len)\r
458       {\r
459         if (bufline[j = start % bufsize] != bufline[++start % bufsize])\r
460           bufline[j] = newLine++;\r
461         else\r
462           bufline[j] = newLine;\r
463       }\r
464     }\r
465 \r
466     line = bufline[j];\r
467     column = bufcolumn[j];\r
468   }\r
469 \r
470 }\r
471 /* JavaCC - OriginalChecksum=ba0a2636eda0843482e36cc3e9220588 (do not edit this line) */\r