00001 00002 #line 3 "<stdout>" 00003 00004 #define YY_INT_ALIGNED short int 00005 00006 /* A lexical scanner generated by flex */ 00007 00008 #define FLEX_SCANNER 00009 #define YY_FLEX_MAJOR_VERSION 2 00010 #define YY_FLEX_MINOR_VERSION 5 00011 #define YY_FLEX_SUBMINOR_VERSION 33 00012 #if YY_FLEX_SUBMINOR_VERSION > 0 00013 #define FLEX_BETA 00014 #endif 00015 00016 /* First, we deal with platform-specific or compiler-specific issues. */ 00017 00018 /* begin standard C headers. */ 00019 #include <stdio.h> 00020 #include <string.h> 00021 #include <errno.h> 00022 #include <stdlib.h> 00023 00024 /* end standard C headers. */ 00025 00026 /* flex integer type definitions */ 00027 00028 #ifndef FLEXINT_H 00029 #define FLEXINT_H 00030 00031 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ 00032 00033 #if __STDC_VERSION__ >= 199901L 00034 00035 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, 00036 * if you want the limit (max/min) macros for int types. 00037 */ 00038 #ifndef __STDC_LIMIT_MACROS 00039 #define __STDC_LIMIT_MACROS 1 00040 #endif 00041 00042 #include <inttypes.h> 00043 typedef int8_t flex_int8_t; 00044 typedef uint8_t flex_uint8_t; 00045 typedef int16_t flex_int16_t; 00046 typedef uint16_t flex_uint16_t; 00047 typedef int32_t flex_int32_t; 00048 typedef uint32_t flex_uint32_t; 00049 #else 00050 typedef signed char flex_int8_t; 00051 typedef short int flex_int16_t; 00052 typedef int flex_int32_t; 00053 typedef unsigned char flex_uint8_t; 00054 typedef unsigned short int flex_uint16_t; 00055 typedef unsigned int flex_uint32_t; 00056 #endif /* ! C99 */ 00057 00058 /* Limits of integral types. */ 00059 #ifndef INT8_MIN 00060 #define INT8_MIN (-128) 00061 #endif 00062 #ifndef INT16_MIN 00063 #define INT16_MIN (-32767-1) 00064 #endif 00065 #ifndef INT32_MIN 00066 #define INT32_MIN (-2147483647-1) 00067 #endif 00068 #ifndef INT8_MAX 00069 #define INT8_MAX (127) 00070 #endif 00071 #ifndef INT16_MAX 00072 #define INT16_MAX (32767) 00073 #endif 00074 #ifndef INT32_MAX 00075 #define INT32_MAX (2147483647) 00076 #endif 00077 #ifndef UINT8_MAX 00078 #define UINT8_MAX (255U) 00079 #endif 00080 #ifndef UINT16_MAX 00081 #define UINT16_MAX (65535U) 00082 #endif 00083 #ifndef UINT32_MAX 00084 #define UINT32_MAX (4294967295U) 00085 #endif 00086 00087 #endif /* ! FLEXINT_H */ 00088 00089 #ifdef __cplusplus 00090 00091 /* The "const" storage-class-modifier is valid. */ 00092 #define YY_USE_CONST 00093 00094 #else /* ! __cplusplus */ 00095 00096 #if __STDC__ 00097 00098 #define YY_USE_CONST 00099 00100 #endif /* __STDC__ */ 00101 #endif /* ! __cplusplus */ 00102 00103 #ifdef YY_USE_CONST 00104 #define yyconst const 00105 #else 00106 #define yyconst 00107 #endif 00108 00109 /* Returned upon end-of-file. */ 00110 #define YY_NULL 0 00111 00112 /* Promotes a possibly negative, possibly signed char to an unsigned 00113 * integer for use as an array index. If the signed char is negative, 00114 * we want to instead treat it as an 8-bit unsigned char, hence the 00115 * double cast. 00116 */ 00117 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) 00118 00119 /* Enter a start condition. This macro really ought to take a parameter, 00120 * but we do it the disgusting crufty way forced on us by the ()-less 00121 * definition of BEGIN. 00122 */ 00123 #define BEGIN (yy_start) = 1 + 2 * 00124 00125 /* Translate the current start state into a value that can be later handed 00126 * to BEGIN to return to the state. The YYSTATE alias is for lex 00127 * compatibility. 00128 */ 00129 #define YY_START (((yy_start) - 1) / 2) 00130 #define YYSTATE YY_START 00131 00132 /* Action number for EOF rule of a given start state. */ 00133 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) 00134 00135 /* Special action meaning "start processing a new file". */ 00136 #define YY_NEW_FILE tagYYrestart(tagYYin ) 00137 00138 #define YY_END_OF_BUFFER_CHAR 0 00139 00140 /* Size of default input buffer. */ 00141 #ifndef YY_BUF_SIZE 00142 #define YY_BUF_SIZE 16384 00143 #endif 00144 00145 /* The state buf must be large enough to hold one state per character in the main buffer. 00146 */ 00147 #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) 00148 00149 #ifndef YY_TYPEDEF_YY_BUFFER_STATE 00150 #define YY_TYPEDEF_YY_BUFFER_STATE 00151 typedef struct yy_buffer_state *YY_BUFFER_STATE; 00152 #endif 00153 00154 extern int tagYYleng; 00155 00156 extern FILE *tagYYin, *tagYYout; 00157 00158 #define EOB_ACT_CONTINUE_SCAN 0 00159 #define EOB_ACT_END_OF_FILE 1 00160 #define EOB_ACT_LAST_MATCH 2 00161 00162 #define YY_LESS_LINENO(n) 00163 00164 /* Return all but the first "n" matched characters back to the input stream. */ 00165 #define yyless(n) \ 00166 do \ 00167 { \ 00168 /* Undo effects of setting up tagYYtext. */ \ 00169 int yyless_macro_arg = (n); \ 00170 YY_LESS_LINENO(yyless_macro_arg);\ 00171 *yy_cp = (yy_hold_char); \ 00172 YY_RESTORE_YY_MORE_OFFSET \ 00173 (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ 00174 YY_DO_BEFORE_ACTION; /* set up tagYYtext again */ \ 00175 } \ 00176 while ( 0 ) 00177 00178 #define unput(c) yyunput( c, (yytext_ptr) ) 00179 00180 /* The following is because we cannot portably get our hands on size_t 00181 * (without autoconf's help, which isn't available because we want 00182 * flex-generated scanners to compile on their own). 00183 */ 00184 00185 #ifndef YY_TYPEDEF_YY_SIZE_T 00186 #define YY_TYPEDEF_YY_SIZE_T 00187 typedef unsigned int yy_size_t; 00188 #endif 00189 00190 #ifndef YY_STRUCT_YY_BUFFER_STATE 00191 #define YY_STRUCT_YY_BUFFER_STATE 00192 struct yy_buffer_state 00193 { 00194 FILE *yy_input_file; 00195 00196 char *yy_ch_buf; /* input buffer */ 00197 char *yy_buf_pos; /* current position in input buffer */ 00198 00199 /* Size of input buffer in bytes, not including room for EOB 00200 * characters. 00201 */ 00202 yy_size_t yy_buf_size; 00203 00204 /* Number of characters read into yy_ch_buf, not including EOB 00205 * characters. 00206 */ 00207 int yy_n_chars; 00208 00209 /* Whether we "own" the buffer - i.e., we know we created it, 00210 * and can realloc() it to grow it, and should free() it to 00211 * delete it. 00212 */ 00213 int yy_is_our_buffer; 00214 00215 /* Whether this is an "interactive" input source; if so, and 00216 * if we're using stdio for input, then we want to use getc() 00217 * instead of fread(), to make sure we stop fetching input after 00218 * each newline. 00219 */ 00220 int yy_is_interactive; 00221 00222 /* Whether we're considered to be at the beginning of a line. 00223 * If so, '^' rules will be active on the next match, otherwise 00224 * not. 00225 */ 00226 int yy_at_bol; 00227 00228 int yy_bs_lineno; 00229 int yy_bs_column; 00231 /* Whether to try to fill the input buffer when we reach the 00232 * end of it. 00233 */ 00234 int yy_fill_buffer; 00235 00236 int yy_buffer_status; 00237 00238 #define YY_BUFFER_NEW 0 00239 #define YY_BUFFER_NORMAL 1 00240 /* When an EOF's been seen but there's still some text to process 00241 * then we mark the buffer as YY_EOF_PENDING, to indicate that we 00242 * shouldn't try reading from the input source any more. We might 00243 * still have a bunch of tokens to match, though, because of 00244 * possible backing-up. 00245 * 00246 * When we actually see the EOF, we change the status to "new" 00247 * (via tagYYrestart()), so that the user can continue scanning by 00248 * just pointing tagYYin at a new input file. 00249 */ 00250 #define YY_BUFFER_EOF_PENDING 2 00251 00252 }; 00253 #endif /* !YY_STRUCT_YY_BUFFER_STATE */ 00254 00255 /* Stack of input buffers. */ 00256 static size_t yy_buffer_stack_top = 0; 00257 static size_t yy_buffer_stack_max = 0; 00258 static YY_BUFFER_STATE * yy_buffer_stack = 0; 00260 /* We provide macros for accessing buffer states in case in the 00261 * future we want to put the buffer states in a more general 00262 * "scanner state". 00263 * 00264 * Returns the top of the stack, or NULL. 00265 */ 00266 #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ 00267 ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ 00268 : NULL) 00269 00270 /* Same as previous macro, but useful when we know that the buffer stack is not 00271 * NULL or when we need an lvalue. For internal use only. 00272 */ 00273 #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] 00274 00275 /* yy_hold_char holds the character lost when tagYYtext is formed. */ 00276 static char yy_hold_char; 00277 static int yy_n_chars; /* number of characters read into yy_ch_buf */ 00278 int tagYYleng; 00279 00280 /* Points to current character in buffer. */ 00281 static char *yy_c_buf_p = (char *) 0; 00282 static int yy_init = 0; /* whether we need to initialize */ 00283 static int yy_start = 0; /* start state number */ 00284 00285 /* Flag which is used to allow tagYYwrap()'s to do buffer switches 00286 * instead of setting up a fresh tagYYin. A bit of a hack ... 00287 */ 00288 static int yy_did_buffer_switch_on_eof; 00289 00290 void tagYYrestart (FILE *input_file ); 00291 void tagYY_switch_to_buffer (YY_BUFFER_STATE new_buffer ); 00292 YY_BUFFER_STATE tagYY_create_buffer (FILE *file,int size ); 00293 void tagYY_delete_buffer (YY_BUFFER_STATE b ); 00294 void tagYY_flush_buffer (YY_BUFFER_STATE b ); 00295 void tagYYpush_buffer_state (YY_BUFFER_STATE new_buffer ); 00296 void tagYYpop_buffer_state (void ); 00297 00298 static void tagYYensure_buffer_stack (void ); 00299 static void tagYY_load_buffer_state (void ); 00300 static void tagYY_init_buffer (YY_BUFFER_STATE b,FILE *file ); 00301 00302 #define YY_FLUSH_BUFFER tagYY_flush_buffer(YY_CURRENT_BUFFER ) 00303 00304 YY_BUFFER_STATE tagYY_scan_buffer (char *base,yy_size_t size ); 00305 YY_BUFFER_STATE tagYY_scan_string (yyconst char *yy_str ); 00306 YY_BUFFER_STATE tagYY_scan_bytes (yyconst char *bytes,int len ); 00307 00308 void *tagYYalloc (yy_size_t ); 00309 void *tagYYrealloc (void *,yy_size_t ); 00310 void tagYYfree (void * ); 00311 00312 #define yy_new_buffer tagYY_create_buffer 00313 00314 #define yy_set_interactive(is_interactive) \ 00315 { \ 00316 if ( ! YY_CURRENT_BUFFER ){ \ 00317 tagYYensure_buffer_stack (); \ 00318 YY_CURRENT_BUFFER_LVALUE = \ 00319 tagYY_create_buffer(tagYYin,YY_BUF_SIZE ); \ 00320 } \ 00321 YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ 00322 } 00323 00324 #define yy_set_bol(at_bol) \ 00325 { \ 00326 if ( ! YY_CURRENT_BUFFER ){\ 00327 tagYYensure_buffer_stack (); \ 00328 YY_CURRENT_BUFFER_LVALUE = \ 00329 tagYY_create_buffer(tagYYin,YY_BUF_SIZE ); \ 00330 } \ 00331 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ 00332 } 00333 00334 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) 00335 00336 /* Begin user sect3 */ 00337 00338 typedef unsigned char YY_CHAR; 00339 00340 FILE *tagYYin = (FILE *) 0, *tagYYout = (FILE *) 0; 00341 00342 typedef int yy_state_type; 00343 00344 extern int tagYYlineno; 00345 00346 int tagYYlineno = 1; 00347 00348 extern char *tagYYtext; 00349 #define yytext_ptr tagYYtext 00350 00351 static yy_state_type yy_get_previous_state (void ); 00352 static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); 00353 static int yy_get_next_buffer (void ); 00354 static void yy_fatal_error (yyconst char msg[] ); 00355 00356 /* Done after the current pattern has been matched and before the 00357 * corresponding action - sets up tagYYtext. 00358 */ 00359 #define YY_DO_BEFORE_ACTION \ 00360 (yytext_ptr) = yy_bp; \ 00361 tagYYleng = (size_t) (yy_cp - yy_bp); \ 00362 (yy_hold_char) = *yy_cp; \ 00363 *yy_cp = '\0'; \ 00364 (yy_c_buf_p) = yy_cp; 00365 00366 #define YY_NUM_RULES 124 00367 #define YY_END_OF_BUFFER 125 00368 /* This struct is not used in this scanner, 00369 but its presence is necessary. */ 00370 struct yy_trans_info 00371 { 00372 flex_int32_t yy_verify; 00373 flex_int32_t yy_nxt; 00374 }; 00375 static yyconst flex_int16_t yy_accept[693] = 00376 { 0, 00377 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00378 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00379 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00380 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00381 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00382 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00383 0, 0, 125, 122, 123, 122, 78, 80, 78, 80, 00384 122, 100, 99, 98, 98, 98, 95, 101, 122, 103, 00385 111, 111, 105, 105, 110, 122, 122, 91, 122, 92, 00386 122, 89, 89, 89, 122, 119, 118, 119, 118, 84, 00387 00388 120, 121, 83, 82, 122, 80, 12, 12, 15, 13, 00389 15, 25, 25, 23, 17, 17, 23, 23, 23, 36, 00390 36, 36, 26, 34, 35, 36, 62, 62, 67, 67, 00391 55, 55, 60, 60, 69, 69, 74, 74, 38, 38, 00392 43, 43, 46, 46, 52, 52, 47, 0, 0, 0, 00393 0, 0, 80, 0, 0, 0, 80, 0, 99, 98, 00394 98, 98, 95, 101, 0, 0, 111, 111, 0, 0, 00395 0, 0, 0, 92, 0, 0, 89, 89, 89, 89, 00396 0, 0, 0, 0, 0, 0, 84, 121, 83, 82, 00397 0, 80, 0, 13, 0, 0, 0, 17, 0, 0, 00398 00399 22, 0, 0, 0, 26, 0, 0, 0, 0, 0, 00400 35, 0, 0, 62, 0, 0, 0, 0, 0, 55, 00401 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 00402 0, 38, 0, 0, 0, 0, 0, 46, 0, 0, 00403 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 00404 0, 0, 0, 80, 0, 98, 98, 102, 0, 111, 00405 0, 0, 0, 108, 0, 0, 0, 89, 0, 0, 00406 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00407 0, 20, 0, 0, 0, 0, 0, 33, 0, 0, 00408 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00409 00410 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00411 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 00412 0, 0, 1, 0, 0, 80, 0, 0, 98, 98, 00413 0, 111, 107, 106, 0, 0, 0, 0, 89, 112, 00414 0, 115, 114, 0, 0, 0, 0, 0, 24, 24, 00415 19, 18, 0, 0, 29, 28, 0, 0, 0, 0, 00416 0, 64, 63, 0, 0, 0, 57, 56, 0, 0, 00417 0, 71, 70, 0, 0, 0, 40, 39, 0, 0, 00418 0, 49, 48, 0, 0, 0, 0, 76, 0, 0, 00419 0, 0, 80, 0, 0, 98, 0, 0, 111, 0, 00420 00421 90, 0, 0, 89, 113, 0, 0, 0, 0, 0, 00422 24, 0, 27, 0, 0, 32, 0, 65, 0, 0, 00423 58, 0, 75, 72, 0, 44, 41, 0, 53, 50, 00424 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 00425 0, 0, 0, 0, 111, 109, 0, 87, 89, 117, 00426 116, 81, 0, 14, 24, 21, 31, 30, 0, 66, 00427 0, 59, 73, 42, 51, 0, 0, 0, 0, 0, 00428 0, 0, 80, 0, 0, 0, 0, 0, 111, 0, 00429 0, 89, 0, 24, 0, 61, 0, 0, 0, 0, 00430 0, 0, 80, 0, 0, 0, 0, 104, 0, 86, 00431 00432 89, 0, 24, 68, 0, 0, 77, 0, 0, 0, 00433 6, 0, 94, 0, 0, 0, 0, 88, 0, 0, 00434 88, 88, 88, 89, 89, 88, 11, 24, 0, 0, 00435 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 00436 0, 0, 0, 88, 0, 89, 89, 88, 24, 0, 00437 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 00438 0, 0, 0, 0, 0, 89, 16, 0, 0, 0, 00439 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 00440 0, 89, 0, 0, 0, 0, 8, 0, 0, 0, 00441 0, 0, 88, 0, 88, 0, 88, 88, 89, 0, 00442 00443 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 00444 88, 0, 0, 88, 0, 0, 0, 0, 0, 0, 00445 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 00446 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 00447 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 00448 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00449 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 00450 93, 37, 0, 0, 0, 0, 0, 0, 54, 0, 00451 0, 9, 0, 0, 0, 45, 0, 10, 0, 0, 00452 3, 0 00453 00454 } ; 00455 00456 static yyconst flex_int32_t yy_ec[256] = 00457 { 0, 00458 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 00459 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00460 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00461 1, 4, 5, 6, 7, 1, 8, 9, 1, 10, 00462 11, 12, 13, 14, 15, 16, 17, 18, 19, 18, 00463 20, 18, 18, 18, 18, 18, 18, 21, 22, 23, 00464 24, 25, 1, 26, 27, 27, 28, 27, 27, 29, 00465 27, 27, 30, 27, 27, 27, 27, 27, 27, 27, 00466 27, 31, 27, 27, 27, 27, 27, 27, 27, 27, 00467 32, 1, 33, 8, 34, 1, 35, 36, 37, 38, 00468 00469 39, 40, 41, 42, 43, 27, 27, 44, 45, 46, 00470 47, 48, 49, 50, 51, 52, 53, 27, 54, 55, 00471 56, 27, 1, 57, 1, 58, 1, 1, 1, 1, 00472 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00473 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00474 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00475 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00476 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00477 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00478 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00479 00480 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00481 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00482 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00483 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00484 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00485 1, 1, 1, 1, 1 00486 } ; 00487 00488 static yyconst flex_int32_t yy_meta[59] = 00489 { 0, 00490 1, 1, 2, 3, 4, 5, 1, 4, 6, 1, 00491 1, 4, 7, 8, 7, 9, 10, 11, 11, 11, 00492 12, 1, 13, 10, 14, 3, 15, 15, 15, 15, 00493 15, 4, 4, 11, 15, 15, 15, 15, 15, 15, 00494 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 00495 15, 15, 15, 15, 15, 15, 4, 16 00496 } ; 00497 00498 static yyconst flex_int16_t yy_base[732] = 00499 { 0, 00500 2040, 2039, 0, 36, 57, 58, 81, 0, 139, 0, 00501 197, 255, 60, 61, 313, 0, 371, 0, 429, 0, 00502 485, 0, 209, 210, 543, 0, 59, 66, 601, 0, 00503 212, 213, 215, 222, 659, 0, 715, 0, 771, 0, 00504 829, 0, 214, 223, 887, 913, 939, 0, 995, 1051, 00505 1109, 0, 67, 68, 238, 265, 267, 280, 287, 288, 00506 289, 296, 2041, 2044, 2044, 0, 484, 0, 486, 1994, 00507 2004, 2044, 0, 0, 1994, 1994, 0, 0, 191, 2044, 00508 0, 1988, 2044, 34, 2044, 1996, 1995, 2044, 1998, 0, 00509 224, 192, 253, 0, 2015, 2044, 2044, 684, 2044, 0, 00510 00511 2044, 0, 0, 0, 2014, 1167, 2044, 1995, 2044, 0, 00512 2004, 2044, 2007, 2044, 0, 199, 2016, 1987, 1986, 2044, 00513 502, 685, 2044, 2044, 0, 2007, 0, 0, 2019, 492, 00514 0, 0, 2018, 974, 0, 0, 2017, 976, 0, 0, 00515 2016, 991, 0, 0, 2015, 995, 2044, 1996, 2002, 1964, 00516 2011, 1964, 0, 232, 1970, 1974, 1969, 2006, 0, 0, 00517 1974, 1964, 0, 0, 1982, 1954, 0, 1966, 1952, 1951, 00518 1958, 1947, 1996, 0, 1961, 1975, 452, 466, 0, 468, 00519 1962, 1951, 1943, 1942, 1957, 1939, 0, 0, 0, 0, 00520 1943, 0, 1986, 0, 1966, 1967, 1966, 0, 1934, 1933, 00521 00522 2044, 1940, 1929, 737, 2044, 1937, 1929, 1928, 1943, 1925, 00523 0, 1952, 480, 0, 1941, 1930, 1922, 1921, 1919, 0, 00524 1921, 1925, 1917, 1916, 1914, 0, 1951, 1920, 1912, 1911, 00525 1909, 0, 1946, 1915, 1907, 1906, 1904, 0, 1941, 1910, 00526 1902, 1901, 1899, 2044, 1936, 1915, 1903, 1909, 281, 1943, 00527 1921, 1920, 1921, 1904, 211, 1891, 1902, 2044, 1890, 1889, 00528 1916, 1915, 1897, 2044, 0, 1888, 1917, 674, 1908, 1884, 00529 1909, 1908, 1878, 1881, 1877, 1880, 1908, 1877, 1901, 1900, 00530 1882, 2044, 1872, 1897, 1896, 1866, 1869, 2044, 284, 1865, 00531 1866, 1891, 1890, 1864, 1871, 1861, 1886, 1885, 1859, 1890, 00532 00533 1856, 1881, 1880, 1854, 1885, 1851, 1876, 1875, 1849, 1880, 00534 1846, 1871, 1870, 1844, 1886, 1853, 1853, 1862, 1851, 2044, 00535 1848, 1861, 2044, 1860, 469, 1832, 1837, 1830, 1828, 1874, 00536 1830, 1841, 2044, 2044, 1823, 1849, 1818, 1837, 860, 2044, 00537 1849, 2044, 2044, 1822, 1817, 1829, 1832, 1831, 0, 1817, 00538 2044, 2044, 1812, 1841, 2044, 2044, 1814, 1809, 1835, 1818, 00539 1836, 2044, 2044, 1805, 1816, 1833, 2044, 2044, 1802, 1828, 00540 1830, 2044, 2044, 1799, 1825, 1827, 2044, 2044, 1796, 1822, 00541 1824, 2044, 2044, 1793, 1806, 1799, 1797, 2044, 1797, 1796, 00542 1797, 497, 1795, 1802, 1797, 1831, 1803, 1787, 1780, 1792, 00543 00544 2044, 1774, 1804, 874, 2044, 1806, 1805, 1801, 1780, 1799, 00545 1784, 1783, 2044, 1799, 1798, 2044, 1768, 2044, 1796, 1793, 00546 2044, 1794, 2044, 2044, 1793, 2044, 2044, 1792, 2044, 2044, 00547 1791, 1765, 1772, 1771, 1766, 1773, 1788, 902, 1754, 1754, 00548 1764, 1772, 1763, 1760, 1753, 2044, 1747, 1775, 482, 2044, 00549 2044, 2044, 1758, 2044, 1746, 2044, 2044, 2044, 1771, 2044, 00550 1788, 2044, 2044, 2044, 2044, 1738, 1767, 1767, 1749, 1738, 00551 1763, 502, 1736, 1735, 1761, 1745, 1743, 1757, 1731, 1745, 00552 1744, 966, 1754, 1742, 1770, 2044, 1719, 1751, 1767, 1726, 00553 1720, 704, 1766, 1745, 1762, 1726, 1725, 0, 1719, 2044, 00554 00555 1224, 1753, 1706, 2044, 1703, 1712, 2044, 1725, 1723, 879, 00556 2044, 1739, 2044, 1690, 1669, 1693, 1281, 1034, 1002, 1231, 00557 1254, 2044, 1707, 1018, 1023, 1291, 2044, 1654, 1665, 1666, 00558 1647, 893, 1028, 1630, 1618, 1614, 1646, 1307, 1606, 1591, 00559 1584, 1576, 1575, 691, 1585, 1027, 984, 0, 1574, 1582, 00560 1616, 1578, 1576, 1565, 261, 1566, 1570, 1561, 2044, 1562, 00561 1551, 1554, 1575, 1564, 1530, 1040, 0, 1560, 1541, 1529, 00562 1526, 1545, 699, 1560, 1519, 1525, 1521, 1535, 997, 1064, 00563 1534, 1043, 1549, 1507, 1496, 1541, 1523, 1011, 1540, 1505, 00564 1324, 1310, 1068, 1320, 1069, 1316, 1221, 1347, 1047, 1059, 00565 00566 1315, 1318, 1331, 1320, 1204, 1312, 1314, 2044, 1313, 1316, 00567 1226, 1298, 1297, 1335, 1302, 1299, 1305, 1302, 1292, 1318, 00568 1333, 882, 1286, 2044, 1290, 1312, 1311, 1297, 1288, 1284, 00569 1282, 1301, 2044, 1290, 1277, 1208, 1282, 1269, 1263, 1271, 00570 1273, 1284, 2044, 1303, 1268, 1224, 1260, 1248, 1247, 1253, 00571 1278, 1234, 1234, 979, 1253, 1252, 1232, 1224, 1236, 1231, 00572 1220, 712, 1246, 1245, 1188, 1166, 1131, 1062, 1082, 1077, 00573 2044, 2044, 1031, 1074, 1026, 1016, 1044, 998, 2044, 949, 00574 975, 2044, 925, 861, 730, 2044, 258, 2044, 269, 209, 00575 2044, 2044, 1364, 1380, 1396, 1412, 1428, 1444, 1460, 1476, 00576 00577 1492, 1508, 1524, 195, 524, 1534, 881, 1543, 1088, 1238, 00578 1243, 1552, 1562, 1246, 64, 1568, 1584, 1597, 1603, 1615, 00579 1257, 1631, 1647, 1663, 1679, 1695, 1711, 1727, 1741, 1746, 00580 1752 00581 } ; 00582 00583 static yyconst flex_int16_t yy_def[732] = 00584 { 0, 00585 693, 693, 692, 3, 693, 693, 692, 7, 692, 9, 00586 694, 694, 693, 693, 692, 15, 692, 17, 692, 19, 00587 693, 21, 693, 693, 692, 25, 693, 693, 692, 29, 00588 693, 693, 695, 695, 692, 35, 693, 37, 692, 39, 00589 692, 41, 696, 696, 697, 697, 692, 47, 698, 698, 00590 692, 51, 699, 699, 700, 700, 701, 701, 702, 702, 00591 703, 703, 692, 692, 692, 704, 692, 705, 692, 705, 00592 692, 692, 706, 707, 707, 707, 708, 709, 692, 692, 00593 710, 710, 692, 692, 692, 692, 692, 692, 692, 711, 00594 692, 712, 712, 713, 692, 692, 692, 692, 692, 714, 00595 00596 692, 715, 716, 717, 692, 692, 692, 692, 692, 718, 00597 692, 692, 719, 692, 720, 720, 692, 692, 692, 692, 00598 692, 692, 692, 692, 721, 722, 723, 723, 692, 692, 00599 724, 724, 692, 692, 725, 725, 692, 692, 726, 726, 00600 692, 692, 727, 727, 692, 692, 692, 704, 692, 692, 00601 692, 692, 705, 692, 692, 692, 705, 692, 706, 707, 00602 707, 707, 708, 709, 692, 692, 710, 710, 692, 692, 00603 692, 692, 692, 711, 692, 692, 712, 712, 713, 712, 00604 692, 692, 692, 692, 692, 692, 714, 715, 716, 717, 00605 692, 106, 692, 718, 692, 719, 692, 720, 692, 692, 00606 00607 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 00608 721, 722, 722, 723, 692, 692, 692, 692, 692, 724, 00609 692, 692, 692, 692, 692, 725, 692, 692, 692, 692, 00610 692, 726, 692, 692, 692, 692, 692, 727, 692, 692, 00611 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 00612 692, 692, 728, 705, 692, 707, 707, 692, 692, 710, 00613 692, 692, 692, 692, 729, 692, 692, 712, 692, 692, 00614 692, 692, 692, 692, 692, 692, 692, 730, 692, 692, 00615 692, 692, 692, 692, 692, 692, 692, 692, 722, 692, 00616 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 00617 00618 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 00619 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 00620 692, 692, 692, 728, 728, 705, 692, 692, 707, 707, 00621 692, 710, 692, 692, 692, 729, 692, 692, 712, 692, 00622 692, 692, 692, 692, 692, 692, 692, 692, 730, 730, 00623 692, 692, 692, 692, 692, 692, 692, 692, 722, 692, 00624 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 00625 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 00626 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 00627 692, 728, 705, 692, 692, 707, 692, 692, 710, 692, 00628 00629 692, 692, 692, 712, 692, 692, 692, 692, 692, 692, 00630 730, 692, 692, 692, 692, 692, 692, 692, 692, 692, 00631 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 00632 692, 692, 692, 692, 692, 692, 692, 728, 705, 692, 00633 692, 692, 692, 692, 710, 692, 692, 692, 712, 692, 00634 692, 692, 692, 692, 730, 692, 692, 692, 692, 692, 00635 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 00636 692, 728, 705, 692, 692, 692, 692, 692, 710, 692, 00637 692, 712, 692, 730, 692, 692, 692, 692, 692, 692, 00638 692, 728, 705, 692, 692, 692, 692, 710, 692, 692, 00639 00640 712, 692, 730, 692, 692, 692, 692, 692, 692, 728, 00641 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 00642 712, 692, 521, 712, 712, 713, 692, 730, 692, 692, 00643 692, 692, 728, 692, 692, 692, 692, 692, 692, 692, 00644 692, 692, 692, 712, 692, 712, 712, 713, 730, 692, 00645 692, 692, 692, 692, 728, 692, 692, 692, 692, 692, 00646 692, 692, 692, 692, 692, 712, 730, 692, 692, 692, 00647 692, 692, 728, 692, 692, 692, 692, 692, 692, 692, 00648 692, 712, 692, 692, 692, 692, 692, 728, 692, 692, 00649 692, 692, 692, 692, 692, 692, 692, 692, 712, 692, 00650 00651 692, 692, 692, 692, 728, 692, 692, 692, 692, 692, 00652 692, 692, 692, 692, 692, 692, 692, 692, 692, 731, 00653 692, 728, 692, 692, 692, 692, 692, 692, 692, 692, 00654 692, 692, 692, 692, 692, 728, 692, 692, 692, 692, 00655 692, 692, 692, 692, 692, 728, 692, 692, 692, 692, 00656 692, 692, 692, 728, 692, 692, 692, 692, 692, 692, 00657 692, 728, 692, 692, 692, 692, 692, 692, 692, 728, 00658 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 00659 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 00660 692, 0, 692, 692, 692, 692, 692, 692, 692, 692, 00661 00662 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 00663 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 00664 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 00665 692 00666 } ; 00667 00668 static yyconst flex_int16_t yy_nxt[2103] = 00669 { 0, 00670 64, 64, 65, 64, 64, 64, 64, 64, 66, 64, 00671 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 00672 64, 64, 67, 64, 64, 64, 68, 68, 68, 68, 00673 68, 64, 64, 68, 68, 68, 68, 68, 68, 68, 00674 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 00675 68, 68, 68, 68, 68, 68, 64, 64, 69, 65, 00676 65, 65, 65, 65, 91, 70, 72, 72, 65, 128, 00677 128, 91, 129, 129, 169, 130, 130, 170, 188, 71, 00678 71, 64, 64, 65, 64, 64, 64, 72, 64, 64, 00679 64, 64, 64, 73, 64, 73, 73, 64, 73, 73, 00680 00681 73, 64, 64, 64, 64, 64, 64, 73, 73, 73, 00682 73, 73, 64, 64, 73, 73, 73, 73, 73, 73, 00683 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 00684 73, 73, 73, 73, 73, 73, 73, 64, 64, 64, 00685 64, 65, 64, 64, 64, 64, 64, 64, 64, 64, 00686 64, 64, 64, 64, 64, 64, 74, 74, 74, 64, 00687 64, 64, 64, 64, 64, 74, 75, 76, 74, 74, 00688 64, 64, 74, 74, 74, 74, 74, 74, 74, 74, 00689 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 00690 74, 74, 74, 74, 74, 64, 64, 64, 64, 65, 00691 00692 64, 64, 64, 64, 64, 64, 64, 64, 64, 148, 00693 64, 88, 88, 64, 65, 65, 65, 97, 64, 64, 00694 64, 64, 64, 98, 97, 65, 165, 175, 64, 64, 00695 98, 89, 89, 691, 95, 95, 108, 99, 178, 199, 00696 132, 166, 200, 133, 99, 108, 134, 327, 176, 179, 00697 249, 250, 328, 64, 64, 64, 64, 65, 64, 64, 00698 64, 64, 64, 64, 64, 64, 64, 132, 64, 136, 00699 133, 64, 137, 134, 690, 138, 64, 64, 64, 64, 00700 64, 251, 136, 325, 319, 137, 64, 64, 138, 140, 00701 140, 144, 141, 141, 145, 142, 142, 146, 144, 178, 00702 00703 180, 145, 147, 359, 146, 320, 573, 689, 288, 147, 00704 179, 64, 64, 64, 64, 65, 64, 64, 64, 64, 00705 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 00706 78, 78, 78, 64, 64, 64, 64, 64, 64, 78, 00707 78, 78, 78, 78, 64, 64, 78, 78, 78, 78, 00708 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 00709 78, 78, 78, 78, 78, 78, 78, 78, 78, 64, 00710 64, 64, 64, 65, 64, 64, 64, 64, 64, 64, 00711 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 00712 64, 64, 64, 79, 64, 64, 64, 80, 80, 80, 00713 00714 80, 80, 64, 64, 80, 80, 80, 80, 80, 80, 00715 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 00716 80, 80, 80, 80, 80, 80, 80, 64, 80, 64, 00717 64, 65, 64, 64, 64, 64, 64, 64, 64, 64, 00718 64, 64, 64, 64, 64, 64, 81, 81, 81, 64, 00719 64, 64, 64, 64, 64, 81, 81, 81, 81, 81, 00720 64, 64, 81, 81, 81, 81, 81, 81, 81, 81, 00721 81, 81, 81, 81, 81, 82, 81, 81, 81, 81, 00722 81, 81, 81, 81, 81, 64, 64, 65, 149, 83, 00723 149, 325, 83, 84, 83, 83, 83, 83, 178, 83, 00724 00725 150, 83, 150, 204, 288, 204, 268, 85, 83, 179, 00726 392, 205, 178, 180, 178, 438, 83, 83, 151, 325, 00727 151, 289, 86, 179, 325, 179, 216, 154, 482, 155, 00728 87, 152, 217, 152, 153, 218, 492, 156, 153, 179, 00729 219, 83, 83, 64, 64, 65, 64, 64, 64, 64, 00730 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 00731 90, 90, 90, 64, 64, 64, 64, 64, 64, 90, 00732 90, 90, 90, 90, 64, 64, 90, 90, 90, 90, 00733 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 00734 90, 90, 90, 90, 90, 90, 90, 90, 90, 64, 00735 00736 64, 64, 64, 65, 64, 64, 64, 64, 64, 64, 00737 64, 64, 64, 92, 64, 92, 92, 64, 92, 92, 00738 92, 92, 64, 64, 64, 64, 64, 92, 92, 92, 00739 92, 92, 64, 64, 92, 92, 92, 92, 92, 92, 00740 92, 92, 92, 92, 92, 92, 92, 93, 92, 92, 00741 92, 92, 92, 92, 92, 92, 92, 64, 94, 64, 00742 64, 65, 64, 64, 64, 64, 64, 64, 64, 64, 00743 64, 64, 64, 64, 64, 64, 100, 100, 100, 64, 00744 64, 64, 64, 64, 64, 100, 100, 100, 100, 100, 00745 64, 64, 100, 100, 100, 100, 100, 100, 100, 100, 00746 00747 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 00748 100, 100, 100, 100, 100, 64, 64, 65, 182, 206, 00749 178, 325, 588, 339, 183, 207, 325, 184, 208, 185, 00750 209, 179, 186, 210, 325, 688, 670, 178, 204, 101, 00751 204, 102, 102, 102, 102, 102, 205, 510, 179, 102, 00752 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 00753 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 00754 102, 64, 64, 65, 64, 64, 64, 64, 64, 64, 00755 64, 64, 64, 64, 64, 64, 64, 64, 103, 103, 00756 103, 103, 64, 64, 64, 64, 64, 103, 103, 103, 00757 00758 103, 103, 64, 64, 103, 103, 103, 103, 103, 103, 00759 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 00760 103, 103, 103, 103, 103, 103, 103, 64, 103, 104, 00761 104, 65, 104, 104, 104, 104, 104, 104, 104, 104, 00762 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 00763 104, 105, 104, 104, 104, 106, 106, 106, 106, 106, 00764 104, 104, 106, 106, 106, 106, 106, 106, 106, 106, 00765 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 00766 106, 106, 106, 106, 106, 104, 104, 109, 109, 65, 00767 109, 160, 111, 109, 404, 160, 109, 109, 553, 687, 00768 00769 109, 325, 109, 109, 325, 472, 178, 109, 109, 109, 00770 109, 109, 109, 109, 109, 65, 109, 179, 111, 109, 00771 178, 533, 109, 109, 325, 449, 109, 636, 109, 109, 00772 686, 179, 554, 109, 109, 109, 109, 109, 109, 112, 00773 112, 65, 112, 112, 112, 112, 112, 112, 112, 112, 00774 112, 112, 112, 112, 112, 112, 113, 113, 113, 112, 00775 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 00776 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, 00777 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 00778 113, 113, 113, 113, 113, 112, 112, 65, 685, 115, 00779 00780 684, 325, 115, 116, 117, 594, 115, 115, 222, 115, 00781 228, 115, 178, 180, 223, 501, 229, 224, 115, 230, 00782 595, 683, 225, 179, 231, 234, 115, 115, 662, 240, 00783 178, 235, 118, 325, 236, 241, 541, 544, 242, 237, 00784 119, 179, 542, 243, 522, 543, 522, 605, 522, 682, 00785 325, 115, 115, 65, 681, 115, 546, 522, 115, 116, 00786 117, 547, 115, 115, 178, 115, 522, 115, 555, 178, 00787 566, 680, 596, 178, 115, 179, 610, 594, 582, 679, 00788 179, 678, 115, 115, 179, 544, 178, 597, 118, 178, 00789 522, 611, 595, 178, 599, 615, 119, 179, 164, 325, 00790 00791 179, 616, 164, 617, 179, 677, 676, 115, 115, 120, 00792 121, 65, 121, 120, 120, 120, 120, 122, 123, 124, 00793 120, 120, 120, 120, 120, 120, 125, 125, 125, 120, 00794 120, 126, 120, 120, 120, 125, 125, 125, 125, 125, 00795 120, 120, 125, 125, 125, 125, 125, 125, 125, 125, 00796 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 00797 125, 125, 125, 125, 125, 120, 120, 190, 190, 675, 00798 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 00799 190, 190, 190, 190, 192, 192, 192, 190, 190, 674, 00800 190, 190, 190, 192, 192, 192, 192, 192, 190, 190, 00801 00802 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 00803 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 00804 192, 192, 192, 190, 190, 517, 325, 517, 518, 596, 00805 325, 518, 519, 520, 610, 518, 521, 522, 523, 673, 00806 518, 522, 622, 522, 597, 522, 325, 518, 167, 611, 00807 672, 671, 167, 174, 522, 520, 187, 174, 669, 646, 00808 187, 524, 654, 522, 522, 668, 544, 211, 544, 525, 00809 178, 211, 667, 666, 665, 664, 663, 522, 661, 660, 00810 518, 526, 517, 659, 517, 518, 522, 522, 518, 519, 00811 520, 658, 518, 518, 522, 538, 657, 518, 656, 655, 00812 00813 178, 522, 653, 548, 518, 548, 652, 651, 650, 649, 00814 522, 179, 520, 648, 522, 545, 611, 522, 539, 522, 00815 647, 522, 645, 522, 644, 643, 540, 642, 641, 640, 00816 522, 639, 597, 595, 638, 637, 635, 518, 518, 522, 00817 634, 632, 631, 630, 629, 628, 614, 522, 627, 626, 00818 625, 522, 624, 623, 621, 620, 619, 618, 614, 613, 00819 612, 609, 608, 522, 64, 64, 64, 64, 64, 64, 00820 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 00821 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 00822 77, 77, 77, 77, 77, 77, 96, 96, 96, 96, 00823 00824 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 00825 96, 96, 107, 107, 107, 107, 107, 107, 107, 107, 00826 107, 107, 107, 107, 107, 107, 107, 107, 110, 110, 00827 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 00828 110, 110, 110, 110, 114, 114, 114, 114, 114, 114, 00829 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 00830 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 00831 127, 127, 127, 127, 127, 127, 131, 131, 131, 131, 00832 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 00833 131, 131, 135, 135, 135, 135, 135, 135, 135, 135, 00834 00835 135, 135, 135, 135, 135, 135, 135, 135, 139, 139, 00836 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 00837 139, 139, 139, 139, 143, 143, 143, 143, 143, 143, 00838 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 00839 159, 607, 159, 606, 159, 604, 603, 602, 159, 163, 00840 601, 163, 600, 163, 163, 598, 593, 163, 177, 592, 00841 177, 591, 177, 177, 590, 589, 177, 177, 179, 587, 00842 179, 586, 179, 179, 585, 584, 179, 179, 189, 189, 00843 583, 581, 189, 189, 190, 580, 190, 190, 190, 190, 00844 190, 190, 190, 190, 190, 190, 579, 190, 190, 190, 00845 00846 194, 578, 194, 194, 522, 577, 576, 194, 575, 574, 00847 572, 194, 194, 196, 196, 571, 570, 196, 198, 569, 00848 198, 198, 568, 567, 198, 565, 564, 563, 562, 561, 00849 198, 212, 212, 212, 212, 212, 212, 212, 212, 212, 00850 212, 212, 212, 212, 560, 212, 212, 214, 214, 214, 00851 214, 559, 558, 214, 214, 214, 214, 214, 214, 214, 00852 214, 214, 214, 220, 220, 220, 220, 557, 556, 220, 00853 220, 220, 220, 220, 220, 220, 220, 220, 220, 226, 00854 226, 226, 226, 552, 551, 226, 226, 226, 226, 226, 00855 226, 226, 226, 226, 226, 232, 232, 232, 232, 550, 00856 00857 549, 232, 232, 232, 232, 232, 232, 232, 232, 232, 00858 232, 238, 238, 238, 238, 545, 537, 238, 536, 238, 00859 238, 238, 238, 238, 238, 238, 238, 324, 535, 324, 00860 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 00861 324, 324, 324, 336, 534, 336, 532, 336, 531, 336, 00862 336, 336, 336, 530, 529, 336, 349, 528, 527, 516, 00863 349, 349, 633, 515, 633, 514, 633, 513, 512, 511, 00864 509, 508, 507, 506, 505, 504, 503, 502, 500, 499, 00865 498, 258, 497, 496, 495, 494, 493, 320, 491, 490, 00866 489, 488, 487, 486, 485, 484, 483, 481, 480, 479, 00867 00868 478, 477, 476, 475, 474, 473, 471, 470, 469, 468, 00869 467, 466, 465, 464, 463, 462, 461, 460, 459, 458, 00870 457, 456, 455, 454, 453, 452, 451, 450, 448, 447, 00871 446, 445, 444, 443, 442, 441, 440, 439, 437, 436, 00872 435, 434, 433, 432, 431, 430, 429, 428, 427, 426, 00873 425, 424, 423, 422, 421, 420, 419, 418, 417, 416, 00874 415, 414, 413, 412, 411, 410, 409, 408, 407, 406, 00875 405, 403, 402, 401, 400, 399, 398, 397, 396, 395, 00876 394, 393, 325, 391, 390, 389, 388, 387, 386, 385, 00877 384, 383, 382, 381, 380, 379, 378, 377, 376, 375, 00878 00879 374, 373, 372, 371, 370, 369, 368, 367, 366, 365, 00880 364, 363, 362, 361, 360, 358, 357, 356, 355, 354, 00881 353, 352, 351, 350, 348, 347, 346, 345, 344, 343, 00882 342, 341, 340, 338, 337, 335, 334, 333, 332, 331, 00883 330, 329, 326, 325, 323, 322, 321, 318, 317, 316, 00884 315, 314, 313, 312, 311, 310, 309, 308, 307, 306, 00885 305, 304, 303, 302, 301, 300, 299, 298, 297, 296, 00886 295, 294, 293, 292, 291, 290, 288, 287, 286, 285, 00887 284, 283, 282, 281, 280, 279, 278, 197, 277, 276, 00888 275, 274, 273, 272, 271, 270, 269, 267, 266, 265, 00889 00890 264, 263, 262, 261, 260, 259, 258, 257, 256, 255, 00891 254, 253, 252, 248, 247, 246, 245, 244, 239, 233, 00892 227, 221, 215, 213, 203, 202, 201, 197, 195, 193, 00893 191, 181, 173, 172, 171, 168, 162, 161, 158, 157, 00894 692, 65, 65, 63, 692, 692, 692, 692, 692, 692, 00895 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 00896 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 00897 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 00898 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 00899 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 00900 00901 692, 692 00902 } ; 00903 00904 static yyconst flex_int16_t yy_chk[2103] = 00905 { 0, 00906 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 00907 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 00908 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 00909 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 00910 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 00911 3, 3, 3, 3, 3, 3, 3, 3, 4, 5, 00912 6, 27, 13, 14, 27, 4, 13, 14, 28, 53, 00913 54, 28, 53, 54, 84, 53, 54, 84, 715, 5, 00914 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 00915 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 00916 00917 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 00918 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 00919 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 00920 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, 00921 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 00922 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 00923 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 00924 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 00925 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 00926 9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 00927 00928 11, 11, 11, 11, 11, 11, 11, 11, 11, 704, 00929 11, 23, 24, 11, 31, 32, 43, 33, 11, 11, 00930 11, 11, 11, 33, 34, 44, 79, 91, 11, 11, 00931 34, 23, 24, 690, 31, 32, 43, 33, 92, 116, 00932 55, 79, 116, 55, 34, 44, 55, 255, 91, 92, 00933 154, 154, 255, 11, 11, 12, 12, 12, 12, 12, 00934 12, 12, 12, 12, 12, 12, 12, 56, 12, 57, 00935 56, 12, 57, 56, 689, 57, 12, 12, 12, 12, 00936 12, 154, 58, 555, 249, 58, 12, 12, 58, 59, 00937 60, 61, 59, 60, 61, 59, 60, 61, 62, 93, 00938 00939 93, 62, 61, 289, 62, 249, 555, 687, 289, 62, 00940 93, 12, 12, 15, 15, 15, 15, 15, 15, 15, 00941 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 00942 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 00943 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 00944 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 00945 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 00946 15, 17, 17, 17, 17, 17, 17, 17, 17, 17, 00947 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 00948 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 00949 00950 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 00951 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 00952 17, 17, 17, 17, 17, 17, 17, 17, 17, 19, 00953 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 00954 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 00955 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 00956 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 00957 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 00958 19, 19, 19, 19, 19, 19, 19, 21, 67, 21, 00959 69, 325, 21, 21, 21, 21, 21, 21, 177, 21, 00960 00961 67, 21, 69, 121, 213, 121, 180, 21, 21, 177, 00962 325, 121, 178, 178, 180, 392, 21, 21, 67, 392, 00963 69, 213, 21, 178, 472, 180, 130, 69, 449, 69, 00964 21, 67, 130, 69, 705, 130, 472, 69, 705, 449, 00965 130, 21, 21, 25, 25, 25, 25, 25, 25, 25, 00966 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 00967 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 00968 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 00969 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 00970 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 00971 00972 25, 29, 29, 29, 29, 29, 29, 29, 29, 29, 00973 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 00974 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 00975 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 00976 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 00977 29, 29, 29, 29, 29, 29, 29, 29, 29, 35, 00978 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 00979 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 00980 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 00981 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 00982 00983 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 00984 35, 35, 35, 35, 35, 35, 35, 37, 98, 122, 00985 268, 573, 573, 268, 98, 122, 492, 98, 122, 98, 00986 122, 268, 98, 122, 662, 685, 662, 544, 204, 37, 00987 204, 37, 37, 37, 37, 37, 204, 492, 544, 37, 00988 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 00989 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 00990 37, 39, 39, 39, 39, 39, 39, 39, 39, 39, 00991 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 00992 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 00993 00994 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 00995 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 00996 39, 39, 39, 39, 39, 39, 39, 39, 39, 41, 00997 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 00998 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 00999 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 01000 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 01001 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 01002 41, 41, 41, 41, 41, 41, 41, 45, 45, 45, 01003 45, 707, 45, 45, 339, 707, 45, 45, 532, 684, 01004 01005 45, 510, 45, 45, 622, 438, 339, 45, 45, 45, 01006 45, 45, 45, 46, 46, 46, 46, 339, 46, 46, 01007 404, 510, 46, 46, 438, 404, 46, 622, 46, 46, 01008 683, 404, 532, 46, 46, 46, 46, 46, 46, 47, 01009 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 01010 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 01011 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 01012 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 01013 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 01014 47, 47, 47, 47, 47, 47, 47, 49, 681, 49, 01015 01016 680, 654, 49, 49, 49, 579, 49, 49, 134, 49, 01017 138, 49, 482, 482, 134, 482, 138, 134, 49, 138, 01018 579, 678, 134, 482, 138, 142, 49, 49, 654, 146, 01019 547, 142, 49, 588, 142, 146, 519, 547, 146, 142, 01020 49, 547, 519, 146, 518, 519, 518, 588, 518, 677, 01021 533, 49, 49, 50, 676, 50, 524, 518, 50, 50, 01022 50, 525, 50, 50, 524, 50, 518, 50, 533, 525, 01023 546, 675, 580, 546, 50, 524, 593, 595, 566, 674, 01024 525, 673, 50, 50, 546, 599, 566, 580, 50, 582, 01025 518, 593, 595, 599, 582, 600, 50, 566, 709, 670, 01026 01027 582, 600, 709, 600, 599, 669, 668, 50, 50, 51, 01028 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 01029 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 01030 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 01031 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 01032 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 01033 51, 51, 51, 51, 51, 51, 51, 106, 106, 667, 01034 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 01035 106, 106, 106, 106, 106, 106, 106, 106, 106, 666, 01036 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 01037 01038 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 01039 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 01040 106, 106, 106, 106, 106, 501, 605, 501, 501, 597, 01041 636, 501, 501, 501, 611, 501, 501, 501, 501, 665, 01042 501, 520, 605, 520, 597, 520, 646, 501, 710, 611, 01043 664, 663, 710, 711, 520, 501, 714, 711, 661, 636, 01044 714, 501, 646, 520, 521, 660, 521, 721, 521, 501, 01045 501, 721, 659, 658, 657, 656, 655, 521, 653, 652, 01046 501, 501, 517, 651, 517, 517, 521, 520, 517, 517, 01047 517, 650, 517, 517, 517, 517, 649, 517, 648, 647, 01048 01049 521, 526, 645, 526, 517, 526, 644, 642, 641, 640, 01050 521, 521, 517, 639, 526, 538, 638, 538, 517, 538, 01051 637, 538, 635, 526, 634, 632, 517, 631, 630, 629, 01052 538, 628, 627, 626, 625, 623, 621, 517, 517, 538, 01053 620, 619, 618, 617, 616, 615, 614, 526, 613, 612, 01054 610, 609, 607, 606, 604, 603, 602, 601, 598, 596, 01055 594, 592, 591, 538, 693, 693, 693, 693, 693, 693, 01056 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 01057 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 01058 694, 694, 694, 694, 694, 694, 695, 695, 695, 695, 01059 01060 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 01061 695, 695, 696, 696, 696, 696, 696, 696, 696, 696, 01062 696, 696, 696, 696, 696, 696, 696, 696, 697, 697, 01063 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 01064 697, 697, 697, 697, 698, 698, 698, 698, 698, 698, 01065 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 01066 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 01067 699, 699, 699, 699, 699, 699, 700, 700, 700, 700, 01068 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 01069 700, 700, 701, 701, 701, 701, 701, 701, 701, 701, 01070 01071 701, 701, 701, 701, 701, 701, 701, 701, 702, 702, 01072 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 01073 702, 702, 702, 702, 703, 703, 703, 703, 703, 703, 01074 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 01075 706, 590, 706, 589, 706, 587, 586, 585, 706, 708, 01076 584, 708, 583, 708, 708, 581, 578, 708, 712, 577, 01077 712, 576, 712, 712, 575, 574, 712, 712, 713, 572, 01078 713, 571, 713, 713, 570, 569, 713, 713, 716, 716, 01079 568, 565, 716, 716, 717, 564, 717, 717, 717, 717, 01080 717, 717, 717, 717, 717, 717, 563, 717, 717, 717, 01081 01082 718, 562, 718, 718, 561, 560, 558, 718, 557, 556, 01083 554, 718, 718, 719, 719, 553, 552, 719, 720, 551, 01084 720, 720, 550, 549, 720, 545, 543, 542, 541, 540, 01085 720, 722, 722, 722, 722, 722, 722, 722, 722, 722, 01086 722, 722, 722, 722, 539, 722, 722, 723, 723, 723, 01087 723, 537, 536, 723, 723, 723, 723, 723, 723, 723, 01088 723, 723, 723, 724, 724, 724, 724, 535, 534, 724, 01089 724, 724, 724, 724, 724, 724, 724, 724, 724, 725, 01090 725, 725, 725, 531, 530, 725, 725, 725, 725, 725, 01091 725, 725, 725, 725, 725, 726, 726, 726, 726, 529, 01092 01093 528, 726, 726, 726, 726, 726, 726, 726, 726, 726, 01094 726, 727, 727, 727, 727, 523, 516, 727, 515, 727, 01095 727, 727, 727, 727, 727, 727, 727, 728, 514, 728, 01096 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 01097 728, 728, 728, 729, 512, 729, 509, 729, 508, 729, 01098 729, 729, 729, 506, 505, 729, 730, 503, 502, 499, 01099 730, 730, 731, 497, 731, 496, 731, 495, 494, 493, 01100 491, 490, 489, 488, 487, 485, 484, 483, 481, 480, 01101 479, 478, 477, 476, 475, 474, 473, 471, 470, 469, 01102 468, 467, 466, 461, 459, 455, 453, 448, 447, 445, 01103 01104 444, 443, 442, 441, 440, 439, 437, 436, 435, 434, 01105 433, 432, 431, 428, 425, 422, 420, 419, 417, 415, 01106 414, 412, 411, 410, 409, 408, 407, 406, 403, 402, 01107 400, 399, 398, 397, 396, 395, 394, 393, 391, 390, 01108 389, 387, 386, 385, 384, 381, 380, 379, 376, 375, 01109 374, 371, 370, 369, 366, 365, 364, 361, 360, 359, 01110 358, 357, 354, 353, 350, 348, 347, 346, 345, 344, 01111 341, 338, 337, 336, 335, 332, 331, 330, 329, 328, 01112 327, 326, 324, 322, 321, 319, 318, 317, 316, 315, 01113 314, 313, 312, 311, 310, 309, 308, 307, 306, 305, 01114 01115 304, 303, 302, 301, 300, 299, 298, 297, 296, 295, 01116 294, 293, 292, 291, 290, 287, 286, 285, 284, 283, 01117 281, 280, 279, 278, 277, 276, 275, 274, 273, 272, 01118 271, 270, 269, 267, 266, 263, 262, 261, 260, 259, 01119 257, 256, 254, 253, 252, 251, 250, 248, 247, 246, 01120 245, 243, 242, 241, 240, 239, 237, 236, 235, 234, 01121 233, 231, 230, 229, 228, 227, 225, 224, 223, 222, 01122 221, 219, 218, 217, 216, 215, 212, 210, 209, 208, 01123 207, 206, 203, 202, 200, 199, 197, 196, 195, 193, 01124 191, 186, 185, 184, 183, 182, 181, 176, 175, 173, 01125 01126 172, 171, 170, 169, 168, 166, 165, 162, 161, 158, 01127 157, 156, 155, 152, 151, 150, 149, 148, 145, 141, 01128 137, 133, 129, 126, 119, 118, 117, 113, 111, 108, 01129 105, 95, 89, 87, 86, 82, 76, 75, 71, 70, 01130 63, 2, 1, 692, 692, 692, 692, 692, 692, 692, 01131 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 01132 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 01133 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 01134 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 01135 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, 01136 01137 692, 692 01138 } ; 01139 01140 static yy_state_type yy_last_accepting_state; 01141 static char *yy_last_accepting_cpos; 01142 01143 extern int tagYY_flex_debug; 01144 int tagYY_flex_debug = 0; 01145 01146 /* The intent behind this definition is that it'll catch 01147 * any uses of REJECT which flex missed. 01148 */ 01149 #define REJECT reject_used_but_not_detected 01150 #define yymore() yymore_used_but_not_detected 01151 #define YY_MORE_ADJ 0 01152 #define YY_RESTORE_YY_MORE_OFFSET 01153 char *tagYYtext; 01154 #line 1 "doxytag.l" 01155 /****************************************************************************** 01156 * 01157 * $Id: doxytag.l,v 1.27 2001/03/19 19:27:40 root Exp $ 01158 * 01159 * Copyright (C) 1997-2008 by Dimitri van Heesch. 01160 * 01161 * Permission to use, copy, modify, and distribute this software and its 01162 * documentation under the terms of the GNU General Public License is hereby 01163 * granted. No representations are made about the suitability of this software 01164 * for any purpose. It is provided "as is" without express or implied warranty. 01165 * See the GNU General Public License for more details. 01166 * 01167 * Documents produced by Doxygen are derivative works derived from the 01168 * input used in their production; they are not affected by this license. 01169 * 01170 */ 01171 #line 19 "doxytag.l" 01172 /* 01173 * includes 01174 */ 01175 #include <stdio.h> 01176 #include <assert.h> 01177 #include <ctype.h> 01178 01179 #include "qtbc.h" 01180 #include <qstrlist.h> 01181 #include <qfileinfo.h> 01182 #include <qfile.h> 01183 #include <qdict.h> 01184 #include <qtextstream.h> 01185 #include <qdir.h> 01186 01187 #include "version.h" 01188 //#include "suffixtree.h" 01189 //#include "searchindex.h" 01190 #include "logos.h" 01191 01192 static QCString convertToXML(const char *s) 01193 { 01194 QCString result; 01195 if (s==0) return result; 01196 const char *p=s; 01197 char c; 01198 while ((c=*p++)) 01199 { 01200 switch (c) 01201 { 01202 case '<': result+="<"; break; 01203 case '>': result+=">"; break; 01204 case '&': result+="&"; break; 01205 case '\'': result+="'"; break; 01206 case '"': result+="""; break; 01207 default: result+=c; break; 01208 } 01209 } 01210 return result; 01211 } 01212 01213 struct MemberDef 01214 { 01215 QCString name; 01216 QCString anchor; 01217 QCString args; 01218 }; 01219 01220 struct ClassDef 01221 { 01222 QCString name; 01223 QStrList bases; 01224 QCString fileName; 01225 bool isFile; 01226 QList<MemberDef> memberList; 01227 }; 01228 01229 QList<ClassDef> classList; 01230 QDict<ClassDef> classDict(1009); 01231 QList<ClassDef> fileList; 01232 QDict<ClassDef> fileDict(1009); 01233 01234 static bool genTag; 01235 static bool genIndex; 01236 01237 static QStrList bases; 01238 static QCString inputString; 01239 static int inputPosition; 01240 static QCString yyFileName; 01241 static int yyLineNr; 01242 static QCString classFile; 01243 static QCString memberRef; 01244 static QCString memberName; 01245 static QCString memberArgs; 01246 static QCString className; 01247 static QCString baseName; 01248 static QCString docBaseLink; 01249 static QCString docAnchor; 01250 static QCString docRefName; 01251 static bool nameBug; 01252 //static SearchIndex searchIndex; 01253 01254 #define YY_NEVER_INTERACTIVE 1 01255 01256 /* ----------------------------------------------------------------- 01257 */ 01258 #undef YY_INPUT 01259 #define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size); 01260 01261 static int yyread(char *buf,int max_size) 01262 { 01263 int c=0; 01264 while( c < max_size && inputString[inputPosition] ) 01265 { 01266 *buf = inputString[inputPosition++] ; 01267 c++; buf++; 01268 } 01269 return c; 01270 } 01271 01272 static void addClass(const char *clName) 01273 { 01274 if (classDict[clName]==0) 01275 { 01276 //printf("addClass(%s)\n",clName); 01277 ClassDef *cd=new ClassDef; 01278 cd->name=clName; 01279 cd->fileName=yyFileName; 01280 cd->isFile=FALSE; 01281 classList.append(cd); 01282 classDict.insert(clName,cd); 01283 } 01284 } 01285 01286 static void addFile(const char *fName) 01287 { 01288 if (classDict[fName]==0) 01289 { 01290 ClassDef *fd=new ClassDef; 01291 fd->name=fName; 01292 fd->fileName=yyFileName; 01293 fd->isFile=TRUE; 01294 classList.append(fd); 01295 classDict.insert(fName,fd); 01296 } 01297 } 01298 01299 static void addBases(const char *clName) 01300 { 01301 ClassDef *cd=0; 01302 if (clName && (cd=classDict[clName])) cd->bases=bases; 01303 } 01304 01305 static void addMember(const char *memName,const char *memRef,const char *memArgs) 01306 { 01307 //printf("addMember(%s,%s,%s)\n",memName,memRef,memArgs); 01308 ClassDef *cd=classList.last(); 01309 if (cd) 01310 { 01311 MemberDef *md; 01312 md=new MemberDef; 01313 md->name=memName; 01314 md->anchor=memRef; 01315 md->args=memArgs; 01316 cd->memberList.append(md); 01317 } 01318 else 01319 { 01320 //printf("Warning: found member %s %s but not class was found to insert it!\n", 01321 // memName,memArgs); 01322 } 01323 } 01324 01325 static void addReference() 01326 { 01327 //printf("addReference() key: %s ref:%s\n", 01328 // docRefName.data(),(docBaseLink+"#"+docAnchor).data()); 01329 //if (genIndex && !docRefName.isEmpty() && !docBaseLink.isEmpty()) 01330 //{ 01331 // if (docAnchor.isEmpty()) 01332 // searchIndex.addReference(docRefName,docBaseLink); 01333 // else 01334 // searchIndex.addReference(docRefName,docBaseLink+"#"+docAnchor); 01335 // searchIndex.addWord(docRefName,docRefName,TRUE); 01336 //} 01337 } 01338 01339 QCString unhtmlify(const char *str) 01340 { 01341 QCString result; 01342 const char *p=str; 01343 char c; 01344 while ((c=*p)!='\0') 01345 { 01346 if (c!='&') { result+=c; p++; } 01347 else 01348 { 01349 if (strncmp(p,"&",5)==0) { result+='&'; p+=5; } 01350 else if (strncmp(p,"<",4)==0) { result+='<'; p+=4; } 01351 else if (strncmp(p,">",4)==0) { result+='>'; p+=4; } 01352 else if (strncmp(p,""",6)==0) { result+='"'; p+=4; } 01353 else /* should not happen */ { result+='&'; p++; } 01354 } 01355 } 01356 return result; 01357 } 01358 01359 01360 01361 01362 01363 01364 01365 01366 01367 01368 01369 01370 01371 01372 01373 01374 01375 01376 01377 01378 01379 01380 01381 01382 01383 01384 01385 01386 01387 01388 01389 #line 1390 "<stdout>" 01390 01391 #define INITIAL 0 01392 #define Start 1 01393 #define SearchClassFile 2 01394 #define ReadClassFile 3 01395 #define CheckClassName 4 01396 #define ReadClassName 5 01397 #define SearchMemberRef 6 01398 #define ReadMemberRef 7 01399 #define SearchMemberName 8 01400 #define ReadMemberName 9 01401 #define ReadOperator 10 01402 #define SearchBaseClasses 11 01403 #define ReadBaseClass 12 01404 #define SearchRefName 13 01405 #define ReadRefName 14 01406 #define SearchArgs 15 01407 #define ReadArgs 16 01408 #define SearchWords 17 01409 #define SkipHTMLTag 18 01410 #define CheckConstructor 19 01411 #define SkipPreformated 20 01412 #define Qt3ReadType 21 01413 #define Qt3ReadAnchor 22 01414 #define Qt3ReadName 23 01415 #define Qt3ReadOperator 24 01416 #define Qt3ReadArgs 25 01417 #define DoxReadAnchor 26 01418 #define DoxReadName 27 01419 #define DoxReadArgs 28 01420 #define DoxClassName 29 01421 #define DoxClassBase 30 01422 01423 #ifndef YY_NO_UNISTD_H 01424 /* Special case for "unistd.h", since it is non-ANSI. We include it way 01425 * down here because we want the user's section 1 to have been scanned first. 01426 * The user has a chance to override it with an option. 01427 */ 01428 #include <unistd.h> 01429 #endif 01430 01431 #ifndef YY_EXTRA_TYPE 01432 #define YY_EXTRA_TYPE void * 01433 #endif 01434 01435 static int yy_init_globals (void ); 01436 01437 /* Macros after this point can all be overridden by user definitions in 01438 * section 1. 01439 */ 01440 01441 #ifndef YY_SKIP_YYWRAP 01442 #ifdef __cplusplus 01443 extern "C" int tagYYwrap (void ); 01444 #else 01445 extern int tagYYwrap (void ); 01446 #endif 01447 #endif 01448 01449 static void yyunput (int c,char *buf_ptr ); 01450 01451 #ifndef yytext_ptr 01452 static void yy_flex_strncpy (char *,yyconst char *,int ); 01453 #endif 01454 01455 #ifdef YY_NEED_STRLEN 01456 static int yy_flex_strlen (yyconst char * ); 01457 #endif 01458 01459 #ifndef YY_NO_INPUT 01460 01461 #ifdef __cplusplus 01462 static int yyinput (void ); 01463 #else 01464 static int input (void ); 01465 #endif 01466 01467 #endif 01468 01469 /* Amount of stuff to slurp up with each read. */ 01470 #ifndef YY_READ_BUF_SIZE 01471 #define YY_READ_BUF_SIZE 8192 01472 #endif 01473 01474 /* Copy whatever the last rule matched to the standard output. */ 01475 #ifndef ECHO 01476 /* This used to be an fputs(), but since the string might contain NUL's, 01477 * we now use fwrite(). 01478 */ 01479 #define ECHO (void) fwrite( tagYYtext, tagYYleng, 1, tagYYout ) 01480 #endif 01481 01482 /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, 01483 * is returned in "result". 01484 */ 01485 #ifndef YY_INPUT 01486 #define YY_INPUT(buf,result,max_size) \ 01487 if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ 01488 { \ 01489 int c = '*'; \ 01490 size_t n; \ 01491 for ( n = 0; n < max_size && \ 01492 (c = getc( tagYYin )) != EOF && c != '\n'; ++n ) \ 01493 buf[n] = (char) c; \ 01494 if ( c == '\n' ) \ 01495 buf[n++] = (char) c; \ 01496 if ( c == EOF && ferror( tagYYin ) ) \ 01497 YY_FATAL_ERROR( "input in flex scanner failed" ); \ 01498 result = n; \ 01499 } \ 01500 else \ 01501 { \ 01502 errno=0; \ 01503 while ( (result = fread(buf, 1, max_size, tagYYin))==0 && ferror(tagYYin)) \ 01504 { \ 01505 if( errno != EINTR) \ 01506 { \ 01507 YY_FATAL_ERROR( "input in flex scanner failed" ); \ 01508 break; \ 01509 } \ 01510 errno=0; \ 01511 clearerr(tagYYin); \ 01512 } \ 01513 }\ 01514 \ 01515 01516 #endif 01517 01518 /* No semi-colon after return; correct usage is to write "yyterminate();" - 01519 * we don't want an extra ';' after the "return" because that will cause 01520 * some compilers to complain about unreachable statements. 01521 */ 01522 #ifndef yyterminate 01523 #define yyterminate() return YY_NULL 01524 #endif 01525 01526 /* Number of entries by which start-condition stack grows. */ 01527 #ifndef YY_START_STACK_INCR 01528 #define YY_START_STACK_INCR 25 01529 #endif 01530 01531 /* Report a fatal error. */ 01532 #ifndef YY_FATAL_ERROR 01533 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) 01534 #endif 01535 01536 /* end tables serialization structures and prototypes */ 01537 01538 /* Default declaration of generated scanner - a define so the user can 01539 * easily add parameters. 01540 */ 01541 #ifndef YY_DECL 01542 #define YY_DECL_IS_OURS 1 01543 01544 extern int tagYYlex (void); 01545 01546 #define YY_DECL int tagYYlex (void) 01547 #endif /* !YY_DECL */ 01548 01549 /* Code executed at the beginning of each rule, after tagYYtext and tagYYleng 01550 * have been set up. 01551 */ 01552 #ifndef YY_USER_ACTION 01553 #define YY_USER_ACTION 01554 #endif 01555 01556 /* Code executed at the end of each rule. */ 01557 #ifndef YY_BREAK 01558 #define YY_BREAK break; 01559 #endif 01560 01561 #define YY_RULE_SETUP \ 01562 if ( tagYYleng > 0 ) \ 01563 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ 01564 (tagYYtext[tagYYleng - 1] == '\n'); \ 01565 YY_USER_ACTION 01566 01569 YY_DECL 01570 { 01571 register yy_state_type yy_current_state; 01572 register char *yy_cp, *yy_bp; 01573 register int yy_act; 01574 01575 #line 241 "doxytag.l" 01576 01577 01578 #line 1579 "<stdout>" 01579 01580 if ( !(yy_init) ) 01581 { 01582 (yy_init) = 1; 01583 01584 #ifdef YY_USER_INIT 01585 YY_USER_INIT; 01586 #endif 01587 01588 if ( ! (yy_start) ) 01589 (yy_start) = 1; /* first start state */ 01590 01591 if ( ! tagYYin ) 01592 tagYYin = stdin; 01593 01594 if ( ! tagYYout ) 01595 tagYYout = stdout; 01596 01597 if ( ! YY_CURRENT_BUFFER ) { 01598 tagYYensure_buffer_stack (); 01599 YY_CURRENT_BUFFER_LVALUE = 01600 tagYY_create_buffer(tagYYin,YY_BUF_SIZE ); 01601 } 01602 01603 tagYY_load_buffer_state( ); 01604 } 01605 01606 while ( 1 ) /* loops until end-of-file is reached */ 01607 { 01608 yy_cp = (yy_c_buf_p); 01609 01610 /* Support of tagYYtext. */ 01611 *yy_cp = (yy_hold_char); 01612 01613 /* yy_bp points to the position in yy_ch_buf of the start of 01614 * the current run. 01615 */ 01616 yy_bp = yy_cp; 01617 01618 yy_current_state = (yy_start); 01619 yy_current_state += YY_AT_BOL(); 01620 yy_match: 01621 do 01622 { 01623 register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; 01624 if ( yy_accept[yy_current_state] ) 01625 { 01626 (yy_last_accepting_state) = yy_current_state; 01627 (yy_last_accepting_cpos) = yy_cp; 01628 } 01629 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 01630 { 01631 yy_current_state = (int) yy_def[yy_current_state]; 01632 if ( yy_current_state >= 693 ) 01633 yy_c = yy_meta[(unsigned int) yy_c]; 01634 } 01635 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 01636 ++yy_cp; 01637 } 01638 while ( yy_base[yy_current_state] != 2044 ); 01639 01640 yy_find_action: 01641 yy_act = yy_accept[yy_current_state]; 01642 if ( yy_act == 0 ) 01643 { /* have to back up */ 01644 yy_cp = (yy_last_accepting_cpos); 01645 yy_current_state = (yy_last_accepting_state); 01646 yy_act = yy_accept[yy_current_state]; 01647 } 01648 01649 YY_DO_BEFORE_ACTION; 01650 01651 do_action: /* This label is used only to access EOF actions. */ 01652 01653 switch ( yy_act ) 01654 { /* beginning of action switch */ 01655 case 0: /* must back up */ 01656 /* undo the effects of YY_DO_BEFORE_ACTION */ 01657 *yy_cp = (yy_hold_char); 01658 yy_cp = (yy_last_accepting_cpos); 01659 yy_current_state = (yy_last_accepting_state); 01660 goto yy_find_action; 01661 01662 case 1: 01663 YY_RULE_SETUP 01664 #line 243 "doxytag.l" 01665 { 01666 BEGIN( SearchClassFile ); 01667 } 01668 YY_BREAK 01669 case 2: 01670 #line 247 "doxytag.l" 01671 case 3: 01672 #line 248 "doxytag.l" 01673 case 4: 01674 YY_RULE_SETUP 01675 #line 248 "doxytag.l" 01676 { // Qt variant 01677 BEGIN( ReadClassName ); 01678 } 01679 YY_BREAK 01680 case 5: 01681 YY_RULE_SETUP 01682 #line 251 "doxytag.l" 01683 { // Doxygen variant 01684 BEGIN( ReadClassName ); 01685 } 01686 YY_BREAK 01687 case 6: 01688 YY_RULE_SETUP 01689 #line 254 "doxytag.l" 01690 { 01691 //printf("Inherits found\n"); 01692 BEGIN( SearchBaseClasses ); 01693 } 01694 YY_BREAK 01695 case 7: 01696 *yy_cp = (yy_hold_char); /* undo effects of setting up tagYYtext */ 01697 (yy_c_buf_p) = yy_cp = yy_bp + 15; 01698 YY_DO_BEFORE_ACTION; /* set up tagYYtext again */ 01699 YY_RULE_SETUP 01700 #line 258 "doxytag.l" 01701 { // needed due to inconsistency in the Qt docs 01702 BEGIN( CheckConstructor ); 01703 } 01704 YY_BREAK 01705 /* --------------------------------------------------- */ 01706 /* Qt member extraction rules */ 01707 case 8: 01708 YY_RULE_SETUP 01709 #line 265 "doxytag.l" 01710 { 01711 BEGIN( Qt3ReadType ); 01712 } 01713 YY_BREAK 01714 case 9: 01715 YY_RULE_SETUP 01716 #line 268 "doxytag.l" 01717 { // Qt-3.3+ html file 01718 BEGIN( Qt3ReadAnchor ); 01719 } 01720 YY_BREAK 01721 case 10: 01722 YY_RULE_SETUP 01723 #line 271 "doxytag.l" 01724 { // Qt-4 html file 01725 BEGIN( Qt3ReadAnchor ); 01726 } 01727 YY_BREAK 01728 case 11: 01729 YY_RULE_SETUP 01730 #line 274 "doxytag.l" 01731 { 01732 BEGIN( Qt3ReadAnchor ); 01733 } 01734 YY_BREAK 01735 case 12: 01736 YY_RULE_SETUP 01737 #line 277 "doxytag.l" 01738 01739 YY_BREAK 01740 case 13: 01741 YY_RULE_SETUP 01742 #line 278 "doxytag.l" 01743 { 01744 memberRef = tagYYtext; 01745 } 01746 YY_BREAK 01747 case 14: 01748 YY_RULE_SETUP 01749 #line 281 "doxytag.l" 01750 { 01751 BEGIN( Qt3ReadName ); 01752 } 01753 YY_BREAK 01754 case 15: 01755 YY_RULE_SETUP 01756 #line 284 "doxytag.l" 01757 { 01758 BEGIN( Start ); 01759 } 01760 YY_BREAK 01761 case 16: 01762 YY_RULE_SETUP 01763 #line 287 "doxytag.l" 01764 { 01765 memberName="operator"; 01766 BEGIN(Qt3ReadOperator); 01767 } 01768 YY_BREAK 01769 case 17: 01770 YY_RULE_SETUP 01771 #line 291 "doxytag.l" 01772 { memberName+=tagYYtext; } 01773 YY_BREAK 01774 case 18: 01775 YY_RULE_SETUP 01776 #line 292 "doxytag.l" 01777 { memberName+="<"; } 01778 YY_BREAK 01779 case 19: 01780 YY_RULE_SETUP 01781 #line 293 "doxytag.l" 01782 { memberName+=">"; } 01783 YY_BREAK 01784 case 20: 01785 YY_RULE_SETUP 01786 #line 294 "doxytag.l" 01787 { memberName+=" new"; } 01788 YY_BREAK 01789 case 21: 01790 YY_RULE_SETUP 01791 #line 295 "doxytag.l" 01792 { memberName+=" delete"; } 01793 YY_BREAK 01794 case 22: 01795 YY_RULE_SETUP 01796 #line 296 "doxytag.l" 01797 { memberName+="()"; BEGIN( Qt3ReadArgs ); } 01798 YY_BREAK 01799 case 23: 01800 YY_RULE_SETUP 01801 #line 297 "doxytag.l" 01802 { unput(*tagYYtext); BEGIN( Qt3ReadArgs ); } 01803 YY_BREAK 01804 case 24: 01805 YY_RULE_SETUP 01806 #line 298 "doxytag.l" 01807 { 01808 memberName=tagYYtext; 01809 memberName=memberName.mid(memberName.find("::")+2); 01810 BEGIN(Qt3ReadArgs); 01811 } 01812 YY_BREAK 01813 case 25: 01814 YY_RULE_SETUP 01815 #line 303 "doxytag.l" 01816 01817 YY_BREAK 01818 case 26: 01819 YY_RULE_SETUP 01820 #line 304 "doxytag.l" 01821 { 01822 memberArgs+='('; 01823 } 01824 YY_BREAK 01825 case 27: 01826 YY_RULE_SETUP 01827 #line 307 "doxytag.l" 01828 { memberArgs+='&'; } 01829 YY_BREAK 01830 case 28: 01831 YY_RULE_SETUP 01832 #line 308 "doxytag.l" 01833 { memberArgs+='<'; } 01834 YY_BREAK 01835 case 29: 01836 YY_RULE_SETUP 01837 #line 309 "doxytag.l" 01838 { memberArgs+='>'; } 01839 YY_BREAK 01840 case 30: 01841 YY_RULE_SETUP 01842 #line 310 "doxytag.l" 01843 { memberArgs+='"'; } 01844 YY_BREAK 01845 case 31: 01846 YY_RULE_SETUP 01847 #line 311 "doxytag.l" 01848 { memberArgs+=' '; } 01849 YY_BREAK 01850 case 32: 01851 YY_RULE_SETUP 01852 #line 312 "doxytag.l" 01853 { 01854 addMember(memberName,memberRef,memberArgs); 01855 memberName.resize(0); 01856 memberRef.resize(0); 01857 memberArgs.resize(0); 01858 BEGIN(Start); 01859 } 01860 YY_BREAK 01861 case 33: 01862 /* rule 33 can match eol */ 01863 YY_RULE_SETUP 01864 #line 319 "doxytag.l" 01865 01866 YY_BREAK 01867 case 34: 01868 YY_RULE_SETUP 01869 #line 320 "doxytag.l" 01870 { 01871 memberArgs+=')'; 01872 addMember(memberName,memberRef,memberArgs); 01873 memberName.resize(0); 01874 memberRef.resize(0); 01875 memberArgs.resize(0); 01876 BEGIN(Start); 01877 } 01878 YY_BREAK 01879 case 35: 01880 YY_RULE_SETUP 01881 #line 328 "doxytag.l" 01882 { memberArgs+=tagYYtext; } 01883 YY_BREAK 01884 case 36: 01885 YY_RULE_SETUP 01886 #line 329 "doxytag.l" 01887 { memberArgs+=*tagYYtext; } 01888 YY_BREAK 01889 /* --------------------------------------------------- */ 01890 /* Doxygen class extraction rules */ 01891 case 37: 01892 YY_RULE_SETUP 01893 #line 334 "doxytag.l" 01894 { 01895 className.resize(0); 01896 BEGIN(DoxClassName); 01897 } 01898 YY_BREAK 01899 case 38: 01900 /* rule 38 can match eol */ 01901 YY_RULE_SETUP 01902 #line 338 "doxytag.l" 01903 { 01904 className=tagYYtext; 01905 addClass(className); 01906 } 01907 YY_BREAK 01908 case 39: 01909 YY_RULE_SETUP 01910 #line 342 "doxytag.l" 01911 { 01912 className+='<'; 01913 } 01914 YY_BREAK 01915 case 40: 01916 YY_RULE_SETUP 01917 #line 345 "doxytag.l" 01918 { 01919 className+='>'; 01920 } 01921 YY_BREAK 01922 case 41: 01923 YY_RULE_SETUP 01924 #line 348 "doxytag.l" 01925 { 01926 className+='&'; 01927 } 01928 YY_BREAK 01929 case 42: 01930 YY_RULE_SETUP 01931 #line 351 "doxytag.l" 01932 { 01933 className+='"'; 01934 } 01935 YY_BREAK 01936 case 43: 01937 YY_RULE_SETUP 01938 #line 354 "doxytag.l" 01939 { 01940 className+=*tagYYtext; 01941 } 01942 YY_BREAK 01943 case 44: 01944 YY_RULE_SETUP 01945 #line 357 "doxytag.l" 01946 { 01947 BEGIN(Start); 01948 } 01949 YY_BREAK 01950 /* --------------------------------------------------- */ 01951 /* Doxygen inheritance extraction rules */ 01952 case 45: 01953 YY_RULE_SETUP 01954 #line 364 "doxytag.l" 01955 { 01956 bases.clear(); 01957 baseName.resize(0); 01958 BEGIN(DoxClassBase); 01959 } 01960 YY_BREAK 01961 case 46: 01962 /* rule 46 can match eol */ 01963 YY_RULE_SETUP 01964 #line 369 "doxytag.l" 01965 { 01966 baseName+=tagYYtext; 01967 } 01968 YY_BREAK 01969 case 47: 01970 YY_RULE_SETUP 01971 #line 372 "doxytag.l" 01972 { 01973 bases.append(baseName); 01974 baseName.resize(0); 01975 } 01976 YY_BREAK 01977 case 48: 01978 YY_RULE_SETUP 01979 #line 376 "doxytag.l" 01980 { 01981 baseName+='<'; 01982 } 01983 YY_BREAK 01984 case 49: 01985 YY_RULE_SETUP 01986 #line 379 "doxytag.l" 01987 { 01988 baseName+='>'; 01989 } 01990 YY_BREAK 01991 case 50: 01992 YY_RULE_SETUP 01993 #line 382 "doxytag.l" 01994 { 01995 baseName+='&'; 01996 } 01997 YY_BREAK 01998 case 51: 01999 YY_RULE_SETUP 02000 #line 385 "doxytag.l" 02001 { 02002 baseName+='"'; 02003 } 02004 YY_BREAK 02005 case 52: 02006 YY_RULE_SETUP 02007 #line 388 "doxytag.l" 02008 { 02009 baseName+=*tagYYtext; 02010 } 02011 YY_BREAK 02012 case 53: 02013 YY_RULE_SETUP 02014 #line 391 "doxytag.l" 02015 { 02016 bases.append(baseName); 02017 baseName.resize(0); 02018 addBases(className); 02019 BEGIN(Start); 02020 } 02021 YY_BREAK 02022 /* --------------------------------------------------- */ 02023 /* Doxygen member extraction rules */ 02024 case 54: 02025 YY_RULE_SETUP 02026 #line 401 "doxytag.l" 02027 { 02028 memberName.resize(0); 02029 BEGIN(DoxReadName); 02030 } 02031 YY_BREAK 02032 case 55: 02033 /* rule 55 can match eol */ 02034 YY_RULE_SETUP 02035 #line 405 "doxytag.l" 02036 { 02037 memberName+=tagYYtext; 02038 } 02039 YY_BREAK 02040 case 56: 02041 YY_RULE_SETUP 02042 #line 408 "doxytag.l" 02043 { 02044 memberName+='<'; 02045 } 02046 YY_BREAK 02047 case 57: 02048 YY_RULE_SETUP 02049 #line 411 "doxytag.l" 02050 { 02051 memberName+='>'; 02052 } 02053 YY_BREAK 02054 case 58: 02055 YY_RULE_SETUP 02056 #line 414 "doxytag.l" 02057 { 02058 memberName+='&'; 02059 } 02060 YY_BREAK 02061 case 59: 02062 YY_RULE_SETUP 02063 #line 417 "doxytag.l" 02064 { 02065 memberName+='"'; 02066 } 02067 YY_BREAK 02068 case 60: 02069 YY_RULE_SETUP 02070 #line 420 "doxytag.l" 02071 { 02072 memberName+=*tagYYtext; 02073 } 02074 YY_BREAK 02075 case 61: 02076 YY_RULE_SETUP 02077 #line 423 "doxytag.l" 02078 { 02079 memberName=memberName.mid(memberName.find("::")+2); 02080 memberRef.resize(0); 02081 BEGIN(DoxReadAnchor); 02082 } 02083 YY_BREAK 02084 case 62: 02085 /* rule 62 can match eol */ 02086 YY_RULE_SETUP 02087 #line 428 "doxytag.l" 02088 { 02089 memberRef+=tagYYtext; 02090 } 02091 YY_BREAK 02092 case 63: 02093 YY_RULE_SETUP 02094 #line 431 "doxytag.l" 02095 { 02096 memberRef+='<'; 02097 } 02098 YY_BREAK 02099 case 64: 02100 YY_RULE_SETUP 02101 #line 434 "doxytag.l" 02102 { 02103 memberRef+='>'; 02104 } 02105 YY_BREAK 02106 case 65: 02107 YY_RULE_SETUP 02108 #line 437 "doxytag.l" 02109 { 02110 memberRef+='&'; 02111 } 02112 YY_BREAK 02113 case 66: 02114 YY_RULE_SETUP 02115 #line 440 "doxytag.l" 02116 { 02117 memberRef+='"'; 02118 } 02119 YY_BREAK 02120 case 67: 02121 YY_RULE_SETUP 02122 #line 443 "doxytag.l" 02123 { 02124 memberRef+=*tagYYtext; 02125 } 02126 YY_BREAK 02127 case 68: 02128 YY_RULE_SETUP 02129 #line 446 "doxytag.l" 02130 { 02131 memberArgs.resize(0); 02132 BEGIN(DoxReadArgs); 02133 } 02134 YY_BREAK 02135 case 69: 02136 /* rule 69 can match eol */ 02137 YY_RULE_SETUP 02138 #line 450 "doxytag.l" 02139 { 02140 memberArgs+=tagYYtext; 02141 } 02142 YY_BREAK 02143 case 70: 02144 YY_RULE_SETUP 02145 #line 453 "doxytag.l" 02146 { 02147 memberArgs+='<'; 02148 } 02149 YY_BREAK 02150 case 71: 02151 YY_RULE_SETUP 02152 #line 456 "doxytag.l" 02153 { 02154 memberArgs+='>'; 02155 } 02156 YY_BREAK 02157 case 72: 02158 YY_RULE_SETUP 02159 #line 459 "doxytag.l" 02160 { 02161 memberArgs+='&'; 02162 } 02163 YY_BREAK 02164 case 73: 02165 YY_RULE_SETUP 02166 #line 462 "doxytag.l" 02167 { 02168 memberArgs+='"'; 02169 } 02170 YY_BREAK 02171 case 74: 02172 YY_RULE_SETUP 02173 #line 465 "doxytag.l" 02174 { 02175 memberArgs+=*tagYYtext; 02176 } 02177 YY_BREAK 02178 case 75: 02179 YY_RULE_SETUP 02180 #line 468 "doxytag.l" 02181 { 02182 addMember(memberName,memberRef,memberArgs); 02183 memberName.resize(0); 02184 memberRef.resize(0); 02185 memberArgs.resize(0); 02186 BEGIN(Start); 02187 } 02188 YY_BREAK 02190 case 76: 02191 YY_RULE_SETUP 02192 #line 478 "doxytag.l" 02193 { 02194 BEGIN( SkipPreformated ); 02195 } 02196 YY_BREAK 02197 case 77: 02198 YY_RULE_SETUP 02199 #line 481 "doxytag.l" 02200 { 02201 BEGIN( SearchWords ); 02202 } 02203 YY_BREAK 02204 case 78: 02205 YY_RULE_SETUP 02206 #line 484 "doxytag.l" 02207 { 02208 BEGIN( SkipHTMLTag ); 02209 } 02210 YY_BREAK 02211 case 79: 02212 YY_RULE_SETUP 02213 #line 487 "doxytag.l" 02214 02215 YY_BREAK 02216 case 80: 02217 YY_RULE_SETUP 02218 #line 488 "doxytag.l" 02219 { 02220 //printf("tag: %s#%s ref: %s word: `%s'\n", 02221 // docBaseLink.data(),docAnchor.data(), 02222 // docRefName.data(),tagYYtext); 02223 //if (genIndex && !docRefName.isEmpty() && tagYYleng>2) 02224 // searchIndex.addWord(docRefName, 02225 // tagYYtext,FALSE 02226 // ); 02227 } 02228 YY_BREAK 02229 case 81: 02230 YY_RULE_SETUP 02231 #line 497 "doxytag.l" 02232 { 02233 BEGIN( Start ); 02234 } 02235 YY_BREAK 02236 case 82: 02237 YY_RULE_SETUP 02238 #line 500 "doxytag.l" 02239 02240 YY_BREAK 02241 case 83: 02242 YY_RULE_SETUP 02243 #line 501 "doxytag.l" 02244 { 02245 QCString s=tagYYtext; 02246 if (s.find("::")!=-1) 02247 { 02248 docRefName=tagYYtext; 02249 addReference(); 02250 nameBug=TRUE; 02251 } 02252 else 02253 { 02254 nameBug=FALSE; 02255 } 02256 BEGIN( Start ); 02257 } 02258 YY_BREAK 02259 case 84: 02260 YY_RULE_SETUP 02261 #line 515 "doxytag.l" 02262 { 02263 docAnchor = tagYYtext; 02264 if (docAnchor=="details" || 02265 docAnchor=="_details") 02266 { 02267 docRefName=className.copy(); 02268 addReference(); 02269 BEGIN( Start ); 02270 } 02271 else 02272 { 02273 BEGIN( SearchRefName ); 02274 } 02275 } 02276 YY_BREAK 02277 case 85: 02278 YY_RULE_SETUP 02279 #line 529 "doxytag.l" 02280 { 02281 BEGIN( ReadRefName ); 02282 } 02283 YY_BREAK 02284 case 86: 02285 YY_RULE_SETUP 02286 #line 532 "doxytag.l" 02287 { // HACK: avoid finding links in code fragments 02288 BEGIN( Start ); 02289 } 02290 YY_BREAK 02291 case 87: 02292 YY_RULE_SETUP 02293 #line 535 "doxytag.l" 02294 { // HACK: deal with Qt code 02295 if (nameBug) 02296 BEGIN( Start ); 02297 else 02298 BEGIN( ReadRefName ); 02299 } 02300 YY_BREAK 02301 case 88: 02302 YY_RULE_SETUP 02303 #line 542 "doxytag.l" 02304 { // hmm, looks impressive :-) 02305 docRefName=unhtmlify(tagYYtext); 02306 addReference(); 02307 BEGIN( Start ); 02308 } 02309 YY_BREAK 02310 case 89: 02311 YY_RULE_SETUP 02312 #line 547 "doxytag.l" 02313 { 02314 //printf("ReadRef=%s\n",tagYYtext); 02315 docRefName=tagYYtext; 02316 addReference(); 02317 BEGIN( Start ); 02318 } 02319 YY_BREAK 02320 case 90: 02321 YY_RULE_SETUP 02322 #line 553 "doxytag.l" 02323 { 02324 //printf("Search %s\n",tagYYtext); 02325 BEGIN( ReadBaseClass ); 02326 } 02327 YY_BREAK 02328 case 91: 02329 /* rule 91 can match eol */ 02330 YY_RULE_SETUP 02331 #line 557 "doxytag.l" 02332 { 02333 addBases(className); 02334 BEGIN( Start ); 02335 } 02336 YY_BREAK 02337 case 92: 02338 YY_RULE_SETUP 02339 #line 561 "doxytag.l" 02340 { 02341 bases.append(tagYYtext); 02342 BEGIN( SearchBaseClasses ); 02343 } 02344 YY_BREAK 02345 case 93: 02346 YY_RULE_SETUP 02347 #line 565 "doxytag.l" 02348 { 02349 BEGIN( ReadClassFile ); 02350 } 02351 YY_BREAK 02352 case 94: 02353 YY_RULE_SETUP 02354 #line 568 "doxytag.l" 02355 { 02356 BEGIN( ReadClassFile ); 02357 } 02358 YY_BREAK 02359 case 95: 02360 YY_RULE_SETUP 02361 #line 571 "doxytag.l" 02362 { 02363 className=tagYYtext; 02364 BEGIN( CheckClassName); 02365 } 02366 YY_BREAK 02367 case 96: 02368 YY_RULE_SETUP 02369 #line 575 "doxytag.l" 02370 { 02371 //printf("className=%s\n",className.data()); 02372 addClass(className); 02373 BEGIN( Start ); 02374 } 02375 YY_BREAK 02376 case 97: 02377 YY_RULE_SETUP 02378 #line 580 "doxytag.l" 02379 { 02380 //printf("className=%s\n",className.data()); 02381 addFile(className); 02382 BEGIN( Start ); 02383 } 02384 YY_BREAK 02385 case 98: 02386 YY_RULE_SETUP 02387 #line 585 "doxytag.l" 02388 { // not a class file 02389 className.resize(0); 02390 BEGIN( Start ); 02391 } 02392 YY_BREAK 02393 case 99: 02394 YY_RULE_SETUP 02395 #line 589 "doxytag.l" 02396 { 02397 classFile=tagYYtext; 02398 BEGIN( SearchMemberRef ); 02399 } 02400 YY_BREAK 02401 case 100: 02402 YY_RULE_SETUP 02403 #line 593 "doxytag.l" 02404 { 02405 if (YY_START==ReadClassFile) 02406 { 02407 classFile=yyFileName; 02408 } 02409 //BEGIN( ReadMemberRef ); 02410 BEGIN( Start ); 02411 } 02412 YY_BREAK 02413 case 101: 02414 YY_RULE_SETUP 02415 #line 601 "doxytag.l" 02416 { 02417 memberRef=tagYYtext; 02418 BEGIN( SearchMemberName ); 02419 } 02420 YY_BREAK 02421 case 102: 02422 YY_RULE_SETUP 02423 #line 605 "doxytag.l" 02424 { // <strong> is for qt-1.44, <b> is for qt-2.00 02425 BEGIN( ReadMemberName ); 02426 } 02427 YY_BREAK 02428 case 103: 02429 YY_RULE_SETUP 02430 #line 608 "doxytag.l" 02431 { 02432 unput(*tagYYtext); 02433 BEGIN( ReadMemberName ); 02434 } 02435 YY_BREAK 02436 case 104: 02437 YY_RULE_SETUP 02438 #line 612 "doxytag.l" 02439 { 02440 memberName="operator"; 02441 BEGIN( ReadOperator ); 02442 } 02443 YY_BREAK 02444 case 105: 02445 YY_RULE_SETUP 02446 #line 616 "doxytag.l" 02447 { memberName+=*tagYYtext; } 02448 YY_BREAK 02449 case 106: 02450 YY_RULE_SETUP 02451 #line 617 "doxytag.l" 02452 { memberName+="<"; } 02453 YY_BREAK 02454 case 107: 02455 YY_RULE_SETUP 02456 #line 618 "doxytag.l" 02457 { memberName+=">"; } 02458 YY_BREAK 02459 case 108: 02460 YY_RULE_SETUP 02461 #line 619 "doxytag.l" 02462 { memberName+=" new"; } 02463 YY_BREAK 02464 case 109: 02465 YY_RULE_SETUP 02466 #line 620 "doxytag.l" 02467 { memberName+=" delete"; } 02468 YY_BREAK 02469 case 110: 02470 YY_RULE_SETUP 02471 #line 621 "doxytag.l" 02472 { BEGIN( SearchArgs ); } 02473 YY_BREAK 02474 case 111: 02475 YY_RULE_SETUP 02476 #line 622 "doxytag.l" 02477 { 02478 memberName=tagYYtext; 02479 BEGIN( SearchArgs ); 02480 } 02481 YY_BREAK 02482 case 112: 02483 YY_RULE_SETUP 02484 #line 626 "doxytag.l" 02485 { 02486 //printf("SearchArg className=%s memberName=%s\n",className.data(),memberName.data()); 02487 if (!className.isEmpty() && !memberName.isEmpty()) 02488 BEGIN( ReadArgs ); 02489 else 02490 BEGIN( Start ); 02491 } 02492 YY_BREAK 02493 case 113: 02494 YY_RULE_SETUP 02495 #line 633 "doxytag.l" 02496 { memberArgs+='&'; } 02497 YY_BREAK 02498 case 114: 02499 YY_RULE_SETUP 02500 #line 634 "doxytag.l" 02501 { memberArgs+='<'; } 02502 YY_BREAK 02503 case 115: 02504 YY_RULE_SETUP 02505 #line 635 "doxytag.l" 02506 { memberArgs+='>'; } 02507 YY_BREAK 02508 case 116: 02509 YY_RULE_SETUP 02510 #line 636 "doxytag.l" 02511 { memberArgs+='"'; } 02512 YY_BREAK 02513 case 117: 02514 YY_RULE_SETUP 02515 #line 637 "doxytag.l" 02516 { memberArgs+=' '; } 02517 YY_BREAK 02518 /* 02519 <ReadArgs>[{}] { // handle enums 02520 memberArgs.resize(0); 02521 addMember(memberName,memberRef,memberArgs); 02522 if (*tagYYtext=='}') 02523 BEGIN( Start ); 02524 else 02525 BEGIN( SearchClassFile ); 02526 } 02527 */ 02528 case 118: 02529 /* rule 118 can match eol */ 02530 YY_RULE_SETUP 02531 #line 648 "doxytag.l" 02532 { 02533 //printf("adding member %s\n",memberName.data()); 02534 memberArgs=memberArgs.stripWhiteSpace(); 02535 //if (newClass) 02536 //{ 02537 // newClass=FALSE; 02538 // addClass(className); 02539 //} 02540 addMember(memberName,memberRef,memberArgs); 02541 memberName.resize(0); 02542 memberRef.resize(0); 02543 memberArgs.resize(0); 02544 if (*tagYYtext=='<') 02545 BEGIN( SkipHTMLTag); 02546 else 02547 BEGIN( Start ); 02548 } 02549 YY_BREAK 02550 case 119: 02551 YY_RULE_SETUP 02552 #line 665 "doxytag.l" 02553 { memberArgs+=(*tagYYtext)&0x7f; } 02554 YY_BREAK 02555 case 120: 02556 YY_RULE_SETUP 02557 #line 666 "doxytag.l" 02558 { BEGIN( Start ); } 02559 YY_BREAK 02560 case 121: 02561 YY_RULE_SETUP 02562 #line 667 "doxytag.l" 02563 02564 YY_BREAK 02565 case 122: 02566 YY_RULE_SETUP 02567 #line 668 "doxytag.l" 02568 02569 YY_BREAK 02570 case 123: 02571 /* rule 123 can match eol */ 02572 YY_RULE_SETUP 02573 #line 669 "doxytag.l" 02574 { yyLineNr++; 02575 if (YY_START!=SkipHTMLTag) BEGIN( Start ); 02576 } 02577 YY_BREAK 02578 case 124: 02579 YY_RULE_SETUP 02580 #line 673 "doxytag.l" 02581 ECHO; 02582 YY_BREAK 02583 #line 2584 "<stdout>" 02584 case YY_STATE_EOF(INITIAL): 02585 case YY_STATE_EOF(Start): 02586 case YY_STATE_EOF(SearchClassFile): 02587 case YY_STATE_EOF(ReadClassFile): 02588 case YY_STATE_EOF(CheckClassName): 02589 case YY_STATE_EOF(ReadClassName): 02590 case YY_STATE_EOF(SearchMemberRef): 02591 case YY_STATE_EOF(ReadMemberRef): 02592 case YY_STATE_EOF(SearchMemberName): 02593 case YY_STATE_EOF(ReadMemberName): 02594 case YY_STATE_EOF(ReadOperator): 02595 case YY_STATE_EOF(SearchBaseClasses): 02596 case YY_STATE_EOF(ReadBaseClass): 02597 case YY_STATE_EOF(SearchRefName): 02598 case YY_STATE_EOF(ReadRefName): 02599 case YY_STATE_EOF(SearchArgs): 02600 case YY_STATE_EOF(ReadArgs): 02601 case YY_STATE_EOF(SearchWords): 02602 case YY_STATE_EOF(SkipHTMLTag): 02603 case YY_STATE_EOF(CheckConstructor): 02604 case YY_STATE_EOF(SkipPreformated): 02605 case YY_STATE_EOF(Qt3ReadType): 02606 case YY_STATE_EOF(Qt3ReadAnchor): 02607 case YY_STATE_EOF(Qt3ReadName): 02608 case YY_STATE_EOF(Qt3ReadOperator): 02609 case YY_STATE_EOF(Qt3ReadArgs): 02610 case YY_STATE_EOF(DoxReadAnchor): 02611 case YY_STATE_EOF(DoxReadName): 02612 case YY_STATE_EOF(DoxReadArgs): 02613 case YY_STATE_EOF(DoxClassName): 02614 case YY_STATE_EOF(DoxClassBase): 02615 yyterminate(); 02616 02617 case YY_END_OF_BUFFER: 02618 { 02619 /* Amount of text matched not including the EOB char. */ 02620 int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; 02621 02622 /* Undo the effects of YY_DO_BEFORE_ACTION. */ 02623 *yy_cp = (yy_hold_char); 02624 YY_RESTORE_YY_MORE_OFFSET 02625 02626 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) 02627 { 02628 /* We're scanning a new file or input source. It's 02629 * possible that this happened because the user 02630 * just pointed tagYYin at a new source and called 02631 * tagYYlex(). If so, then we have to assure 02632 * consistency between YY_CURRENT_BUFFER and our 02633 * globals. Here is the right place to do so, because 02634 * this is the first action (other than possibly a 02635 * back-up) that will match for the new input source. 02636 */ 02637 (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; 02638 YY_CURRENT_BUFFER_LVALUE->yy_input_file = tagYYin; 02639 YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; 02640 } 02641 02642 /* Note that here we test for yy_c_buf_p "<=" to the position 02643 * of the first EOB in the buffer, since yy_c_buf_p will 02644 * already have been incremented past the NUL character 02645 * (since all states make transitions on EOB to the 02646 * end-of-buffer state). Contrast this with the test 02647 * in input(). 02648 */ 02649 if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) 02650 { /* This was really a NUL. */ 02651 yy_state_type yy_next_state; 02652 02653 (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; 02654 02655 yy_current_state = yy_get_previous_state( ); 02656 02657 /* Okay, we're now positioned to make the NUL 02658 * transition. We couldn't have 02659 * yy_get_previous_state() go ahead and do it 02660 * for us because it doesn't know how to deal 02661 * with the possibility of jamming (and we don't 02662 * want to build jamming into it because then it 02663 * will run more slowly). 02664 */ 02665 02666 yy_next_state = yy_try_NUL_trans( yy_current_state ); 02667 02668 yy_bp = (yytext_ptr) + YY_MORE_ADJ; 02669 02670 if ( yy_next_state ) 02671 { 02672 /* Consume the NUL. */ 02673 yy_cp = ++(yy_c_buf_p); 02674 yy_current_state = yy_next_state; 02675 goto yy_match; 02676 } 02677 02678 else 02679 { 02680 yy_cp = (yy_c_buf_p); 02681 goto yy_find_action; 02682 } 02683 } 02684 02685 else switch ( yy_get_next_buffer( ) ) 02686 { 02687 case EOB_ACT_END_OF_FILE: 02688 { 02689 (yy_did_buffer_switch_on_eof) = 0; 02690 02691 if ( tagYYwrap( ) ) 02692 { 02693 /* Note: because we've taken care in 02694 * yy_get_next_buffer() to have set up 02695 * tagYYtext, we can now set up 02696 * yy_c_buf_p so that if some total 02697 * hoser (like flex itself) wants to 02698 * call the scanner after we return the 02699 * YY_NULL, it'll still work - another 02700 * YY_NULL will get returned. 02701 */ 02702 (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; 02703 02704 yy_act = YY_STATE_EOF(YY_START); 02705 goto do_action; 02706 } 02707 02708 else 02709 { 02710 if ( ! (yy_did_buffer_switch_on_eof) ) 02711 YY_NEW_FILE; 02712 } 02713 break; 02714 } 02715 02716 case EOB_ACT_CONTINUE_SCAN: 02717 (yy_c_buf_p) = 02718 (yytext_ptr) + yy_amount_of_matched_text; 02719 02720 yy_current_state = yy_get_previous_state( ); 02721 02722 yy_cp = (yy_c_buf_p); 02723 yy_bp = (yytext_ptr) + YY_MORE_ADJ; 02724 goto yy_match; 02725 02726 case EOB_ACT_LAST_MATCH: 02727 (yy_c_buf_p) = 02728 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; 02729 02730 yy_current_state = yy_get_previous_state( ); 02731 02732 yy_cp = (yy_c_buf_p); 02733 yy_bp = (yytext_ptr) + YY_MORE_ADJ; 02734 goto yy_find_action; 02735 } 02736 break; 02737 } 02738 02739 default: 02740 YY_FATAL_ERROR( 02741 "fatal flex scanner internal error--no action found" ); 02742 } /* end of action switch */ 02743 } /* end of scanning one token */ 02744 } /* end of tagYYlex */ 02745 02746 /* yy_get_next_buffer - try to read in a new buffer 02747 * 02748 * Returns a code representing an action: 02749 * EOB_ACT_LAST_MATCH - 02750 * EOB_ACT_CONTINUE_SCAN - continue scanning from current position 02751 * EOB_ACT_END_OF_FILE - end of file 02752 */ 02753 static int yy_get_next_buffer (void) 02754 { 02755 register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; 02756 register char *source = (yytext_ptr); 02757 register int number_to_move, i; 02758 int ret_val; 02759 02760 if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) 02761 YY_FATAL_ERROR( 02762 "fatal flex scanner internal error--end of buffer missed" ); 02763 02764 if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) 02765 { /* Don't try to fill the buffer, so this is an EOF. */ 02766 if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) 02767 { 02768 /* We matched a single character, the EOB, so 02769 * treat this as a final EOF. 02770 */ 02771 return EOB_ACT_END_OF_FILE; 02772 } 02773 02774 else 02775 { 02776 /* We matched some text prior to the EOB, first 02777 * process it. 02778 */ 02779 return EOB_ACT_LAST_MATCH; 02780 } 02781 } 02782 02783 /* Try to read more data. */ 02784 02785 /* First move last chars to start of buffer. */ 02786 number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; 02787 02788 for ( i = 0; i < number_to_move; ++i ) 02789 *(dest++) = *(source++); 02790 02791 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) 02792 /* don't do the read, it's not guaranteed to return an EOF, 02793 * just force an EOF 02794 */ 02795 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; 02796 02797 else 02798 { 02799 int num_to_read = 02800 YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; 02801 02802 while ( num_to_read <= 0 ) 02803 { /* Not enough room in the buffer - grow it. */ 02804 02805 /* just a shorter name for the current buffer */ 02806 YY_BUFFER_STATE b = YY_CURRENT_BUFFER; 02807 02808 int yy_c_buf_p_offset = 02809 (int) ((yy_c_buf_p) - b->yy_ch_buf); 02810 02811 if ( b->yy_is_our_buffer ) 02812 { 02813 int new_size = b->yy_buf_size * 2; 02814 02815 if ( new_size <= 0 ) 02816 b->yy_buf_size += b->yy_buf_size / 8; 02817 else 02818 b->yy_buf_size *= 2; 02819 02820 b->yy_ch_buf = (char *) 02821 /* Include room in for 2 EOB chars. */ 02822 tagYYrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); 02823 } 02824 else 02825 /* Can't grow it, we don't own it. */ 02826 b->yy_ch_buf = 0; 02827 02828 if ( ! b->yy_ch_buf ) 02829 YY_FATAL_ERROR( 02830 "fatal error - scanner input buffer overflow" ); 02831 02832 (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; 02833 02834 num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - 02835 number_to_move - 1; 02836 02837 } 02838 02839 if ( num_to_read > YY_READ_BUF_SIZE ) 02840 num_to_read = YY_READ_BUF_SIZE; 02841 02842 /* Read in more data. */ 02843 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), 02844 (yy_n_chars), num_to_read ); 02845 02846 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); 02847 } 02848 02849 if ( (yy_n_chars) == 0 ) 02850 { 02851 if ( number_to_move == YY_MORE_ADJ ) 02852 { 02853 ret_val = EOB_ACT_END_OF_FILE; 02854 tagYYrestart(tagYYin ); 02855 } 02856 02857 else 02858 { 02859 ret_val = EOB_ACT_LAST_MATCH; 02860 YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = 02861 YY_BUFFER_EOF_PENDING; 02862 } 02863 } 02864 02865 else 02866 ret_val = EOB_ACT_CONTINUE_SCAN; 02867 02868 (yy_n_chars) += number_to_move; 02869 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; 02870 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; 02871 02872 (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; 02873 02874 return ret_val; 02875 } 02876 02877 /* yy_get_previous_state - get the state just before the EOB char was reached */ 02878 02879 static yy_state_type yy_get_previous_state (void) 02880 { 02881 register yy_state_type yy_current_state; 02882 register char *yy_cp; 02883 02884 yy_current_state = (yy_start); 02885 yy_current_state += YY_AT_BOL(); 02886 02887 for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) 02888 { 02889 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); 02890 if ( yy_accept[yy_current_state] ) 02891 { 02892 (yy_last_accepting_state) = yy_current_state; 02893 (yy_last_accepting_cpos) = yy_cp; 02894 } 02895 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 02896 { 02897 yy_current_state = (int) yy_def[yy_current_state]; 02898 if ( yy_current_state >= 693 ) 02899 yy_c = yy_meta[(unsigned int) yy_c]; 02900 } 02901 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 02902 } 02903 02904 return yy_current_state; 02905 } 02906 02907 /* yy_try_NUL_trans - try to make a transition on the NUL character 02908 * 02909 * synopsis 02910 * next_state = yy_try_NUL_trans( current_state ); 02911 */ 02912 static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) 02913 { 02914 register int yy_is_jam; 02915 register char *yy_cp = (yy_c_buf_p); 02916 02917 register YY_CHAR yy_c = 1; 02918 if ( yy_accept[yy_current_state] ) 02919 { 02920 (yy_last_accepting_state) = yy_current_state; 02921 (yy_last_accepting_cpos) = yy_cp; 02922 } 02923 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 02924 { 02925 yy_current_state = (int) yy_def[yy_current_state]; 02926 if ( yy_current_state >= 693 ) 02927 yy_c = yy_meta[(unsigned int) yy_c]; 02928 } 02929 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 02930 yy_is_jam = (yy_current_state == 692); 02931 02932 return yy_is_jam ? 0 : yy_current_state; 02933 } 02934 02935 static void yyunput (int c, register char * yy_bp ) 02936 { 02937 register char *yy_cp; 02938 02939 yy_cp = (yy_c_buf_p); 02940 02941 /* undo effects of setting up tagYYtext */ 02942 *yy_cp = (yy_hold_char); 02943 02944 if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) 02945 { /* need to shift things up to make room */ 02946 /* +2 for EOB chars. */ 02947 register int number_to_move = (yy_n_chars) + 2; 02948 register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ 02949 YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; 02950 register char *source = 02951 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; 02952 02953 while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) 02954 *--dest = *--source; 02955 02956 yy_cp += (int) (dest - source); 02957 yy_bp += (int) (dest - source); 02958 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = 02959 (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; 02960 02961 if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) 02962 YY_FATAL_ERROR( "flex scanner push-back overflow" ); 02963 } 02964 02965 *--yy_cp = (char) c; 02966 02967 (yytext_ptr) = yy_bp; 02968 (yy_hold_char) = *yy_cp; 02969 (yy_c_buf_p) = yy_cp; 02970 } 02971 02972 #ifndef YY_NO_INPUT 02973 #ifdef __cplusplus 02974 static int yyinput (void) 02975 #else 02976 static int input (void) 02977 #endif 02978 02979 { 02980 int c; 02981 02982 *(yy_c_buf_p) = (yy_hold_char); 02983 02984 if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) 02985 { 02986 /* yy_c_buf_p now points to the character we want to return. 02987 * If this occurs *before* the EOB characters, then it's a 02988 * valid NUL; if not, then we've hit the end of the buffer. 02989 */ 02990 if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) 02991 /* This was really a NUL. */ 02992 *(yy_c_buf_p) = '\0'; 02993 02994 else 02995 { /* need more input */ 02996 int offset = (yy_c_buf_p) - (yytext_ptr); 02997 ++(yy_c_buf_p); 02998 02999 switch ( yy_get_next_buffer( ) ) 03000 { 03001 case EOB_ACT_LAST_MATCH: 03002 /* This happens because yy_g_n_b() 03003 * sees that we've accumulated a 03004 * token and flags that we need to 03005 * try matching the token before 03006 * proceeding. But for input(), 03007 * there's no matching to consider. 03008 * So convert the EOB_ACT_LAST_MATCH 03009 * to EOB_ACT_END_OF_FILE. 03010 */ 03011 03012 /* Reset buffer status. */ 03013 tagYYrestart(tagYYin ); 03014 03015 /*FALLTHROUGH*/ 03016 03017 case EOB_ACT_END_OF_FILE: 03018 { 03019 if ( tagYYwrap( ) ) 03020 return 0; 03021 03022 if ( ! (yy_did_buffer_switch_on_eof) ) 03023 YY_NEW_FILE; 03024 #ifdef __cplusplus 03025 return yyinput(); 03026 #else 03027 return input(); 03028 #endif 03029 } 03030 03031 case EOB_ACT_CONTINUE_SCAN: 03032 (yy_c_buf_p) = (yytext_ptr) + offset; 03033 break; 03034 } 03035 } 03036 } 03037 03038 c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ 03039 *(yy_c_buf_p) = '\0'; /* preserve tagYYtext */ 03040 (yy_hold_char) = *++(yy_c_buf_p); 03041 03042 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); 03043 03044 return c; 03045 } 03046 #endif /* ifndef YY_NO_INPUT */ 03047 03053 void tagYYrestart (FILE * input_file ) 03054 { 03055 03056 if ( ! YY_CURRENT_BUFFER ){ 03057 tagYYensure_buffer_stack (); 03058 YY_CURRENT_BUFFER_LVALUE = 03059 tagYY_create_buffer(tagYYin,YY_BUF_SIZE ); 03060 } 03061 03062 tagYY_init_buffer(YY_CURRENT_BUFFER,input_file ); 03063 tagYY_load_buffer_state( ); 03064 } 03065 03070 void tagYY_switch_to_buffer (YY_BUFFER_STATE new_buffer ) 03071 { 03072 03073 /* TODO. We should be able to replace this entire function body 03074 * with 03075 * tagYYpop_buffer_state(); 03076 * tagYYpush_buffer_state(new_buffer); 03077 */ 03078 tagYYensure_buffer_stack (); 03079 if ( YY_CURRENT_BUFFER == new_buffer ) 03080 return; 03081 03082 if ( YY_CURRENT_BUFFER ) 03083 { 03084 /* Flush out information for old buffer. */ 03085 *(yy_c_buf_p) = (yy_hold_char); 03086 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); 03087 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); 03088 } 03089 03090 YY_CURRENT_BUFFER_LVALUE = new_buffer; 03091 tagYY_load_buffer_state( ); 03092 03093 /* We don't actually know whether we did this switch during 03094 * EOF (tagYYwrap()) processing, but the only time this flag 03095 * is looked at is after tagYYwrap() is called, so it's safe 03096 * to go ahead and always set it. 03097 */ 03098 (yy_did_buffer_switch_on_eof) = 1; 03099 } 03100 03101 static void tagYY_load_buffer_state (void) 03102 { 03103 (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; 03104 (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; 03105 tagYYin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; 03106 (yy_hold_char) = *(yy_c_buf_p); 03107 } 03108 03115 YY_BUFFER_STATE tagYY_create_buffer (FILE * file, int size ) 03116 { 03117 YY_BUFFER_STATE b; 03118 03119 b = (YY_BUFFER_STATE) tagYYalloc(sizeof( struct yy_buffer_state ) ); 03120 if ( ! b ) 03121 YY_FATAL_ERROR( "out of dynamic memory in tagYY_create_buffer()" ); 03122 03123 b->yy_buf_size = size; 03124 03125 /* yy_ch_buf has to be 2 characters longer than the size given because 03126 * we need to put in 2 end-of-buffer characters. 03127 */ 03128 b->yy_ch_buf = (char *) tagYYalloc(b->yy_buf_size + 2 ); 03129 if ( ! b->yy_ch_buf ) 03130 YY_FATAL_ERROR( "out of dynamic memory in tagYY_create_buffer()" ); 03131 03132 b->yy_is_our_buffer = 1; 03133 03134 tagYY_init_buffer(b,file ); 03135 03136 return b; 03137 } 03138 03143 void tagYY_delete_buffer (YY_BUFFER_STATE b ) 03144 { 03145 03146 if ( ! b ) 03147 return; 03148 03149 if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ 03150 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; 03151 03152 if ( b->yy_is_our_buffer ) 03153 tagYYfree((void *) b->yy_ch_buf ); 03154 03155 tagYYfree((void *) b ); 03156 } 03157 03158 #ifndef __cplusplus 03159 extern int isatty (int ); 03160 #endif /* __cplusplus */ 03161 03162 /* Initializes or reinitializes a buffer. 03163 * This function is sometimes called more than once on the same buffer, 03164 * such as during a tagYYrestart() or at EOF. 03165 */ 03166 static void tagYY_init_buffer (YY_BUFFER_STATE b, FILE * file ) 03167 03168 { 03169 int oerrno = errno; 03170 03171 tagYY_flush_buffer(b ); 03172 03173 b->yy_input_file = file; 03174 b->yy_fill_buffer = 1; 03175 03176 /* If b is the current buffer, then tagYY_init_buffer was _probably_ 03177 * called from tagYYrestart() or through yy_get_next_buffer. 03178 * In that case, we don't want to reset the lineno or column. 03179 */ 03180 if (b != YY_CURRENT_BUFFER){ 03181 b->yy_bs_lineno = 1; 03182 b->yy_bs_column = 0; 03183 } 03184 03185 b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; 03186 03187 errno = oerrno; 03188 } 03189 03194 void tagYY_flush_buffer (YY_BUFFER_STATE b ) 03195 { 03196 if ( ! b ) 03197 return; 03198 03199 b->yy_n_chars = 0; 03200 03201 /* We always need two end-of-buffer characters. The first causes 03202 * a transition to the end-of-buffer state. The second causes 03203 * a jam in that state. 03204 */ 03205 b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; 03206 b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; 03207 03208 b->yy_buf_pos = &b->yy_ch_buf[0]; 03209 03210 b->yy_at_bol = 1; 03211 b->yy_buffer_status = YY_BUFFER_NEW; 03212 03213 if ( b == YY_CURRENT_BUFFER ) 03214 tagYY_load_buffer_state( ); 03215 } 03216 03223 void tagYYpush_buffer_state (YY_BUFFER_STATE new_buffer ) 03224 { 03225 if (new_buffer == NULL) 03226 return; 03227 03228 tagYYensure_buffer_stack(); 03229 03230 /* This block is copied from tagYY_switch_to_buffer. */ 03231 if ( YY_CURRENT_BUFFER ) 03232 { 03233 /* Flush out information for old buffer. */ 03234 *(yy_c_buf_p) = (yy_hold_char); 03235 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); 03236 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); 03237 } 03238 03239 /* Only push if top exists. Otherwise, replace top. */ 03240 if (YY_CURRENT_BUFFER) 03241 (yy_buffer_stack_top)++; 03242 YY_CURRENT_BUFFER_LVALUE = new_buffer; 03243 03244 /* copied from tagYY_switch_to_buffer. */ 03245 tagYY_load_buffer_state( ); 03246 (yy_did_buffer_switch_on_eof) = 1; 03247 } 03248 03253 void tagYYpop_buffer_state (void) 03254 { 03255 if (!YY_CURRENT_BUFFER) 03256 return; 03257 03258 tagYY_delete_buffer(YY_CURRENT_BUFFER ); 03259 YY_CURRENT_BUFFER_LVALUE = NULL; 03260 if ((yy_buffer_stack_top) > 0) 03261 --(yy_buffer_stack_top); 03262 03263 if (YY_CURRENT_BUFFER) { 03264 tagYY_load_buffer_state( ); 03265 (yy_did_buffer_switch_on_eof) = 1; 03266 } 03267 } 03268 03269 /* Allocates the stack if it does not exist. 03270 * Guarantees space for at least one push. 03271 */ 03272 static void tagYYensure_buffer_stack (void) 03273 { 03274 int num_to_alloc; 03275 03276 if (!(yy_buffer_stack)) { 03277 03278 /* First allocation is just for 2 elements, since we don't know if this 03279 * scanner will even need a stack. We use 2 instead of 1 to avoid an 03280 * immediate realloc on the next call. 03281 */ 03282 num_to_alloc = 1; 03283 (yy_buffer_stack) = (struct yy_buffer_state**)tagYYalloc 03284 (num_to_alloc * sizeof(struct yy_buffer_state*) 03285 ); 03286 03287 memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); 03288 03289 (yy_buffer_stack_max) = num_to_alloc; 03290 (yy_buffer_stack_top) = 0; 03291 return; 03292 } 03293 03294 if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ 03295 03296 /* Increase the buffer to prepare for a possible push. */ 03297 int grow_size = 8 /* arbitrary grow size */; 03298 03299 num_to_alloc = (yy_buffer_stack_max) + grow_size; 03300 (yy_buffer_stack) = (struct yy_buffer_state**)tagYYrealloc 03301 ((yy_buffer_stack), 03302 num_to_alloc * sizeof(struct yy_buffer_state*) 03303 ); 03304 03305 /* zero only the new slots.*/ 03306 memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); 03307 (yy_buffer_stack_max) = num_to_alloc; 03308 } 03309 } 03310 03317 YY_BUFFER_STATE tagYY_scan_buffer (char * base, yy_size_t size ) 03318 { 03319 YY_BUFFER_STATE b; 03320 03321 if ( size < 2 || 03322 base[size-2] != YY_END_OF_BUFFER_CHAR || 03323 base[size-1] != YY_END_OF_BUFFER_CHAR ) 03324 /* They forgot to leave room for the EOB's. */ 03325 return 0; 03326 03327 b = (YY_BUFFER_STATE) tagYYalloc(sizeof( struct yy_buffer_state ) ); 03328 if ( ! b ) 03329 YY_FATAL_ERROR( "out of dynamic memory in tagYY_scan_buffer()" ); 03330 03331 b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ 03332 b->yy_buf_pos = b->yy_ch_buf = base; 03333 b->yy_is_our_buffer = 0; 03334 b->yy_input_file = 0; 03335 b->yy_n_chars = b->yy_buf_size; 03336 b->yy_is_interactive = 0; 03337 b->yy_at_bol = 1; 03338 b->yy_fill_buffer = 0; 03339 b->yy_buffer_status = YY_BUFFER_NEW; 03340 03341 tagYY_switch_to_buffer(b ); 03342 03343 return b; 03344 } 03345 03354 YY_BUFFER_STATE tagYY_scan_string (yyconst char * yystr ) 03355 { 03356 03357 return tagYY_scan_bytes(yystr,strlen(yystr) ); 03358 } 03359 03367 YY_BUFFER_STATE tagYY_scan_bytes (yyconst char * yybytes, int _yybytes_len ) 03368 { 03369 YY_BUFFER_STATE b; 03370 char *buf; 03371 yy_size_t n; 03372 int i; 03373 03374 /* Get memory for full buffer, including space for trailing EOB's. */ 03375 n = _yybytes_len + 2; 03376 buf = (char *) tagYYalloc(n ); 03377 if ( ! buf ) 03378 YY_FATAL_ERROR( "out of dynamic memory in tagYY_scan_bytes()" ); 03379 03380 for ( i = 0; i < _yybytes_len; ++i ) 03381 buf[i] = yybytes[i]; 03382 03383 buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; 03384 03385 b = tagYY_scan_buffer(buf,n ); 03386 if ( ! b ) 03387 YY_FATAL_ERROR( "bad buffer in tagYY_scan_bytes()" ); 03388 03389 /* It's okay to grow etc. this buffer, and we should throw it 03390 * away when we're done. 03391 */ 03392 b->yy_is_our_buffer = 1; 03393 03394 return b; 03395 } 03396 03397 #ifndef YY_EXIT_FAILURE 03398 #define YY_EXIT_FAILURE 2 03399 #endif 03400 03401 static void yy_fatal_error (yyconst char* msg ) 03402 { 03403 (void) fprintf( stderr, "%s\n", msg ); 03404 exit( YY_EXIT_FAILURE ); 03405 } 03406 03407 /* Redefine yyless() so it works in section 3 code. */ 03408 03409 #undef yyless 03410 #define yyless(n) \ 03411 do \ 03412 { \ 03413 /* Undo effects of setting up tagYYtext. */ \ 03414 int yyless_macro_arg = (n); \ 03415 YY_LESS_LINENO(yyless_macro_arg);\ 03416 tagYYtext[tagYYleng] = (yy_hold_char); \ 03417 (yy_c_buf_p) = tagYYtext + yyless_macro_arg; \ 03418 (yy_hold_char) = *(yy_c_buf_p); \ 03419 *(yy_c_buf_p) = '\0'; \ 03420 tagYYleng = yyless_macro_arg; \ 03421 } \ 03422 while ( 0 ) 03423 03424 /* Accessor methods (get/set functions) to struct members. */ 03425 03429 int tagYYget_lineno (void) 03430 { 03431 03432 return tagYYlineno; 03433 } 03434 03438 FILE *tagYYget_in (void) 03439 { 03440 return tagYYin; 03441 } 03442 03446 FILE *tagYYget_out (void) 03447 { 03448 return tagYYout; 03449 } 03450 03454 int tagYYget_leng (void) 03455 { 03456 return tagYYleng; 03457 } 03458 03463 char *tagYYget_text (void) 03464 { 03465 return tagYYtext; 03466 } 03467 03472 void tagYYset_lineno (int line_number ) 03473 { 03474 03475 tagYYlineno = line_number; 03476 } 03477 03484 void tagYYset_in (FILE * in_str ) 03485 { 03486 tagYYin = in_str ; 03487 } 03488 03489 void tagYYset_out (FILE * out_str ) 03490 { 03491 tagYYout = out_str ; 03492 } 03493 03494 int tagYYget_debug (void) 03495 { 03496 return tagYY_flex_debug; 03497 } 03498 03499 void tagYYset_debug (int bdebug ) 03500 { 03501 tagYY_flex_debug = bdebug ; 03502 } 03503 03504 static int yy_init_globals (void) 03505 { 03506 /* Initialization is the same as for the non-reentrant scanner. 03507 * This function is called from tagYYlex_destroy(), so don't allocate here. 03508 */ 03509 03510 (yy_buffer_stack) = 0; 03511 (yy_buffer_stack_top) = 0; 03512 (yy_buffer_stack_max) = 0; 03513 (yy_c_buf_p) = (char *) 0; 03514 (yy_init) = 0; 03515 (yy_start) = 0; 03516 03517 /* Defined in main.c */ 03518 #ifdef YY_STDINIT 03519 tagYYin = stdin; 03520 tagYYout = stdout; 03521 #else 03522 tagYYin = (FILE *) 0; 03523 tagYYout = (FILE *) 0; 03524 #endif 03525 03526 /* For future reference: Set errno on error, since we are called by 03527 * tagYYlex_init() 03528 */ 03529 return 0; 03530 } 03531 03532 /* tagYYlex_destroy is for both reentrant and non-reentrant scanners. */ 03533 int tagYYlex_destroy (void) 03534 { 03535 03536 /* Pop the buffer stack, destroying each element. */ 03537 while(YY_CURRENT_BUFFER){ 03538 tagYY_delete_buffer(YY_CURRENT_BUFFER ); 03539 YY_CURRENT_BUFFER_LVALUE = NULL; 03540 tagYYpop_buffer_state(); 03541 } 03542 03543 /* Destroy the stack itself. */ 03544 tagYYfree((yy_buffer_stack) ); 03545 (yy_buffer_stack) = NULL; 03546 03547 /* Reset the globals. This is important in a non-reentrant scanner so the next time 03548 * tagYYlex() is called, initialization will occur. */ 03549 yy_init_globals( ); 03550 03551 return 0; 03552 } 03553 03554 /* 03555 * Internal utility routines. 03556 */ 03557 03558 #ifndef yytext_ptr 03559 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) 03560 { 03561 register int i; 03562 for ( i = 0; i < n; ++i ) 03563 s1[i] = s2[i]; 03564 } 03565 #endif 03566 03567 #ifdef YY_NEED_STRLEN 03568 static int yy_flex_strlen (yyconst char * s ) 03569 { 03570 register int n; 03571 for ( n = 0; s[n]; ++n ) 03572 ; 03573 03574 return n; 03575 } 03576 #endif 03577 03578 void *tagYYalloc (yy_size_t size ) 03579 { 03580 return (void *) malloc( size ); 03581 } 03582 03583 void *tagYYrealloc (void * ptr, yy_size_t size ) 03584 { 03585 /* The cast to (char *) in the following accommodates both 03586 * implementations that use char* generic pointers, and those 03587 * that use void* generic pointers. It works with the latter 03588 * because both ANSI C and C++ allow castless assignment from 03589 * any pointer type to void*, and deal with argument conversions 03590 * as though doing an assignment. 03591 */ 03592 return (void *) realloc( (char *) ptr, size ); 03593 } 03594 03595 void tagYYfree (void * ptr ) 03596 { 03597 free( (char *) ptr ); /* see tagYYrealloc() for (char *) cast */ 03598 } 03599 03600 #define YYTABLES_NAME "yytables" 03601 03602 #line 673 "doxytag.l" 03603 03604 03605 03606 /*@ ---------------------------------------------------------------------------- 03607 */ 03608 03609 03610 void parse(QCString &s) 03611 { 03612 bases.clear(); 03613 nameBug = FALSE; 03614 //newClass = TRUE; 03615 inputString = s; 03616 inputPosition = 0; 03617 yyLineNr = 0; 03618 tagYYrestart( tagYYin ); 03619 BEGIN( Start ); 03620 tagYYlex(); 03621 //printf("Number of lines scanned: %d\n",yyLineNr); 03622 } 03623 03624 void parseFile(QFileInfo &fi) 03625 { 03626 printf("Parsing file %s...\n",fi.fileName().data()); 03627 QFile f; 03628 f.setName(fi.absFilePath()); 03629 if (f.open(IO_ReadOnly)) 03630 { 03631 yyFileName = fi.fileName(); 03632 className.resize(0); 03633 memberName.resize(0); 03634 //printf("Parsing file %s...\n",fi.fileName().data()); 03635 QCString input(fi.size()+1); 03636 docBaseLink=fi.fileName(); 03637 docRefName=fi.fileName().copy(); 03638 //searchIndex.addReference(docRefName,docBaseLink); 03639 //searchIndex.addWord(docRefName,docRefName,TRUE); 03640 f.readBlock(input.data(),fi.size()); 03641 input.at(fi.size())='\0'; 03642 parse(input); 03643 } 03644 else 03645 { 03646 fprintf(stderr,"Warning: Cannot open file %s\n",fi.fileName().data()); 03647 } 03648 } 03649 03650 void parseFileOrDir(const char *fileName) 03651 { 03652 QFileInfo fi(fileName); 03653 if (fi.exists()) 03654 { 03655 if (fi.isFile()) 03656 { 03657 parseFile(fi); 03658 } 03659 else if (fi.isDir()) 03660 { 03661 QDir dir(fileName); 03662 dir.setFilter( QDir::Files ); 03663 dir.setNameFilter( "*.html" ); 03664 const QFileInfoList *list = dir.entryInfoList(); 03665 QFileInfoListIterator it( *list ); 03666 QFileInfo *cfi; 03667 for ( it.toFirst() ; (cfi=it.current()) ; ++it) 03668 { 03669 if (cfi->isFile()) 03670 { 03671 parseFile(*cfi); 03672 } 03673 } 03674 } 03675 } 03676 else 03677 { 03678 fprintf(stderr,"Warning: File %s does not exist\n",fileName); 03679 } 03680 } 03681 03682 void usage(const char *name) 03683 { 03684 fprintf(stderr,"Doxytag version %s\nCopyright Dimitri van Heesch 1997-2008\n\n", 03685 versionString); 03686 fprintf(stderr," Generates a tag file and/or a search index for a set of HTML files\n\n"); 03687 fprintf(stderr,"Usage: %s [-t tag_file] [ html_file [html_file...] ]\n",name); 03688 fprintf(stderr,"Options:\n"); 03689 fprintf(stderr," -t <tag_file> Generate tag file <tag_file>.\n"); 03690 fprintf(stderr,"If no HTML files are given all files in the current dir that\n" 03691 "have a .html extension are parsed.\n\n"); 03692 exit(1); 03693 } 03694 03695 const char *getArg(int argc,char **argv,int &optind,const char c) 03696 { 03697 char *s=0; 03698 if (strlen(&argv[optind][2])>0) 03699 s=&argv[optind][2]; 03700 else if (optind+1<argc) 03701 s=argv[++optind]; 03702 else 03703 { 03704 fprintf(stderr,"option -%c requires an argument\n",c); 03705 exit(1); 03706 } 03707 return s; 03708 } 03709 03710 int main(int argc,char **argv) 03711 { 03712 QCString tagName; 03713 QCString indexName; 03714 03715 int optind=1; 03716 const char *arg; 03717 while (optind<argc && argv[optind][0]=='-') 03718 { 03719 switch(argv[optind][1]) 03720 { 03721 case 't': 03722 arg=getArg(argc,argv,optind,'t'); 03723 tagName=arg; 03724 break; 03725 case 's': 03726 arg=getArg(argc,argv,optind,'s'); 03727 indexName=arg; 03728 break; 03729 case 'h': 03730 case '?': 03731 usage(argv[0]); 03732 break; 03733 default: 03734 fprintf(stderr,"Unknown option -%c\n",argv[optind][1]); 03735 usage(argv[0]); 03736 } 03737 optind++; 03738 } 03739 03740 genTag = !tagName.isEmpty(); 03741 genIndex = !indexName.isEmpty(); 03742 03743 if (!genTag && !genIndex) 03744 { 03745 fprintf(stderr,"Nothing to do !\n\n"); 03746 usage(argv[0]); 03747 } 03748 03749 int i; 03750 if (optind>=argc) 03751 { 03752 parseFileOrDir("."); 03753 } 03754 else 03755 { 03756 for (i=optind;i<argc;i++) 03757 { 03758 parseFileOrDir(argv[i]); 03759 } 03760 } 03761 if (genIndex) 03762 { 03763 fprintf(stderr,"Error: doxytag cannot be used to generate a search index anymore.\n" 03764 "This functionality has been integrated into doxygen.\n"); 03765 // printf("Writing search index\n"); 03766 // if (!searchIndex.saveIndex(indexName)) 03767 // { 03768 // fprintf(stderr,"Error: Could not write search index\n"); 03769 // } 03770 // QFileInfo fi(indexName); 03771 // if (fi.exists()) 03772 // { 03773 // QCString dir=convertToQCString(fi.dir().absPath()); 03774 // fi.setFile(dir+"/search.png"); 03775 // if (!fi.exists()) writeSearchButton(dir); 03776 // fi.setFile(dir+"/doxygen.png"); 03777 // if (!fi.exists()) writeLogo(dir); 03778 // fi.setFile(dir+"/search.cgi"); 03779 // if (!fi.exists()) 03780 // { 03781 // QFile f; 03782 // f.setName(dir+"/search.cgi"); 03783 // if (f.open(IO_WriteOnly)) 03784 // { 03785 // QTextStream t(&f); 03786 // t << "#!/bin/sh" << endl 03787 // << "DOXYSEARCH=" << endl 03788 // << "DOXYPATH=" << endl 03789 // << "if [ -f $DOXYSEARCH ]" << endl 03790 // << "then" << endl 03791 // << " $DOXYSEARCH $DOXYPATH" << endl 03792 // << "else" << endl 03793 // << " echo \"Content-Type: text/html\"" << endl 03794 // << " echo \"\"" << endl 03795 // << " echo \"<H1>Error: $DOXYSEARCH not found. Check cgi script!\"" << endl 03796 // << "fi" << endl; 03797 // f.close(); 03798 // } 03799 // else 03800 // { 03801 // fprintf(stderr,"Error: could not open file %s for writing\n",(dir+"/search.cgi").data()); 03802 // } 03803 // } 03804 // } 03805 } 03806 if (genTag) 03807 { 03808 QFile f; 03809 f.setName(tagName); 03810 if (f.open(IO_WriteOnly)) 03811 { 03812 QTextStream t(&f); 03813 t << "<tagfile>" << endl; 03814 ClassDef *cd=classList.first(); 03815 while (cd) 03816 { 03817 t << " <compound kind=\""; 03818 if (cd->isFile) t << "file"; else t << "class"; 03819 t << "\">" << endl; 03820 t << " <name>" << convertToXML(cd->name) << "</name>" << endl; 03821 char *base=cd->bases.first(); 03822 while (base) 03823 { 03824 t << " <base>" << convertToXML(base) << "</base>" << endl; 03825 base=cd->bases.next(); 03826 } 03827 t << " <filename>" << convertToXML(cd->fileName) << "</filename>" << endl; 03828 MemberDef *md=cd->memberList.first(); 03829 while (md) 03830 { 03831 if (md->anchor.right(5)=="-enum") 03832 { 03833 t << " <member kind=\"enum\">" << endl; 03834 } 03835 else 03836 { 03837 t << " <member kind=\"function\">" << endl; 03838 } 03839 t << " <name>" << convertToXML(md->name) << "</name>" << endl; 03840 t << " <anchor>" << convertToXML(md->anchor) << "</anchor>" << endl; 03841 t << " <arglist>" << convertToXML(md->args) << "</arglist>" << endl; 03842 t << " </member>" << endl; 03843 md=cd->memberList.next(); 03844 } 03845 t << " </compound>" << endl; 03846 cd=classList.next(); 03847 } 03848 t << "</tagfile>" << endl; 03849 } 03850 else 03851 { 03852 fprintf(stderr,"Error: Could not write tag file %s\n",tagName.data()); 03853 } 03854 } 03855 return 0; 03856 } 03857 03858 extern "C" { 03859 int tagYYwrap() { return 1 ; } 03860 }; 03861