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 commentScanYYrestart(commentScanYYin ) 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 commentScanYYleng; 00155 00156 extern FILE *commentScanYYin, *commentScanYYout; 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 commentScanYYtext. */ \ 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 commentScanYYtext 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 commentScanYYrestart()), so that the user can continue scanning by 00248 * just pointing commentScanYYin 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 commentScanYYtext is formed. */ 00276 static char yy_hold_char; 00277 static int yy_n_chars; /* number of characters read into yy_ch_buf */ 00278 int commentScanYYleng; 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 commentScanYYwrap()'s to do buffer switches 00286 * instead of setting up a fresh commentScanYYin. A bit of a hack ... 00287 */ 00288 static int yy_did_buffer_switch_on_eof; 00289 00290 void commentScanYYrestart (FILE *input_file ); 00291 void commentScanYY_switch_to_buffer (YY_BUFFER_STATE new_buffer ); 00292 YY_BUFFER_STATE commentScanYY_create_buffer (FILE *file,int size ); 00293 void commentScanYY_delete_buffer (YY_BUFFER_STATE b ); 00294 void commentScanYY_flush_buffer (YY_BUFFER_STATE b ); 00295 void commentScanYYpush_buffer_state (YY_BUFFER_STATE new_buffer ); 00296 void commentScanYYpop_buffer_state (void ); 00297 00298 static void commentScanYYensure_buffer_stack (void ); 00299 static void commentScanYY_load_buffer_state (void ); 00300 static void commentScanYY_init_buffer (YY_BUFFER_STATE b,FILE *file ); 00301 00302 #define YY_FLUSH_BUFFER commentScanYY_flush_buffer(YY_CURRENT_BUFFER ) 00303 00304 YY_BUFFER_STATE commentScanYY_scan_buffer (char *base,yy_size_t size ); 00305 YY_BUFFER_STATE commentScanYY_scan_string (yyconst char *yy_str ); 00306 YY_BUFFER_STATE commentScanYY_scan_bytes (yyconst char *bytes,int len ); 00307 00308 void *commentScanYYalloc (yy_size_t ); 00309 void *commentScanYYrealloc (void *,yy_size_t ); 00310 void commentScanYYfree (void * ); 00311 00312 #define yy_new_buffer commentScanYY_create_buffer 00313 00314 #define yy_set_interactive(is_interactive) \ 00315 { \ 00316 if ( ! YY_CURRENT_BUFFER ){ \ 00317 commentScanYYensure_buffer_stack (); \ 00318 YY_CURRENT_BUFFER_LVALUE = \ 00319 commentScanYY_create_buffer(commentScanYYin,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 commentScanYYensure_buffer_stack (); \ 00328 YY_CURRENT_BUFFER_LVALUE = \ 00329 commentScanYY_create_buffer(commentScanYYin,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 #define commentScanYYwrap(n) 1 00339 #define YY_SKIP_YYWRAP 00340 00341 typedef unsigned char YY_CHAR; 00342 00343 FILE *commentScanYYin = (FILE *) 0, *commentScanYYout = (FILE *) 0; 00344 00345 typedef int yy_state_type; 00346 00347 extern int commentScanYYlineno; 00348 00349 int commentScanYYlineno = 1; 00350 00351 extern char *commentScanYYtext; 00352 #define yytext_ptr commentScanYYtext 00353 00354 static yy_state_type yy_get_previous_state (void ); 00355 static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); 00356 static int yy_get_next_buffer (void ); 00357 static void yy_fatal_error (yyconst char msg[] ); 00358 00359 /* Done after the current pattern has been matched and before the 00360 * corresponding action - sets up commentScanYYtext. 00361 */ 00362 #define YY_DO_BEFORE_ACTION \ 00363 (yytext_ptr) = yy_bp; \ 00364 commentScanYYleng = (size_t) (yy_cp - yy_bp); \ 00365 (yy_hold_char) = *yy_cp; \ 00366 *yy_cp = '\0'; \ 00367 (yy_c_buf_p) = yy_cp; 00368 00369 #define YY_NUM_RULES 161 00370 #define YY_END_OF_BUFFER 162 00371 /* This struct is not used in this scanner, 00372 but its presence is necessary. */ 00373 struct yy_trans_info 00374 { 00375 flex_int32_t yy_verify; 00376 flex_int32_t yy_nxt; 00377 }; 00378 static yyconst flex_int16_t yy_acclist[651] = 00379 { 0, 00380 105, 105, 118, 118, 158, 158, 162, 161, 29, 161, 00381 28, 161, 29, 161, 29, 161, 27, 29, 161, 29, 00382 161, 29, 161, 21, 29, 161, 29, 161, 29, 161, 00383 27, 29, 161, 74, 161, 73, 161, 74, 161, 71, 00384 74, 161, 74, 161, 74, 161, 161, 75, 161, 95, 00385 161, 94, 161, 95, 161, 92, 95, 161, 95, 161, 00386 56, 161, 56, 161, 55, 161, 56, 161, 56, 161, 00387 52, 56, 161, 56, 161, 56, 161, 60, 161, 59, 00388 161, 60, 161, 57, 60, 161, 60, 161, 60, 161, 00389 64, 161, 63, 161, 64, 161, 61, 64, 161, 64, 00390 00391 161, 64, 161, 64, 161, 56, 161, 55, 161, 56, 00392 161, 56, 161, 56, 161, 56, 161, 83, 161, 82, 00393 161, 83, 161, 80, 83, 161, 83, 161, 87, 161, 00394 86, 161, 87, 161, 87, 161, 91, 161, 90, 161, 00395 91, 161, 91, 161, 79, 161, 76, 161, 79, 161, 00396 77, 79, 161, 79, 161, 79, 161, 43, 161, 42, 00397 161, 43, 161, 40, 43, 161, 43, 161, 47, 161, 00398 47, 161, 46, 161, 47, 161, 47, 161, 44, 47, 00399 161, 47, 161, 47, 161, 51, 161, 50, 161, 51, 00400 161, 48, 51, 161, 51, 161, 67, 161, 161, 65, 00401 00402 161, 161, 69, 161, 70, 161, 161, 101, 161, 100, 00403 161, 99, 101, 161, 101, 161, 105, 108, 161, 102, 00404 161, 105, 108, 161, 108, 161, 108, 161, 110, 161, 00405 109, 161, 161, 113, 161, 113, 161, 111, 161, 113, 00406 161, 113, 161, 118, 122, 161, 119, 161, 122, 161, 00407 122, 161, 122, 161, 122, 161, 122, 161, 98, 161, 00408 96, 161, 98, 161, 126, 161, 124, 161, 123, 126, 00409 161, 126, 161, 133, 134, 161, 132, 161, 134, 161, 00410 134, 161, 134, 161, 136, 137, 161, 135, 161, 137, 00411 161, 137, 161, 140, 161, 138, 161, 140, 161, 144, 00412 00413 161, 142, 161, 144, 161, 141, 144, 161, 144, 161, 00414 147, 150, 161, 145, 161, 148, 150, 161, 149, 150, 00415 161, 150, 161, 150, 161, 153, 161, 151, 161, 153, 00416 161, 156, 161, 155, 161, 156, 161, 154, 156, 161, 00417 156, 161, 37, 39, 161, 38, 161, 39, 161, 39, 00418 161, 116, 161, 115, 161, 114, 116, 161, 116, 161, 00419 32, 33, 161, 31, 161, 33, 161, 33, 161, 158, 00420 160, 161, 159, 161, 160, 161, 160, 161, 160, 161, 00421 26, 4, 25, 23, 20, 20, 12, 20, 12, 12, 00422 12, 12, 12, 18, 19, 14, 20, 21, 12, 12, 00423 00424 12, 12, 12, 12, 12, 22, 71, 72, 71, 75, 00425 92, 92, 93, 52, 52, 54, 52, 57, 58, 57, 00426 61, 61, 62, 61, 80, 80, 81, 84, 85, 89, 00427 88, 89, 77, 78, 77, 40, 40, 40, 41, 44, 00428 44, 45, 44, 48, 48, 49, 65, 65, 66, 69, 00429 68, 99, 105, 102, 105, 107, 107, 104, 109, 112, 00430 118, 121, 120, 97, 123, 125, 133, 136, 139, 141, 00431 141, 143, 147, 146, 152, 154, 154, 37, 114, 32, 00432 158, 157, 24, 7, 1, 1, 2, 12, 12, 12, 00433 16, 17, 12, 12, 12, 14, 5, 12, 12, 12, 00434 00435 12, 12, 12, 71, 71, 71, 52, 57, 57, 57, 00436 61, 61, 61, 77, 77, 77, 40, 40, 40, 40, 00437 44, 48, 106, 34, 35, 36, 30, 157, 11, 1, 00438 13, 2, 8198, 12,16390, 12, 12, 12, 12, 12, 00439 8198, 12,16390, 12, 12, 12, 12, 71, 57, 61, 00440 53, 77, 40, 40, 40, 48, 106, 128, 30, 8198, 00441 8198, 12, 12, 15, 12, 12, 5, 8198, 12, 12, 00442 71, 57, 61, 77, 3, 12, 15, 12, 12, 12, 00443 12, 71, 57, 61, 77, 65, 130, 12, 12, 12, 00444 12, 12, 71, 57, 61, 77, 129, 127, 12, 12, 00445 00446 12, 12, 12, 71, 73, 94, 55, 57, 59, 61, 00447 63, 82, 86, 90, 76, 77, 42, 46, 50, 67, 00448 70, 100, 103, 110, 111, 117, 119, 96, 124, 131, 00449 132, 135, 138, 142, 145, 151, 155, 115, 31, 159, 00450 9, 8, 12, 12, 5, 12, 10, 12, 12, 26 00451 } ; 00452 00453 static yyconst flex_int16_t yy_accept[913] = 00454 { 0, 00455 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00456 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00457 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00458 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 00459 3, 3, 3, 3, 3, 4, 5, 5, 5, 5, 00460 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 00461 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 00462 5, 5, 5, 6, 7, 8, 9, 11, 13, 15, 00463 17, 20, 22, 24, 27, 29, 31, 34, 36, 38, 00464 40, 43, 45, 47, 48, 50, 52, 54, 56, 59, 00465 00466 61, 63, 65, 67, 69, 71, 74, 76, 78, 80, 00467 82, 84, 87, 89, 91, 93, 95, 97, 100, 102, 00468 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 00469 124, 127, 129, 131, 133, 135, 137, 139, 141, 143, 00470 145, 147, 149, 151, 154, 156, 158, 160, 162, 164, 00471 167, 169, 171, 173, 175, 177, 179, 182, 184, 186, 00472 188, 190, 192, 195, 197, 199, 200, 202, 203, 205, 00473 207, 208, 210, 212, 215, 217, 220, 222, 225, 227, 00474 229, 231, 233, 234, 236, 238, 240, 242, 244, 247, 00475 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 00476 00477 269, 272, 274, 277, 279, 281, 283, 285, 288, 290, 00478 292, 294, 296, 298, 300, 302, 304, 306, 309, 311, 00479 314, 316, 319, 322, 324, 326, 328, 330, 332, 334, 00480 336, 338, 341, 343, 346, 348, 350, 352, 354, 356, 00481 359, 361, 364, 366, 368, 370, 373, 375, 377, 379, 00482 381, 381, 382, 382, 382, 383, 383, 383, 384, 385, 00483 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 00484 385, 385, 386, 387, 388, 389, 390, 391, 392, 393, 00485 394, 395, 396, 398, 399, 400, 401, 402, 403, 404, 00486 405, 406, 406, 406, 406, 407, 407, 408, 408, 408, 00487 00488 408, 409, 410, 410, 411, 412, 412, 413, 413, 413, 00489 414, 414, 414, 414, 414, 415, 415, 415, 416, 416, 00490 417, 417, 417, 417, 418, 418, 419, 419, 419, 419, 00491 420, 421, 421, 422, 422, 422, 423, 423, 423, 424, 00492 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 00493 425, 425, 425, 426, 427, 427, 428, 428, 428, 429, 00494 429, 431, 431, 431, 432, 432, 433, 433, 433, 434, 00495 434, 434, 434, 435, 436, 437, 437, 437, 438, 438, 00496 439, 439, 440, 440, 440, 440, 440, 441, 441, 441, 00497 442, 442, 443, 443, 443, 443, 444, 445, 445, 446, 00498 00499 446, 447, 447, 448, 448, 449, 449, 450, 450, 451, 00500 451, 452, 452, 453, 453, 454, 455, 456, 456, 457, 00501 458, 458, 459, 459, 460, 460, 460, 460, 460, 461, 00502 461, 462, 463, 464, 464, 464, 464, 465, 465, 466, 00503 466, 467, 467, 468, 468, 468, 468, 469, 469, 469, 00504 470, 470, 471, 472, 472, 473, 473, 474, 474, 475, 00505 475, 475, 476, 476, 477, 477, 478, 478, 478, 479, 00506 479, 479, 480, 480, 481, 481, 481, 482, 483, 483, 00507 483, 483, 484, 484, 484, 484, 484, 484, 484, 485, 00508 485, 485, 485, 485, 486, 487, 488, 489, 490, 491, 00509 00510 492, 493, 493, 494, 495, 496, 497, 498, 499, 500, 00511 501, 502, 503, 504, 505, 506, 506, 507, 507, 507, 00512 507, 507, 508, 509, 510, 510, 511, 512, 513, 513, 00513 514, 514, 514, 514, 514, 514, 514, 514, 515, 516, 00514 516, 517, 518, 519, 520, 521, 521, 521, 521, 522, 00515 522, 523, 523, 523, 523, 523, 523, 523, 524, 524, 00516 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 00517 524, 524, 524, 524, 524, 524, 524, 525, 526, 527, 00518 527, 527, 528, 528, 529, 529, 529, 529, 530, 530, 00519 530, 530, 530, 530, 530, 530, 531, 532, 533, 536, 00520 00521 537, 537, 538, 539, 540, 540, 541, 544, 545, 546, 00522 547, 548, 549, 549, 549, 550, 551, 552, 552, 552, 00523 552, 553, 553, 554, 555, 556, 556, 556, 557, 557, 00524 557, 557, 557, 557, 558, 558, 558, 558, 558, 558, 00525 558, 558, 558, 558, 559, 559, 559, 559, 559, 559, 00526 559, 559, 559, 559, 560, 560, 560, 560, 560, 560, 00527 560, 560, 560, 560, 561, 563, 564, 565, 566, 567, 00528 569, 570, 571, 572, 572, 572, 573, 574, 574, 574, 00529 574, 575, 575, 575, 575, 575, 575, 575, 575, 575, 00530 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 00531 00532 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 00533 575, 575, 575, 575, 575, 575, 575, 575, 576, 576, 00534 576, 576, 576, 577, 578, 579, 580, 581, 582, 583, 00535 583, 583, 584, 585, 585, 585, 585, 586, 586, 586, 00536 586, 586, 586, 587, 587, 587, 587, 587, 587, 587, 00537 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 00538 587, 587, 588, 588, 588, 588, 588, 588, 588, 588, 00539 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 00540 588, 589, 590, 591, 592, 593, 594, 594, 594, 595, 00541 596, 596, 596, 596, 597, 597, 597, 597, 597, 597, 00542 00543 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 00544 597, 597, 597, 597, 597, 597, 598, 599, 599, 599, 00545 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 00546 599, 599, 599, 600, 601, 602, 603, 604, 606, 607, 00547 608, 610, 612, 613, 614, 615, 617, 618, 619, 620, 00548 621, 622, 623, 624, 625, 626, 627, 627, 627, 627, 00549 627, 627, 627, 628, 629, 630, 631, 632, 633, 634, 00550 635, 636, 637, 638, 639, 640, 641, 641, 641, 642, 00551 643, 644, 645, 646, 647, 647, 647, 647, 647, 647, 00552 647, 648, 649, 649, 650, 650, 650, 650, 650, 650, 00553 00554 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 00555 651, 651 00556 } ; 00557 00558 static yyconst flex_int32_t yy_ec[256] = 00559 { 0, 00560 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 00561 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 00562 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00563 1, 5, 6, 7, 8, 9, 8, 8, 1, 10, 00564 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, 00565 19, 19, 19, 19, 18, 18, 18, 20, 1, 21, 00566 1, 22, 1, 23, 24, 25, 26, 27, 28, 26, 00567 29, 30, 31, 26, 26, 32, 33, 26, 34, 35, 00568 26, 36, 26, 37, 38, 26, 26, 26, 26, 26, 00569 39, 40, 41, 1, 42, 1, 43, 44, 45, 46, 00570 00571 47, 48, 49, 50, 51, 26, 52, 53, 54, 55, 00572 56, 57, 26, 58, 59, 60, 61, 62, 26, 63, 00573 64, 26, 65, 1, 66, 67, 1, 1, 1, 1, 00574 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00575 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00576 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00577 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00578 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00579 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00580 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00581 00582 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00583 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00584 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00585 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00586 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00587 1, 1, 1, 1, 1 00588 } ; 00589 00590 static yyconst flex_int32_t yy_meta[68] = 00591 { 0, 00592 1, 2, 3, 4, 5, 1, 6, 7, 8, 9, 00593 10, 11, 12, 13, 14, 15, 16, 17, 17, 18, 00594 7, 19, 20, 21, 21, 21, 21, 21, 21, 21, 00595 21, 21, 21, 21, 21, 21, 21, 21, 1, 22, 00596 1, 23, 21, 21, 21, 21, 21, 21, 21, 21, 00597 24, 21, 21, 21, 25, 21, 21, 21, 21, 21, 00598 21, 21, 21, 21, 7, 26, 27 00599 } ; 00600 00601 static yyconst flex_int16_t yy_base[1106] = 00602 { 0, 00603 0, 0, 0, 66, 82, 149, 4034, 4028, 216, 0, 00604 283, 0, 350, 417, 484, 551, 618, 0, 685, 0, 00605 66, 67, 69, 72, 752, 819, 886, 0, 953, 0, 00606 1020, 0, 1087, 0, 98, 105, 1154, 0, 161, 164, 00607 1221, 0, 122, 128, 371, 390, 74, 75, 1288, 0, 00608 172, 374, 438, 439, 78, 92, 1355, 0, 171, 457, 00609 94, 97, 1422, 0, 409, 432, 496, 499, 1489, 0, 00610 360, 365, 505, 506, 4024, 6529, 6529, 138, 4007, 3990, 00611 497, 1551, 1605, 184, 1665, 376, 573, 6529, 6529, 0, 00612 430, 524, 792, 4004, 6529, 6529, 6529, 0, 100, 461, 00613 00614 6529, 449, 528, 776, 3964, 577, 472, 596, 6529, 6529, 00615 0, 766, 828, 1556, 6529, 6529, 0, 830, 1547, 1583, 00616 1614, 785, 796, 1635, 3961, 851, 605, 6529, 6529, 0, 00617 0, 1590, 6529, 6529, 3947, 1619, 6529, 6529, 3920, 1655, 00618 6529, 6529, 0, 1554, 1626, 1674, 6529, 6529, 0, 860, 00619 1678, 6529, 1719, 1731, 1738, 3901, 1750, 1696, 872, 6529, 00620 6529, 0, 3903, 1724, 6529, 0, 3902, 1743, 0, 6529, 00621 1754, 6529, 6529, 0, 3875, 396, 6529, 3872, 1741, 1807, 00622 6529, 0, 3868, 6529, 137, 6529, 3902, 3866, 0, 6529, 00623 6529, 3890, 3891, 3849, 138, 6529, 6529, 1769, 6529, 6529, 00624 00625 0, 1775, 0, 6529, 6529, 132, 359, 0, 6529, 6529, 00626 3846, 6529, 6529, 1781, 6529, 6529, 0, 0, 1785, 0, 00627 6529, 6529, 6529, 6529, 1789, 6529, 6529, 1795, 6529, 6529, 00628 0, 176, 3844, 0, 6529, 3837, 3834, 6529, 6529, 0, 00629 3839, 0, 6529, 3865, 3837, 0, 6529, 6529, 3806, 69, 00630 1645, 1799, 3830, 3859, 6529, 3839, 0, 6529, 3837, 203, 00631 3844, 151, 333, 1648, 349, 489, 1777, 361, 494, 3810, 00632 3792, 6529, 467, 382, 3779, 533, 564, 1816, 1713, 808, 00633 6529, 6529, 0, 1825, 809, 1817, 1763, 1578, 1849, 1831, 00634 1840, 443, 601, 1690, 6529, 3829, 1836, 1642, 1843, 1859, 00635 00636 6529, 1852, 3826, 6529, 751, 3797, 787, 3783, 1888, 6529, 00637 3742, 1892, 3774, 0, 1897, 1904, 1916, 1924, 1928, 6529, 00638 3735, 1936, 1944, 0, 3758, 1934, 1915, 1940, 1956, 6529, 00639 1946, 3755, 1948, 1952, 1962, 6529, 3749, 1988, 6529, 1978, 00640 2001, 3734, 0, 2005, 2024, 2032, 2040, 0, 2044, 2053, 00641 2063, 471, 0, 0, 2009, 6529, 3700, 3745, 6529, 2014, 00642 6529, 3698, 3740, 6529, 2068, 6529, 3687, 3725, 2058, 1956, 00643 2060, 2079, 6529, 2069, 2088, 2099, 0, 2108, 3710, 2127, 00644 2113, 6529, 3676, 2135, 3706, 0, 2139, 2147, 2158, 2166, 00645 2118, 6529, 3669, 2170, 2178, 0, 3701, 3701, 3690, 2186, 00646 00647 6529, 3651, 3687, 3651, 3681, 2190, 6529, 3637, 0, 2194, 00648 6529, 3629, 0, 3589, 1863, 6529, 3601, 3593, 6529, 3603, 00649 2198, 6529, 3556, 0, 3541, 1877, 3582, 3575, 6529, 3526, 00650 0, 6529, 6529, 3523, 3523, 2202, 6529, 3520, 0, 2206, 00651 6529, 3506, 0, 73, 3506, 3491, 0, 3490, 2210, 6529, 00652 3488, 0, 0, 2214, 6529, 3480, 0, 2218, 6529, 3477, 00653 2224, 6529, 3476, 1546, 3518, 1559, 3504, 3445, 0, 2918, 00654 529, 0, 2873, 0, 521, 2868, 0, 0, 2859, 2858, 00655 2888, 6529, 2877, 2841, 2824, 1771, 157, 2018, 6529, 555, 00656 568, 2829, 2825, 1673, 2226, 0, 1698, 1932, 2228, 6529, 00657 00658 6529, 0, 2234, 2152, 2232, 0, 0, 2236, 2240, 2238, 00659 2242, 2244, 2252, 6529, 2235, 2243, 2254, 0, 2825, 2304, 00660 2814, 0, 6529, 2280, 2294, 2299, 2837, 2301, 2309, 2316, 00661 2342, 2845, 2248, 2259, 2778, 2776, 2771, 6529, 2337, 2343, 00662 2348, 2371, 2391, 2399, 2411, 2770, 2419, 2762, 0, 0, 00663 2790, 2754, 2744, 2745, 2738, 2737, 0, 0, 2735, 2733, 00664 2729, 2730, 2709, 2703, 2698, 2689, 2683, 2668, 2671, 2666, 00665 2663, 2661, 2659, 2657, 0, 2655, 6529, 6529, 6529, 2646, 00666 2674, 2325, 2644, 0, 2643, 2605, 0, 6529, 2601, 2590, 00667 2620, 2350, 819, 2595, 2581, 2335, 6529, 0, 2486, 2376, 00668 00669 2566, 2377, 2356, 2405, 2587, 2430, 2553, 2575, 2576, 2581, 00670 2431, 2425, 2570, 2567, 2427, 2568, 6529, 2555, 2552, 2550, 00671 2584, 0, 2454, 2593, 2446, 2548, 2544, 2575, 2534, 2533, 00672 2428, 2426, 2423, 0, 2422, 2421, 2420, 2595, 2414, 2413, 00673 2407, 2407, 2401, 6529, 2390, 2385, 2383, 2372, 2371, 2370, 00674 2351, 2350, 2343, 2364, 2342, 2337, 2331, 2369, 2327, 2294, 00675 737, 2285, 2299, 0, 2382, 2604, 2270, 2577, 2612, 2659, 00676 2645, 2681, 2671, 2281, 2275, 2673, 2687, 2265, 2257, 2256, 00677 2699, 2733, 2255, 2251, 2241, 2233, 2234, 2230, 2226, 2225, 00678 2221, 2220, 2210, 2206, 2196, 2205, 814, 2172, 2177, 2168, 00679 00680 2171, 2167, 2163, 2155, 2154, 2134, 2143, 2138, 2137, 2130, 00681 2129, 2119, 2118, 2117, 2111, 2106, 2101, 2119, 2076, 2090, 00682 2073, 2066, 2700, 6529, 2624, 2726, 2728, 2738, 2739, 2070, 00683 2061, 2741, 2747, 2052, 2051, 2050, 2755, 2798, 2806, 2044, 00684 2043, 2039, 6529, 2035, 2025, 2019, 2017, 2015, 2009, 2005, 00685 1979, 1984, 1972, 1975, 1979, 1974, 1955, 1948, 1953, 1945, 00686 1943, 6529, 1937, 0, 0, 1933, 1931, 1927, 1923, 1908, 00687 1899, 1898, 1880, 1879, 1878, 1872, 1863, 1853, 1851, 1840, 00688 2739, 2745, 2772, 2788, 2792, 2803, 1828, 1827, 2817, 2824, 00689 1819, 1815, 1809, 2831, 1807, 1792, 1788, 1776, 1774, 1768, 00690 00691 1762, 1756, 1749, 1759, 0, 1742, 1742, 1719, 1711, 1717, 00692 1688, 1659, 1654, 1652, 0, 6529, 6529, 1650, 1646, 1638, 00693 1631, 1611, 1606, 1605, 1594, 1583, 1577, 1562, 1556, 1542, 00694 1582, 1569, 2641, 2760, 2833, 2840, 2847, 2444, 6529, 6529, 00695 2614, 2838, 6529, 6529, 6529, 2846, 6529, 6529, 6529, 6529, 00696 6529, 6529, 6529, 6529, 6529, 6529, 1528, 1514, 1510, 1505, 00697 840, 827, 6529, 6529, 6529, 6529, 6529, 6529, 6529, 6529, 00698 6529, 6529, 6529, 6529, 6529, 6529, 845, 816, 6529, 6529, 00699 2848, 2865, 151, 2867, 782, 746, 724, 723, 710, 562, 00700 6529, 2872, 356, 2879, 532, 461, 407, 401, 347, 305, 00701 00702 764, 82, 66, 59, 158, 16, 537, 1589, 1679, 2888, 00703 6529, 2928, 2955, 2982, 3009, 3036, 3063, 3090, 3117, 3144, 00704 3171, 3198, 3225, 3252, 3279, 3306, 3333, 3360, 3387, 3414, 00705 3441, 3468, 3495, 3511, 3525, 3544, 3560, 3579, 3606, 3622, 00706 3647, 2873, 3660, 3684, 3710, 3734, 3759, 3775, 3800, 3816, 00707 3840, 3866, 3890, 2885, 3899, 3924, 3951, 3978, 3994, 2892, 00708 4018, 4042, 4068, 4092, 2899, 4103, 3532, 4114, 4139, 4153, 00709 4178, 4205, 4219, 4244, 4271, 4285, 4310, 4337, 3537, 4348, 00710 4373, 3567, 4386, 4411, 4425, 4450, 4477, 4504, 4520, 4532, 00711 4537, 4563, 3572, 4577, 4601, 4626, 4642, 4656, 4681, 4694, 00712 00713 4712, 3670, 4736, 4760, 4769, 4794, 4810, 4824, 4849, 4865, 00714 4879, 3675, 4903, 4927, 4952, 4978, 4987, 5012, 5039, 5066, 00715 5082, 5096, 5120, 3695, 5144, 3700, 5168, 5192, 5201, 5212, 00716 5230, 5241, 5266, 5280, 5305, 5332, 5352, 5364, 5389, 5416, 00717 5430, 5455, 5482, 5493, 5518, 5531, 5549, 5574, 5588, 5613, 00718 5640, 2878, 5654, 5679, 5705, 3720, 5729, 5754, 3725, 3826, 00719 5780, 5794, 5808, 3831, 5832, 5843, 5857, 5871, 5885, 5899, 00720 5923, 5950, 5976, 5990, 6004, 6028, 6052, 6076, 6100, 6111, 00721 3853, 6122, 3876, 6131, 6156, 3881, 3655, 6170, 6195, 4004, 00722 6221, 6246, 6253, 6277, 6291, 6305, 4009, 6317, 6342, 6368, 00723 00724 6393, 6420, 6447, 6474, 6501 00725 } ; 00726 00727 static yyconst flex_int16_t yy_def[1106] = 00728 { 0, 00729 912, 912, 911, 3, 913, 913, 914, 914, 911, 9, 00730 911, 11, 915, 915, 916, 916, 911, 17, 911, 19, 00731 917, 917, 918, 918, 919, 919, 911, 27, 911, 29, 00732 911, 31, 911, 33, 920, 920, 911, 37, 921, 921, 00733 911, 41, 922, 922, 923, 923, 924, 924, 911, 49, 00734 925, 925, 926, 926, 927, 927, 911, 57, 928, 928, 00735 929, 929, 911, 63, 930, 930, 930, 930, 911, 69, 00736 931, 931, 932, 932, 911, 911, 911, 911, 933, 934, 00737 935, 911, 936, 937, 938, 911, 935, 911, 911, 939, 00738 940, 940, 940, 941, 911, 911, 911, 942, 943, 911, 00739 00740 911, 911, 911, 944, 911, 945, 911, 946, 911, 911, 00741 947, 948, 948, 948, 911, 911, 949, 950, 950, 950, 00742 950, 911, 911, 951, 911, 952, 953, 911, 911, 954, 00743 955, 911, 911, 911, 956, 911, 911, 911, 957, 911, 00744 911, 911, 958, 959, 959, 959, 911, 911, 960, 961, 00745 911, 911, 911, 911, 962, 911, 963, 911, 964, 911, 00746 911, 965, 966, 911, 911, 967, 968, 911, 969, 911, 00747 911, 911, 911, 970, 911, 971, 911, 972, 911, 911, 00748 911, 973, 911, 911, 911, 911, 974, 911, 975, 911, 00749 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00750 00751 976, 911, 977, 911, 911, 911, 911, 978, 911, 911, 00752 911, 911, 911, 911, 911, 911, 979, 980, 911, 981, 00753 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00754 982, 983, 911, 984, 911, 911, 911, 911, 911, 985, 00755 911, 986, 911, 911, 911, 987, 911, 911, 911, 911, 00756 911, 911, 911, 988, 911, 989, 990, 911, 989, 911, 00757 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00758 911, 911, 991, 992, 991, 992, 992, 992, 992, 992, 00759 911, 911, 993, 994, 995, 995, 995, 995, 995, 995, 00760 995, 911, 911, 911, 911, 996, 997, 998, 997, 911, 00761 00762 911, 997, 999, 911, 1000, 1001, 1000, 911, 911, 911, 00763 911, 911, 911, 1002, 1003, 1004, 1002, 1003, 911, 911, 00764 911, 1004, 1004, 1005, 1006, 1007, 1008, 1007, 911, 911, 00765 1007, 1009, 1010, 1011, 1010, 911, 1009, 911, 911, 1010, 00766 911, 911, 1012, 1013, 1014, 1012, 911, 1015, 1013, 1014, 00767 1014, 1016, 1017, 1017, 911, 911, 911, 1018, 911, 911, 00768 911, 911, 1019, 911, 911, 911, 911, 1020, 1021, 1022, 00769 1021, 911, 911, 1021, 1023, 911, 1024, 1023, 911, 1025, 00770 911, 911, 911, 911, 911, 1026, 1027, 1028, 1026, 1027, 00771 911, 911, 911, 1028, 1028, 1029, 1030, 1031, 1030, 911, 00772 00773 911, 911, 1032, 911, 1032, 911, 911, 911, 1033, 911, 00774 911, 911, 1034, 911, 1035, 911, 1036, 911, 911, 1037, 00775 911, 911, 911, 1038, 911, 911, 1039, 1039, 911, 911, 00776 1040, 911, 911, 911, 911, 911, 911, 911, 1041, 911, 00777 911, 911, 1042, 911, 911, 911, 1043, 911, 911, 911, 00778 911, 1044, 1044, 911, 911, 911, 1045, 911, 911, 911, 00779 911, 911, 911, 1046, 1047, 1046, 911, 911, 1048, 911, 00780 911, 1049, 911, 1050, 911, 911, 1051, 1052, 911, 911, 00781 1053, 911, 911, 911, 911, 911, 911, 1054, 911, 911, 00782 911, 911, 911, 1055, 1055, 1056, 911, 1057, 1057, 911, 00783 00784 911, 1058, 1057, 1057, 1057, 1059, 1060, 1061, 1061, 1061, 00785 1061, 1061, 1061, 911, 1062, 1062, 1063, 1064, 911, 1065, 00786 911, 1066, 911, 1067, 1067, 1068, 911, 1069, 1069, 1070, 00787 1071, 1072, 911, 1073, 911, 911, 911, 911, 1074, 1074, 00788 1075, 1076, 1077, 1078, 1078, 911, 1079, 911, 1080, 1081, 00789 1082, 911, 911, 911, 911, 911, 1083, 1084, 911, 911, 00790 911, 911, 911, 911, 911, 911, 911, 1085, 911, 911, 00791 911, 911, 911, 911, 1086, 911, 911, 911, 911, 911, 00792 911, 911, 911, 1087, 911, 911, 1088, 911, 911, 911, 00793 1089, 1089, 911, 911, 911, 911, 911, 1090, 911, 1091, 00794 00795 1092, 1091, 1091, 1091, 1093, 1094, 1094, 1094, 1094, 1094, 00796 1094, 1095, 911, 911, 1096, 1070, 911, 911, 911, 911, 00797 1075, 1097, 1076, 1076, 1077, 911, 911, 1082, 911, 911, 00798 911, 911, 911, 1084, 911, 911, 911, 911, 911, 911, 00799 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00800 911, 911, 911, 911, 911, 911, 911, 1098, 911, 911, 00801 911, 911, 911, 1099, 1099, 1091, 911, 1091, 1094, 1093, 00802 1094, 1094, 1095, 911, 911, 1096, 1070, 911, 911, 911, 00803 1075, 1100, 911, 911, 911, 911, 911, 911, 911, 911, 00804 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00805 00806 911, 911, 911, 1101, 911, 911, 911, 911, 911, 911, 00807 911, 911, 911, 911, 911, 911, 911, 1098, 911, 911, 00808 911, 911, 1091, 911, 1091, 1094, 1094, 1094, 1095, 911, 00809 911, 1096, 1070, 911, 911, 911, 1075, 1100, 1100, 911, 00810 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00811 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00812 911, 911, 911, 1102, 1103, 911, 911, 911, 911, 911, 00813 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00814 1091, 1091, 1094, 1094, 1094, 1095, 911, 911, 1096, 1070, 00815 911, 911, 911, 1075, 911, 911, 911, 911, 911, 911, 00816 00817 911, 911, 911, 911, 1104, 911, 911, 911, 911, 911, 00818 911, 911, 911, 911, 1105, 911, 911, 911, 911, 911, 00819 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00820 911, 911, 1091, 1091, 1094, 1094, 1094, 1095, 911, 911, 00821 1096, 1070, 911, 911, 911, 1075, 911, 911, 911, 911, 00822 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00823 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00824 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00825 1091, 911, 1093, 1094, 911, 911, 911, 911, 911, 911, 00826 911, 1091, 1093, 1094, 911, 911, 911, 911, 911, 911, 00827 00828 1093, 911, 911, 911, 1093, 911, 1093, 1093, 1093, 1093, 00829 0, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00830 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00831 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00832 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00833 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00834 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00835 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00836 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00837 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00838 00839 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00840 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00841 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00842 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00843 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00844 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00845 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00846 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00847 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00848 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 00849 00850 911, 911, 911, 911, 911 00851 } ; 00852 00853 static yyconst flex_int16_t yy_nxt[6597] = 00854 { 0, 00855 77, 77, 78, 77, 77, 77, 79, 77, 77, 77, 00856 77, 77, 80, 77, 80, 81, 77, 80, 80, 77, 00857 82, 77, 83, 84, 84, 84, 84, 84, 84, 84, 00858 84, 84, 84, 84, 84, 84, 84, 84, 77, 85, 00859 77, 84, 84, 84, 84, 84, 84, 84, 84, 84, 00860 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 00861 84, 84, 84, 84, 77, 77, 77, 86, 134, 134, 00862 86, 138, 135, 135, 138, 139, 197, 197, 139, 805, 00863 213, 87, 88, 88, 89, 88, 88, 88, 90, 88, 00864 88, 88, 88, 88, 213, 88, 227, 88, 92, 227, 00865 00866 170, 92, 88, 88, 88, 136, 136, 170, 140, 76, 00867 479, 140, 805, 198, 198, 306, 76, 214, 906, 308, 00868 88, 93, 88, 185, 186, 566, 185, 567, 187, 185, 00869 186, 214, 185, 228, 187, 478, 228, 171, 426, 251, 00870 252, 426, 251, 427, 171, 805, 88, 88, 88, 88, 00871 88, 89, 88, 88, 88, 90, 88, 88, 88, 88, 00872 88, 188, 88, 177, 88, 92, 177, 188, 92, 88, 00873 88, 88, 178, 221, 204, 178, 205, 253, 444, 435, 00874 222, 223, 445, 179, 434, 486, 179, 88, 93, 88, 00875 911, 465, 893, 224, 206, 467, 256, 507, 256, 256, 00876 00877 180, 256, 256, 180, 482, 486, 257, 482, 484, 485, 00878 225, 207, 907, 88, 88, 88, 96, 96, 97, 96, 00879 96, 96, 96, 96, 98, 96, 96, 96, 96, 96, 00880 96, 96, 96, 96, 96, 96, 96, 96, 96, 99, 00881 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 00882 99, 99, 99, 99, 96, 100, 96, 99, 99, 99, 00883 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 00884 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 00885 96, 96, 96, 101, 102, 103, 102, 102, 101, 101, 00886 101, 104, 101, 101, 101, 101, 101, 101, 101, 101, 00887 00888 101, 101, 105, 101, 101, 101, 106, 106, 106, 106, 00889 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 00890 106, 101, 107, 101, 106, 106, 106, 106, 106, 106, 00891 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 00892 106, 106, 106, 106, 106, 106, 106, 101, 101, 108, 00893 109, 109, 110, 109, 109, 109, 111, 109, 109, 109, 00894 109, 109, 243, 109, 486, 109, 113, 243, 805, 113, 00895 109, 109, 109, 190, 244, 191, 204, 292, 205, 244, 00896 292, 487, 192, 497, 491, 486, 497, 193, 109, 114, 00897 109, 293, 190, 194, 191, 507, 206, 904, 416, 245, 00898 00899 446, 192, 487, 491, 245, 444, 193, 417, 901, 445, 00900 195, 235, 194, 207, 109, 109, 109, 109, 109, 110, 00901 109, 109, 109, 111, 109, 109, 109, 109, 109, 195, 00902 109, 236, 109, 113, 235, 418, 113, 109, 109, 109, 00903 209, 209, 210, 210, 292, 298, 299, 292, 236, 299, 00904 312, 312, 312, 312, 236, 109, 114, 109, 293, 221, 00905 210, 210, 309, 310, 805, 309, 222, 223, 313, 299, 00906 805, 236, 533, 319, 320, 533, 319, 211, 211, 224, 00907 348, 109, 109, 109, 115, 115, 116, 115, 115, 115, 00908 117, 115, 115, 115, 115, 115, 225, 115, 235, 115, 00909 00910 119, 235, 311, 119, 120, 115, 115, 247, 247, 256, 00911 258, 256, 256, 321, 495, 903, 248, 248, 237, 257, 00912 486, 237, 115, 121, 115, 486, 581, 249, 249, 312, 00913 312, 312, 312, 496, 497, 237, 260, 497, 237, 911, 00914 299, 486, 582, 299, 250, 250, 486, 313, 115, 115, 00915 115, 115, 115, 116, 115, 115, 115, 117, 115, 115, 00916 115, 115, 115, 299, 115, 497, 115, 119, 497, 578, 00917 119, 120, 115, 115, 294, 295, 507, 294, 312, 312, 00918 312, 312, 486, 908, 902, 256, 258, 256, 256, 115, 00919 121, 115, 593, 498, 579, 257, 313, 322, 322, 322, 00920 00921 322, 486, 294, 295, 323, 294, 350, 350, 350, 350, 00922 499, 593, 260, 351, 900, 115, 115, 115, 101, 122, 00923 123, 122, 122, 101, 101, 101, 124, 101, 101, 101, 00924 101, 101, 101, 101, 101, 101, 101, 125, 101, 101, 00925 101, 126, 126, 126, 126, 126, 126, 126, 126, 126, 00926 126, 126, 126, 126, 126, 126, 101, 107, 101, 126, 00927 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 00928 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 00929 126, 126, 101, 101, 127, 128, 128, 129, 128, 128, 00930 128, 128, 128, 130, 128, 128, 128, 128, 128, 128, 00931 00932 128, 128, 128, 128, 128, 128, 128, 128, 131, 131, 00933 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 00934 131, 131, 131, 128, 132, 128, 131, 131, 131, 131, 00935 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 00936 131, 131, 131, 131, 131, 131, 131, 131, 131, 128, 00937 128, 128, 141, 141, 142, 141, 141, 141, 143, 141, 00938 141, 141, 141, 141, 486, 141, 306, 141, 145, 899, 00939 308, 145, 141, 141, 141, 898, 897, 312, 312, 312, 00940 312, 327, 328, 486, 314, 328, 341, 341, 341, 341, 00941 141, 146, 141, 300, 301, 313, 300, 341, 341, 341, 00942 00943 341, 896, 306, 507, 342, 328, 308, 911, 299, 497, 00944 497, 299, 497, 497, 905, 342, 141, 141, 141, 141, 00945 141, 142, 141, 141, 141, 143, 141, 141, 141, 141, 00946 141, 299, 141, 302, 141, 145, 895, 879, 145, 141, 00947 141, 141, 316, 911, 328, 334, 335, 328, 507, 335, 00948 661, 336, 347, 341, 341, 347, 754, 141, 146, 141, 00949 348, 376, 376, 376, 376, 505, 891, 328, 377, 335, 00950 342, 661, 755, 394, 394, 394, 394, 378, 378, 379, 00951 395, 890, 889, 141, 141, 141, 147, 147, 148, 147, 00952 147, 147, 147, 147, 149, 147, 147, 147, 147, 147, 00953 00954 147, 147, 147, 147, 147, 147, 147, 147, 147, 150, 00955 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 00956 150, 150, 150, 150, 147, 151, 147, 150, 150, 150, 00957 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 00958 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 00959 147, 147, 147, 152, 153, 154, 153, 153, 152, 152, 00960 152, 155, 152, 152, 152, 152, 152, 152, 152, 152, 00961 152, 152, 156, 152, 152, 152, 157, 157, 157, 157, 00962 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 00963 157, 152, 158, 152, 157, 157, 157, 157, 157, 157, 00964 00965 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 00966 157, 157, 157, 157, 157, 157, 157, 152, 152, 159, 00967 160, 160, 161, 160, 160, 160, 160, 160, 162, 160, 00968 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 00969 160, 160, 160, 163, 163, 163, 163, 163, 163, 163, 00970 163, 163, 163, 163, 163, 163, 163, 163, 160, 164, 00971 160, 163, 163, 163, 163, 163, 163, 163, 163, 163, 00972 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 00973 163, 163, 163, 163, 160, 160, 160, 76, 76, 165, 00974 76, 76, 76, 76, 76, 166, 76, 76, 76, 76, 00975 00976 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 00977 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 00978 167, 167, 167, 167, 167, 76, 168, 76, 167, 167, 00979 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 00980 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 00981 167, 76, 76, 76, 172, 172, 173, 172, 172, 172, 00982 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 00983 172, 172, 172, 172, 172, 172, 172, 174, 174, 174, 00984 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 00985 174, 174, 172, 175, 172, 174, 174, 174, 174, 174, 00986 00987 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 00988 174, 174, 174, 174, 174, 174, 174, 174, 172, 172, 00989 172, 76, 76, 181, 76, 76, 76, 76, 76, 76, 00990 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 00991 76, 76, 76, 76, 182, 182, 182, 182, 182, 182, 00992 182, 182, 182, 182, 182, 182, 182, 182, 182, 76, 00993 183, 76, 182, 182, 182, 182, 182, 182, 182, 182, 00994 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 00995 182, 182, 182, 182, 182, 76, 76, 76, 199, 199, 00996 200, 199, 199, 199, 199, 199, 199, 199, 199, 199, 00997 00998 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 00999 199, 201, 201, 201, 201, 201, 201, 201, 201, 201, 01000 201, 201, 201, 201, 201, 201, 199, 202, 199, 201, 01001 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 01002 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 01003 201, 201, 199, 199, 199, 215, 215, 216, 215, 215, 01004 215, 215, 215, 217, 215, 215, 215, 215, 215, 215, 01005 215, 215, 215, 215, 215, 215, 215, 215, 218, 218, 01006 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 01007 218, 218, 218, 215, 219, 215, 218, 218, 218, 218, 01008 01009 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 01010 218, 218, 218, 218, 218, 218, 218, 218, 218, 215, 01011 215, 215, 229, 229, 230, 229, 229, 229, 229, 229, 01012 231, 229, 229, 229, 229, 229, 229, 229, 229, 229, 01013 229, 229, 229, 229, 229, 232, 232, 232, 232, 232, 01014 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 01015 229, 233, 229, 232, 232, 232, 232, 232, 232, 232, 01016 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 01017 232, 232, 232, 232, 232, 232, 229, 229, 229, 238, 01018 238, 239, 238, 238, 238, 238, 238, 238, 238, 238, 01019 01020 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 01021 238, 238, 240, 240, 240, 240, 240, 240, 240, 240, 01022 240, 240, 240, 240, 240, 240, 240, 238, 241, 238, 01023 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 01024 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 01025 240, 240, 240, 238, 238, 238, 261, 329, 330, 888, 01026 329, 465, 911, 335, 887, 467, 335, 262, 911, 370, 01027 371, 911, 328, 371, 465, 328, 886, 263, 467, 497, 01028 264, 265, 497, 885, 266, 267, 335, 268, 269, 337, 01029 880, 355, 356, 371, 355, 328, 263, 331, 911, 335, 01030 01031 264, 265, 335, 879, 911, 878, 266, 267, 270, 271, 01032 268, 269, 272, 272, 877, 338, 339, 507, 338, 252, 01033 360, 361, 335, 360, 510, 272, 272, 273, 507, 911, 01034 335, 357, 909, 335, 876, 911, 341, 341, 341, 341, 01035 875, 911, 371, 343, 275, 371, 251, 252, 276, 251, 01036 277, 874, 278, 335, 342, 340, 365, 366, 516, 365, 01037 362, 516, 873, 872, 279, 371, 486, 280, 871, 281, 01038 282, 283, 272, 272, 596, 372, 373, 596, 372, 381, 01039 382, 516, 381, 486, 253, 272, 272, 275, 870, 911, 01040 371, 294, 295, 371, 294, 869, 367, 391, 392, 497, 01041 01042 391, 345, 497, 868, 273, 486, 286, 867, 287, 865, 01043 288, 864, 289, 371, 497, 374, 863, 497, 507, 383, 01044 384, 384, 384, 384, 290, 400, 401, 291, 400, 281, 01045 282, 283, 384, 384, 384, 384, 910, 393, 385, 384, 01046 384, 384, 384, 862, 406, 407, 386, 406, 419, 419, 01047 385, 384, 384, 384, 384, 410, 411, 385, 410, 503, 01048 861, 419, 419, 420, 497, 402, 860, 497, 504, 385, 01049 436, 437, 488, 436, 859, 488, 440, 441, 488, 440, 01050 419, 488, 449, 450, 408, 449, 454, 455, 858, 454, 01051 458, 459, 489, 458, 857, 412, 461, 462, 489, 461, 01052 01053 251, 252, 507, 251, 388, 805, 855, 419, 421, 422, 01054 438, 421, 490, 854, 419, 419, 442, 497, 497, 853, 01055 497, 497, 451, 509, 500, 852, 456, 419, 419, 419, 01056 460, 851, 497, 850, 490, 497, 463, 256, 253, 256, 01057 256, 497, 256, 256, 497, 849, 420, 257, 423, 848, 01058 497, 298, 299, 497, 501, 299, 507, 500, 911, 299, 01059 300, 301, 299, 300, 847, 416, 845, 298, 299, 508, 01060 507, 299, 844, 419, 417, 299, 843, 511, 426, 507, 01061 502, 426, 299, 427, 840, 839, 512, 501, 507, 309, 01062 310, 299, 309, 312, 312, 312, 312, 513, 312, 312, 01063 01064 312, 312, 418, 832, 517, 322, 322, 322, 322, 831, 01065 830, 313, 323, 502, 829, 828, 313, 520, 520, 520, 01066 520, 827, 826, 825, 314, 312, 312, 312, 312, 319, 01067 320, 525, 319, 497, 525, 313, 497, 322, 322, 322, 01068 322, 824, 823, 313, 323, 911, 911, 911, 911, 327, 01069 328, 822, 911, 328, 525, 911, 328, 329, 330, 328, 01070 329, 327, 328, 334, 335, 328, 821, 335, 529, 336, 01071 820, 529, 540, 328, 819, 540, 818, 911, 335, 328, 01072 599, 335, 316, 911, 815, 328, 814, 335, 813, 338, 01073 339, 529, 338, 334, 335, 540, 812, 335, 526, 336, 01074 01075 811, 335, 341, 341, 341, 341, 347, 341, 341, 347, 01076 355, 356, 810, 355, 348, 360, 361, 335, 360, 592, 01077 342, 809, 592, 805, 342, 350, 350, 350, 350, 808, 01078 530, 807, 351, 531, 531, 531, 531, 806, 805, 489, 01079 343, 347, 341, 341, 347, 347, 341, 341, 347, 348, 01080 804, 342, 803, 348, 350, 350, 350, 350, 802, 342, 01081 801, 351, 800, 342, 911, 911, 911, 911, 799, 365, 01082 366, 911, 365, 370, 371, 911, 371, 371, 798, 371, 01083 372, 373, 797, 372, 370, 371, 796, 795, 371, 376, 01084 376, 376, 376, 793, 792, 791, 377, 371, 345, 371, 01085 01086 376, 376, 376, 376, 788, 378, 378, 379, 371, 376, 01087 376, 376, 376, 787, 381, 382, 377, 381, 379, 391, 01088 392, 541, 391, 780, 779, 378, 378, 379, 376, 376, 01089 376, 376, 778, 777, 587, 377, 384, 384, 384, 384, 01090 384, 384, 384, 384, 544, 544, 379, 776, 394, 394, 01091 394, 394, 775, 497, 385, 395, 497, 774, 385, 547, 01092 547, 547, 547, 773, 772, 771, 386, 384, 384, 384, 01093 384, 394, 394, 394, 394, 770, 769, 385, 395, 911, 01094 911, 911, 911, 768, 767, 385, 911, 400, 401, 766, 01095 400, 406, 407, 765, 406, 410, 411, 603, 410, 421, 01096 01097 422, 764, 421, 436, 437, 763, 436, 440, 441, 761, 01098 440, 449, 450, 760, 449, 454, 455, 759, 454, 458, 01099 459, 758, 458, 757, 388, 461, 462, 596, 461, 497, 01100 596, 756, 497, 497, 597, 497, 497, 497, 497, 497, 01101 497, 497, 497, 497, 497, 497, 497, 753, 497, 533, 01102 298, 516, 533, 497, 516, 752, 497, 348, 911, 516, 01103 533, 751, 516, 533, 597, 750, 749, 748, 348, 298, 01104 299, 747, 746, 299, 516, 507, 745, 507, 604, 507, 01105 744, 507, 516, 507, 600, 743, 606, 742, 607, 610, 01106 597, 507, 602, 299, 608, 327, 525, 741, 611, 525, 01107 01108 609, 740, 736, 735, 612, 520, 520, 520, 520, 911, 01109 525, 734, 314, 525, 327, 328, 334, 529, 328, 525, 01110 529, 731, 336, 313, 911, 529, 654, 730, 529, 654, 01111 911, 334, 335, 525, 724, 335, 596, 336, 328, 596, 01112 529, 722, 721, 531, 531, 531, 531, 720, 529, 615, 01113 343, 592, 370, 540, 592, 335, 540, 497, 911, 540, 01114 497, 342, 540, 370, 371, 654, 616, 371, 654, 719, 01115 316, 489, 376, 376, 376, 376, 540, 497, 497, 622, 01116 497, 497, 540, 665, 587, 717, 665, 371, 623, 623, 01117 379, 716, 625, 625, 625, 625, 715, 714, 621, 377, 01118 01119 376, 376, 376, 376, 713, 712, 497, 377, 345, 497, 01120 379, 599, 376, 376, 376, 376, 544, 544, 379, 377, 01121 547, 547, 547, 547, 711, 710, 709, 386, 544, 544, 01122 379, 497, 497, 666, 497, 497, 599, 708, 385, 707, 01123 298, 299, 327, 328, 299, 706, 328, 625, 625, 625, 01124 625, 705, 668, 704, 377, 376, 376, 376, 376, 298, 01125 299, 703, 622, 299, 299, 379, 328, 702, 701, 507, 01126 507, 623, 623, 379, 692, 691, 690, 689, 672, 673, 01127 688, 676, 687, 299, 669, 388, 664, 665, 664, 664, 01128 665, 664, 664, 664, 664, 664, 664, 664, 664, 664, 01129 01130 664, 664, 664, 664, 664, 664, 664, 664, 664, 274, 01131 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 01132 274, 274, 274, 274, 664, 664, 664, 274, 274, 274, 01133 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 01134 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 01135 664, 664, 664, 664, 665, 664, 664, 665, 664, 664, 01136 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 01137 664, 664, 664, 664, 664, 664, 497, 497, 497, 497, 01138 497, 497, 497, 334, 335, 497, 686, 335, 685, 336, 01139 398, 664, 670, 664, 376, 376, 376, 376, 684, 370, 01140 01141 371, 622, 683, 371, 680, 497, 679, 335, 497, 678, 01142 623, 623, 379, 497, 507, 507, 497, 664, 664, 664, 01143 507, 675, 677, 371, 674, 497, 507, 725, 497, 327, 01144 328, 667, 671, 328, 663, 607, 607, 662, 681, 693, 01145 694, 489, 497, 660, 695, 497, 497, 696, 697, 497, 01146 723, 507, 698, 328, 659, 657, 699, 700, 726, 664, 01147 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 01148 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 01149 664, 664, 497, 782, 507, 497, 298, 299, 327, 328, 01150 299, 727, 328, 656, 655, 582, 653, 664, 664, 664, 01151 01152 881, 497, 334, 335, 497, 652, 335, 651, 336, 650, 01153 299, 649, 328, 648, 370, 371, 647, 729, 371, 732, 01154 507, 646, 645, 664, 664, 664, 335, 497, 643, 497, 01155 497, 728, 497, 733, 376, 376, 376, 376, 371, 497, 01156 497, 622, 497, 497, 781, 737, 497, 642, 641, 497, 01157 738, 738, 379, 640, 298, 299, 327, 328, 299, 639, 01158 328, 497, 334, 335, 497, 507, 335, 507, 336, 783, 01159 370, 371, 784, 497, 371, 638, 497, 507, 299, 637, 01160 328, 833, 786, 636, 789, 635, 335, 633, 632, 497, 01161 790, 834, 497, 497, 371, 631, 497, 785, 794, 376, 01162 01163 376, 376, 376, 630, 629, 398, 622, 376, 376, 376, 01164 376, 507, 627, 599, 622, 738, 738, 379, 298, 299, 01165 626, 620, 299, 738, 738, 379, 619, 507, 618, 835, 01166 836, 507, 327, 328, 882, 252, 328, 882, 837, 334, 01167 335, 497, 299, 335, 497, 336, 370, 371, 497, 497, 01168 371, 497, 497, 334, 335, 617, 328, 335, 336, 336, 01169 838, 370, 371, 335, 614, 371, 882, 252, 497, 882, 01170 371, 497, 883, 497, 841, 613, 497, 335, 595, 507, 01171 497, 842, 594, 497, 590, 371, 507, 589, 846, 251, 01172 252, 588, 251, 305, 892, 305, 305, 305, 584, 884, 01173 01174 607, 584, 584, 587, 253, 353, 507, 353, 353, 353, 01175 586, 585, 375, 894, 375, 375, 375, 599, 507, 397, 01176 583, 397, 397, 397, 607, 580, 577, 883, 76, 76, 01177 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 01178 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 01179 76, 76, 76, 76, 76, 91, 91, 91, 91, 91, 01180 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 01181 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 01182 91, 91, 94, 94, 94, 94, 94, 94, 94, 94, 01183 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 01184 01185 94, 94, 94, 94, 94, 94, 94, 94, 94, 112, 01186 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 01187 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 01188 112, 112, 112, 112, 112, 112, 118, 118, 118, 118, 01189 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 01190 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 01191 118, 118, 118, 133, 133, 133, 133, 133, 133, 133, 01192 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 01193 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 01194 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 01195 01196 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 01197 137, 137, 137, 137, 137, 137, 137, 144, 144, 144, 01198 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 01199 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 01200 144, 144, 144, 144, 169, 169, 169, 169, 169, 169, 01201 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 01202 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 01203 169, 176, 176, 176, 176, 176, 176, 176, 176, 176, 01204 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 01205 176, 176, 176, 176, 176, 176, 176, 176, 184, 184, 01206 01207 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 01208 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 01209 184, 184, 184, 184, 184, 189, 189, 189, 189, 189, 01210 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 01211 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 01212 189, 189, 196, 196, 196, 196, 196, 196, 196, 196, 01213 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 01214 196, 196, 196, 196, 196, 196, 196, 196, 196, 203, 01215 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 01216 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 01217 01218 203, 203, 203, 203, 203, 203, 208, 208, 208, 208, 01219 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 01220 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 01221 208, 208, 208, 212, 212, 212, 212, 212, 212, 212, 01222 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 01223 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 01224 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 01225 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 01226 220, 220, 220, 220, 220, 220, 220, 226, 226, 226, 01227 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 01228 01229 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 01230 226, 226, 226, 226, 234, 234, 234, 234, 234, 234, 01231 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 01232 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 01233 234, 242, 242, 242, 242, 242, 242, 242, 242, 242, 01234 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 01235 242, 242, 242, 242, 242, 242, 242, 242, 246, 246, 01236 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 01237 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 01238 246, 246, 246, 246, 246, 254, 254, 576, 254, 254, 01239 01240 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 01241 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 01242 254, 254, 256, 465, 256, 256, 575, 256, 574, 573, 01243 256, 256, 572, 256, 256, 256, 259, 259, 259, 259, 01244 571, 259, 570, 569, 259, 259, 259, 259, 259, 259, 01245 274, 274, 403, 568, 403, 403, 403, 452, 565, 452, 01246 452, 452, 274, 274, 274, 274, 274, 274, 274, 274, 01247 274, 284, 564, 284, 284, 563, 284, 562, 561, 284, 01248 284, 429, 284, 284, 284, 285, 285, 464, 429, 464, 01249 464, 464, 506, 560, 506, 506, 506, 285, 285, 285, 01250 01251 285, 285, 285, 285, 285, 285, 296, 296, 559, 296, 01252 296, 557, 296, 296, 296, 296, 296, 296, 296, 296, 01253 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 01254 296, 296, 296, 297, 423, 297, 297, 297, 297, 297, 01255 418, 556, 297, 297, 297, 297, 297, 303, 303, 303, 01256 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 01257 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 01258 303, 303, 303, 303, 307, 584, 307, 307, 584, 584, 01259 307, 555, 307, 307, 307, 315, 315, 315, 315, 554, 01260 315, 315, 315, 315, 315, 344, 404, 344, 344, 344, 01261 01262 553, 315, 404, 552, 315, 398, 315, 315, 315, 550, 01263 315, 318, 318, 318, 318, 542, 398, 542, 542, 542, 01264 387, 548, 387, 387, 387, 389, 318, 318, 546, 543, 01265 318, 538, 318, 318, 318, 324, 324, 324, 324, 537, 01266 598, 324, 598, 598, 598, 506, 364, 506, 506, 506, 01267 536, 359, 535, 346, 324, 911, 324, 324, 324, 325, 01268 325, 527, 325, 325, 523, 325, 325, 325, 325, 325, 01269 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 01270 325, 325, 325, 325, 325, 325, 326, 521, 326, 326, 01271 326, 326, 326, 317, 519, 326, 326, 326, 326, 326, 01272 01273 332, 332, 306, 332, 332, 518, 332, 332, 332, 332, 01274 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 01275 332, 332, 332, 332, 332, 332, 332, 333, 304, 333, 01276 333, 333, 333, 333, 333, 514, 333, 333, 333, 333, 01277 333, 344, 344, 344, 344, 496, 605, 344, 605, 605, 01278 605, 305, 493, 305, 305, 305, 492, 344, 483, 257, 01279 344, 257, 344, 344, 344, 255, 344, 349, 349, 349, 01280 349, 480, 478, 551, 349, 551, 551, 551, 476, 475, 01281 473, 471, 349, 349, 470, 468, 349, 448, 349, 349, 01282 349, 352, 352, 352, 352, 434, 558, 352, 558, 558, 01283 01284 558, 464, 433, 464, 464, 464, 432, 430, 429, 425, 01285 352, 418, 352, 352, 352, 354, 414, 404, 398, 354, 01286 389, 354, 354, 354, 358, 358, 364, 358, 358, 358, 01287 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 01288 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 01289 358, 363, 363, 359, 363, 363, 363, 363, 363, 363, 01290 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 01291 363, 363, 363, 363, 363, 363, 363, 363, 368, 368, 01292 346, 368, 368, 317, 368, 368, 368, 368, 368, 368, 01293 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 01294 01295 368, 368, 368, 368, 368, 369, 304, 369, 369, 369, 01296 369, 369, 257, 255, 369, 369, 369, 369, 369, 380, 01297 380, 380, 380, 911, 598, 380, 598, 598, 598, 682, 01298 95, 682, 682, 682, 380, 380, 95, 911, 380, 911, 01299 380, 380, 380, 387, 387, 387, 387, 911, 911, 387, 01300 911, 911, 911, 911, 911, 911, 911, 911, 911, 387, 01301 911, 911, 387, 911, 387, 387, 387, 911, 387, 390, 01302 390, 390, 390, 911, 911, 911, 911, 911, 911, 911, 01303 911, 911, 911, 911, 390, 390, 911, 911, 390, 911, 01304 390, 390, 390, 396, 396, 396, 396, 911, 911, 396, 01305 01306 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 01307 911, 911, 396, 911, 396, 396, 396, 399, 911, 399, 01308 911, 911, 911, 399, 911, 399, 399, 399, 405, 911, 01309 405, 911, 911, 911, 405, 911, 405, 405, 405, 409, 01310 409, 911, 409, 409, 409, 409, 409, 409, 409, 911, 01311 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 01312 911, 409, 409, 409, 409, 409, 413, 911, 911, 413, 01313 911, 911, 911, 413, 911, 413, 413, 413, 415, 415, 01314 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 01315 415, 415, 415, 415, 415, 415, 415, 911, 415, 415, 01316 01317 415, 415, 415, 415, 415, 417, 417, 911, 417, 417, 01318 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 01319 417, 417, 417, 417, 911, 417, 417, 417, 417, 417, 01320 417, 417, 424, 911, 911, 424, 911, 911, 911, 424, 01321 911, 424, 424, 424, 428, 428, 911, 428, 428, 428, 01322 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 01323 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 01324 428, 431, 431, 911, 431, 911, 431, 431, 431, 431, 01325 431, 911, 431, 431, 431, 431, 911, 431, 431, 431, 01326 911, 431, 911, 431, 431, 431, 431, 431, 439, 911, 01327 01328 911, 439, 911, 911, 911, 439, 911, 439, 439, 439, 01329 443, 443, 911, 443, 911, 443, 443, 443, 443, 443, 01330 443, 443, 443, 443, 443, 443, 443, 443, 443, 911, 01331 443, 911, 443, 443, 443, 443, 443, 447, 447, 911, 01332 447, 911, 447, 447, 447, 447, 447, 447, 447, 447, 01333 447, 447, 447, 447, 447, 447, 911, 447, 911, 447, 01334 447, 447, 447, 447, 453, 911, 911, 911, 453, 911, 01335 453, 453, 453, 457, 457, 911, 457, 457, 457, 457, 01336 457, 911, 911, 457, 457, 457, 457, 457, 457, 457, 01337 457, 457, 911, 457, 911, 457, 457, 457, 457, 457, 01338 01339 466, 911, 466, 466, 911, 911, 466, 911, 466, 466, 01340 466, 469, 469, 911, 469, 469, 469, 469, 469, 469, 01341 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 01342 911, 469, 911, 469, 469, 469, 469, 469, 472, 911, 01343 911, 472, 911, 911, 911, 472, 911, 472, 472, 472, 01344 474, 474, 911, 474, 474, 474, 474, 474, 474, 474, 01345 474, 474, 474, 911, 474, 474, 474, 474, 474, 474, 01346 474, 911, 474, 474, 474, 474, 474, 477, 477, 911, 01347 477, 477, 477, 477, 477, 477, 477, 911, 477, 477, 01348 477, 477, 477, 477, 477, 477, 911, 477, 911, 477, 01349 01350 477, 477, 477, 477, 254, 254, 911, 254, 254, 254, 01351 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 01352 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 01353 254, 256, 911, 256, 256, 911, 256, 911, 911, 256, 01354 256, 911, 256, 256, 256, 481, 911, 911, 481, 911, 01355 911, 911, 481, 911, 481, 481, 481, 494, 911, 494, 01356 494, 494, 911, 494, 274, 911, 911, 274, 911, 911, 01357 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 01358 911, 911, 911, 274, 911, 274, 274, 274, 284, 911, 01359 284, 284, 911, 284, 911, 911, 284, 284, 911, 284, 01360 01361 284, 284, 285, 911, 911, 285, 911, 911, 911, 911, 01362 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 01363 911, 285, 285, 285, 285, 285, 296, 296, 911, 296, 01364 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 01365 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 01366 296, 296, 296, 297, 911, 297, 297, 297, 297, 297, 01367 911, 911, 297, 297, 297, 297, 297, 515, 911, 515, 01368 911, 515, 515, 515, 911, 911, 515, 515, 515, 515, 01369 515, 303, 303, 303, 303, 303, 303, 303, 303, 303, 01370 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 01371 01372 303, 303, 303, 303, 303, 303, 303, 303, 307, 911, 01373 307, 307, 911, 911, 307, 911, 307, 307, 307, 305, 01374 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 01375 911, 911, 305, 911, 305, 305, 305, 318, 318, 318, 01376 318, 911, 911, 911, 911, 911, 911, 911, 911, 911, 01377 911, 911, 318, 318, 911, 911, 318, 911, 318, 318, 01378 318, 324, 324, 324, 324, 911, 911, 324, 911, 911, 01379 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 01380 324, 911, 324, 324, 324, 522, 911, 911, 911, 522, 01381 911, 522, 522, 522, 325, 325, 911, 325, 325, 325, 01382 01383 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 01384 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 01385 325, 326, 911, 326, 326, 326, 326, 326, 911, 911, 01386 326, 326, 326, 326, 326, 524, 911, 524, 911, 524, 01387 524, 524, 911, 911, 524, 524, 524, 524, 524, 332, 01388 332, 911, 332, 332, 332, 332, 332, 332, 332, 332, 01389 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 01390 332, 332, 332, 332, 332, 332, 333, 911, 333, 333, 01391 333, 333, 333, 333, 911, 333, 333, 333, 333, 333, 01392 528, 911, 528, 911, 528, 528, 528, 911, 911, 528, 01393 01394 528, 528, 528, 528, 349, 349, 349, 349, 911, 911, 01395 911, 349, 911, 911, 911, 911, 911, 911, 911, 349, 01396 349, 911, 911, 349, 911, 349, 349, 349, 352, 352, 01397 352, 352, 911, 911, 352, 911, 911, 911, 911, 911, 01398 911, 911, 911, 911, 911, 911, 911, 352, 911, 352, 01399 352, 352, 532, 532, 532, 532, 532, 532, 532, 532, 01400 532, 911, 532, 532, 532, 532, 532, 532, 532, 532, 01401 532, 532, 532, 532, 532, 532, 532, 532, 532, 534, 01402 911, 911, 534, 911, 911, 911, 534, 911, 911, 911, 01403 911, 911, 911, 911, 534, 911, 911, 911, 534, 911, 01404 01405 534, 534, 534, 354, 911, 911, 911, 354, 911, 354, 01406 354, 354, 358, 358, 911, 358, 358, 358, 358, 358, 01407 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 01408 358, 358, 358, 358, 358, 358, 358, 358, 358, 363, 01409 363, 911, 363, 363, 363, 363, 363, 363, 363, 363, 01410 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 01411 363, 363, 363, 363, 363, 363, 368, 368, 911, 368, 01412 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 01413 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 01414 368, 368, 368, 369, 911, 369, 369, 369, 369, 369, 01415 01416 911, 911, 369, 369, 369, 369, 369, 539, 911, 539, 01417 911, 539, 539, 539, 911, 911, 539, 539, 539, 539, 01418 539, 380, 380, 380, 380, 911, 911, 380, 911, 911, 01419 911, 911, 911, 911, 911, 911, 380, 380, 911, 911, 01420 380, 911, 380, 380, 380, 545, 545, 545, 545, 911, 01421 911, 545, 911, 911, 911, 911, 911, 911, 911, 911, 01422 545, 545, 911, 911, 545, 911, 545, 545, 545, 390, 01423 390, 390, 390, 911, 911, 911, 911, 911, 911, 911, 01424 911, 911, 911, 911, 390, 390, 911, 911, 390, 911, 01425 390, 390, 390, 396, 396, 396, 396, 911, 911, 396, 01426 01427 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 01428 911, 911, 396, 911, 396, 396, 396, 549, 911, 911, 01429 911, 549, 911, 549, 549, 549, 399, 911, 399, 911, 01430 911, 911, 399, 911, 399, 399, 399, 551, 911, 911, 01431 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 01432 551, 911, 551, 551, 551, 405, 911, 405, 911, 911, 01433 911, 405, 911, 405, 405, 405, 409, 409, 911, 409, 01434 409, 409, 409, 409, 409, 409, 911, 409, 409, 409, 01435 409, 409, 409, 409, 409, 409, 409, 911, 409, 409, 01436 409, 409, 409, 413, 911, 911, 413, 911, 911, 911, 01437 01438 413, 911, 413, 413, 413, 415, 415, 415, 415, 415, 01439 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 01440 415, 415, 415, 415, 911, 415, 415, 415, 415, 415, 01441 415, 415, 417, 417, 911, 417, 417, 417, 417, 417, 01442 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 01443 417, 911, 417, 417, 417, 417, 417, 417, 417, 558, 01444 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 01445 911, 911, 558, 911, 558, 558, 558, 424, 911, 911, 01446 424, 911, 911, 911, 424, 911, 424, 424, 424, 428, 01447 428, 911, 428, 428, 428, 428, 428, 428, 428, 428, 01448 01449 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 01450 428, 428, 428, 428, 428, 428, 431, 431, 911, 431, 01451 911, 431, 431, 431, 431, 431, 911, 431, 431, 431, 01452 431, 911, 431, 431, 431, 911, 431, 911, 431, 431, 01453 431, 431, 431, 439, 911, 911, 439, 911, 911, 911, 01454 439, 911, 439, 439, 439, 443, 443, 911, 443, 911, 01455 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 01456 443, 443, 443, 443, 911, 443, 911, 443, 443, 443, 01457 443, 443, 447, 447, 911, 447, 911, 447, 447, 447, 01458 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 01459 01460 447, 911, 447, 911, 447, 447, 447, 447, 447, 453, 01461 911, 911, 911, 453, 911, 453, 453, 453, 457, 457, 01462 911, 457, 457, 457, 457, 457, 911, 911, 457, 457, 01463 457, 457, 457, 457, 457, 457, 457, 911, 457, 911, 01464 457, 457, 457, 457, 457, 466, 911, 466, 466, 911, 01465 911, 466, 911, 466, 466, 466, 464, 911, 911, 911, 01466 911, 911, 911, 911, 911, 911, 911, 911, 911, 464, 01467 911, 464, 464, 464, 469, 469, 911, 469, 469, 469, 01468 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 01469 469, 469, 469, 911, 469, 911, 469, 469, 469, 469, 01470 01471 469, 472, 911, 911, 472, 911, 911, 911, 472, 911, 01472 472, 472, 472, 474, 474, 911, 474, 474, 474, 474, 01473 474, 474, 474, 474, 474, 474, 911, 474, 474, 474, 01474 474, 474, 474, 474, 911, 474, 474, 474, 474, 474, 01475 477, 477, 911, 477, 477, 477, 477, 477, 477, 477, 01476 911, 477, 477, 477, 477, 477, 477, 477, 477, 911, 01477 477, 911, 477, 477, 477, 477, 477, 481, 481, 911, 01478 481, 911, 911, 911, 481, 911, 481, 481, 481, 591, 01479 591, 911, 591, 591, 591, 591, 591, 591, 591, 591, 01480 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 01481 01482 591, 591, 591, 591, 591, 591, 494, 911, 911, 494, 01483 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 01484 911, 911, 911, 911, 911, 494, 911, 494, 494, 494, 01485 274, 911, 911, 274, 911, 911, 911, 911, 911, 911, 01486 911, 911, 911, 911, 911, 911, 911, 911, 911, 274, 01487 911, 274, 274, 274, 601, 601, 911, 601, 601, 601, 01488 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 01489 601, 601, 601, 601, 601, 601, 601, 601, 601, 911, 01490 601, 285, 911, 911, 285, 911, 911, 911, 911, 911, 01491 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 01492 01493 285, 285, 285, 285, 285, 515, 911, 515, 515, 515, 01494 515, 515, 911, 911, 515, 515, 515, 515, 515, 297, 01495 911, 297, 297, 297, 297, 297, 911, 911, 297, 297, 01496 297, 297, 297, 315, 315, 315, 315, 911, 911, 315, 01497 911, 911, 911, 911, 911, 911, 911, 911, 911, 315, 01498 911, 911, 315, 911, 315, 315, 315, 911, 315, 522, 01499 911, 911, 911, 522, 911, 522, 522, 522, 524, 911, 01500 524, 524, 524, 524, 524, 911, 911, 524, 524, 524, 01501 524, 524, 326, 911, 326, 326, 326, 326, 326, 911, 01502 911, 326, 326, 326, 326, 326, 528, 911, 528, 528, 01503 01504 528, 528, 528, 528, 911, 528, 528, 528, 528, 528, 01505 333, 911, 333, 333, 333, 333, 333, 333, 911, 333, 01506 333, 333, 333, 333, 344, 344, 344, 344, 911, 911, 01507 344, 911, 911, 911, 911, 911, 911, 911, 911, 911, 01508 344, 911, 911, 344, 911, 344, 344, 344, 911, 344, 01509 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 01510 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 01511 532, 532, 532, 532, 532, 532, 532, 534, 911, 911, 01512 534, 911, 911, 911, 534, 911, 911, 911, 911, 911, 01513 911, 911, 534, 911, 911, 911, 534, 911, 534, 534, 01514 01515 534, 539, 911, 539, 539, 539, 539, 539, 911, 911, 01516 539, 539, 539, 539, 539, 369, 911, 369, 369, 369, 01517 369, 369, 911, 911, 369, 369, 369, 369, 369, 624, 01518 624, 624, 624, 911, 911, 624, 911, 911, 911, 911, 01519 911, 911, 911, 911, 624, 624, 911, 911, 624, 911, 01520 624, 624, 624, 542, 542, 542, 542, 911, 911, 542, 01521 911, 911, 911, 911, 911, 911, 911, 911, 911, 542, 01522 911, 911, 542, 911, 542, 542, 542, 545, 545, 545, 01523 545, 911, 911, 545, 911, 911, 911, 911, 911, 911, 01524 911, 911, 545, 545, 911, 911, 545, 911, 545, 545, 01525 01526 545, 387, 387, 387, 387, 911, 911, 387, 911, 911, 01527 911, 911, 911, 911, 911, 911, 911, 387, 911, 911, 01528 387, 911, 387, 387, 387, 911, 387, 549, 911, 911, 01529 911, 549, 911, 549, 549, 549, 628, 911, 628, 911, 01530 911, 911, 628, 911, 628, 628, 628, 634, 911, 911, 01531 911, 634, 911, 634, 634, 634, 644, 644, 644, 644, 01532 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 01533 644, 644, 911, 644, 644, 644, 911, 644, 911, 911, 01534 644, 644, 644, 658, 911, 911, 658, 911, 911, 911, 01535 658, 911, 658, 658, 658, 591, 591, 911, 591, 591, 01536 01537 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 01538 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 01539 591, 591, 274, 911, 911, 274, 911, 911, 911, 911, 01540 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 01541 911, 274, 911, 274, 274, 274, 601, 601, 911, 601, 01542 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 01543 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 01544 601, 601, 601, 605, 605, 605, 605, 605, 285, 911, 01545 911, 285, 911, 911, 911, 911, 911, 911, 911, 911, 01546 911, 911, 911, 911, 911, 911, 911, 285, 285, 285, 01547 01548 285, 285, 297, 911, 297, 297, 297, 297, 297, 911, 01549 911, 297, 297, 297, 297, 297, 326, 911, 326, 326, 01550 326, 326, 326, 911, 911, 326, 326, 326, 326, 326, 01551 718, 718, 911, 718, 911, 911, 911, 718, 911, 718, 01552 718, 718, 664, 664, 664, 664, 664, 664, 664, 664, 01553 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 01554 664, 664, 911, 664, 911, 911, 911, 664, 664, 739, 01555 739, 739, 739, 911, 911, 739, 911, 911, 911, 911, 01556 911, 911, 911, 911, 739, 739, 911, 911, 739, 911, 01557 739, 739, 739, 762, 762, 762, 762, 762, 762, 762, 01558 01559 762, 762, 762, 762, 762, 762, 762, 762, 762, 911, 01560 762, 762, 762, 911, 762, 911, 762, 911, 762, 762, 01561 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 01562 816, 816, 816, 816, 816, 816, 911, 816, 816, 816, 01563 911, 816, 911, 911, 911, 816, 816, 817, 817, 817, 01564 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 01565 817, 817, 817, 911, 817, 817, 817, 911, 817, 911, 01566 911, 911, 817, 817, 856, 856, 856, 856, 856, 856, 01567 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 01568 911, 856, 856, 856, 911, 856, 911, 911, 911, 856, 01569 01570 856, 866, 866, 866, 866, 866, 866, 866, 866, 866, 01571 866, 866, 866, 866, 866, 866, 866, 911, 866, 866, 01572 866, 911, 866, 911, 911, 911, 866, 866, 75, 911, 01573 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 01574 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 01575 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 01576 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 01577 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 01578 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 01579 911, 911, 911, 911, 911, 911 01580 01581 } ; 01582 01583 static yyconst flex_int16_t yy_chk[6597] = 01584 { 0, 01585 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 01586 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 01587 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 01588 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 01589 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 01590 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 01591 3, 3, 3, 3, 3, 3, 3, 4, 21, 22, 01592 4, 23, 21, 22, 24, 23, 47, 48, 24, 906, 01593 55, 4, 5, 5, 5, 5, 5, 5, 5, 5, 01594 5, 5, 5, 5, 56, 5, 61, 5, 5, 62, 01595 01596 35, 5, 5, 5, 5, 21, 22, 36, 23, 35, 01597 250, 24, 904, 47, 48, 99, 36, 55, 903, 99, 01598 5, 5, 5, 43, 43, 444, 43, 444, 43, 44, 01599 44, 56, 44, 61, 44, 250, 62, 35, 185, 78, 01600 78, 185, 78, 185, 36, 902, 5, 5, 5, 6, 01601 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 01602 6, 43, 6, 39, 6, 6, 40, 44, 6, 6, 01603 6, 6, 39, 59, 51, 40, 51, 78, 206, 195, 01604 59, 59, 206, 39, 195, 487, 40, 6, 6, 6, 01605 883, 232, 883, 59, 51, 232, 84, 905, 84, 84, 01606 01607 39, 84, 84, 40, 260, 487, 84, 260, 262, 262, 01608 59, 51, 905, 6, 6, 6, 9, 9, 9, 9, 01609 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 01610 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 01611 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 01612 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 01613 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 01614 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 01615 9, 9, 9, 11, 11, 11, 11, 11, 11, 11, 01616 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 01617 01618 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 01619 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 01620 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 01621 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 01622 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 01623 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 01624 13, 13, 71, 13, 263, 13, 13, 72, 900, 13, 01625 13, 13, 13, 45, 71, 45, 52, 86, 52, 72, 01626 86, 265, 45, 274, 268, 263, 274, 45, 13, 13, 01627 13, 86, 46, 45, 46, 893, 52, 899, 176, 71, 01628 01629 207, 46, 265, 268, 72, 207, 46, 176, 893, 207, 01630 45, 65, 46, 52, 13, 13, 13, 14, 14, 14, 01631 14, 14, 14, 14, 14, 14, 14, 14, 14, 46, 01632 14, 65, 14, 14, 66, 176, 14, 14, 14, 14, 01633 53, 54, 53, 54, 292, 91, 91, 292, 65, 91, 01634 102, 102, 102, 102, 66, 14, 14, 14, 292, 60, 01635 53, 54, 100, 100, 898, 100, 60, 60, 102, 91, 01636 897, 66, 352, 107, 107, 352, 107, 53, 54, 60, 01637 352, 14, 14, 14, 15, 15, 15, 15, 15, 15, 01638 15, 15, 15, 15, 15, 15, 60, 15, 67, 15, 01639 01640 15, 68, 100, 15, 15, 15, 15, 73, 74, 81, 01641 81, 81, 81, 107, 273, 896, 73, 74, 67, 81, 01642 266, 68, 15, 15, 15, 269, 475, 73, 74, 103, 01643 103, 103, 103, 273, 276, 67, 81, 276, 68, 92, 01644 92, 266, 475, 92, 73, 74, 269, 103, 15, 15, 01645 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 01646 16, 16, 16, 92, 16, 277, 16, 16, 277, 471, 01647 16, 16, 16, 16, 87, 87, 907, 87, 106, 106, 01648 106, 106, 490, 907, 895, 87, 87, 87, 87, 16, 01649 16, 16, 491, 276, 471, 87, 106, 108, 108, 108, 01650 01651 108, 490, 293, 293, 108, 293, 127, 127, 127, 127, 01652 277, 491, 87, 127, 890, 16, 16, 16, 17, 17, 01653 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 01654 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 01655 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 01656 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 01657 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 01658 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 01659 17, 17, 17, 17, 17, 19, 19, 19, 19, 19, 01660 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 01661 01662 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 01663 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 01664 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 01665 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 01666 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 01667 19, 19, 25, 25, 25, 25, 25, 25, 25, 25, 01668 25, 25, 25, 25, 661, 25, 305, 25, 25, 889, 01669 305, 25, 25, 25, 25, 888, 887, 104, 104, 104, 01670 104, 112, 112, 661, 104, 112, 122, 122, 122, 122, 01671 25, 25, 25, 93, 93, 104, 93, 123, 123, 123, 01672 01673 123, 886, 307, 901, 122, 112, 307, 93, 93, 280, 01674 285, 93, 280, 285, 901, 123, 25, 25, 25, 26, 01675 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 01676 26, 93, 26, 93, 26, 26, 885, 878, 26, 26, 01677 26, 26, 104, 113, 113, 118, 118, 113, 285, 118, 01678 593, 118, 126, 126, 126, 126, 697, 26, 26, 26, 01679 126, 150, 150, 150, 150, 280, 877, 113, 150, 118, 01680 126, 593, 697, 159, 159, 159, 159, 150, 150, 150, 01681 159, 862, 861, 26, 26, 26, 27, 27, 27, 27, 01682 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 01683 01684 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 01685 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 01686 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 01687 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 01688 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 01689 27, 27, 27, 29, 29, 29, 29, 29, 29, 29, 01690 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 01691 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 01692 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 01693 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 01694 01695 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 01696 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 01697 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 01698 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 01699 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 01700 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 01701 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 01702 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 01703 31, 31, 31, 31, 31, 31, 31, 33, 33, 33, 01704 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 01705 01706 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 01707 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 01708 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 01709 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 01710 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 01711 33, 33, 33, 33, 37, 37, 37, 37, 37, 37, 01712 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 01713 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 01714 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 01715 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 01716 01717 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 01718 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 01719 37, 41, 41, 41, 41, 41, 41, 41, 41, 41, 01720 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 01721 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 01722 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 01723 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 01724 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 01725 41, 41, 41, 41, 41, 41, 41, 41, 49, 49, 01726 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 01727 01728 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 01729 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 01730 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 01731 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 01732 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 01733 49, 49, 49, 49, 49, 57, 57, 57, 57, 57, 01734 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 01735 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 01736 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 01737 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 01738 01739 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 01740 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 01741 57, 57, 63, 63, 63, 63, 63, 63, 63, 63, 01742 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 01743 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 01744 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 01745 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 01746 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 01747 63, 63, 63, 63, 63, 63, 63, 63, 63, 69, 01748 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 01749 01750 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 01751 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 01752 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 01753 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 01754 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 01755 69, 69, 69, 69, 69, 69, 82, 114, 114, 860, 01756 114, 464, 119, 119, 859, 464, 119, 82, 119, 144, 01757 144, 114, 114, 144, 466, 114, 858, 82, 466, 288, 01758 82, 82, 288, 857, 82, 82, 119, 82, 82, 120, 01759 832, 132, 132, 144, 132, 114, 82, 114, 120, 120, 01760 01761 82, 82, 120, 831, 120, 830, 82, 82, 82, 82, 01762 82, 82, 83, 83, 829, 121, 121, 288, 121, 828, 01763 136, 136, 120, 136, 288, 83, 83, 83, 908, 121, 01764 121, 132, 908, 121, 827, 121, 124, 124, 124, 124, 01765 826, 145, 145, 124, 83, 145, 251, 251, 83, 251, 01766 83, 825, 83, 121, 124, 121, 140, 140, 298, 140, 01767 136, 298, 824, 823, 83, 145, 264, 83, 822, 83, 01768 83, 83, 85, 85, 494, 146, 146, 494, 146, 151, 01769 151, 298, 151, 264, 251, 85, 85, 85, 821, 146, 01770 146, 294, 294, 146, 294, 820, 140, 158, 158, 497, 01771 01772 158, 124, 497, 819, 85, 264, 85, 818, 85, 814, 01773 85, 813, 85, 146, 279, 146, 812, 279, 909, 151, 01774 153, 153, 153, 153, 85, 164, 164, 85, 164, 85, 01775 85, 85, 154, 154, 154, 154, 909, 158, 153, 155, 01776 155, 155, 155, 811, 168, 168, 155, 168, 179, 179, 01777 154, 157, 157, 157, 157, 171, 171, 155, 171, 279, 01778 810, 179, 179, 179, 287, 164, 809, 287, 279, 157, 01779 198, 198, 486, 198, 808, 486, 202, 202, 267, 202, 01780 179, 267, 214, 214, 168, 214, 219, 219, 807, 219, 01781 225, 225, 486, 225, 806, 171, 228, 228, 267, 228, 01782 01783 252, 252, 287, 252, 155, 804, 803, 179, 180, 180, 01784 198, 180, 267, 802, 180, 180, 202, 278, 286, 801, 01785 278, 286, 214, 287, 278, 800, 219, 180, 180, 180, 01786 225, 799, 290, 798, 267, 290, 228, 284, 252, 284, 01787 284, 291, 284, 284, 291, 797, 180, 284, 180, 796, 01788 289, 297, 297, 289, 278, 297, 286, 289, 299, 299, 01789 300, 300, 299, 300, 795, 415, 793, 302, 302, 286, 01790 290, 302, 792, 180, 415, 297, 791, 290, 426, 291, 01791 278, 426, 299, 426, 788, 787, 290, 289, 289, 309, 01792 309, 302, 309, 312, 312, 312, 312, 291, 315, 315, 01793 01794 315, 315, 415, 780, 302, 316, 316, 316, 316, 779, 01795 778, 312, 316, 289, 777, 776, 315, 317, 317, 317, 01796 317, 775, 774, 773, 317, 318, 318, 318, 318, 319, 01797 319, 327, 319, 498, 327, 317, 498, 322, 322, 322, 01798 322, 772, 771, 318, 322, 323, 323, 323, 323, 326, 01799 326, 770, 323, 326, 327, 328, 328, 329, 329, 328, 01800 329, 331, 331, 333, 333, 331, 769, 333, 334, 333, 01801 768, 334, 370, 326, 767, 370, 766, 335, 335, 328, 01802 498, 335, 317, 335, 763, 331, 761, 333, 760, 338, 01803 338, 334, 338, 340, 340, 370, 759, 340, 331, 340, 01804 01805 758, 335, 341, 341, 341, 341, 344, 344, 344, 344, 01806 355, 355, 757, 355, 344, 360, 360, 340, 360, 488, 01807 341, 756, 488, 755, 344, 345, 345, 345, 345, 754, 01808 340, 753, 345, 346, 346, 346, 346, 752, 751, 488, 01809 346, 347, 347, 347, 347, 349, 349, 349, 349, 347, 01810 750, 346, 749, 349, 350, 350, 350, 350, 748, 347, 01811 747, 350, 746, 349, 351, 351, 351, 351, 745, 365, 01812 365, 351, 365, 369, 369, 371, 371, 369, 744, 371, 01813 372, 372, 742, 372, 374, 374, 741, 740, 374, 375, 01814 375, 375, 375, 736, 735, 734, 375, 369, 346, 371, 01815 01816 376, 376, 376, 376, 731, 375, 375, 375, 374, 378, 01817 378, 378, 378, 730, 381, 381, 378, 381, 376, 391, 01818 391, 374, 391, 722, 721, 378, 378, 378, 380, 380, 01819 380, 380, 720, 719, 718, 380, 384, 384, 384, 384, 01820 387, 387, 387, 387, 380, 380, 380, 717, 388, 388, 01821 388, 388, 716, 504, 384, 388, 504, 715, 387, 389, 01822 389, 389, 389, 714, 713, 712, 389, 390, 390, 390, 01823 390, 394, 394, 394, 394, 711, 710, 389, 394, 395, 01824 395, 395, 395, 709, 708, 390, 395, 400, 400, 707, 01825 400, 406, 406, 706, 406, 410, 410, 504, 410, 421, 01826 01827 421, 705, 421, 436, 436, 704, 436, 440, 440, 703, 01828 440, 449, 449, 702, 449, 454, 454, 701, 454, 458, 01829 458, 700, 458, 699, 389, 461, 461, 495, 461, 499, 01830 495, 698, 499, 505, 495, 503, 505, 508, 503, 510, 01831 508, 509, 510, 511, 509, 512, 511, 696, 512, 533, 01832 515, 515, 533, 513, 515, 695, 513, 533, 516, 516, 01833 534, 694, 516, 534, 495, 693, 692, 691, 534, 517, 01834 517, 690, 689, 517, 515, 508, 688, 510, 505, 509, 01835 687, 511, 516, 512, 499, 686, 508, 685, 509, 512, 01836 495, 513, 503, 517, 510, 524, 524, 684, 513, 524, 01837 01838 511, 683, 680, 679, 517, 520, 520, 520, 520, 525, 01839 525, 678, 520, 525, 526, 526, 528, 528, 526, 524, 01840 528, 675, 528, 520, 529, 529, 582, 674, 529, 582, 01841 529, 530, 530, 525, 667, 530, 596, 530, 526, 596, 01842 528, 663, 662, 531, 531, 531, 531, 660, 529, 526, 01843 531, 592, 539, 539, 592, 530, 539, 603, 540, 540, 01844 603, 531, 540, 541, 541, 654, 530, 541, 654, 659, 01845 520, 592, 542, 542, 542, 542, 539, 600, 602, 542, 01846 600, 602, 540, 665, 658, 657, 665, 541, 542, 542, 01847 542, 656, 543, 543, 543, 543, 655, 653, 541, 543, 01848 01849 544, 544, 544, 544, 652, 651, 604, 544, 531, 604, 01850 543, 603, 545, 545, 545, 545, 544, 544, 544, 545, 01851 547, 547, 547, 547, 650, 649, 648, 547, 545, 545, 01852 545, 606, 611, 600, 606, 611, 602, 647, 547, 646, 01853 612, 612, 615, 615, 612, 645, 615, 625, 625, 625, 01854 625, 643, 604, 642, 625, 623, 623, 623, 623, 838, 01855 838, 641, 623, 838, 612, 625, 615, 640, 639, 606, 01856 611, 623, 623, 623, 637, 636, 635, 633, 611, 612, 01857 632, 615, 631, 838, 606, 547, 599, 599, 599, 599, 01858 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 01859 01860 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 01861 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 01862 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 01863 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 01864 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 01865 599, 599, 599, 607, 607, 607, 607, 607, 607, 607, 01866 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 01867 607, 607, 607, 607, 607, 607, 608, 609, 668, 608, 01868 609, 668, 610, 616, 616, 610, 630, 616, 629, 616, 01869 628, 607, 607, 607, 624, 624, 624, 624, 627, 621, 01870 01871 621, 624, 626, 621, 620, 666, 619, 616, 666, 618, 01872 624, 624, 624, 669, 608, 609, 669, 607, 607, 607, 01873 610, 614, 616, 621, 613, 725, 605, 668, 725, 841, 01874 841, 601, 608, 841, 595, 609, 610, 594, 621, 638, 01875 638, 591, 833, 590, 638, 833, 671, 638, 638, 671, 01876 666, 669, 638, 841, 589, 586, 638, 638, 669, 670, 01877 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 01878 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 01879 670, 670, 672, 725, 671, 672, 673, 673, 676, 676, 01880 673, 671, 676, 585, 583, 581, 580, 670, 670, 670, 01881 01882 833, 723, 677, 677, 723, 576, 677, 574, 677, 573, 01883 673, 572, 676, 571, 681, 681, 570, 673, 681, 676, 01884 672, 569, 568, 670, 670, 670, 677, 726, 567, 727, 01885 726, 672, 727, 677, 682, 682, 682, 682, 681, 728, 01886 781, 682, 728, 781, 723, 681, 782, 566, 565, 782, 01887 682, 682, 682, 564, 729, 729, 732, 732, 729, 563, 01888 732, 834, 733, 733, 834, 726, 733, 727, 733, 726, 01889 737, 737, 727, 783, 737, 562, 783, 728, 729, 561, 01890 732, 781, 729, 560, 732, 559, 733, 556, 555, 784, 01891 733, 782, 784, 785, 737, 554, 785, 728, 737, 738, 01892 01893 738, 738, 738, 553, 552, 551, 738, 739, 739, 739, 01894 739, 783, 548, 834, 739, 738, 738, 738, 786, 786, 01895 546, 537, 786, 739, 739, 739, 536, 784, 535, 783, 01896 784, 785, 789, 789, 835, 835, 789, 835, 785, 790, 01897 790, 836, 786, 790, 836, 790, 794, 794, 837, 881, 01898 794, 837, 881, 842, 842, 532, 789, 842, 527, 842, 01899 786, 846, 846, 790, 521, 846, 882, 882, 884, 882, 01900 794, 884, 835, 892, 789, 519, 892, 842, 493, 836, 01901 894, 790, 492, 894, 485, 846, 837, 484, 794, 910, 01902 910, 483, 910, 942, 881, 942, 942, 942, 1052, 836, 01903 01904 837, 1052, 1052, 481, 882, 954, 884, 954, 954, 954, 01905 480, 479, 960, 884, 960, 960, 960, 892, 894, 965, 01906 476, 965, 965, 965, 894, 473, 470, 910, 912, 912, 01907 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 01908 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 01909 912, 912, 912, 912, 912, 913, 913, 913, 913, 913, 01910 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 01911 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 01912 913, 913, 914, 914, 914, 914, 914, 914, 914, 914, 01913 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 01914 01915 914, 914, 914, 914, 914, 914, 914, 914, 914, 915, 01916 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 01917 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 01918 915, 915, 915, 915, 915, 915, 916, 916, 916, 916, 01919 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 01920 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 01921 916, 916, 916, 917, 917, 917, 917, 917, 917, 917, 01922 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 01923 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 01924 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 01925 01926 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 01927 918, 918, 918, 918, 918, 918, 918, 919, 919, 919, 01928 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 01929 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 01930 919, 919, 919, 919, 920, 920, 920, 920, 920, 920, 01931 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 01932 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 01933 920, 921, 921, 921, 921, 921, 921, 921, 921, 921, 01934 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 01935 921, 921, 921, 921, 921, 921, 921, 921, 922, 922, 01936 01937 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 01938 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 01939 922, 922, 922, 922, 922, 923, 923, 923, 923, 923, 01940 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 01941 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 01942 923, 923, 924, 924, 924, 924, 924, 924, 924, 924, 01943 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 01944 924, 924, 924, 924, 924, 924, 924, 924, 924, 925, 01945 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 01946 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 01947 01948 925, 925, 925, 925, 925, 925, 926, 926, 926, 926, 01949 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 01950 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 01951 926, 926, 926, 927, 927, 927, 927, 927, 927, 927, 01952 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 01953 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 01954 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 01955 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 01956 928, 928, 928, 928, 928, 928, 928, 929, 929, 929, 01957 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 01958 01959 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 01960 929, 929, 929, 929, 930, 930, 930, 930, 930, 930, 01961 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 01962 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 01963 930, 931, 931, 931, 931, 931, 931, 931, 931, 931, 01964 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 01965 931, 931, 931, 931, 931, 931, 931, 931, 932, 932, 01966 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 01967 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 01968 932, 932, 932, 932, 932, 933, 933, 468, 933, 933, 01969 01970 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 01971 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 01972 933, 933, 934, 467, 934, 934, 465, 934, 463, 460, 01973 934, 934, 456, 934, 934, 934, 935, 935, 935, 935, 01974 451, 935, 448, 446, 935, 935, 935, 935, 935, 935, 01975 936, 936, 967, 445, 967, 967, 967, 979, 442, 979, 01976 979, 979, 936, 936, 936, 936, 936, 936, 936, 936, 01977 936, 937, 438, 937, 937, 435, 937, 434, 430, 937, 01978 937, 428, 937, 937, 937, 938, 938, 982, 427, 982, 01979 982, 982, 993, 425, 993, 993, 993, 938, 938, 938, 01980 01981 938, 938, 938, 938, 938, 938, 939, 939, 423, 939, 01982 939, 420, 939, 939, 939, 939, 939, 939, 939, 939, 01983 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 01984 939, 939, 939, 940, 418, 940, 940, 940, 940, 940, 01985 417, 414, 940, 940, 940, 940, 940, 941, 941, 941, 01986 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 01987 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 01988 941, 941, 941, 941, 943, 1087, 943, 943, 1087, 1087, 01989 943, 412, 943, 943, 943, 944, 944, 944, 944, 408, 01990 1002, 944, 1002, 1002, 1002, 1012, 405, 1012, 1012, 1012, 01991 01992 404, 944, 403, 402, 944, 399, 944, 944, 944, 398, 01993 944, 945, 945, 945, 945, 1024, 397, 1024, 1024, 1024, 01994 1026, 393, 1026, 1026, 1026, 385, 945, 945, 383, 379, 01995 945, 368, 945, 945, 945, 946, 946, 946, 946, 367, 01996 1056, 946, 1056, 1056, 1056, 1059, 363, 1059, 1059, 1059, 01997 362, 358, 357, 342, 946, 337, 946, 946, 946, 947, 01998 947, 332, 947, 947, 325, 947, 947, 947, 947, 947, 01999 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 02000 947, 947, 947, 947, 947, 947, 948, 321, 948, 948, 02001 948, 948, 948, 313, 311, 948, 948, 948, 948, 948, 02002 02003 949, 949, 308, 949, 949, 306, 949, 949, 949, 949, 02004 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 02005 949, 949, 949, 949, 949, 949, 949, 950, 303, 950, 02006 950, 950, 950, 950, 950, 296, 950, 950, 950, 950, 02007 950, 951, 951, 951, 951, 275, 1060, 951, 1060, 1060, 02008 1060, 1064, 271, 1064, 1064, 1064, 270, 951, 261, 259, 02009 951, 256, 951, 951, 951, 254, 951, 952, 952, 952, 02010 952, 253, 249, 1081, 952, 1081, 1081, 1081, 245, 244, 02011 241, 237, 952, 952, 236, 233, 952, 211, 952, 952, 02012 952, 953, 953, 953, 953, 194, 1083, 953, 1083, 1083, 02013 02014 1083, 1086, 193, 1086, 1086, 1086, 192, 188, 187, 183, 02015 953, 178, 953, 953, 953, 955, 175, 167, 163, 955, 02016 156, 955, 955, 955, 956, 956, 139, 956, 956, 956, 02017 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 02018 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 02019 956, 957, 957, 135, 957, 957, 957, 957, 957, 957, 02020 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 02021 957, 957, 957, 957, 957, 957, 957, 957, 958, 958, 02022 125, 958, 958, 105, 958, 958, 958, 958, 958, 958, 02023 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 02024 02025 958, 958, 958, 958, 958, 959, 94, 959, 959, 959, 02026 959, 959, 80, 79, 959, 959, 959, 959, 959, 961, 02027 961, 961, 961, 75, 1090, 961, 1090, 1090, 1090, 1097, 02028 8, 1097, 1097, 1097, 961, 961, 7, 0, 961, 0, 02029 961, 961, 961, 962, 962, 962, 962, 0, 0, 962, 02030 0, 0, 0, 0, 0, 0, 0, 0, 0, 962, 02031 0, 0, 962, 0, 962, 962, 962, 0, 962, 963, 02032 963, 963, 963, 0, 0, 0, 0, 0, 0, 0, 02033 0, 0, 0, 0, 963, 963, 0, 0, 963, 0, 02034 963, 963, 963, 964, 964, 964, 964, 0, 0, 964, 02035 02036 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02037 0, 0, 964, 0, 964, 964, 964, 966, 0, 966, 02038 0, 0, 0, 966, 0, 966, 966, 966, 968, 0, 02039 968, 0, 0, 0, 968, 0, 968, 968, 968, 969, 02040 969, 0, 969, 969, 969, 969, 969, 969, 969, 0, 02041 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 02042 0, 969, 969, 969, 969, 969, 970, 0, 0, 970, 02043 0, 0, 0, 970, 0, 970, 970, 970, 971, 971, 02044 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 02045 971, 971, 971, 971, 971, 971, 971, 0, 971, 971, 02046 02047 971, 971, 971, 971, 971, 972, 972, 0, 972, 972, 02048 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 02049 972, 972, 972, 972, 0, 972, 972, 972, 972, 972, 02050 972, 972, 973, 0, 0, 973, 0, 0, 0, 973, 02051 0, 973, 973, 973, 974, 974, 0, 974, 974, 974, 02052 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 02053 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 02054 974, 975, 975, 0, 975, 0, 975, 975, 975, 975, 02055 975, 0, 975, 975, 975, 975, 0, 975, 975, 975, 02056 0, 975, 0, 975, 975, 975, 975, 975, 976, 0, 02057 02058 0, 976, 0, 0, 0, 976, 0, 976, 976, 976, 02059 977, 977, 0, 977, 0, 977, 977, 977, 977, 977, 02060 977, 977, 977, 977, 977, 977, 977, 977, 977, 0, 02061 977, 0, 977, 977, 977, 977, 977, 978, 978, 0, 02062 978, 0, 978, 978, 978, 978, 978, 978, 978, 978, 02063 978, 978, 978, 978, 978, 978, 0, 978, 0, 978, 02064 978, 978, 978, 978, 980, 0, 0, 0, 980, 0, 02065 980, 980, 980, 981, 981, 0, 981, 981, 981, 981, 02066 981, 0, 0, 981, 981, 981, 981, 981, 981, 981, 02067 981, 981, 0, 981, 0, 981, 981, 981, 981, 981, 02068 02069 983, 0, 983, 983, 0, 0, 983, 0, 983, 983, 02070 983, 984, 984, 0, 984, 984, 984, 984, 984, 984, 02071 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 02072 0, 984, 0, 984, 984, 984, 984, 984, 985, 0, 02073 0, 985, 0, 0, 0, 985, 0, 985, 985, 985, 02074 986, 986, 0, 986, 986, 986, 986, 986, 986, 986, 02075 986, 986, 986, 0, 986, 986, 986, 986, 986, 986, 02076 986, 0, 986, 986, 986, 986, 986, 987, 987, 0, 02077 987, 987, 987, 987, 987, 987, 987, 0, 987, 987, 02078 987, 987, 987, 987, 987, 987, 0, 987, 0, 987, 02079 02080 987, 987, 987, 987, 988, 988, 0, 988, 988, 988, 02081 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 02082 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 02083 988, 989, 0, 989, 989, 0, 989, 0, 0, 989, 02084 989, 0, 989, 989, 989, 990, 0, 0, 990, 0, 02085 0, 0, 990, 0, 990, 990, 990, 991, 0, 991, 02086 991, 991, 0, 991, 992, 0, 0, 992, 0, 0, 02087 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02088 0, 0, 0, 992, 0, 992, 992, 992, 994, 0, 02089 994, 994, 0, 994, 0, 0, 994, 994, 0, 994, 02090 02091 994, 994, 995, 0, 0, 995, 0, 0, 0, 0, 02092 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02093 0, 995, 995, 995, 995, 995, 996, 996, 0, 996, 02094 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 02095 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 02096 996, 996, 996, 997, 0, 997, 997, 997, 997, 997, 02097 0, 0, 997, 997, 997, 997, 997, 998, 0, 998, 02098 0, 998, 998, 998, 0, 0, 998, 998, 998, 998, 02099 998, 999, 999, 999, 999, 999, 999, 999, 999, 999, 02100 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 02101 02102 999, 999, 999, 999, 999, 999, 999, 999, 1000, 0, 02103 1000, 1000, 0, 0, 1000, 0, 1000, 1000, 1000, 1001, 02104 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02105 0, 0, 1001, 0, 1001, 1001, 1001, 1003, 1003, 1003, 02106 1003, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02107 0, 0, 1003, 1003, 0, 0, 1003, 0, 1003, 1003, 02108 1003, 1004, 1004, 1004, 1004, 0, 0, 1004, 0, 0, 02109 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02110 1004, 0, 1004, 1004, 1004, 1005, 0, 0, 0, 1005, 02111 0, 1005, 1005, 1005, 1006, 1006, 0, 1006, 1006, 1006, 02112 02113 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 02114 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 02115 1006, 1007, 0, 1007, 1007, 1007, 1007, 1007, 0, 0, 02116 1007, 1007, 1007, 1007, 1007, 1008, 0, 1008, 0, 1008, 02117 1008, 1008, 0, 0, 1008, 1008, 1008, 1008, 1008, 1009, 02118 1009, 0, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 02119 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 02120 1009, 1009, 1009, 1009, 1009, 1009, 1010, 0, 1010, 1010, 02121 1010, 1010, 1010, 1010, 0, 1010, 1010, 1010, 1010, 1010, 02122 1011, 0, 1011, 0, 1011, 1011, 1011, 0, 0, 1011, 02123 02124 1011, 1011, 1011, 1011, 1013, 1013, 1013, 1013, 0, 0, 02125 0, 1013, 0, 0, 0, 0, 0, 0, 0, 1013, 02126 1013, 0, 0, 1013, 0, 1013, 1013, 1013, 1014, 1014, 02127 1014, 1014, 0, 0, 1014, 0, 0, 0, 0, 0, 02128 0, 0, 0, 0, 0, 0, 0, 1014, 0, 1014, 02129 1014, 1014, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 02130 1015, 0, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 02131 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1016, 02132 0, 0, 1016, 0, 0, 0, 1016, 0, 0, 0, 02133 0, 0, 0, 0, 1016, 0, 0, 0, 1016, 0, 02134 02135 1016, 1016, 1016, 1017, 0, 0, 0, 1017, 0, 1017, 02136 1017, 1017, 1018, 1018, 0, 1018, 1018, 1018, 1018, 1018, 02137 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 02138 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1019, 02139 1019, 0, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 02140 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 02141 1019, 1019, 1019, 1019, 1019, 1019, 1020, 1020, 0, 1020, 02142 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 02143 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 02144 1020, 1020, 1020, 1021, 0, 1021, 1021, 1021, 1021, 1021, 02145 02146 0, 0, 1021, 1021, 1021, 1021, 1021, 1022, 0, 1022, 02147 0, 1022, 1022, 1022, 0, 0, 1022, 1022, 1022, 1022, 02148 1022, 1023, 1023, 1023, 1023, 0, 0, 1023, 0, 0, 02149 0, 0, 0, 0, 0, 0, 1023, 1023, 0, 0, 02150 1023, 0, 1023, 1023, 1023, 1025, 1025, 1025, 1025, 0, 02151 0, 1025, 0, 0, 0, 0, 0, 0, 0, 0, 02152 1025, 1025, 0, 0, 1025, 0, 1025, 1025, 1025, 1027, 02153 1027, 1027, 1027, 0, 0, 0, 0, 0, 0, 0, 02154 0, 0, 0, 0, 1027, 1027, 0, 0, 1027, 0, 02155 1027, 1027, 1027, 1028, 1028, 1028, 1028, 0, 0, 1028, 02156 02157 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02158 0, 0, 1028, 0, 1028, 1028, 1028, 1029, 0, 0, 02159 0, 1029, 0, 1029, 1029, 1029, 1030, 0, 1030, 0, 02160 0, 0, 1030, 0, 1030, 1030, 1030, 1031, 0, 0, 02161 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02162 1031, 0, 1031, 1031, 1031, 1032, 0, 1032, 0, 0, 02163 0, 1032, 0, 1032, 1032, 1032, 1033, 1033, 0, 1033, 02164 1033, 1033, 1033, 1033, 1033, 1033, 0, 1033, 1033, 1033, 02165 1033, 1033, 1033, 1033, 1033, 1033, 1033, 0, 1033, 1033, 02166 1033, 1033, 1033, 1034, 0, 0, 1034, 0, 0, 0, 02167 02168 1034, 0, 1034, 1034, 1034, 1035, 1035, 1035, 1035, 1035, 02169 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 02170 1035, 1035, 1035, 1035, 0, 1035, 1035, 1035, 1035, 1035, 02171 1035, 1035, 1036, 1036, 0, 1036, 1036, 1036, 1036, 1036, 02172 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 02173 1036, 0, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1037, 02174 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02175 0, 0, 1037, 0, 1037, 1037, 1037, 1038, 0, 0, 02176 1038, 0, 0, 0, 1038, 0, 1038, 1038, 1038, 1039, 02177 1039, 0, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 02178 02179 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 02180 1039, 1039, 1039, 1039, 1039, 1039, 1040, 1040, 0, 1040, 02181 0, 1040, 1040, 1040, 1040, 1040, 0, 1040, 1040, 1040, 02182 1040, 0, 1040, 1040, 1040, 0, 1040, 0, 1040, 1040, 02183 1040, 1040, 1040, 1041, 0, 0, 1041, 0, 0, 0, 02184 1041, 0, 1041, 1041, 1041, 1042, 1042, 0, 1042, 0, 02185 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 02186 1042, 1042, 1042, 1042, 0, 1042, 0, 1042, 1042, 1042, 02187 1042, 1042, 1043, 1043, 0, 1043, 0, 1043, 1043, 1043, 02188 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 02189 02190 1043, 0, 1043, 0, 1043, 1043, 1043, 1043, 1043, 1044, 02191 0, 0, 0, 1044, 0, 1044, 1044, 1044, 1045, 1045, 02192 0, 1045, 1045, 1045, 1045, 1045, 0, 0, 1045, 1045, 02193 1045, 1045, 1045, 1045, 1045, 1045, 1045, 0, 1045, 0, 02194 1045, 1045, 1045, 1045, 1045, 1046, 0, 1046, 1046, 0, 02195 0, 1046, 0, 1046, 1046, 1046, 1047, 0, 0, 0, 02196 0, 0, 0, 0, 0, 0, 0, 0, 0, 1047, 02197 0, 1047, 1047, 1047, 1048, 1048, 0, 1048, 1048, 1048, 02198 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 02199 1048, 1048, 1048, 0, 1048, 0, 1048, 1048, 1048, 1048, 02200 02201 1048, 1049, 0, 0, 1049, 0, 0, 0, 1049, 0, 02202 1049, 1049, 1049, 1050, 1050, 0, 1050, 1050, 1050, 1050, 02203 1050, 1050, 1050, 1050, 1050, 1050, 0, 1050, 1050, 1050, 02204 1050, 1050, 1050, 1050, 0, 1050, 1050, 1050, 1050, 1050, 02205 1051, 1051, 0, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 02206 0, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 0, 02207 1051, 0, 1051, 1051, 1051, 1051, 1051, 1053, 1053, 0, 02208 1053, 0, 0, 0, 1053, 0, 1053, 1053, 1053, 1054, 02209 1054, 0, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 02210 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 02211 02212 1054, 1054, 1054, 1054, 1054, 1054, 1055, 0, 0, 1055, 02213 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02214 0, 0, 0, 0, 0, 1055, 0, 1055, 1055, 1055, 02215 1057, 0, 0, 1057, 0, 0, 0, 0, 0, 0, 02216 0, 0, 0, 0, 0, 0, 0, 0, 0, 1057, 02217 0, 1057, 1057, 1057, 1058, 1058, 0, 1058, 1058, 1058, 02218 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 02219 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 0, 02220 1058, 1061, 0, 0, 1061, 0, 0, 0, 0, 0, 02221 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02222 02223 1061, 1061, 1061, 1061, 1061, 1062, 0, 1062, 1062, 1062, 02224 1062, 1062, 0, 0, 1062, 1062, 1062, 1062, 1062, 1063, 02225 0, 1063, 1063, 1063, 1063, 1063, 0, 0, 1063, 1063, 02226 1063, 1063, 1063, 1065, 1065, 1065, 1065, 0, 0, 1065, 02227 0, 0, 0, 0, 0, 0, 0, 0, 0, 1065, 02228 0, 0, 1065, 0, 1065, 1065, 1065, 0, 1065, 1066, 02229 0, 0, 0, 1066, 0, 1066, 1066, 1066, 1067, 0, 02230 1067, 1067, 1067, 1067, 1067, 0, 0, 1067, 1067, 1067, 02231 1067, 1067, 1068, 0, 1068, 1068, 1068, 1068, 1068, 0, 02232 0, 1068, 1068, 1068, 1068, 1068, 1069, 0, 1069, 1069, 02233 02234 1069, 1069, 1069, 1069, 0, 1069, 1069, 1069, 1069, 1069, 02235 1070, 0, 1070, 1070, 1070, 1070, 1070, 1070, 0, 1070, 02236 1070, 1070, 1070, 1070, 1071, 1071, 1071, 1071, 0, 0, 02237 1071, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02238 1071, 0, 0, 1071, 0, 1071, 1071, 1071, 0, 1071, 02239 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 02240 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 02241 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1073, 0, 0, 02242 1073, 0, 0, 0, 1073, 0, 0, 0, 0, 0, 02243 0, 0, 1073, 0, 0, 0, 1073, 0, 1073, 1073, 02244 02245 1073, 1074, 0, 1074, 1074, 1074, 1074, 1074, 0, 0, 02246 1074, 1074, 1074, 1074, 1074, 1075, 0, 1075, 1075, 1075, 02247 1075, 1075, 0, 0, 1075, 1075, 1075, 1075, 1075, 1076, 02248 1076, 1076, 1076, 0, 0, 1076, 0, 0, 0, 0, 02249 0, 0, 0, 0, 1076, 1076, 0, 0, 1076, 0, 02250 1076, 1076, 1076, 1077, 1077, 1077, 1077, 0, 0, 1077, 02251 0, 0, 0, 0, 0, 0, 0, 0, 0, 1077, 02252 0, 0, 1077, 0, 1077, 1077, 1077, 1078, 1078, 1078, 02253 1078, 0, 0, 1078, 0, 0, 0, 0, 0, 0, 02254 0, 0, 1078, 1078, 0, 0, 1078, 0, 1078, 1078, 02255 02256 1078, 1079, 1079, 1079, 1079, 0, 0, 1079, 0, 0, 02257 0, 0, 0, 0, 0, 0, 0, 1079, 0, 0, 02258 1079, 0, 1079, 1079, 1079, 0, 1079, 1080, 0, 0, 02259 0, 1080, 0, 1080, 1080, 1080, 1082, 0, 1082, 0, 02260 0, 0, 1082, 0, 1082, 1082, 1082, 1084, 0, 0, 02261 0, 1084, 0, 1084, 1084, 1084, 1085, 1085, 1085, 1085, 02262 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 02263 1085, 1085, 0, 1085, 1085, 1085, 0, 1085, 0, 0, 02264 1085, 1085, 1085, 1088, 0, 0, 1088, 0, 0, 0, 02265 1088, 0, 1088, 1088, 1088, 1089, 1089, 0, 1089, 1089, 02266 02267 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 02268 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 02269 1089, 1089, 1091, 0, 0, 1091, 0, 0, 0, 0, 02270 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02271 0, 1091, 0, 1091, 1091, 1091, 1092, 1092, 0, 1092, 02272 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 02273 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 02274 1092, 1092, 1092, 1093, 1093, 1093, 1093, 1093, 1094, 0, 02275 0, 1094, 0, 0, 0, 0, 0, 0, 0, 0, 02276 0, 0, 0, 0, 0, 0, 0, 1094, 1094, 1094, 02277 02278 1094, 1094, 1095, 0, 1095, 1095, 1095, 1095, 1095, 0, 02279 0, 1095, 1095, 1095, 1095, 1095, 1096, 0, 1096, 1096, 02280 1096, 1096, 1096, 0, 0, 1096, 1096, 1096, 1096, 1096, 02281 1098, 1098, 0, 1098, 0, 0, 0, 1098, 0, 1098, 02282 1098, 1098, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 02283 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 02284 1099, 1099, 0, 1099, 0, 0, 0, 1099, 1099, 1100, 02285 1100, 1100, 1100, 0, 0, 1100, 0, 0, 0, 0, 02286 0, 0, 0, 0, 1100, 1100, 0, 0, 1100, 0, 02287 1100, 1100, 1100, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 02288 02289 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 0, 02290 1101, 1101, 1101, 0, 1101, 0, 1101, 0, 1101, 1101, 02291 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 02292 1102, 1102, 1102, 1102, 1102, 1102, 0, 1102, 1102, 1102, 02293 0, 1102, 0, 0, 0, 1102, 1102, 1103, 1103, 1103, 02294 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 02295 1103, 1103, 1103, 0, 1103, 1103, 1103, 0, 1103, 0, 02296 0, 0, 1103, 1103, 1104, 1104, 1104, 1104, 1104, 1104, 02297 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 02298 0, 1104, 1104, 1104, 0, 1104, 0, 0, 0, 1104, 02299 02300 1104, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 02301 1105, 1105, 1105, 1105, 1105, 1105, 1105, 0, 1105, 1105, 02302 1105, 0, 1105, 0, 0, 0, 1105, 1105, 911, 911, 02303 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 02304 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 02305 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 02306 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 02307 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 02308 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 02309 911, 911, 911, 911, 911, 911 02310 02311 } ; 02312 02313 extern int commentScanYY_flex_debug; 02314 int commentScanYY_flex_debug = 0; 02315 02316 static yy_state_type *yy_state_buf=0, *yy_state_ptr=0; 02317 static char *yy_full_match; 02318 static int yy_lp; 02319 static int yy_looking_for_trail_begin = 0; 02320 static int yy_full_lp; 02321 static int *yy_full_state; 02322 #define YY_TRAILING_MASK 0x2000 02323 #define YY_TRAILING_HEAD_MASK 0x4000 02324 #define REJECT \ 02325 { \ 02326 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */ \ 02327 yy_cp = (yy_full_match); /* restore poss. backed-over text */ \ 02328 (yy_lp) = yy_full_lp; /* restore orig. accepting pos. */ \ 02329 (yy_state_ptr) = yy_full_state; /* restore orig. state */ \ 02330 yy_current_state = *(yy_state_ptr); /* restore curr. state */ \ 02331 ++(yy_lp); \ 02332 goto find_rule; \ 02333 } 02334 02335 #define yymore() yymore_used_but_not_detected 02336 #define YY_MORE_ADJ 0 02337 #define YY_RESTORE_YY_MORE_OFFSET 02338 char *commentScanYYtext; 02339 #line 1 "commentscan.l" 02340 /***************************************************************************** 02341 * 02342 * Copyright (C) 1997-2008 by Dimitri van Heesch. 02343 * 02344 * Permission to use, copy, modify, and distribute this software and its 02345 * documentation under the terms of the GNU General Public License is hereby 02346 * granted. No representations are made about the suitability of this software 02347 * for any purpose. It is provided "as is" without express or implied warranty. 02348 * See the GNU General Public License for more details. 02349 * 02350 * Documents produced by Doxygen are derivative works derived from the 02351 * input used in their production; they are not affected by this license. 02352 * 02353 */ 02354 #line 17 "commentscan.l" 02355 02356 /* 02357 * includes 02358 */ 02359 #include <stdio.h> 02360 #include <stdlib.h> 02361 #include <assert.h> 02362 #include <ctype.h> 02363 02364 #include "qtbc.h" 02365 #include <qarray.h> 02366 #include <qstack.h> 02367 #include <qregexp.h> 02368 #include <unistd.h> 02369 #include <qfile.h> 02370 02371 #include "scanner.h" 02372 #include "entry.h" 02373 #include "doxygen.h" 02374 #include "message.h" 02375 #include "config.h" 02376 #include "util.h" 02377 #include "index.h" 02378 #include "defargs.h" 02379 #include "language.h" 02380 #include "outputlist.h" 02381 #include "membergroup.h" 02382 #include "reflist.h" 02383 #include "debug.h" 02384 #include "parserintf.h" 02385 02386 // forward declarations 02387 static bool handleBrief(const QCString &); 02388 static bool handleFn(const QCString &); 02389 static bool handleDef(const QCString &); 02390 static bool handleOverload(const QCString &); 02391 static bool handleEnum(const QCString &); 02392 static bool handleDefGroup(const QCString &); 02393 static bool handleAddToGroup(const QCString &); 02394 static bool handleWeakGroup(const QCString &); 02395 static bool handleNamespace(const QCString &); 02396 static bool handlePackage(const QCString &); 02397 static bool handleClass(const QCString &); 02398 static bool handleHeaderFile(const QCString &); 02399 static bool handleProtocol(const QCString &); 02400 static bool handleCategory(const QCString &); 02401 static bool handleUnion(const QCString &); 02402 static bool handleStruct(const QCString &); 02403 static bool handleInterface(const QCString &); 02404 static bool handleIdlException(const QCString &); 02405 static bool handlePage(const QCString &); 02406 static bool handleMainpage(const QCString &); 02407 static bool handleFile(const QCString &); 02408 static bool handleDir(const QCString &); 02409 static bool handleExample(const QCString &); 02410 static bool handleDetails(const QCString &); 02411 static bool handleName(const QCString &); 02412 static bool handleTodo(const QCString &); 02413 static bool handleTest(const QCString &); 02414 static bool handleBug(const QCString &); 02415 static bool handleSubpage(const QCString &s); 02416 static bool handleDeprecated(const QCString &); 02417 static bool handleXRefItem(const QCString &); 02418 static bool handleRelated(const QCString &); 02419 static bool handleRelatedAlso(const QCString &); 02420 static bool handleRefItem(const QCString &); 02421 static bool handleSection(const QCString &); 02422 static bool handleAnchor(const QCString &); 02423 static bool handleFormatBlock(const QCString &); 02424 static bool handleAddIndex(const QCString &); 02425 static bool handleIf(const QCString &); 02426 static bool handleIfNot(const QCString &); 02427 static bool handleElseIf(const QCString &); 02428 static bool handleElse(const QCString &); 02429 static bool handleEndIf(const QCString &); 02430 static bool handleIngroup(const QCString &); 02431 static bool handleNoSubGrouping(const QCString &); 02432 static bool handleShowInitializer(const QCString &); 02433 static bool handleHideInitializer(const QCString &); 02434 static bool handleCallgraph(const QCString &); 02435 static bool handleCallergraph(const QCString &); 02436 static bool handleInternal(const QCString &); 02437 static bool handleLineBr(const QCString &); 02438 static bool handleStatic(const QCString &); 02439 static bool handlePure(const QCString &); 02440 static bool handlePrivate(const QCString &); 02441 static bool handlePrivateSection(const QCString &); 02442 static bool handleProtected(const QCString &); 02443 static bool handleProtectedSection(const QCString &); 02444 static bool handlePublic(const QCString &s); 02445 static bool handlePublicSection(const QCString &s); 02446 static bool handleInherit(const QCString &); 02447 02448 typedef bool (*DocCmdFunc)(const QCString &name); 02449 02450 struct DocCmdMap 02451 { 02452 const char *cmdName; 02453 DocCmdFunc handler; 02454 bool endsBrief; 02455 }; 02456 02457 // map of command to handler function 02458 static DocCmdMap docCmdMap[] = 02459 { 02460 // command name handler function ends brief description 02461 { "brief", &handleBrief, FALSE }, 02462 { "short", &handleBrief, FALSE }, 02463 { "fn", &handleFn, FALSE }, 02464 { "var", &handleFn, FALSE }, 02465 { "typedef", &handleFn, FALSE }, 02466 { "property", &handleFn, FALSE }, 02467 { "def", &handleDef, FALSE }, 02468 { "overload", &handleOverload, FALSE }, 02469 { "enum", &handleEnum, FALSE }, 02470 { "defgroup", &handleDefGroup, FALSE }, 02471 { "addtogroup", &handleAddToGroup, FALSE }, 02472 { "weakgroup", &handleWeakGroup, FALSE }, 02473 { "namespace", &handleNamespace, FALSE }, 02474 { "package", &handlePackage, FALSE }, 02475 { "class", &handleClass, FALSE }, 02476 { "headerfile", &handleHeaderFile, FALSE }, 02477 { "protocol", &handleProtocol, FALSE }, 02478 { "category", &handleCategory, FALSE }, 02479 { "union", &handleUnion, FALSE }, 02480 { "struct", &handleStruct, FALSE }, 02481 { "interface", &handleInterface, FALSE }, 02482 { "idlexcept", &handleIdlException, FALSE }, 02483 { "page", &handlePage, FALSE }, 02484 { "mainpage", &handleMainpage, FALSE }, 02485 { "file", &handleFile, FALSE }, 02486 { "dir", &handleDir, FALSE }, 02487 { "example", &handleExample, FALSE }, 02488 { "details", &handleDetails, TRUE }, 02489 { "name", &handleName, FALSE }, 02490 { "todo", &handleTodo, TRUE }, 02491 { "test", &handleTest, TRUE }, 02492 { "bug", &handleBug, TRUE }, 02493 { "deprecated", &handleDeprecated, TRUE }, 02494 { "xrefitem", &handleXRefItem, TRUE }, 02495 { "related", &handleRelated, TRUE }, 02496 { "relates", &handleRelated, TRUE }, 02497 { "relatedalso", &handleRelatedAlso, TRUE }, 02498 { "relatesalso", &handleRelatedAlso, TRUE }, 02499 { "refitem", &handleRefItem, TRUE }, 02500 { "subpage", &handleSubpage, TRUE }, 02501 { "section", &handleSection, TRUE }, 02502 { "subsection", &handleSection, TRUE }, 02503 { "subsubsection", &handleSection, TRUE }, 02504 { "paragraph", &handleSection, TRUE }, 02505 { "anchor", &handleAnchor, TRUE }, 02506 { "verbatim", &handleFormatBlock, TRUE }, 02507 { "latexonly", &handleFormatBlock, FALSE }, 02508 { "htmlonly", &handleFormatBlock, FALSE }, 02509 { "xmlonly", &handleFormatBlock, FALSE }, 02510 { "rtfonly", &handleFormatBlock, FALSE }, 02511 { "manonly", &handleFormatBlock, FALSE }, 02512 { "dot", &handleFormatBlock, TRUE }, 02513 { "msc", &handleFormatBlock, TRUE }, 02514 { "code", &handleFormatBlock, TRUE }, 02515 { "addindex", &handleAddIndex, FALSE }, 02516 { "if", &handleIf, FALSE }, 02517 { "ifnot", &handleIfNot, FALSE }, 02518 { "elseif", &handleElseIf, FALSE }, 02519 { "else", &handleElse, FALSE }, 02520 { "endif", &handleEndIf, FALSE }, 02521 { "ingroup", &handleIngroup, FALSE }, 02522 { "nosubgrouping", &handleNoSubGrouping, FALSE }, 02523 { "showinitializer", &handleShowInitializer, FALSE }, 02524 { "hideinitializer", &handleHideInitializer, FALSE }, 02525 { "callgraph", &handleCallgraph, FALSE }, 02526 { "callergraph", &handleCallergraph, FALSE }, 02527 { "internal", &handleInternal, TRUE }, 02528 { "_linebr", &handleLineBr, FALSE }, 02529 { "static", &handleStatic, FALSE }, 02530 { "pure", &handlePure, FALSE }, 02531 { "private", &handlePrivate, FALSE }, 02532 { "privatesection", &handlePrivateSection, FALSE }, 02533 { "protected", &handleProtected, FALSE }, 02534 { "protectedsection",&handleProtectedSection, FALSE }, 02535 { "public", &handlePublic, FALSE }, 02536 { "publicsection", &handlePublicSection, FALSE }, 02537 { "inherit", &handleInherit, TRUE }, 02538 { "arg", 0, TRUE }, 02539 { "attention", 0, TRUE }, 02540 { "author", 0, TRUE }, 02541 { "authors", 0, TRUE }, 02542 { "date", 0, TRUE }, 02543 { "dotfile", 0, TRUE }, 02544 { "htmlinclude", 0, TRUE }, 02545 { "image", 0, TRUE }, 02546 { "include", 0, TRUE }, 02547 { "includelineno", 0, TRUE }, 02548 { "invariant", 0, TRUE }, 02549 { "li", 0, TRUE }, 02550 { "line", 0, TRUE }, 02551 { "note", 0, TRUE }, 02552 { "par", 0, TRUE }, 02553 { "param", 0, TRUE }, 02554 { "tparam", 0, TRUE }, 02555 { "post", 0, TRUE }, 02556 { "pre", 0, TRUE }, 02557 { "remark", 0, TRUE }, 02558 { "remarks", 0, TRUE }, 02559 { "result", 0, TRUE }, 02560 { "return", 0, TRUE }, 02561 { "returns", 0, TRUE }, 02562 { "retval", 0, TRUE }, 02563 { "sa", 0, TRUE }, 02564 { "see", 0, TRUE }, 02565 { "since", 0, TRUE }, 02566 { "throw", 0, TRUE }, 02567 { "throws", 0, TRUE }, 02568 { "until", 0, TRUE }, 02569 { "verbinclude", 0, TRUE }, 02570 { "version", 0, TRUE }, 02571 { "warning", 0, TRUE }, 02572 { 0, 0, FALSE } 02573 }; 02574 02580 class DocCmdMapper 02581 { 02582 public: 02583 struct Cmd 02584 { 02585 DocCmdFunc func; 02586 bool endsBrief; 02587 }; 02588 02590 static Cmd *map(const char *name) 02591 { 02592 return instance()->find(name); 02593 } 02594 02596 static void freeInstance() 02597 { 02598 delete s_instance; s_instance=0; 02599 } 02600 02601 private: 02602 static DocCmdMapper *instance() 02603 { 02604 if (s_instance==0) s_instance = new DocCmdMapper; 02605 return s_instance; 02606 } 02607 02608 DocCmdMapper() : m_map(113) 02609 { 02610 m_map.setAutoDelete(TRUE); 02611 DocCmdMap *p = docCmdMap; 02612 while (p->cmdName) 02613 { 02614 if (m_map.find(p->cmdName)!=0) 02615 { 02616 printf("Error: DocCmdMapper: command %s already added\n",p->cmdName); 02617 exit(1); 02618 } 02619 Cmd *cmd = new Cmd; 02620 cmd->func = p->handler; 02621 cmd->endsBrief = p->endsBrief; 02622 m_map.insert(p->cmdName,cmd); 02623 p++; 02624 } 02625 } 02626 02627 Cmd *find(const char *name) 02628 { 02629 return m_map.find(name); 02630 } 02631 QDict<Cmd> m_map; 02632 static DocCmdMapper *s_instance; 02633 }; 02634 02635 DocCmdMapper *DocCmdMapper::s_instance=0; 02636 02637 02638 #define YY_NEVER_INTERACTIVE 1 02639 02640 enum XRefKind 02641 { 02642 XRef_Item, 02643 XRef_Todo, 02644 XRef_Test, 02645 XRef_Bug, 02646 XRef_Deprecated, 02647 XRef_None 02648 }; 02649 02650 enum OutputContext 02651 { 02652 OutputDoc, 02653 OutputBrief, 02654 OutputXRef, 02655 OutputInbody 02656 }; 02657 02658 enum GuardType 02659 { 02660 Guard_If, 02661 Guard_IfNot, 02662 Guard_Skip 02663 }; 02664 02665 class GuardedSection 02666 { 02667 public: 02668 GuardedSection(bool enabled,bool parentVisible) 02669 : m_enabled(enabled),m_parentVisible(parentVisible) {} 02670 bool isEnabled() const { return m_enabled; } 02671 bool parentVisible() const { return m_parentVisible; } 02672 02673 private: 02674 bool m_enabled; 02675 bool m_parentVisible; 02676 }; 02677 02678 void openGroup(Entry *e,const char *file,int line); 02679 void closeGroup(Entry *e,const char *file,int line); 02680 void initGroupInfo(Entry *e); 02681 static void groupAddDocs(Entry *e,const char *fileName); 02682 02683 /* ----------------------------------------------------------------- 02684 * 02685 * statics 02686 */ 02687 02688 static ParserInterface *langParser; // the language parser that is calling us 02689 static QCString inputString; // input string 02690 static int inputPosition; // read pointer 02691 static QCString yyFileName; // file name that is read from 02692 static int yyLineNr; // line number in the input 02693 static bool inBody; // was the comment found inside the body of a function? 02694 static OutputContext inContext; // are we inside the brief, details or xref part 02695 static bool briefEndsAtDot; // does the brief description stop at a dot? 02696 static QCString formulaText; // Running text of a formula 02697 static QCString formulaEnv; // environment name 02698 static int formulaNewLines; // amount of new lines in the formula 02699 static QCString *pOutputString; // pointer to string to which the output is appended. 02700 static QCString outputXRef; // temp argument of todo/test/../xrefitem commands 02701 static QCString blockName; // preformatted block name (e.g. verbatim, latexonly,...) 02702 static XRefKind xrefKind; // kind of cross-reference command 02703 static XRefKind newXRefKind; // 02704 static GuardType guardType; // kind of guard for conditional section 02705 static bool enabledSectionFound; 02706 static QCString functionProto; // function prototype 02707 static QStack<GuardedSection> guards; // tracks nested conditional sections (if,ifnot,..) 02708 static Entry* current = 0 ; // working entry 02709 //static Entry* current_root = 0 ; // parent of working entry 02710 02711 02712 //static Entry* previous = 0 ; // TODO: remove need for this 02713 static bool needNewEntry; 02714 02715 static QCString sectionLabel; 02716 static QCString sectionTitle; 02717 static QCString xrefItemKey; 02718 static QCString newXRefItemKey; 02719 static QCString xrefItemTitle; 02720 static QCString xrefListTitle; 02721 static Protection protection; 02722 02723 static bool xrefAppendFlag; 02724 static bool inGroupParamFound; 02725 static int braceCount; 02726 static bool insidePre; 02727 static bool parseMore; 02728 02729 static int g_commentCount; 02730 02731 //----------------------------------------------------------------------------- 02732 02733 static QStack<Grouping> g_autoGroupStack; 02734 static int g_memberGroupId = DOX_NOGROUP; 02735 static QCString g_memberGroupHeader; 02736 static QCString g_memberGroupDocs; 02737 static QCString g_memberGroupRelates; 02738 02739 //----------------------------------------------------------------------------- 02740 02741 static void initParser() 02742 { 02743 sectionLabel.resize(0); 02744 sectionTitle.resize(0); 02745 g_memberGroupHeader.resize(0); 02746 } 02747 02748 //----------------------------------------------------------------------------- 02749 02750 static QCString getDocSectionName(int s) 02751 { 02752 switch(s) 02753 { 02754 case Entry::CLASSDOC_SEC: return "\\class"; 02755 case Entry::STRUCTDOC_SEC: return "\\struct"; 02756 case Entry::UNIONDOC_SEC: return "\\union"; 02757 case Entry::EXCEPTIONDOC_SEC: return "\\exception"; 02758 case Entry::NAMESPACEDOC_SEC: return "\\namespace"; 02759 case Entry::PROTOCOLDOC_SEC: return "\\protocol"; 02760 case Entry::CATEGORYDOC_SEC: return "\\category"; 02761 case Entry::ENUMDOC_SEC: return "\\enum"; 02762 case Entry::PAGEDOC_SEC: return "\\page"; 02763 case Entry::MEMBERDOC_SEC: return "\\fn"; 02764 case Entry::OVERLOADDOC_SEC: return "\\overload"; 02765 case Entry::FILEDOC_SEC: return "\\file"; 02766 case Entry::DEFINEDOC_SEC: return "\\def"; 02767 case Entry::GROUPDOC_SEC: return "\\defgroup"; 02768 case Entry::MAINPAGEDOC_SEC: return "\\mainpage"; 02769 case Entry::PACKAGEDOC_SEC: return "\\package"; 02770 case Entry::DIRDOC_SEC: return "\\dir"; 02771 case Entry::EXAMPLE_SEC: return "\\example"; 02772 case Entry::MEMBERGRP_SEC: return "\\name"; 02773 default: return ""; 02774 } 02775 } 02776 02777 //----------------------------------------------------------------------------- 02778 02779 static bool makeStructuralIndicator(Entry::Sections s) 02780 { 02781 if (!getDocSectionName(current->section).isEmpty()) 02782 { 02783 //warn(yyFileName,yyLineNr, 02784 // "Warning: found a structural command %s for a section already " 02785 // "marked with structural command %s. Ignoring the latter command.", 02786 // getDocSectionName(s).data(), 02787 // getDocSectionName(current->section).data() 02788 // ); 02789 return TRUE; 02790 } 02791 else 02792 { 02793 needNewEntry = TRUE; 02794 current->section = s; 02795 current->fileName = yyFileName; 02796 current->startLine = yyLineNr; 02797 return FALSE; 02798 } 02799 } 02800 02801 static void lineCount() 02802 { 02803 for( const char* c = commentScanYYtext ; *c ; ++c ) 02804 yyLineNr += (*c == '\n') ; 02805 } 02806 02807 02808 static QCString stripQuotes(const char *s) 02809 { 02810 QCString name; 02811 if (s==0 || *s==0) return name; 02812 name=s; 02813 if (name.at(0)=='"' && name.at(name.length()-1)=='"') 02814 { 02815 name=name.mid(1,name.length()-2); 02816 } 02817 return name; 02818 } 02819 02820 //----------------------------------------------------------------- 02821 02822 static void addXRefItem(const char *listName,const char *itemTitle, 02823 const char *listTitle,bool append) 02824 { 02825 Entry *docEntry = current; // inBody && previous ? previous : current; 02826 if (listName==0) return; 02827 //printf("addXRefItem(%s,%s,%s,%d)\n",listName,itemTitle,listTitle,append); 02828 02829 ListItemInfo *lii=0; 02830 RefList *refList = Doxygen::xrefLists->find(listName); 02831 if (refList==0) // new list 02832 { 02833 refList = new RefList(listName,listTitle,itemTitle); 02834 Doxygen::xrefLists->insert(listName,refList); 02835 //printf("new list!\n"); 02836 } 02837 if (docEntry->sli) 02838 { 02839 QListIterator<ListItemInfo> slii(*docEntry->sli); 02840 for (slii.toFirst();(lii=slii.current());++slii) 02841 { 02842 if (strcmp(lii->type,listName)==0) 02843 { 02844 //printf("found %s lii->type=%s\n",listName,lii->type); 02845 break; 02846 } 02847 } 02848 } 02849 if (lii && append) // already found item of same type just before this one 02850 { 02851 //printf("listName=%s item id = %d existing\n",listName,lii->itemId); 02852 RefItem *item = refList->getRefItem(lii->itemId); 02853 ASSERT(item!=0); 02854 item->text += " <p>"; 02855 item->text += outputXRef; 02856 //printf("%s: text +=%s\n",listName,item->text.data()); 02857 } 02858 else // new item 02859 { 02860 int itemId = refList->addRefItem(); 02861 //printf("listName=%s item id = %d new current=%p\n",listName,itemId,current); 02862 02863 // if we have already an item from the same list type (e.g. a second @todo) 02864 // in the same Entry (i.e. lii!=0) then we reuse its link anchor. 02865 char anchorLabel[1024]; 02866 sprintf(anchorLabel,"_%s%06d",listName,lii ? lii->itemId : itemId); 02867 RefItem *item = refList->getRefItem(itemId); 02868 ASSERT(item!=0); 02869 item->text = outputXRef; 02870 item->listAnchor = anchorLabel; 02871 docEntry->addSpecialListItem(listName,itemId); 02872 QCString cmdString; 02873 cmdString.sprintf("\\xrefitem %s %d\n",listName,itemId); 02874 if (inBody) 02875 { 02876 docEntry->inbodyDocs += cmdString; 02877 } 02878 else 02879 { 02880 docEntry->doc += cmdString; 02881 } 02882 SectionInfo *si=new SectionInfo(listName,anchorLabel, 02883 sectionTitle,SectionInfo::Anchor); 02884 Doxygen::sectionDict.insert(anchorLabel,si); 02885 docEntry->anchors->append(si); 02886 } 02887 outputXRef.resize(0); 02888 } 02889 02890 //----------------------------------------------------------------------------- 02891 02892 // Adds a formula text to the list/dictionary of formulas if it was 02893 // not already added. Returns the label of the formula. 02894 static QCString addFormula() 02895 { 02896 QCString formLabel; 02897 QCString fText=formulaText.simplifyWhiteSpace(); 02898 Formula *f=0; 02899 if ((f=Doxygen::formulaDict[fText])==0) 02900 { 02901 f = new Formula(fText); 02902 Doxygen::formulaList.append(f); 02903 Doxygen::formulaDict.insert(fText,f); 02904 formLabel.sprintf("\\form#%d",f->getId()); 02905 Doxygen::formulaNameDict.insert(formLabel,f); 02906 } 02907 else 02908 { 02909 formLabel.sprintf("\\form#%d",f->getId()); 02910 } 02911 int i; 02912 for (i=0;i<formulaNewLines;i++) formLabel+="\\_fakenl"; // add fake newlines to 02913 // keep the warnings 02914 // correctly aligned. 02915 return formLabel; 02916 } 02917 02918 //----------------------------------------------------------------------------- 02919 02920 static void checkFormula(); 02921 //----------------------------------------------------------------------------- 02922 02923 static void addSection() 02924 { 02925 sectionTitle+=commentScanYYtext; 02926 sectionTitle=sectionTitle.stripWhiteSpace(); 02927 //printf("Adding new section file=%s label=%s title=%s\n",yyFileName,sectionLabel.data(),sectionTitle.data()); 02928 SectionInfo *si = new SectionInfo(yyFileName,sectionLabel,sectionTitle,SectionInfo::Anchor); 02929 current->anchors->append(si); 02930 Doxygen::sectionDict.insert(commentScanYYtext,si); 02931 } 02932 02933 //----------------------------------------------------------------------------- 02934 02935 // strip trailing whitespace (excluding newlines) from string s 02936 static void stripTrailingWhiteSpace(QCString &s) 02937 { 02938 uint len = s.length(); 02939 int i = (int)len-1; 02940 char c; 02941 while (i>=0 && ((c = s.at(i))==' ' || c=='\t' || c=='\r')) i--; 02942 if (i!=(int)len-1) 02943 { 02944 s.resize(i+2); // string upto and including char at pos i and \0 terminator 02945 } 02946 } 02947 02948 // selects the output to write to 02949 static inline void setOutput(OutputContext ctx) 02950 { 02951 bool xrefAppendToPrev = xrefAppendFlag; 02952 // determine append flag for the next item (i.e. the end of this item) 02953 xrefAppendFlag = inContext==OutputXRef && ctx==OutputXRef && // two consecutive xref items 02954 newXRefKind==xrefKind && // of the same kind 02955 (xrefKind!=XRef_Item || 02956 newXRefItemKey==xrefItemKey); // with the same key if \xrefitem 02957 //printf("refKind=%d newXRefKind=%d xrefAppendToPrev=%d xrefAppendFlag=%d\n", 02958 // xrefKind,newXRefKind,xrefAppendToPrev,xrefAppendFlag); 02959 02960 //printf("setOutput(inContext=%d ctx=%d)\n",inContext,ctx); 02961 if (inContext==OutputXRef) // end of XRef section => add the item 02962 { 02963 // See if we can append this new xref item to the previous one. 02964 // We know this at the start of the next item of the same 02965 // type and need to remember this until the end of that item. 02966 switch(xrefKind) 02967 { 02968 case XRef_Todo: 02969 addXRefItem("todo", 02970 theTranslator->trTodo(), 02971 theTranslator->trTodoList(), 02972 xrefAppendToPrev 02973 ); 02974 break; 02975 case XRef_Test: 02976 addXRefItem("test", 02977 theTranslator->trTest(), 02978 theTranslator->trTestList(), 02979 xrefAppendToPrev 02980 ); 02981 break; 02982 case XRef_Bug: 02983 addXRefItem("bug", 02984 theTranslator->trBug(), 02985 theTranslator->trBugList(), 02986 xrefAppendToPrev 02987 ); 02988 break; 02989 case XRef_Deprecated: 02990 addXRefItem("deprecated", 02991 theTranslator->trDeprecated(), 02992 theTranslator->trDeprecatedList(), 02993 xrefAppendToPrev 02994 ); 02995 break; 02996 case XRef_Item: // user defined list 02997 addXRefItem(xrefItemKey, 02998 xrefItemTitle, 02999 xrefListTitle, 03000 xrefAppendToPrev 03001 ); 03002 break; 03003 case XRef_None: 03004 ASSERT(0); 03005 break; 03006 } 03007 } 03008 xrefItemKey = newXRefItemKey; 03009 03010 int oldContext = inContext; 03011 inContext = ctx; 03012 if (inContext!=OutputXRef && inBody) inContext=OutputInbody; 03013 switch(inContext) 03014 { 03015 case OutputDoc: 03016 if (oldContext!=inContext) 03017 { 03018 stripTrailingWhiteSpace(current->doc); 03019 if (current->docFile.isEmpty()) 03020 { 03021 current->docFile = yyFileName; 03022 current->docLine = yyLineNr; 03023 } 03024 } 03025 pOutputString = ¤t->doc; 03026 break; 03027 case OutputBrief: 03028 if (oldContext!=inContext) 03029 { 03030 if (current->briefFile.isEmpty()) 03031 { 03032 current->briefFile = yyFileName; 03033 current->briefLine = yyLineNr; 03034 } 03035 } 03036 if (current->brief.stripWhiteSpace().isEmpty()) // we only want one brief 03037 // description even if multiple 03038 // are given... 03039 { 03040 pOutputString = ¤t->brief; 03041 } 03042 else 03043 { 03044 pOutputString = ¤t->doc; 03045 } 03046 break; 03047 case OutputXRef: 03048 pOutputString = &outputXRef; 03049 // first item found, so can't append to previous 03050 //xrefAppendFlag = FALSE; 03051 break; 03052 case OutputInbody: 03053 pOutputString = ¤t->inbodyDocs; 03054 break; 03055 } 03056 } 03057 03058 // add a string to the output 03059 static inline void addOutput(const char *s) 03060 { 03061 *pOutputString+=s; 03062 } 03063 03064 // add a character to the output 03065 static inline void addOutput(char c) 03066 { 03067 *pOutputString+=c; 03068 } 03069 03070 static void endBrief(bool addToOutput=TRUE) 03071 { 03072 if (!current->brief.stripWhiteSpace().isEmpty()) 03073 { // only go to the detailed description if we have 03074 // found some brief description and not just whitespace 03075 briefEndsAtDot=FALSE; 03076 setOutput(OutputDoc); 03077 if (addToOutput) addOutput(commentScanYYtext); 03078 } 03079 } 03080 03081 /* ----------------------------------------------------------------- */ 03082 #undef YY_INPUT 03083 #define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size); 03084 03085 static int prevPosition=0; 03086 03087 static int yyread(char *buf,int max_size) 03088 { 03089 prevPosition=inputPosition; 03090 int c=0; 03091 while( c < max_size && inputString[inputPosition] ) 03092 { 03093 *buf = inputString[inputPosition++] ; 03094 //printf("%d (%c)\n",*buf,*buf); 03095 c++; buf++; 03096 } 03097 return c; 03098 } 03099 03100 /* start command character */ 03101 /* comment parsing states. */ 03102 03103 03104 03105 03106 03107 03108 03109 03110 03111 03112 03113 03114 03115 03116 03117 03118 03119 03120 03121 03122 03123 03124 03125 03126 03127 03128 03129 03130 03131 03132 03133 03134 03135 03136 03137 03138 #line 3139 "<stdout>" 03139 03140 #define INITIAL 0 03141 #define Comment 1 03142 #define PageDocArg1 2 03143 #define PageDocArg2 3 03144 #define RelatesParam1 4 03145 #define ClassDocArg1 5 03146 #define ClassDocArg2 6 03147 #define ClassDocArg3 7 03148 #define CategoryDocArg1 8 03149 #define XRefItemParam1 9 03150 #define XRefItemParam2 10 03151 #define XRefItemParam3 11 03152 #define FileDocArg1 12 03153 #define EnumDocArg1 13 03154 #define NameSpaceDocArg1 14 03155 #define PackageDocArg1 15 03156 #define GroupDocArg1 16 03157 #define GroupDocArg2 17 03158 #define SectionLabel 18 03159 #define SectionTitle 19 03160 #define SubpageLabel 20 03161 #define SubpageTitle 21 03162 #define FormatBlock 22 03163 #define LineParam 23 03164 #define GuardParam 24 03165 #define SkipGuardedSection 25 03166 #define SkipInternal 26 03167 #define NameParam 27 03168 #define InGroupParam 28 03169 #define FnParam 29 03170 #define OverloadParam 30 03171 #define InheritParam 31 03172 #define ReadFormulaShort 32 03173 #define ReadFormulaLong 33 03174 #define AnchorLabel 34 03175 #define HtmlComment 35 03176 #define SkipLang 36 03177 03178 #ifndef YY_NO_UNISTD_H 03179 /* Special case for "unistd.h", since it is non-ANSI. We include it way 03180 * down here because we want the user's section 1 to have been scanned first. 03181 * The user has a chance to override it with an option. 03182 */ 03183 #include <unistd.h> 03184 #endif 03185 03186 #ifndef YY_EXTRA_TYPE 03187 #define YY_EXTRA_TYPE void * 03188 #endif 03189 03190 static int yy_init_globals (void ); 03191 03192 /* Macros after this point can all be overridden by user definitions in 03193 * section 1. 03194 */ 03195 03196 #ifndef YY_SKIP_YYWRAP 03197 #ifdef __cplusplus 03198 extern "C" int commentScanYYwrap (void ); 03199 #else 03200 extern int commentScanYYwrap (void ); 03201 #endif 03202 #endif 03203 03204 static void yyunput (int c,char *buf_ptr ); 03205 03206 #ifndef yytext_ptr 03207 static void yy_flex_strncpy (char *,yyconst char *,int ); 03208 #endif 03209 03210 #ifdef YY_NEED_STRLEN 03211 static int yy_flex_strlen (yyconst char * ); 03212 #endif 03213 03214 #ifndef YY_NO_INPUT 03215 03216 #ifdef __cplusplus 03217 static int yyinput (void ); 03218 #else 03219 static int input (void ); 03220 #endif 03221 03222 #endif 03223 03224 /* Amount of stuff to slurp up with each read. */ 03225 #ifndef YY_READ_BUF_SIZE 03226 #define YY_READ_BUF_SIZE 8192 03227 #endif 03228 03229 /* Copy whatever the last rule matched to the standard output. */ 03230 #ifndef ECHO 03231 /* This used to be an fputs(), but since the string might contain NUL's, 03232 * we now use fwrite(). 03233 */ 03234 #define ECHO (void) fwrite( commentScanYYtext, commentScanYYleng, 1, commentScanYYout ) 03235 #endif 03236 03237 /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, 03238 * is returned in "result". 03239 */ 03240 #ifndef YY_INPUT 03241 #define YY_INPUT(buf,result,max_size) \ 03242 if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ 03243 { \ 03244 int c = '*'; \ 03245 size_t n; \ 03246 for ( n = 0; n < max_size && \ 03247 (c = getc( commentScanYYin )) != EOF && c != '\n'; ++n ) \ 03248 buf[n] = (char) c; \ 03249 if ( c == '\n' ) \ 03250 buf[n++] = (char) c; \ 03251 if ( c == EOF && ferror( commentScanYYin ) ) \ 03252 YY_FATAL_ERROR( "input in flex scanner failed" ); \ 03253 result = n; \ 03254 } \ 03255 else \ 03256 { \ 03257 errno=0; \ 03258 while ( (result = fread(buf, 1, max_size, commentScanYYin))==0 && ferror(commentScanYYin)) \ 03259 { \ 03260 if( errno != EINTR) \ 03261 { \ 03262 YY_FATAL_ERROR( "input in flex scanner failed" ); \ 03263 break; \ 03264 } \ 03265 errno=0; \ 03266 clearerr(commentScanYYin); \ 03267 } \ 03268 }\ 03269 \ 03270 03271 #endif 03272 03273 /* No semi-colon after return; correct usage is to write "yyterminate();" - 03274 * we don't want an extra ';' after the "return" because that will cause 03275 * some compilers to complain about unreachable statements. 03276 */ 03277 #ifndef yyterminate 03278 #define yyterminate() return YY_NULL 03279 #endif 03280 03281 /* Number of entries by which start-condition stack grows. */ 03282 #ifndef YY_START_STACK_INCR 03283 #define YY_START_STACK_INCR 25 03284 #endif 03285 03286 /* Report a fatal error. */ 03287 #ifndef YY_FATAL_ERROR 03288 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) 03289 #endif 03290 03291 /* end tables serialization structures and prototypes */ 03292 03293 /* Default declaration of generated scanner - a define so the user can 03294 * easily add parameters. 03295 */ 03296 #ifndef YY_DECL 03297 #define YY_DECL_IS_OURS 1 03298 03299 extern int commentScanYYlex (void); 03300 03301 #define YY_DECL int commentScanYYlex (void) 03302 #endif /* !YY_DECL */ 03303 03304 /* Code executed at the beginning of each rule, after commentScanYYtext and commentScanYYleng 03305 * have been set up. 03306 */ 03307 #ifndef YY_USER_ACTION 03308 #define YY_USER_ACTION 03309 #endif 03310 03311 /* Code executed at the end of each rule. */ 03312 #ifndef YY_BREAK 03313 #define YY_BREAK break; 03314 #endif 03315 03316 #define YY_RULE_SETUP \ 03317 if ( commentScanYYleng > 0 ) \ 03318 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ 03319 (commentScanYYtext[commentScanYYleng - 1] == '\n'); \ 03320 YY_USER_ACTION 03321 03324 YY_DECL 03325 { 03326 register yy_state_type yy_current_state; 03327 register char *yy_cp, *yy_bp; 03328 register int yy_act; 03329 03330 #line 846 "commentscan.l" 03331 03332 03333 /* What can happen in while parsing a comment block: 03334 * commands (e.g. @page, or \page) 03335 * escaped commands (e.g. @@page or \\page). 03336 * formulas (e.g. \f$ \f[ \f{..) 03337 * directories (e.g. \doxygen\src\) 03338 * autolist end. (e.g. a dot on an otherwise empty line) 03339 * newlines. 03340 * end of brief description due to blank line. 03341 * end of brief description due to some command (@command, or <command>). 03342 * words and whitespace and other characters (#,?!, etc). 03343 * grouping commands (e.g. @{ and @}) 03344 * language switch (e.g. \~english or \~). 03345 * mail adress (e.g. dimitri@stack.nl). 03346 * quoted text, such as "foo@bar" 03347 * XML commands, <summary></summary><remarks></remarks> 03348 */ 03349 03350 #line 3351 "<stdout>" 03351 03352 if ( !(yy_init) ) 03353 { 03354 (yy_init) = 1; 03355 03356 #ifdef YY_USER_INIT 03357 YY_USER_INIT; 03358 #endif 03359 03360 /* Create the reject buffer large enough to save one state per allowed character. */ 03361 if ( ! (yy_state_buf) ) 03362 (yy_state_buf) = (yy_state_type *)commentScanYYalloc(YY_STATE_BUF_SIZE ); 03363 03364 if ( ! (yy_start) ) 03365 (yy_start) = 1; /* first start state */ 03366 03367 if ( ! commentScanYYin ) 03368 commentScanYYin = stdin; 03369 03370 if ( ! commentScanYYout ) 03371 commentScanYYout = stdout; 03372 03373 if ( ! YY_CURRENT_BUFFER ) { 03374 commentScanYYensure_buffer_stack (); 03375 YY_CURRENT_BUFFER_LVALUE = 03376 commentScanYY_create_buffer(commentScanYYin,YY_BUF_SIZE ); 03377 } 03378 03379 commentScanYY_load_buffer_state( ); 03380 } 03381 03382 while ( 1 ) /* loops until end-of-file is reached */ 03383 { 03384 yy_cp = (yy_c_buf_p); 03385 03386 /* Support of commentScanYYtext. */ 03387 *yy_cp = (yy_hold_char); 03388 03389 /* yy_bp points to the position in yy_ch_buf of the start of 03390 * the current run. 03391 */ 03392 yy_bp = yy_cp; 03393 03394 yy_current_state = (yy_start); 03395 yy_current_state += YY_AT_BOL(); 03396 03397 (yy_state_ptr) = (yy_state_buf); 03398 *(yy_state_ptr)++ = yy_current_state; 03399 03400 yy_match: 03401 do 03402 { 03403 register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; 03404 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 03405 { 03406 yy_current_state = (int) yy_def[yy_current_state]; 03407 if ( yy_current_state >= 912 ) 03408 yy_c = yy_meta[(unsigned int) yy_c]; 03409 } 03410 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 03411 *(yy_state_ptr)++ = yy_current_state; 03412 ++yy_cp; 03413 } 03414 while ( yy_base[yy_current_state] != 6529 ); 03415 03416 yy_find_action: 03417 yy_current_state = *--(yy_state_ptr); 03418 (yy_lp) = yy_accept[yy_current_state]; 03419 find_rule: /* we branch to this label when backing up */ 03420 for ( ; ; ) /* until we find what rule we matched */ 03421 { 03422 if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] ) 03423 { 03424 yy_act = yy_acclist[(yy_lp)]; 03425 if ( yy_act & YY_TRAILING_HEAD_MASK || 03426 yy_looking_for_trail_begin ) 03427 { 03428 if ( yy_act == yy_looking_for_trail_begin ) 03429 { 03430 yy_looking_for_trail_begin = 0; 03431 yy_act &= ~YY_TRAILING_HEAD_MASK; 03432 break; 03433 } 03434 } 03435 else if ( yy_act & YY_TRAILING_MASK ) 03436 { 03437 yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK; 03438 yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK; 03439 (yy_full_match) = yy_cp; 03440 yy_full_state = (yy_state_ptr); 03441 yy_full_lp = (yy_lp); 03442 } 03443 else 03444 { 03445 (yy_full_match) = yy_cp; 03446 yy_full_state = (yy_state_ptr); 03447 yy_full_lp = (yy_lp); 03448 break; 03449 } 03450 ++(yy_lp); 03451 goto find_rule; 03452 } 03453 --yy_cp; 03454 yy_current_state = *--(yy_state_ptr); 03455 (yy_lp) = yy_accept[yy_current_state]; 03456 } 03457 03458 YY_DO_BEFORE_ACTION; 03459 03460 do_action: /* This label is used only to access EOF actions. */ 03461 03462 switch ( yy_act ) 03463 { /* beginning of action switch */ 03464 case 1: 03465 YY_RULE_SETUP 03466 #line 865 "commentscan.l" 03467 { // escaped command 03468 addOutput(commentScanYYtext); 03469 } 03470 YY_BREAK 03471 case 2: 03472 YY_RULE_SETUP 03473 #line 868 "commentscan.l" 03474 { // escaped command 03475 addOutput(commentScanYYtext); 03476 } 03477 YY_BREAK 03478 case 3: 03479 YY_RULE_SETUP 03480 #line 871 "commentscan.l" 03481 { // mail adress 03482 addOutput(commentScanYYtext); 03483 } 03484 YY_BREAK 03485 case 4: 03486 YY_RULE_SETUP 03487 #line 874 "commentscan.l" 03488 { // quoted text 03489 addOutput(commentScanYYtext); 03490 } 03491 YY_BREAK 03492 case 5: 03493 YY_RULE_SETUP 03494 #line 877 "commentscan.l" 03495 { // directory (or chain of commands!) 03496 addOutput(commentScanYYtext); 03497 } 03498 YY_BREAK 03499 case 6: 03500 /* rule 6 can match eol */ 03501 YY_RULE_SETUP 03502 #line 880 "commentscan.l" 03503 { // xref command 03504 if (inContext!=OutputXRef) 03505 { 03506 briefEndsAtDot=FALSE; 03507 setOutput(OutputDoc); 03508 } 03509 // continue with the same input 03510 REJECT; 03511 } 03512 YY_BREAK 03513 /* 03514 <Comment>{DETAILEDCMD}/[^a-z_A-Z]* { // command that can end a brief description 03515 briefEndsAtDot=FALSE; 03516 setOutput(OutputDoc); 03517 // continue with the same input 03518 REJECT; 03519 } 03520 */ 03521 case 7: 03522 YY_RULE_SETUP 03523 #line 897 "commentscan.l" 03524 { // HTML command that ends a brief description 03525 setOutput(OutputDoc); 03526 // continue with the same input 03527 REJECT; 03528 } 03529 YY_BREAK 03530 case 8: 03531 YY_RULE_SETUP 03532 #line 902 "commentscan.l" 03533 { // start of a .NET XML style brief description 03534 setOutput(OutputBrief); 03535 } 03536 YY_BREAK 03537 case 9: 03538 YY_RULE_SETUP 03539 #line 905 "commentscan.l" 03540 { // start of a .NET XML style detailed description 03541 setOutput(OutputDoc); 03542 } 03543 YY_BREAK 03544 case 10: 03545 YY_RULE_SETUP 03546 #line 908 "commentscan.l" 03547 { // end of a brief or detailed description 03548 } 03549 YY_BREAK 03550 case 11: 03551 YY_RULE_SETUP 03552 #line 910 "commentscan.l" 03553 { 03554 BEGIN(HtmlComment); 03555 } 03556 YY_BREAK 03557 case 12: 03558 YY_RULE_SETUP 03559 #line 913 "commentscan.l" 03560 { // potentially interesting command 03561 QCString cmdName = QCString(&commentScanYYtext[1]).stripWhiteSpace(); 03562 DocCmdMapper::Cmd *cmdPtr = DocCmdMapper::map(cmdName); 03563 if (cmdPtr) // special action is required 03564 { 03565 if (cmdPtr->endsBrief) 03566 { 03567 briefEndsAtDot=FALSE; 03568 // this command forces the end of brief description 03569 setOutput(OutputDoc); 03570 } 03571 if (cmdPtr->func && cmdPtr->func(cmdName)) 03572 { 03573 // implicit split of the comment block into two 03574 // entries. Restart the next block at the start 03575 // of this command. 03576 parseMore=TRUE; 03577 03578 // yuk, this is probably not very portable across lex implementations, 03579 // but we need to know the position in the input buffer where this 03580 // rule matched. 03581 // for flex 2.5.33+ we should use YY_CURRENT_BUFFER_LVALUE 03582 #if YY_FLEX_MINOR_VERSION>=5 && YY_FLEX_SUBMINOR_VERSION>=33 03583 inputPosition=prevPosition + yy_bp - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; 03584 #else 03585 inputPosition=prevPosition + yy_bp - yy_current_buffer->yy_ch_buf; 03586 #endif 03587 yyterminate(); 03588 } 03589 else if (cmdPtr->func==0) 03590 { 03591 // command without handler, to be processed 03592 // later by parsedoc.cpp 03593 addOutput(commentScanYYtext); 03594 } 03595 } 03596 else // command not relevant 03597 { 03598 addOutput(commentScanYYtext); 03599 } 03600 } 03601 YY_BREAK 03602 case 13: 03603 YY_RULE_SETUP 03604 #line 954 "commentscan.l" 03605 { // escaped formula command 03606 addOutput(commentScanYYtext); 03607 } 03608 YY_BREAK 03609 case 14: 03610 YY_RULE_SETUP 03611 #line 957 "commentscan.l" 03612 { // language switch command 03613 QCString langId = &commentScanYYtext[2]; 03614 if (!langId.isEmpty() && 03615 stricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)!=0) 03616 { // enable language specific section 03617 BEGIN(SkipLang); 03618 } 03619 } 03620 YY_BREAK 03621 case 15: 03622 YY_RULE_SETUP 03623 #line 965 "commentscan.l" 03624 { // start of a formula with custom environment 03625 formulaText="\\begin"; 03626 formulaEnv=&commentScanYYtext[2]; 03627 formulaText+=formulaEnv; 03628 formulaNewLines=0; 03629 BEGIN(ReadFormulaLong); 03630 } 03631 YY_BREAK 03632 case 16: 03633 YY_RULE_SETUP 03634 #line 972 "commentscan.l" 03635 { // start of a inline formula 03636 formulaText="$"; 03637 formulaNewLines=0; 03638 BEGIN(ReadFormulaShort); 03639 } 03640 YY_BREAK 03641 case 17: 03642 YY_RULE_SETUP 03643 #line 977 "commentscan.l" 03644 { // start of a block formula 03645 formulaText="\\["; 03646 formulaNewLines=0; 03647 BEGIN(ReadFormulaLong); 03648 } 03649 YY_BREAK 03650 case 18: 03651 YY_RULE_SETUP 03652 #line 982 "commentscan.l" 03653 { // begin of a group 03654 //langParser->handleGroupStartCommand(g_memberGroupHeader); 03655 openGroup(current,yyFileName,yyLineNr); 03656 } 03657 YY_BREAK 03658 case 19: 03659 YY_RULE_SETUP 03660 #line 986 "commentscan.l" 03661 { // end of a group 03662 //langParser->handleGroupEndCommand(); 03663 closeGroup(current,yyFileName,yyLineNr); 03664 g_memberGroupHeader.resize(0); 03665 } 03666 YY_BREAK 03667 case 20: 03668 YY_RULE_SETUP 03669 #line 991 "commentscan.l" 03670 { // escaped character 03671 addOutput(commentScanYYtext); 03672 } 03673 YY_BREAK 03674 case 21: 03675 YY_RULE_SETUP 03676 #line 994 "commentscan.l" 03677 { // normal word 03678 addOutput(commentScanYYtext); 03679 } 03680 YY_BREAK 03681 case 22: 03682 /* rule 22 can match eol */ 03683 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */ 03684 (yy_c_buf_p) = yy_cp -= 1; 03685 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */ 03686 YY_RULE_SETUP 03687 #line 997 "commentscan.l" 03688 { // explicit end autolist: e.g " ." 03689 addOutput(commentScanYYtext); 03690 } 03691 YY_BREAK 03692 case 23: 03693 YY_RULE_SETUP 03694 #line 1000 "commentscan.l" 03695 { // . at start or in the middle of a word 03696 addOutput(commentScanYYtext); 03697 } 03698 YY_BREAK 03699 case 24: 03700 YY_RULE_SETUP 03701 #line 1003 "commentscan.l" 03702 { // . with escaped space. 03703 addOutput(commentScanYYtext[0]); 03704 addOutput(commentScanYYtext[2]); 03705 } 03706 YY_BREAK 03707 case 25: 03708 YY_RULE_SETUP 03709 #line 1007 "commentscan.l" 03710 { // . with comma such as "e.g.," 03711 addOutput(commentScanYYtext); 03712 } 03713 YY_BREAK 03714 case 26: 03715 /* rule 26 can match eol */ 03716 YY_RULE_SETUP 03717 #line 1010 "commentscan.l" 03718 { // at least one blank line (or blank line command) 03719 if (inContext!=OutputBrief) 03720 { 03721 addOutput("\n\n"); 03722 setOutput(OutputDoc); 03723 } 03724 else 03725 { // only go to the detailed description if we have 03726 // found some brief description and not just whitespace 03727 endBrief(FALSE); 03728 } 03729 lineCount(); 03730 } 03731 YY_BREAK 03732 case 27: 03733 YY_RULE_SETUP 03734 #line 1023 "commentscan.l" 03735 { // potential end of a JavaDoc style comment 03736 addOutput(*commentScanYYtext); 03737 if (briefEndsAtDot) 03738 { 03739 setOutput(OutputDoc); 03740 briefEndsAtDot=FALSE; 03741 } 03742 } 03743 YY_BREAK 03744 case 28: 03745 /* rule 28 can match eol */ 03746 YY_RULE_SETUP 03747 #line 1031 "commentscan.l" 03748 { // newline 03749 addOutput(*commentScanYYtext); 03750 yyLineNr++; 03751 } 03752 YY_BREAK 03753 case 29: 03754 YY_RULE_SETUP 03755 #line 1035 "commentscan.l" 03756 { // catch-all for anything else 03757 addOutput(*commentScanYYtext); 03758 } 03759 YY_BREAK 03760 /* -------------- Rules for handling HTML comments ----------- */ 03761 case 30: 03762 YY_RULE_SETUP 03763 #line 1042 "commentscan.l" 03764 { BEGIN( Comment ); } 03765 YY_BREAK 03766 case 31: 03767 /* rule 31 can match eol */ 03768 YY_RULE_SETUP 03769 #line 1043 "commentscan.l" 03770 { 03771 if (*commentScanYYtext=='\n') yyLineNr++; 03772 } 03773 YY_BREAK 03774 case 32: 03775 YY_RULE_SETUP 03776 #line 1046 "commentscan.l" 03777 { // ignore unimportant characters 03778 } 03779 YY_BREAK 03780 case 33: 03781 YY_RULE_SETUP 03782 #line 1048 "commentscan.l" 03783 { // ignore every else 03784 } 03785 YY_BREAK 03786 /* -------------- Rules for handling formulas ---------------- */ 03787 case 34: 03788 YY_RULE_SETUP 03789 #line 1053 "commentscan.l" 03790 { // end of inline formula 03791 formulaText+="$"; 03792 addOutput(addFormula()); 03793 BEGIN(Comment); 03794 } 03795 YY_BREAK 03796 case 35: 03797 YY_RULE_SETUP 03798 #line 1058 "commentscan.l" 03799 { // end of block formula 03800 formulaText+="\\]"; 03801 addOutput(addFormula()); 03802 BEGIN(Comment); 03803 } 03804 YY_BREAK 03805 case 36: 03806 YY_RULE_SETUP 03807 #line 1063 "commentscan.l" 03808 { // end of custom env formula 03809 formulaText+="\\end"; 03810 formulaText+=formulaEnv; 03811 addOutput(addFormula()); 03812 BEGIN(Comment); 03813 } 03814 YY_BREAK 03815 case 37: 03816 YY_RULE_SETUP 03817 #line 1069 "commentscan.l" 03818 { // any non-special character 03819 formulaText+=commentScanYYtext; 03820 } 03821 YY_BREAK 03822 case 38: 03823 /* rule 38 can match eol */ 03824 YY_RULE_SETUP 03825 #line 1072 "commentscan.l" 03826 { // new line 03827 formulaNewLines++; 03828 formulaText+=*commentScanYYtext; 03829 yyLineNr++; 03830 } 03831 YY_BREAK 03832 case 39: 03833 YY_RULE_SETUP 03834 #line 1077 "commentscan.l" 03835 { // any othe character 03836 formulaText+=*commentScanYYtext; 03837 } 03838 YY_BREAK 03839 /* ------------ handle argument of enum command --------------- */ 03840 case 40: 03841 /* rule 40 can match eol */ 03842 YY_RULE_SETUP 03843 #line 1083 "commentscan.l" 03844 { // handle argument 03845 current->name = commentScanYYtext; 03846 BEGIN( Comment ); 03847 } 03848 YY_BREAK 03849 case 41: 03850 /* rule 41 can match eol */ 03851 YY_RULE_SETUP 03852 #line 1087 "commentscan.l" 03853 { // line continuation 03854 yyLineNr++; 03855 addOutput('\n'); 03856 } 03857 YY_BREAK 03858 case 42: 03859 /* rule 42 can match eol */ 03860 YY_RULE_SETUP 03861 #line 1091 "commentscan.l" 03862 { // missing argument 03863 warn(yyFileName,yyLineNr, 03864 "Warning: missing argument after \\enum." 03865 ); 03866 addOutput('\n'); 03867 if (*commentScanYYtext=='\n') yyLineNr++; 03868 BEGIN( Comment ); 03869 } 03870 YY_BREAK 03871 case 43: 03872 YY_RULE_SETUP 03873 #line 1099 "commentscan.l" 03874 { // ignore other stuff 03875 } 03876 YY_BREAK 03877 /* ------------ handle argument of namespace command --------------- */ 03878 case 44: 03879 /* rule 44 can match eol */ 03880 YY_RULE_SETUP 03881 #line 1104 "commentscan.l" 03882 { // handle argument 03883 current->name = commentScanYYtext; 03884 BEGIN( Comment ); 03885 } 03886 YY_BREAK 03887 case 45: 03888 /* rule 45 can match eol */ 03889 YY_RULE_SETUP 03890 #line 1108 "commentscan.l" 03891 { // line continuation 03892 yyLineNr++; 03893 addOutput('\n'); 03894 } 03895 YY_BREAK 03896 case 46: 03897 /* rule 46 can match eol */ 03898 YY_RULE_SETUP 03899 #line 1112 "commentscan.l" 03900 { // missing argument 03901 warn(yyFileName,yyLineNr, 03902 "Warning: missing argument after " 03903 "\\namespace." 03904 ); 03905 addOutput('\n'); 03906 if (*commentScanYYtext=='\n') yyLineNr++; 03907 BEGIN( Comment ); 03908 } 03909 YY_BREAK 03910 case 47: 03911 YY_RULE_SETUP 03912 #line 1121 "commentscan.l" 03913 { // ignore other stuff 03914 } 03915 YY_BREAK 03916 /* ------------ handle argument of package command --------------- */ 03917 case 48: 03918 YY_RULE_SETUP 03919 #line 1126 "commentscan.l" 03920 { // handle argument 03921 current->name = commentScanYYtext; 03922 BEGIN( Comment ); 03923 } 03924 YY_BREAK 03925 case 49: 03926 /* rule 49 can match eol */ 03927 YY_RULE_SETUP 03928 #line 1130 "commentscan.l" 03929 { // line continuation 03930 yyLineNr++; 03931 addOutput('\n'); 03932 } 03933 YY_BREAK 03934 case 50: 03935 /* rule 50 can match eol */ 03936 YY_RULE_SETUP 03937 #line 1134 "commentscan.l" 03938 { // missing argument 03939 warn(yyFileName,yyLineNr, 03940 "Warning: missing argument after " 03941 "\\package." 03942 ); 03943 addOutput('\n'); 03944 if (*commentScanYYtext=='\n') yyLineNr++; 03945 BEGIN( Comment ); 03946 } 03947 YY_BREAK 03948 case 51: 03949 YY_RULE_SETUP 03950 #line 1143 "commentscan.l" 03951 { // ignore other stuff 03952 } 03953 YY_BREAK 03954 /* ------ handle argument of class/struct/union command --------------- */ 03955 case 52: 03956 /* rule 52 can match eol */ 03957 YY_RULE_SETUP 03958 #line 1148 "commentscan.l" 03959 { // first argument 03960 current->name = commentScanYYtext; 03961 if (current->section==Entry::PROTOCOLDOC_SEC) 03962 { 03963 current->name+="-p"; 03964 } 03965 // prepend outer scope name 03966 BEGIN( ClassDocArg2 ); 03967 } 03968 YY_BREAK 03969 case 53: 03970 /* rule 53 can match eol */ 03971 YY_RULE_SETUP 03972 #line 1157 "commentscan.l" 03973 { 03974 current->name = commentScanYYtext; 03975 BEGIN( ClassDocArg2 ); 03976 } 03977 YY_BREAK 03978 case 54: 03979 /* rule 54 can match eol */ 03980 YY_RULE_SETUP 03981 #line 1161 "commentscan.l" 03982 { // line continuation 03983 yyLineNr++; 03984 addOutput('\n'); 03985 } 03986 YY_BREAK 03987 case 55: 03988 /* rule 55 can match eol */ 03989 YY_RULE_SETUP 03990 #line 1165 "commentscan.l" 03991 { 03992 warn(yyFileName,yyLineNr, 03993 "Warning: missing argument after " 03994 "\\%s.",YY_START==ClassDocArg1?"class":"category" 03995 ); 03996 addOutput('\n'); 03997 if (*commentScanYYtext=='\n') yyLineNr++; 03998 BEGIN( Comment ); 03999 } 04000 YY_BREAK 04001 case 56: 04002 YY_RULE_SETUP 04003 #line 1174 "commentscan.l" 04004 { // ignore other stuff 04005 } 04006 YY_BREAK 04007 case 57: 04008 YY_RULE_SETUP 04009 #line 1177 "commentscan.l" 04010 { // second argument; include file 04011 current->includeFile = stripQuotes(commentScanYYtext); 04012 BEGIN( ClassDocArg3 ); 04013 } 04014 YY_BREAK 04015 case 58: 04016 /* rule 58 can match eol */ 04017 YY_RULE_SETUP 04018 #line 1181 "commentscan.l" 04019 { // line continuation 04020 yyLineNr++; 04021 addOutput('\n'); 04022 } 04023 YY_BREAK 04024 case 59: 04025 /* rule 59 can match eol */ 04026 YY_RULE_SETUP 04027 #line 1185 "commentscan.l" 04028 { 04029 addOutput('\n'); 04030 if (*commentScanYYtext=='\n') yyLineNr++; 04031 BEGIN( Comment ); 04032 } 04033 YY_BREAK 04034 case 60: 04035 YY_RULE_SETUP 04036 #line 1190 "commentscan.l" 04037 { // ignore other stuff 04038 } 04039 YY_BREAK 04040 case 61: 04041 YY_RULE_SETUP 04042 #line 1193 "commentscan.l" 04043 { // third argument; include file name 04044 current->includeName = commentScanYYtext; 04045 BEGIN( Comment ); 04046 } 04047 YY_BREAK 04048 case 62: 04049 /* rule 62 can match eol */ 04050 YY_RULE_SETUP 04051 #line 1197 "commentscan.l" 04052 { // line continuation 04053 yyLineNr++; 04054 addOutput('\n'); 04055 } 04056 YY_BREAK 04057 case 63: 04058 /* rule 63 can match eol */ 04059 YY_RULE_SETUP 04060 #line 1201 "commentscan.l" 04061 { 04062 if (*commentScanYYtext=='\n') yyLineNr++; 04063 BEGIN( Comment ); 04064 } 04065 YY_BREAK 04066 case 64: 04067 YY_RULE_SETUP 04068 #line 1205 "commentscan.l" 04069 { // ignore other stuff 04070 } 04071 YY_BREAK 04072 /* --------- handle arguments of {def,add,weak}group commands --------- */ 04073 case 65: 04074 YY_RULE_SETUP 04075 #line 1210 "commentscan.l" 04076 { // group name 04077 current->name = commentScanYYtext; 04078 //lastDefGroup.groupname = commentScanYYtext; 04079 //lastDefGroup.pri = current->groupingPri(); 04080 // the .html stuff is for Qt compatibility 04081 if (current->name.right(5)==".html") 04082 { 04083 current->name=current->name.left(current->name.length()-5); 04084 } 04085 BEGIN(GroupDocArg2); 04086 } 04087 YY_BREAK 04088 case 66: 04089 /* rule 66 can match eol */ 04090 YY_RULE_SETUP 04091 #line 1221 "commentscan.l" 04092 { // line continuation 04093 yyLineNr++; 04094 addOutput('\n'); 04095 } 04096 YY_BREAK 04097 case 67: 04098 /* rule 67 can match eol */ 04099 YY_RULE_SETUP 04100 #line 1225 "commentscan.l" 04101 { // missing argument! 04102 warn(yyFileName,yyLineNr, 04103 "Warning: missing group name after %s", 04104 current->groupDocCmd() 04105 ); 04106 addOutput('\n'); 04107 if (*commentScanYYtext=='\n') yyLineNr++; 04108 BEGIN( Comment ); 04109 } 04110 YY_BREAK 04111 case 68: 04112 /* rule 68 can match eol */ 04113 YY_RULE_SETUP 04114 #line 1234 "commentscan.l" 04115 { // line continuation 04116 yyLineNr++; 04117 addOutput('\n'); 04118 } 04119 YY_BREAK 04120 case 69: 04121 YY_RULE_SETUP 04122 #line 1238 "commentscan.l" 04123 { // title (stored in type) 04124 current->type += commentScanYYtext; 04125 current->type = current->type.stripWhiteSpace(); 04126 } 04127 YY_BREAK 04128 case 70: 04129 /* rule 70 can match eol */ 04130 YY_RULE_SETUP 04131 #line 1242 "commentscan.l" 04132 { 04133 if ( current->groupDocType==Entry::GROUPDOC_NORMAL && 04134 current->type.isEmpty() 04135 ) // defgroup requires second argument 04136 { 04137 warn(yyFileName,yyLineNr, 04138 "Warning: missing title after " 04139 "\\defgroup %s", current->name.data() 04140 ); 04141 } 04142 if (*commentScanYYtext=='\n') yyLineNr++; 04143 addOutput('\n'); 04144 BEGIN( Comment ); 04145 } 04146 YY_BREAK 04147 /* --------- handle arguments of page/mainpage command ------------------- */ 04148 case 71: 04149 YY_RULE_SETUP 04150 #line 1259 "commentscan.l" 04151 { // first argument; page name 04152 current->name = stripQuotes(commentScanYYtext); 04153 BEGIN( PageDocArg2 ); 04154 } 04155 YY_BREAK 04156 case 72: 04157 /* rule 72 can match eol */ 04158 YY_RULE_SETUP 04159 #line 1263 "commentscan.l" 04160 { yyLineNr++; 04161 addOutput('\n'); 04162 } 04163 YY_BREAK 04164 case 73: 04165 /* rule 73 can match eol */ 04166 YY_RULE_SETUP 04167 #line 1266 "commentscan.l" 04168 { 04169 warn(yyFileName,yyLineNr, 04170 "Warning: missing argument after " 04171 "\\page." 04172 ); 04173 if (*commentScanYYtext=='\n') yyLineNr++; 04174 addOutput('\n'); 04175 BEGIN( Comment ); 04176 } 04177 YY_BREAK 04178 case 74: 04179 YY_RULE_SETUP 04180 #line 1275 "commentscan.l" 04181 { // ignore other stuff 04182 } 04183 YY_BREAK 04184 case 75: 04185 /* rule 75 can match eol */ 04186 YY_RULE_SETUP 04187 #line 1277 "commentscan.l" 04188 { // second argument; page title 04189 yyLineNr++; 04190 current->args = commentScanYYtext; 04191 addOutput('\n'); 04192 BEGIN( Comment ); 04193 } 04194 YY_BREAK 04195 /* --------- handle arguments of the file/dir/example command ------------ */ 04196 case 76: 04197 /* rule 76 can match eol */ 04198 YY_RULE_SETUP 04199 #line 1286 "commentscan.l" 04200 { // no file name specfied 04201 if (*commentScanYYtext=='\n') yyLineNr++; 04202 addOutput('\n'); 04203 BEGIN( Comment ); 04204 } 04205 YY_BREAK 04206 case 77: 04207 YY_RULE_SETUP 04208 #line 1291 "commentscan.l" 04209 { // first argument; name 04210 current->name = stripQuotes(commentScanYYtext); 04211 BEGIN( Comment ); 04212 } 04213 YY_BREAK 04214 case 78: 04215 /* rule 78 can match eol */ 04216 YY_RULE_SETUP 04217 #line 1295 "commentscan.l" 04218 { yyLineNr++; 04219 addOutput('\n'); 04220 } 04221 YY_BREAK 04222 case 79: 04223 YY_RULE_SETUP 04224 #line 1298 "commentscan.l" 04225 { // ignore other stuff 04226 } 04227 YY_BREAK 04228 /* --------- handle arguments of the xrefitem command ------------ */ 04229 case 80: 04230 YY_RULE_SETUP 04231 #line 1303 "commentscan.l" 04232 { // first argument 04233 newXRefItemKey=commentScanYYtext; 04234 setOutput(OutputXRef); 04235 BEGIN(XRefItemParam2); 04236 } 04237 YY_BREAK 04238 case 81: 04239 /* rule 81 can match eol */ 04240 YY_RULE_SETUP 04241 #line 1308 "commentscan.l" 04242 { // line continuation 04243 yyLineNr++; 04244 addOutput('\n'); 04245 } 04246 YY_BREAK 04247 case 82: 04248 /* rule 82 can match eol */ 04249 YY_RULE_SETUP 04250 #line 1312 "commentscan.l" 04251 { // missing arguments 04252 warn(yyFileName,yyLineNr, 04253 "Warning: Missing first argument of \\xrefitem" 04254 ); 04255 if (*commentScanYYtext=='\n') yyLineNr++; 04256 addOutput('\n'); 04257 inContext = OutputDoc; 04258 BEGIN( Comment ); 04259 } 04260 YY_BREAK 04261 case 83: 04262 YY_RULE_SETUP 04263 #line 1321 "commentscan.l" 04264 { // ignore other stuff 04265 } 04266 YY_BREAK 04267 case 84: 04268 YY_RULE_SETUP 04269 #line 1324 "commentscan.l" 04270 { // second argument 04271 xrefItemTitle = stripQuotes(commentScanYYtext); 04272 BEGIN(XRefItemParam3); 04273 } 04274 YY_BREAK 04275 case 85: 04276 /* rule 85 can match eol */ 04277 YY_RULE_SETUP 04278 #line 1328 "commentscan.l" 04279 { // line continuation 04280 yyLineNr++; 04281 addOutput('\n'); 04282 } 04283 YY_BREAK 04284 case 86: 04285 /* rule 86 can match eol */ 04286 YY_RULE_SETUP 04287 #line 1332 "commentscan.l" 04288 { // missing argument 04289 warn(yyFileName,yyLineNr, 04290 "Warning: Missing second argument of \\xrefitem" 04291 ); 04292 if (*commentScanYYtext=='\n') yyLineNr++; 04293 addOutput('\n'); 04294 inContext = OutputDoc; 04295 BEGIN( Comment ); 04296 } 04297 YY_BREAK 04298 case 87: 04299 YY_RULE_SETUP 04300 #line 1341 "commentscan.l" 04301 { // ignore other stuff 04302 } 04303 YY_BREAK 04304 case 88: 04305 YY_RULE_SETUP 04306 #line 1344 "commentscan.l" 04307 { // third argument 04308 xrefListTitle = stripQuotes(commentScanYYtext); 04309 xrefKind = XRef_Item; 04310 BEGIN( Comment ); 04311 } 04312 YY_BREAK 04313 case 89: 04314 /* rule 89 can match eol */ 04315 YY_RULE_SETUP 04316 #line 1349 "commentscan.l" 04317 { // line continuation 04318 yyLineNr++; 04319 addOutput('\n'); 04320 } 04321 YY_BREAK 04322 case 90: 04323 /* rule 90 can match eol */ 04324 YY_RULE_SETUP 04325 #line 1353 "commentscan.l" 04326 { // missing argument 04327 warn(yyFileName,yyLineNr, 04328 "Warning: Missing third argument of \\xrefitem" 04329 ); 04330 if (*commentScanYYtext=='\n') yyLineNr++; 04331 addOutput('\n'); 04332 inContext = OutputDoc; 04333 BEGIN( Comment ); 04334 } 04335 YY_BREAK 04336 case 91: 04337 YY_RULE_SETUP 04338 #line 1362 "commentscan.l" 04339 { // ignore other stuff 04340 } 04341 YY_BREAK 04342 /* --------- handle arguments of the relates(also) command ------------ */ 04343 case 92: 04344 YY_RULE_SETUP 04345 #line 1368 "commentscan.l" 04346 { // argument 04347 current->relates = commentScanYYtext; 04348 //if (current->mGrpId!=DOX_NOGROUP) 04349 //{ 04350 // memberGroupRelates = commentScanYYtext; 04351 //} 04352 BEGIN( Comment ); 04353 } 04354 YY_BREAK 04355 case 93: 04356 /* rule 93 can match eol */ 04357 YY_RULE_SETUP 04358 #line 1376 "commentscan.l" 04359 { // line continuation 04360 yyLineNr++; 04361 addOutput('\n'); 04362 } 04363 YY_BREAK 04364 case 94: 04365 /* rule 94 can match eol */ 04366 YY_RULE_SETUP 04367 #line 1380 "commentscan.l" 04368 { // missing argument 04369 warn(yyFileName,yyLineNr, 04370 "Warning: Missing argument of \\relates command" 04371 ); 04372 if (*commentScanYYtext=='\n') yyLineNr++; 04373 addOutput('\n'); 04374 BEGIN( Comment ); 04375 } 04376 YY_BREAK 04377 case 95: 04378 YY_RULE_SETUP 04379 #line 1388 "commentscan.l" 04380 { // ignore other stuff 04381 } 04382 YY_BREAK 04383 /* ----- handle arguments of the relates(also)/addindex commands ----- */ 04384 case 96: 04385 /* rule 96 can match eol */ 04386 YY_RULE_SETUP 04387 #line 1394 "commentscan.l" 04388 { // end of argument 04389 if (*commentScanYYtext=='\n') yyLineNr++; 04390 addOutput('\n'); 04391 BEGIN( Comment ); 04392 } 04393 YY_BREAK 04394 case 97: 04395 /* rule 97 can match eol */ 04396 YY_RULE_SETUP 04397 #line 1399 "commentscan.l" 04398 { // line continuation 04399 yyLineNr++; 04400 addOutput('\n'); 04401 } 04402 YY_BREAK 04403 case 98: 04404 YY_RULE_SETUP 04405 #line 1403 "commentscan.l" 04406 { // ignore other stuff 04407 addOutput(*commentScanYYtext); 04408 } 04409 YY_BREAK 04410 /* ----- handle arguments of the section/subsection/.. commands ------- */ 04411 case 99: 04412 YY_RULE_SETUP 04413 #line 1409 "commentscan.l" 04414 { // first argyment 04415 sectionLabel=commentScanYYtext; 04416 addOutput(commentScanYYtext); 04417 sectionTitle.resize(0); 04418 BEGIN(SectionTitle); 04419 } 04420 YY_BREAK 04421 case 100: 04422 /* rule 100 can match eol */ 04423 YY_RULE_SETUP 04424 #line 1415 "commentscan.l" 04425 { // missing argument 04426 warn(yyFileName,yyLineNr, 04427 "Warning: \\section command has no label" 04428 ); 04429 if (*commentScanYYtext=='\n') yyLineNr++; 04430 addOutput('\n'); 04431 BEGIN( Comment ); 04432 } 04433 YY_BREAK 04434 case 101: 04435 YY_RULE_SETUP 04436 #line 1423 "commentscan.l" 04437 { // invalid character for section label 04438 warn(yyFileName,yyLineNr, 04439 "Warning: Invalid or missing section label" 04440 ); 04441 BEGIN(Comment); 04442 } 04443 YY_BREAK 04444 case 102: 04445 /* rule 102 can match eol */ 04446 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */ 04447 (yy_c_buf_p) = yy_cp -= 1; 04448 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */ 04449 YY_RULE_SETUP 04450 #line 1430 "commentscan.l" 04451 { // end of section title 04452 addSection(); 04453 addOutput(commentScanYYtext); 04454 BEGIN( Comment ); 04455 } 04456 YY_BREAK 04457 case 103: 04458 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */ 04459 (yy_c_buf_p) = yy_cp -= 8; 04460 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */ 04461 YY_RULE_SETUP 04462 #line 1435 "commentscan.l" 04463 { // end of section title 04464 addSection(); 04465 addOutput(commentScanYYtext); 04466 BEGIN( Comment ); 04467 } 04468 YY_BREAK 04469 case 104: 04470 /* rule 104 can match eol */ 04471 YY_RULE_SETUP 04472 #line 1440 "commentscan.l" 04473 { // line continuation 04474 yyLineNr++; 04475 addOutput('\n'); 04476 } 04477 YY_BREAK 04478 case 105: 04479 YY_RULE_SETUP 04480 #line 1444 "commentscan.l" 04481 { // any character without special meaning 04482 sectionTitle+=commentScanYYtext; 04483 addOutput(commentScanYYtext); 04484 } 04485 YY_BREAK 04486 case 106: 04487 YY_RULE_SETUP 04488 #line 1448 "commentscan.l" 04489 { // unescape escaped command 04490 sectionTitle+=&commentScanYYtext[1]; 04491 addOutput(commentScanYYtext); 04492 } 04493 YY_BREAK 04494 case 107: 04495 YY_RULE_SETUP 04496 #line 1452 "commentscan.l" 04497 { // unescape escaped character 04498 sectionTitle+=commentScanYYtext[1]; 04499 addOutput(commentScanYYtext); 04500 } 04501 YY_BREAK 04502 case 108: 04503 YY_RULE_SETUP 04504 #line 1456 "commentscan.l" 04505 { // anything else 04506 sectionTitle+=commentScanYYtext; 04507 addOutput(*commentScanYYtext); 04508 } 04509 YY_BREAK 04510 /* ----- handle arguments of the subpage command ------- */ 04511 case 109: 04512 YY_RULE_SETUP 04513 #line 1463 "commentscan.l" 04514 { // first argument 04515 addOutput(commentScanYYtext); 04516 // we add subpage labels as a kind of "inheritance" relation to prevent 04517 // needing to add another list to the Entry class. 04518 current->extends->append(new BaseInfo(commentScanYYtext,Public,Normal)); 04519 BEGIN(SubpageTitle); 04520 } 04521 YY_BREAK 04522 case 110: 04523 /* rule 110 can match eol */ 04524 YY_RULE_SETUP 04525 #line 1470 "commentscan.l" 04526 { // missing argument 04527 warn(yyFileName,yyLineNr, 04528 "Warning: \\subpage command has no label" 04529 ); 04530 if (*commentScanYYtext=='\n') yyLineNr++; 04531 addOutput('\n'); 04532 BEGIN( Comment ); 04533 } 04534 YY_BREAK 04535 case 111: 04536 /* rule 111 can match eol */ 04537 YY_RULE_SETUP 04538 #line 1478 "commentscan.l" 04539 { // no title, end command 04540 addOutput(commentScanYYtext); 04541 BEGIN( Comment ); 04542 } 04543 YY_BREAK 04544 case 112: 04545 YY_RULE_SETUP 04546 #line 1482 "commentscan.l" 04547 { // add title, end of command 04548 addOutput(commentScanYYtext); 04549 BEGIN( Comment ); 04550 } 04551 YY_BREAK 04552 case 113: 04553 YY_RULE_SETUP 04554 #line 1486 "commentscan.l" 04555 { // no title, end of command 04556 unput(*commentScanYYtext); 04557 BEGIN( Comment ); 04558 } 04559 YY_BREAK 04560 /* ----- handle arguments of the anchor command ------- */ 04561 case 114: 04562 YY_RULE_SETUP 04563 #line 1493 "commentscan.l" 04564 { // found argument 04565 SectionInfo *si = new SectionInfo(yyFileName,commentScanYYtext,0,SectionInfo::Anchor); 04566 Doxygen::sectionDict.insert(commentScanYYtext,si); 04567 current->anchors->append(si); 04568 addOutput(commentScanYYtext); 04569 BEGIN( Comment ); 04570 } 04571 YY_BREAK 04572 case 115: 04573 /* rule 115 can match eol */ 04574 YY_RULE_SETUP 04575 #line 1500 "commentscan.l" 04576 { // missing argument 04577 warn(yyFileName,yyLineNr, 04578 "Warning: \\anchor command has no label" 04579 ); 04580 if (*commentScanYYtext=='\n') yyLineNr++; 04581 addOutput('\n'); 04582 BEGIN( Comment ); 04583 } 04584 YY_BREAK 04585 case 116: 04586 YY_RULE_SETUP 04587 #line 1508 "commentscan.l" 04588 { // invalid character for anchor label 04589 warn(yyFileName,yyLineNr, 04590 "Warning: Invalid or missing anchor label" 04591 ); 04592 BEGIN(Comment); 04593 } 04594 YY_BREAK 04595 /* ----- handle arguments of the preformatted block commands ------- */ 04596 case 117: 04597 /* rule 117 can match eol */ 04598 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */ 04599 (yy_c_buf_p) = yy_cp -= 1; 04600 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */ 04601 YY_RULE_SETUP 04602 #line 1518 "commentscan.l" 04603 { // possible ends 04604 addOutput(commentScanYYtext); 04605 if (&commentScanYYtext[4]==blockName) // found end of the block 04606 { 04607 BEGIN(Comment); 04608 } 04609 } 04610 YY_BREAK 04611 case 118: 04612 YY_RULE_SETUP 04613 #line 1525 "commentscan.l" 04614 { // some word 04615 addOutput(commentScanYYtext); 04616 } 04617 YY_BREAK 04618 case 119: 04619 /* rule 119 can match eol */ 04620 YY_RULE_SETUP 04621 #line 1528 "commentscan.l" 04622 { // new line 04623 if (*commentScanYYtext=='\n') yyLineNr++; 04624 addOutput('\n'); 04625 } 04626 YY_BREAK 04627 case 120: 04628 YY_RULE_SETUP 04629 #line 1532 "commentscan.l" 04630 { // start of a C-comment 04631 g_commentCount++; 04632 addOutput(commentScanYYtext); 04633 } 04634 YY_BREAK 04635 case 121: 04636 YY_RULE_SETUP 04637 #line 1536 "commentscan.l" 04638 { // end of a C-comment 04639 addOutput(commentScanYYtext); 04640 g_commentCount--; 04641 if (g_commentCount<0 && blockName!="verbatim") 04642 { 04643 warn(yyFileName,yyLineNr, 04644 "Warning: found */ without matching /* while inside a \\%s block! Perhaps a missing \\end%s?\n",blockName.data(),blockName.data()); 04645 } 04646 } 04647 YY_BREAK 04648 case 122: 04649 YY_RULE_SETUP 04650 #line 1545 "commentscan.l" 04651 { 04652 addOutput(*commentScanYYtext); 04653 } 04654 YY_BREAK 04655 case YY_STATE_EOF(FormatBlock): 04656 #line 1548 "commentscan.l" 04657 { 04658 warn(yyFileName,yyLineNr, 04659 "Warning: reached end of comment while inside a @%s block; check for missing @end%s tag!", 04660 blockName.data(),blockName.data() 04661 ); 04662 yyterminate(); 04663 } 04664 YY_BREAK 04665 /* ----- handle arguments of if/ifnot commands ------- */ 04666 case 123: 04667 YY_RULE_SETUP 04668 #line 1558 "commentscan.l" 04669 { // parameter of if/ifnot guard 04670 bool sectionEnabled = Config_getList("ENABLED_SECTIONS").find(commentScanYYtext)!=-1; 04671 bool parentEnabled = TRUE; 04672 if (!guards.isEmpty()) parentEnabled = guards.top()->isEnabled(); 04673 if (parentEnabled) 04674 { 04675 if ( 04676 (sectionEnabled && guardType==Guard_If) || 04677 (!sectionEnabled && guardType==Guard_IfNot) 04678 ) // section is visible 04679 { 04680 guards.push(new GuardedSection(TRUE,TRUE)); 04681 enabledSectionFound=TRUE; 04682 BEGIN( Comment ); 04683 } 04684 else // section is invisible 04685 { 04686 if (guardType!=Guard_Skip) 04687 { 04688 guards.push(new GuardedSection(FALSE,TRUE)); 04689 } 04690 BEGIN( SkipGuardedSection ); 04691 } 04692 } 04693 else // invisible because of parent 04694 { 04695 guards.push(new GuardedSection(FALSE,FALSE)); 04696 BEGIN( SkipGuardedSection ); 04697 } 04698 } 04699 YY_BREAK 04700 case 124: 04701 /* rule 124 can match eol */ 04702 YY_RULE_SETUP 04703 #line 1588 "commentscan.l" 04704 { // end of argument 04705 if (*commentScanYYtext=='\n') yyLineNr++; 04706 addOutput('\n'); 04707 BEGIN( Comment ); 04708 } 04709 YY_BREAK 04710 case 125: 04711 /* rule 125 can match eol */ 04712 YY_RULE_SETUP 04713 #line 1593 "commentscan.l" 04714 { // line continuation 04715 yyLineNr++; 04716 addOutput('\n'); 04717 } 04718 YY_BREAK 04719 case 126: 04720 YY_RULE_SETUP 04721 #line 1597 "commentscan.l" 04722 { // ignore other stuff 04723 addOutput(*commentScanYYtext); 04724 } 04725 YY_BREAK 04726 /* ----- handle skipping of conditional sections ------- */ 04727 case 127: 04728 /* rule 127 can match eol */ 04729 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */ 04730 (yy_c_buf_p) = yy_cp -= 1; 04731 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */ 04732 YY_RULE_SETUP 04733 #line 1603 "commentscan.l" 04734 { 04735 guardType = Guard_IfNot; 04736 BEGIN( GuardParam ); 04737 } 04738 YY_BREAK 04739 case 128: 04740 /* rule 128 can match eol */ 04741 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */ 04742 (yy_c_buf_p) = yy_cp -= 1; 04743 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */ 04744 YY_RULE_SETUP 04745 #line 1607 "commentscan.l" 04746 { 04747 guardType = Guard_If; 04748 BEGIN( GuardParam ); 04749 } 04750 YY_BREAK 04751 case 129: 04752 /* rule 129 can match eol */ 04753 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */ 04754 (yy_c_buf_p) = yy_cp -= 1; 04755 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */ 04756 YY_RULE_SETUP 04757 #line 1611 "commentscan.l" 04758 { 04759 if (guards.isEmpty()) 04760 { 04761 warn(yyFileName,yyLineNr, 04762 "Warning: found @endif without matching start command"); 04763 } 04764 else 04765 { 04766 delete guards.pop(); 04767 BEGIN( Comment ); 04768 } 04769 } 04770 YY_BREAK 04771 case 130: 04772 /* rule 130 can match eol */ 04773 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */ 04774 (yy_c_buf_p) = yy_cp -= 1; 04775 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */ 04776 YY_RULE_SETUP 04777 #line 1623 "commentscan.l" 04778 { 04779 if (guards.isEmpty()) 04780 { 04781 warn(yyFileName,yyLineNr, 04782 "Warning: found @else without matching start command"); 04783 } 04784 else 04785 { 04786 if (!enabledSectionFound && guards.top()->parentVisible()) 04787 { 04788 delete guards.pop(); 04789 guards.push(new GuardedSection(TRUE,TRUE)); 04790 enabledSectionFound=TRUE; 04791 BEGIN( Comment ); 04792 } 04793 } 04794 } 04795 YY_BREAK 04796 case 131: 04797 /* rule 131 can match eol */ 04798 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */ 04799 (yy_c_buf_p) = yy_cp -= 1; 04800 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */ 04801 YY_RULE_SETUP 04802 #line 1640 "commentscan.l" 04803 { 04804 if (guards.isEmpty()) 04805 { 04806 warn(yyFileName,yyLineNr, 04807 "Warning: found @elseif without matching start command"); 04808 } 04809 else 04810 { 04811 if (!enabledSectionFound && guards.top()->parentVisible()) 04812 { 04813 delete guards.pop(); 04814 BEGIN( GuardParam ); 04815 } 04816 } 04817 } 04818 YY_BREAK 04819 case 132: 04820 /* rule 132 can match eol */ 04821 YY_RULE_SETUP 04822 #line 1655 "commentscan.l" 04823 { // skip line 04824 if (*commentScanYYtext=='\n') yyLineNr++; 04825 addOutput('\n'); 04826 } 04827 YY_BREAK 04828 case 133: 04829 YY_RULE_SETUP 04830 #line 1659 "commentscan.l" 04831 { // skip non-special characters 04832 } 04833 YY_BREAK 04834 case 134: 04835 YY_RULE_SETUP 04836 #line 1661 "commentscan.l" 04837 { // any other character 04838 } 04839 YY_BREAK 04840 /* ----- handle skipping of internal section ------- */ 04841 case 135: 04842 /* rule 135 can match eol */ 04843 YY_RULE_SETUP 04844 #line 1667 "commentscan.l" 04845 { // skip line 04846 if (*commentScanYYtext=='\n') yyLineNr++; 04847 addOutput('\n'); 04848 } 04849 YY_BREAK 04850 case 136: 04851 YY_RULE_SETUP 04852 #line 1671 "commentscan.l" 04853 { // skip non-special characters 04854 } 04855 YY_BREAK 04856 case 137: 04857 YY_RULE_SETUP 04858 #line 1673 "commentscan.l" 04859 { // any other character 04860 } 04861 YY_BREAK 04862 /* ----- handle argument of name command ------- */ 04863 case 138: 04864 /* rule 138 can match eol */ 04865 YY_RULE_SETUP 04866 #line 1679 "commentscan.l" 04867 { // end of argument 04868 if (*commentScanYYtext=='\n') yyLineNr++; 04869 addOutput('\n'); 04870 BEGIN( Comment ); 04871 } 04872 YY_BREAK 04873 case 139: 04874 /* rule 139 can match eol */ 04875 YY_RULE_SETUP 04876 #line 1684 "commentscan.l" 04877 { // line continuation 04878 yyLineNr++; 04879 addOutput('\n'); 04880 g_memberGroupHeader+=' '; 04881 } 04882 YY_BREAK 04883 case 140: 04884 YY_RULE_SETUP 04885 #line 1689 "commentscan.l" 04886 { // ignore other stuff 04887 g_memberGroupHeader+=*commentScanYYtext; 04888 current->name+=*commentScanYYtext; 04889 } 04890 YY_BREAK 04891 /* ----- handle argument of ingroup command ------- */ 04892 case 141: 04893 YY_RULE_SETUP 04894 #line 1696 "commentscan.l" 04895 { // group id 04896 current->groups->append( 04897 new Grouping(commentScanYYtext, Grouping::GROUPING_INGROUP) 04898 ); 04899 inGroupParamFound=TRUE; 04900 } 04901 YY_BREAK 04902 case 142: 04903 /* rule 142 can match eol */ 04904 YY_RULE_SETUP 04905 #line 1702 "commentscan.l" 04906 { // missing argument 04907 if (!inGroupParamFound) 04908 { 04909 warn(yyFileName,yyLineNr, 04910 "Warning: Missing group name for \\ingroup command" 04911 ); 04912 } 04913 if (*commentScanYYtext=='\n') yyLineNr++; 04914 addOutput('\n'); 04915 BEGIN( Comment ); 04916 } 04917 YY_BREAK 04918 case 143: 04919 /* rule 143 can match eol */ 04920 YY_RULE_SETUP 04921 #line 1713 "commentscan.l" 04922 { // line continuation 04923 yyLineNr++; 04924 addOutput('\n'); 04925 } 04926 YY_BREAK 04927 case 144: 04928 YY_RULE_SETUP 04929 #line 1717 "commentscan.l" 04930 { // ignore other stuff 04931 addOutput(*commentScanYYtext); 04932 } 04933 YY_BREAK 04934 /* ----- handle argument of fn command ------- */ 04935 case 145: 04936 /* rule 145 can match eol */ 04937 YY_RULE_SETUP 04938 #line 1723 "commentscan.l" 04939 { // end of argument 04940 if (braceCount==0) 04941 { 04942 if (*commentScanYYtext=='\n') yyLineNr++; 04943 addOutput('\n'); 04944 langParser->parsePrototype(functionProto); 04945 BEGIN( Comment ); 04946 } 04947 } 04948 YY_BREAK 04949 case 146: 04950 /* rule 146 can match eol */ 04951 YY_RULE_SETUP 04952 #line 1732 "commentscan.l" 04953 { // line continuation 04954 yyLineNr++; 04955 functionProto+=' '; 04956 } 04957 YY_BREAK 04958 case 147: 04959 YY_RULE_SETUP 04960 #line 1736 "commentscan.l" 04961 { // non-special characters 04962 functionProto+=commentScanYYtext; 04963 } 04964 YY_BREAK 04965 case 148: 04966 YY_RULE_SETUP 04967 #line 1739 "commentscan.l" 04968 { 04969 functionProto+=commentScanYYtext; 04970 braceCount++; 04971 } 04972 YY_BREAK 04973 case 149: 04974 YY_RULE_SETUP 04975 #line 1743 "commentscan.l" 04976 { 04977 functionProto+=commentScanYYtext; 04978 braceCount--; 04979 } 04980 YY_BREAK 04981 case 150: 04982 YY_RULE_SETUP 04983 #line 1747 "commentscan.l" 04984 { // add other stuff 04985 functionProto+=*commentScanYYtext; 04986 } 04987 YY_BREAK 04988 /* ----- handle argument of overload command ------- */ 04989 case 151: 04990 /* rule 151 can match eol */ 04991 YY_RULE_SETUP 04992 #line 1755 "commentscan.l" 04993 { // end of argument 04994 if (*commentScanYYtext=='\n') yyLineNr++; 04995 addOutput('\n'); 04996 if (functionProto.stripWhiteSpace().isEmpty()) 04997 { // plain overload command 04998 addOutput(getOverloadDocs()); 04999 } 05000 else // overload declaration 05001 { 05002 makeStructuralIndicator(Entry::OVERLOADDOC_SEC); 05003 langParser->parsePrototype(functionProto); 05004 } 05005 BEGIN( Comment ); 05006 } 05007 YY_BREAK 05008 case 152: 05009 /* rule 152 can match eol */ 05010 YY_RULE_SETUP 05011 #line 1769 "commentscan.l" 05012 { // line continuation 05013 yyLineNr++; 05014 functionProto+=' '; 05015 } 05016 YY_BREAK 05017 case 153: 05018 YY_RULE_SETUP 05019 #line 1773 "commentscan.l" 05020 { // add other stuff 05021 functionProto+=*commentScanYYtext; 05022 } 05023 YY_BREAK 05024 /* ----- handle argument of inherit command ------- */ 05025 case 154: 05026 YY_RULE_SETUP 05027 #line 1779 "commentscan.l" 05028 { // found argument 05029 current->extends->append( 05030 new BaseInfo(removeRedundantWhiteSpace(commentScanYYtext),Public,Normal) 05031 ); 05032 BEGIN( Comment ); 05033 } 05034 YY_BREAK 05035 case 155: 05036 /* rule 155 can match eol */ 05037 YY_RULE_SETUP 05038 #line 1785 "commentscan.l" 05039 { // missing argument 05040 warn(yyFileName,yyLineNr, 05041 "Warning: \\inherit command has no argument" 05042 ); 05043 if (*commentScanYYtext=='\n') yyLineNr++; 05044 addOutput('\n'); 05045 BEGIN( Comment ); 05046 } 05047 YY_BREAK 05048 case 156: 05049 YY_RULE_SETUP 05050 #line 1793 "commentscan.l" 05051 { // invalid character for anchor label 05052 warn(yyFileName,yyLineNr, 05053 "Warning: Invalid or missing name for \\inherit command" 05054 ); 05055 BEGIN(Comment); 05056 } 05057 YY_BREAK 05058 /* ----- handle language specific sections ------- */ 05059 case 157: 05060 YY_RULE_SETUP 05061 #line 1802 "commentscan.l" 05062 { /* language switch */ 05063 QCString langId = &commentScanYYtext[2]; 05064 if (langId.isEmpty() || 05065 stricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)==0) 05066 { // enable language specific section 05067 BEGIN(Comment); 05068 } 05069 } 05070 YY_BREAK 05071 case 158: 05072 YY_RULE_SETUP 05073 #line 1810 "commentscan.l" 05074 { /* any character not a *, @, backslash or new line */ 05075 } 05076 YY_BREAK 05077 case 159: 05078 /* rule 159 can match eol */ 05079 YY_RULE_SETUP 05080 #line 1812 "commentscan.l" 05081 { /* new line in verbatim block */ 05082 if (*commentScanYYtext=='\n') yyLineNr++; 05083 } 05084 YY_BREAK 05085 case 160: 05086 YY_RULE_SETUP 05087 #line 1815 "commentscan.l" 05088 { /* any other character */ 05089 } 05090 YY_BREAK 05091 case 161: 05092 YY_RULE_SETUP 05093 #line 1819 "commentscan.l" 05094 ECHO; 05095 YY_BREAK 05096 #line 5097 "<stdout>" 05097 case YY_STATE_EOF(INITIAL): 05098 case YY_STATE_EOF(Comment): 05099 case YY_STATE_EOF(PageDocArg1): 05100 case YY_STATE_EOF(PageDocArg2): 05101 case YY_STATE_EOF(RelatesParam1): 05102 case YY_STATE_EOF(ClassDocArg1): 05103 case YY_STATE_EOF(ClassDocArg2): 05104 case YY_STATE_EOF(ClassDocArg3): 05105 case YY_STATE_EOF(CategoryDocArg1): 05106 case YY_STATE_EOF(XRefItemParam1): 05107 case YY_STATE_EOF(XRefItemParam2): 05108 case YY_STATE_EOF(XRefItemParam3): 05109 case YY_STATE_EOF(FileDocArg1): 05110 case YY_STATE_EOF(EnumDocArg1): 05111 case YY_STATE_EOF(NameSpaceDocArg1): 05112 case YY_STATE_EOF(PackageDocArg1): 05113 case YY_STATE_EOF(GroupDocArg1): 05114 case YY_STATE_EOF(GroupDocArg2): 05115 case YY_STATE_EOF(SectionLabel): 05116 case YY_STATE_EOF(SectionTitle): 05117 case YY_STATE_EOF(SubpageLabel): 05118 case YY_STATE_EOF(SubpageTitle): 05119 case YY_STATE_EOF(LineParam): 05120 case YY_STATE_EOF(GuardParam): 05121 case YY_STATE_EOF(SkipGuardedSection): 05122 case YY_STATE_EOF(SkipInternal): 05123 case YY_STATE_EOF(NameParam): 05124 case YY_STATE_EOF(InGroupParam): 05125 case YY_STATE_EOF(FnParam): 05126 case YY_STATE_EOF(OverloadParam): 05127 case YY_STATE_EOF(InheritParam): 05128 case YY_STATE_EOF(ReadFormulaShort): 05129 case YY_STATE_EOF(ReadFormulaLong): 05130 case YY_STATE_EOF(AnchorLabel): 05131 case YY_STATE_EOF(HtmlComment): 05132 case YY_STATE_EOF(SkipLang): 05133 yyterminate(); 05134 05135 case YY_END_OF_BUFFER: 05136 { 05137 /* Amount of text matched not including the EOB char. */ 05138 int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; 05139 05140 /* Undo the effects of YY_DO_BEFORE_ACTION. */ 05141 *yy_cp = (yy_hold_char); 05142 YY_RESTORE_YY_MORE_OFFSET 05143 05144 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) 05145 { 05146 /* We're scanning a new file or input source. It's 05147 * possible that this happened because the user 05148 * just pointed commentScanYYin at a new source and called 05149 * commentScanYYlex(). If so, then we have to assure 05150 * consistency between YY_CURRENT_BUFFER and our 05151 * globals. Here is the right place to do so, because 05152 * this is the first action (other than possibly a 05153 * back-up) that will match for the new input source. 05154 */ 05155 (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; 05156 YY_CURRENT_BUFFER_LVALUE->yy_input_file = commentScanYYin; 05157 YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; 05158 } 05159 05160 /* Note that here we test for yy_c_buf_p "<=" to the position 05161 * of the first EOB in the buffer, since yy_c_buf_p will 05162 * already have been incremented past the NUL character 05163 * (since all states make transitions on EOB to the 05164 * end-of-buffer state). Contrast this with the test 05165 * in input(). 05166 */ 05167 if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) 05168 { /* This was really a NUL. */ 05169 yy_state_type yy_next_state; 05170 05171 (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; 05172 05173 yy_current_state = yy_get_previous_state( ); 05174 05175 /* Okay, we're now positioned to make the NUL 05176 * transition. We couldn't have 05177 * yy_get_previous_state() go ahead and do it 05178 * for us because it doesn't know how to deal 05179 * with the possibility of jamming (and we don't 05180 * want to build jamming into it because then it 05181 * will run more slowly). 05182 */ 05183 05184 yy_next_state = yy_try_NUL_trans( yy_current_state ); 05185 05186 yy_bp = (yytext_ptr) + YY_MORE_ADJ; 05187 05188 if ( yy_next_state ) 05189 { 05190 /* Consume the NUL. */ 05191 yy_cp = ++(yy_c_buf_p); 05192 yy_current_state = yy_next_state; 05193 goto yy_match; 05194 } 05195 05196 else 05197 { 05198 yy_cp = (yy_c_buf_p); 05199 goto yy_find_action; 05200 } 05201 } 05202 05203 else switch ( yy_get_next_buffer( ) ) 05204 { 05205 case EOB_ACT_END_OF_FILE: 05206 { 05207 (yy_did_buffer_switch_on_eof) = 0; 05208 05209 if ( commentScanYYwrap( ) ) 05210 { 05211 /* Note: because we've taken care in 05212 * yy_get_next_buffer() to have set up 05213 * commentScanYYtext, we can now set up 05214 * yy_c_buf_p so that if some total 05215 * hoser (like flex itself) wants to 05216 * call the scanner after we return the 05217 * YY_NULL, it'll still work - another 05218 * YY_NULL will get returned. 05219 */ 05220 (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; 05221 05222 yy_act = YY_STATE_EOF(YY_START); 05223 goto do_action; 05224 } 05225 05226 else 05227 { 05228 if ( ! (yy_did_buffer_switch_on_eof) ) 05229 YY_NEW_FILE; 05230 } 05231 break; 05232 } 05233 05234 case EOB_ACT_CONTINUE_SCAN: 05235 (yy_c_buf_p) = 05236 (yytext_ptr) + yy_amount_of_matched_text; 05237 05238 yy_current_state = yy_get_previous_state( ); 05239 05240 yy_cp = (yy_c_buf_p); 05241 yy_bp = (yytext_ptr) + YY_MORE_ADJ; 05242 goto yy_match; 05243 05244 case EOB_ACT_LAST_MATCH: 05245 (yy_c_buf_p) = 05246 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; 05247 05248 yy_current_state = yy_get_previous_state( ); 05249 05250 yy_cp = (yy_c_buf_p); 05251 yy_bp = (yytext_ptr) + YY_MORE_ADJ; 05252 goto yy_find_action; 05253 } 05254 break; 05255 } 05256 05257 default: 05258 YY_FATAL_ERROR( 05259 "fatal flex scanner internal error--no action found" ); 05260 } /* end of action switch */ 05261 } /* end of scanning one token */ 05262 } /* end of commentScanYYlex */ 05263 05264 /* yy_get_next_buffer - try to read in a new buffer 05265 * 05266 * Returns a code representing an action: 05267 * EOB_ACT_LAST_MATCH - 05268 * EOB_ACT_CONTINUE_SCAN - continue scanning from current position 05269 * EOB_ACT_END_OF_FILE - end of file 05270 */ 05271 static int yy_get_next_buffer (void) 05272 { 05273 register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; 05274 register char *source = (yytext_ptr); 05275 register int number_to_move, i; 05276 int ret_val; 05277 05278 if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) 05279 YY_FATAL_ERROR( 05280 "fatal flex scanner internal error--end of buffer missed" ); 05281 05282 if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) 05283 { /* Don't try to fill the buffer, so this is an EOF. */ 05284 if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) 05285 { 05286 /* We matched a single character, the EOB, so 05287 * treat this as a final EOF. 05288 */ 05289 return EOB_ACT_END_OF_FILE; 05290 } 05291 05292 else 05293 { 05294 /* We matched some text prior to the EOB, first 05295 * process it. 05296 */ 05297 return EOB_ACT_LAST_MATCH; 05298 } 05299 } 05300 05301 /* Try to read more data. */ 05302 05303 /* First move last chars to start of buffer. */ 05304 number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; 05305 05306 for ( i = 0; i < number_to_move; ++i ) 05307 *(dest++) = *(source++); 05308 05309 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) 05310 /* don't do the read, it's not guaranteed to return an EOF, 05311 * just force an EOF 05312 */ 05313 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; 05314 05315 else 05316 { 05317 int num_to_read = 05318 YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; 05319 05320 while ( num_to_read <= 0 ) 05321 { /* Not enough room in the buffer - grow it. */ 05322 05323 YY_FATAL_ERROR( 05324 "input buffer overflow, can't enlarge buffer because scanner uses REJECT" ); 05325 05326 } 05327 05328 if ( num_to_read > YY_READ_BUF_SIZE ) 05329 num_to_read = YY_READ_BUF_SIZE; 05330 05331 /* Read in more data. */ 05332 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), 05333 (yy_n_chars), num_to_read ); 05334 05335 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); 05336 } 05337 05338 if ( (yy_n_chars) == 0 ) 05339 { 05340 if ( number_to_move == YY_MORE_ADJ ) 05341 { 05342 ret_val = EOB_ACT_END_OF_FILE; 05343 commentScanYYrestart(commentScanYYin ); 05344 } 05345 05346 else 05347 { 05348 ret_val = EOB_ACT_LAST_MATCH; 05349 YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = 05350 YY_BUFFER_EOF_PENDING; 05351 } 05352 } 05353 05354 else 05355 ret_val = EOB_ACT_CONTINUE_SCAN; 05356 05357 (yy_n_chars) += number_to_move; 05358 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; 05359 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; 05360 05361 (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; 05362 05363 return ret_val; 05364 } 05365 05366 /* yy_get_previous_state - get the state just before the EOB char was reached */ 05367 05368 static yy_state_type yy_get_previous_state (void) 05369 { 05370 register yy_state_type yy_current_state; 05371 register char *yy_cp; 05372 05373 yy_current_state = (yy_start); 05374 yy_current_state += YY_AT_BOL(); 05375 05376 (yy_state_ptr) = (yy_state_buf); 05377 *(yy_state_ptr)++ = yy_current_state; 05378 05379 for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) 05380 { 05381 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); 05382 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 05383 { 05384 yy_current_state = (int) yy_def[yy_current_state]; 05385 if ( yy_current_state >= 912 ) 05386 yy_c = yy_meta[(unsigned int) yy_c]; 05387 } 05388 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 05389 *(yy_state_ptr)++ = yy_current_state; 05390 } 05391 05392 return yy_current_state; 05393 } 05394 05395 /* yy_try_NUL_trans - try to make a transition on the NUL character 05396 * 05397 * synopsis 05398 * next_state = yy_try_NUL_trans( current_state ); 05399 */ 05400 static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) 05401 { 05402 register int yy_is_jam; 05403 05404 register YY_CHAR yy_c = 1; 05405 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 05406 { 05407 yy_current_state = (int) yy_def[yy_current_state]; 05408 if ( yy_current_state >= 912 ) 05409 yy_c = yy_meta[(unsigned int) yy_c]; 05410 } 05411 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 05412 yy_is_jam = (yy_current_state == 911); 05413 if ( ! yy_is_jam ) 05414 *(yy_state_ptr)++ = yy_current_state; 05415 05416 return yy_is_jam ? 0 : yy_current_state; 05417 } 05418 05419 static void yyunput (int c, register char * yy_bp ) 05420 { 05421 register char *yy_cp; 05422 05423 yy_cp = (yy_c_buf_p); 05424 05425 /* undo effects of setting up commentScanYYtext */ 05426 *yy_cp = (yy_hold_char); 05427 05428 if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) 05429 { /* need to shift things up to make room */ 05430 /* +2 for EOB chars. */ 05431 register int number_to_move = (yy_n_chars) + 2; 05432 register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ 05433 YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; 05434 register char *source = 05435 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; 05436 05437 while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) 05438 *--dest = *--source; 05439 05440 yy_cp += (int) (dest - source); 05441 yy_bp += (int) (dest - source); 05442 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = 05443 (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; 05444 05445 if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) 05446 YY_FATAL_ERROR( "flex scanner push-back overflow" ); 05447 } 05448 05449 *--yy_cp = (char) c; 05450 05451 (yytext_ptr) = yy_bp; 05452 (yy_hold_char) = *yy_cp; 05453 (yy_c_buf_p) = yy_cp; 05454 } 05455 05456 #ifndef YY_NO_INPUT 05457 #ifdef __cplusplus 05458 static int yyinput (void) 05459 #else 05460 static int input (void) 05461 #endif 05462 05463 { 05464 int c; 05465 05466 *(yy_c_buf_p) = (yy_hold_char); 05467 05468 if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) 05469 { 05470 /* yy_c_buf_p now points to the character we want to return. 05471 * If this occurs *before* the EOB characters, then it's a 05472 * valid NUL; if not, then we've hit the end of the buffer. 05473 */ 05474 if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) 05475 /* This was really a NUL. */ 05476 *(yy_c_buf_p) = '\0'; 05477 05478 else 05479 { /* need more input */ 05480 int offset = (yy_c_buf_p) - (yytext_ptr); 05481 ++(yy_c_buf_p); 05482 05483 switch ( yy_get_next_buffer( ) ) 05484 { 05485 case EOB_ACT_LAST_MATCH: 05486 /* This happens because yy_g_n_b() 05487 * sees that we've accumulated a 05488 * token and flags that we need to 05489 * try matching the token before 05490 * proceeding. But for input(), 05491 * there's no matching to consider. 05492 * So convert the EOB_ACT_LAST_MATCH 05493 * to EOB_ACT_END_OF_FILE. 05494 */ 05495 05496 /* Reset buffer status. */ 05497 commentScanYYrestart(commentScanYYin ); 05498 05499 /*FALLTHROUGH*/ 05500 05501 case EOB_ACT_END_OF_FILE: 05502 { 05503 if ( commentScanYYwrap( ) ) 05504 return 0; 05505 05506 if ( ! (yy_did_buffer_switch_on_eof) ) 05507 YY_NEW_FILE; 05508 #ifdef __cplusplus 05509 return yyinput(); 05510 #else 05511 return input(); 05512 #endif 05513 } 05514 05515 case EOB_ACT_CONTINUE_SCAN: 05516 (yy_c_buf_p) = (yytext_ptr) + offset; 05517 break; 05518 } 05519 } 05520 } 05521 05522 c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ 05523 *(yy_c_buf_p) = '\0'; /* preserve commentScanYYtext */ 05524 (yy_hold_char) = *++(yy_c_buf_p); 05525 05526 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); 05527 05528 return c; 05529 } 05530 #endif /* ifndef YY_NO_INPUT */ 05531 05537 void commentScanYYrestart (FILE * input_file ) 05538 { 05539 05540 if ( ! YY_CURRENT_BUFFER ){ 05541 commentScanYYensure_buffer_stack (); 05542 YY_CURRENT_BUFFER_LVALUE = 05543 commentScanYY_create_buffer(commentScanYYin,YY_BUF_SIZE ); 05544 } 05545 05546 commentScanYY_init_buffer(YY_CURRENT_BUFFER,input_file ); 05547 commentScanYY_load_buffer_state( ); 05548 } 05549 05554 void commentScanYY_switch_to_buffer (YY_BUFFER_STATE new_buffer ) 05555 { 05556 05557 /* TODO. We should be able to replace this entire function body 05558 * with 05559 * commentScanYYpop_buffer_state(); 05560 * commentScanYYpush_buffer_state(new_buffer); 05561 */ 05562 commentScanYYensure_buffer_stack (); 05563 if ( YY_CURRENT_BUFFER == new_buffer ) 05564 return; 05565 05566 if ( YY_CURRENT_BUFFER ) 05567 { 05568 /* Flush out information for old buffer. */ 05569 *(yy_c_buf_p) = (yy_hold_char); 05570 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); 05571 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); 05572 } 05573 05574 YY_CURRENT_BUFFER_LVALUE = new_buffer; 05575 commentScanYY_load_buffer_state( ); 05576 05577 /* We don't actually know whether we did this switch during 05578 * EOF (commentScanYYwrap()) processing, but the only time this flag 05579 * is looked at is after commentScanYYwrap() is called, so it's safe 05580 * to go ahead and always set it. 05581 */ 05582 (yy_did_buffer_switch_on_eof) = 1; 05583 } 05584 05585 static void commentScanYY_load_buffer_state (void) 05586 { 05587 (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; 05588 (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; 05589 commentScanYYin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; 05590 (yy_hold_char) = *(yy_c_buf_p); 05591 } 05592 05599 YY_BUFFER_STATE commentScanYY_create_buffer (FILE * file, int size ) 05600 { 05601 YY_BUFFER_STATE b; 05602 05603 b = (YY_BUFFER_STATE) commentScanYYalloc(sizeof( struct yy_buffer_state ) ); 05604 if ( ! b ) 05605 YY_FATAL_ERROR( "out of dynamic memory in commentScanYY_create_buffer()" ); 05606 05607 b->yy_buf_size = size; 05608 05609 /* yy_ch_buf has to be 2 characters longer than the size given because 05610 * we need to put in 2 end-of-buffer characters. 05611 */ 05612 b->yy_ch_buf = (char *) commentScanYYalloc(b->yy_buf_size + 2 ); 05613 if ( ! b->yy_ch_buf ) 05614 YY_FATAL_ERROR( "out of dynamic memory in commentScanYY_create_buffer()" ); 05615 05616 b->yy_is_our_buffer = 1; 05617 05618 commentScanYY_init_buffer(b,file ); 05619 05620 return b; 05621 } 05622 05627 void commentScanYY_delete_buffer (YY_BUFFER_STATE b ) 05628 { 05629 05630 if ( ! b ) 05631 return; 05632 05633 if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ 05634 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; 05635 05636 if ( b->yy_is_our_buffer ) 05637 commentScanYYfree((void *) b->yy_ch_buf ); 05638 05639 commentScanYYfree((void *) b ); 05640 } 05641 05642 #ifndef __cplusplus 05643 extern int isatty (int ); 05644 #endif /* __cplusplus */ 05645 05646 /* Initializes or reinitializes a buffer. 05647 * This function is sometimes called more than once on the same buffer, 05648 * such as during a commentScanYYrestart() or at EOF. 05649 */ 05650 static void commentScanYY_init_buffer (YY_BUFFER_STATE b, FILE * file ) 05651 05652 { 05653 int oerrno = errno; 05654 05655 commentScanYY_flush_buffer(b ); 05656 05657 b->yy_input_file = file; 05658 b->yy_fill_buffer = 1; 05659 05660 /* If b is the current buffer, then commentScanYY_init_buffer was _probably_ 05661 * called from commentScanYYrestart() or through yy_get_next_buffer. 05662 * In that case, we don't want to reset the lineno or column. 05663 */ 05664 if (b != YY_CURRENT_BUFFER){ 05665 b->yy_bs_lineno = 1; 05666 b->yy_bs_column = 0; 05667 } 05668 05669 b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; 05670 05671 errno = oerrno; 05672 } 05673 05678 void commentScanYY_flush_buffer (YY_BUFFER_STATE b ) 05679 { 05680 if ( ! b ) 05681 return; 05682 05683 b->yy_n_chars = 0; 05684 05685 /* We always need two end-of-buffer characters. The first causes 05686 * a transition to the end-of-buffer state. The second causes 05687 * a jam in that state. 05688 */ 05689 b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; 05690 b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; 05691 05692 b->yy_buf_pos = &b->yy_ch_buf[0]; 05693 05694 b->yy_at_bol = 1; 05695 b->yy_buffer_status = YY_BUFFER_NEW; 05696 05697 if ( b == YY_CURRENT_BUFFER ) 05698 commentScanYY_load_buffer_state( ); 05699 } 05700 05707 void commentScanYYpush_buffer_state (YY_BUFFER_STATE new_buffer ) 05708 { 05709 if (new_buffer == NULL) 05710 return; 05711 05712 commentScanYYensure_buffer_stack(); 05713 05714 /* This block is copied from commentScanYY_switch_to_buffer. */ 05715 if ( YY_CURRENT_BUFFER ) 05716 { 05717 /* Flush out information for old buffer. */ 05718 *(yy_c_buf_p) = (yy_hold_char); 05719 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); 05720 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); 05721 } 05722 05723 /* Only push if top exists. Otherwise, replace top. */ 05724 if (YY_CURRENT_BUFFER) 05725 (yy_buffer_stack_top)++; 05726 YY_CURRENT_BUFFER_LVALUE = new_buffer; 05727 05728 /* copied from commentScanYY_switch_to_buffer. */ 05729 commentScanYY_load_buffer_state( ); 05730 (yy_did_buffer_switch_on_eof) = 1; 05731 } 05732 05737 void commentScanYYpop_buffer_state (void) 05738 { 05739 if (!YY_CURRENT_BUFFER) 05740 return; 05741 05742 commentScanYY_delete_buffer(YY_CURRENT_BUFFER ); 05743 YY_CURRENT_BUFFER_LVALUE = NULL; 05744 if ((yy_buffer_stack_top) > 0) 05745 --(yy_buffer_stack_top); 05746 05747 if (YY_CURRENT_BUFFER) { 05748 commentScanYY_load_buffer_state( ); 05749 (yy_did_buffer_switch_on_eof) = 1; 05750 } 05751 } 05752 05753 /* Allocates the stack if it does not exist. 05754 * Guarantees space for at least one push. 05755 */ 05756 static void commentScanYYensure_buffer_stack (void) 05757 { 05758 int num_to_alloc; 05759 05760 if (!(yy_buffer_stack)) { 05761 05762 /* First allocation is just for 2 elements, since we don't know if this 05763 * scanner will even need a stack. We use 2 instead of 1 to avoid an 05764 * immediate realloc on the next call. 05765 */ 05766 num_to_alloc = 1; 05767 (yy_buffer_stack) = (struct yy_buffer_state**)commentScanYYalloc 05768 (num_to_alloc * sizeof(struct yy_buffer_state*) 05769 ); 05770 05771 memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); 05772 05773 (yy_buffer_stack_max) = num_to_alloc; 05774 (yy_buffer_stack_top) = 0; 05775 return; 05776 } 05777 05778 if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ 05779 05780 /* Increase the buffer to prepare for a possible push. */ 05781 int grow_size = 8 /* arbitrary grow size */; 05782 05783 num_to_alloc = (yy_buffer_stack_max) + grow_size; 05784 (yy_buffer_stack) = (struct yy_buffer_state**)commentScanYYrealloc 05785 ((yy_buffer_stack), 05786 num_to_alloc * sizeof(struct yy_buffer_state*) 05787 ); 05788 05789 /* zero only the new slots.*/ 05790 memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); 05791 (yy_buffer_stack_max) = num_to_alloc; 05792 } 05793 } 05794 05801 YY_BUFFER_STATE commentScanYY_scan_buffer (char * base, yy_size_t size ) 05802 { 05803 YY_BUFFER_STATE b; 05804 05805 if ( size < 2 || 05806 base[size-2] != YY_END_OF_BUFFER_CHAR || 05807 base[size-1] != YY_END_OF_BUFFER_CHAR ) 05808 /* They forgot to leave room for the EOB's. */ 05809 return 0; 05810 05811 b = (YY_BUFFER_STATE) commentScanYYalloc(sizeof( struct yy_buffer_state ) ); 05812 if ( ! b ) 05813 YY_FATAL_ERROR( "out of dynamic memory in commentScanYY_scan_buffer()" ); 05814 05815 b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ 05816 b->yy_buf_pos = b->yy_ch_buf = base; 05817 b->yy_is_our_buffer = 0; 05818 b->yy_input_file = 0; 05819 b->yy_n_chars = b->yy_buf_size; 05820 b->yy_is_interactive = 0; 05821 b->yy_at_bol = 1; 05822 b->yy_fill_buffer = 0; 05823 b->yy_buffer_status = YY_BUFFER_NEW; 05824 05825 commentScanYY_switch_to_buffer(b ); 05826 05827 return b; 05828 } 05829 05838 YY_BUFFER_STATE commentScanYY_scan_string (yyconst char * yystr ) 05839 { 05840 05841 return commentScanYY_scan_bytes(yystr,strlen(yystr) ); 05842 } 05843 05851 YY_BUFFER_STATE commentScanYY_scan_bytes (yyconst char * yybytes, int _yybytes_len ) 05852 { 05853 YY_BUFFER_STATE b; 05854 char *buf; 05855 yy_size_t n; 05856 int i; 05857 05858 /* Get memory for full buffer, including space for trailing EOB's. */ 05859 n = _yybytes_len + 2; 05860 buf = (char *) commentScanYYalloc(n ); 05861 if ( ! buf ) 05862 YY_FATAL_ERROR( "out of dynamic memory in commentScanYY_scan_bytes()" ); 05863 05864 for ( i = 0; i < _yybytes_len; ++i ) 05865 buf[i] = yybytes[i]; 05866 05867 buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; 05868 05869 b = commentScanYY_scan_buffer(buf,n ); 05870 if ( ! b ) 05871 YY_FATAL_ERROR( "bad buffer in commentScanYY_scan_bytes()" ); 05872 05873 /* It's okay to grow etc. this buffer, and we should throw it 05874 * away when we're done. 05875 */ 05876 b->yy_is_our_buffer = 1; 05877 05878 return b; 05879 } 05880 05881 #ifndef YY_EXIT_FAILURE 05882 #define YY_EXIT_FAILURE 2 05883 #endif 05884 05885 static void yy_fatal_error (yyconst char* msg ) 05886 { 05887 (void) fprintf( stderr, "%s\n", msg ); 05888 exit( YY_EXIT_FAILURE ); 05889 } 05890 05891 /* Redefine yyless() so it works in section 3 code. */ 05892 05893 #undef yyless 05894 #define yyless(n) \ 05895 do \ 05896 { \ 05897 /* Undo effects of setting up commentScanYYtext. */ \ 05898 int yyless_macro_arg = (n); \ 05899 YY_LESS_LINENO(yyless_macro_arg);\ 05900 commentScanYYtext[commentScanYYleng] = (yy_hold_char); \ 05901 (yy_c_buf_p) = commentScanYYtext + yyless_macro_arg; \ 05902 (yy_hold_char) = *(yy_c_buf_p); \ 05903 *(yy_c_buf_p) = '\0'; \ 05904 commentScanYYleng = yyless_macro_arg; \ 05905 } \ 05906 while ( 0 ) 05907 05908 /* Accessor methods (get/set functions) to struct members. */ 05909 05913 int commentScanYYget_lineno (void) 05914 { 05915 05916 return commentScanYYlineno; 05917 } 05918 05922 FILE *commentScanYYget_in (void) 05923 { 05924 return commentScanYYin; 05925 } 05926 05930 FILE *commentScanYYget_out (void) 05931 { 05932 return commentScanYYout; 05933 } 05934 05938 int commentScanYYget_leng (void) 05939 { 05940 return commentScanYYleng; 05941 } 05942 05947 char *commentScanYYget_text (void) 05948 { 05949 return commentScanYYtext; 05950 } 05951 05956 void commentScanYYset_lineno (int line_number ) 05957 { 05958 05959 commentScanYYlineno = line_number; 05960 } 05961 05968 void commentScanYYset_in (FILE * in_str ) 05969 { 05970 commentScanYYin = in_str ; 05971 } 05972 05973 void commentScanYYset_out (FILE * out_str ) 05974 { 05975 commentScanYYout = out_str ; 05976 } 05977 05978 int commentScanYYget_debug (void) 05979 { 05980 return commentScanYY_flex_debug; 05981 } 05982 05983 void commentScanYYset_debug (int bdebug ) 05984 { 05985 commentScanYY_flex_debug = bdebug ; 05986 } 05987 05988 static int yy_init_globals (void) 05989 { 05990 /* Initialization is the same as for the non-reentrant scanner. 05991 * This function is called from commentScanYYlex_destroy(), so don't allocate here. 05992 */ 05993 05994 (yy_buffer_stack) = 0; 05995 (yy_buffer_stack_top) = 0; 05996 (yy_buffer_stack_max) = 0; 05997 (yy_c_buf_p) = (char *) 0; 05998 (yy_init) = 0; 05999 (yy_start) = 0; 06000 06001 (yy_state_buf) = 0; 06002 (yy_state_ptr) = 0; 06003 (yy_full_match) = 0; 06004 (yy_lp) = 0; 06005 06006 /* Defined in main.c */ 06007 #ifdef YY_STDINIT 06008 commentScanYYin = stdin; 06009 commentScanYYout = stdout; 06010 #else 06011 commentScanYYin = (FILE *) 0; 06012 commentScanYYout = (FILE *) 0; 06013 #endif 06014 06015 /* For future reference: Set errno on error, since we are called by 06016 * commentScanYYlex_init() 06017 */ 06018 return 0; 06019 } 06020 06021 /* commentScanYYlex_destroy is for both reentrant and non-reentrant scanners. */ 06022 int commentScanYYlex_destroy (void) 06023 { 06024 06025 /* Pop the buffer stack, destroying each element. */ 06026 while(YY_CURRENT_BUFFER){ 06027 commentScanYY_delete_buffer(YY_CURRENT_BUFFER ); 06028 YY_CURRENT_BUFFER_LVALUE = NULL; 06029 commentScanYYpop_buffer_state(); 06030 } 06031 06032 /* Destroy the stack itself. */ 06033 commentScanYYfree((yy_buffer_stack) ); 06034 (yy_buffer_stack) = NULL; 06035 06036 commentScanYYfree ( (yy_state_buf) ); 06037 (yy_state_buf) = NULL; 06038 06039 /* Reset the globals. This is important in a non-reentrant scanner so the next time 06040 * commentScanYYlex() is called, initialization will occur. */ 06041 yy_init_globals( ); 06042 06043 return 0; 06044 } 06045 06046 /* 06047 * Internal utility routines. 06048 */ 06049 06050 #ifndef yytext_ptr 06051 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) 06052 { 06053 register int i; 06054 for ( i = 0; i < n; ++i ) 06055 s1[i] = s2[i]; 06056 } 06057 #endif 06058 06059 #ifdef YY_NEED_STRLEN 06060 static int yy_flex_strlen (yyconst char * s ) 06061 { 06062 register int n; 06063 for ( n = 0; s[n]; ++n ) 06064 ; 06065 06066 return n; 06067 } 06068 #endif 06069 06070 void *commentScanYYalloc (yy_size_t size ) 06071 { 06072 return (void *) malloc( size ); 06073 } 06074 06075 void *commentScanYYrealloc (void * ptr, yy_size_t size ) 06076 { 06077 /* The cast to (char *) in the following accommodates both 06078 * implementations that use char* generic pointers, and those 06079 * that use void* generic pointers. It works with the latter 06080 * because both ANSI C and C++ allow castless assignment from 06081 * any pointer type to void*, and deal with argument conversions 06082 * as though doing an assignment. 06083 */ 06084 return (void *) realloc( (char *) ptr, size ); 06085 } 06086 06087 void commentScanYYfree (void * ptr ) 06088 { 06089 free( (char *) ptr ); /* see commentScanYYrealloc() for (char *) cast */ 06090 } 06091 06092 #define YYTABLES_NAME "yytables" 06093 06094 #line 1819 "commentscan.l" 06095 06096 06097 06098 //---------------------------------------------------------------------------- 06099 06100 static bool handleBrief(const QCString &) 06101 { 06102 //printf("handleBrief\n"); 06103 setOutput(OutputBrief); 06104 return FALSE; 06105 } 06106 06107 static bool handleFn(const QCString &) 06108 { 06109 bool stop=makeStructuralIndicator(Entry::MEMBERDOC_SEC); 06110 functionProto.resize(0); 06111 braceCount=0; 06112 BEGIN(FnParam); 06113 return stop; 06114 } 06115 06116 static bool handleDef(const QCString &) 06117 { 06118 bool stop=makeStructuralIndicator(Entry::DEFINEDOC_SEC); 06119 functionProto.resize(0); 06120 BEGIN(FnParam); 06121 return stop; 06122 } 06123 06124 static bool handleOverload(const QCString &) 06125 { 06126 functionProto.resize(0); 06127 BEGIN(OverloadParam); 06128 return FALSE; 06129 } 06130 06131 static bool handleEnum(const QCString &) 06132 { 06133 bool stop=makeStructuralIndicator(Entry::ENUMDOC_SEC); 06134 BEGIN(EnumDocArg1); 06135 return stop; 06136 } 06137 06138 static bool handleDefGroup(const QCString &) 06139 { 06140 bool stop=makeStructuralIndicator(Entry::GROUPDOC_SEC); 06141 current->groupDocType = Entry::GROUPDOC_NORMAL; 06142 BEGIN( GroupDocArg1 ); 06143 return stop; 06144 } 06145 06146 static bool handleAddToGroup(const QCString &) 06147 { 06148 bool stop=makeStructuralIndicator(Entry::GROUPDOC_SEC); 06149 current->groupDocType = Entry::GROUPDOC_ADD; 06150 BEGIN( GroupDocArg1 ); 06151 return stop; 06152 } 06153 06154 static bool handleWeakGroup(const QCString &) 06155 { 06156 bool stop=makeStructuralIndicator(Entry::GROUPDOC_SEC); 06157 current->groupDocType = Entry::GROUPDOC_WEAK; 06158 BEGIN( GroupDocArg1 ); 06159 return stop; 06160 } 06161 06162 static bool handleNamespace(const QCString &) 06163 { 06164 bool stop=makeStructuralIndicator(Entry::NAMESPACEDOC_SEC); 06165 BEGIN( NameSpaceDocArg1 ); 06166 return stop; 06167 } 06168 06169 static bool handlePackage(const QCString &) 06170 { 06171 bool stop=makeStructuralIndicator(Entry::PACKAGEDOC_SEC); 06172 BEGIN( PackageDocArg1 ); 06173 return stop; 06174 } 06175 06176 static bool handleClass(const QCString &) 06177 { 06178 bool stop=makeStructuralIndicator(Entry::CLASSDOC_SEC); 06179 BEGIN( ClassDocArg1 ); 06180 return stop; 06181 } 06182 06183 static bool handleHeaderFile(const QCString &) 06184 { 06185 BEGIN( ClassDocArg2 ); 06186 return FALSE; 06187 } 06188 06189 static bool handleProtocol(const QCString &) 06190 { // Obj-C protocol 06191 bool stop=makeStructuralIndicator(Entry::PROTOCOLDOC_SEC); 06192 BEGIN( ClassDocArg1 ); 06193 return stop; 06194 } 06195 06196 static bool handleCategory(const QCString &) 06197 { // Obj-C category 06198 bool stop=makeStructuralIndicator(Entry::CATEGORYDOC_SEC); 06199 BEGIN( CategoryDocArg1 ); 06200 return stop; 06201 } 06202 06203 static bool handleUnion(const QCString &) 06204 { 06205 bool stop=makeStructuralIndicator(Entry::UNIONDOC_SEC); 06206 BEGIN( ClassDocArg1 ); 06207 return stop; 06208 } 06209 06210 static bool handleStruct(const QCString &) 06211 { 06212 bool stop=makeStructuralIndicator(Entry::STRUCTDOC_SEC); 06213 BEGIN( ClassDocArg1 ); 06214 return stop; 06215 } 06216 06217 static bool handleInterface(const QCString &) 06218 { 06219 bool stop=makeStructuralIndicator(Entry::INTERFACEDOC_SEC); 06220 BEGIN( ClassDocArg1 ); 06221 return stop; 06222 } 06223 06224 static bool handleIdlException(const QCString &) 06225 { 06226 bool stop=makeStructuralIndicator(Entry::EXCEPTIONDOC_SEC); 06227 BEGIN( ClassDocArg1 ); 06228 return stop; 06229 } 06230 06231 static bool handlePage(const QCString &) 06232 { 06233 bool stop=makeStructuralIndicator(Entry::PAGEDOC_SEC); 06234 BEGIN( PageDocArg1 ); 06235 return stop; 06236 } 06237 06238 static bool handleMainpage(const QCString &) 06239 { 06240 bool stop=makeStructuralIndicator(Entry::MAINPAGEDOC_SEC); 06241 if (!stop) current->name = "mainpage"; 06242 BEGIN( PageDocArg2 ); 06243 return stop; 06244 } 06245 06246 static bool handleFile(const QCString &) 06247 { 06248 bool stop=makeStructuralIndicator(Entry::FILEDOC_SEC); 06249 if (!stop) current->name = yyFileName; 06250 BEGIN( FileDocArg1 ); 06251 return stop; 06252 } 06253 06254 static bool handleDir(const QCString &) 06255 { 06256 bool stop=makeStructuralIndicator(Entry::DIRDOC_SEC); 06257 if (!stop) current->name = yyFileName; 06258 BEGIN( FileDocArg1 ); 06259 return stop; 06260 } 06261 06262 static bool handleExample(const QCString &) 06263 { 06264 bool stop=makeStructuralIndicator(Entry::EXAMPLE_SEC); 06265 if (!stop) current->name = yyFileName; 06266 BEGIN( FileDocArg1 ); 06267 return stop; 06268 } 06269 06270 static bool handleDetails(const QCString &) 06271 { 06272 setOutput(OutputDoc); 06273 return FALSE; 06274 } 06275 06276 static bool handleName(const QCString &) 06277 { 06278 bool stop=makeStructuralIndicator(Entry::MEMBERGRP_SEC); 06279 if (!stop) 06280 { 06281 g_memberGroupHeader.resize(0); 06282 BEGIN( NameParam ); 06283 if (g_memberGroupId!=DOX_NOGROUP) // end of previous member group 06284 { 06285 closeGroup(current,yyFileName,yyLineNr); 06286 } 06287 } 06288 return stop; 06289 } 06290 06291 static bool handleTodo(const QCString &) 06292 { 06293 newXRefKind = XRef_Todo; 06294 setOutput(OutputXRef); 06295 xrefKind = XRef_Todo; 06296 return FALSE; 06297 } 06298 06299 static bool handleTest(const QCString &) 06300 { 06301 newXRefKind = XRef_Test; 06302 setOutput(OutputXRef); 06303 xrefKind = XRef_Test; 06304 return FALSE; 06305 } 06306 06307 static bool handleBug(const QCString &) 06308 { 06309 newXRefKind = XRef_Bug; 06310 setOutput(OutputXRef); 06311 xrefKind = XRef_Bug; 06312 return FALSE; 06313 } 06314 06315 static bool handleDeprecated(const QCString &) 06316 { 06317 newXRefKind = XRef_Deprecated; 06318 setOutput(OutputXRef); 06319 xrefKind = XRef_Deprecated; 06320 return FALSE; 06321 } 06322 06323 static bool handleXRefItem(const QCString &) 06324 { 06325 BEGIN(XRefItemParam1); 06326 return FALSE; 06327 } 06328 06329 static bool handleRelated(const QCString &) 06330 { 06331 BEGIN(RelatesParam1); 06332 return FALSE; 06333 } 06334 06335 static bool handleRelatedAlso(const QCString &) 06336 { 06337 current->relatesDup = TRUE; 06338 BEGIN(RelatesParam1); 06339 return FALSE; 06340 } 06341 06342 static bool handleRefItem(const QCString &) 06343 { 06344 addOutput("@refitem "); 06345 BEGIN(LineParam); 06346 return FALSE; 06347 } 06348 06349 static bool handleSection(const QCString &s) 06350 { 06351 setOutput(OutputDoc); 06352 addOutput("@"+s+" "); 06353 BEGIN(SectionLabel); 06354 return FALSE; 06355 } 06356 06357 static bool handleSubpage(const QCString &s) 06358 { 06359 if (current->section!=Entry::EMPTY_SEC && 06360 current->section!=Entry::PAGEDOC_SEC && 06361 current->section!=Entry::MAINPAGEDOC_SEC 06362 ) 06363 { 06364 warn(yyFileName,yyLineNr, 06365 "Warning: found \\subpage command in a comment block that is not marked as a page!"); 06366 } 06367 addOutput("@"+s+" "); 06368 BEGIN(SubpageLabel); 06369 return FALSE; 06370 } 06371 06372 static bool handleAnchor(const QCString &s) 06373 { 06374 addOutput("@"+s+" "); 06375 BEGIN(AnchorLabel); 06376 return FALSE; 06377 } 06378 06379 static bool handleFormatBlock(const QCString &s) 06380 { 06381 addOutput("@"+s+" "); 06382 //printf("handleFormatBlock(%s)\n",s.data()); 06383 blockName=s; 06384 g_commentCount=0; 06385 BEGIN(FormatBlock); 06386 return FALSE; 06387 } 06388 06389 static bool handleAddIndex(const QCString &) 06390 { 06391 addOutput("@addindex "); 06392 BEGIN(LineParam); 06393 return FALSE; 06394 } 06395 06396 static bool handleIf(const QCString &) 06397 { 06398 enabledSectionFound=FALSE; 06399 guardType = Guard_If; 06400 BEGIN(GuardParam); 06401 return FALSE; 06402 } 06403 06404 static bool handleIfNot(const QCString &) 06405 { 06406 enabledSectionFound=FALSE; 06407 guardType = Guard_IfNot; 06408 BEGIN(GuardParam); 06409 return FALSE; 06410 } 06411 06412 static bool handleElseIf(const QCString &) 06413 { 06414 if (guards.isEmpty()) 06415 { 06416 warn(yyFileName,yyLineNr, 06417 "Warning: found \\else without matching start command"); 06418 } 06419 else 06420 { 06421 guardType = enabledSectionFound ? Guard_Skip : Guard_If; 06422 BEGIN(GuardParam); 06423 } 06424 return FALSE; 06425 } 06426 06427 static bool handleElse(const QCString &) 06428 { 06429 if (guards.isEmpty()) 06430 { 06431 warn(yyFileName,yyLineNr, 06432 "Warning: found \\else without matching start command"); 06433 } 06434 else 06435 { 06436 BEGIN( SkipGuardedSection ); 06437 } 06438 return FALSE; 06439 } 06440 06441 static bool handleEndIf(const QCString &) 06442 { 06443 if (guards.isEmpty()) 06444 { 06445 warn(yyFileName,yyLineNr, 06446 "Warning: found \\endif without matching start command"); 06447 } 06448 else 06449 { 06450 delete guards.pop(); 06451 } 06452 enabledSectionFound=FALSE; 06453 return FALSE; 06454 } 06455 06456 static bool handleIngroup(const QCString &) 06457 { 06458 inGroupParamFound=FALSE; 06459 BEGIN( InGroupParam ); 06460 return FALSE; 06461 } 06462 06463 static bool handleNoSubGrouping(const QCString &) 06464 { 06465 current->subGrouping = FALSE; 06466 return FALSE; 06467 } 06468 06469 static bool handleShowInitializer(const QCString &) 06470 { 06471 current->initLines = 100000; // ON 06472 return FALSE; 06473 } 06474 06475 static bool handleHideInitializer(const QCString &) 06476 { 06477 current->initLines = 0; // OFF 06478 return FALSE; 06479 } 06480 06481 static bool handleCallgraph(const QCString &) 06482 { 06483 current->callGraph = TRUE; // ON 06484 return FALSE; 06485 } 06486 06487 static bool handleCallergraph(const QCString &) 06488 { 06489 current->callerGraph = TRUE; // ON 06490 return FALSE; 06491 } 06492 06493 static bool handleInternal(const QCString &) 06494 { 06495 if (!Config_getBool("INTERNAL_DOCS")) 06496 { 06497 // make sure some whitespace before a \internal command 06498 // is not treated as "documentation" 06499 if (current->doc.stripWhiteSpace().isEmpty()) 06500 { 06501 current->doc.resize(0); 06502 } 06503 BEGIN( SkipInternal ); 06504 } 06505 else 06506 { 06507 addOutput("\\internal "); 06508 } 06509 return FALSE; 06510 } 06511 06512 static bool handleLineBr(const QCString &) 06513 { 06514 addOutput('\n'); 06515 return FALSE; 06516 } 06517 06518 static bool handleStatic(const QCString &) 06519 { 06520 endBrief(); 06521 current->stat = TRUE; 06522 return FALSE; 06523 } 06524 06525 static bool handlePure(const QCString &) 06526 { 06527 endBrief(); 06528 current->virt = Pure; 06529 return FALSE; 06530 } 06531 06532 static bool handlePrivate(const QCString &) 06533 { 06534 endBrief(); 06535 current->protection = Private; 06536 return FALSE; 06537 } 06538 06539 static bool handlePrivateSection(const QCString &) 06540 { 06541 endBrief(); 06542 current->protection = protection = Private; 06543 return FALSE; 06544 } 06545 06546 static bool handleProtected(const QCString &) 06547 { 06548 endBrief(); 06549 current->protection = Protected; 06550 return FALSE; 06551 } 06552 06553 static bool handleProtectedSection(const QCString &) 06554 { 06555 endBrief(); 06556 current->protection = protection = Protected ; 06557 return FALSE; 06558 } 06559 06560 static bool handlePublic(const QCString &) 06561 { 06562 endBrief(); 06563 current->protection = Public; 06564 return FALSE; 06565 } 06566 06567 static bool handlePublicSection(const QCString &) 06568 { 06569 endBrief(); 06570 current->protection = protection = Public; 06571 return FALSE; 06572 } 06573 06574 static bool handleInherit(const QCString &) 06575 { 06576 endBrief(); 06577 BEGIN(InheritParam); 06578 return FALSE; 06579 } 06580 06581 //---------------------------------------------------------------------------- 06582 06583 static void checkFormula() 06584 { 06585 if (YY_START==ReadFormulaShort || YY_START==ReadFormulaLong) 06586 { 06587 warn(yyFileName,yyLineNr,"Warning: End of comment block while inside formula."); 06588 } 06589 } 06590 06591 //---------------------------------------------------------------------------- 06592 06593 bool parseCommentBlock(/* in */ ParserInterface *parser, 06594 /* in */ Entry *curEntry, 06595 /* in */ const QCString &comment, 06596 /* in */ const QCString &fileName, 06597 /* in */ int lineNr, 06598 /* in */ bool isBrief, 06599 /* in */ bool isAutoBriefOn, 06600 /* in */ bool isInbody, 06601 /* in,out */ Protection &prot, 06602 /* in,out */ int &position, 06603 /* out */ bool &newEntryNeeded 06604 ) 06605 { 06606 //printf("parseCommentBlock() isBrief=%d isAutoBriefOn=%d lineNr=%d\n", 06607 // isBrief,isAutoBriefOn,lineNr); 06608 06609 initParser(); 06610 guards.setAutoDelete(TRUE); 06611 guards.clear(); 06612 langParser = parser; 06613 current = curEntry; 06614 if (comment.isEmpty()) return FALSE; // avoid empty strings 06615 inputString = comment; 06616 inputString.append(" "); 06617 inputPosition = position; 06618 yyLineNr = lineNr; 06619 yyFileName = fileName; 06620 protection = prot; 06621 needNewEntry = FALSE; 06622 xrefKind = XRef_None; 06623 xrefAppendFlag = FALSE; 06624 insidePre = FALSE; 06625 parseMore = FALSE; 06626 inBody = isInbody; 06627 outputXRef.resize(0); 06628 setOutput( isBrief || isAutoBriefOn ? OutputBrief : OutputDoc ); 06629 briefEndsAtDot = isAutoBriefOn; 06630 06631 if (!current->inbodyDocs.isEmpty() && isInbody) // separate in body fragments 06632 { 06633 current->inbodyDocs+="\n\n"; 06634 } 06635 06636 Debug::print(Debug::CommentScan,0,"-----------\nCommentScanner: %s:%d\n" 06637 "input=[%s]\n",fileName.data(),lineNr,comment.data() 06638 ); 06639 06640 commentScanYYrestart( commentScanYYin ); 06641 BEGIN( Comment ); 06642 commentScanYYlex(); 06643 setOutput( OutputDoc ); 06644 06645 if (!guards.isEmpty()) 06646 { 06647 warn(yyFileName,yyLineNr,"Documentation block ended in the middle of a conditional section!"); 06648 } 06649 06650 current->doc=stripLeadingAndTrailingEmptyLines(current->doc); 06651 06652 if (current->section==Entry::FILEDOC_SEC && current->doc.isEmpty()) 06653 { 06654 // to allow a comment block with just a @file command. 06655 current->doc="\n\n"; 06656 } 06657 06658 if (current->section==Entry::MEMBERGRP_SEC && 06659 g_memberGroupId==DOX_NOGROUP) // @name section but no group started yet 06660 { 06661 openGroup(current,yyFileName,yyLineNr); 06662 } 06663 06664 Debug::print(Debug::CommentScan,0, 06665 "brief=[%s]\ndocs=[%s]\n===========\n", 06666 current->brief.data(),current->doc.data() 06667 ); 06668 06669 checkFormula(); 06670 prot = protection; 06671 06672 groupAddDocs(curEntry,fileName); 06673 06674 newEntryNeeded = needNewEntry; 06675 06676 if (parseMore) position=inputPosition; else position=0; 06677 06678 return parseMore; 06679 } 06680 06681 //--------------------------------------------------------------------------- 06682 06683 void groupEnterFile(const char *,int) 06684 { 06685 g_autoGroupStack.setAutoDelete(TRUE); 06686 g_autoGroupStack.clear(); 06687 g_memberGroupId = DOX_NOGROUP; 06688 g_memberGroupDocs.resize(0); 06689 g_memberGroupRelates.resize(0); 06690 } 06691 06692 void groupLeaveFile(const char *fileName,int line) 06693 { 06694 //if (g_memberGroupId!=DOX_NOGROUP) 06695 //{ 06696 // warn(fileName,line,"Warning: end of file while inside a member group\n"); 06697 //} 06698 g_memberGroupId=DOX_NOGROUP; 06699 g_memberGroupRelates.resize(0); 06700 g_memberGroupDocs.resize(0); 06701 if (!g_autoGroupStack.isEmpty()) 06702 { 06703 warn(fileName,line,"Warning: end of file while inside a group\n"); 06704 } 06705 } 06706 06707 void groupEnterCompound(const char *fileName,int line,const char *name) 06708 { 06709 if (g_memberGroupId!=DOX_NOGROUP) 06710 { 06711 warn(fileName,line,"Warning: try to put compound %s inside a member group\n",name); 06712 } 06713 g_memberGroupId=DOX_NOGROUP; 06714 g_memberGroupRelates.resize(0); 06715 g_memberGroupDocs.resize(0); 06716 } 06717 06718 void groupLeaveCompound(const char *,int,const char *) 06719 { 06720 //if (g_memberGroupId!=DOX_NOGROUP) 06721 //{ 06722 // warn(fileName,line,"Warning: end of compound %s while inside a member group\n",name); 06723 //} 06724 g_memberGroupId=DOX_NOGROUP; 06725 g_memberGroupRelates.resize(0); 06726 g_memberGroupDocs.resize(0); 06727 } 06728 06729 06730 void openGroup(Entry *e,const char *,int) 06731 { 06732 if (e->section==Entry::GROUPDOC_SEC) // auto group 06733 { 06734 g_autoGroupStack.push(new Grouping(e->name,e->groupingPri())); 06735 //printf("==> openGroup(name=%s,sec=%x) g_autoGroupStack=%d\n", 06736 // e->name.data(),e->section,g_autoGroupStack.count()); 06737 } 06738 else // start of a member group 06739 { 06740 if (g_memberGroupId==DOX_NOGROUP) // no group started yet 06741 { 06742 static int curGroupId=0; 06743 g_memberGroupId = curGroupId++; 06744 //printf("new group id=%d header=%s\n",g_memberGroupId,g_memberGroupHeader.data()); 06745 06746 MemberGroupInfo *info = new MemberGroupInfo; 06747 info->header = g_memberGroupHeader.stripWhiteSpace(); 06748 Doxygen::memGrpInfoDict.insert(g_memberGroupId,info); 06749 06750 g_memberGroupRelates = e->relates; 06751 e->mGrpId = g_memberGroupId; 06752 } 06753 } 06754 } 06755 06756 void closeGroup(Entry *e,const char *fileName,int) 06757 { 06758 //printf("==> closeGroup(name=%s,sec=%x) g_autoGroupStack=%d\n", 06759 // e->name.data(),e->section,g_autoGroupStack.count()); 06760 if (g_memberGroupId!=DOX_NOGROUP) // end of member group 06761 { 06762 MemberGroupInfo *info=Doxygen::memGrpInfoDict.find(g_memberGroupId); 06763 if (info) // know group 06764 { 06765 info->doc = g_memberGroupDocs; 06766 info->docFile = fileName; 06767 } 06768 g_memberGroupId=DOX_NOGROUP; 06769 g_memberGroupRelates.resize(0); 06770 g_memberGroupDocs.resize(0); 06771 e->mGrpId=DOX_NOGROUP; 06772 //printf("new group id=%d\n",g_memberGroupId); 06773 } 06774 else if (!g_autoGroupStack.isEmpty()) // end of auto group 06775 { 06776 Grouping *grp = g_autoGroupStack.pop(); 06777 e->groups->removeLast(); 06778 //printf("Removing %s\n",grp->groupname.data()); 06779 delete grp; 06780 initGroupInfo(e); 06781 } 06782 } 06783 06784 void initGroupInfo(Entry *e) 06785 { 06786 //printf("==> initGroup(id=%d,related=%s)\n",g_memberGroupId, 06787 // g_memberGroupRelates.data()); 06788 e->mGrpId = g_memberGroupId; 06789 e->relates = g_memberGroupRelates; 06790 if (!g_autoGroupStack.isEmpty()) 06791 { 06792 //printf("Appending group %s to %s: count=%d entry=%p\n", 06793 // g_autoGroupStack.top()->groupname.data(), 06794 // e->name.data(),e->groups->count(),e); 06795 e->groups->append(new Grouping(*g_autoGroupStack.top())); 06796 } 06797 } 06798 06799 static void groupAddDocs(Entry *e,const char *fileName) 06800 { 06801 if (e->section==Entry::MEMBERGRP_SEC) 06802 { 06803 g_memberGroupDocs=e->brief.stripWhiteSpace(); 06804 e->doc = stripLeadingAndTrailingEmptyLines(e->doc); 06805 if (!g_memberGroupDocs.isEmpty() && !e->doc.isEmpty()) 06806 { 06807 g_memberGroupDocs+="\n\n"; 06808 } 06809 g_memberGroupDocs+=e->doc; 06810 MemberGroupInfo *info=Doxygen::memGrpInfoDict.find(g_memberGroupId); 06811 if (info) 06812 { 06813 info->doc = g_memberGroupDocs; 06814 info->docFile = fileName; 06815 } 06816 e->doc.resize(0); 06817 e->brief.resize(0); 06818 } 06819 } 06820 06821 06822 #if !defined(YY_FLEX_SUBMINOR_VERSION) 06823 //---------------------------------------------------------------------------- 06824 extern "C" { // some bogus code to keep the compiler happy 06825 void commentScanYYdummy() { yy_flex_realloc(0,0); } 06826 } 06827 #endif 06828 06829