commentscan.cpp

Go to the documentation of this file.
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 = &current->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 = &current->brief;
03041       }
03042       else
03043       {
03044         pOutputString = &current->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 = &current->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 



Generated on Mon Mar 31 10:58:33 2008 by  doxygen 1.5.1