pycode.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 pycodeYYrestart(pycodeYYin  )
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 262144
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 pycodeYYleng;
00155 
00156 extern FILE *pycodeYYin, *pycodeYYout;
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 pycodeYYtext. */ \
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 pycodeYYtext 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 pycodeYYrestart()), so that the user can continue scanning by
00248          * just pointing pycodeYYin 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 pycodeYYtext is formed. */
00276 static char yy_hold_char;
00277 static int yy_n_chars;          /* number of characters read into yy_ch_buf */
00278 int pycodeYYleng;
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 pycodeYYwrap()'s to do buffer switches
00286  * instead of setting up a fresh pycodeYYin.  A bit of a hack ...
00287  */
00288 static int yy_did_buffer_switch_on_eof;
00289 
00290 void pycodeYYrestart (FILE *input_file  );
00291 void pycodeYY_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
00292 YY_BUFFER_STATE pycodeYY_create_buffer (FILE *file,int size  );
00293 void pycodeYY_delete_buffer (YY_BUFFER_STATE b  );
00294 void pycodeYY_flush_buffer (YY_BUFFER_STATE b  );
00295 void pycodeYYpush_buffer_state (YY_BUFFER_STATE new_buffer  );
00296 void pycodeYYpop_buffer_state (void );
00297 
00298 static void pycodeYYensure_buffer_stack (void );
00299 static void pycodeYY_load_buffer_state (void );
00300 static void pycodeYY_init_buffer (YY_BUFFER_STATE b,FILE *file  );
00301 
00302 #define YY_FLUSH_BUFFER pycodeYY_flush_buffer(YY_CURRENT_BUFFER )
00303 
00304 YY_BUFFER_STATE pycodeYY_scan_buffer (char *base,yy_size_t size  );
00305 YY_BUFFER_STATE pycodeYY_scan_string (yyconst char *yy_str  );
00306 YY_BUFFER_STATE pycodeYY_scan_bytes (yyconst char *bytes,int len  );
00307 
00308 void *pycodeYYalloc (yy_size_t  );
00309 void *pycodeYYrealloc (void *,yy_size_t  );
00310 void pycodeYYfree (void *  );
00311 
00312 #define yy_new_buffer pycodeYY_create_buffer
00313 
00314 #define yy_set_interactive(is_interactive) \
00315         { \
00316         if ( ! YY_CURRENT_BUFFER ){ \
00317         pycodeYYensure_buffer_stack (); \
00318                 YY_CURRENT_BUFFER_LVALUE =    \
00319             pycodeYY_create_buffer(pycodeYYin,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         pycodeYYensure_buffer_stack (); \
00328                 YY_CURRENT_BUFFER_LVALUE =    \
00329             pycodeYY_create_buffer(pycodeYYin,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 pycodeYYwrap(n) 1
00339 #define YY_SKIP_YYWRAP
00340 
00341 typedef unsigned char YY_CHAR;
00342 
00343 FILE *pycodeYYin = (FILE *) 0, *pycodeYYout = (FILE *) 0;
00344 
00345 typedef int yy_state_type;
00346 
00347 extern int pycodeYYlineno;
00348 
00349 int pycodeYYlineno = 1;
00350 
00351 extern char *pycodeYYtext;
00352 #define yytext_ptr pycodeYYtext
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 pycodeYYtext.
00361  */
00362 #define YY_DO_BEFORE_ACTION \
00363         (yytext_ptr) = yy_bp; \
00364         pycodeYYleng = (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 56
00370 #define YY_END_OF_BUFFER 57
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[909] =
00379     {   0,
00380     16412,16412,   57,   55,   56,   54,   56,   52,   55,   56,
00381        53,   55,   56,   51,   55,   56,   55,   56,   55,   56,
00382        55,   56,   31,   54,   56,   17,   30,   55,   56,   17,
00383        30,   55,   56,   17,   30,   55,   56,   17,   30,   55,
00384        56,   17,   30,   55,   56,   17,   30,   55,   56,   17,
00385        30,   55,   56,   17,   30,   55,   56,   17,   30,   55,
00386        56,   17,   30,   55,   56,   17,   30,   55,   56,   17,
00387        30,   55,   56,   17,   30,   55,   56,   17,   30,   55,
00388        56,   17,   30,   55,   56,   17,   30,   55,   56,   17,
00389        30,   55,   56,   17,   30,   55,   56,   17,   30,   55,
00390 
00391        56,   17,   30,   55,   56,   17,   30,   55,   56,   17,
00392        30,   55,   56,   17,   30,   55,   56,   17,   30,   55,
00393        56,   55,   56,   10,   55,   56,    9,   55,   56,    9,
00394        55,   56,    9,   55,   56,    9,   55,   56,   12,   55,
00395        56,   11,   55,   56,   12,   52,   55,   56,   12,   53,
00396        55,   56,   12,   51,   55,   56,   13,   55,   56,   11,
00397        12,   55,   56,   14,   55,   56,   12,   55,   56,   12,
00398        55,   56,   12,   55,   56,   12,   55,   56,    5,   55,
00399        56,    5,   55,   56,    5,   55,   56,    5,   55,   56,
00400         6,   55,   56,    6,   55,   56,    8,   55,   56,    7,
00401 
00402        55,   56,    7,   55,   56,    7,   55,   56,    7,   55,
00403        56,   29,   54,   56,   17,   55,   56,   17,   55,   56,
00404        17,   55,   56,   17,   55,   56,   17,   55,   56,   17,
00405        55,   56,   17,   55,   56,   17,   55,   56,   17,   55,
00406        56,   17,   55,   56,   17,   55,   56,   17,   55,   56,
00407        17,   55,   56,   17,   55,   56,   17,   55,   56,   17,
00408        55,   56,   17,   55,   56,   17,   55,   56,   17,   55,
00409        56,   17,   55,   56,   17,   55,   56,   17,   55,   56,
00410        17,   55,   56,   17,   55,   56,   25,   55,   56,   24,
00411        54,   56,   18,   55,   56,   23,   54,   56,   22,   53,
00412 
00413        55,   56,   21,   55,   56,   21,   55,   56,   21,   55,
00414        56,   21,   55,   56,   21,   55,   56,   21,   55,   56,
00415        21,   55,   56,   21,   55,   56,   21,   55,   56,   21,
00416        55,   56,   21,   55,   56,   21,   55,   56,   21,   55,
00417        56,   21,   55,   56,   21,   55,   56,   21,   55,   56,
00418        21,   55,   56,   21,   55,   56,   21,   55,   56,   21,
00419        55,   56,   21,   55,   56,   21,   55,   56,   55,   56,
00420     16410,   27,   54,   56, 8220,   55,   56, 8220,   53,   55,
00421        56, 8220,   55,   56, 8220,   55,   56, 8220,   55,   56,
00422        36,   37,   55,   56,   37,   52,   55,   56,   36,   37,
00423 
00424        53,   55,   56,   35,   37,   51,   55,   56,   36,   37,
00425        55,   56,   36,   37,   55,   56,   37,   55,   56,   36,
00426        37,   55,   56,   42,   43,   55,   56,   41,   43,   52,
00427        55,   56,   42,   43,   53,   55,   56,   43,   51,   55,
00428        56,   42,   43,   55,   56,   42,   43,   55,   56,   43,
00429        55,   56,   42,   43,   55,   56,   46,   48,   55,   56,
00430        46,   47,   54,   56,   46,   48,   52,   55,   56,   46,
00431        48,   53,   55,   56,   46,   48,   51,   55,   56,   46,
00432        48,   55,   56,   46,   48,   55,   56,   48,   55,   56,
00433        46,   48,   55,   56,   53,   52,   51,   17,   30,   17,
00434 
00435        30,   17,   30,   17,   30,   17,   30,   17,   30,   15,
00436        17,   30,   17,   30,   17,   30,   17,   30,   17,   30,
00437        17,   30,   17,   30,   17,   30,   17,   30,   17,   30,
00438        17,   30,   16,   17,   30,   17,   30,   16,   17,   30,
00439        17,   30,   17,   30,   17,   30,   17,   30,   17,   30,
00440        17,   30,   17,   30,   17,   30,   17,   30,   17,   30,
00441        10,    9,    9,   12,   11,   12,   12,   53,   12,   12,
00442        12,   52,   12,   51,   12,    5,    5,    6,    7,    7,
00443        17,   17,   17,   17,   17,   17,   15,   17,   17,   17,
00444        17,   17,   17,   17,   17,   17,   17,   17,   16,   17,
00445 
00446        17,   16,   17,   17,   17,   17,   17,   17,   17,   17,
00447        17,   17,   17,   25,   24,   18,   22,   53,   21,   21,
00448        21,   21,   21,   19,   21,   21,   21,   21,   21,   21,
00449        21,   21,   21,   21,   21,   20,   21,   21,   20,   21,
00450        21,   21,   21,   21,   21,   21,   21,   21,   21,16410,
00451        27, 8218,   36,   36,   53,   52,   36,   33,   33,   32,
00452        42,   42,   53,   51,   42,   39,   39,   38,   46,   46,
00453        46,   53,   53,   46,   46,   50,   49,   17,   30,   17,
00454        30,   17,   30,   17,   30,   17,   30,   17,   30,   17,
00455        30,   15,   17,   30,   17,   30,   17,   30,   17,   30,
00456 
00457        17,   30,   17,   30,   17,   30,   17,   30,   17,   30,
00458        17,   30,   17,   30,   17,   30,   17,   30,   17,   30,
00459        17,   30,   17,   30,   12,   50,   12,   49,   17,   17,
00460        17,   17,   17,   17,   17,   15,   17,   17,   17,   17,
00461        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
00462        17,   17,   21,   21,   21,   21,   21,   21,   19,   21,
00463        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
00464        21,   21,   21,   21,   34,   50,   40,   49,   44,   50,
00465        45,   49,   17,   30,    3,   17,   30,   15,   17,   30,
00466        17,   30,   17,   30,   17,   30,   17,   30,    1,   17,
00467 
00468        30,   17,   30,   17,   30,   17,   30,   17,   30,   17,
00469        30,   17,   30,   17,   30,   17,   30,   17,   30,   17,
00470        30,   17,    3,   17,   15,   17,   17,   17,   17,   17,
00471        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
00472        17,   21,   21,   21,   21,   21,   21,   21,   21,   21,
00473        21,   21,   21,   21,   21,   21,   17,   30,   15,   17,
00474        30,   17,   30,   17,   30,   17,   30,   17,   30,   17,
00475        30,   17,   30,   17,   30,   17,   15,   17,   17,   17,
00476        17,   17,   17,   17,   17,   21,   21,   21,   21,   21,
00477        21,   21,   21,    2,   17,   30,   17,   30,    4,   17,
00478 
00479        17,   21,   21,   17,   30,    4,   17,   21
00480     } ;
00481 
00482 static yyconst flex_int16_t yy_accept[490] =
00483     {   0,
00484         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00485         1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
00486         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
00487         3,    4,    6,    8,   11,   14,   17,   19,   21,   23,
00488        26,   30,   34,   38,   42,   46,   50,   54,   58,   62,
00489        66,   70,   74,   78,   82,   86,   90,   94,   98,  102,
00490       106,  110,  114,  118,  122,  124,  127,  130,  133,  136,
00491       139,  142,  145,  149,  153,  157,  160,  164,  167,  170,
00492       173,  176,  179,  182,  185,  188,  191,  194,  197,  200,
00493       203,  206,  209,  212,  215,  218,  221,  224,  227,  230,
00494 
00495       233,  236,  239,  242,  245,  248,  251,  254,  257,  260,
00496       263,  266,  269,  272,  275,  278,  281,  284,  287,  290,
00497       293,  296,  299,  303,  306,  309,  312,  315,  318,  321,
00498       324,  327,  330,  333,  336,  339,  342,  345,  348,  351,
00499       354,  357,  360,  363,  366,  369,  372,  375,  378,  382,
00500       385,  388,  391,  395,  399,  404,  409,  413,  417,  420,
00501       424,  428,  433,  438,  442,  446,  450,  453,  457,  461,
00502       465,  470,  475,  480,  484,  488,  491,  495,  495,  496,
00503       496,  497,  498,  498,  500,  502,  504,  506,  508,  510,
00504       513,  515,  517,  519,  521,  523,  525,  527,  529,  531,
00505 
00506       533,  536,  538,  541,  543,  545,  547,  549,  551,  553,
00507       555,  557,  559,  561,  561,  562,  563,  564,  565,  566,
00508       567,  569,  570,  571,  573,  575,  576,  577,  578,  579,
00509       580,  581,  582,  583,  584,  585,  586,  587,  589,  590,
00510       591,  592,  593,  594,  595,  596,  597,  598,  599,  601,
00511       602,  604,  605,  606,  607,  608,  609,  610,  611,  612,
00512       613,  614,  615,  616,  617,  619,  620,  621,  622,  623,
00513       624,  626,  627,  628,  629,  630,  631,  632,  633,  634,
00514       635,  636,  638,  639,  641,  642,  643,  644,  645,  646,
00515       647,  648,  649,  650,  651,  652,  653,  654,  654,  656,
00516 
00517       657,  658,  659,  660,  661,  662,  664,  664,  665,  666,
00518       667,  668,  669,  670,  670,  671,  673,  674,  675,  676,
00519       677,  678,  680,  682,  684,  686,  688,  690,  692,  695,
00520       697,  699,  701,  703,  705,  707,  709,  711,  713,  715,
00521       717,  719,  721,  723,  725,  727,  729,  730,  731,  732,
00522       733,  734,  735,  736,  738,  739,  740,  741,  742,  743,
00523       744,  745,  746,  747,  748,  749,  750,  751,  752,  753,
00524       754,  755,  756,  757,  758,  759,  761,  762,  763,  764,
00525       765,  766,  767,  768,  769,  770,  771,  772,  773,  774,
00526       775,  777,  777,  779,  779,  781,  783,  785,  788,  791,
00527 
00528       793,  795,  797,  799,  800,  802,  804,  806,  808,  810,
00529       812,  814,  816,  818,  820,  822,  823,  825,  827,  828,
00530       829,  830,  831,  832,  833,  834,  835,  836,  837,  838,
00531       839,  840,  841,  842,  843,  844,  845,  846,  847,  848,
00532       849,  850,  851,  852,  853,  854,  855,  856,  857,  859,
00533       862,  864,  866,  868,  870,  872,  874,  876,  876,  877,
00534       879,  880,  881,  882,  883,  884,  885,  886,  887,  888,
00535       889,  890,  891,  892,  893,  894,  895,  897,  899,  900,
00536       901,  902,  903,  904,  906,  907,  908,  909,  909
00537     } ;
00538 
00539 static yyconst flex_int32_t yy_ec[256] =
00540     {   0,
00541         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
00542         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00543         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00544         1,    2,    4,    5,    6,    1,    4,    4,    7,    8,
00545         9,    4,    4,   10,    4,   11,    4,   12,   12,   12,
00546        12,   12,   12,   12,   12,   12,   12,   13,    4,    4,
00547         4,    4,    1,    1,   14,   14,   14,   14,   14,   15,
00548        14,   14,   14,   14,   14,   14,   14,   16,   14,   14,
00549        14,   17,   14,   18,   19,   14,   14,   14,   14,   14,
00550         4,   20,    4,    1,   21,    4,   22,   23,   24,   25,
00551 
00552        26,   27,   28,   29,   30,   14,   31,   32,   33,   34,
00553        35,   36,   14,   37,   38,   39,   40,   14,   41,   42,
00554        43,   14,    4,    4,    4,    4,    1,    1,    1,    1,
00555         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00556         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00557         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00558         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00559         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00560         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00561         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00562 
00563         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00564         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00565         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00566         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00567         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00568         1,    1,    1,    1,    1
00569     } ;
00570 
00571 static yyconst flex_int32_t yy_meta[44] =
00572     {   0,
00573         1,    2,    3,    4,    5,    4,    5,    2,    2,    4,
00574         4,    6,    2,    7,    7,    7,    7,    7,    7,    8,
00575         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
00576         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
00577         7,    7,    7
00578     } ;
00579 
00580 static yyconst flex_int16_t yy_base[516] =
00581     {   0,
00582         0,   38,   78,    0,  121,    0,  164,    0,  207,    0,
00583       250,    0,  293,    0,  335,    0,  375,    0,  418,  458,
00584         6,    8,   10,   12,  496,  534,  572,  610,  648,  686,
00585      1132, 1133, 1133, 1126,    0, 1123,   11,   15,   16, 1133,
00586         0, 1107, 1093,   19, 1090,   22,    0, 1089,   14, 1099,
00587        16,   26, 1092,   33, 1101, 1087, 1084,   13,  338, 1094,
00588      1082,  425, 1089, 1087,   23, 1133,    0,   23,  429,  433,
00589         0, 1114, 1110,   60, 1107, 1133,    0, 1133,  726,  746,
00590        37,  322,    0,   65,  434,  467, 1111, 1133, 1133,    0,
00591       339,  471,  474, 1133,    0, 1090, 1076,  342, 1073,  475,
00592 
00593        13, 1072,  316, 1082,  321,  320, 1075,  335, 1084, 1070,
00594      1067,  334,  421, 1077, 1065,  480, 1072, 1070,   62, 1133,
00595      1097, 1133,    0,    0, 1076,  360, 1060,  489,  332, 1059,
00596       326, 1069,  412,  392, 1062,  487, 1071, 1057, 1054,  411,
00597       502, 1053,  525, 1060, 1058,   74, 1133, 1133,    0,  462,
00598       539,  543,    0, 1082,  538, 1079,  522,  550,  450,  556,
00599         0, 1080,  561, 1077,  542,  565,  454,  581, 1063, 1062,
00600      1076,  594, 1073,  599,  603,  600,  619, 1074,    0, 1071,
00601      1072, 1069,  578,    0, 1043, 1040, 1033,  589, 1047, 1033,
00602      1044, 1047, 1034, 1040,  480, 1042, 1031, 1027, 1028, 1027,
00603 
00604         0, 1025,    0, 1027, 1020, 1020, 1027, 1026, 1016, 1022,
00605      1010, 1022, 1025,   34, 1133,    0,  626,    0, 1048, 1044,
00606       633, 1041,  627, 1042, 1039,    0,    0,  638, 1043,    0,
00607       652,    0, 1012, 1009, 1002,  653, 1016, 1002, 1013, 1016,
00608      1003, 1009,  493, 1011, 1000,  996,  997,  996,    0,  994,
00609         0,  996,  989,  989,  996,  995,  985,  991,  979,  991,
00610       994,  487, 1133, 1017,    0,    0,  986,  977,  656,  991,
00611       977,  988,  991,  978,  984,  614,  986,  975,  971,  972,
00612       971,    0,  969,    0,  971,  964,  964,  971,  970,  960,
00613       955,  967,  970,  532, 1133, 1133,    0,  990,  657,  989,
00614 
00615       664, 1133,  562, 1133,    0,  667,  986,  985,  668, 1133,
00616       619, 1133,  971,  673,  985,  676,  986,  981,  677, 1133,
00617      1133,  949,  960,  959,  958,  961,  944,  942,  978,  952,
00618       952,  951,  954,  942,  951,  938,  949,  933,  936,  931,
00619       928,  940,  934,  933,    0,    0,  926,  937,  936,  935,
00620       938,  921,  919,  955,  929,  929,  928,  931,  919,  928,
00621       915,  926,  910,  913,  908,  905,  917,  911,  910,  903,
00622       914,  913,  916,  899,  897,    0,  908,  908,  907,  910,
00623       898,  907,  881,  875,  855,  857,  837,  830,  836,  830,
00624      1133,  635, 1133,  646, 1133, 1133,  825,    0,    0,  800,
00625 
00626       805,  791,  791,  818,  773,  733,  742,  726,  737,  722,
00627       734,  722,  747,  729,  729,  723,    0,    0,  711,  714,
00628       706,  713,  706,  709,  718,  702,  713,  696,  708,  692,
00629       717,  699,  699,  696,  684,  689,  681,  688,  681,  684,
00630       693,  677,  688,  673,  685,  673,  683,  683,  668,  702,
00631       668,  662,  668,  667,  659,  673,  660,    0,  651,  684,
00632       636,  627,  596,  593,  572,  578,  561,  551,  550,  530,
00633       527,  520,  499,  500,  485,  503,  460,  450,    0,  446,
00634       440,  433,  425,  423,    0,  419,  405, 1133,  766,  774,
00635       782,  790,  798,  806,  809,  811,  818,  826,  834,  837,
00636 
00637       839,  841,  848,  851,  857,  865,  872,  880,  888,  895,
00638       903,  911,  919,  367,  922
00639     } ;
00640 
00641 static yyconst flex_int16_t yy_def[516] =
00642     {   0,
00643       489,  489,  488,    3,  488,    5,  488,    7,  488,    9,
00644       488,   11,  488,   13,  489,   15,  488,   17,  490,  490,
00645        15,   15,   15,   15,  491,  491,  492,  492,  493,  493,
00646       488,  488,  488,  488,  494,  488,  488,  488,  488,  488,
00647       495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
00648       495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
00649       495,  495,  495,  495,  488,  488,  496,  496,  496,  496,
00650       497,  488,  497,  498,  497,  488,  497,  488,  499,  499,
00651        80,   80,  500,  500,  500,  500,  488,  488,  488,  501,
00652       501,  501,  501,  488,  502,  502,  502,  502,  502,  502,
00653 
00654       502,  502,  502,  502,  502,  502,  502,  502,  502,  502,
00655       502,  502,  502,  502,  502,  502,  502,  502,  488,  488,
00656       488,  488,  503,  504,  504,  504,  504,  504,  504,  504,
00657       504,  504,  504,  504,  504,  504,  504,  504,  504,  504,
00658       504,  504,  504,  504,  504,  505,  488,  488,  494,  488,
00659       488,  488,  506,  488,  507,  488,  506,  506,  508,  506,
00660       509,  488,  510,  488,  509,  509,  511,  509,  512,  512,
00661       488,  513,  488,  512,  512,  512,  512,  488,  494,  488,
00662       488,  488,  488,  495,  495,  495,  495,  495,  495,  495,
00663       495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
00664 
00665       495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
00666       495,  495,  495,  488,  488,  496,  496,  497,  488,  497,
00667       498,  497,   80,  497,  497,   80,  500,  500,  488,  501,
00668       501,  502,  502,  502,  502,  502,  502,  502,  502,  502,
00669       502,  502,  502,  502,  502,  502,  502,  502,  502,  502,
00670       502,  502,  502,  502,  502,  502,  502,  502,  502,  502,
00671       502,  488,  488,  488,  503,  504,  504,  504,  504,  504,
00672       504,  504,  504,  504,  504,  504,  504,  504,  504,  504,
00673       504,  504,  504,  504,  504,  504,  504,  504,  504,  504,
00674       504,  504,  504,  505,  488,  488,  506,  488,  507,  488,
00675 
00676       506,  488,  488,  488,  509,  510,  488,  488,  509,  488,
00677       488,  488,  512,  512,  488,  513,  513,  488,  512,  488,
00678       488,  495,  495,  495,  495,  495,  495,  495,  495,  495,
00679       495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
00680       495,  495,  495,  495,  497,  497,  502,  502,  502,  502,
00681       502,  502,  502,  502,  502,  502,  502,  502,  502,  502,
00682       502,  502,  502,  502,  502,  502,  502,  502,  502,  504,
00683       504,  504,  504,  504,  504,  504,  504,  504,  504,  504,
00684       504,  504,  504,  504,  504,  504,  504,  504,  504,  504,
00685       488,  488,  488,  488,  488,  488,  495,  495,  495,  495,
00686 
00687       495,  495,  495,  488,  495,  495,  495,  495,  495,  495,
00688       495,  495,  495,  495,  495,  502,  502,  502,  502,  502,
00689       502,  502,  502,  502,  502,  502,  502,  502,  502,  502,
00690       502,  502,  502,  504,  504,  504,  504,  504,  504,  504,
00691       504,  504,  504,  504,  504,  504,  504,  504,  495,  495,
00692       495,  495,  495,  495,  495,  495,  495,  514,  502,  502,
00693       502,  502,  502,  502,  502,  502,  502,  504,  504,  504,
00694       504,  504,  504,  504,  504,  488,  495,  495,  515,  502,
00695       502,  504,  504,  495,  515,  502,  504,    0,  488,  488,
00696       488,  488,  488,  488,  488,  488,  488,  488,  488,  488,
00697 
00698       488,  488,  488,  488,  488,  488,  488,  488,  488,  488,
00699       488,  488,  488,  488,  488
00700     } ;
00701 
00702 static yyconst flex_int16_t yy_nxt[1177] =
00703     {   0,
00704       488,  488,   33,  488,   34,   35,   36,   32,   33,   32,
00705        33,   32,   33,   32,   33,  181,   37,  182,   38,  181,
00706       181,  182,  182,  181,  214,  182,  181,  181,  182,  182,
00707       215,  183,  183,  189,  206,  214,   37,  190,  188,   39,
00708        33,  215,   34,   35,   36,  192,  237,  195,  193,  207,
00709       238,  183,  183,  226,   37,  197,   38,  196,  188,  201,
00710       198,  179,  199,  262,  263,  202,  203,  179,  179,  181,
00711       203,  182,  179,  226,   37,  294,  295,   39,   32,   32,
00712        40,   32,   34,   35,   36,   32,   32,   32,   32,   32,
00713        32,   41,   42,   43,   44,   45,   46,   32,   41,   47,
00714 
00715        48,   49,   50,   51,   52,   53,   41,   54,   41,   55,
00716        41,   56,   57,   58,   59,   60,   61,   62,   63,   41,
00717        64,   32,   65,   33,   32,   34,   35,   36,   66,   32,
00718        32,   32,   32,   32,   67,   67,   67,   68,   67,   69,
00719        32,   67,   67,   67,   67,   67,   67,   67,   67,   67,
00720        67,   67,   67,   67,   67,   67,   67,   68,   67,   67,
00721        70,   67,   67,   67,   71,   72,   33,   71,   73,   74,
00722        75,   32,   76,   77,   71,   71,   78,   79,   79,   79,
00723        80,   79,   81,   71,   79,   79,   79,   79,   79,   79,
00724        79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
00725 
00726        80,   79,   79,   82,   79,   79,   79,   32,   32,   33,
00727        32,   34,   35,   36,   32,   32,   32,   32,   32,   32,
00728        83,   83,   83,   84,   83,   85,   32,   83,   83,   83,
00729        83,   83,   83,   83,   83,   83,   83,   83,   83,   83,
00730        83,   83,   83,   84,   83,   83,   86,   83,   83,   83,
00731        32,   87,   33,   32,   34,   35,   36,   88,   88,   88,
00732        32,   32,   89,   90,   90,   90,   91,   90,   92,   32,
00733        90,   90,   90,   90,   90,   90,   90,   90,   90,   90,
00734        90,   90,   90,   90,   90,   90,   91,   90,   90,   93,
00735        90,   90,   90,   32,   32,   94,   32,   34,   35,   36,
00736 
00737        32,   32,   32,   32,   32,   32,   95,   96,   97,   98,
00738        99,  100,   32,   95,  101,  102,  103,  104,  105,  106,
00739       107,   95,  108,   95,  109,   95,  110,  111,  112,  113,
00740       114,  115,  116,  117,   95,  118,  119,  120,  226,   34,
00741        35,   36,  181,  181,  182,  182,  181,  240,  182,  245,
00742       241,   37,  243,   38,  246,  254,  247,  273,  226,  208,
00743       274,  249,  244,  209,  181,  270,  182,  250,  251,  271,
00744       255,   37,  251,  479,   39,   32,  121,  122,   32,   34,
00745       123,   36,   32,   32,   32,   32,   32,   32,  124,  125,
00746       124,  126,  127,  128,   32,  124,  129,  130,  131,  132,
00747 
00748       133,  134,  135,  124,  136,  124,  137,  124,  138,  139,
00749       140,  141,  124,  142,  143,  144,  124,  145,   32,  146,
00750       147,  278,   34,  149,   36,  181,  279,  182,  280,  181,
00751       284,  182,  287,  181,  150,  182,  151,  181,  181,  182,
00752       182,  188,  256,  276,  251,  217,  257,  288,  203,  217,
00753       228,  303,  304,  277,  150,  311,  312,  152,   32,  146,
00754       147,  188,   34,  149,   36,  217,  181,  284,  182,  217,
00755       228,  181,  487,  182,  150,  181,  151,  182,  181,  181,
00756       182,  182,  251,  228,  181,  486,  182,  231,  262,  263,
00757       231,  236,  203,  181,  150,  182,  236,  152,   33,  484,
00758 
00759       154,  155,  156,  228,  476,  269,  181,  231,  182,  330,
00760       231,  236,  157,  282,  158,  159,  236,  331,  284,  283,
00761       284,  376,  355,  289,  284,  269,  300,  290,  182,  181,
00762       356,  182,  157,  294,  295,  160,   33,  376,  154,  155,
00763       156,  269,  179,  181,  179,  182,  181,  181,  308,  182,
00764       157,  376,  158,  159,  300,  183,  182,  179,  483,  183,
00765       300,  269,  182,  392,  304,  179,  301,  179,  284,  181,
00766       157,  308,  301,  160,   33,  183,  162,  163,  164,  183,
00767       179,  309,  181,  482,  182,  181,  301,  308,  165,  376,
00768       166,  167,  301,  181,  251,  182,  313,  309,  179,  418,
00769 
00770       179,  309,  488,  181,  313,  182,  313,  181,  165,  182,
00771       418,  168,   33,  317,  162,  163,  164,  309,  314,  319,
00772       394,  312,  314,  181,  418,  182,  165,  481,  166,  167,
00773       181,  218,  182,  218,  179,  319,  392,  304,  314,  319,
00774       179,  179,  181,  377,  182,  179,  165,  394,  312,  168,
00775       170,  378,  171,  172,  173,  319,  181,  181,  182,  182,
00776       181,  179,  182,  179,  174,  251,  175,  176,  300,  480,
00777       182,  179,  181,  179,  308,  488,  179,  313,  313,  313,
00778       179,  181,  179,  182,  174,  476,  179,  177,  170,  418,
00779       171,  172,  173,  203,  399,  317,  314,  399,  399,  478,
00780 
00781       203,  477,  174,  476,  175,  176,  399,  284,  284,  475,
00782       284,  284,  474,  473,  472,  471,  470,  469,  376,  284,
00783       468,  376,  174,  251,  251,  177,  218,  458,  467,  218,
00784       218,  218,  218,  251,  251,  218,  218,  466,  465,  464,
00785       463,  462,  461,  460,  251,  218,  218,  459,  418,  218,
00786       224,  218,  225,  203,  203,  218,  218,  458,  457,  203,
00787       203,  456,  455,  454,  453,  218,   32,   32,   32,   32,
00788        32,   32,   32,   32,  148,  148,  148,  148,  148,  148,
00789       148,  148,  153,  153,  153,  153,  153,  153,  153,  153,
00790       161,  161,  161,  161,  161,  161,  161,  161,  169,  169,
00791 
00792       169,  169,  169,  169,  169,  169,  179,  179,  452,  179,
00793       179,  179,  179,  179,  184,  184,  216,  216,  218,  404,
00794       451,  218,  218,  218,  218,  218,  221,  221,  450,  221,
00795       221,  221,  221,  221,  223,  203,  449,  223,  223,  223,
00796       223,  223,  227,  227,  230,  230,  232,  232,  265,  265,
00797       399,  265,  265,  265,  265,  265,  266,  266,  296,  296,
00798       296,  448,  296,  296,  296,  297,  297,  447,  297,  446,
00799       297,  297,  299,  299,  445,  299,  299,  299,  299,  299,
00800       302,  302,  302,  302,  302,  302,  302,  302,  305,  305,
00801       444,  305,  284,  305,  305,  306,  306,  443,  306,  306,
00802 
00803       306,  306,  306,  310,  310,  310,  310,  310,  310,  310,
00804       310,  313,  313,  313,  313,  442,  313,  313,  313,  316,
00805       316,  316,  316,  316,  316,  316,  316,  485,  485,  441,
00806       376,  440,  439,  284,  284,  438,  437,  436,  435,  376,
00807       434,  433,  432,  431,  430,  429,  428,  251,  427,  426,
00808       425,  418,  424,  423,  251,  251,  404,  422,  421,  420,
00809       419,  418,  417,  416,  415,  414,  413,  412,  411,  410,
00810       203,  409,  408,  407,  399,  406,  405,  203,  203,  404,
00811       403,  402,  401,  400,  399,  398,  397,  396,  488,  395,
00812       314,  307,  393,  298,  391,  390,  389,  284,  388,  387,
00813 
00814       386,  385,  284,  384,  383,  382,  381,  284,  380,  379,
00815       376,  375,  374,  373,  372,  284,  371,  370,  264,  369,
00816       368,  251,  367,  366,  365,  364,  363,  251,  362,  361,
00817       360,  359,  251,  358,  357,  354,  353,  352,  351,  350,
00818       251,  349,  348,  347,  229,  222,  220,  346,  345,  219,
00819       344,  343,  203,  342,  341,  340,  339,  338,  203,  337,
00820       336,  335,  334,  203,  333,  332,  329,  328,  327,  326,
00821       325,  203,  324,  323,  322,  180,  178,  321,  320,  318,
00822       315,  314,  314,  307,  178,  180,  298,  293,  292,  291,
00823       284,  286,  285,  281,  275,  272,  268,  267,  264,  261,
00824 
00825       260,  259,  258,  251,  253,  252,  248,  242,  239,  235,
00826       234,  233,  229,  222,  220,  219,  213,  212,  211,  210,
00827       203,  205,  204,  200,  194,  191,  187,  186,  185,  180,
00828       178,  488,   31,  488,  488,  488,  488,  488,  488,  488,
00829       488,  488,  488,  488,  488,  488,  488,  488,  488,  488,
00830       488,  488,  488,  488,  488,  488,  488,  488,  488,  488,
00831       488,  488,  488,  488,  488,  488,  488,  488,  488,  488,
00832       488,  488,  488,  488,  488,  488
00833     } ;
00834 
00835 static yyconst flex_int16_t yy_chk[1177] =
00836     {   0,
00837         0,    0,    1,    0,    1,    1,    1,   21,   21,   22,
00838        22,   23,   23,   24,   24,   37,    1,   37,    1,   38,
00839        39,   38,   39,   44,   65,   44,   46,   68,   46,   68,
00840        65,   38,   39,   47,   58,  214,    1,   47,   46,    1,
00841         2,  214,    2,    2,    2,   49,  101,   51,   49,   58,
00842       101,   38,   39,   81,    2,   52,    2,   51,   46,   54,
00843        52,   74,   52,  119,  119,   54,   54,   74,   74,   84,
00844        54,   84,   74,   81,    2,  146,  146,    2,    3,    3,
00845         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
00846         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
00847 
00848         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
00849         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
00850         3,    5,    5,    5,    5,    5,    5,    5,    5,    5,
00851         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
00852         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
00853         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
00854         5,    5,    5,    5,    7,    7,    7,    7,    7,    7,
00855         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
00856         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
00857         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
00858 
00859         7,    7,    7,    7,    7,    7,    7,    9,    9,    9,
00860         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
00861         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
00862         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
00863         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
00864        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
00865        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
00866        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
00867        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
00868        11,   11,   11,   13,   13,   13,   13,   13,   13,   13,
00869 
00870        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
00871        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
00872        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
00873        13,   13,   13,   13,   13,   13,   15,   15,   82,   15,
00874        15,   15,   59,   91,   59,   91,   98,  103,   98,  106,
00875       103,   15,  105,   15,  106,  112,  106,  131,   82,   59,
00876       131,  108,  105,   59,  126,  129,  126,  108,  108,  129,
00877       112,   15,  108,  514,   15,   17,   17,   17,   17,   17,
00878        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
00879        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
00880 
00881        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
00882        17,   17,   17,   17,   17,   17,   17,   17,   19,   19,
00883        19,  134,   19,   19,   19,  113,  134,  113,  134,   62,
00884       487,   62,  140,   69,   19,   69,   19,   70,   85,   70,
00885        85,   62,  113,  133,  486,   69,  113,  140,  484,   70,
00886        85,  159,  159,  133,   19,  167,  167,   19,   20,   20,
00887        20,   62,   20,   20,   20,   69,  150,  483,  150,   70,
00888        85,   86,  482,   86,   20,   92,   20,   92,   93,  100,
00889        93,  100,  481,   86,  116,  480,  116,   92,  262,  262,
00890        93,  100,  478,  128,   20,  128,  116,   20,   25,  477,
00891 
00892        25,   25,   25,   86,  476,  128,  141,   92,  141,  195,
00893        93,  100,   25,  136,   25,   25,  116,  195,  475,  136,
00894       136,  474,  243,  141,  136,  128,  157,  141,  157,  143,
00895       243,  143,   25,  294,  294,   25,   26,  473,   26,   26,
00896        26,  143,  155,  151,  155,  151,  165,  152,  165,  152,
00897        26,  472,   26,   26,  158,  151,  158,  155,  471,  152,
00898       160,  143,  160,  303,  303,  163,  158,  163,  470,  166,
00899        26,  166,  160,   26,   27,  151,   27,   27,   27,  152,
00900       163,  166,  183,  469,  183,  168,  158,  168,   27,  468,
00901        27,   27,  160,  188,  467,  188,  172,  168,  172,  466,
00902 
00903       172,  166,  176,  174,  176,  174,  176,  175,   27,  175,
00904       465,   27,   28,  172,   28,   28,   28,  168,  174,  175,
00905       311,  311,  175,  177,  464,  177,   28,  463,   28,   28,
00906       217,  223,  217,  223,  221,  177,  392,  392,  177,  175,
00907       221,  221,  228,  276,  228,  221,   28,  394,  394,   28,
00908        29,  276,   29,   29,   29,  177,  231,  236,  231,  236,
00909       269,  299,  269,  299,   29,  462,   29,   29,  301,  461,
00910       301,  306,  309,  306,  309,  314,  299,  314,  316,  314,
00911       316,  319,  316,  319,   29,  460,  306,   29,   30,  459,
00912        30,   30,   30,  457,  456,  316,  319,  455,  454,  453,
00913 
00914       452,  451,   30,  450,   30,   30,  449,  448,  447,  446,
00915       445,  444,  443,  442,  441,  440,  439,  438,  437,  436,
00916       435,  434,   30,  433,  432,   30,   79,  431,  430,   79,
00917        79,   79,   79,  429,  428,   79,   79,  427,  426,  425,
00918       424,  423,  422,  421,  420,   79,   80,  419,  416,   80,
00919        80,   80,   80,  415,  414,   80,   80,  413,  412,  411,
00920       410,  409,  408,  407,  406,   80,  489,  489,  489,  489,
00921       489,  489,  489,  489,  490,  490,  490,  490,  490,  490,
00922       490,  490,  491,  491,  491,  491,  491,  491,  491,  491,
00923       492,  492,  492,  492,  492,  492,  492,  492,  493,  493,
00924 
00925       493,  493,  493,  493,  493,  493,  494,  494,  405,  494,
00926       494,  494,  494,  494,  495,  495,  496,  496,  497,  404,
00927       403,  497,  497,  497,  497,  497,  498,  498,  402,  498,
00928       498,  498,  498,  498,  499,  401,  400,  499,  499,  499,
00929       499,  499,  500,  500,  501,  501,  502,  502,  503,  503,
00930       397,  503,  503,  503,  503,  503,  504,  504,  505,  505,
00931       505,  390,  505,  505,  505,  506,  506,  389,  506,  388,
00932       506,  506,  507,  507,  387,  507,  507,  507,  507,  507,
00933       508,  508,  508,  508,  508,  508,  508,  508,  509,  509,
00934       386,  509,  385,  509,  509,  510,  510,  384,  510,  510,
00935 
00936       510,  510,  510,  511,  511,  511,  511,  511,  511,  511,
00937       511,  512,  512,  512,  512,  383,  512,  512,  512,  513,
00938       513,  513,  513,  513,  513,  513,  513,  515,  515,  382,
00939       381,  380,  379,  378,  377,  375,  374,  373,  372,  371,
00940       370,  369,  368,  367,  366,  365,  364,  363,  362,  361,
00941       360,  359,  358,  357,  356,  355,  354,  353,  352,  351,
00942       350,  349,  348,  347,  344,  343,  342,  341,  340,  339,
00943       338,  337,  336,  335,  334,  333,  332,  331,  330,  329,
00944       328,  327,  326,  325,  324,  323,  322,  318,  317,  315,
00945       313,  308,  307,  300,  298,  293,  292,  291,  290,  289,
00946 
00947       288,  287,  286,  285,  283,  281,  280,  279,  278,  277,
00948       275,  274,  273,  272,  271,  270,  268,  267,  264,  261,
00949       260,  259,  258,  257,  256,  255,  254,  253,  252,  250,
00950       248,  247,  246,  245,  244,  242,  241,  240,  239,  238,
00951       237,  235,  234,  233,  229,  225,  224,  222,  220,  219,
00952       213,  212,  211,  210,  209,  208,  207,  206,  205,  204,
00953       202,  200,  199,  198,  197,  196,  194,  193,  192,  191,
00954       190,  189,  187,  186,  185,  182,  181,  180,  178,  173,
00955       171,  170,  169,  164,  162,  156,  154,  145,  144,  142,
00956       139,  138,  137,  135,  132,  130,  127,  125,  121,  118,
00957 
00958       117,  115,  114,  111,  110,  109,  107,  104,  102,   99,
00959        97,   96,   87,   75,   73,   72,   64,   63,   61,   60,
00960        57,   56,   55,   53,   50,   48,   45,   43,   42,   36,
00961        34,   31,  488,  488,  488,  488,  488,  488,  488,  488,
00962       488,  488,  488,  488,  488,  488,  488,  488,  488,  488,
00963       488,  488,  488,  488,  488,  488,  488,  488,  488,  488,
00964       488,  488,  488,  488,  488,  488,  488,  488,  488,  488,
00965       488,  488,  488,  488,  488,  488
00966     } ;
00967 
00968 extern int pycodeYY_flex_debug;
00969 int pycodeYY_flex_debug = 0;
00970 
00971 static yy_state_type *yy_state_buf=0, *yy_state_ptr=0;
00972 static char *yy_full_match;
00973 static int yy_lp;
00974 static int yy_looking_for_trail_begin = 0;
00975 static int yy_full_lp;
00976 static int *yy_full_state;
00977 #define YY_TRAILING_MASK 0x2000
00978 #define YY_TRAILING_HEAD_MASK 0x4000
00979 #define REJECT \
00980 { \
00981 *yy_cp = (yy_hold_char); /* undo effects of setting up pycodeYYtext */ \
00982 yy_cp = (yy_full_match); /* restore poss. backed-over text */ \
00983 (yy_lp) = yy_full_lp; /* restore orig. accepting pos. */ \
00984 (yy_state_ptr) = yy_full_state; /* restore orig. state */ \
00985 yy_current_state = *(yy_state_ptr); /* restore curr. state */ \
00986 ++(yy_lp); \
00987 goto find_rule; \
00988 }
00989 
00990 #define yymore() yymore_used_but_not_detected
00991 #define YY_MORE_ADJ 0
00992 #define YY_RESTORE_YY_MORE_OFFSET
00993 char *pycodeYYtext;
00994 #line 1 "pycode.l"
00995 /******************************************************************************
00996  *
00997  * $Id: pycode.h,v 1.9 2001/03/19 19:27:39 root Exp $
00998  *
00999  * Copyright (C) 1997-2008 by Dimitri van Heesch.
01000  *
01001  * Permission to use, copy, modify, and distribute this software and its
01002  * documentation under the terms of the GNU General Public License is hereby 
01003  * granted. No representations are made about the suitability of this software 
01004  * for any purpose. It is provided "as is" without express or implied warranty.
01005  * See the GNU General Public License for more details.
01006  *
01007  * Documents produced by Doxygen are derivative works derived from the
01008  * input used in their production; they are not affected by this license.
01009  *
01010  */
01011 /*  This code is based on the work done by the MoxyPyDoxy team
01012  *  (Linda Leong, Mike Rivera, Kim Truong, and Gabriel Estrada)
01013  *  in Spring 2005 as part of CS 179E: Compiler Design Project
01014  *  at the University of California, Riverside; the course was
01015  *  taught by Peter H. Froehlich <phf@acm.org>.
01016  */
01017 #line 26 "pycode.l"
01018 
01019 #include <stdio.h>
01020 #include <qvaluestack.h>
01021 
01022 #include "pycode.h"
01023 #include "message.h"
01024 
01025 #include "scanner.h"
01026 #include "entry.h"
01027 #include "doxygen.h"
01028 #include "outputlist.h"
01029 #include "util.h"
01030 #include "membername.h"
01031 #include "searchindex.h"
01032 
01033 #define YY_NEVER_INTERACTIVE 1
01034 
01035 static ClassSDict    g_codeClassSDict(17);
01036 static QCString      g_curClassName;
01037 static QStrList      g_curClassBases;
01038 
01039 
01040 static CodeOutputInterface * g_code;
01041 static const char *  g_inputString;     
01042 static int           g_inputPosition;   
01043 static const char *  g_currentFontClass;
01044 static bool          g_needsTermination;
01045 static int           g_inputLines;      
01046 static int           g_yyLineNr;        
01047 static FileDef *     g_sourceFileDef;
01048 static Definition *  g_currentDefinition;
01049 static MemberDef *   g_currentMemberDef;
01050 static bool          g_includeCodeFragment;
01051 static QCString      g_realScope;
01052 static bool          g_insideBody;
01053 static int           g_bodyCurlyCount;
01054 static bool          g_searchingForBody;
01055 static QCString      g_classScope;
01056 static int           g_paramParens;
01057 //static int           g_anchorCount;
01058 
01059 static bool          g_exampleBlock;
01060 static QCString      g_exampleName;
01061 static QCString      g_exampleFile;
01062 
01063 static QCString      g_type;
01064 static QCString      g_name;
01065 
01066 static bool          g_doubleStringIsDoc;
01067 static bool          g_doubleQuote;
01068 static bool          g_noSuiteFound;
01069 static int           g_stringContext;
01070 
01071 static QValueStack<uint> g_indents;  
01072 
01073 static void endFontClass();
01074 static void adjustScopesAndSuites(unsigned indentLength);
01075 
01076 
01082 class PyVariableContext 
01083 {
01084   public:
01085     static const ClassDef *dummyContext;    
01086     class Scope : public SDict<ClassDef> 
01087     {
01088       public:
01089         Scope() : SDict<ClassDef>(17) {}
01090     };
01091     
01092     PyVariableContext() 
01093     {
01094       m_scopes.setAutoDelete(TRUE);
01095     }
01096 
01097     virtual ~PyVariableContext() 
01098     {
01099     }
01100     
01101     void pushScope() 
01102     {
01103       m_scopes.append(new Scope);
01104     }
01105 
01106     void popScope() 
01107     {
01108       if (m_scopes.count()>0) 
01109       {
01110         m_scopes.remove(m_scopes.count()-1);
01111       }
01112     }
01113 
01114     void clear() 
01115     {
01116       m_scopes.clear();
01117       m_globalScope.clear();
01118     }
01119 
01120     void clearExceptGlobal() 
01121     {
01122       m_scopes.clear();
01123     }
01124 
01125     void addVariable(const QCString &type,const QCString &name);
01126     ClassDef *findVariable(const QCString &name);
01127     
01128   private:
01129     Scope        m_globalScope;
01130     QList<Scope> m_scopes;
01131 };
01132 
01133 void PyVariableContext::addVariable(const QCString &type,const QCString &name)
01134 {
01135   //printf("PyVariableContext::addVariable(%s,%s)\n",type.data(),name.data());
01136   QCString ltype = type.simplifyWhiteSpace();
01137   QCString lname = name.simplifyWhiteSpace();
01138 
01139   Scope *scope = m_scopes.count()==0 ? &m_globalScope : m_scopes.getLast();
01140   ClassDef *varType;
01141   if (
01142       (varType=g_codeClassSDict[ltype]) ||  // look for class definitions inside the code block
01143       (varType=getResolvedClass(g_currentDefinition,g_sourceFileDef,ltype)) // look for global class definitions
01144      ) 
01145   {
01146     scope->append(lname,varType); // add it to a list
01147   }
01148   else 
01149   {
01150     if (m_scopes.count()>0) // for local variables add a dummy entry so the name 
01151                             // is hidden to avoid FALSE links to global variables with the same name
01152                             // TODO: make this work for namespaces as well!
01153     {
01154       scope->append(lname,dummyContext);
01155     }
01156   }
01157 }
01158 
01159 ClassDef *PyVariableContext::findVariable(const QCString &name)
01160 {
01161   if (name.isEmpty()) return 0;
01162   ClassDef *result = 0;
01163   QListIterator<Scope> sli(m_scopes);
01164   Scope *scope;
01165   // search from inner to outer scope
01166   for (sli.toLast();(scope=sli.current());--sli)
01167   {
01168     result = scope->find(name);
01169     if (result) 
01170     {
01171       return result;
01172     }
01173   }
01174   // nothing found -> also try the global scope
01175   result=m_globalScope.find(name);
01176   return result;
01177 }
01178 
01179 static PyVariableContext g_theVarContext;
01180 const ClassDef *PyVariableContext::dummyContext = (ClassDef*)0x8;
01181 
01182 class PyCallContext
01183 {
01184   public:
01185     struct Ctx
01186     {
01187       Ctx() : name(g_name), type(g_type), cd(0) {}
01188       QCString name;
01189       QCString type;
01190       ClassDef *cd;
01191     };
01192 
01193     PyCallContext() 
01194     {
01195       m_classList.append(new Ctx);
01196       m_classList.setAutoDelete(TRUE);
01197     }
01198 
01199     virtual ~PyCallContext() {}
01200 
01201     void setClass(ClassDef *cd)
01202     {
01203       Ctx *ctx = m_classList.getLast();
01204       if (ctx) 
01205       {
01206         ctx->cd=cd;
01207       }
01208     }
01209     void pushScope()
01210     {
01211       m_classList.append(new Ctx);
01212     }
01213 
01214     void popScope()
01215     {
01216       if (m_classList.count()>1)
01217       {
01218         Ctx *ctx = m_classList.getLast();
01219         if (ctx)
01220         {
01221           g_name = ctx->name;
01222           g_type = ctx->type;
01223         }
01224         m_classList.removeLast();
01225       }
01226       else
01227       {
01228       }
01229     }
01230 
01231     void clear()
01232     {
01233       m_classList.clear();
01234       m_classList.append(new Ctx);
01235     }
01236 
01237     ClassDef *getClass() const
01238     {
01239       Ctx *ctx = m_classList.getLast();
01240 
01241       if (ctx)
01242         return ctx->cd;
01243       else
01244         return 0;
01245     }
01246 
01247   private:
01248     QList<Ctx> m_classList;    
01249 };
01250 
01251 static PyCallContext g_theCallContext;
01252 
01253 
01255 static int countLines()
01256 {
01257   const char *p=g_inputString;
01258   char c;
01259   int count=1;
01260   while ((c=*p)) 
01261   { 
01262     p++ ; 
01263     if (c=='\n') count++;  
01264   }
01265   if (p>g_inputString && *(p-1)!='\n') 
01266   { // last line does not end with a \n, so we add an extra
01267     // line and explicitly terminate the line after parsing.
01268     count++, 
01269     g_needsTermination=TRUE; 
01270   } 
01271   return count;
01272 }
01273 
01274 static void setCurrentDoc(const QCString &name,const QCString &base,const QCString &anchor="")
01275 {
01276   static bool searchEngineEnabled=Config_getBool("SEARCHENGINE");
01277   if (searchEngineEnabled)
01278   {
01279     Doxygen::searchIndex->setCurrentDoc(name,base,anchor);
01280   }
01281 }
01282 
01283 static void addToSearchIndex(const char *text)
01284 {
01285   static bool searchEngineEnabled=Config_getBool("SEARCHENGINE");
01286   if (searchEngineEnabled)
01287   {
01288     Doxygen::searchIndex->addWord(text,FALSE);
01289   }
01290 }
01291 
01292 
01293 static ClassDef *stripClassName(const char *s)
01294 {
01295   int pos=0;
01296   QCString type = s;
01297   QCString className;
01298   QCString templSpec;
01299   while (extractClassNameFromType(type,pos,className,templSpec)!=-1)
01300   {
01301     QCString clName=className+templSpec;
01302 
01303     ClassDef *cd=0;
01304     if (!g_classScope.isEmpty())
01305     {
01306       cd=getResolvedClass(g_currentDefinition,g_sourceFileDef,g_classScope+"::"+clName);
01307     }
01308     if (cd==0)
01309     {
01310       cd=getResolvedClass(g_currentDefinition,g_sourceFileDef,clName);
01311     }
01312     if (cd)
01313     {
01314       return cd;
01315     }
01316   }
01317 
01318   return 0;
01319 }
01320 
01321 
01322 
01327 static void startCodeLine()
01328 {
01329   //if (g_currentFontClass) { g_code->endFontClass(); }
01330   if (g_sourceFileDef)
01331   {
01332     //QCString lineNumber,lineAnchor;
01333     //lineNumber.sprintf("%05d",g_yyLineNr);
01334     //lineAnchor.sprintf("l%05d",g_yyLineNr);
01335    
01336     Definition *d   = g_sourceFileDef->getSourceDefinition(g_yyLineNr);
01337     //printf("startCodeLine %d d=%p\n",g_yyLineNr,d);
01338     //g_code->startLineNumber();
01339     if (!g_includeCodeFragment && d && d->isLinkableInProject())
01340     {
01341       g_currentDefinition = d;
01342       g_currentMemberDef = g_sourceFileDef->getSourceMember(g_yyLineNr);
01343       g_insideBody = FALSE;
01344       g_searchingForBody = TRUE;
01345       g_realScope = d->name().copy();
01346       g_classScope = d->name().copy();
01347       //printf("Real scope: `%s'\n",g_realScope.data());
01348       g_bodyCurlyCount = 0;
01349       QCString lineAnchor;
01350       lineAnchor.sprintf("l%05d",g_yyLineNr);
01351       if (g_currentMemberDef)
01352       {
01353         g_code->writeLineNumber(g_currentMemberDef->getReference(),
01354                                 g_currentMemberDef->getOutputFileBase(),
01355                                 g_currentMemberDef->anchor(),g_yyLineNr);
01356         setCurrentDoc(
01357                                 g_currentMemberDef->qualifiedName(),
01358                                 g_sourceFileDef->getSourceFileBase(),
01359                                 lineAnchor);
01360       }
01361       else
01362       {
01363         g_code->writeLineNumber(d->getReference(),
01364                                 d->getOutputFileBase(),
01365                                 0,g_yyLineNr);
01366         setCurrentDoc(
01367                                 d->qualifiedName(),
01368                                 g_sourceFileDef->getSourceFileBase(),
01369                                 lineAnchor);
01370       }
01371     }
01372     else
01373     {
01374       //g_code->codify(lineNumber);
01375       g_code->writeLineNumber(0,0,0,g_yyLineNr);
01376     }
01377     //g_code->endLineNumber();
01378   }
01379   g_code->startCodeLine(); 
01380   if (g_currentFontClass)
01381   {
01382     g_code->startFontClass(g_currentFontClass);
01383   }
01384 }
01385 
01386 static void codify(char* text) 
01387 { 
01388   g_code->codify(text);
01389 }
01390 
01391 static void endCodeLine()
01392 {
01393   if (g_currentFontClass) { g_code->endFontClass(); }
01394   g_code->endCodeLine();
01395 }
01396 
01401 static void writeMultiLineCodeLink(CodeOutputInterface &ol,
01402                   const char *ref,const char *file,
01403                   const char *anchor,const char *text,
01404                   const char *tooltip)
01405 {
01406   bool done=FALSE;
01407   char *p=(char *)text;
01408   while (!done)
01409   {
01410     char *sp=p;
01411     char c;
01412     while ((c=*p++) && c!='\n');
01413     if (c=='\n')
01414     {
01415       g_yyLineNr++;
01416       *(p-1)='\0';
01417       //printf("writeCodeLink(%s,%s,%s,%s)\n",ref,file,anchor,sp);
01418       ol.writeCodeLink(ref,file,anchor,sp,tooltip);
01419       endCodeLine();
01420       if (g_yyLineNr<g_inputLines) 
01421       {
01422         startCodeLine();
01423       }
01424     }
01425     else
01426     {
01427       //printf("writeCodeLink(%s,%s,%s,%s)\n",ref,file,anchor,sp);
01428       ol.writeCodeLink(ref,file,anchor,sp,tooltip);
01429       done=TRUE;
01430     }
01431   }
01432 }
01433 
01434 
01435 static void codifyLines(char *text)
01436 {
01437   //printf("codifyLines(%d,\"%s\")\n",g_yyLineNr,text);
01438   char *p=text,*sp=p;
01439   char c;
01440   bool done=FALSE;
01441   while (!done)
01442   {
01443     sp=p;
01444     while ((c=*p++) && c!='\n');
01445     if (c=='\n')
01446     {
01447       g_yyLineNr++;
01448       *(p-1)='\0';
01449       g_code->codify(sp);
01450       endCodeLine();
01451       if (g_yyLineNr<g_inputLines) 
01452       {
01453         // Re-enable sometime
01454         startCodeLine();
01455       }
01456     }
01457     else
01458     {
01459       g_code->codify(sp);
01460       done=TRUE;
01461     }
01462   }
01463 }
01464 
01465 static void addDocCrossReference(MemberDef *src,MemberDef *dst)
01466 {
01467   if (dst->isTypedef() || dst->isEnumerate()) return; // don't add types
01468   //printf("addDocCrossReference src=%s,dst=%s\n",src->name().data(),dst->name().data());
01469   if ((Config_getBool("REFERENCED_BY_RELATION") || Config_getBool("CALLER_GRAPH")) && 
01470       (src->isFunction() || src->isSlot()) 
01471      )
01472   {
01473     dst->addSourceReferencedBy(src);
01474   }
01475   if ((Config_getBool("REFERENCES_RELATION") || Config_getBool("CALL_GRAPH")) && 
01476       (src->isFunction() || src->isSlot())
01477      )
01478   {
01479     src->addSourceReferences(dst);
01480   }
01481 
01482 }
01483 
01484 
01485 
01486 static bool getLinkInScope(const QCString &c,  // scope
01487                            const QCString &m,  // member
01488                            const char *memberText, // exact text
01489                            CodeOutputInterface &ol,
01490                            const char *text
01491                           )
01492 {
01493   MemberDef    *md;
01494   ClassDef     *cd;
01495   FileDef      *fd;
01496   NamespaceDef *nd;
01497   GroupDef     *gd;
01498   //printf("Trying `%s'::`%s'\n",c.data(),m.data());
01499   if (getDefs(c,m,"()",md,cd,fd,nd,gd,FALSE,g_sourceFileDef) && 
01500       md->isLinkable())
01501   {
01502     //printf("Found!\n");
01503     //Definition *d=0;
01504     //if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd;
01505 
01506     Definition *d = md->getOuterScope()==Doxygen::globalScope ?
01507                     md->getBodyDef() : md->getOuterScope();
01508     if (md->getGroupDef()) d = md->getGroupDef();
01509     if (d && d->isLinkable())
01510     {
01511       g_theCallContext.setClass(stripClassName(md->typeString()));
01512       //printf("g_currentDefinition=%p g_currentMemberDef=%p g_insideBody=%d\n",
01513       //        g_currentDefinition,g_currentMemberDef,g_insideBody);
01514 
01515       if (g_currentDefinition && g_currentMemberDef &&
01516           md!=g_currentMemberDef && g_insideBody)
01517       {
01518         addDocCrossReference(g_currentMemberDef,md);
01519       }
01520       //printf("d->getReference()=`%s' d->getOutputBase()=`%s' name=`%s' member name=`%s'\n",d->getReference().data(),d->getOutputFileBase().data(),d->name().data(),md->name().data());
01521      
01522       writeMultiLineCodeLink(ol,md->getReference(),
01523                                 md->getOutputFileBase(),
01524                                 md->anchor(),
01525                                 text ? text : memberText,
01526                                 md->briefDescriptionAsTooltip());
01527       addToSearchIndex(text ? text : memberText);
01528       return TRUE;
01529     } 
01530   }
01531   return FALSE;
01532 }
01533 
01534 static bool getLink(const char *className,
01535                     const char *memberName,
01536                     CodeOutputInterface &ol,
01537                     const char *text=0)
01538 {
01539   QCString m=removeRedundantWhiteSpace(memberName);
01540   QCString c=className;
01541   if (!getLinkInScope(c,m,memberName,ol,text))
01542   {
01543     if (!g_curClassName.isEmpty())
01544     {
01545       if (!c.isEmpty()) c.prepend("::");
01546       c.prepend(g_curClassName);
01547       return getLinkInScope(c,m,memberName,ol,text);
01548     }
01549     return FALSE;
01550   }
01551   return TRUE;
01552 }
01553 
01554 
01555 /*
01556   For a given string in the source code,
01557   finds its class or global id and links to it.
01558 
01559   As of June 1, '05, this ONLY finds classes
01560 */
01561 static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName,
01562                                       bool /*typeOnly*/=FALSE)
01563 {
01564   QCString className=clName;
01565 
01566   // Don't do anything for empty text
01567   if (className.isEmpty()) return;
01568 
01569   ClassDef *cd=0,*lcd=0;  
01570   MemberDef *md=0;        
01571   bool isLocal=FALSE;
01572 
01573   // printf("generateClassOrGlobalLink(className=%s)\n",className.data());
01574 
01575   if ((lcd=g_theVarContext.findVariable(className))==0) // not a local variable
01576   {
01577     Definition *d = g_currentDefinition;
01578 
01579     cd = getResolvedClass(d,g_sourceFileDef,className,&md);
01580 
01581     //printf("d=%p g_sourceFileDef=%p\n",d,g_currentDefinition);
01582     //printf("is found as a type %s\n",cd?cd->name().data():"<null>");
01583 
01584     if (cd==0 && md==0) // also see if it is variable or enum or enum value
01585     {
01586       if (getLink(g_classScope,clName,ol,clName))
01587       {
01588         return;
01589       }
01590     }
01591   }
01592   else
01593   {
01594     if (lcd!=PyVariableContext::dummyContext) 
01595     {
01596       g_theCallContext.setClass(lcd);
01597     }
01598     isLocal=TRUE;
01599     //fprintf(stderr,"is a local variable cd=%p!\n",cd);
01600   }
01601 
01602   if (cd && cd->isLinkable()) // is it a linkable class
01603   {
01604     writeMultiLineCodeLink(ol,cd->getReference(),cd->getOutputFileBase(),0,clName,cd->briefDescriptionAsTooltip());
01605     addToSearchIndex(className);
01606     if (md)
01607     {
01608       Definition *d = md->getOuterScope()==Doxygen::globalScope ?
01609                       md->getBodyDef() : md->getOuterScope();
01610       if (md->getGroupDef()) d = md->getGroupDef();
01611       if (d && d->isLinkable() && md->isLinkable() && g_currentMemberDef)
01612       {
01613         addDocCrossReference(g_currentMemberDef,md);
01614       }
01615     }
01616   }
01617   else // not a class, maybe a global member
01618   {
01619 
01620     /*
01621       This code requires a going-over in order to
01622       make it work for Python
01623 
01624     //printf("class %s not linkable! cd=%p md=%p typeOnly=%d\n",clName,cd,md,typeOnly);
01625     if (!isLocal && (md!=0 || (cd==0 && !typeOnly))) // not a class, see if it is a global enum/variable/typedef.
01626     {
01627       if (md==0) // not found as a typedef
01628       {
01629         md = setCallContextForVar(clName);
01630         //printf("setCallContextForVar(%s) md=%p g_currentDefinition=%p\n",clName,md,g_currentDefinition);
01631         if (md && g_currentDefinition)
01632         {
01633           //fprintf(stderr,"%s accessible from %s? %d md->getOuterScope=%s\n",
01634           //    md->name().data(),g_currentDefinition->name().data(),
01635           //    isAccessibleFrom(g_currentDefinition,g_sourceFileDef,md),
01636           //    md->getOuterScope()->name().data());
01637         }
01638              
01639         if (md && g_currentDefinition && 
01640             isAccessibleFrom(g_currentDefinition,g_sourceFileDef,md)==-1)
01641         {
01642           md=0; // variable not accessible
01643         }
01644       }
01645       if (md)
01646       {
01647         //printf("is a global md=%p g_currentDefinition=%s\n",md,g_currentDefinition?g_currentDefinition->name().data():"<none>");
01648         if (md->isLinkable())
01649         {
01650           writeMultiLineCodeLink(ol,md->getReference(),md->getOutputFileBase(),md->anchor(),clName,md->briefDescriptionAsTooltip());
01651           addToSearchIndex(clName);
01652           if (g_currentMemberDef)
01653           {
01654             addDocCrossReference(g_currentMemberDef,md);
01655           }
01656           return;
01657         }
01658       }
01659     }
01660 
01661     */
01662     
01663     // nothing found, just write out the word
01664     codifyLines(clName);
01665     addToSearchIndex(clName);
01666   }
01667 }
01668 
01669 /*
01670    As of June 1, this function seems to work
01671    for file members, but scopes are not
01672    being correctly tracked for classes
01673    so it doesn't work for classes yet.
01674 
01675 */
01676 static void generateFunctionLink(CodeOutputInterface &ol,char *funcName)
01677 {
01678   //CodeClassDef *ccd=0;
01679   ClassDef *ccd=0;
01680   QCString locScope=g_classScope.copy();
01681   QCString locFunc=removeRedundantWhiteSpace(funcName);
01682   //fprintf(stdout,"*** locScope=%s locFunc=%s\n",locScope.data(),locFunc.data());
01683   int i=locFunc.findRev("::");
01684   if (i>0)
01685   {
01686     locScope=locFunc.left(i);
01687     locFunc=locFunc.right(locFunc.length()-i-2).stripWhiteSpace();
01688   }
01689   //printf("generateFunctionLink(%s) classScope=`%s'\n",locFunc.data(),locScope.data());
01690   if (!locScope.isEmpty() && (ccd=g_codeClassSDict[locScope]))
01691   {
01692     //printf("using classScope %s\n",g_classScope.data());
01693     if (ccd->baseClasses())
01694     {
01695       BaseClassListIterator bcli(*ccd->baseClasses());
01696       for ( ; bcli.current() ; ++bcli)
01697       {
01698         if (getLink(bcli.current()->classDef->name(),locFunc,ol,funcName)) 
01699         {
01700           return;
01701         }
01702       }
01703     }
01704   }
01705   if (!getLink(locScope,locFunc,ol,funcName))
01706   {
01707     generateClassOrGlobalLink(ol,funcName);
01708   }
01709   return;
01710 }
01711 
01712 static bool findMemberLink(CodeOutputInterface &ol,Definition *sym,const char *symName)
01713 {
01714   //printf("sym %s outerScope=%s equal=%d\n",
01715   //    sym->name().data(),sym->getOuterScope()->name().data(),
01716   //    sym->getOuterScope()==g_currentDefinition);
01717 
01718   if (sym->getOuterScope() &&
01719       sym->getOuterScope()->definitionType()==Definition::TypeClass &&
01720       g_currentDefinition->definitionType()==Definition::TypeClass)
01721   {
01722     ClassDef *cd = (ClassDef*)sym->getOuterScope();
01723     ClassDef *thisCd = (ClassDef *)g_currentDefinition;
01724     QCString anchor;
01725     if (sym->definitionType()==Definition::TypeMember)
01726     {
01727       anchor=((MemberDef *)sym)->anchor();
01728     }
01729 
01730     // TODO: find the nearest base class in case cd is a base class of
01731     // thisCd 
01732     if (cd==thisCd) 
01733     {
01734       writeMultiLineCodeLink(ol,sym->getReference(),
01735           sym->getOutputFileBase(),
01736           anchor,
01737           symName,
01738           sym->briefDescriptionAsTooltip());
01739       return TRUE;
01740     }
01741   }
01742   return FALSE;
01743 }
01744 
01745 static void findMemberLink(CodeOutputInterface &ol,char *symName)
01746 {
01747   //printf("Member reference: %s scope=%s member=%s\n",
01748   //    pycodeYYtext,
01749   //    g_currentDefinition?g_currentDefinition->name().data():"<none>",
01750   //    g_currentMemberDef?g_currentMemberDef->name().data():"<none>"
01751   //    );
01752   if (g_currentDefinition)
01753   {
01754     DefinitionIntf *di = Doxygen::symbolMap->find(symName);
01755     if (di)
01756     {
01757       if (di->definitionType()==DefinitionIntf::TypeSymbolList) // multiple symbols
01758       {
01759         DefinitionListIterator dli(*(DefinitionList*)di);
01760         Definition *sym;
01761         for (dli.toFirst();(sym=dli.current());++dli)
01762         {
01763           if (findMemberLink(ol,sym,symName)) return;
01764         }
01765       }
01766       else // single symbol
01767       {
01768         if (findMemberLink(ol,(Definition*)di,symName)) return;
01769       }
01770     }
01771   }
01772   //printf("sym %s not found\n",&pycodeYYtext[5]);
01773   codify(symName);
01774 }
01775 
01776 static void startFontClass(const char *s)
01777 {
01778   endFontClass();
01779   g_code->startFontClass(s);
01780   g_currentFontClass=s;
01781 }
01782 
01783 static void endFontClass()
01784 {
01785   if (g_currentFontClass)
01786   {
01787     g_code->endFontClass();
01788     g_currentFontClass=0;
01789   }
01790 }
01791 
01792 #undef YY_INPUT
01793 #define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
01794 
01795 static int yyread(char *buf,int max_size)
01796 {
01797   int c=0;
01798   while( c < max_size && g_inputString[g_inputPosition] )
01799   {
01800     *buf = g_inputString[g_inputPosition++] ;
01801     c++; buf++;
01802   }
01803   return c;
01804 }
01805 
01806 
01807 
01808 
01809 
01810 
01811 
01812 
01813 
01814 
01815 
01816 
01817 
01818 
01819 
01820 #line 1821 "<stdout>"
01821 
01822 #define INITIAL 0
01823 #define Body 1
01824 #define FunctionDec 2
01825 #define FunctionParams 3
01826 #define ClassDec 4
01827 #define ClassInheritance 5
01828 #define Suite 6
01829 #define SuiteCaptureIndent 7
01830 #define SuiteStart 8
01831 #define SuiteMaintain 9
01832 #define SuiteContinuing 10
01833 #define LongString 11
01834 #define SingleQuoteString 12
01835 #define DoubleQuoteString 13
01836 #define TripleString 14
01837 
01838 #ifndef YY_NO_UNISTD_H
01839 /* Special case for "unistd.h", since it is non-ANSI. We include it way
01840  * down here because we want the user's section 1 to have been scanned first.
01841  * The user has a chance to override it with an option.
01842  */
01843 #include <unistd.h>
01844 #endif
01845 
01846 #ifndef YY_EXTRA_TYPE
01847 #define YY_EXTRA_TYPE void *
01848 #endif
01849 
01850 static int yy_init_globals (void );
01851 
01852 /* Macros after this point can all be overridden by user definitions in
01853  * section 1.
01854  */
01855 
01856 #ifndef YY_SKIP_YYWRAP
01857 #ifdef __cplusplus
01858 extern "C" int pycodeYYwrap (void );
01859 #else
01860 extern int pycodeYYwrap (void );
01861 #endif
01862 #endif
01863 
01864 #ifndef yytext_ptr
01865 static void yy_flex_strncpy (char *,yyconst char *,int );
01866 #endif
01867 
01868 #ifdef YY_NEED_STRLEN
01869 static int yy_flex_strlen (yyconst char * );
01870 #endif
01871 
01872 #ifndef YY_NO_INPUT
01873 
01874 #ifdef __cplusplus
01875 static int yyinput (void );
01876 #else
01877 static int input (void );
01878 #endif
01879 
01880 #endif
01881 
01882 /* Amount of stuff to slurp up with each read. */
01883 #ifndef YY_READ_BUF_SIZE
01884 #define YY_READ_BUF_SIZE 8192
01885 #endif
01886 
01887 /* Copy whatever the last rule matched to the standard output. */
01888 #ifndef ECHO
01889 /* This used to be an fputs(), but since the string might contain NUL's,
01890  * we now use fwrite().
01891  */
01892 #define ECHO (void) fwrite( pycodeYYtext, pycodeYYleng, 1, pycodeYYout )
01893 #endif
01894 
01895 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
01896  * is returned in "result".
01897  */
01898 #ifndef YY_INPUT
01899 #define YY_INPUT(buf,result,max_size) \
01900         if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
01901                 { \
01902                 int c = '*'; \
01903                 size_t n; \
01904                 for ( n = 0; n < max_size && \
01905                              (c = getc( pycodeYYin )) != EOF && c != '\n'; ++n ) \
01906                         buf[n] = (char) c; \
01907                 if ( c == '\n' ) \
01908                         buf[n++] = (char) c; \
01909                 if ( c == EOF && ferror( pycodeYYin ) ) \
01910                         YY_FATAL_ERROR( "input in flex scanner failed" ); \
01911                 result = n; \
01912                 } \
01913         else \
01914                 { \
01915                 errno=0; \
01916                 while ( (result = fread(buf, 1, max_size, pycodeYYin))==0 && ferror(pycodeYYin)) \
01917                         { \
01918                         if( errno != EINTR) \
01919                                 { \
01920                                 YY_FATAL_ERROR( "input in flex scanner failed" ); \
01921                                 break; \
01922                                 } \
01923                         errno=0; \
01924                         clearerr(pycodeYYin); \
01925                         } \
01926                 }\
01927 \
01928 
01929 #endif
01930 
01931 /* No semi-colon after return; correct usage is to write "yyterminate();" -
01932  * we don't want an extra ';' after the "return" because that will cause
01933  * some compilers to complain about unreachable statements.
01934  */
01935 #ifndef yyterminate
01936 #define yyterminate() return YY_NULL
01937 #endif
01938 
01939 /* Number of entries by which start-condition stack grows. */
01940 #ifndef YY_START_STACK_INCR
01941 #define YY_START_STACK_INCR 25
01942 #endif
01943 
01944 /* Report a fatal error. */
01945 #ifndef YY_FATAL_ERROR
01946 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
01947 #endif
01948 
01949 /* end tables serialization structures and prototypes */
01950 
01951 /* Default declaration of generated scanner - a define so the user can
01952  * easily add parameters.
01953  */
01954 #ifndef YY_DECL
01955 #define YY_DECL_IS_OURS 1
01956 
01957 extern int pycodeYYlex (void);
01958 
01959 #define YY_DECL int pycodeYYlex (void)
01960 #endif /* !YY_DECL */
01961 
01962 /* Code executed at the beginning of each rule, after pycodeYYtext and pycodeYYleng
01963  * have been set up.
01964  */
01965 #ifndef YY_USER_ACTION
01966 #define YY_USER_ACTION
01967 #endif
01968 
01969 /* Code executed at the end of each rule. */
01970 #ifndef YY_BREAK
01971 #define YY_BREAK break;
01972 #endif
01973 
01974 #define YY_RULE_SETUP \
01975         YY_USER_ACTION
01976 
01979 YY_DECL
01980 {
01981         register yy_state_type yy_current_state;
01982         register char *yy_cp, *yy_bp;
01983         register int yy_act;
01984     
01985 #line 948 "pycode.l"
01986 
01987 
01988 #line 1989 "<stdout>"
01989 
01990         if ( !(yy_init) )
01991                 {
01992                 (yy_init) = 1;
01993 
01994 #ifdef YY_USER_INIT
01995                 YY_USER_INIT;
01996 #endif
01997 
01998         /* Create the reject buffer large enough to save one state per allowed character. */
01999         if ( ! (yy_state_buf) )
02000             (yy_state_buf) = (yy_state_type *)pycodeYYalloc(YY_STATE_BUF_SIZE  );
02001 
02002                 if ( ! (yy_start) )
02003                         (yy_start) = 1; /* first start state */
02004 
02005                 if ( ! pycodeYYin )
02006                         pycodeYYin = stdin;
02007 
02008                 if ( ! pycodeYYout )
02009                         pycodeYYout = stdout;
02010 
02011                 if ( ! YY_CURRENT_BUFFER ) {
02012                         pycodeYYensure_buffer_stack ();
02013                         YY_CURRENT_BUFFER_LVALUE =
02014                                 pycodeYY_create_buffer(pycodeYYin,YY_BUF_SIZE );
02015                 }
02016 
02017                 pycodeYY_load_buffer_state( );
02018                 }
02019 
02020         while ( 1 )             /* loops until end-of-file is reached */
02021                 {
02022                 yy_cp = (yy_c_buf_p);
02023 
02024                 /* Support of pycodeYYtext. */
02025                 *yy_cp = (yy_hold_char);
02026 
02027                 /* yy_bp points to the position in yy_ch_buf of the start of
02028                  * the current run.
02029                  */
02030                 yy_bp = yy_cp;
02031 
02032                 yy_current_state = (yy_start);
02033 
02034                 (yy_state_ptr) = (yy_state_buf);
02035                 *(yy_state_ptr)++ = yy_current_state;
02036 
02037 yy_match:
02038                 do
02039                         {
02040                         register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
02041                         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
02042                                 {
02043                                 yy_current_state = (int) yy_def[yy_current_state];
02044                                 if ( yy_current_state >= 489 )
02045                                         yy_c = yy_meta[(unsigned int) yy_c];
02046                                 }
02047                         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
02048                         *(yy_state_ptr)++ = yy_current_state;
02049                         ++yy_cp;
02050                         }
02051                 while ( yy_base[yy_current_state] != 1133 );
02052 
02053 yy_find_action:
02054                 yy_current_state = *--(yy_state_ptr);
02055                 (yy_lp) = yy_accept[yy_current_state];
02056 find_rule: /* we branch to this label when backing up */
02057                 for ( ; ; ) /* until we find what rule we matched */
02058                         {
02059                         if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] )
02060                                 {
02061                                 yy_act = yy_acclist[(yy_lp)];
02062                                 if ( yy_act & YY_TRAILING_HEAD_MASK ||
02063                                      yy_looking_for_trail_begin )
02064                                         {
02065                                         if ( yy_act == yy_looking_for_trail_begin )
02066                                                 {
02067                                                 yy_looking_for_trail_begin = 0;
02068                                                 yy_act &= ~YY_TRAILING_HEAD_MASK;
02069                                                 break;
02070                                                 }
02071                                         }
02072                                 else if ( yy_act & YY_TRAILING_MASK )
02073                                         {
02074                                         yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK;
02075                                         yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK;
02076                                         (yy_full_match) = yy_cp;
02077                                         yy_full_state = (yy_state_ptr);
02078                                         yy_full_lp = (yy_lp);
02079                                         }
02080                                 else
02081                                         {
02082                                         (yy_full_match) = yy_cp;
02083                                         yy_full_state = (yy_state_ptr);
02084                                         yy_full_lp = (yy_lp);
02085                                         break;
02086                                         }
02087                                 ++(yy_lp);
02088                                 goto find_rule;
02089                                 }
02090                         --yy_cp;
02091                         yy_current_state = *--(yy_state_ptr);
02092                         (yy_lp) = yy_accept[yy_current_state];
02093                         }
02094 
02095                 YY_DO_BEFORE_ACTION;
02096 
02097 do_action:      /* This label is used only to access EOF actions. */
02098 
02099                 switch ( yy_act )
02100         { /* beginning of action switch */
02101 
02102 case 1:
02103 YY_RULE_SETUP
02104 #line 951 "pycode.l"
02105 {
02106                                         startFontClass("keyword");
02107                                         codify(pycodeYYtext);
02108                                         endFontClass();
02109                                         BEGIN( FunctionDec );
02110                                     }
02111         YY_BREAK
02112 case 2:
02113 YY_RULE_SETUP
02114 #line 958 "pycode.l"
02115 {
02116                                         startFontClass("keyword");
02117                                         codify(pycodeYYtext);
02118                                         endFontClass();
02119                                         BEGIN( ClassDec );
02120                                     }
02121         YY_BREAK
02122 case 3:
02123 YY_RULE_SETUP
02124 #line 964 "pycode.l"
02125 {
02126                                         startFontClass("keywordtype");
02127                                         codify(pycodeYYtext);
02128                                         endFontClass();
02129                                     }
02130         YY_BREAK
02131 case 4:
02132 YY_RULE_SETUP
02133 #line 969 "pycode.l"
02134 {
02135                                         codify("self.");
02136                                         findMemberLink(*g_code,&pycodeYYtext[5]);
02137                                     }
02138         YY_BREAK
02139 
02140 case 5:
02141 YY_RULE_SETUP
02142 #line 975 "pycode.l"
02143 {
02144 
02145                                         generateClassOrGlobalLink(*g_code,pycodeYYtext);
02146                                         // codify(pycodeYYtext);
02147                                         g_curClassName = pycodeYYtext;
02148                                         g_curClassBases.clear();
02149                                         BEGIN( ClassInheritance );
02150                                     }
02151         YY_BREAK
02152 
02153 case 6:
02154 YY_RULE_SETUP
02155 #line 985 "pycode.l"
02156 {
02157                                         codify(pycodeYYtext);
02158                                     }
02159         YY_BREAK
02160 case 7:
02161 YY_RULE_SETUP
02162 #line 989 "pycode.l"
02163 {
02164                                         // The parser
02165                                         // is assuming
02166                                         // that ALL identifiers
02167                                         // in this state
02168                                         // are base classes;
02169                                         // it doesn't check to see
02170                                         // that the first parenthesis
02171                                         // has been seen.
02172 
02173                                         // This is bad - it should
02174                                         // probably be more strict
02175                                         // about what to accept.
02176 
02177                                         g_curClassBases.inSort(pycodeYYtext);
02178                                         generateClassOrGlobalLink(*g_code,pycodeYYtext);
02179                                         // codify(pycodeYYtext);
02180                                     }
02181         YY_BREAK
02182 case 8:
02183 YY_RULE_SETUP
02184 #line 1008 "pycode.l"
02185 {
02186                                       codify(pycodeYYtext);
02187 
02188                                       // Assume this will
02189                                       // be a one-line suite;
02190                                       // found counter-example
02191                                       // in SuiteStart.
02192 
02193                                       // Push a class scope
02194 
02195                                       ClassDef *classDefToAdd = new ClassDef("<code>",1,g_curClassName,ClassDef::Class,0,0,FALSE);
02196                                       g_codeClassSDict.append(g_curClassName,classDefToAdd);
02197                                       char *s=g_curClassBases.first();
02198                                       while (s) 
02199                                       {
02200                                         ClassDef *baseDefToAdd;
02201                                         baseDefToAdd=g_codeClassSDict[s];
02202 
02203                                         // Try to find class in global
02204                                         // scope
02205                                         if (baseDefToAdd==0) 
02206                                         {
02207                                           baseDefToAdd=getResolvedClass(g_currentDefinition,g_sourceFileDef,s);
02208                                         }
02209 
02210                                         if (baseDefToAdd && baseDefToAdd!=classDefToAdd) 
02211                                         {
02212                                           classDefToAdd->insertBaseClass(baseDefToAdd,s,Public,Normal);
02213                                         }
02214 
02215                                         s=g_curClassBases.next();
02216                                       }
02217 
02218                                       // Reset class-parsing variables.
02219                                       g_curClassName.resize(0);
02220                                       g_curClassBases.clear();
02221                                       
02222                                       g_noSuiteFound = TRUE;
02223                                       BEGIN( SuiteStart );
02224                                     }
02225         YY_BREAK
02226 
02227 
02228 case 9:
02229 YY_RULE_SETUP
02230 #line 1052 "pycode.l"
02231 {
02232                                         generateFunctionLink(*g_code,pycodeYYtext);
02233                                     }
02234         YY_BREAK
02235 case 10:
02236 YY_RULE_SETUP
02237 #line 1056 "pycode.l"
02238 {
02239                                         codify(pycodeYYtext);
02240                                         BEGIN( FunctionParams );
02241                                     }
02242         YY_BREAK
02243 
02244 
02245 case 11:
02246 YY_RULE_SETUP
02247 #line 1063 "pycode.l"
02248 {
02249                                          // Parses delimiters
02250                                          codify(pycodeYYtext);
02251                                     }
02252         YY_BREAK
02253 case 12:
02254 YY_RULE_SETUP
02255 #line 1068 "pycode.l"
02256 {
02257                                          codify(pycodeYYtext);
02258                                     }
02259         YY_BREAK
02260 case 13:
02261 YY_RULE_SETUP
02262 #line 1072 "pycode.l"
02263 {
02264                                          codify(pycodeYYtext);
02265                                     }
02266         YY_BREAK
02267 case 14:
02268 YY_RULE_SETUP
02269 #line 1076 "pycode.l"
02270 {
02271                                       codify(pycodeYYtext);
02272 
02273                                       // Assume this will
02274                                       // be a one-line suite;
02275                                       // found counter-example
02276                                       // in SuiteStart.
02277                                       g_noSuiteFound = TRUE;
02278                                       BEGIN( SuiteStart );
02279                                     }
02280         YY_BREAK
02281 
02282 
02283 case 15:
02284 YY_RULE_SETUP
02285 #line 1090 "pycode.l"
02286 {
02287                                  // Position-sensitive rules!
02288                                  // Must come AFTER keyword-triggered rules
02289                                  // Must come BEFORE identifier NONEMPTY-like rules
02290                                  //   to syntax highlight.
02291 
02292                                  startFontClass("keyword");
02293                                  codify(pycodeYYtext);
02294                                  endFontClass();
02295                                }
02296         YY_BREAK
02297 case 16:
02298 YY_RULE_SETUP
02299 #line 1101 "pycode.l"
02300 {
02301                                  startFontClass("keywordflow");
02302                                  codify(pycodeYYtext);
02303                                  endFontClass();
02304                                }
02305         YY_BREAK
02306 case 17:
02307 YY_RULE_SETUP
02308 #line 1107 "pycode.l"
02309 {
02310                                  codify(pycodeYYtext);
02311                                }
02312         YY_BREAK
02313 
02314 
02315 case 18:
02316 YY_RULE_SETUP
02317 #line 1116 "pycode.l"
02318 {
02319                                          codify(pycodeYYtext);
02320                                        }
02321         YY_BREAK
02322 case 19:
02323 YY_RULE_SETUP
02324 #line 1119 "pycode.l"
02325 {
02326                                           startFontClass("keyword");
02327                                           codifyLines(pycodeYYtext);
02328                                           endFontClass();
02329 
02330                                           // No indentation necesary
02331                                           g_noSuiteFound = FALSE;
02332                                        }
02333         YY_BREAK
02334 case 20:
02335 YY_RULE_SETUP
02336 #line 1128 "pycode.l"
02337 {
02338                                           startFontClass("keywordflow");
02339                                           codifyLines(pycodeYYtext);
02340                                           endFontClass();
02341 
02342                                           // No indentation necesary
02343                                           g_noSuiteFound = FALSE;
02344                                        }
02345         YY_BREAK
02346 case 21:
02347 YY_RULE_SETUP
02348 #line 1136 "pycode.l"
02349 {
02350                                          codify(pycodeYYtext);
02351                                        } 
02352         YY_BREAK
02353 case 22:
02354 YY_RULE_SETUP
02355 #line 1141 "pycode.l"
02356 {
02357                                           // This eats EVERYTHING
02358                                           // except the newline
02359                                           startFontClass("comment");
02360                                           codifyLines(pycodeYYtext);
02361                                           endFontClass();
02362                                        }
02363         YY_BREAK
02364 case 23:
02365 /* rule 23 can match eol */
02366 YY_RULE_SETUP
02367 #line 1149 "pycode.l"
02368 {
02369                                           codifyLines(pycodeYYtext);
02370                                           if ( g_noSuiteFound ) 
02371                                           {
02372                                             // printf("New suite to capture! [%d]\n", g_yyLineNr);
02373                                             BEGIN ( SuiteCaptureIndent );
02374                                           }
02375                                        }
02376         YY_BREAK
02377 
02378 
02379 case 24:
02380 /* rule 24 can match eol */
02381 YY_RULE_SETUP
02382 #line 1160 "pycode.l"
02383 {
02384                                  // Blankline - ignore, keep looking for indentation.
02385                                  codifyLines(pycodeYYtext);
02386                                }
02387         YY_BREAK
02388 case 25:
02389 YY_RULE_SETUP
02390 #line 1165 "pycode.l"
02391 {
02392                                  // This state lasts momentarily,
02393                                  // to check the indentation
02394                                  // level that is about to be
02395                                  // used.
02396                                  codifyLines(pycodeYYtext);
02397                                  g_indents.push(pycodeYYleng);
02398                                  // printf("Captured indent of %d [line %d]\n", pycodeYYleng, g_yyLineNr);
02399                                  BEGIN( Suite );
02400                                }
02401         YY_BREAK
02402 
02403 
02404 case 26:
02405 YY_RULE_SETUP
02406 #line 1179 "pycode.l"
02407 {
02408                                  // This implements poor
02409                                  // indendation-tracking;
02410                                  // should be improved.
02411                                  // (translate tabs to space, etc)
02412                                  codifyLines(pycodeYYtext);
02413                                  adjustScopesAndSuites(pycodeYYleng);
02414                                }
02415         YY_BREAK
02416 case 27:
02417 /* rule 27 can match eol */
02418 YY_RULE_SETUP
02419 #line 1188 "pycode.l"
02420 {
02421                                  // If this ever succeeds,
02422                                  // it means that this is
02423                                  // a blank line, and
02424                                  // can be ignored.
02425                                  codifyLines(pycodeYYtext);
02426                                }
02427         YY_BREAK
02428 case 28:
02429 YY_RULE_SETUP
02430 #line 1196 "pycode.l"
02431 {
02432                                  // Default rule; matches
02433                                  // the empty string, assuming
02434                                  // real text starts here.
02435                                  // Just go straight to Body.
02436                                  adjustScopesAndSuites(0);
02437                                }
02438         YY_BREAK
02439 
02440 case 29:
02441 /* rule 29 can match eol */
02442 YY_RULE_SETUP
02443 #line 1206 "pycode.l"
02444 {
02445                                  codifyLines(pycodeYYtext);
02446                                  BEGIN( SuiteMaintain );
02447                                }
02448         YY_BREAK
02449 case 30:
02450 YY_RULE_SETUP
02451 #line 1210 "pycode.l"
02452 {
02453                                  codify(pycodeYYtext);
02454                                }
02455         YY_BREAK
02456 case 31:
02457 /* rule 31 can match eol */
02458 YY_RULE_SETUP
02459 #line 1213 "pycode.l"
02460 {
02461                                  codifyLines(pycodeYYtext);
02462                                }
02463         YY_BREAK
02464 // Single quoted string like 'That\'s a """nice""" string!'
02465 case 32:
02466 /* rule 32 can match eol */
02467 YY_RULE_SETUP
02468 #line 1218 "pycode.l"
02469 { // line continuation
02470                                  codifyLines(pycodeYYtext);
02471                                }
02472         YY_BREAK
02473 case 33:
02474 YY_RULE_SETUP
02475 #line 1221 "pycode.l"
02476 { // espaced char
02477                                  codify(pycodeYYtext);
02478                                }
02479         YY_BREAK
02480 case 34:
02481 YY_RULE_SETUP
02482 #line 1224 "pycode.l"
02483 { // tripple double quotes
02484                                  codify(pycodeYYtext);
02485                                }
02486         YY_BREAK
02487 case 35:
02488 YY_RULE_SETUP
02489 #line 1227 "pycode.l"
02490 { // end of the string
02491                                  codify(pycodeYYtext);
02492                                  endFontClass();
02493                                  BEGIN(g_stringContext);
02494                                }
02495         YY_BREAK
02496 case 36:
02497 YY_RULE_SETUP
02498 #line 1232 "pycode.l"
02499 { // normal chars
02500                                  codify(pycodeYYtext);
02501                                }
02502         YY_BREAK
02503 case 37:
02504 YY_RULE_SETUP
02505 #line 1235 "pycode.l"
02506 { // normal char
02507                                  codify(pycodeYYtext);
02508                                }
02509         YY_BREAK
02510 
02511 // Double quoted string like "That's \"a '''nice'''\" string!"
02512 case 38:
02513 /* rule 38 can match eol */
02514 YY_RULE_SETUP
02515 #line 1241 "pycode.l"
02516 { // line continuation
02517                                  codifyLines(pycodeYYtext);
02518                                }
02519         YY_BREAK
02520 case 39:
02521 YY_RULE_SETUP
02522 #line 1244 "pycode.l"
02523 { // espaced char
02524                                  codify(pycodeYYtext);
02525                                }
02526         YY_BREAK
02527 case 40:
02528 YY_RULE_SETUP
02529 #line 1247 "pycode.l"
02530 { // tripple single quotes
02531                                  codify(pycodeYYtext);
02532                                }
02533         YY_BREAK
02534 case 41:
02535 YY_RULE_SETUP
02536 #line 1250 "pycode.l"
02537 { // end of the string
02538                                  codify(pycodeYYtext);
02539                                  endFontClass();
02540                                  BEGIN(g_stringContext);
02541                                }
02542         YY_BREAK
02543 case 42:
02544 YY_RULE_SETUP
02545 #line 1255 "pycode.l"
02546 { // normal chars
02547                                  codify(pycodeYYtext);
02548                                }
02549         YY_BREAK
02550 case 43:
02551 YY_RULE_SETUP
02552 #line 1258 "pycode.l"
02553 { // normal char
02554                                  codify(pycodeYYtext);
02555                                }
02556         YY_BREAK
02557 
02558 
02559 case 44:
02560 #line 1265 "pycode.l"
02561 case 45:
02562 YY_RULE_SETUP
02563 #line 1265 "pycode.l"
02564 {
02565                           codify(pycodeYYtext);
02566                           if (g_doubleQuote==(pycodeYYtext[0]=='"')) 
02567                           {
02568                             endFontClass();
02569                             BEGIN(g_stringContext);
02570                           }
02571                        }
02572         YY_BREAK
02573 case 46:
02574 /* rule 46 can match eol */
02575 YY_RULE_SETUP
02576 #line 1273 "pycode.l"
02577 {
02578                          codifyLines(pycodeYYtext);
02579                        }
02580         YY_BREAK
02581 case 47:
02582 /* rule 47 can match eol */
02583 YY_RULE_SETUP
02584 #line 1276 "pycode.l"
02585 {
02586                          codifyLines(pycodeYYtext);
02587                        }
02588         YY_BREAK
02589 case 48:
02590 YY_RULE_SETUP
02591 #line 1279 "pycode.l"
02592 {
02593                          codify(pycodeYYtext);
02594                        }
02595         YY_BREAK
02596 
02597 /*
02598 <*>({NONEMPTY}|{EXPCHAR}|{BB})           { // This should go one character at a time.
02599                                  codify(pycodeYYtext);
02600                                  // printf("[pycode] '%s' [ state %d ]  [line %d] no match\n",
02601                                  //       pycodeYYtext, YY_START, g_yyLineNr);
02602 
02603                                  //endFontClass();
02604                                  BEGIN(Body);                                   
02605                                }
02606    */
02607 case 49:
02608 #line 1296 "pycode.l"
02609 case 50:
02610 YY_RULE_SETUP
02611 #line 1296 "pycode.l"
02612 {
02613                                  startFontClass("stringliteral");
02614                                  g_stringContext=YY_START;
02615                                  g_doubleQuote=pycodeYYtext[pycodeYYleng-1]=='"';
02616                                  codify(pycodeYYtext);
02617                                  BEGIN(TripleString);
02618                                }
02619         YY_BREAK
02620 case 51:
02621 YY_RULE_SETUP
02622 #line 1303 "pycode.l"
02623 { // single quoted string
02624                                  startFontClass("stringliteral");
02625                                  g_stringContext=YY_START;
02626                                  codify(pycodeYYtext);
02627                                  BEGIN(SingleQuoteString);
02628                                }
02629         YY_BREAK
02630 case 52:
02631 YY_RULE_SETUP
02632 #line 1309 "pycode.l"
02633 { // double quoted string
02634                                  startFontClass("stringliteral");
02635                                  g_stringContext=YY_START;
02636                                  codify(pycodeYYtext);
02637                                  BEGIN(DoubleQuoteString);
02638                                }
02639         YY_BREAK
02640 case 53:
02641 YY_RULE_SETUP
02642 #line 1315 "pycode.l"
02643 {
02644                                  if (YY_START==SingleQuoteString || 
02645                                      YY_START==DoubleQuoteString || 
02646                                      YY_START==TripleString
02647                                     )
02648                                  {
02649                                    REJECT;
02650                                  }
02651                                  // This eats EVERYTHING
02652                                  // except the newline
02653                                  startFontClass("comment");
02654                                  codifyLines(pycodeYYtext);
02655                                  endFontClass();
02656                                }
02657         YY_BREAK
02658 case 54:
02659 /* rule 54 can match eol */
02660 YY_RULE_SETUP
02661 #line 1329 "pycode.l"
02662 {
02663                                  codifyLines(pycodeYYtext);
02664                                  //printf("[pycode] %d NEWLINE [line %d] no match\n",
02665                                  //       YY_START, g_yyLineNr);
02666 
02667                                  //endFontClass();
02668                                  BEGIN(Body);
02669                                }
02670         YY_BREAK
02671 case 55:
02672 YY_RULE_SETUP
02673 #line 1338 "pycode.l"
02674 {
02675                                  codify(pycodeYYtext);
02676                                  // printf("[pycode] '%s' [ state %d ]  [line %d] no match\n",
02677                                  //        pycodeYYtext, YY_START, g_yyLineNr);
02678 
02679                                  //endFontClass();
02680                                  BEGIN(Body);                                   
02681                                }
02682         YY_BREAK
02683 case 56:
02684 YY_RULE_SETUP
02685 #line 1347 "pycode.l"
02686 ECHO;
02687         YY_BREAK
02688 #line 2689 "<stdout>"
02689                         case YY_STATE_EOF(INITIAL):
02690                         case YY_STATE_EOF(Body):
02691                         case YY_STATE_EOF(FunctionDec):
02692                         case YY_STATE_EOF(FunctionParams):
02693                         case YY_STATE_EOF(ClassDec):
02694                         case YY_STATE_EOF(ClassInheritance):
02695                         case YY_STATE_EOF(Suite):
02696                         case YY_STATE_EOF(SuiteCaptureIndent):
02697                         case YY_STATE_EOF(SuiteStart):
02698                         case YY_STATE_EOF(SuiteMaintain):
02699                         case YY_STATE_EOF(SuiteContinuing):
02700                         case YY_STATE_EOF(LongString):
02701                         case YY_STATE_EOF(SingleQuoteString):
02702                         case YY_STATE_EOF(DoubleQuoteString):
02703                         case YY_STATE_EOF(TripleString):
02704                                 yyterminate();
02705 
02706         case YY_END_OF_BUFFER:
02707                 {
02708                 /* Amount of text matched not including the EOB char. */
02709                 int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
02710 
02711                 /* Undo the effects of YY_DO_BEFORE_ACTION. */
02712                 *yy_cp = (yy_hold_char);
02713                 YY_RESTORE_YY_MORE_OFFSET
02714 
02715                 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
02716                         {
02717                         /* We're scanning a new file or input source.  It's
02718                          * possible that this happened because the user
02719                          * just pointed pycodeYYin at a new source and called
02720                          * pycodeYYlex().  If so, then we have to assure
02721                          * consistency between YY_CURRENT_BUFFER and our
02722                          * globals.  Here is the right place to do so, because
02723                          * this is the first action (other than possibly a
02724                          * back-up) that will match for the new input source.
02725                          */
02726                         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
02727                         YY_CURRENT_BUFFER_LVALUE->yy_input_file = pycodeYYin;
02728                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
02729                         }
02730 
02731                 /* Note that here we test for yy_c_buf_p "<=" to the position
02732                  * of the first EOB in the buffer, since yy_c_buf_p will
02733                  * already have been incremented past the NUL character
02734                  * (since all states make transitions on EOB to the
02735                  * end-of-buffer state).  Contrast this with the test
02736                  * in input().
02737                  */
02738                 if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
02739                         { /* This was really a NUL. */
02740                         yy_state_type yy_next_state;
02741 
02742                         (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
02743 
02744                         yy_current_state = yy_get_previous_state(  );
02745 
02746                         /* Okay, we're now positioned to make the NUL
02747                          * transition.  We couldn't have
02748                          * yy_get_previous_state() go ahead and do it
02749                          * for us because it doesn't know how to deal
02750                          * with the possibility of jamming (and we don't
02751                          * want to build jamming into it because then it
02752                          * will run more slowly).
02753                          */
02754 
02755                         yy_next_state = yy_try_NUL_trans( yy_current_state );
02756 
02757                         yy_bp = (yytext_ptr) + YY_MORE_ADJ;
02758 
02759                         if ( yy_next_state )
02760                                 {
02761                                 /* Consume the NUL. */
02762                                 yy_cp = ++(yy_c_buf_p);
02763                                 yy_current_state = yy_next_state;
02764                                 goto yy_match;
02765                                 }
02766 
02767                         else
02768                                 {
02769                                 yy_cp = (yy_c_buf_p);
02770                                 goto yy_find_action;
02771                                 }
02772                         }
02773 
02774                 else switch ( yy_get_next_buffer(  ) )
02775                         {
02776                         case EOB_ACT_END_OF_FILE:
02777                                 {
02778                                 (yy_did_buffer_switch_on_eof) = 0;
02779 
02780                                 if ( pycodeYYwrap( ) )
02781                                         {
02782                                         /* Note: because we've taken care in
02783                                          * yy_get_next_buffer() to have set up
02784                                          * pycodeYYtext, we can now set up
02785                                          * yy_c_buf_p so that if some total
02786                                          * hoser (like flex itself) wants to
02787                                          * call the scanner after we return the
02788                                          * YY_NULL, it'll still work - another
02789                                          * YY_NULL will get returned.
02790                                          */
02791                                         (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
02792 
02793                                         yy_act = YY_STATE_EOF(YY_START);
02794                                         goto do_action;
02795                                         }
02796 
02797                                 else
02798                                         {
02799                                         if ( ! (yy_did_buffer_switch_on_eof) )
02800                                                 YY_NEW_FILE;
02801                                         }
02802                                 break;
02803                                 }
02804 
02805                         case EOB_ACT_CONTINUE_SCAN:
02806                                 (yy_c_buf_p) =
02807                                         (yytext_ptr) + yy_amount_of_matched_text;
02808 
02809                                 yy_current_state = yy_get_previous_state(  );
02810 
02811                                 yy_cp = (yy_c_buf_p);
02812                                 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
02813                                 goto yy_match;
02814 
02815                         case EOB_ACT_LAST_MATCH:
02816                                 (yy_c_buf_p) =
02817                                 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
02818 
02819                                 yy_current_state = yy_get_previous_state(  );
02820 
02821                                 yy_cp = (yy_c_buf_p);
02822                                 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
02823                                 goto yy_find_action;
02824                         }
02825                 break;
02826                 }
02827 
02828         default:
02829                 YY_FATAL_ERROR(
02830                         "fatal flex scanner internal error--no action found" );
02831         } /* end of action switch */
02832                 } /* end of scanning one token */
02833 } /* end of pycodeYYlex */
02834 
02835 /* yy_get_next_buffer - try to read in a new buffer
02836  *
02837  * Returns a code representing an action:
02838  *      EOB_ACT_LAST_MATCH -
02839  *      EOB_ACT_CONTINUE_SCAN - continue scanning from current position
02840  *      EOB_ACT_END_OF_FILE - end of file
02841  */
02842 static int yy_get_next_buffer (void)
02843 {
02844         register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
02845         register char *source = (yytext_ptr);
02846         register int number_to_move, i;
02847         int ret_val;
02848 
02849         if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
02850                 YY_FATAL_ERROR(
02851                 "fatal flex scanner internal error--end of buffer missed" );
02852 
02853         if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
02854                 { /* Don't try to fill the buffer, so this is an EOF. */
02855                 if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
02856                         {
02857                         /* We matched a single character, the EOB, so
02858                          * treat this as a final EOF.
02859                          */
02860                         return EOB_ACT_END_OF_FILE;
02861                         }
02862 
02863                 else
02864                         {
02865                         /* We matched some text prior to the EOB, first
02866                          * process it.
02867                          */
02868                         return EOB_ACT_LAST_MATCH;
02869                         }
02870                 }
02871 
02872         /* Try to read more data. */
02873 
02874         /* First move last chars to start of buffer. */
02875         number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
02876 
02877         for ( i = 0; i < number_to_move; ++i )
02878                 *(dest++) = *(source++);
02879 
02880         if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
02881                 /* don't do the read, it's not guaranteed to return an EOF,
02882                  * just force an EOF
02883                  */
02884                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
02885 
02886         else
02887                 {
02888                         int num_to_read =
02889                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
02890 
02891                 while ( num_to_read <= 0 )
02892                         { /* Not enough room in the buffer - grow it. */
02893 
02894                         YY_FATAL_ERROR(
02895 "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
02896 
02897                         }
02898 
02899                 if ( num_to_read > YY_READ_BUF_SIZE )
02900                         num_to_read = YY_READ_BUF_SIZE;
02901 
02902                 /* Read in more data. */
02903                 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
02904                         (yy_n_chars), num_to_read );
02905 
02906                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
02907                 }
02908 
02909         if ( (yy_n_chars) == 0 )
02910                 {
02911                 if ( number_to_move == YY_MORE_ADJ )
02912                         {
02913                         ret_val = EOB_ACT_END_OF_FILE;
02914                         pycodeYYrestart(pycodeYYin  );
02915                         }
02916 
02917                 else
02918                         {
02919                         ret_val = EOB_ACT_LAST_MATCH;
02920                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
02921                                 YY_BUFFER_EOF_PENDING;
02922                         }
02923                 }
02924 
02925         else
02926                 ret_val = EOB_ACT_CONTINUE_SCAN;
02927 
02928         (yy_n_chars) += number_to_move;
02929         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
02930         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
02931 
02932         (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
02933 
02934         return ret_val;
02935 }
02936 
02937 /* yy_get_previous_state - get the state just before the EOB char was reached */
02938 
02939     static yy_state_type yy_get_previous_state (void)
02940 {
02941         register yy_state_type yy_current_state;
02942         register char *yy_cp;
02943     
02944         yy_current_state = (yy_start);
02945 
02946         (yy_state_ptr) = (yy_state_buf);
02947         *(yy_state_ptr)++ = yy_current_state;
02948 
02949         for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
02950                 {
02951                 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
02952                 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
02953                         {
02954                         yy_current_state = (int) yy_def[yy_current_state];
02955                         if ( yy_current_state >= 489 )
02956                                 yy_c = yy_meta[(unsigned int) yy_c];
02957                         }
02958                 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
02959                 *(yy_state_ptr)++ = yy_current_state;
02960                 }
02961 
02962         return yy_current_state;
02963 }
02964 
02965 /* yy_try_NUL_trans - try to make a transition on the NUL character
02966  *
02967  * synopsis
02968  *      next_state = yy_try_NUL_trans( current_state );
02969  */
02970     static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
02971 {
02972         register int yy_is_jam;
02973     
02974         register YY_CHAR yy_c = 1;
02975         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
02976                 {
02977                 yy_current_state = (int) yy_def[yy_current_state];
02978                 if ( yy_current_state >= 489 )
02979                         yy_c = yy_meta[(unsigned int) yy_c];
02980                 }
02981         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
02982         yy_is_jam = (yy_current_state == 488);
02983         if ( ! yy_is_jam )
02984                 *(yy_state_ptr)++ = yy_current_state;
02985 
02986         return yy_is_jam ? 0 : yy_current_state;
02987 }
02988 
02989 #ifndef YY_NO_INPUT
02990 #ifdef __cplusplus
02991     static int yyinput (void)
02992 #else
02993     static int input  (void)
02994 #endif
02995 
02996 {
02997         int c;
02998     
02999         *(yy_c_buf_p) = (yy_hold_char);
03000 
03001         if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
03002                 {
03003                 /* yy_c_buf_p now points to the character we want to return.
03004                  * If this occurs *before* the EOB characters, then it's a
03005                  * valid NUL; if not, then we've hit the end of the buffer.
03006                  */
03007                 if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
03008                         /* This was really a NUL. */
03009                         *(yy_c_buf_p) = '\0';
03010 
03011                 else
03012                         { /* need more input */
03013                         int offset = (yy_c_buf_p) - (yytext_ptr);
03014                         ++(yy_c_buf_p);
03015 
03016                         switch ( yy_get_next_buffer(  ) )
03017                                 {
03018                                 case EOB_ACT_LAST_MATCH:
03019                                         /* This happens because yy_g_n_b()
03020                                          * sees that we've accumulated a
03021                                          * token and flags that we need to
03022                                          * try matching the token before
03023                                          * proceeding.  But for input(),
03024                                          * there's no matching to consider.
03025                                          * So convert the EOB_ACT_LAST_MATCH
03026                                          * to EOB_ACT_END_OF_FILE.
03027                                          */
03028 
03029                                         /* Reset buffer status. */
03030                                         pycodeYYrestart(pycodeYYin );
03031 
03032                                         /*FALLTHROUGH*/
03033 
03034                                 case EOB_ACT_END_OF_FILE:
03035                                         {
03036                                         if ( pycodeYYwrap( ) )
03037                                                 return 0;
03038 
03039                                         if ( ! (yy_did_buffer_switch_on_eof) )
03040                                                 YY_NEW_FILE;
03041 #ifdef __cplusplus
03042                                         return yyinput();
03043 #else
03044                                         return input();
03045 #endif
03046                                         }
03047 
03048                                 case EOB_ACT_CONTINUE_SCAN:
03049                                         (yy_c_buf_p) = (yytext_ptr) + offset;
03050                                         break;
03051                                 }
03052                         }
03053                 }
03054 
03055         c = *(unsigned char *) (yy_c_buf_p);    /* cast for 8-bit char's */
03056         *(yy_c_buf_p) = '\0';   /* preserve pycodeYYtext */
03057         (yy_hold_char) = *++(yy_c_buf_p);
03058 
03059         return c;
03060 }
03061 #endif  /* ifndef YY_NO_INPUT */
03062 
03068     void pycodeYYrestart  (FILE * input_file )
03069 {
03070     
03071         if ( ! YY_CURRENT_BUFFER ){
03072         pycodeYYensure_buffer_stack ();
03073                 YY_CURRENT_BUFFER_LVALUE =
03074             pycodeYY_create_buffer(pycodeYYin,YY_BUF_SIZE );
03075         }
03076 
03077         pycodeYY_init_buffer(YY_CURRENT_BUFFER,input_file );
03078         pycodeYY_load_buffer_state( );
03079 }
03080 
03085     void pycodeYY_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
03086 {
03087     
03088         /* TODO. We should be able to replace this entire function body
03089          * with
03090          *              pycodeYYpop_buffer_state();
03091          *              pycodeYYpush_buffer_state(new_buffer);
03092      */
03093         pycodeYYensure_buffer_stack ();
03094         if ( YY_CURRENT_BUFFER == new_buffer )
03095                 return;
03096 
03097         if ( YY_CURRENT_BUFFER )
03098                 {
03099                 /* Flush out information for old buffer. */
03100                 *(yy_c_buf_p) = (yy_hold_char);
03101                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
03102                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
03103                 }
03104 
03105         YY_CURRENT_BUFFER_LVALUE = new_buffer;
03106         pycodeYY_load_buffer_state( );
03107 
03108         /* We don't actually know whether we did this switch during
03109          * EOF (pycodeYYwrap()) processing, but the only time this flag
03110          * is looked at is after pycodeYYwrap() is called, so it's safe
03111          * to go ahead and always set it.
03112          */
03113         (yy_did_buffer_switch_on_eof) = 1;
03114 }
03115 
03116 static void pycodeYY_load_buffer_state  (void)
03117 {
03118         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
03119         (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
03120         pycodeYYin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
03121         (yy_hold_char) = *(yy_c_buf_p);
03122 }
03123 
03130     YY_BUFFER_STATE pycodeYY_create_buffer  (FILE * file, int  size )
03131 {
03132         YY_BUFFER_STATE b;
03133     
03134         b = (YY_BUFFER_STATE) pycodeYYalloc(sizeof( struct yy_buffer_state )  );
03135         if ( ! b )
03136                 YY_FATAL_ERROR( "out of dynamic memory in pycodeYY_create_buffer()" );
03137 
03138         b->yy_buf_size = size;
03139 
03140         /* yy_ch_buf has to be 2 characters longer than the size given because
03141          * we need to put in 2 end-of-buffer characters.
03142          */
03143         b->yy_ch_buf = (char *) pycodeYYalloc(b->yy_buf_size + 2  );
03144         if ( ! b->yy_ch_buf )
03145                 YY_FATAL_ERROR( "out of dynamic memory in pycodeYY_create_buffer()" );
03146 
03147         b->yy_is_our_buffer = 1;
03148 
03149         pycodeYY_init_buffer(b,file );
03150 
03151         return b;
03152 }
03153 
03158     void pycodeYY_delete_buffer (YY_BUFFER_STATE  b )
03159 {
03160     
03161         if ( ! b )
03162                 return;
03163 
03164         if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
03165                 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
03166 
03167         if ( b->yy_is_our_buffer )
03168                 pycodeYYfree((void *) b->yy_ch_buf  );
03169 
03170         pycodeYYfree((void *) b  );
03171 }
03172 
03173 #ifndef __cplusplus
03174 extern int isatty (int );
03175 #endif /* __cplusplus */
03176     
03177 /* Initializes or reinitializes a buffer.
03178  * This function is sometimes called more than once on the same buffer,
03179  * such as during a pycodeYYrestart() or at EOF.
03180  */
03181     static void pycodeYY_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
03182 
03183 {
03184         int oerrno = errno;
03185     
03186         pycodeYY_flush_buffer(b );
03187 
03188         b->yy_input_file = file;
03189         b->yy_fill_buffer = 1;
03190 
03191     /* If b is the current buffer, then pycodeYY_init_buffer was _probably_
03192      * called from pycodeYYrestart() or through yy_get_next_buffer.
03193      * In that case, we don't want to reset the lineno or column.
03194      */
03195     if (b != YY_CURRENT_BUFFER){
03196         b->yy_bs_lineno = 1;
03197         b->yy_bs_column = 0;
03198     }
03199 
03200         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
03201     
03202         errno = oerrno;
03203 }
03204 
03209     void pycodeYY_flush_buffer (YY_BUFFER_STATE  b )
03210 {
03211         if ( ! b )
03212                 return;
03213 
03214         b->yy_n_chars = 0;
03215 
03216         /* We always need two end-of-buffer characters.  The first causes
03217          * a transition to the end-of-buffer state.  The second causes
03218          * a jam in that state.
03219          */
03220         b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
03221         b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
03222 
03223         b->yy_buf_pos = &b->yy_ch_buf[0];
03224 
03225         b->yy_at_bol = 1;
03226         b->yy_buffer_status = YY_BUFFER_NEW;
03227 
03228         if ( b == YY_CURRENT_BUFFER )
03229                 pycodeYY_load_buffer_state( );
03230 }
03231 
03238 void pycodeYYpush_buffer_state (YY_BUFFER_STATE new_buffer )
03239 {
03240         if (new_buffer == NULL)
03241                 return;
03242 
03243         pycodeYYensure_buffer_stack();
03244 
03245         /* This block is copied from pycodeYY_switch_to_buffer. */
03246         if ( YY_CURRENT_BUFFER )
03247                 {
03248                 /* Flush out information for old buffer. */
03249                 *(yy_c_buf_p) = (yy_hold_char);
03250                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
03251                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
03252                 }
03253 
03254         /* Only push if top exists. Otherwise, replace top. */
03255         if (YY_CURRENT_BUFFER)
03256                 (yy_buffer_stack_top)++;
03257         YY_CURRENT_BUFFER_LVALUE = new_buffer;
03258 
03259         /* copied from pycodeYY_switch_to_buffer. */
03260         pycodeYY_load_buffer_state( );
03261         (yy_did_buffer_switch_on_eof) = 1;
03262 }
03263 
03268 void pycodeYYpop_buffer_state (void)
03269 {
03270         if (!YY_CURRENT_BUFFER)
03271                 return;
03272 
03273         pycodeYY_delete_buffer(YY_CURRENT_BUFFER );
03274         YY_CURRENT_BUFFER_LVALUE = NULL;
03275         if ((yy_buffer_stack_top) > 0)
03276                 --(yy_buffer_stack_top);
03277 
03278         if (YY_CURRENT_BUFFER) {
03279                 pycodeYY_load_buffer_state( );
03280                 (yy_did_buffer_switch_on_eof) = 1;
03281         }
03282 }
03283 
03284 /* Allocates the stack if it does not exist.
03285  *  Guarantees space for at least one push.
03286  */
03287 static void pycodeYYensure_buffer_stack (void)
03288 {
03289         int num_to_alloc;
03290     
03291         if (!(yy_buffer_stack)) {
03292 
03293                 /* First allocation is just for 2 elements, since we don't know if this
03294                  * scanner will even need a stack. We use 2 instead of 1 to avoid an
03295                  * immediate realloc on the next call.
03296          */
03297                 num_to_alloc = 1;
03298                 (yy_buffer_stack) = (struct yy_buffer_state**)pycodeYYalloc
03299                                                                 (num_to_alloc * sizeof(struct yy_buffer_state*)
03300                                                                 );
03301                 
03302                 memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
03303                                 
03304                 (yy_buffer_stack_max) = num_to_alloc;
03305                 (yy_buffer_stack_top) = 0;
03306                 return;
03307         }
03308 
03309         if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
03310 
03311                 /* Increase the buffer to prepare for a possible push. */
03312                 int grow_size = 8 /* arbitrary grow size */;
03313 
03314                 num_to_alloc = (yy_buffer_stack_max) + grow_size;
03315                 (yy_buffer_stack) = (struct yy_buffer_state**)pycodeYYrealloc
03316                                                                 ((yy_buffer_stack),
03317                                                                 num_to_alloc * sizeof(struct yy_buffer_state*)
03318                                                                 );
03319 
03320                 /* zero only the new slots.*/
03321                 memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
03322                 (yy_buffer_stack_max) = num_to_alloc;
03323         }
03324 }
03325 
03332 YY_BUFFER_STATE pycodeYY_scan_buffer  (char * base, yy_size_t  size )
03333 {
03334         YY_BUFFER_STATE b;
03335     
03336         if ( size < 2 ||
03337              base[size-2] != YY_END_OF_BUFFER_CHAR ||
03338              base[size-1] != YY_END_OF_BUFFER_CHAR )
03339                 /* They forgot to leave room for the EOB's. */
03340                 return 0;
03341 
03342         b = (YY_BUFFER_STATE) pycodeYYalloc(sizeof( struct yy_buffer_state )  );
03343         if ( ! b )
03344                 YY_FATAL_ERROR( "out of dynamic memory in pycodeYY_scan_buffer()" );
03345 
03346         b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
03347         b->yy_buf_pos = b->yy_ch_buf = base;
03348         b->yy_is_our_buffer = 0;
03349         b->yy_input_file = 0;
03350         b->yy_n_chars = b->yy_buf_size;
03351         b->yy_is_interactive = 0;
03352         b->yy_at_bol = 1;
03353         b->yy_fill_buffer = 0;
03354         b->yy_buffer_status = YY_BUFFER_NEW;
03355 
03356         pycodeYY_switch_to_buffer(b  );
03357 
03358         return b;
03359 }
03360 
03369 YY_BUFFER_STATE pycodeYY_scan_string (yyconst char * yystr )
03370 {
03371     
03372         return pycodeYY_scan_bytes(yystr,strlen(yystr) );
03373 }
03374 
03382 YY_BUFFER_STATE pycodeYY_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
03383 {
03384         YY_BUFFER_STATE b;
03385         char *buf;
03386         yy_size_t n;
03387         int i;
03388     
03389         /* Get memory for full buffer, including space for trailing EOB's. */
03390         n = _yybytes_len + 2;
03391         buf = (char *) pycodeYYalloc(n  );
03392         if ( ! buf )
03393                 YY_FATAL_ERROR( "out of dynamic memory in pycodeYY_scan_bytes()" );
03394 
03395         for ( i = 0; i < _yybytes_len; ++i )
03396                 buf[i] = yybytes[i];
03397 
03398         buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
03399 
03400         b = pycodeYY_scan_buffer(buf,n );
03401         if ( ! b )
03402                 YY_FATAL_ERROR( "bad buffer in pycodeYY_scan_bytes()" );
03403 
03404         /* It's okay to grow etc. this buffer, and we should throw it
03405          * away when we're done.
03406          */
03407         b->yy_is_our_buffer = 1;
03408 
03409         return b;
03410 }
03411 
03412 #ifndef YY_EXIT_FAILURE
03413 #define YY_EXIT_FAILURE 2
03414 #endif
03415 
03416 static void yy_fatal_error (yyconst char* msg )
03417 {
03418         (void) fprintf( stderr, "%s\n", msg );
03419         exit( YY_EXIT_FAILURE );
03420 }
03421 
03422 /* Redefine yyless() so it works in section 3 code. */
03423 
03424 #undef yyless
03425 #define yyless(n) \
03426         do \
03427                 { \
03428                 /* Undo effects of setting up pycodeYYtext. */ \
03429         int yyless_macro_arg = (n); \
03430         YY_LESS_LINENO(yyless_macro_arg);\
03431                 pycodeYYtext[pycodeYYleng] = (yy_hold_char); \
03432                 (yy_c_buf_p) = pycodeYYtext + yyless_macro_arg; \
03433                 (yy_hold_char) = *(yy_c_buf_p); \
03434                 *(yy_c_buf_p) = '\0'; \
03435                 pycodeYYleng = yyless_macro_arg; \
03436                 } \
03437         while ( 0 )
03438 
03439 /* Accessor  methods (get/set functions) to struct members. */
03440 
03444 int pycodeYYget_lineno  (void)
03445 {
03446         
03447     return pycodeYYlineno;
03448 }
03449 
03453 FILE *pycodeYYget_in  (void)
03454 {
03455         return pycodeYYin;
03456 }
03457 
03461 FILE *pycodeYYget_out  (void)
03462 {
03463         return pycodeYYout;
03464 }
03465 
03469 int pycodeYYget_leng  (void)
03470 {
03471         return pycodeYYleng;
03472 }
03473 
03478 char *pycodeYYget_text  (void)
03479 {
03480         return pycodeYYtext;
03481 }
03482 
03487 void pycodeYYset_lineno (int  line_number )
03488 {
03489     
03490     pycodeYYlineno = line_number;
03491 }
03492 
03499 void pycodeYYset_in (FILE *  in_str )
03500 {
03501         pycodeYYin = in_str ;
03502 }
03503 
03504 void pycodeYYset_out (FILE *  out_str )
03505 {
03506         pycodeYYout = out_str ;
03507 }
03508 
03509 int pycodeYYget_debug  (void)
03510 {
03511         return pycodeYY_flex_debug;
03512 }
03513 
03514 void pycodeYYset_debug (int  bdebug )
03515 {
03516         pycodeYY_flex_debug = bdebug ;
03517 }
03518 
03519 static int yy_init_globals (void)
03520 {
03521         /* Initialization is the same as for the non-reentrant scanner.
03522      * This function is called from pycodeYYlex_destroy(), so don't allocate here.
03523      */
03524 
03525     (yy_buffer_stack) = 0;
03526     (yy_buffer_stack_top) = 0;
03527     (yy_buffer_stack_max) = 0;
03528     (yy_c_buf_p) = (char *) 0;
03529     (yy_init) = 0;
03530     (yy_start) = 0;
03531 
03532     (yy_state_buf) = 0;
03533     (yy_state_ptr) = 0;
03534     (yy_full_match) = 0;
03535     (yy_lp) = 0;
03536 
03537 /* Defined in main.c */
03538 #ifdef YY_STDINIT
03539     pycodeYYin = stdin;
03540     pycodeYYout = stdout;
03541 #else
03542     pycodeYYin = (FILE *) 0;
03543     pycodeYYout = (FILE *) 0;
03544 #endif
03545 
03546     /* For future reference: Set errno on error, since we are called by
03547      * pycodeYYlex_init()
03548      */
03549     return 0;
03550 }
03551 
03552 /* pycodeYYlex_destroy is for both reentrant and non-reentrant scanners. */
03553 int pycodeYYlex_destroy  (void)
03554 {
03555     
03556     /* Pop the buffer stack, destroying each element. */
03557         while(YY_CURRENT_BUFFER){
03558                 pycodeYY_delete_buffer(YY_CURRENT_BUFFER  );
03559                 YY_CURRENT_BUFFER_LVALUE = NULL;
03560                 pycodeYYpop_buffer_state();
03561         }
03562 
03563         /* Destroy the stack itself. */
03564         pycodeYYfree((yy_buffer_stack) );
03565         (yy_buffer_stack) = NULL;
03566 
03567     pycodeYYfree ( (yy_state_buf) );
03568     (yy_state_buf)  = NULL;
03569 
03570     /* Reset the globals. This is important in a non-reentrant scanner so the next time
03571      * pycodeYYlex() is called, initialization will occur. */
03572     yy_init_globals( );
03573 
03574     return 0;
03575 }
03576 
03577 /*
03578  * Internal utility routines.
03579  */
03580 
03581 #ifndef yytext_ptr
03582 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
03583 {
03584         register int i;
03585         for ( i = 0; i < n; ++i )
03586                 s1[i] = s2[i];
03587 }
03588 #endif
03589 
03590 #ifdef YY_NEED_STRLEN
03591 static int yy_flex_strlen (yyconst char * s )
03592 {
03593         register int n;
03594         for ( n = 0; s[n]; ++n )
03595                 ;
03596 
03597         return n;
03598 }
03599 #endif
03600 
03601 void *pycodeYYalloc (yy_size_t  size )
03602 {
03603         return (void *) malloc( size );
03604 }
03605 
03606 void *pycodeYYrealloc  (void * ptr, yy_size_t  size )
03607 {
03608         /* The cast to (char *) in the following accommodates both
03609          * implementations that use char* generic pointers, and those
03610          * that use void* generic pointers.  It works with the latter
03611          * because both ANSI C and C++ allow castless assignment from
03612          * any pointer type to void*, and deal with argument conversions
03613          * as though doing an assignment.
03614          */
03615         return (void *) realloc( (char *) ptr, size );
03616 }
03617 
03618 void pycodeYYfree (void * ptr )
03619 {
03620         free( (char *) ptr );   /* see pycodeYYrealloc() for (char *) cast */
03621 }
03622 
03623 #define YYTABLES_NAME "yytables"
03624 
03625 #line 1347 "pycode.l"
03626 
03627 
03628 
03629 /*@ ----------------------------------------------------------------------------
03630  */
03631 
03632 void resetPythonCodeParserState() 
03633 {
03634   g_currentDefinition = 0;
03635   g_currentMemberDef = 0;
03636   g_doubleStringIsDoc = FALSE;
03637   g_paramParens = 0;
03638   g_indents.clear();
03639   BEGIN( Body );
03640 }
03641 
03646 static void adjustScopesAndSuites(unsigned indentLength) 
03647 {
03648   // States to pop
03649   if (!g_indents.isEmpty() && indentLength < g_indents.top()) 
03650   {
03651     while (!g_indents.isEmpty() && indentLength < g_indents.top()) 
03652     {
03653       // printf("Exited scope indent of [%d]\n", g_indents.top());
03654       g_indents.pop(); // Pop the old suite's indentation
03655 
03656       g_currentMemberDef=0;
03657       if (g_currentDefinition) 
03658         g_currentDefinition=g_currentDefinition->getOuterScope();
03659     }
03660   }
03661 
03662   // Are there any remaining indentation levels for suites?
03663   if (!g_indents.isEmpty()) 
03664   {
03665     BEGIN( Suite );
03666   }
03667   else 
03668   {
03669     BEGIN( Body );
03670   }
03671 }
03672 
03673 void parsePythonCode(CodeOutputInterface &od,const char *className,
03674                  const QCString &s,bool exBlock, const char *exName,
03675                  FileDef *fd,int startLine,int endLine,bool inlineFragment,
03676                  MemberDef *) 
03677 {
03678 
03679   //printf("***parseCode()\n");
03680   
03681   //--- some code to eliminate warnings---
03682   className = "";
03683   exBlock = FALSE;
03684   exName = "";
03685   inlineFragment = "";
03686   //--------------------------------------
03687   if (s.isEmpty()) return;
03688   g_code = &od;
03689   g_inputString   = s;
03690   g_inputPosition = 0;
03691   g_currentFontClass = 0;
03692   g_needsTermination = FALSE;
03693   if (endLine!=-1)
03694     g_inputLines  = endLine+1;
03695   else
03696     g_inputLines  = countLines();
03697   
03698   if (startLine!=-1)
03699     g_yyLineNr    = startLine;
03700   else
03701     g_yyLineNr    = 1;
03702   
03703   g_exampleBlock  = exBlock; 
03704   g_exampleName   = exName;
03705   g_sourceFileDef = fd;
03706 
03707 
03708   // Starts line 1 on the output  
03709   startCodeLine();
03710 
03711   pycodeYYrestart( pycodeYYin );
03712 
03713   pycodeYYlex();
03714 
03715   if (!g_indents.isEmpty()) 
03716   {
03717     // printf("Exited pysourceparser in inconsistent state!\n");
03718   }
03719 
03720   if (g_needsTermination)
03721   {
03722     endFontClass();
03723     g_code->endCodeLine();
03724   }
03725   return;
03726 }
03727 
03728 
03729 #if !defined(YY_FLEX_SUBMINOR_VERSION) 
03730 extern "C" { // some bogus code to keep the compiler happy
03731   void pycodeYYdummy() { yy_flex_realloc(0,0); } 
03732 }
03733 #elif YY_FLEX_SUBMINOR_VERSION<33
03734 #error "You seem to be using a version of flex newer than 2.5.4. These are currently incompatible with 2.5.4, and do NOT work with doxygen! Please use version 2.5.4 or expect things to be parsed wrongly! A bug report has been submitted (#732132)."
03735 #endif
03736 
03737 



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