001 /* The following code was generated by JFlex 1.4.1 on 3/13/06 6:15 PM */
002
003 /*
004 * Copyright 2000-2006 Omnicore Software, Hans Kratz & Dennis Strein GbR,
005 * Geert Bevin <gbevin[remove] at uwyn dot com>.
006 * Distributed under the terms of the GNU Lesser General Public License, v2.1 or later
007 * $Id: XmlHighlighter.java 3108 2006-03-13 18:03:00Z gbevin $
008 */
009 package com.uwyn.jhighlight.highlighter;
010
011 import java.io.Reader;
012 import java.io.IOException;
013
014
015 /**
016 * This class is a scanner generated by
017 * <a href="http://www.jflex.de/">JFlex</a> 1.4.1
018 * on 3/13/06 6:15 PM from the specification file
019 * <tt>com/uwyn/jhighlight/highlighter/XmlHighlighter.flex</tt>
020 */
021 public class XmlHighlighter implements ExplicitStateHighlighter {
022
023 /** This character denotes the end of file */
024 public static final int YYEOF = -1;
025
026 /** initial size of the lookahead buffer */
027 private static final int ZZ_BUFFERSIZE = 128;
028
029 /** lexical states */
030 public static final int TAG_START = 9;
031 public static final int IN_CDATA_SECTION = 14;
032 public static final int IN_RIFE_NAME_QUOTED = 6;
033 public static final int IN_SINGLE_QUOTE_STRING = 11;
034 public static final int IN_RIFE_TAG_REGULAR = 4;
035 public static final int IN_PROCESSING_INSTRUCTION = 13;
036 public static final int IN_DOUBLE_QUOTE_STRING = 12;
037 public static final int IN_RIFE_NAME = 7;
038 public static final int IN_TAG = 10;
039 public static final int IN_RIFE_NAME_SINGLEQUOTED = 5;
040 public static final int IN_RIFE_TAG_VELOCITY = 3;
041 public static final int IN_COMMENT = 8;
042 public static final int YYINITIAL = 0;
043 public static final int IN_RIFE_TAG_COMMENT = 1;
044 public static final int IN_RIFE_TAG_COMPACT = 2;
045
046 /**
047 * Translates characters to character classes
048 */
049 private static final String ZZ_CMAP_PACKED =
050 "\11\3\1\40\1\34\1\0\1\1\1\2\16\3\4\0\1\1\1\10"+
051 "\1\37\1\0\1\20\2\0\1\36\5\0\1\4\1\3\1\15\12\3"+
052 "\1\6\1\0\1\7\1\35\1\14\1\27\1\0\1\32\1\12\1\30"+
053 "\1\31\4\5\1\13\12\5\1\33\1\5\1\11\4\5\1\16\1\0"+
054 "\1\17\1\0\1\5\1\0\1\5\1\23\6\5\1\24\10\5\1\26"+
055 "\1\41\2\5\1\22\4\5\1\21\1\0\1\25\1\0\41\3\2\0"+
056 "\4\5\4\0\1\5\12\0\1\5\4\0\1\5\5\0\27\5\1\0"+
057 "\37\5\1\0\u0128\5\2\0\22\5\34\0\136\5\2\0\11\5\2\0"+
058 "\7\5\16\0\2\5\16\0\5\5\11\0\1\5\21\0\117\3\21\0"+
059 "\3\3\27\0\1\5\13\0\1\5\1\0\3\5\1\0\1\5\1\0"+
060 "\24\5\1\0\54\5\1\0\10\5\2\0\32\5\14\0\202\5\1\0"+
061 "\4\3\5\0\71\5\2\0\2\5\2\0\2\5\3\0\46\5\2\0"+
062 "\2\5\67\0\46\5\2\0\1\5\7\0\47\5\11\0\21\3\1\0"+
063 "\27\3\1\0\3\3\1\0\1\3\1\0\2\3\1\0\1\3\13\0"+
064 "\33\5\5\0\3\5\56\0\32\5\5\0\13\5\13\3\12\0\12\3"+
065 "\6\0\1\3\143\5\1\0\1\5\7\3\2\0\6\3\2\5\2\3"+
066 "\1\0\4\3\2\0\12\3\3\5\22\0\1\3\1\5\1\3\33\5"+
067 "\3\0\33\3\65\0\46\5\13\3\u0150\0\3\3\1\0\65\5\2\0"+
068 "\1\3\1\5\20\3\2\0\1\5\4\3\3\0\12\5\2\3\2\0"+
069 "\12\3\21\0\3\3\1\0\10\5\2\0\2\5\2\0\26\5\1\0"+
070 "\7\5\1\0\1\5\3\0\4\5\2\0\1\3\1\0\7\3\2\0"+
071 "\2\3\2\0\3\3\11\0\1\3\4\0\2\5\1\0\3\5\2\3"+
072 "\2\0\12\3\4\5\16\0\1\3\2\0\6\5\4\0\2\5\2\0"+
073 "\26\5\1\0\7\5\1\0\2\5\1\0\2\5\1\0\2\5\2\0"+
074 "\1\3\1\0\5\3\4\0\2\3\2\0\3\3\13\0\4\5\1\0"+
075 "\1\5\7\0\14\3\3\5\14\0\3\3\1\0\7\5\1\0\1\5"+
076 "\1\0\3\5\1\0\26\5\1\0\7\5\1\0\2\5\1\0\5\5"+
077 "\2\0\1\3\1\5\10\3\1\0\3\3\1\0\3\3\2\0\1\5"+
078 "\17\0\1\5\5\0\12\3\21\0\3\3\1\0\10\5\2\0\2\5"+
079 "\2\0\26\5\1\0\7\5\1\0\2\5\2\0\4\5\2\0\1\3"+
080 "\1\5\6\3\3\0\2\3\2\0\3\3\10\0\2\3\4\0\2\5"+
081 "\1\0\3\5\4\0\12\3\22\0\2\3\1\0\6\5\3\0\3\5"+
082 "\1\0\4\5\3\0\2\5\1\0\1\5\1\0\2\5\3\0\2\5"+
083 "\3\0\3\5\3\0\10\5\1\0\3\5\4\0\5\3\3\0\3\3"+
084 "\1\0\4\3\11\0\1\3\17\0\11\3\21\0\3\3\1\0\10\5"+
085 "\1\0\3\5\1\0\27\5\1\0\12\5\1\0\5\5\4\0\7\3"+
086 "\1\0\3\3\1\0\4\3\7\0\2\3\11\0\2\5\4\0\12\3"+
087 "\22\0\2\3\1\0\10\5\1\0\3\5\1\0\27\5\1\0\12\5"+
088 "\1\0\5\5\4\0\7\3\1\0\3\3\1\0\4\3\7\0\2\3"+
089 "\7\0\1\5\1\0\2\5\4\0\12\3\22\0\2\3\1\0\10\5"+
090 "\1\0\3\5\1\0\27\5\1\0\20\5\4\0\6\3\2\0\3\3"+
091 "\1\0\4\3\11\0\1\3\10\0\2\5\4\0\12\3\22\0\2\3"+
092 "\1\0\22\5\3\0\30\5\1\0\11\5\1\0\1\5\2\0\7\5"+
093 "\3\0\1\3\4\0\6\3\1\0\1\3\1\0\10\3\22\0\2\3"+
094 "\15\0\60\5\1\3\2\5\7\3\4\0\10\5\10\3\1\0\12\3"+
095 "\47\0\2\5\1\0\1\5\2\0\2\5\1\0\1\5\2\0\1\5"+
096 "\6\0\4\5\1\0\7\5\1\0\3\5\1\0\1\5\1\0\1\5"+
097 "\2\0\2\5\1\0\4\5\1\3\2\5\6\3\1\0\2\3\1\5"+
098 "\2\0\5\5\1\0\1\5\1\0\6\3\2\0\12\3\2\0\2\5"+
099 "\42\0\1\5\27\0\2\3\6\0\12\3\13\0\1\3\1\0\1\3"+
100 "\1\0\1\3\4\0\2\3\10\5\1\0\42\5\6\0\24\3\1\0"+
101 "\2\3\4\5\4\0\10\3\1\0\44\3\11\0\1\3\71\0\42\5"+
102 "\1\0\5\5\1\0\2\5\1\0\7\3\3\0\4\3\6\0\12\3"+
103 "\6\0\6\5\4\3\106\0\46\5\12\0\47\5\11\0\132\5\5\0"+
104 "\104\5\5\0\122\5\6\0\7\5\1\0\77\5\1\0\1\5\1\0"+
105 "\4\5\2\0\7\5\1\0\1\5\1\0\4\5\2\0\47\5\1\0"+
106 "\1\5\1\0\4\5\2\0\37\5\1\0\1\5\1\0\4\5\2\0"+
107 "\7\5\1\0\1\5\1\0\4\5\2\0\7\5\1\0\7\5\1\0"+
108 "\27\5\1\0\37\5\1\0\1\5\1\0\4\5\2\0\7\5\1\0"+
109 "\47\5\1\0\23\5\16\0\11\3\56\0\125\5\14\0\u026c\5\2\0"+
110 "\10\5\12\0\32\5\5\0\113\5\225\0\64\5\40\3\7\0\1\5"+
111 "\4\0\12\3\41\0\4\3\1\0\12\3\6\0\130\5\10\0\51\5"+
112 "\1\3\u0556\0\234\5\4\0\132\5\6\0\26\5\2\0\6\5\2\0"+
113 "\46\5\2\0\6\5\2\0\10\5\1\0\1\5\1\0\1\5\1\0"+
114 "\1\5\1\0\37\5\2\0\65\5\1\0\7\5\1\0\1\5\3\0"+
115 "\3\5\1\0\7\5\3\0\4\5\2\0\6\5\4\0\15\5\5\0"+
116 "\3\5\1\0\7\5\17\0\4\3\32\0\5\3\20\0\2\5\51\0"+
117 "\6\3\17\0\1\5\40\0\20\5\40\0\15\3\4\0\1\3\40\0"+
118 "\1\5\4\0\1\5\2\0\12\5\1\0\1\5\3\0\5\5\6\0"+
119 "\1\5\1\0\1\5\1\0\1\5\1\0\4\5\1\0\3\5\1\0"+
120 "\7\5\46\0\44\5\u0e81\0\3\5\31\0\11\5\6\3\1\0\5\5"+
121 "\2\0\3\5\6\0\124\5\4\0\2\3\2\0\2\5\2\0\136\5"+
122 "\6\0\50\5\4\0\136\5\21\0\30\5\u0248\0\u19b6\5\112\0\u51a6\5"+
123 "\132\0\u048d\5\u0773\0\u2ba4\5\u215c\0\u012e\5\322\0\7\5\14\0\5\5"+
124 "\5\0\1\5\1\3\12\5\1\0\15\5\1\0\5\5\1\0\1\5"+
125 "\1\0\2\5\1\0\2\5\1\0\154\5\41\0\u016b\5\22\0\100\5"+
126 "\2\0\66\5\50\0\14\5\44\0\4\3\17\0\2\5\30\0\3\5"+
127 "\31\0\1\5\6\0\3\5\1\0\1\5\1\0\207\5\2\0\1\3"+
128 "\4\0\1\5\13\0\12\3\7\0\32\5\4\0\1\5\1\0\32\5"+
129 "\12\0\132\5\3\0\6\5\2\0\6\5\2\0\6\5\2\0\3\5"+
130 "\3\0\2\5\3\0\2\5\22\0\3\3\4\0";
131
132 /**
133 * Translates characters to character classes
134 */
135 private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED);
136
137 /**
138 * Translates DFA states to action switch labels.
139 */
140 private static final int [] ZZ_ACTION = zzUnpackAction();
141
142 private static final String ZZ_ACTION_PACKED_0 =
143 "\1\1\2\2\1\3\1\2\3\0\1\4\2\0\2\5"+
144 "\1\0\1\6\2\1\1\7\2\1\3\2\1\10\1\2"+
145 "\1\11\2\3\1\2\1\12\1\13\1\14\1\13\2\4"+
146 "\1\15\1\16\1\17\1\20\2\1\1\20\1\21\1\22"+
147 "\1\23\1\5\2\24\3\5\1\25\2\5\2\1\1\26"+
148 "\2\6\1\0\1\7\1\0\1\27\10\0\1\30\16\0"+
149 "\1\31\1\0\1\32\1\33\4\0\1\34\4\0\1\35"+
150 "\10\0\1\36\1\37\7\0\1\40";
151
152 private static int [] zzUnpackAction() {
153 int [] result = new int[118];
154 int offset = 0;
155 offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
156 return result;
157 }
158
159 private static int zzUnpackAction(String packed, int offset, int [] result) {
160 int i = 0; /* index in packed string */
161 int j = offset; /* index in unpacked array */
162 int l = packed.length();
163 while (i < l) {
164 int count = packed.charAt(i++);
165 int value = packed.charAt(i++);
166 do result[j++] = value; while (--count > 0);
167 }
168 return j;
169 }
170
171
172 /**
173 * Translates a state to a row index in the transition table
174 */
175 private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
176
177 private static final String ZZ_ROWMAP_PACKED_0 =
178 "\0\0\0\42\0\104\0\146\0\210\0\252\0\314\0\356"+
179 "\0\u0110\0\u0132\0\u0154\0\u0176\0\u0198\0\u01ba\0\u01dc\0\u01fe"+
180 "\0\u0220\0\u0242\0\u0264\0\u0286\0\u02a8\0\u02ca\0\u01fe\0\u01fe"+
181 "\0\u02ec\0\u01fe\0\u030e\0\u0330\0\u0352\0\u01fe\0\u01fe\0\u01fe"+
182 "\0\u0374\0\u0396\0\u03b8\0\u01fe\0\u03da\0\u01fe\0\u03fc\0\u041e"+
183 "\0\u0440\0\u0462\0\u01fe\0\u01fe\0\u01fe\0\u0484\0\u041e\0\u01fe"+
184 "\0\u0264\0\u01fe\0\u04a6\0\u01fe\0\u04c8\0\u04ea\0\u050c\0\u052e"+
185 "\0\u01fe\0\u0550\0\u0572\0\u0594\0\u05b6\0\u05d8\0\u01fe\0\u05fa"+
186 "\0\u061c\0\u063e\0\u0660\0\u0682\0\u05b6\0\u050c\0\u052e\0\u01fe"+
187 "\0\u06a4\0\u06c6\0\u06e8\0\u070a\0\u072c\0\u074e\0\u0770\0\u0792"+
188 "\0\u07b4\0\u07d6\0\u07f8\0\u081a\0\u083c\0\u085e\0\u01fe\0\u0880"+
189 "\0\u01fe\0\u08a2\0\u08c4\0\u08e6\0\u0908\0\u092a\0\u01fe\0\u094c"+
190 "\0\u096e\0\u0990\0\u09b2\0\u01fe\0\u08a2\0\u09d4\0\u09f6\0\u0a18"+
191 "\0\u0a3a\0\u0a5c\0\u0a7e\0\u0aa0\0\u01fe\0\u01fe\0\u0ac2\0\u0ae4"+
192 "\0\u0b06\0\u0b28\0\u0b4a\0\u0b6c\0\u0b8e\0\u01fe";
193
194 private static int [] zzUnpackRowMap() {
195 int [] result = new int[118];
196 int offset = 0;
197 offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
198 return result;
199 }
200
201 private static int zzUnpackRowMap(String packed, int offset, int [] result) {
202 int i = 0; /* index in packed string */
203 int j = offset; /* index in unpacked array */
204 int l = packed.length();
205 while (i < l) {
206 int high = packed.charAt(i++) << 16;
207 result[j++] = high | packed.charAt(i++);
208 }
209 return j;
210 }
211
212 /**
213 * The transition table of the DFA
214 */
215 private static final int [] ZZ_TRANS = zzUnpackTrans();
216
217 private static final String ZZ_TRANS_PACKED_0 =
218 "\1\20\1\21\5\20\1\22\6\20\1\23\1\20\1\24"+
219 "\17\20\1\21\1\20\4\25\1\26\7\25\1\27\21\25"+
220 "\1\30\3\25\17\31\1\32\16\31\1\30\3\31\15\33"+
221 "\1\34\7\33\1\32\12\33\2\27\14\35\1\32\22\35"+
222 "\1\36\2\35\34\37\1\20\1\37\1\40\37\37\1\20"+
223 "\2\37\1\40\17\37\1\41\7\37\1\32\6\37\1\20"+
224 "\5\37\4\42\1\43\27\42\1\20\5\42\5\44\2\45"+
225 "\2\44\3\45\1\46\3\44\1\45\1\44\3\45\1\44"+
226 "\1\45\1\44\4\45\1\20\4\44\1\45\5\20\2\47"+
227 "\1\50\1\20\3\47\1\46\1\51\1\23\1\20\1\52"+
228 "\1\20\3\47\1\20\1\47\1\20\4\47\1\20\1\53"+
229 "\1\54\1\55\1\20\1\47\7\56\1\57\4\56\1\60"+
230 "\1\56\1\61\1\62\1\63\1\62\3\56\1\62\6\56"+
231 "\1\62\1\56\1\64\3\56\7\65\1\57\4\65\1\60"+
232 "\1\65\1\61\1\62\1\66\1\62\3\65\1\62\6\65"+
233 "\1\62\2\65\1\64\2\65\27\67\1\70\4\67\1\71"+
234 "\5\67\17\72\1\73\14\72\1\20\5\72\43\0\1\21"+
235 "\36\0\1\21\11\0\1\74\4\0\1\75\10\0\1\76"+
236 "\1\77\22\0\1\100\52\0\1\101\20\0\4\25\1\0"+
237 "\7\25\1\0\21\25\1\0\3\25\4\0\1\102\35\0"+
238 "\17\31\1\0\16\31\1\0\3\31\25\33\1\0\12\33"+
239 "\2\0\25\33\1\32\12\33\2\0\14\35\1\0\22\35"+
240 "\1\0\2\35\25\0\1\32\14\0\4\42\1\0\27\42"+
241 "\1\0\5\42\4\0\1\103\40\0\4\45\2\0\3\45"+
242 "\4\0\1\45\1\0\3\45\1\0\1\45\1\0\4\45"+
243 "\5\0\1\45\3\0\4\47\2\0\3\47\4\0\1\47"+
244 "\1\0\3\47\1\0\1\47\1\0\4\47\5\0\1\47"+
245 "\10\0\1\104\4\0\1\105\10\0\1\76\27\0\1\46"+
246 "\30\0\4\47\2\0\3\47\4\0\1\47\1\101\3\47"+
247 "\1\0\1\47\1\0\4\47\5\0\1\47\7\56\1\0"+
248 "\4\56\1\0\1\56\2\0\1\56\1\0\3\56\1\0"+
249 "\6\56\1\0\1\56\1\0\12\56\1\0\4\56\1\0"+
250 "\1\56\2\0\1\56\1\101\3\56\1\0\6\56\1\0"+
251 "\1\56\1\0\3\56\7\65\1\0\4\65\1\0\1\65"+
252 "\2\0\1\65\1\0\3\65\1\0\6\65\1\0\2\65"+
253 "\1\0\11\65\1\0\4\65\1\0\1\65\2\0\1\65"+
254 "\1\101\3\65\1\0\6\65\1\0\2\65\1\0\2\65"+
255 "\27\106\1\107\4\106\1\71\21\106\1\110\12\106\1\111"+
256 "\4\106\1\71\5\106\17\72\1\0\14\72\1\0\5\72"+
257 "\17\0\1\112\26\0\1\113\11\0\1\114\51\0\1\115"+
258 "\21\0\1\116\34\0\2\117\6\0\1\120\1\121\1\120"+
259 "\1\0\1\122\16\0\1\117\3\0\1\117\2\0\2\123"+
260 "\12\0\1\124\4\0\1\125\1\126\1\125\7\0\1\123"+
261 "\3\0\1\123\15\0\1\32\41\0\1\127\31\0\1\130"+
262 "\35\0\14\106\1\110\12\106\1\111\4\106\1\0\5\106"+
263 "\14\0\1\131\31\0\1\132\65\0\1\133\17\0\1\134"+
264 "\55\0\1\135\1\136\1\135\16\0\2\117\6\0\1\120"+
265 "\1\121\1\120\20\0\1\117\3\0\1\117\2\0\1\137"+
266 "\36\0\1\137\2\0\1\137\7\0\1\120\26\0\1\137"+
267 "\2\0\2\122\6\0\1\140\1\141\21\0\1\122\3\0"+
268 "\1\122\2\0\2\123\17\0\1\125\1\126\1\125\7\0"+
269 "\1\123\3\0\1\123\2\0\2\124\17\0\1\142\1\143"+
270 "\10\0\1\124\3\0\1\124\2\0\1\144\36\0\1\144"+
271 "\2\0\1\144\20\0\1\125\15\0\1\144\5\0\1\145"+
272 "\36\0\2\146\6\0\1\147\1\150\1\147\1\0\1\151"+
273 "\16\0\1\146\3\0\1\146\32\0\1\152\32\0\1\153"+
274 "\1\154\17\0\1\155\36\0\1\155\2\0\1\155\20\0"+
275 "\1\135\15\0\1\155\2\0\2\140\14\0\1\27\14\0"+
276 "\1\140\3\0\1\140\2\0\2\140\6\0\1\140\5\0"+
277 "\1\27\14\0\1\140\3\0\1\140\2\0\2\142\22\0"+
278 "\1\27\6\0\1\142\3\0\1\142\2\0\2\142\17\0"+
279 "\1\142\2\0\1\27\6\0\1\142\3\0\1\142\2\0"+
280 "\2\146\6\0\1\147\1\150\1\147\20\0\1\146\3\0"+
281 "\1\146\2\0\1\156\36\0\1\156\2\0\1\156\7\0"+
282 "\1\147\26\0\1\156\2\0\2\151\6\0\1\157\1\160"+
283 "\21\0\1\151\3\0\1\151\33\0\1\161\10\0\1\153"+
284 "\12\0\1\27\23\0\1\153\2\0\1\153\12\0\1\27"+
285 "\5\0\1\153\15\0\1\153\2\0\2\157\1\0\1\162"+
286 "\27\0\1\157\3\0\1\157\2\0\2\157\1\0\1\162"+
287 "\4\0\1\157\22\0\1\157\3\0\1\157\34\0\1\163"+
288 "\12\0\1\164\67\0\1\165\23\0\1\27\43\0\1\166"+
289 "\23\0";
290
291 private static int [] zzUnpackTrans() {
292 int [] result = new int[2992];
293 int offset = 0;
294 offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
295 return result;
296 }
297
298 private static int zzUnpackTrans(String packed, int offset, int [] result) {
299 int i = 0; /* index in packed string */
300 int j = offset; /* index in unpacked array */
301 int l = packed.length();
302 while (i < l) {
303 int count = packed.charAt(i++);
304 int value = packed.charAt(i++);
305 value--;
306 do result[j++] = value; while (--count > 0);
307 }
308 return j;
309 }
310
311
312 /* error codes */
313 private static final int ZZ_UNKNOWN_ERROR = 0;
314 private static final int ZZ_NO_MATCH = 1;
315 private static final int ZZ_PUSHBACK_2BIG = 2;
316
317 /* error messages for the codes above */
318 private static final String ZZ_ERROR_MSG[] = {
319 "Unkown internal scanner error",
320 "Error: could not match input",
321 "Error: pushback value was too large"
322 };
323
324 /**
325 * ZZ_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
326 */
327 private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
328
329 private static final String ZZ_ATTRIBUTE_PACKED_0 =
330 "\5\1\3\0\1\1\2\0\2\1\1\0\1\1\1\11"+
331 "\6\1\2\11\1\1\1\11\3\1\3\11\3\1\1\11"+
332 "\1\1\1\11\4\1\3\11\2\1\1\11\1\1\1\11"+
333 "\1\1\1\11\4\1\1\11\2\1\1\0\1\1\1\0"+
334 "\1\11\10\0\1\11\16\0\1\11\1\0\1\11\1\1"+
335 "\4\0\1\11\4\0\1\11\10\0\2\11\7\0\1\11";
336
337 private static int [] zzUnpackAttribute() {
338 int [] result = new int[118];
339 int offset = 0;
340 offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
341 return result;
342 }
343
344 private static int zzUnpackAttribute(String packed, int offset, int [] result) {
345 int i = 0; /* index in packed string */
346 int j = offset; /* index in unpacked array */
347 int l = packed.length();
348 while (i < l) {
349 int count = packed.charAt(i++);
350 int value = packed.charAt(i++);
351 do result[j++] = value; while (--count > 0);
352 }
353 return j;
354 }
355
356 /** the input device */
357 private java.io.Reader zzReader;
358
359 /** the current state of the DFA */
360 private int zzState;
361
362 /** the current lexical state */
363 private int zzLexicalState = YYINITIAL;
364
365 /** this buffer contains the current text to be matched and is
366 the source of the yytext() string */
367 private char zzBuffer[] = new char[ZZ_BUFFERSIZE];
368
369 /** the textposition at the last accepting state */
370 private int zzMarkedPos;
371
372 /** the textposition at the last state to be included in yytext */
373 private int zzPushbackPos;
374
375 /** the current text position in the buffer */
376 private int zzCurrentPos;
377
378 /** startRead marks the beginning of the yytext() string in the buffer */
379 private int zzStartRead;
380
381 /** endRead marks the last character in the buffer, that has been read
382 from input */
383 private int zzEndRead;
384
385 /** number of newlines encountered up to the start of the matched text */
386 private int yyline;
387
388 /** the number of characters up to the start of the matched text */
389 private int yychar;
390
391 /**
392 * the number of characters from the last newline up to the start of the
393 * matched text
394 */
395 private int yycolumn;
396
397 /**
398 * zzAtBOL == true <=> the scanner is currently at the beginning of a line
399 */
400 private boolean zzAtBOL = true;
401
402 /** zzAtEOF == true <=> the scanner is at the EOF */
403 private boolean zzAtEOF;
404
405 /* user code: */
406 /* styles */
407
408 public static final byte PLAIN_STYLE = 1;
409 public static final byte CHAR_DATA = 2;
410 public static final byte TAG_SYMBOLS = 3;
411 public static final byte COMMENT = 4;
412 public static final byte ATTRIBUTE_VALUE = 5;
413 public static final byte ATTRIBUTE_NAME = 6;
414 public static final byte PROCESSING_INSTRUCTION = 7;
415 public static final byte TAG_NAME = 8;
416 public static final byte RIFE_TAG = 9;
417 public static final byte RIFE_NAME = 10;
418
419 /* Highlighter implementation */
420
421 public int getStyleCount()
422 {
423 return 10;
424 }
425
426 public byte getStartState()
427 {
428 return YYINITIAL+1;
429 }
430
431 public byte getCurrentState()
432 {
433 return (byte) (yystate()+1);
434 }
435
436 public void setState(byte newState)
437 {
438 yybegin(newState-1);
439 }
440
441 public byte getNextToken()
442 {
443 try
444 {
445 return (byte) yylex();
446 }
447 catch (IOException e)
448 {
449 throw new InternalError();
450 }
451 }
452
453 public int getTokenLength()
454 {
455 return yylength();
456 }
457
458 public void setReader(Reader r)
459 {
460 this.zzReader = r;
461 }
462
463 public XmlHighlighter()
464 {
465 }
466
467 private int mReturningState;
468 private int mReturningStateTag;
469
470
471 /**
472 * Creates a new scanner
473 * There is also a java.io.InputStream version of this constructor.
474 *
475 * @param in the java.io.Reader to read input from.
476 */
477 public XmlHighlighter(java.io.Reader in) {
478 this.zzReader = in;
479 }
480
481 /**
482 * Creates a new scanner.
483 * There is also java.io.Reader version of this constructor.
484 *
485 * @param in the java.io.Inputstream to read input from.
486 */
487 public XmlHighlighter(java.io.InputStream in) {
488 this(new java.io.InputStreamReader(in));
489 }
490
491 /**
492 * Unpacks the compressed character translation table.
493 *
494 * @param packed the packed character translation table
495 * @return the unpacked character translation table
496 */
497 private static char [] zzUnpackCMap(String packed) {
498 char [] map = new char[0x10000];
499 int i = 0; /* index in packed string */
500 int j = 0; /* index in unpacked array */
501 while (i < 1614) {
502 int count = packed.charAt(i++);
503 char value = packed.charAt(i++);
504 do map[j++] = value; while (--count > 0);
505 }
506 return map;
507 }
508
509
510 /**
511 * Refills the input buffer.
512 *
513 * @return <code>false</code>, iff there was new input.
514 *
515 * @exception java.io.IOException if any I/O-Error occurs
516 */
517 private boolean zzRefill() throws java.io.IOException {
518
519 /* first: make room (if you can) */
520 if (zzStartRead > 0) {
521 System.arraycopy(zzBuffer, zzStartRead,
522 zzBuffer, 0,
523 zzEndRead-zzStartRead);
524
525 /* translate stored positions */
526 zzEndRead-= zzStartRead;
527 zzCurrentPos-= zzStartRead;
528 zzMarkedPos-= zzStartRead;
529 zzPushbackPos-= zzStartRead;
530 zzStartRead = 0;
531 }
532
533 /* is the buffer big enough? */
534 if (zzCurrentPos >= zzBuffer.length) {
535 /* if not: blow it up */
536 char newBuffer[] = new char[zzCurrentPos*2];
537 System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length);
538 zzBuffer = newBuffer;
539 }
540
541 /* finally: fill the buffer with new input */
542 int numRead = zzReader.read(zzBuffer, zzEndRead,
543 zzBuffer.length-zzEndRead);
544
545 if (numRead < 0) {
546 return true;
547 }
548 else {
549 zzEndRead+= numRead;
550 return false;
551 }
552 }
553
554
555 /**
556 * Closes the input stream.
557 */
558 public final void yyclose() throws java.io.IOException {
559 zzAtEOF = true; /* indicate end of file */
560 zzEndRead = zzStartRead; /* invalidate buffer */
561
562 if (zzReader != null)
563 zzReader.close();
564 }
565
566
567 /**
568 * Resets the scanner to read from a new input stream.
569 * Does not close the old reader.
570 *
571 * All internal variables are reset, the old input stream
572 * <b>cannot</b> be reused (internal buffer is discarded and lost).
573 * Lexical state is set to <tt>ZZ_INITIAL</tt>.
574 *
575 * @param reader the new input stream
576 */
577 public final void yyreset(java.io.Reader reader) {
578 zzReader = reader;
579 zzAtBOL = true;
580 zzAtEOF = false;
581 zzEndRead = zzStartRead = 0;
582 zzCurrentPos = zzMarkedPos = zzPushbackPos = 0;
583 yyline = yychar = yycolumn = 0;
584 zzLexicalState = YYINITIAL;
585 }
586
587
588 /**
589 * Returns the current lexical state.
590 */
591 public final int yystate() {
592 return zzLexicalState;
593 }
594
595
596 /**
597 * Enters a new lexical state
598 *
599 * @param newState the new lexical state
600 */
601 public final void yybegin(int newState) {
602 zzLexicalState = newState;
603 }
604
605
606 /**
607 * Returns the text matched by the current regular expression.
608 */
609 public final String yytext() {
610 return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead );
611 }
612
613
614 /**
615 * Returns the character at position <tt>pos</tt> from the
616 * matched text.
617 *
618 * It is equivalent to yytext().charAt(pos), but faster
619 *
620 * @param pos the position of the character to fetch.
621 * A value from 0 to yylength()-1.
622 *
623 * @return the character at position pos
624 */
625 public final char yycharat(int pos) {
626 return zzBuffer[zzStartRead+pos];
627 }
628
629
630 /**
631 * Returns the length of the matched text region.
632 */
633 public final int yylength() {
634 return zzMarkedPos-zzStartRead;
635 }
636
637
638 /**
639 * Reports an error that occured while scanning.
640 *
641 * In a wellformed scanner (no or only correct usage of
642 * yypushback(int) and a match-all fallback rule) this method
643 * will only be called with things that "Can't Possibly Happen".
644 * If this method is called, something is seriously wrong
645 * (e.g. a JFlex bug producing a faulty scanner etc.).
646 *
647 * Usual syntax/scanner level error handling should be done
648 * in error fallback rules.
649 *
650 * @param errorCode the code of the errormessage to display
651 */
652 private void zzScanError(int errorCode) {
653 String message;
654 try {
655 message = ZZ_ERROR_MSG[errorCode];
656 }
657 catch (ArrayIndexOutOfBoundsException e) {
658 message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
659 }
660
661 throw new Error(message);
662 }
663
664
665 /**
666 * Pushes the specified amount of characters back into the input stream.
667 *
668 * They will be read again by then next call of the scanning method
669 *
670 * @param number the number of characters to be read again.
671 * This number must not be greater than yylength()!
672 */
673 public void yypushback(int number) {
674 if ( number > yylength() )
675 zzScanError(ZZ_PUSHBACK_2BIG);
676
677 zzMarkedPos -= number;
678 }
679
680
681 /**
682 * Resumes scanning until the next regular expression is matched,
683 * the end of input is encountered or an I/O-Error occurs.
684 *
685 * @return the next token
686 * @exception java.io.IOException if any I/O-Error occurs
687 */
688 public int yylex() throws java.io.IOException {
689 int zzInput;
690 int zzAction;
691
692 // cached fields:
693 int zzCurrentPosL;
694 int zzMarkedPosL;
695 int zzEndReadL = zzEndRead;
696 char [] zzBufferL = zzBuffer;
697 char [] zzCMapL = ZZ_CMAP;
698
699 int [] zzTransL = ZZ_TRANS;
700 int [] zzRowMapL = ZZ_ROWMAP;
701 int [] zzAttrL = ZZ_ATTRIBUTE;
702
703 while (true) {
704 zzMarkedPosL = zzMarkedPos;
705
706 zzAction = -1;
707
708 zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
709
710 zzState = zzLexicalState;
711
712
713 zzForAction: {
714 while (true) {
715
716 if (zzCurrentPosL < zzEndReadL)
717 zzInput = zzBufferL[zzCurrentPosL++];
718 else if (zzAtEOF) {
719 zzInput = YYEOF;
720 break zzForAction;
721 }
722 else {
723 // store back cached positions
724 zzCurrentPos = zzCurrentPosL;
725 zzMarkedPos = zzMarkedPosL;
726 boolean eof = zzRefill();
727 // get translated positions and possibly new buffer
728 zzCurrentPosL = zzCurrentPos;
729 zzMarkedPosL = zzMarkedPos;
730 zzBufferL = zzBuffer;
731 zzEndReadL = zzEndRead;
732 if (eof) {
733 zzInput = YYEOF;
734 break zzForAction;
735 }
736 else {
737 zzInput = zzBufferL[zzCurrentPosL++];
738 }
739 }
740 int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
741 if (zzNext == -1) break zzForAction;
742 zzState = zzNext;
743
744 int zzAttributes = zzAttrL[zzState];
745 if ( (zzAttributes & 1) == 1 ) {
746 zzAction = zzState;
747 zzMarkedPosL = zzCurrentPosL;
748 if ( (zzAttributes & 8) == 8 ) break zzForAction;
749 }
750
751 }
752 }
753
754 // store back cached position
755 zzMarkedPos = zzMarkedPosL;
756
757 switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
758 case 27:
759 { yybegin(IN_COMMENT); return COMMENT;
760 }
761 case 33: break;
762 case 5:
763 { return ATTRIBUTE_VALUE;
764 }
765 case 34: break;
766 case 4:
767 { return COMMENT;
768 }
769 case 35: break;
770 case 21:
771 { yybegin(IN_TAG); return ATTRIBUTE_VALUE;
772 }
773 case 36: break;
774 case 20:
775 { yybegin(IN_TAG); return TAG_SYMBOLS;
776 }
777 case 37: break;
778 case 13:
779 { yybegin(IN_TAG); return PLAIN_STYLE;
780 }
781 case 38: break;
782 case 14:
783 { yybegin(IN_TAG); return TAG_NAME;
784 }
785 case 39: break;
786 case 3:
787 { mReturningStateTag = yystate(); yybegin(IN_RIFE_NAME); return RIFE_NAME;
788 }
789 case 40: break;
790 case 10:
791 { mReturningStateTag = yystate(); yybegin(IN_RIFE_NAME_QUOTED); return RIFE_NAME;
792 }
793 case 41: break;
794 case 31:
795 { mReturningState = yystate(); yybegin(IN_RIFE_TAG_COMMENT); return RIFE_TAG;
796 }
797 case 42: break;
798 case 24:
799 { yybegin(YYINITIAL); return PROCESSING_INSTRUCTION;
800 }
801 case 43: break;
802 case 28:
803 { mReturningState = yystate(); yybegin(IN_RIFE_TAG_COMPACT); return RIFE_TAG;
804 }
805 case 44: break;
806 case 22:
807 { return PROCESSING_INSTRUCTION;
808 }
809 case 45: break;
810 case 8:
811 { mReturningStateTag = yystate(); yybegin(IN_RIFE_NAME_SINGLEQUOTED); return RIFE_NAME;
812 }
813 case 46: break;
814 case 15:
815 { yybegin(YYINITIAL); return TAG_SYMBOLS;
816 }
817 case 47: break;
818 case 30:
819 { mReturningState = yystate(); yybegin(IN_RIFE_TAG_REGULAR); return RIFE_TAG;
820 }
821 case 48: break;
822 case 11:
823 { return RIFE_NAME;
824 }
825 case 49: break;
826 case 23:
827 { yybegin(IN_PROCESSING_INSTRUCTION); return PROCESSING_INSTRUCTION;
828 }
829 case 50: break;
830 case 17:
831 { return TAG_SYMBOLS;
832 }
833 case 51: break;
834 case 29:
835 { mReturningState = yystate(); yybegin(IN_RIFE_TAG_VELOCITY); return RIFE_TAG;
836 }
837 case 52: break;
838 case 1:
839 { return PLAIN_STYLE;
840 }
841 case 53: break;
842 case 2:
843 { return RIFE_TAG;
844 }
845 case 54: break;
846 case 18:
847 { yybegin(IN_SINGLE_QUOTE_STRING); return ATTRIBUTE_VALUE;
848 }
849 case 55: break;
850 case 26:
851 { yybegin(YYINITIAL); return CHAR_DATA;
852 }
853 case 56: break;
854 case 25:
855 { yybegin(YYINITIAL); return COMMENT;
856 }
857 case 57: break;
858 case 19:
859 { yybegin(IN_DOUBLE_QUOTE_STRING); return ATTRIBUTE_VALUE;
860 }
861 case 58: break;
862 case 32:
863 { yybegin(IN_CDATA_SECTION); return CHAR_DATA;
864 }
865 case 59: break;
866 case 12:
867 { yybegin(mReturningStateTag); return RIFE_NAME;
868 }
869 case 60: break;
870 case 16:
871 { return ATTRIBUTE_NAME;
872 }
873 case 61: break;
874 case 6:
875 { return CHAR_DATA;
876 }
877 case 62: break;
878 case 9:
879 { yybegin(mReturningState); return RIFE_TAG;
880 }
881 case 63: break;
882 case 7:
883 { yybegin(TAG_START); return TAG_SYMBOLS;
884 }
885 case 64: break;
886 default:
887 if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
888 zzAtEOF = true;
889 return YYEOF;
890 }
891 else {
892 zzScanError(ZZ_NO_MATCH);
893 }
894 }
895 }
896 }
897
898
899 }