pycode.cpp
Go to the documentation of this file.
1 #line 2 "/nova/app/home/novasoft/doxygen/doxygen-1.8.11/build/generated_src/pycode.cpp"
2 
3 #line 4 "/nova/app/home/novasoft/doxygen/doxygen-1.8.11/build/generated_src/pycode.cpp"
4 
5 #define YY_INT_ALIGNED short int
6 
7 /* A lexical scanner generated by flex */
8 
9 #define yy_create_buffer pycodeYY_create_buffer
10 #define yy_delete_buffer pycodeYY_delete_buffer
11 #define yy_flex_debug pycodeYY_flex_debug
12 #define yy_init_buffer pycodeYY_init_buffer
13 #define yy_flush_buffer pycodeYY_flush_buffer
14 #define yy_load_buffer_state pycodeYY_load_buffer_state
15 #define yy_switch_to_buffer pycodeYY_switch_to_buffer
16 #define yyin pycodeYYin
17 #define yyleng pycodeYYleng
18 #define yylex pycodeYYlex
19 #define yylineno pycodeYYlineno
20 #define yyout pycodeYYout
21 #define yyrestart pycodeYYrestart
22 #define yytext pycodeYYtext
23 #define yywrap pycodeYYwrap
24 #define yyalloc pycodeYYalloc
25 #define yyrealloc pycodeYYrealloc
26 #define yyfree pycodeYYfree
27 
28 #define FLEX_SCANNER
29 #define YY_FLEX_MAJOR_VERSION 2
30 #define YY_FLEX_MINOR_VERSION 5
31 #define YY_FLEX_SUBMINOR_VERSION 35
32 #if YY_FLEX_SUBMINOR_VERSION > 0
33 #define FLEX_BETA
34 #endif
35 
36 /* First, we deal with platform-specific or compiler-specific issues. */
37 
38 /* begin standard C headers. */
39 #include <stdio.h>
40 #include <string.h>
41 #include <errno.h>
42 #include <stdlib.h>
43 
44 /* end standard C headers. */
45 
46 /* flex integer type definitions */
47 
48 #ifndef FLEXINT_H
49 #define FLEXINT_H
50 
51 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
52 
53 #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
54 
55 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
56  * if you want the limit (max/min) macros for int types.
57  */
58 #ifndef __STDC_LIMIT_MACROS
59 #define __STDC_LIMIT_MACROS 1
60 #endif
61 
62 #include <inttypes.h>
63 typedef int8_t flex_int8_t;
64 typedef uint8_t flex_uint8_t;
65 typedef int16_t flex_int16_t;
66 typedef uint16_t flex_uint16_t;
67 typedef int32_t flex_int32_t;
68 typedef uint32_t flex_uint32_t;
69 #else
70 typedef signed char flex_int8_t;
71 typedef short int flex_int16_t;
72 typedef int flex_int32_t;
73 typedef unsigned char flex_uint8_t;
74 typedef unsigned short int flex_uint16_t;
75 typedef unsigned int flex_uint32_t;
76 #endif /* ! C99 */
77 
78 /* Limits of integral types. */
79 #ifndef INT8_MIN
80 #define INT8_MIN (-128)
81 #endif
82 #ifndef INT16_MIN
83 #define INT16_MIN (-32767-1)
84 #endif
85 #ifndef INT32_MIN
86 #define INT32_MIN (-2147483647-1)
87 #endif
88 #ifndef INT8_MAX
89 #define INT8_MAX (127)
90 #endif
91 #ifndef INT16_MAX
92 #define INT16_MAX (32767)
93 #endif
94 #ifndef INT32_MAX
95 #define INT32_MAX (2147483647)
96 #endif
97 #ifndef UINT8_MAX
98 #define UINT8_MAX (255U)
99 #endif
100 #ifndef UINT16_MAX
101 #define UINT16_MAX (65535U)
102 #endif
103 #ifndef UINT32_MAX
104 #define UINT32_MAX (4294967295U)
105 #endif
106 
107 #endif /* ! FLEXINT_H */
108 
109 #ifdef __cplusplus
110 
111 /* The "const" storage-class-modifier is valid. */
112 #define YY_USE_CONST
113 
114 #else /* ! __cplusplus */
115 
116 /* C99 requires __STDC__ to be defined as 1. */
117 #if defined (__STDC__)
118 
119 #define YY_USE_CONST
120 
121 #endif /* defined (__STDC__) */
122 #endif /* ! __cplusplus */
123 
124 #ifdef YY_USE_CONST
125 #define yyconst const
126 #else
127 #define yyconst
128 #endif
129 
130 /* Returned upon end-of-file. */
131 #define YY_NULL 0
132 
133 /* Promotes a possibly negative, possibly signed char to an unsigned
134  * integer for use as an array index. If the signed char is negative,
135  * we want to instead treat it as an 8-bit unsigned char, hence the
136  * double cast.
137  */
138 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
139 
140 /* Enter a start condition. This macro really ought to take a parameter,
141  * but we do it the disgusting crufty way forced on us by the ()-less
142  * definition of BEGIN.
143  */
144 #define BEGIN (yy_start) = 1 + 2 *
145 
146 /* Translate the current start state into a value that can be later handed
147  * to BEGIN to return to the state. The YYSTATE alias is for lex
148  * compatibility.
149  */
150 #define YY_START (((yy_start) - 1) / 2)
151 #define YYSTATE YY_START
152 
153 /* Action number for EOF rule of a given start state. */
154 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
155 
156 /* Special action meaning "start processing a new file". */
157 #define YY_NEW_FILE pycodeYYrestart(pycodeYYin )
158 
159 #define YY_END_OF_BUFFER_CHAR 0
160 
161 /* Size of default input buffer. */
162 #ifndef YY_BUF_SIZE
163 #define YY_BUF_SIZE 16384
164 #endif
165 
166 /* The state buf must be large enough to hold one state per character in the main buffer.
167  */
168 #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
169 
170 #ifndef YY_TYPEDEF_YY_BUFFER_STATE
171 #define YY_TYPEDEF_YY_BUFFER_STATE
173 #endif
174 
175 extern int pycodeYYleng;
176 
177 extern FILE *pycodeYYin, *pycodeYYout;
178 
179 #define EOB_ACT_CONTINUE_SCAN 0
180 #define EOB_ACT_END_OF_FILE 1
181 #define EOB_ACT_LAST_MATCH 2
182 
183  #define YY_LESS_LINENO(n)
184 
185 /* Return all but the first "n" matched characters back to the input stream. */
186 #define yyless(n) \
187  do \
188  { \
189  /* Undo effects of setting up pycodeYYtext. */ \
190  int yyless_macro_arg = (n); \
191  YY_LESS_LINENO(yyless_macro_arg);\
192  *yy_cp = (yy_hold_char); \
193  YY_RESTORE_YY_MORE_OFFSET \
194  (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
195  YY_DO_BEFORE_ACTION; /* set up pycodeYYtext again */ \
196  } \
197  while ( 0 )
198 
199 #define unput(c) yyunput( c, (yytext_ptr) )
200 
201 #ifndef YY_TYPEDEF_YY_SIZE_T
202 #define YY_TYPEDEF_YY_SIZE_T
203 typedef size_t yy_size_t;
204 #endif
205 
206 #ifndef YY_STRUCT_YY_BUFFER_STATE
207 #define YY_STRUCT_YY_BUFFER_STATE
208 struct yy_buffer_state
209  {
210  FILE *yy_input_file;
211 
212  char *yy_ch_buf; /* input buffer */
213  char *yy_buf_pos; /* current position in input buffer */
214 
215  /* Size of input buffer in bytes, not including room for EOB
216  * characters.
217  */
219 
220  /* Number of characters read into yy_ch_buf, not including EOB
221  * characters.
222  */
223  int yy_n_chars;
224 
225  /* Whether we "own" the buffer - i.e., we know we created it,
226  * and can realloc() it to grow it, and should free() it to
227  * delete it.
228  */
229  int yy_is_our_buffer;
230 
231  /* Whether this is an "interactive" input source; if so, and
232  * if we're using stdio for input, then we want to use getc()
233  * instead of fread(), to make sure we stop fetching input after
234  * each newline.
235  */
236  int yy_is_interactive;
237 
238  /* Whether we're considered to be at the beginning of a line.
239  * If so, '^' rules will be active on the next match, otherwise
240  * not.
241  */
242  int yy_at_bol;
243 
244  int yy_bs_lineno; /**< The line count. */
245  int yy_bs_column; /**< The column count. */
246 
247  /* Whether to try to fill the input buffer when we reach the
248  * end of it.
249  */
250  int yy_fill_buffer;
251 
252  int yy_buffer_status;
253 
254 #define YY_BUFFER_NEW 0
255 #define YY_BUFFER_NORMAL 1
256  /* When an EOF's been seen but there's still some text to process
257  * then we mark the buffer as YY_EOF_PENDING, to indicate that we
258  * shouldn't try reading from the input source any more. We might
259  * still have a bunch of tokens to match, though, because of
260  * possible backing-up.
261  *
262  * When we actually see the EOF, we change the status to "new"
263  * (via pycodeYYrestart()), so that the user can continue scanning by
264  * just pointing pycodeYYin at a new input file.
265  */
266 #define YY_BUFFER_EOF_PENDING 2
267 
268  };
269 #endif /* !YY_STRUCT_YY_BUFFER_STATE */
270 
271 /* Stack of input buffers. */
272 static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
273 static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
274 static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
275 
276 /* We provide macros for accessing buffer states in case in the
277  * future we want to put the buffer states in a more general
278  * "scanner state".
279  *
280  * Returns the top of the stack, or NULL.
281  */
282 #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
283  ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
284  : NULL)
285 
286 /* Same as previous macro, but useful when we know that the buffer stack is not
287  * NULL or when we need an lvalue. For internal use only.
288  */
289 #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
290 
291 /* yy_hold_char holds the character lost when pycodeYYtext is formed. */
292 static char yy_hold_char;
293 static int yy_n_chars; /* number of characters read into yy_ch_buf */
295 
296 /* Points to current character in buffer. */
297 static char *yy_c_buf_p = (char *) 0;
298 static int yy_init = 0; /* whether we need to initialize */
299 static int yy_start = 0; /* start state number */
300 
301 /* Flag which is used to allow pycodeYYwrap()'s to do buffer switches
302  * instead of setting up a fresh pycodeYYin. A bit of a hack ...
303  */
305 
306 void pycodeYYrestart (FILE *input_file );
307 void pycodeYY_switch_to_buffer (YY_BUFFER_STATE new_buffer );
308 YY_BUFFER_STATE pycodeYY_create_buffer (FILE *file,int size );
309 void pycodeYY_delete_buffer (YY_BUFFER_STATE b );
310 void pycodeYY_flush_buffer (YY_BUFFER_STATE b );
311 void pycodeYYpush_buffer_state (YY_BUFFER_STATE new_buffer );
312 void pycodeYYpop_buffer_state (void );
313 
314 static void pycodeYYensure_buffer_stack (void );
315 static void pycodeYY_load_buffer_state (void );
316 static void pycodeYY_init_buffer (YY_BUFFER_STATE b,FILE *file );
317 
318 #define YY_FLUSH_BUFFER pycodeYY_flush_buffer(YY_CURRENT_BUFFER )
319 
320 YY_BUFFER_STATE pycodeYY_scan_buffer (char *base,yy_size_t size );
321 YY_BUFFER_STATE pycodeYY_scan_string (yyconst char *yy_str );
322 YY_BUFFER_STATE pycodeYY_scan_bytes (yyconst char *bytes,int len );
323 
324 void *pycodeYYalloc (yy_size_t );
325 void *pycodeYYrealloc (void *,yy_size_t );
326 void pycodeYYfree (void * );
327 
328 #define yy_new_buffer pycodeYY_create_buffer
329 
330 #define yy_set_interactive(is_interactive) \
331  { \
332  if ( ! YY_CURRENT_BUFFER ){ \
333  pycodeYYensure_buffer_stack (); \
334  YY_CURRENT_BUFFER_LVALUE = \
335  pycodeYY_create_buffer(pycodeYYin,YY_BUF_SIZE ); \
336  } \
337  YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
338  }
339 
340 #define yy_set_bol(at_bol) \
341  { \
342  if ( ! YY_CURRENT_BUFFER ){\
343  pycodeYYensure_buffer_stack (); \
344  YY_CURRENT_BUFFER_LVALUE = \
345  pycodeYY_create_buffer(pycodeYYin,YY_BUF_SIZE ); \
346  } \
347  YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
348  }
349 
350 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
351 
352 /* Begin user sect3 */
353 
354 #define pycodeYYwrap(n) 1
355 #define YY_SKIP_YYWRAP
356 
357 typedef unsigned char YY_CHAR;
358 
359 FILE *pycodeYYin = (FILE *) 0, *pycodeYYout = (FILE *) 0;
360 
361 typedef int yy_state_type;
362 
363 extern int pycodeYYlineno;
364 
365 int pycodeYYlineno = 1;
366 
367 extern char *pycodeYYtext;
368 #define yytext_ptr pycodeYYtext
369 
370 static yy_state_type yy_get_previous_state (void );
371 static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
372 static int yy_get_next_buffer (void );
373 static void yy_fatal_error (yyconst char msg[] );
374 
375 /* Done after the current pattern has been matched and before the
376  * corresponding action - sets up pycodeYYtext.
377  */
378 #define YY_DO_BEFORE_ACTION \
379  (yytext_ptr) = yy_bp; \
380  pycodeYYleng = (size_t) (yy_cp - yy_bp); \
381  (yy_hold_char) = *yy_cp; \
382  *yy_cp = '\0'; \
383  (yy_c_buf_p) = yy_cp;
384 
385 #define YY_NUM_RULES 67
386 #define YY_END_OF_BUFFER 68
387 /* This struct is not used in this scanner,
388  but its presence is necessary. */
389 struct yy_trans_info
390  {
391  flex_int32_t yy_verify;
393  };
395  { 0,
396  16418,16418, 59, 59, 68, 66, 67, 65, 66, 67,
397  64, 67, 58, 66, 67, 63, 66, 67, 57, 66,
398  67, 66, 67, 66, 67, 66, 67, 37, 64, 67,
399  22, 36, 66, 67, 22, 36, 66, 67, 22, 36,
400  66, 67, 22, 36, 66, 67, 22, 36, 66, 67,
401  22, 36, 66, 67, 22, 36, 66, 67, 22, 36,
402  66, 67, 22, 36, 66, 67, 22, 36, 66, 67,
403  22, 36, 66, 67, 22, 36, 66, 67, 22, 36,
404  66, 67, 22, 36, 66, 67, 22, 36, 66, 67,
405  22, 36, 66, 67, 22, 36, 66, 67, 22, 36,
406 
407  66, 67, 22, 36, 66, 67, 22, 36, 66, 67,
408  22, 36, 66, 67, 22, 36, 66, 67, 22, 36,
409  66, 67, 22, 36, 66, 67, 65, 66, 67, 13,
410  66, 67, 12, 66, 67, 12, 66, 67, 12, 66,
411  67, 12, 66, 67, 15, 66, 67, 14, 65, 66,
412  67, 15, 58, 66, 67, 15, 63, 66, 67, 15,
413  57, 66, 67, 16, 66, 67, 14, 15, 66, 67,
414  17, 66, 67, 15, 66, 67, 15, 66, 67, 15,
415  66, 67, 15, 66, 67, 8, 66, 67, 8, 66,
416  67, 8, 66, 67, 8, 66, 67, 9, 65, 66,
417 
418  67, 9, 66, 67, 11, 66, 67, 10, 66, 67,
419  10, 66, 67, 10, 66, 67, 10, 66, 67, 35,
420  64, 67, 22, 66, 67, 22, 66, 67, 22, 66,
421  67, 22, 66, 67, 22, 66, 67, 22, 66, 67,
422  22, 66, 67, 22, 66, 67, 22, 66, 67, 22,
423  66, 67, 22, 66, 67, 22, 66, 67, 22, 66,
424  67, 22, 66, 67, 22, 66, 67, 22, 66, 67,
425  22, 66, 67, 22, 66, 67, 22, 66, 67, 22,
426  66, 67, 22, 66, 67, 22, 66, 67, 22, 66,
427  67, 22, 66, 67, 31, 65, 66, 67, 30, 64,
428 
429  67, 23, 65, 66, 67, 29, 64, 67, 63, 66,
430  67, 27, 66, 67, 27, 66, 67, 27, 66, 67,
431  27, 66, 67, 27, 66, 67, 27, 66, 67, 27,
432  66, 67, 27, 66, 67, 27, 66, 67, 27, 66,
433  67, 27, 66, 67, 27, 66, 67, 27, 66, 67,
434  27, 66, 67, 27, 66, 67, 27, 66, 67, 27,
435  66, 67, 27, 66, 67, 27, 66, 67, 27, 66,
436  67, 27, 66, 67, 27, 66, 67, 65, 66, 67,
437  16416, 33, 64, 67, 8226, 66, 67, 8226, 63, 66,
438  67, 8226, 66, 67, 8226, 66, 67, 8226, 66, 67,
439 
440  42, 43, 66, 67, 42, 43, 65, 66, 67, 43,
441  58, 66, 67, 42, 43, 63, 66, 67, 41, 43,
442  57, 66, 67, 42, 43, 66, 67, 42, 43, 66,
443  67, 43, 66, 67, 42, 43, 66, 67, 48, 49,
444  66, 67, 48, 49, 65, 66, 67, 47, 49, 58,
445  66, 67, 48, 49, 63, 66, 67, 49, 57, 66,
446  67, 48, 49, 66, 67, 48, 49, 66, 67, 49,
447  66, 67, 48, 49, 66, 67, 52, 54, 66, 67,
448  52, 54, 65, 66, 67, 52, 53, 64, 67, 52,
449  54, 58, 66, 67, 52, 54, 63, 66, 67, 52,
450 
451  54, 57, 66, 67, 52, 54, 66, 67, 52, 54,
452  66, 67, 54, 66, 67, 52, 54, 66, 67, 59,
453  66, 67, 59, 65, 66, 67, 61, 64, 67, 58,
454  59, 66, 67, 59, 63, 66, 67, 57, 59, 66,
455  67, 59, 66, 67, 59, 66, 67, 59, 66, 67,
456  65, 63, 62, 63, 58, 57, 20, 22, 36, 22,
457  36, 22, 36, 22, 36, 22, 36, 22, 36, 18,
458  22, 36, 22, 36, 22, 36, 22, 36, 22, 36,
459  22, 36, 22, 36, 22, 36, 22, 36, 22, 36,
460  22, 36, 19, 22, 36, 22, 36, 19, 22, 36,
461 
462  22, 36, 22, 36, 22, 36, 22, 36, 22, 36,
463  22, 36, 22, 36, 22, 36, 22, 36, 22, 36,
464  65, 13, 12, 12, 15, 14, 65, 15, 15, 63,
465  15, 62, 63, 15, 15, 15, 58, 15, 57, 15,
466  8, 8, 9, 65, 10, 10, 22, 22, 22, 22,
467  22, 22, 18, 22, 22, 22, 22, 22, 22, 22,
468  22, 22, 22, 22, 19, 22, 22, 19, 22, 22,
469  22, 22, 22, 22, 22, 22, 22, 22, 22, 31,
470  65, 30, 23, 65, 28, 62, 63, 27, 27, 27,
471  27, 27, 25, 27, 27, 27, 27, 27, 27, 27,
472 
473  27, 27, 27, 27, 26, 27, 27, 26, 27, 27,
474  27, 27, 27, 27, 27, 27, 27, 27, 65,16416,
475  33, 8224, 42, 42, 65, 42, 63, 42, 62, 63,
476  58, 42, 39, 39, 38, 48, 48, 65, 48, 63,
477  48, 62, 63, 57, 48, 45, 45, 44, 52, 52,
478  65, 52, 52, 63, 52, 62, 63, 63, 52, 52,
479  59, 59, 65, 60, 59, 59, 63, 59, 62, 63,
480  59, 58, 59, 57, 59, 59, 56, 55, 21, 22,
481  36, 22, 36, 22, 36, 22, 36, 22, 36, 22,
482  36, 22, 36, 22, 36, 18, 22, 36, 22, 36,
483 
484  22, 36, 22, 36, 22, 36, 22, 36, 22, 36,
485  22, 36, 22, 36, 22, 36, 22, 36, 22, 36,
486  22, 36, 22, 36, 22, 36, 22, 36, 15, 56,
487  15, 55, 10, 22, 22, 22, 22, 22, 22, 22,
488  22, 18, 22, 22, 22, 22, 22, 22, 22, 22,
489  22, 22, 22, 22, 22, 22, 22, 22, 27, 27,
490  27, 27, 27, 27, 25, 27, 27, 27, 27, 27,
491  27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
492  40, 56, 46, 55, 50, 56, 51, 55, 56, 59,
493  55, 59, 21, 22, 36, 3, 22, 36, 18, 22,
494 
495  36, 22, 36, 22, 36, 22, 36, 22, 36, 1,
496  22, 36, 22, 36, 22, 36, 22, 36, 22, 36,
497  22, 36, 22, 36, 22, 36, 22, 36, 22, 36,
498  22, 36, 22, 3, 22, 18, 22, 22, 22, 22,
499  22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
500  22, 22, 27, 27, 27, 27, 27, 27, 27, 27,
501  27, 27, 24, 26, 27, 27, 27, 27, 27, 27,
502  22, 36, 18, 22, 36, 7, 21, 22, 36, 22,
503  36, 22, 36, 22, 36, 22, 36, 22, 36, 22,
504  36, 22, 18, 22, 22, 22, 22, 22, 22, 22,
505 
506  22, 27, 27, 27, 27, 27, 27, 27, 27, 2,
507  6, 20, 7, 21, 22, 36, 22, 36, 5, 21,
508  22, 22, 27, 27, 22, 36, 4, 20, 5, 21,
509  22, 27
510  } ;
511 
513  { 0,
514  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
515  1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
516  3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
517  3, 4, 5, 6, 8, 11, 13, 16, 19, 22,
518  24, 26, 28, 31, 35, 39, 43, 47, 51, 55,
519  59, 63, 67, 71, 75, 79, 83, 87, 91, 95,
520  99, 103, 107, 111, 115, 119, 123, 127, 130, 133,
521  136, 139, 142, 145, 148, 152, 156, 160, 164, 167,
522  171, 174, 177, 180, 183, 186, 189, 192, 195, 198,
523  202, 205, 208, 211, 214, 217, 220, 223, 226, 229,
524 
525  232, 235, 238, 241, 244, 247, 250, 253, 256, 259,
526  262, 265, 268, 271, 274, 277, 280, 283, 286, 289,
527  292, 295, 299, 302, 306, 309, 312, 315, 318, 321,
528  324, 327, 330, 333, 336, 339, 342, 345, 348, 351,
529  354, 357, 360, 363, 366, 369, 372, 375, 378, 382,
530  385, 388, 392, 395, 398, 401, 405, 410, 414, 419,
531  424, 428, 432, 435, 439, 443, 448, 453, 458, 462,
532  466, 470, 473, 477, 481, 486, 490, 495, 500, 505,
533  509, 513, 516, 520, 523, 527, 530, 534, 538, 542,
534  545, 548, 551, 552, 552, 553, 555, 555, 556, 557,
535 
536  557, 558, 558, 560, 562, 564, 566, 568, 570, 573,
537  575, 577, 579, 581, 583, 585, 587, 589, 591, 593,
538  596, 598, 601, 603, 605, 607, 609, 611, 613, 615,
539  617, 619, 621, 622, 623, 624, 625, 626, 628, 629,
540  631, 634, 635, 636, 638, 640, 641, 642, 643, 645,
541  645, 646, 647, 648, 649, 650, 651, 652, 653, 655,
542  656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
543  667, 668, 670, 671, 672, 673, 674, 675, 676, 677,
544  678, 679, 680, 682, 683, 685, 688, 689, 690, 691,
545  692, 693, 695, 696, 697, 698, 699, 700, 701, 702,
546 
547  703, 704, 705, 707, 708, 710, 711, 712, 713, 714,
548  715, 716, 717, 718, 719, 721, 722, 723, 724, 726,
549  726, 728, 731, 732, 733, 734, 735, 736, 737, 739,
550  741, 744, 744, 745, 746, 747, 748, 749, 750, 750,
551  752, 753, 755, 758, 759, 760, 761, 762, 764, 764,
552  765, 766, 768, 771, 772, 774, 776, 777, 778, 779,
553  780, 782, 784, 786, 788, 790, 792, 794, 796, 799,
554  801, 803, 805, 807, 809, 811, 813, 815, 817, 819,
555  821, 823, 825, 827, 829, 831, 833, 834, 835, 836,
556  837, 838, 839, 840, 841, 842, 844, 845, 846, 847,
557 
558  848, 849, 850, 851, 852, 853, 854, 855, 856, 857,
559  858, 859, 860, 861, 862, 863, 864, 865, 867, 868,
560  869, 870, 871, 872, 873, 874, 875, 876, 877, 878,
561  879, 880, 881, 883, 883, 885, 885, 887, 889, 891,
562  893, 894, 896, 899, 902, 904, 906, 908, 908, 910,
563  911, 913, 915, 917, 919, 921, 923, 925, 927, 929,
564  931, 933, 934, 936, 938, 939, 940, 941, 942, 943,
565  944, 945, 946, 947, 948, 949, 950, 951, 952, 953,
566  954, 955, 956, 957, 958, 959, 960, 961, 962, 963,
567  966, 967, 968, 969, 970, 971, 973, 976, 978, 980,
568 
569  982, 984, 986, 988, 990, 992, 992, 993, 995, 996,
570  997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006,
571  1007, 1008, 1009, 1010, 1011, 1013, 1015, 1017, 1019, 1021,
572  1022, 1023, 1024, 1025, 1027, 1029, 1031, 1032, 1033, 1033
573  } ;
574 
576  { 0,
577  1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
578  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
579  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
580  1, 2, 4, 5, 6, 1, 4, 4, 7, 8,
581  9, 4, 4, 10, 4, 11, 4, 12, 12, 12,
582  12, 12, 12, 12, 12, 12, 12, 13, 4, 4,
583  4, 4, 1, 1, 14, 14, 14, 14, 14, 15,
584  14, 14, 14, 14, 14, 14, 14, 16, 14, 14,
585  14, 17, 14, 18, 19, 14, 14, 14, 14, 14,
586  4, 20, 4, 1, 21, 4, 22, 23, 24, 25,
587 
588  26, 27, 28, 29, 30, 14, 31, 32, 33, 34,
589  35, 36, 14, 37, 38, 39, 40, 14, 41, 42,
590  43, 14, 4, 4, 4, 4, 1, 14, 14, 14,
591  14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
592  14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
593  14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
594  14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
595  14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
596  14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
597  14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
598 
599  14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
600  14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
601  14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
602  14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
603  14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
604  14, 14, 14, 14, 14
605  } ;
606 
608  { 0,
609  1, 2, 3, 4, 5, 4, 5, 6, 2, 4,
610  7, 8, 2, 9, 9, 9, 9, 9, 9, 10,
611  9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
612  9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
613  9, 9, 9
614  } ;
615 
617  { 0,
618  0, 39, 79, 0, 122, 0, 165, 0, 208, 0,
619  251, 0, 294, 0, 6, 8, 337, 0, 380, 420,
620  0, 0, 0, 0, 459, 498, 537, 576, 615, 654,
621  693, 732, 1724, 1725, 1721, 1725, 1717, 1715, 1713, 7,
622  11, 15, 1725, 13, 25, 15, 46, 23, 387, 27,
623  382, 380, 51, 398, 399, 400, 420, 56, 433, 405,
624  437, 462, 392, 435, 475, 427, 19, 61, 1725, 0,
625  8, 470, 504, 0, 1717, 1713, 489, 1710, 1725, 0,
626  1725, 772, 792, 38, 434, 0, 61, 509, 515, 1714,
627  1725, 1725, 1704, 518, 548, 553, 1725, 62, 441, 502,
628 
629  523, 482, 592, 537, 525, 576, 565, 594, 593, 578,
630  604, 539, 516, 555, 632, 640, 638, 561, 670, 657,
631  633, 69, 1725, 1712, 1725, 1707, 0, 1690, 501, 1674,
632  665, 5, 1673, 370, 1683, 582, 653, 1676, 670, 1685,
633  1652, 1640, 679, 706, 1622, 710, 1608, 1600, 565, 1725,
634  1725, 1622, 620, 719, 724, 0, 1606, 1596, 737, 1592,
635  713, 743, 604, 747, 0, 1589, 1567, 761, 1562, 714,
636  748, 677, 783, 1548, 394, 1539, 1547, 801, 1542, 804,
637  808, 784, 809, 0, 1546, 23, 1528, 1463, 1461, 718,
638  825, 826, 1465, 1461, 0, 0, 1458, 1457, 1454, 812,
639 
640  1725, 0, 642, 763, 826, 827, 842, 681, 828, 833,
641  843, 844, 850, 860, 751, 861, 862, 868, 872, 874,
642  876, 878, 880, 885, 889, 893, 898, 894, 900, 906,
643  907, 908, 586, 1725, 0, 887, 0, 1457, 1453, 927,
644  937, 1449, 915, 1450, 1446, 0, 0, 936, 1450, 0,
645  1440, 937, 943, 944, 945, 949, 954, 955, 956, 960,
646  961, 962, 966, 967, 974, 973, 979, 980, 984, 992,
647  993, 998, 1000, 1002, 1006, 1010, 1012, 1014, 1016, 1020,
648  1024, 1026, 682, 1725, 1448, 0, 0, 1417, 1408, 1031,
649  1422, 1408, 1414, 1401, 1384, 1385, 451, 1387, 1376, 1367,
650 
651  1363, 1361, 0, 1345, 0, 1332, 1325, 1312, 1312, 1297,
652  1276, 1252, 1264, 1260, 743, 1725, 1725, 0, 1272, 1260,
653  1038, 1042, 1250, 1050, 1725, 820, 1725, 0, 1251, 1054,
654  1059, 1240, 1235, 1060, 1725, 854, 1725, 1220, 1065, 656,
655  1225, 1066, 1073, 1195, 1182, 1070, 0, 1180, 703, 1725,
656  1166, 0, 0, 1162, 1158, 1152, 1076, 1725, 1725, 1074,
657  1076, 1080, 1081, 1086, 1087, 1088, 1092, 1093, 1100, 1102,
658  1107, 1108, 1109, 1113, 1114, 1119, 1127, 1128, 1133, 1132,
659  1134, 1141, 1140, 1145, 0, 0, 1136, 1147, 1149, 1153,
660  1154, 1165, 1170, 1175, 1180, 1182, 1184, 1186, 1188, 1193,
661 
662  1192, 1194, 1198, 1199, 1205, 1210, 1212, 1216, 1218, 1220,
663  1226, 1090, 1097, 1079, 1038, 1018, 1012, 0, 1023, 1020,
664  1013, 1008, 993, 989, 967, 935, 909, 904, 893, 890,
665  889, 878, 1725, 872, 1725, 923, 1725, 1725, 0, 0,
666  1224, 1228, 1230, 1238, 1240, 1249, 1251, 0, 1253, 862,
667  1255, 1260, 1259, 1261, 1265, 1267, 1271, 1276, 1277, 1285,
668  1291, 1292, 1293, 1297, 1299, 1301, 1306, 1311, 1312, 1313,
669  1317, 1318, 1322, 1323, 1327, 1329, 1335, 1341, 1343, 822,
670  803, 796, 780, 780, 769, 769, 772, 749, 745, 0,
671  724, 732, 703, 696, 689, 1348, 1361, 1349, 1350, 1362,
672 
673  1363, 1367, 1368, 1369, 1374, 0, 1375, 1386, 1381, 1382,
674  1392, 1394, 1398, 1405, 1409, 654, 633, 600, 601, 587,
675  541, 527, 460, 483, 1725, 1411, 1417, 1421, 1422, 1423,
676  1427, 415, 407, 1428, 1725, 1433, 1434, 407, 1725, 1470,
677  1480, 1490, 1500, 1510, 1520, 1530, 1535, 1537, 1546, 1556,
678  1566, 1569, 1572, 1576, 1578, 1586, 1596, 1605, 1615, 1625,
679  1634, 1644, 1654, 1664, 1674, 1684, 392, 380, 1689, 375,
680  1693, 65, 1697
681  } ;
682 
684  { 0,
685  540, 540, 539, 3, 539, 5, 539, 7, 539, 9,
686  539, 11, 539, 13, 2, 2, 539, 17, 541, 541,
687  2, 2, 2, 2, 542, 542, 543, 543, 544, 544,
688  545, 545, 539, 539, 539, 539, 539, 546, 539, 539,
689  539, 539, 539, 547, 547, 547, 547, 547, 547, 547,
690  547, 547, 547, 547, 547, 547, 547, 547, 547, 547,
691  547, 547, 547, 547, 547, 547, 547, 539, 539, 548,
692  548, 548, 548, 549, 539, 549, 550, 549, 539, 549,
693  539, 551, 551, 83, 83, 552, 552, 552, 552, 539,
694  539, 539, 553, 553, 553, 553, 539, 554, 554, 554,
695 
696  554, 554, 554, 554, 554, 554, 554, 554, 554, 554,
697  554, 554, 554, 554, 554, 554, 554, 554, 554, 554,
698  554, 539, 539, 539, 539, 546, 555, 555, 555, 555,
699  555, 555, 555, 555, 555, 555, 555, 555, 555, 555,
700  555, 555, 555, 555, 555, 555, 555, 555, 556, 539,
701  539, 546, 539, 539, 539, 557, 557, 539, 558, 539,
702  557, 557, 559, 557, 560, 560, 539, 561, 539, 560,
703  560, 562, 560, 563, 563, 563, 539, 564, 539, 563,
704  563, 563, 563, 565, 565, 539, 565, 566, 565, 565,
705  565, 565, 539, 539, 546, 546, 539, 539, 539, 539,
706 
707  539, 567, 547, 547, 547, 547, 547, 547, 547, 547,
708  547, 547, 547, 547, 547, 547, 547, 547, 547, 547,
709  547, 547, 547, 547, 547, 547, 547, 547, 547, 547,
710  547, 547, 539, 539, 548, 548, 549, 539, 549, 550,
711  550, 549, 83, 549, 549, 83, 552, 552, 539, 568,
712  553, 553, 554, 554, 554, 554, 554, 554, 554, 554,
713  554, 554, 554, 554, 554, 554, 554, 554, 554, 554,
714  554, 554, 554, 554, 554, 554, 554, 554, 554, 554,
715  554, 554, 539, 539, 539, 546, 555, 555, 555, 555,
716  555, 555, 555, 555, 555, 555, 555, 555, 555, 555,
717 
718  555, 555, 555, 555, 555, 555, 555, 555, 555, 555,
719  555, 555, 555, 555, 556, 539, 539, 557, 557, 539,
720  558, 558, 539, 557, 539, 539, 539, 560, 560, 561,
721  561, 539, 539, 560, 539, 539, 539, 563, 563, 563,
722  539, 564, 564, 564, 539, 563, 565, 565, 539, 539,
723  565, 566, 566, 565, 565, 565, 565, 539, 539, 569,
724  547, 547, 547, 547, 547, 547, 547, 547, 547, 547,
725  547, 547, 547, 547, 547, 547, 547, 547, 547, 547,
726  547, 547, 547, 547, 549, 549, 553, 554, 554, 554,
727  554, 554, 554, 554, 554, 554, 554, 554, 554, 554,
728 
729  554, 554, 554, 554, 554, 554, 554, 554, 554, 554,
730  554, 555, 555, 555, 555, 555, 555, 555, 555, 555,
731  555, 555, 555, 555, 555, 555, 555, 555, 555, 555,
732  555, 555, 539, 539, 539, 539, 539, 539, 565, 565,
733  569, 547, 547, 547, 547, 547, 547, 570, 547, 539,
734  547, 547, 547, 547, 547, 547, 547, 547, 547, 547,
735  547, 554, 554, 554, 554, 554, 554, 554, 554, 554,
736  554, 554, 554, 554, 554, 554, 554, 554, 554, 555,
737  555, 555, 555, 555, 555, 555, 555, 555, 555, 555,
738  555, 555, 555, 555, 555, 547, 547, 571, 547, 547,
739 
740  547, 547, 547, 547, 547, 572, 554, 554, 554, 554,
741  554, 554, 554, 554, 554, 555, 555, 555, 555, 555,
742  555, 555, 555, 539, 539, 571, 547, 547, 573, 554,
743  554, 555, 555, 547, 539, 573, 554, 555, 0, 539,
744  539, 539, 539, 539, 539, 539, 539, 539, 539, 539,
745  539, 539, 539, 539, 539, 539, 539, 539, 539, 539,
746  539, 539, 539, 539, 539, 539, 539, 539, 539, 539,
747  539, 539, 539
748  } ;
749 
751  { 0,
752  539, 35, 36, 539, 37, 38, 39, 122, 123, 122,
753  123, 198, 198, 199, 199, 198, 40, 199, 41, 198,
754  201, 199, 201, 202, 349, 202, 201, 200, 350, 202,
755  201, 200, 201, 202, 201, 202, 40, 202, 291, 42,
756  35, 36, 292, 37, 38, 39, 204, 200, 232, 205,
757  198, 200, 199, 201, 246, 40, 202, 41, 201, 206,
758  208, 202, 233, 201, 209, 198, 202, 199, 234, 201,
759  283, 284, 202, 529, 246, 40, 213, 223, 42, 34,
760  35, 43, 34, 37, 38, 39, 34, 34, 34, 34,
761  34, 34, 44, 45, 46, 47, 48, 49, 34, 44,
762 
763  50, 51, 52, 53, 54, 55, 56, 44, 57, 44,
764  58, 44, 59, 60, 61, 62, 63, 64, 65, 66,
765  44, 67, 34, 68, 36, 34, 37, 38, 39, 69,
766  34, 34, 34, 34, 34, 70, 70, 70, 71, 70,
767  72, 34, 70, 70, 70, 70, 70, 70, 70, 70,
768  70, 70, 70, 70, 70, 70, 70, 70, 71, 70,
769  70, 73, 70, 70, 70, 74, 75, 36, 74, 76,
770  77, 78, 34, 79, 80, 74, 74, 81, 82, 82,
771  82, 83, 82, 84, 74, 82, 82, 82, 82, 82,
772  82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
773 
774  82, 83, 82, 82, 85, 82, 82, 82, 34, 35,
775  36, 34, 37, 38, 39, 34, 34, 34, 34, 34,
776  34, 86, 86, 86, 87, 86, 88, 34, 86, 86,
777  86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
778  86, 86, 86, 86, 87, 86, 86, 89, 86, 86,
779  86, 34, 90, 36, 34, 37, 38, 39, 91, 91,
780  91, 34, 34, 92, 93, 93, 93, 94, 93, 95,
781  34, 93, 93, 93, 93, 93, 93, 93, 93, 93,
782  93, 93, 93, 93, 93, 93, 93, 94, 93, 93,
783  96, 93, 93, 93, 34, 35, 97, 34, 37, 38,
784 
785  39, 34, 34, 34, 34, 34, 34, 98, 99, 100,
786  101, 102, 103, 34, 98, 104, 105, 106, 107, 108,
787  109, 110, 98, 111, 98, 112, 98, 113, 114, 115,
788  116, 117, 118, 119, 120, 98, 121, 34, 124, 125,
789  34, 37, 126, 39, 34, 34, 34, 34, 34, 34,
790  127, 128, 127, 129, 130, 131, 34, 127, 132, 133,
791  134, 135, 136, 137, 138, 127, 139, 127, 140, 127,
792  141, 142, 143, 144, 127, 145, 146, 147, 127, 148,
793  34, 149, 150, 498, 37, 152, 39, 201, 387, 201,
794  202, 198, 202, 199, 201, 340, 153, 202, 154, 201,
795 
796  360, 294, 202, 207, 295, 201, 201, 201, 202, 202,
797  202, 211, 201, 339, 212, 202, 153, 229, 210, 155,
798  34, 149, 150, 207, 37, 152, 39, 201, 216, 214,
799  202, 219, 305, 217, 201, 218, 153, 202, 154, 215,
800  201, 222, 201, 202, 201, 202, 220, 202, 201, 305,
801  246, 202, 221, 222, 538, 231, 153, 222, 225, 155,
802  157, 36, 254, 158, 159, 160, 198, 224, 199, 201,
803  246, 230, 202, 226, 198, 161, 199, 162, 163, 198,
804  419, 199, 201, 227, 524, 202, 236, 228, 420, 201,
805  195, 207, 202, 305, 241, 161, 195, 195, 164, 157,
806 
807  36, 195, 158, 159, 160, 198, 236, 199, 198, 201,
808  199, 207, 202, 198, 161, 199, 162, 163, 256, 198,
809  236, 199, 198, 201, 199, 248, 202, 198, 250, 199,
810  201, 248, 201, 202, 161, 202, 255, 164, 166, 36,
811  236, 167, 168, 169, 201, 248, 201, 202, 418, 202,
812  274, 248, 198, 170, 199, 171, 172, 198, 250, 199,
813  273, 260, 201, 250, 252, 202, 315, 316, 201, 252,
814  258, 202, 201, 170, 259, 202, 173, 166, 36, 418,
815  167, 168, 169, 201, 252, 201, 202, 233, 202, 252,
816  263, 272, 170, 234, 171, 172, 198, 280, 199, 201,
817 
818  201, 201, 202, 202, 202, 326, 327, 261, 257, 269,
819  262, 201, 170, 297, 202, 173, 175, 176, 418, 177,
820  178, 179, 266, 298, 198, 264, 199, 267, 257, 268,
821  270, 180, 533, 181, 182, 265, 271, 272, 305, 201,
822  201, 272, 202, 202, 198, 201, 199, 201, 202, 201,
823  202, 180, 202, 275, 183, 175, 176, 340, 177, 178,
824  179, 277, 282, 279, 201, 278, 532, 202, 276, 198,
825  180, 199, 181, 182, 198, 339, 199, 201, 336, 337,
826  202, 290, 299, 283, 284, 281, 257, 300, 201, 301,
827  180, 202, 418, 183, 185, 186, 303, 187, 188, 189,
828 
829  308, 290, 304, 305, 349, 222, 257, 305, 350, 190,
830  198, 191, 199, 305, 198, 309, 199, 323, 198, 199,
831  333, 305, 355, 198, 356, 199, 290, 310, 198, 190,
832  199, 311, 192, 185, 186, 200, 187, 188, 189, 523,
833  200, 195, 322, 195, 315, 316, 290, 323, 190, 199,
834  191, 323, 198, 199, 333, 200, 195, 305, 201, 324,
835  200, 202, 305, 324, 334, 195, 331, 195, 190, 522,
836  201, 192, 237, 202, 372, 237, 237, 237, 237, 324,
837  195, 237, 237, 324, 334, 521, 539, 198, 338, 333,
838  338, 237, 237, 520, 361, 237, 244, 237, 245, 334,
839 
840  519, 237, 237, 338, 518, 195, 343, 195, 198, 517,
841  199, 237, 198, 198, 199, 199, 198, 418, 199, 334,
842  344, 434, 327, 339, 346, 346, 305, 339, 339, 355,
843  355, 356, 356, 201, 201, 201, 202, 202, 202, 516,
844  201, 357, 357, 202, 346, 346, 198, 418, 199, 201,
845  201, 201, 202, 202, 202, 436, 337, 201, 365, 362,
846  202, 357, 357, 450, 366, 364, 363, 201, 201, 201,
847  202, 202, 202, 434, 327, 201, 369, 368, 202, 201,
848  367, 201, 202, 201, 202, 201, 202, 201, 202, 370,
849  202, 198, 201, 199, 373, 202, 201, 371, 222, 202,
850 
851  201, 201, 374, 202, 202, 201, 375, 201, 202, 495,
852  202, 376, 377, 201, 201, 201, 202, 202, 202, 237,
853  494, 237, 379, 222, 436, 337, 378, 380, 195, 493,
854  492, 382, 381, 384, 195, 195, 383, 491, 195, 195,
855  198, 198, 199, 199, 195, 195, 490, 250, 222, 195,
856  201, 201, 201, 202, 202, 202, 201, 489, 198, 202,
857  199, 201, 201, 201, 202, 202, 202, 201, 201, 201,
858  202, 202, 202, 201, 201, 388, 202, 202, 389, 272,
859  201, 201, 393, 202, 202, 392, 201, 201, 390, 202,
860  202, 201, 396, 391, 202, 395, 397, 399, 394, 201,
861 
862  201, 488, 202, 202, 398, 201, 400, 201, 202, 201,
863  202, 487, 202, 201, 401, 272, 202, 201, 402, 201,
864  202, 201, 202, 201, 202, 418, 202, 201, 403, 486,
865  202, 201, 404, 201, 202, 198, 202, 199, 485, 406,
866  272, 407, 195, 405, 195, 305, 195, 409, 195, 305,
867  484, 411, 408, 410, 323, 483, 199, 195, 195, 482,
868  195, 195, 272, 195, 198, 195, 333, 539, 338, 338,
869  195, 338, 195, 195, 198, 338, 199, 195, 195, 195,
870  355, 201, 356, 201, 202, 344, 202, 201, 201, 339,
871  202, 202, 344, 201, 201, 201, 202, 202, 202, 201,
872 
873  201, 450, 448, 202, 481, 443, 444, 201, 446, 201,
874  202, 445, 202, 442, 201, 201, 201, 202, 202, 202,
875  201, 201, 418, 202, 202, 447, 201, 480, 222, 202,
876  452, 449, 222, 451, 201, 201, 453, 202, 202, 201,
877  201, 201, 202, 202, 202, 444, 250, 201, 201, 455,
878  202, 202, 201, 454, 201, 202, 201, 202, 354, 202,
879  201, 201, 351, 202, 202, 222, 456, 459, 440, 457,
880  439, 460, 201, 458, 463, 202, 461, 201, 464, 465,
881  202, 348, 201, 450, 462, 448, 466, 201, 438, 201,
882  202, 201, 202, 201, 202, 201, 202, 539, 202, 201,
883 
884  201, 201, 202, 202, 202, 201, 201, 467, 202, 202,
885  272, 272, 201, 469, 470, 202, 471, 201, 468, 201,
886  202, 473, 202, 201, 464, 201, 202, 201, 202, 437,
887  202, 201, 472, 201, 202, 201, 202, 201, 202, 339,
888  202, 332, 272, 474, 477, 201, 435, 201, 202, 475,
889  202, 478, 329, 444, 320, 476, 201, 479, 201, 202,
890  201, 202, 201, 202, 433, 202, 201, 201, 201, 202,
891  202, 202, 201, 319, 201, 202, 496, 202, 201, 222,
892  502, 202, 499, 201, 201, 432, 202, 506, 497, 504,
893  500, 501, 201, 431, 305, 202, 222, 503, 201, 201,
894 
895  201, 202, 202, 202, 201, 222, 201, 202, 201, 202,
896  222, 202, 505, 201, 430, 222, 202, 464, 201, 201,
897  201, 202, 202, 202, 201, 201, 429, 202, 202, 201,
898  201, 272, 202, 202, 201, 507, 201, 202, 512, 202,
899  509, 428, 201, 508, 511, 506, 514, 510, 201, 427,
900  201, 202, 272, 202, 513, 201, 525, 201, 202, 202,
901  202, 272, 524, 305, 426, 515, 272, 272, 201, 201,
902  201, 202, 202, 202, 201, 201, 201, 202, 202, 202,
903  425, 201, 201, 527, 202, 202, 444, 524, 201, 201,
904  444, 202, 202, 201, 528, 424, 202, 423, 444, 201,
905 
906  222, 201, 202, 305, 202, 201, 444, 222, 202, 422,
907  421, 418, 201, 464, 530, 202, 201, 417, 525, 202,
908  272, 202, 416, 531, 201, 464, 464, 202, 201, 535,
909  201, 202, 202, 202, 201, 201, 464, 202, 202, 415,
910  535, 201, 272, 202, 202, 414, 305, 413, 412, 285,
911  250, 249, 242, 222, 239, 386, 534, 385, 238, 272,
912  197, 194, 537, 222, 359, 358, 193, 354, 353, 272,
913  34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
914  151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
915  156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
916 
917  165, 165, 165, 165, 165, 165, 165, 165, 165, 165,
918  174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
919  184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
920  195, 195, 351, 195, 195, 195, 195, 195, 195, 195,
921  203, 203, 203, 203, 235, 235, 237, 348, 345, 237,
922  237, 341, 237, 237, 237, 237, 240, 240, 339, 240,
923  240, 240, 240, 240, 240, 240, 243, 339, 332, 243,
924  243, 194, 243, 243, 243, 243, 247, 247, 251, 251,
925  251, 253, 253, 253, 253, 287, 287, 317, 317, 317,
926  329, 317, 317, 317, 317, 317, 318, 318, 197, 318,
927 
928  320, 318, 318, 318, 318, 321, 321, 319, 321, 321,
929  321, 321, 321, 321, 321, 325, 325, 325, 325, 325,
930  325, 325, 325, 325, 325, 328, 328, 196, 328, 314,
931  328, 328, 328, 328, 330, 330, 313, 330, 330, 330,
932  330, 330, 330, 330, 335, 335, 335, 335, 335, 335,
933  335, 335, 335, 335, 338, 338, 338, 338, 312, 338,
934  338, 338, 338, 338, 342, 342, 342, 342, 342, 342,
935  342, 342, 342, 342, 347, 347, 305, 347, 347, 347,
936  347, 347, 347, 347, 352, 352, 307, 352, 352, 352,
937  352, 352, 352, 352, 441, 441, 441, 441, 526, 526,
938 
939  526, 526, 536, 536, 536, 536, 306, 302, 296, 293,
940  289, 288, 286, 285, 250, 249, 242, 239, 238, 197,
941  196, 194, 193, 539, 33, 539, 539, 539, 539, 539,
942  539, 539, 539, 539, 539, 539, 539, 539, 539, 539,
943  539, 539, 539, 539, 539, 539, 539, 539, 539, 539,
944  539, 539, 539, 539, 539, 539, 539, 539, 539, 539,
945  539, 539, 539, 539, 539, 539, 539, 539
946  } ;
947 
949  { 0,
950  0, 1, 1, 0, 1, 1, 1, 15, 15, 16,
951  16, 40, 71, 40, 71, 41, 1, 41, 1, 42,
952  44, 42, 46, 44, 186, 46, 67, 41, 186, 67,
953  48, 42, 45, 48, 50, 45, 1, 50, 132, 1,
954  2, 2, 132, 2, 2, 2, 45, 41, 67, 46,
955  47, 42, 47, 47, 84, 2, 47, 2, 53, 48,
956  50, 53, 68, 58, 50, 87, 58, 87, 68, 98,
957  122, 122, 98, 572, 84, 2, 53, 58, 2, 3,
958  3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
959  3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
960 
961  3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
962  3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
963  3, 3, 5, 5, 5, 5, 5, 5, 5, 5,
964  5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
965  5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
966  5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
967  5, 5, 5, 5, 5, 7, 7, 7, 7, 7,
968  7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
969  7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
970  7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
971 
972  7, 7, 7, 7, 7, 7, 7, 7, 9, 9,
973  9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
974  9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
975  9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
976  9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
977  9, 11, 11, 11, 11, 11, 11, 11, 11, 11,
978  11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
979  11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
980  11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
981  11, 11, 11, 11, 13, 13, 13, 13, 13, 13,
982 
983  13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
984  13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
985  13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
986  13, 13, 13, 13, 13, 13, 13, 17, 17, 17,
987  17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
988  17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
989  17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
990  17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
991  19, 19, 19, 570, 19, 19, 19, 52, 568, 51,
992  52, 49, 51, 49, 49, 175, 19, 49, 19, 63,
993 
994  567, 134, 63, 49, 134, 54, 55, 56, 54, 55,
995  56, 52, 60, 175, 52, 60, 19, 63, 51, 19,
996  20, 20, 20, 49, 20, 20, 20, 57, 55, 54,
997  57, 56, 538, 55, 66, 55, 20, 66, 20, 54,
998  59, 60, 64, 59, 61, 64, 57, 61, 99, 533,
999  85, 99, 57, 57, 532, 66, 20, 57, 61, 20,
1000  25, 25, 99, 25, 25, 25, 62, 59, 62, 62,
1001  85, 64, 62, 61, 72, 25, 72, 25, 25, 65,
1002  297, 65, 65, 62, 524, 65, 72, 62, 297, 102,
1003  77, 65, 102, 523, 77, 25, 77, 77, 25, 26,
1004 
1005  26, 77, 26, 26, 26, 129, 72, 129, 73, 100,
1006  73, 65, 100, 88, 26, 88, 26, 26, 102, 89,
1007  73, 89, 94, 113, 94, 88, 113, 101, 94, 101,
1008  101, 89, 105, 101, 26, 105, 100, 26, 27, 27,
1009  73, 27, 27, 27, 104, 88, 112, 104, 522, 112,
1010  113, 89, 95, 27, 95, 27, 27, 96, 95, 96,
1011  112, 105, 114, 96, 95, 114, 149, 149, 118, 96,
1012  104, 118, 107, 27, 104, 107, 27, 28, 28, 521,
1013  28, 28, 28, 106, 95, 110, 106, 233, 110, 96,
1014  107, 114, 28, 233, 28, 28, 103, 118, 103, 103,
1015 
1016  109, 108, 103, 109, 108, 163, 163, 106, 103, 110,
1017  106, 111, 28, 136, 111, 28, 29, 29, 520, 29,
1018  29, 29, 109, 136, 153, 108, 153, 109, 103, 109,
1019  111, 29, 519, 29, 29, 108, 111, 111, 518, 115,
1020  121, 111, 115, 121, 116, 117, 116, 116, 117, 203,
1021  116, 29, 203, 115, 29, 30, 30, 340, 30, 30,
1022  30, 116, 121, 117, 120, 116, 517, 120, 115, 131,
1023  30, 131, 30, 30, 119, 340, 119, 119, 172, 172,
1024  119, 131, 137, 283, 283, 120, 119, 137, 208, 137,
1025  30, 208, 516, 30, 31, 31, 139, 31, 31, 31,
1026 
1027  143, 131, 139, 139, 349, 208, 119, 139, 349, 31,
1028  144, 31, 144, 495, 146, 143, 146, 161, 170, 161,
1029  170, 494, 190, 154, 190, 154, 146, 144, 155, 31,
1030  155, 144, 31, 32, 32, 154, 32, 32, 32, 493,
1031  155, 159, 159, 159, 315, 315, 146, 162, 32, 162,
1032  32, 164, 171, 164, 171, 154, 159, 492, 215, 162,
1033  155, 215, 491, 164, 171, 168, 168, 168, 32, 489,
1034  204, 32, 82, 204, 215, 82, 82, 82, 82, 162,
1035  168, 82, 82, 164, 171, 488, 182, 173, 182, 173,
1036  182, 82, 83, 487, 204, 83, 83, 83, 83, 173,
1037 
1038  486, 83, 83, 178, 485, 178, 178, 178, 180, 484,
1039  180, 83, 181, 183, 181, 183, 200, 483, 200, 173,
1040  178, 326, 326, 180, 181, 183, 482, 181, 183, 191,
1041  192, 191, 192, 205, 206, 209, 205, 206, 209, 481,
1042  210, 191, 192, 210, 181, 183, 207, 480, 207, 207,
1043  211, 212, 207, 211, 212, 336, 336, 213, 210, 205,
1044  213, 191, 192, 450, 211, 209, 206, 214, 216, 217,
1045  214, 216, 217, 434, 434, 218, 213, 212, 218, 219,
1046  211, 220, 219, 221, 220, 222, 221, 223, 222, 214,
1047  223, 236, 224, 236, 216, 224, 225, 214, 217, 225,
1048 
1049  226, 228, 218, 226, 228, 227, 219, 229, 227, 432,
1050  229, 221, 223, 230, 231, 232, 230, 231, 232, 243,
1051  431, 243, 226, 224, 436, 436, 225, 227, 240, 430,
1052  429, 229, 228, 232, 240, 240, 231, 428, 241, 240,
1053  248, 252, 248, 252, 241, 241, 427, 252, 230, 241,
1054  253, 254, 255, 253, 254, 255, 256, 426, 257, 256,
1055  257, 257, 258, 259, 257, 258, 259, 260, 261, 262,
1056  260, 261, 262, 263, 264, 254, 263, 264, 255, 258,
1057  266, 265, 261, 266, 265, 260, 267, 268, 256, 267,
1058  268, 269, 263, 259, 269, 262, 264, 265, 261, 270,
1059 
1060  271, 425, 270, 271, 264, 272, 266, 273, 272, 274,
1061  273, 424, 274, 275, 268, 267, 275, 276, 269, 277,
1062  276, 278, 277, 279, 278, 423, 279, 280, 271, 422,
1063  280, 281, 273, 282, 281, 290, 282, 290, 421, 276,
1064  274, 277, 321, 275, 321, 420, 322, 279, 322, 419,
1065  417, 282, 278, 281, 324, 416, 324, 321, 330, 415,
1066  330, 322, 280, 331, 334, 331, 334, 339, 342, 339,
1067  342, 339, 342, 330, 346, 343, 346, 343, 331, 343,
1068  357, 360, 357, 361, 360, 342, 361, 362, 363, 346,
1069  362, 363, 343, 364, 365, 366, 364, 365, 366, 367,
1070 
1071  368, 369, 367, 368, 414, 362, 363, 369, 365, 370,
1072  369, 364, 370, 361, 371, 372, 373, 371, 372, 373,
1073  374, 375, 413, 374, 375, 366, 376, 412, 370, 376,
1074  373, 368, 371, 372, 377, 378, 375, 377, 378, 380,
1075  379, 381, 380, 379, 381, 374, 387, 383, 382, 377,
1076  383, 382, 384, 376, 388, 384, 389, 388, 356, 389,
1077  390, 391, 355, 390, 391, 378, 379, 382, 354, 380,
1078  351, 383, 392, 381, 389, 392, 384, 393, 390, 391,
1079  393, 348, 394, 396, 388, 394, 392, 395, 345, 396,
1080  395, 397, 396, 398, 397, 399, 398, 344, 399, 401,
1081 
1082  400, 402, 401, 400, 402, 403, 404, 393, 403, 404,
1083  397, 398, 405, 399, 400, 405, 402, 406, 395, 407,
1084  406, 404, 407, 408, 401, 409, 408, 410, 409, 341,
1085  410, 441, 403, 411, 441, 442, 411, 443, 442, 338,
1086  443, 333, 405, 406, 409, 444, 332, 445, 444, 407,
1087  445, 410, 329, 442, 323, 408, 446, 411, 447, 446,
1088  449, 447, 451, 449, 320, 451, 453, 452, 454, 453,
1089  452, 454, 455, 319, 456, 455, 445, 456, 457, 446,
1090  453, 457, 449, 458, 459, 314, 458, 459, 447, 455,
1091  451, 452, 460, 313, 312, 460, 457, 454, 461, 462,
1092 
1093  463, 461, 462, 463, 464, 456, 465, 464, 466, 465,
1094  460, 466, 458, 467, 311, 461, 467, 462, 468, 469,
1095  470, 468, 469, 470, 471, 472, 310, 471, 472, 473,
1096  474, 466, 473, 474, 475, 465, 476, 475, 471, 476,
1097  468, 309, 477, 467, 470, 477, 473, 469, 478, 308,
1098  479, 478, 475, 479, 472, 496, 498, 499, 496, 498,
1099  499, 474, 497, 307, 306, 476, 478, 479, 497, 500,
1100  501, 497, 500, 501, 502, 503, 504, 502, 503, 504,
1101  304, 505, 507, 499, 505, 507, 496, 508, 509, 510,
1102  504, 509, 510, 508, 501, 302, 508, 301, 502, 511,
1103 
1104  500, 512, 511, 300, 512, 513, 503, 505, 513, 299,
1105  298, 296, 514, 507, 509, 514, 515, 295, 526, 515,
1106  510, 526, 294, 511, 527, 512, 514, 527, 528, 529,
1107  530, 528, 529, 530, 531, 534, 513, 531, 534, 293,
1108  536, 537, 515, 536, 537, 292, 291, 289, 288, 285,
1109  251, 249, 245, 534, 244, 242, 527, 239, 238, 537,
1110  199, 198, 530, 528, 197, 194, 193, 189, 188, 531,
1111  540, 540, 540, 540, 540, 540, 540, 540, 540, 540,
1112  541, 541, 541, 541, 541, 541, 541, 541, 541, 541,
1113  542, 542, 542, 542, 542, 542, 542, 542, 542, 542,
1114 
1115  543, 543, 543, 543, 543, 543, 543, 543, 543, 543,
1116  544, 544, 544, 544, 544, 544, 544, 544, 544, 544,
1117  545, 545, 545, 545, 545, 545, 545, 545, 545, 545,
1118  546, 546, 187, 546, 546, 546, 546, 546, 546, 546,
1119  547, 547, 547, 547, 548, 548, 549, 185, 179, 549,
1120  549, 177, 549, 549, 549, 549, 550, 550, 176, 550,
1121  550, 550, 550, 550, 550, 550, 551, 174, 169, 551,
1122  551, 167, 551, 551, 551, 551, 552, 552, 553, 553,
1123  553, 554, 554, 554, 554, 555, 555, 556, 556, 556,
1124  166, 556, 556, 556, 556, 556, 557, 557, 160, 557,
1125 
1126  158, 557, 557, 557, 557, 558, 558, 157, 558, 558,
1127  558, 558, 558, 558, 558, 559, 559, 559, 559, 559,
1128  559, 559, 559, 559, 559, 560, 560, 152, 560, 148,
1129  560, 560, 560, 560, 561, 561, 147, 561, 561, 561,
1130  561, 561, 561, 561, 562, 562, 562, 562, 562, 562,
1131  562, 562, 562, 562, 563, 563, 563, 563, 145, 563,
1132  563, 563, 563, 563, 564, 564, 564, 564, 564, 564,
1133  564, 564, 564, 564, 565, 565, 142, 565, 565, 565,
1134  565, 565, 565, 565, 566, 566, 141, 566, 566, 566,
1135  566, 566, 566, 566, 569, 569, 569, 569, 571, 571,
1136 
1137  571, 571, 573, 573, 573, 573, 140, 138, 135, 133,
1138  130, 128, 126, 124, 93, 90, 78, 76, 75, 39,
1139  38, 37, 35, 33, 539, 539, 539, 539, 539, 539,
1140  539, 539, 539, 539, 539, 539, 539, 539, 539, 539,
1141  539, 539, 539, 539, 539, 539, 539, 539, 539, 539,
1142  539, 539, 539, 539, 539, 539, 539, 539, 539, 539,
1143  539, 539, 539, 539, 539, 539, 539, 539
1144  } ;
1145 
1146 extern int pycodeYY_flex_debug;
1147 int pycodeYY_flex_debug = 0;
1148 
1149 static yy_state_type *yy_state_buf=0, *yy_state_ptr=0;
1150 static char *yy_full_match;
1151 static int yy_lp;
1153 static int yy_full_lp;
1154 static int *yy_full_state;
1155 #define YY_TRAILING_MASK 0x2000
1156 #define YY_TRAILING_HEAD_MASK 0x4000
1157 #define REJECT \
1158 { \
1159 *yy_cp = (yy_hold_char); /* undo effects of setting up pycodeYYtext */ \
1160 yy_cp = (yy_full_match); /* restore poss. backed-over text */ \
1161 (yy_lp) = (yy_full_lp); /* restore orig. accepting pos. */ \
1162 (yy_state_ptr) = (yy_full_state); /* restore orig. state */ \
1163 yy_current_state = *(yy_state_ptr); /* restore curr. state */ \
1164 ++(yy_lp); \
1165 goto find_rule; \
1166 }
1167 
1168 #define yymore() yymore_used_but_not_detected
1169 #define YY_MORE_ADJ 0
1170 #define YY_RESTORE_YY_MORE_OFFSET
1172 #line 1 "pycode.l"
1173 /******************************************************************************
1174  *
1175  *
1176  *
1177  * Copyright (C) 1997-2015 by Dimitri van Heesch.
1178  *
1179  * Permission to use, copy, modify, and distribute this software and its
1180  * documentation under the terms of the GNU General Public License is hereby
1181  * granted. No representations are made about the suitability of this software
1182  * for any purpose. It is provided "as is" without express or implied warranty.
1183  * See the GNU General Public License for more details.
1184  *
1185  * Documents produced by Doxygen are derivative works derived from the
1186  * input used in their production; they are not affected by this license.
1187  *
1188  */
1189 /* This code is based on the work done by the MoxyPyDoxy team
1190  * (Linda Leong, Mike Rivera, Kim Truong, and Gabriel Estrada)
1191  * in Spring 2005 as part of CS 179E: Compiler Design Project
1192  * at the University of California, Riverside; the course was
1193  * taught by Peter H. Froehlich <phf@acm.org>.
1194  */
1195 #line 26 "pycode.l"
1196 
1197 #include <stdio.h>
1198 #include <qvaluestack.h>
1199 
1200 #include "pycode.h"
1201 #include "message.h"
1202 
1203 #include "scanner.h"
1204 #include "entry.h"
1205 #include "doxygen.h"
1206 #include "outputlist.h"
1207 #include "util.h"
1208 #include "membername.h"
1209 #include "searchindex.h"
1210 #include "config.h"
1211 #include "groupdef.h"
1212 #include "classlist.h"
1213 #include "filedef.h"
1214 #include "namespacedef.h"
1215 #include "tooltip.h"
1216 
1217 // Toggle for some debugging info
1218 //#define DBG_CTX(x) fprintf x
1219 #define DBG_CTX(x) do { } while(0)
1220 
1221 #define YY_NO_INPUT 1
1222 #define YY_NO_UNISTD_H 1
1223 
1224 static ClassSDict g_codeClassSDict(17);
1227 
1228 
1230 static const char * g_inputString; //!< the code fragment as text
1231 static int g_inputPosition; //!< read offset during parsing
1232 static const char * g_currentFontClass;
1235 static bool g_collectXRefs;
1236 static int g_inputLines; //!< number of line in the code fragment
1237 static int g_yyLineNr; //!< current line number
1243 //static bool g_insideBody;
1244 static int g_bodyCurlyCount;
1247 static int g_paramParens;
1248 //static int g_anchorCount;
1249 
1250 static bool g_exampleBlock;
1252 
1255 
1257 static bool g_doubleQuote;
1258 static bool g_noSuiteFound;
1259 static int g_stringContext;
1260 
1261 static QValueStack<uint> g_indents; //!< Tracks indentation levels for scoping in python
1262 
1263 static QCString g_docBlock; //!< contents of all lines of a documentation block
1264 static bool g_endComment;
1265 
1266 static void endFontClass();
1267 static void adjustScopesAndSuites(unsigned indentLength);
1268 
1269 
1270 /*! Represents a stack of variable to class mappings as found in the
1271  * code. Each scope is enclosed in pushScope() and popScope() calls.
1272  * Variables are added by calling addVariables() and one can search
1273  * for variable using findVariable().
1274  */
1276 {
1277  public:
1278  static const ClassDef *dummyContext;
1279  class Scope : public SDict<ClassDef>
1280  {
1281  public:
1282  Scope() : SDict<ClassDef>(17) {}
1283  };
1284 
1286  {
1287  m_scopes.setAutoDelete(TRUE);
1288  }
1289 
1291  {
1292  }
1293 
1294  void pushScope()
1295  {
1296  m_scopes.append(new Scope);
1297  }
1298 
1299  void popScope()
1300  {
1301  if (m_scopes.count()>0)
1302  {
1303  m_scopes.remove(m_scopes.count()-1);
1304  }
1305  }
1306 
1307  void clear()
1308  {
1309  m_scopes.clear();
1310  m_globalScope.clear();
1311  }
1312 
1314  {
1315  m_scopes.clear();
1316  }
1317 
1318  void addVariable(const QCString &type,const QCString &name);
1319  ClassDef *findVariable(const QCString &name);
1320 
1321  private:
1324 };
1325 
1327 {
1328  //printf("PyVariableContext::addVariable(%s,%s)\n",type.data(),name.data());
1329  QCString ltype = type.simplifyWhiteSpace();
1330  QCString lname = name.simplifyWhiteSpace();
1331 
1332  Scope *scope = m_scopes.count()==0 ? &m_globalScope : m_scopes.getLast();
1333  ClassDef *varType;
1334  if (
1335  (varType=g_codeClassSDict[ltype]) || // look for class definitions inside the code block
1336  (varType=getResolvedClass(g_currentDefinition,g_sourceFileDef,ltype)) // look for global class definitions
1337  )
1338  {
1339  scope->append(lname,varType); // add it to a list
1340  }
1341  else
1342  {
1343  if (m_scopes.count()>0) // for local variables add a dummy entry so the name
1344  // is hidden to avoid FALSE links to global variables with the same name
1345  // TODO: make this work for namespaces as well!
1346  {
1347  scope->append(lname,dummyContext);
1348  }
1349  }
1350 }
1351 
1353 {
1354  if (name.isEmpty()) return 0;
1355  ClassDef *result = 0;
1356  QListIterator<Scope> sli(m_scopes);
1357  Scope *scope;
1358  // search from inner to outer scope
1359  for (sli.toLast();(scope=sli.current());--sli)
1360  {
1361  result = scope->find(name);
1362  if (result)
1363  {
1364  return result;
1365  }
1366  }
1367  // nothing found -> also try the global scope
1368  result=m_globalScope.find(name);
1369  return result;
1370 }
1371 
1374 
1376 {
1377  public:
1378  struct Ctx
1379  {
1380  Ctx() : name(g_name), type(g_type), cd(0) {}
1384  };
1385 
1387  {
1388  m_classList.append(new Ctx);
1389  m_classList.setAutoDelete(TRUE);
1390  }
1391 
1392  virtual ~PyCallContext() {}
1393 
1394  void setClass(ClassDef *cd)
1395  {
1396  Ctx *ctx = m_classList.getLast();
1397  if (ctx)
1398  {
1399  ctx->cd=cd;
1400  }
1401  }
1402  void pushScope()
1403  {
1404  m_classList.append(new Ctx);
1405  }
1406 
1407  void popScope()
1408  {
1409  if (m_classList.count()>1)
1410  {
1411  Ctx *ctx = m_classList.getLast();
1412  if (ctx)
1413  {
1414  g_name = ctx->name;
1415  g_type = ctx->type;
1416  }
1417  m_classList.removeLast();
1418  }
1419  else
1420  {
1421  }
1422  }
1423 
1424  void clear()
1425  {
1426  m_classList.clear();
1427  m_classList.append(new Ctx);
1428  }
1429 
1431  {
1432  Ctx *ctx = m_classList.getLast();
1433 
1434  if (ctx)
1435  return ctx->cd;
1436  else
1437  return 0;
1438  }
1439 
1440  private:
1442 };
1443 
1445 
1446 
1447 /*! counts the number of lines in the input */
1448 static int countLines()
1449 {
1450  const char *p=g_inputString;
1451  char c;
1452  int count=1;
1453  while ((c=*p))
1454  {
1455  p++ ;
1456  if (c=='\n') count++;
1457  }
1458  if (p>g_inputString && *(p-1)!='\n')
1459  { // last line does not end with a \n, so we add an extra
1460  // line and explicitly terminate the line after parsing.
1461  count++,
1462  g_needsTermination=TRUE;
1463  }
1464  return count;
1465 }
1466 
1467 static void setCurrentDoc(const QCString &anchor)
1468 {
1470  {
1471  if (g_searchCtx)
1472  {
1473  Doxygen::searchIndex->setCurrentDoc(g_searchCtx,g_searchCtx->anchor(),FALSE);
1474  }
1475  else
1476  {
1477  Doxygen::searchIndex->setCurrentDoc(g_sourceFileDef,anchor,TRUE);
1478  }
1479  }
1480 }
1481 
1482 static void addToSearchIndex(const char *text)
1483 {
1485  {
1487  }
1488 }
1489 
1490 
1491 static ClassDef *stripClassName(const char *s,Definition *d=g_currentDefinition)
1492 {
1493  int pos=0;
1494  QCString type = s;
1496  QCString templSpec;
1497  while (extractClassNameFromType(type,pos,className,templSpec)!=-1)
1498  {
1499  QCString clName=className+templSpec;
1500 
1501  ClassDef *cd=0;
1502  if (!g_classScope.isEmpty())
1503  {
1504  cd=getResolvedClass(d,g_sourceFileDef,g_classScope+"::"+clName);
1505  }
1506  if (cd==0)
1507  {
1508  cd=getResolvedClass(d,g_sourceFileDef,clName);
1509  }
1510  if (cd)
1511  {
1512  return cd;
1513  }
1514  }
1515 
1516  return 0;
1517 }
1518 
1519 
1520 
1521 /*! start a new line of code, inserting a line number if g_sourceFileDef
1522  * is TRUE. If a definition starts at the current line, then the line
1523  * number is linked to the documentation of that definition.
1524  */
1525 static void startCodeLine()
1526 {
1527  //if (g_currentFontClass) { g_code->endFontClass(); }
1528  if (g_sourceFileDef)
1529  {
1530  //QCString lineNumber,lineAnchor;
1531  //lineNumber.sprintf("%05d",g_yyLineNr);
1532  //lineAnchor.sprintf("l%05d",g_yyLineNr);
1533 
1534  Definition *d = g_sourceFileDef->getSourceDefinition(g_yyLineNr);
1535  //printf("startCodeLine %d d=%p\n",g_yyLineNr,d);
1536  //g_code->startLineNumber();
1537 
1538  if (!g_includeCodeFragment && d && d->isLinkableInProject())
1539  {
1540  g_currentDefinition = d;
1541  g_currentMemberDef = g_sourceFileDef->getSourceMember(g_yyLineNr);
1542  //g_insideBody = FALSE;
1543  g_endComment = FALSE;
1544  g_searchingForBody = TRUE;
1545  g_realScope = d->name().copy();
1546  g_classScope = d->name().copy();
1547  //printf("Real scope: `%s'\n",g_realScope.data());
1548  g_bodyCurlyCount = 0;
1549  QCString lineAnchor;
1550  lineAnchor.sprintf("l%05d",g_yyLineNr);
1551  if (g_currentMemberDef)
1552  {
1553  g_code->writeLineNumber(g_currentMemberDef->getReference(),
1554  g_currentMemberDef->getOutputFileBase(),
1555  g_currentMemberDef->anchor(),g_yyLineNr);
1556  setCurrentDoc(lineAnchor);
1557  }
1558  else
1559  {
1560  g_code->writeLineNumber(d->getReference(),
1561  d->getOutputFileBase(),
1562  0,g_yyLineNr);
1563  setCurrentDoc(lineAnchor);
1564  }
1565  }
1566  else
1567  {
1568  //g_code->codify(lineNumber);
1569  g_code->writeLineNumber(0,0,0,g_yyLineNr);
1570  }
1571  //g_code->endLineNumber();
1572  }
1573  g_code->startCodeLine(g_sourceFileDef);
1574  if (g_currentFontClass)
1575  {
1576  g_code->startFontClass(g_currentFontClass);
1577  }
1578 }
1579 
1580 static void codify(const char* text)
1581 {
1582  g_code->codify(text);
1583 }
1584 
1585 static void endCodeLine()
1586 {
1587  endFontClass();
1588  g_code->endCodeLine();
1589 }
1590 
1591 static void nextCodeLine()
1592 {
1593  const char *fc = g_currentFontClass;
1594  endCodeLine();
1595  if (g_yyLineNr<g_inputLines)
1596  {
1597  g_currentFontClass = fc;
1598  startCodeLine();
1599  }
1600 }
1601 
1602 
1603 /*! writes a link to a fragment \a text that may span multiple lines, inserting
1604  * line numbers for each line. If \a text contains newlines, the link will be
1605  * split into multiple links with the same destination, one for each line.
1606  */
1608  Definition *d,
1609  const char *text)
1610 {
1611  static bool sourceTooltips = Config_getBool("SOURCE_TOOLTIPS");
1613  QCString ref = d->getReference();
1615  QCString anchor = d->anchor();
1616  QCString tooltip;
1617  if (!sourceTooltips) // fall back to simple "title" tooltips
1618  {
1619  tooltip = d->briefDescriptionAsTooltip();
1620  }
1621  bool done=FALSE;
1622  char *p=(char *)text;
1623  while (!done)
1624  {
1625  char *sp=p;
1626  char c;
1627  while ((c=*p++) && c!='\n') { }
1628  if (c=='\n')
1629  {
1630  g_yyLineNr++;
1631  *(p-1)='\0';
1632  //printf("writeCodeLink(%s,%s,%s,%s)\n",ref,file,anchor,sp);
1633  ol.writeCodeLink(ref,file,anchor,sp,tooltip);
1634  nextCodeLine();
1635  }
1636  else
1637  {
1638  //printf("writeCodeLink(%s,%s,%s,%s)\n",ref,file,anchor,sp);
1639  ol.writeCodeLink(ref,file,anchor,sp,tooltip);
1640  done=TRUE;
1641  }
1642  }
1643 }
1644 
1645 static void startFontClass(const char *s)
1646 {
1647  // if font class is already set don't stop and start it.
1648  // strcmp does not like null pointers as input.
1649  if (!g_currentFontClass || !s || strcmp(g_currentFontClass,s))
1650  {
1651  endFontClass();
1652  g_code->startFontClass(s);
1653  g_currentFontClass=s;
1654  }
1655 }
1656 
1657 static void endFontClass()
1658 {
1659  if (g_currentFontClass)
1660  {
1661  g_code->endFontClass();
1662  g_currentFontClass=0;
1663  }
1664 }
1665 
1666 static void codifyLines(char *text)
1667 {
1668  //printf("codifyLines(%d,\"%s\")\n",g_yyLineNr,text);
1669  char *p=text,*sp=p;
1670  char c;
1671  bool done=FALSE;
1672  const char * tmp_currentFontClass = g_currentFontClass;
1673  while (!done)
1674  {
1675  sp=p;
1676  while ((c=*p++) && c!='\n') { }
1677  if (c=='\n')
1678  {
1679  g_yyLineNr++;
1680  *(p-1)='\0';
1681  g_code->codify(sp);
1682  endCodeLine();
1683  if (g_yyLineNr<g_inputLines)
1684  {
1685  startCodeLine();
1686  }
1687  if (tmp_currentFontClass)
1688  {
1689  startFontClass(tmp_currentFontClass);
1690  }
1691  }
1692  else
1693  {
1694  g_code->codify(sp);
1695  done=TRUE;
1696  }
1697  }
1698 }
1699 
1700 static void codifyLines(const QCString &str)
1701 {
1702  char *tmp= (char *)malloc(str.length()+1);
1703  qstrcpy(tmp, str);
1704  codifyLines(tmp);
1705  free(tmp);
1706 }
1707 
1708 static bool getLinkInScope(const QCString &c, // scope
1709  const QCString &m, // member
1710  const char *memberText, // exact text
1711  CodeOutputInterface &ol,
1712  const char *text
1713  )
1714 {
1715  MemberDef *md;
1716  ClassDef *cd;
1717  FileDef *fd;
1718  NamespaceDef *nd;
1719  GroupDef *gd;
1720  //printf("Trying `%s'::`%s'\n",c.data(),m.data());
1721  if (getDefs(c,m,"()",md,cd,fd,nd,gd,FALSE,g_sourceFileDef) &&
1722  md->isLinkable())
1723  {
1724  //Definition *d=0;
1725  //if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd;
1726 
1728  md->getBodyDef() : md->getOuterScope();
1729  //printf("Found! d=%s\n",d?d->name().data():"<none>");
1730  if (md->getGroupDef()) d = md->getGroupDef();
1731  if (d && d->isLinkable())
1732  {
1733  g_theCallContext.setClass(stripClassName(md->typeString(),md->getOuterScope()));
1734  //printf("g_currentDefinition=%p g_currentMemberDef=%p\n",
1735  // g_currentDefinition,g_currentMemberDef);
1736 
1737  if (g_currentDefinition && g_currentMemberDef &&
1738  md!=g_currentMemberDef && g_collectXRefs)
1739  {
1740  addDocCrossReference(g_currentMemberDef,md);
1741  }
1742  //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());
1743 
1744  writeMultiLineCodeLink(ol,md, text ? text : memberText);
1745  addToSearchIndex(text ? text : memberText);
1746  return TRUE;
1747  }
1748  }
1749  return FALSE;
1750 }
1751 
1752 static bool getLink(const char *className,
1753  const char *memberName,
1754  CodeOutputInterface &ol,
1755  const char *text=0)
1756 {
1757  QCString m=removeRedundantWhiteSpace(memberName);
1759  if (!getLinkInScope(c,m,memberName,ol,text))
1760  {
1761  if (!g_curClassName.isEmpty())
1762  {
1763  if (!c.isEmpty()) c.prepend("::");
1764  c.prepend(g_curClassName);
1765  return getLinkInScope(c,m,memberName,ol,text);
1766  }
1767  return FALSE;
1768  }
1769  return TRUE;
1770 }
1771 
1772 
1773 /*
1774  For a given string in the source code,
1775  finds its class or global id and links to it.
1776 */
1777 static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName,
1778  bool typeOnly=FALSE)
1779 {
1780  QCString className=clName;
1781 
1782  // Don't do anything for empty text
1783  if (className.isEmpty()) return;
1784 
1785  DBG_CTX((stderr,"generateClassOrGlobalLink(className=%s)\n",className.data()));
1786 
1787  ClassDef *cd=0,*lcd=0; /** Class def that we may find */
1788  MemberDef *md=0; /** Member def that we may find */
1789  //bool isLocal=FALSE;
1790 
1791  if ((lcd=g_theVarContext.findVariable(className))==0) // not a local variable
1792  {
1794  QCString scope = substitute(className,".","::");
1795 
1796  cd = getResolvedClass(d,g_sourceFileDef,substitute(className,".","::"),&md);
1797 
1798  DBG_CTX((stderr,"d=%s g_sourceFileDef=%s\n",
1799  d?d->displayName().data():"<null>",
1800  g_currentDefinition?g_currentDefinition->displayName().data():"<null>"));
1801  DBG_CTX((stderr,"is found as a type %s\n",cd?cd->name().data():"<null>"));
1802 
1803  if (cd==0 && md==0) // also see if it is variable or enum or enum value
1804  {
1805  NamespaceDef *nd = getResolvedNamespace(scope);
1806  if (nd)
1807  {
1808  writeMultiLineCodeLink(ol,nd,clName);
1809  addToSearchIndex(className);
1810  return;
1811  }
1812  else if (getLink(g_classScope,clName,ol,clName))
1813  {
1814  return;
1815  }
1816  }
1817  }
1818  else
1819  {
1820  if (lcd!=PyVariableContext::dummyContext)
1821  {
1822  g_theCallContext.setClass(lcd);
1823  }
1824  //isLocal=TRUE;
1825  DBG_CTX((stderr,"is a local variable cd=%p!\n",cd));
1826  }
1827 
1828  if (cd && cd->isLinkable()) // is it a linkable class
1829  {
1830  writeMultiLineCodeLink(ol,cd,clName);
1831  addToSearchIndex(className);
1832  if (md)
1833  {
1835  md->getBodyDef() : md->getOuterScope();
1836  if (md->getGroupDef()) d = md->getGroupDef();
1837  if (d && d->isLinkable() && md->isLinkable() &&
1838  g_currentMemberDef && g_collectXRefs)
1839  {
1840  addDocCrossReference(g_currentMemberDef,md);
1841  }
1842  }
1843  }
1844  else // not a class, maybe a global member
1845  {
1846  int scopeEnd = className.findRev(".");
1847  if (scopeEnd!=-1 && !typeOnly) // name with explicit scope
1848  {
1849  QCString scope = substitute(className.left(scopeEnd),".","::");
1850  QCString locName = className.right(className.length()-scopeEnd-1);
1851  ClassDef *mcd = getClass(scope);
1852  DBG_CTX((stderr,"scope=%s locName=%s mcd=%p\n",scope.data(),locName.data(),mcd));
1853  if (mcd)
1854  {
1855  MemberDef *md = mcd->getMemberByName(locName);
1856  if (md)
1857  {
1858  g_theCallContext.setClass(stripClassName(md->typeString(),md->getOuterScope()));
1859  writeMultiLineCodeLink(ol,md,clName);
1860  addToSearchIndex(className);
1862  md->getBodyDef() : md->getOuterScope();
1863  if (md->getGroupDef()) d = md->getGroupDef();
1864  if (d && d->isLinkable() && md->isLinkable() &&
1865  g_currentMemberDef && g_collectXRefs)
1866  {
1867  addDocCrossReference(g_currentMemberDef,md);
1868  }
1869  return;
1870  }
1871  }
1872  else // check namespace as well
1873  {
1874  NamespaceDef *mnd = getResolvedNamespace(scope);
1875  if (mnd)
1876  {
1877  MemberDef *md=mnd->getMemberByName(locName);
1878  if (md)
1879  {
1880  //printf("name=%s scope=%s\n",locName.data(),scope.data());
1881  g_theCallContext.setClass(stripClassName(md->typeString(),md->getOuterScope()));
1882  writeMultiLineCodeLink(ol,md,clName);
1883  addToSearchIndex(className);
1885  md->getBodyDef() : md->getOuterScope();
1886  if (md->getGroupDef()) d = md->getGroupDef();
1887  if (d && d->isLinkable() && md->isLinkable() &&
1888  g_currentMemberDef && g_collectXRefs)
1889  {
1890  addDocCrossReference(g_currentMemberDef,md);
1891  }
1892  return;
1893  }
1894  }
1895  }
1896  }
1897 
1898  // nothing found, just write out the word
1899  codifyLines(clName);
1900  addToSearchIndex(clName);
1901  }
1902 }
1903 
1904 /*
1905  As of June 1, this function seems to work
1906  for file members, but scopes are not
1907  being correctly tracked for classes
1908  so it doesn't work for classes yet.
1909 
1910 */
1911 static void generateFunctionLink(CodeOutputInterface &ol,char *funcName)
1912 {
1913  //CodeClassDef *ccd=0;
1914  ClassDef *ccd=0;
1915  QCString locScope=g_classScope.copy();
1916  QCString locFunc=removeRedundantWhiteSpace(funcName);
1917  DBG_CTX((stdout,"*** locScope=%s locFunc=%s\n",locScope.data(),locFunc.data()));
1918  int i=locFunc.findRev("::");
1919  if (i>0)
1920  {
1921  locScope=locFunc.left(i);
1922  locFunc=locFunc.right(locFunc.length()-i-2).stripWhiteSpace();
1923  }
1924  //printf("generateFunctionLink(%s) classScope=`%s'\n",locFunc.data(),locScope.data());
1925  if (!locScope.isEmpty() && (ccd=g_codeClassSDict[locScope]))
1926  {
1927  //printf("using classScope %s\n",g_classScope.data());
1928  if (ccd->baseClasses())
1929  {
1930  BaseClassListIterator bcli(*ccd->baseClasses());
1931  for ( ; bcli.current() ; ++bcli)
1932  {
1933  if (getLink(bcli.current()->classDef->name(),locFunc,ol,funcName))
1934  {
1935  return;
1936  }
1937  }
1938  }
1939  }
1940  if (!getLink(locScope,locFunc,ol,funcName))
1941  {
1942  generateClassOrGlobalLink(ol,funcName);
1943  }
1944  return;
1945 }
1946 
1947 static bool findMemberLink(CodeOutputInterface &ol,Definition *sym,const char *symName)
1948 {
1949  //printf("sym %s outerScope=%s equal=%d\n",
1950  // sym->name().data(),sym->getOuterScope()->name().data(),
1951  // sym->getOuterScope()==g_currentDefinition);
1952 
1953  if (sym->getOuterScope() &&
1955  g_currentDefinition->definitionType()==Definition::TypeClass)
1956  {
1957  ClassDef *cd = (ClassDef*)sym->getOuterScope();
1958  ClassDef *thisCd = (ClassDef *)g_currentDefinition;
1960  {
1961  if (g_currentMemberDef && g_collectXRefs)
1962  {
1963  addDocCrossReference(g_currentMemberDef,(MemberDef*)sym);
1964  }
1965  }
1966  DBG_CTX((stderr,"cd=%s thisCd=%s\n",cd?cd->name().data():"<none>",thisCd?thisCd->name().data():"<none>"));
1967 
1968  // TODO: find the nearest base class in case cd is a base class of
1969  // thisCd
1970  if (cd==thisCd || (thisCd && thisCd->isBaseClass(cd,TRUE)))
1971  {
1972  writeMultiLineCodeLink(ol,sym,symName);
1973  return TRUE;
1974  }
1975  }
1976  return FALSE;
1977 }
1978 
1979 static void findMemberLink(CodeOutputInterface &ol,char *symName)
1980 {
1981  //printf("Member reference: %s scope=%s member=%s\n",
1982  // pycodeYYtext,
1983  // g_currentDefinition?g_currentDefinition->name().data():"<none>",
1984  // g_currentMemberDef?g_currentMemberDef->name().data():"<none>"
1985  // );
1986  if (g_currentDefinition)
1987  {
1988  DefinitionIntf *di = Doxygen::symbolMap->find(symName);
1989  if (di)
1990  {
1991  if (di->definitionType()==DefinitionIntf::TypeSymbolList) // multiple symbols
1992  {
1994  Definition *sym;
1995  for (dli.toFirst();(sym=dli.current());++dli)
1996  {
1997  if (findMemberLink(ol,sym,symName)) return;
1998  }
1999  }
2000  else // single symbol
2001  {
2002  if (findMemberLink(ol,(Definition*)di,symName)) return;
2003  }
2004  }
2005  }
2006  //printf("sym %s not found\n",&pycodeYYtext[5]);
2007  codify(symName);
2008 }
2009 
2010 #undef YY_INPUT
2011 #define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
2012 
2013 static int yyread(char *buf,int max_size)
2014 {
2015  int c=0;
2016  while( c < max_size && g_inputString[g_inputPosition] )
2017  {
2018  *buf = g_inputString[g_inputPosition++] ;
2019  c++; buf++;
2020  }
2021  return c;
2022 }
2023 
2024 
2025 
2026 
2027 
2028 
2029 
2030 
2031 
2032 
2033 
2034 
2035 
2036 
2037 
2038 
2039 #line 2040 "/nova/app/home/novasoft/doxygen/doxygen-1.8.11/build/generated_src/pycode.cpp"
2040 
2041 #define INITIAL 0
2042 #define Body 1
2043 #define FunctionDec 2
2044 #define FunctionParams 3
2045 #define ClassDec 4
2046 #define ClassInheritance 5
2047 #define Suite 6
2048 #define SuiteCaptureIndent 7
2049 #define SuiteStart 8
2050 #define SuiteMaintain 9
2051 #define SuiteContinuing 10
2052 #define LongString 11
2053 #define SingleQuoteString 12
2054 #define DoubleQuoteString 13
2055 #define TripleString 14
2056 #define DocBlock 15
2057 
2058 #ifndef YY_NO_UNISTD_H
2059 /* Special case for "unistd.h", since it is non-ANSI. We include it way
2060  * down here because we want the user's section 1 to have been scanned first.
2061  * The user has a chance to override it with an option.
2062  */
2063 #include <unistd.h>
2064 #endif
2065 
2066 #ifndef YY_EXTRA_TYPE
2067 #define YY_EXTRA_TYPE void *
2068 #endif
2069 
2070 static int yy_init_globals (void );
2071 
2072 /* Accessor methods to globals.
2073  These are made visible to non-reentrant scanners for convenience. */
2074 
2075 int pycodeYYlex_destroy (void );
2076 
2077 int pycodeYYget_debug (void );
2078 
2079 void pycodeYYset_debug (int debug_flag );
2080 
2082 
2083 void pycodeYYset_extra (YY_EXTRA_TYPE user_defined );
2084 
2085 FILE *pycodeYYget_in (void );
2086 
2087 void pycodeYYset_in (FILE * in_str );
2088 
2089 FILE *pycodeYYget_out (void );
2090 
2091 void pycodeYYset_out (FILE * out_str );
2092 
2093 int pycodeYYget_leng (void );
2094 
2095 char *pycodeYYget_text (void );
2096 
2097 int pycodeYYget_lineno (void );
2098 
2099 void pycodeYYset_lineno (int line_number );
2100 
2101 /* Macros after this point can all be overridden by user definitions in
2102  * section 1.
2103  */
2104 
2105 #ifndef YY_SKIP_YYWRAP
2106 #ifdef __cplusplus
2107 extern "C" int pycodeYYwrap (void );
2108 #else
2109 extern int pycodeYYwrap (void );
2110 #endif
2111 #endif
2112 
2113  static void yyunput (int c,char *buf_ptr );
2114 
2115 #ifndef yytext_ptr
2116 static void yy_flex_strncpy (char *,yyconst char *,int );
2117 #endif
2118 
2119 #ifdef YY_NEED_STRLEN
2120 static int yy_flex_strlen (yyconst char * );
2121 #endif
2122 
2123 #ifndef YY_NO_INPUT
2124 
2125 #ifdef __cplusplus
2126 static int yyinput (void );
2127 #else
2128 static int input (void );
2129 #endif
2130 
2131 #endif
2132 
2133  static int yy_start_stack_ptr = 0;
2134  static int yy_start_stack_depth = 0;
2135  static int *yy_start_stack = NULL;
2136 
2137  static void yy_push_state (int new_state );
2138 
2139  static void yy_pop_state (void );
2140 
2141  static int yy_top_state (void );
2142 
2143 /* Amount of stuff to slurp up with each read. */
2144 #ifndef YY_READ_BUF_SIZE
2145 #define YY_READ_BUF_SIZE 8192
2146 #endif
2147 
2148 /* Copy whatever the last rule matched to the standard output. */
2149 #ifndef ECHO
2150 /* This used to be an fputs(), but since the string might contain NUL's,
2151  * we now use fwrite().
2152  */
2153 #define ECHO do { if (fwrite( pycodeYYtext, pycodeYYleng, 1, pycodeYYout )) {} } while (0)
2154 #endif
2155 
2156 /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
2157  * is returned in "result".
2158  */
2159 #ifndef YY_INPUT
2160 #define YY_INPUT(buf,result,max_size) \
2161  if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
2162  { \
2163  int c = '*'; \
2164  unsigned n; \
2165  for ( n = 0; n < max_size && \
2166  (c = getc( pycodeYYin )) != EOF && c != '\n'; ++n ) \
2167  buf[n] = (char) c; \
2168  if ( c == '\n' ) \
2169  buf[n++] = (char) c; \
2170  if ( c == EOF && ferror( pycodeYYin ) ) \
2171  YY_FATAL_ERROR( "input in flex scanner failed" ); \
2172  result = n; \
2173  } \
2174  else \
2175  { \
2176  errno=0; \
2177  while ( (result = fread(buf, 1, max_size, pycodeYYin))==0 && ferror(pycodeYYin)) \
2178  { \
2179  if( errno != EINTR) \
2180  { \
2181  YY_FATAL_ERROR( "input in flex scanner failed" ); \
2182  break; \
2183  } \
2184  errno=0; \
2185  clearerr(pycodeYYin); \
2186  } \
2187  }\
2188 \
2189 
2190 #endif
2191 
2192 /* No semi-colon after return; correct usage is to write "yyterminate();" -
2193  * we don't want an extra ';' after the "return" because that will cause
2194  * some compilers to complain about unreachable statements.
2195  */
2196 #ifndef yyterminate
2197 #define yyterminate() return YY_NULL
2198 #endif
2199 
2200 /* Number of entries by which start-condition stack grows. */
2201 #ifndef YY_START_STACK_INCR
2202 #define YY_START_STACK_INCR 25
2203 #endif
2204 
2205 /* Report a fatal error. */
2206 #ifndef YY_FATAL_ERROR
2207 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
2208 #endif
2209 
2210 /* end tables serialization structures and prototypes */
2211 
2212 /* Default declaration of generated scanner - a define so the user can
2213  * easily add parameters.
2214  */
2215 #ifndef YY_DECL
2216 #define YY_DECL_IS_OURS 1
2217 
2218 extern int pycodeYYlex (void);
2219 
2220 #define YY_DECL int pycodeYYlex (void)
2221 #endif /* !YY_DECL */
2222 
2223 /* Code executed at the beginning of each rule, after pycodeYYtext and pycodeYYleng
2224  * have been set up.
2225  */
2226 #ifndef YY_USER_ACTION
2227 #define YY_USER_ACTION
2228 #endif
2229 
2230 /* Code executed at the end of each rule. */
2231 #ifndef YY_BREAK
2232 #define YY_BREAK break;
2233 #endif
2234 
2235 #define YY_RULE_SETUP \
2236  YY_USER_ACTION
2237 
2238 /** The main scanner function which does all the work.
2239  */
2240 YY_DECL
2242  register yy_state_type yy_current_state;
2243  register char *yy_cp, *yy_bp;
2244  register int yy_act;
2245 
2246 #line 989 "pycode.l"
2247 
2248 
2249 #line 2250 "/nova/app/home/novasoft/doxygen/doxygen-1.8.11/build/generated_src/pycode.cpp"
2250 
2251  if ( !(yy_init) )
2252  {
2253  (yy_init) = 1;
2254 
2255 #ifdef YY_USER_INIT
2256  YY_USER_INIT;
2257 #endif
2258 
2259  /* Create the reject buffer large enough to save one state per allowed character. */
2260  if ( ! (yy_state_buf) )
2261  (yy_state_buf) = (yy_state_type *)pycodeYYalloc(YY_STATE_BUF_SIZE );
2262  if ( ! (yy_state_buf) )
2263  YY_FATAL_ERROR( "out of dynamic memory in pycodeYYlex()" );
2264 
2265  if ( ! (yy_start) )
2266  (yy_start) = 1; /* first start state */
2267 
2268  if ( ! pycodeYYin )
2269  pycodeYYin = stdin;
2270 
2271  if ( ! pycodeYYout )
2272  pycodeYYout = stdout;
2273 
2274  if ( ! YY_CURRENT_BUFFER ) {
2278  }
2279 
2281  }
2282 
2283  while ( 1 ) /* loops until end-of-file is reached */
2284  {
2285  yy_cp = (yy_c_buf_p);
2286 
2287  /* Support of pycodeYYtext. */
2288  *yy_cp = (yy_hold_char);
2289 
2290  /* yy_bp points to the position in yy_ch_buf of the start of
2291  * the current run.
2292  */
2293  yy_bp = yy_cp;
2294 
2295  yy_current_state = (yy_start);
2296 
2297  (yy_state_ptr) = (yy_state_buf);
2298  *(yy_state_ptr)++ = yy_current_state;
2299 
2300 yy_match:
2301  do
2302  {
2303  register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
2304  while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2305  {
2306  yy_current_state = (int) yy_def[yy_current_state];
2307  if ( yy_current_state >= 540 )
2308  yy_c = yy_meta[(unsigned int) yy_c];
2309  }
2310  yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
2311  *(yy_state_ptr)++ = yy_current_state;
2312  ++yy_cp;
2313  }
2314  while ( yy_current_state != 539 );
2315 
2316 yy_find_action:
2317  yy_current_state = *--(yy_state_ptr);
2318  (yy_lp) = yy_accept[yy_current_state];
2319 find_rule: /* we branch to this label when backing up */
2320  for ( ; ; ) /* until we find what rule we matched */
2321  {
2322  if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] )
2323  {
2324  yy_act = yy_acclist[(yy_lp)];
2325  if ( yy_act & YY_TRAILING_HEAD_MASK ||
2326  (yy_looking_for_trail_begin) )
2327  {
2328  if ( yy_act == (yy_looking_for_trail_begin) )
2329  {
2331  yy_act &= ~YY_TRAILING_HEAD_MASK;
2332  break;
2333  }
2334  }
2335  else if ( yy_act & YY_TRAILING_MASK )
2336  {
2337  (yy_looking_for_trail_begin) = yy_act & ~YY_TRAILING_MASK;
2339  (yy_full_match) = yy_cp;
2341  (yy_full_lp) = (yy_lp);
2342  }
2343  else
2344  {
2345  (yy_full_match) = yy_cp;
2347  (yy_full_lp) = (yy_lp);
2348  break;
2349  }
2350  ++(yy_lp);
2351  goto find_rule;
2352  }
2353  --yy_cp;
2354  yy_current_state = *--(yy_state_ptr);
2355  (yy_lp) = yy_accept[yy_current_state];
2356  }
2357 
2359 
2360 do_action: /* This label is used only to access EOF actions. */
2361 
2362  switch ( yy_act )
2363  { /* beginning of action switch */
2364 
2365 case 1:
2367 #line 992 "pycode.l"
2368 {
2369  startFontClass("keyword");
2370  codify(pycodeYYtext);
2371  endFontClass();
2372  BEGIN( FunctionDec );
2373  }
2374  YY_BREAK
2375 case 2:
2377 #line 999 "pycode.l"
2378 {
2379  startFontClass("keyword");
2380  codify(pycodeYYtext);
2381  endFontClass();
2382  BEGIN( ClassDec );
2383  }
2384  YY_BREAK
2385 case 3:
2387 #line 1005 "pycode.l"
2388 {
2389  startFontClass("keywordtype");
2390  codify(pycodeYYtext);
2391  endFontClass();
2392  }
2393  YY_BREAK
2394 case 4:
2395 *yy_cp = (yy_hold_char); /* undo effects of setting up pycodeYYtext */
2396 (yy_c_buf_p) = yy_cp -= 1;
2397 YY_DO_BEFORE_ACTION; /* set up pycodeYYtext again */
2399 #line 1010 "pycode.l"
2400 {
2401  codify("self.");
2402  findMemberLink(*g_code,&pycodeYYtext[5]);
2403  }
2404  YY_BREAK
2405 case 5:
2407 #line 1014 "pycode.l"
2408 {
2409  codify("self.");
2410  findMemberLink(*g_code,&pycodeYYtext[5]);
2411  }
2412  YY_BREAK
2413 case 6:
2414 *yy_cp = (yy_hold_char); /* undo effects of setting up pycodeYYtext */
2415 (yy_c_buf_p) = yy_cp -= 1;
2416 YY_DO_BEFORE_ACTION; /* set up pycodeYYtext again */
2418 #line 1018 "pycode.l"
2419 {
2420  codify("cls.");
2421  findMemberLink(*g_code,&pycodeYYtext[4]);
2422  }
2423  YY_BREAK
2424 case 7:
2426 #line 1022 "pycode.l"
2427 {
2428  codify("cls.");
2429  findMemberLink(*g_code,&pycodeYYtext[4]);
2430  }
2431  YY_BREAK
2432 
2433 case 8:
2435 #line 1028 "pycode.l"
2436 {
2437 
2438  generateClassOrGlobalLink(*g_code,pycodeYYtext);
2439  // codify(pycodeYYtext);
2440  g_curClassName = pycodeYYtext;
2441  g_curClassBases.clear();
2443  }
2444  YY_BREAK
2445 
2446 case 9:
2448 #line 1038 "pycode.l"
2449 {
2450  codify(pycodeYYtext);
2451  }
2452  YY_BREAK
2453 case 10:
2455 #line 1042 "pycode.l"
2456 {
2457  // The parser
2458  // is assuming
2459  // that ALL identifiers
2460  // in this state
2461  // are base classes;
2462  // it doesn't check to see
2463  // that the first parenthesis
2464  // has been seen.
2465 
2466  // This is bad - it should
2467  // probably be more strict
2468  // about what to accept.
2469 
2470  g_curClassBases.inSort(pycodeYYtext);
2471  generateClassOrGlobalLink(*g_code,pycodeYYtext);
2472  // codify(pycodeYYtext);
2473  }
2474  YY_BREAK
2475 case 11:
2477 #line 1061 "pycode.l"
2478 {
2479  codify(pycodeYYtext);
2480 
2481  // Assume this will
2482  // be a one-line suite;
2483  // found counter-example
2484  // in SuiteStart.
2485 
2486  // Push a class scope
2487 
2488  ClassDef *classDefToAdd = new ClassDef("<code>",1,1,g_curClassName,ClassDef::Class,0,0,FALSE);
2489  g_codeClassSDict.append(g_curClassName,classDefToAdd);
2490  char *s=g_curClassBases.first();
2491  while (s)
2492  {
2493  ClassDef *baseDefToAdd;
2494  baseDefToAdd=g_codeClassSDict[s];
2495 
2496  // Try to find class in global
2497  // scope
2498  if (baseDefToAdd==0)
2499  {
2500  baseDefToAdd=getResolvedClass(g_currentDefinition,g_sourceFileDef,s);
2501  }
2502 
2503  if (baseDefToAdd && baseDefToAdd!=classDefToAdd)
2504  {
2505  classDefToAdd->insertBaseClass(baseDefToAdd,s,Public,Normal);
2506  }
2507 
2508  s=g_curClassBases.next();
2509  }
2510 
2511  // Reset class-parsing variables.
2512  g_curClassName.resize(0);
2513  g_curClassBases.clear();
2514 
2515  g_noSuiteFound = TRUE;
2516  BEGIN( SuiteStart );
2517  }
2518  YY_BREAK
2519 
2520 
2521 case 12:
2523 #line 1105 "pycode.l"
2524 {
2525  generateFunctionLink(*g_code,pycodeYYtext);
2526  }
2527  YY_BREAK
2528 case 13:
2530 #line 1109 "pycode.l"
2531 {
2532  codify(pycodeYYtext);
2533  BEGIN( FunctionParams );
2534  }
2535  YY_BREAK
2536 
2537 
2538 case 14:
2540 #line 1116 "pycode.l"
2541 {
2542  // Parses delimiters
2543  codify(pycodeYYtext);
2544  }
2545  YY_BREAK
2546 case 15:
2548 #line 1121 "pycode.l"
2549 {
2550  codify(pycodeYYtext);
2551  }
2552  YY_BREAK
2553 case 16:
2555 #line 1125 "pycode.l"
2556 {
2557  codify(pycodeYYtext);
2558  }
2559  YY_BREAK
2560 case 17:
2562 #line 1129 "pycode.l"
2563 {
2564  codify(pycodeYYtext);
2565 
2566  // Assume this will
2567  // be a one-line suite;
2568  // found counter-example
2569  // in SuiteStart.
2570  g_noSuiteFound = TRUE;
2571  BEGIN( SuiteStart );
2572  }
2573  YY_BREAK
2574 
2575 
2576 case 18:
2578 #line 1143 "pycode.l"
2579 {
2580  // Position-sensitive rules!
2581  // Must come AFTER keyword-triggered rules
2582  // Must come BEFORE identifier NONEMPTY-like rules
2583  // to syntax highlight.
2584 
2585  startFontClass("keyword");
2586  codify(pycodeYYtext);
2587  endFontClass();
2588  }
2589  YY_BREAK
2590 case 19:
2592 #line 1154 "pycode.l"
2593 {
2594  startFontClass("keywordflow");
2595  codify(pycodeYYtext);
2596  endFontClass();
2597  }
2598  YY_BREAK
2599 case 20:
2600 *yy_cp = (yy_hold_char); /* undo effects of setting up pycodeYYtext */
2601 (yy_c_buf_p) = yy_cp -= 1;
2602 YY_DO_BEFORE_ACTION; /* set up pycodeYYtext again */
2604 #line 1159 "pycode.l"
2605 {
2606  generateClassOrGlobalLink(*g_code,pycodeYYtext);
2607  }
2608  YY_BREAK
2609 case 21:
2611 #line 1162 "pycode.l"
2612 {
2613  generateClassOrGlobalLink(*g_code,pycodeYYtext,TRUE);
2614  }
2615  YY_BREAK
2616 case 22:
2618 #line 1165 "pycode.l"
2619 { codify(pycodeYYtext); }
2620  YY_BREAK
2621 
2622 
2623 case 23:
2625 #line 1173 "pycode.l"
2626 {
2627  codify(pycodeYYtext);
2628  }
2629  YY_BREAK
2630 case 24:
2632 #line 1176 "pycode.l"
2633 {
2634  startFontClass("keyword");
2635  codifyLines(pycodeYYtext);
2636  endFontClass();
2637  BEGIN(Body);
2638  }
2639  YY_BREAK
2640 case 25:
2642 #line 1182 "pycode.l"
2643 {
2644  startFontClass("keyword");
2645  codifyLines(pycodeYYtext);
2646  endFontClass();
2647 
2648  // No indentation necessary
2649  g_noSuiteFound = FALSE;
2650  }
2651  YY_BREAK
2652 case 26:
2654 #line 1191 "pycode.l"
2655 {
2656  startFontClass("keywordflow");
2657  codifyLines(pycodeYYtext);
2658  endFontClass();
2659 
2660  // No indentation necessary
2661  g_noSuiteFound = FALSE;
2662  }
2663  YY_BREAK
2664 case 27:
2666 #line 1199 "pycode.l"
2667 {
2668  codify(pycodeYYtext);
2669  }
2670  YY_BREAK
2671 case 28:
2673 #line 1204 "pycode.l"
2674 {
2675  if (YY_START==SingleQuoteString ||
2678  )
2679  {
2680  REJECT;
2681  }
2683  BEGIN(DocBlock);
2684  g_docBlock=pycodeYYtext;
2685  }
2686  YY_BREAK
2687 case 29:
2688 /* rule 29 can match eol */
2690 #line 1217 "pycode.l"
2691 {
2692  codifyLines(pycodeYYtext);
2693  if ( g_noSuiteFound )
2694  {
2695  // printf("New suite to capture! [%d]\n", g_yyLineNr);
2697  }
2698  }
2699  YY_BREAK
2700 
2701 
2702 case 30:
2703 /* rule 30 can match eol */
2705 #line 1228 "pycode.l"
2706 {
2707  // Blankline - ignore, keep looking for indentation.
2708  codifyLines(pycodeYYtext);
2709  }
2710  YY_BREAK
2711 case 31:
2713 #line 1233 "pycode.l"
2714 {
2715  // This state lasts momentarily,
2716  // to check the indentation
2717  // level that is about to be
2718  // used.
2719  codifyLines(pycodeYYtext);
2720  g_indents.push(pycodeYYleng);
2721  // printf("Captured indent of %d [line %d]\n", pycodeYYleng, g_yyLineNr);
2722  BEGIN( Suite );
2723  }
2724  YY_BREAK
2725 
2726 
2727 case 32:
2729 #line 1247 "pycode.l"
2730 {
2731  // This implements poor
2732  // indendation-tracking;
2733  // should be improved.
2734  // (translate tabs to space, etc)
2735  codifyLines(pycodeYYtext);
2737  }
2738  YY_BREAK
2739 case 33:
2740 /* rule 33 can match eol */
2742 #line 1256 "pycode.l"
2743 {
2744  // If this ever succeeds,
2745  // it means that this is
2746  // a blank line, and
2747  // can be ignored.
2748  codifyLines(pycodeYYtext);
2749  }
2750  YY_BREAK
2751 case 34:
2753 #line 1264 "pycode.l"
2754 {
2755  // Default rule; matches
2756  // the empty string, assuming
2757  // real text starts here.
2758  // Just go straight to Body.
2760  }
2761  YY_BREAK
2762 
2763 case 35:
2764 /* rule 35 can match eol */
2766 #line 1274 "pycode.l"
2767 {
2768  codifyLines(pycodeYYtext);
2769  BEGIN( SuiteMaintain );
2770  }
2771  YY_BREAK
2772 case 36:
2774 #line 1278 "pycode.l"
2775 {
2776  codify(pycodeYYtext);
2777  }
2778  YY_BREAK
2779 case 37:
2780 /* rule 37 can match eol */
2782 #line 1281 "pycode.l"
2783 {
2784  codifyLines(pycodeYYtext);
2785  }
2786  YY_BREAK
2787 // Single quoted string like 'That\'s a """nice""" string!'
2788 case 38:
2789 /* rule 38 can match eol */
2791 #line 1286 "pycode.l"
2792 { // line continuation
2793  codifyLines(pycodeYYtext);
2794  }
2795  YY_BREAK
2796 case 39:
2798 #line 1289 "pycode.l"
2799 { // espaced char
2800  codify(pycodeYYtext);
2801  }
2802  YY_BREAK
2803 case 40:
2805 #line 1292 "pycode.l"
2806 { // tripple double quotes
2807  codify(pycodeYYtext);
2808  }
2809  YY_BREAK
2810 case 41:
2812 #line 1295 "pycode.l"
2813 { // end of the string
2814  codify(pycodeYYtext);
2815  endFontClass();
2816  BEGIN(g_stringContext);
2817  }
2818  YY_BREAK
2819 case 42:
2821 #line 1300 "pycode.l"
2822 { // normal chars
2823  codify(pycodeYYtext);
2824  }
2825  YY_BREAK
2826 case 43:
2828 #line 1303 "pycode.l"
2829 { // normal char
2830  codify(pycodeYYtext);
2831  }
2832  YY_BREAK
2833 
2834 // Double quoted string like "That's \"a '''nice'''\" string!"
2835 case 44:
2836 /* rule 44 can match eol */
2838 #line 1309 "pycode.l"
2839 { // line continuation
2840  codifyLines(pycodeYYtext);
2841  }
2842  YY_BREAK
2843 case 45:
2845 #line 1312 "pycode.l"
2846 { // espaced char
2847  codify(pycodeYYtext);
2848  }
2849  YY_BREAK
2850 case 46:
2852 #line 1315 "pycode.l"
2853 { // tripple single quotes
2854  codify(pycodeYYtext);
2855  }
2856  YY_BREAK
2857 case 47:
2859 #line 1318 "pycode.l"
2860 { // end of the string
2861  codify(pycodeYYtext);
2862  endFontClass();
2863  BEGIN(g_stringContext);
2864  }
2865  YY_BREAK
2866 case 48:
2868 #line 1323 "pycode.l"
2869 { // normal chars
2870  codify(pycodeYYtext);
2871  }
2872  YY_BREAK
2873 case 49:
2875 #line 1326 "pycode.l"
2876 { // normal char
2877  codify(pycodeYYtext);
2878  }
2879  YY_BREAK
2880 
2881 
2882 case 50:
2883 #line 1333 "pycode.l"
2884 case 51:
2886 #line 1333 "pycode.l"
2887 {
2888  codify(pycodeYYtext);
2889  if (g_doubleQuote==(pycodeYYtext[0]=='"'))
2890  {
2891  endFontClass();
2892  BEGIN(g_stringContext);
2893  }
2894  }
2895  YY_BREAK
2896 case 52:
2897 /* rule 52 can match eol */
2899 #line 1341 "pycode.l"
2900 {
2901  codifyLines(pycodeYYtext);
2902  }
2903  YY_BREAK
2904 case 53:
2905 /* rule 53 can match eol */
2907 #line 1344 "pycode.l"
2908 {
2909  codifyLines(pycodeYYtext);
2910  }
2911  YY_BREAK
2912 case 54:
2914 #line 1347 "pycode.l"
2915 {
2916  codify(pycodeYYtext);
2917  }
2918  YY_BREAK
2919 
2920 /*
2921 <*>({NONEMPTY}|{EXPCHAR}|{BB}) { // This should go one character at a time.
2922  codify(pycodeYYtext);
2923  // printf("[pycode] '%s' [ state %d ] [line %d] no match\n",
2924  // pycodeYYtext, YY_START, g_yyLineNr);
2925 
2926  //endFontClass();
2927  BEGIN(Body);
2928  }
2929  */
2930 case 55:
2931 #line 1364 "pycode.l"
2932 case 56:
2934 #line 1364 "pycode.l"
2935 {
2936  startFontClass("stringliteral");
2937  g_stringContext=YY_START;
2938  g_doubleQuote=pycodeYYtext[pycodeYYleng-1]=='"';
2939  codify(pycodeYYtext);
2941  }
2942  YY_BREAK
2943 case 57:
2945 #line 1371 "pycode.l"
2946 { // single quoted string
2947  startFontClass("stringliteral");
2948  g_stringContext=YY_START;
2949  codify(pycodeYYtext);
2951  }
2952  YY_BREAK
2953 case 58:
2955 #line 1377 "pycode.l"
2956 { // double quoted string
2957  startFontClass("stringliteral");
2958  g_stringContext=YY_START;
2959  codify(pycodeYYtext);
2961  }
2962  YY_BREAK
2963 case 59:
2965 #line 1383 "pycode.l"
2966 { // contents of current comment line
2967  g_docBlock+=pycodeYYtext;
2968  }
2969  YY_BREAK
2970 case 60:
2971 /* rule 60 can match eol */
2973 #line 1386 "pycode.l"
2974 { // comment block (next line is also comment line)
2975  g_docBlock+=pycodeYYtext;
2976  }
2977  YY_BREAK
2978 case 61:
2979 /* rule 61 can match eol */
2981 #line 1389 "pycode.l"
2982 { // comment block ends at the end of this line
2983  // remove special comment (default config)
2984  if (Config_getBool("STRIP_CODE_COMMENTS"))
2985  {
2986  g_yyLineNr+=((QCString)g_docBlock).contains('\n');
2987  g_endComment=TRUE;
2988  }
2989  else // do not remove comment
2990  {
2991  startFontClass("comment");
2992  codifyLines(g_docBlock);
2993  endFontClass();
2994  }
2995  unput(*pycodeYYtext);
2996  yy_pop_state();
2997  }
2998  YY_BREAK
2999 case 62:
3001 #line 1405 "pycode.l"
3002 {
3003  if (YY_START==SingleQuoteString ||
3006  )
3007  {
3008  REJECT;
3009  }
3011  BEGIN(DocBlock);
3012  g_docBlock=pycodeYYtext;
3013  }
3014  YY_BREAK
3015 case 63:
3017 #line 1417 "pycode.l"
3018 { // normal comment
3019  if (YY_START==SingleQuoteString ||
3022  )
3023  {
3024  REJECT;
3025  }
3026  startFontClass("comment");
3027  codifyLines(pycodeYYtext);
3028  endFontClass();
3029  }
3030  YY_BREAK
3031 case 64:
3032 /* rule 64 can match eol */
3034 #line 1429 "pycode.l"
3035 {
3036  if (g_endComment)
3037  {
3038  g_endComment=FALSE;
3039  }
3040  else
3041  {
3042  codifyLines(pycodeYYtext);
3043  }
3044  //printf("[pycode] %d NEWLINE [line %d] no match\n",
3045  // YY_START, g_yyLineNr);
3046 
3047  //endFontClass();
3048  BEGIN(Body);
3049  }
3050  YY_BREAK
3051 case 65:
3053 #line 1445 "pycode.l"
3054 {
3055  codify(pycodeYYtext);
3056  BEGIN(Body);
3057  }
3058  YY_BREAK
3059 case 66:
3061 #line 1449 "pycode.l"
3062 {
3063  codify(pycodeYYtext);
3064  // printf("[pycode] '%s' [ state %d ] [line %d] no match\n",
3065  // pycodeYYtext, YY_START, g_yyLineNr);
3066 
3067  //endFontClass();
3068  BEGIN(Body);
3069  }
3070  YY_BREAK
3071 case YY_STATE_EOF(INITIAL):
3072 case YY_STATE_EOF(Body):
3075 case YY_STATE_EOF(ClassDec):
3077 case YY_STATE_EOF(Suite):
3079 case YY_STATE_EOF(SuiteStart):
3082 case YY_STATE_EOF(LongString):
3086 case YY_STATE_EOF(DocBlock):
3087 #line 1458 "pycode.l"
3088 {
3089  if (YY_START == DocBlock) {
3090  if (!Config_getBool("STRIP_CODE_COMMENTS"))
3091  {
3092  startFontClass("comment");
3093  codifyLines(g_docBlock);
3094  endFontClass();
3095  }
3096  }
3097  yyterminate();
3098  }
3099  YY_BREAK
3100 case 67:
3102 #line 1469 "pycode.l"
3103 ECHO;
3104  YY_BREAK
3105 #line 3106 "/nova/app/home/novasoft/doxygen/doxygen-1.8.11/build/generated_src/pycode.cpp"
3106 
3107  case YY_END_OF_BUFFER:
3108  {
3109  /* Amount of text matched not including the EOB char. */
3110  int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
3111 
3112  /* Undo the effects of YY_DO_BEFORE_ACTION. */
3113  *yy_cp = (yy_hold_char);
3115 
3116  if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
3117  {
3118  /* We're scanning a new file or input source. It's
3119  * possible that this happened because the user
3120  * just pointed pycodeYYin at a new source and called
3121  * pycodeYYlex(). If so, then we have to assure
3122  * consistency between YY_CURRENT_BUFFER and our
3123  * globals. Here is the right place to do so, because
3124  * this is the first action (other than possibly a
3125  * back-up) that will match for the new input source.
3126  */
3127  (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
3128  YY_CURRENT_BUFFER_LVALUE->yy_input_file = pycodeYYin;
3129  YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
3130  }
3131 
3132  /* Note that here we test for yy_c_buf_p "<=" to the position
3133  * of the first EOB in the buffer, since yy_c_buf_p will
3134  * already have been incremented past the NUL character
3135  * (since all states make transitions on EOB to the
3136  * end-of-buffer state). Contrast this with the test
3137  * in input().
3138  */
3139  if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
3140  { /* This was really a NUL. */
3141  yy_state_type yy_next_state;
3142 
3143  (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
3144 
3145  yy_current_state = yy_get_previous_state( );
3146 
3147  /* Okay, we're now positioned to make the NUL
3148  * transition. We couldn't have
3149  * yy_get_previous_state() go ahead and do it
3150  * for us because it doesn't know how to deal
3151  * with the possibility of jamming (and we don't
3152  * want to build jamming into it because then it
3153  * will run more slowly).
3154  */
3155 
3156  yy_next_state = yy_try_NUL_trans( yy_current_state );
3157 
3158  yy_bp = (yytext_ptr) + YY_MORE_ADJ;
3159 
3160  if ( yy_next_state )
3161  {
3162  /* Consume the NUL. */
3163  yy_cp = ++(yy_c_buf_p);
3164  yy_current_state = yy_next_state;
3165  goto yy_match;
3166  }
3167 
3168  else
3169  {
3170  yy_cp = (yy_c_buf_p);
3171  goto yy_find_action;
3172  }
3173  }
3174 
3175  else switch ( yy_get_next_buffer( ) )
3176  {
3177  case EOB_ACT_END_OF_FILE:
3178  {
3180 
3181  if ( pycodeYYwrap( ) )
3182  {
3183  /* Note: because we've taken care in
3184  * yy_get_next_buffer() to have set up
3185  * pycodeYYtext, we can now set up
3186  * yy_c_buf_p so that if some total
3187  * hoser (like flex itself) wants to
3188  * call the scanner after we return the
3189  * YY_NULL, it'll still work - another
3190  * YY_NULL will get returned.
3191  */
3193 
3194  yy_act = YY_STATE_EOF(YY_START);
3195  goto do_action;
3196  }
3197 
3198  else
3199  {
3200  if ( ! (yy_did_buffer_switch_on_eof) )
3201  YY_NEW_FILE;
3202  }
3203  break;
3204  }
3205 
3206  case EOB_ACT_CONTINUE_SCAN:
3207  (yy_c_buf_p) =
3208  (yytext_ptr) + yy_amount_of_matched_text;
3209 
3210  yy_current_state = yy_get_previous_state( );
3211 
3212  yy_cp = (yy_c_buf_p);
3213  yy_bp = (yytext_ptr) + YY_MORE_ADJ;
3214  goto yy_match;
3215 
3216  case EOB_ACT_LAST_MATCH:
3217  (yy_c_buf_p) =
3218  &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
3219 
3220  yy_current_state = yy_get_previous_state( );
3221 
3222  yy_cp = (yy_c_buf_p);
3223  yy_bp = (yytext_ptr) + YY_MORE_ADJ;
3224  goto yy_find_action;
3225  }
3226  break;
3227  }
3228 
3229  default:
3231  "fatal flex scanner internal error--no action found" );
3232  } /* end of action switch */
3233  } /* end of scanning one token */
3234 } /* end of pycodeYYlex */
3235 
3236 /* yy_get_next_buffer - try to read in a new buffer
3237  *
3238  * Returns a code representing an action:
3239  * EOB_ACT_LAST_MATCH -
3240  * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
3241  * EOB_ACT_END_OF_FILE - end of file
3242  */
3243 static int yy_get_next_buffer (void)
3244 {
3245  register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
3246  register char *source = (yytext_ptr);
3247  register int number_to_move, i;
3248  int ret_val;
3249 
3250  if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
3252  "fatal flex scanner internal error--end of buffer missed" );
3253 
3254  if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
3255  { /* Don't try to fill the buffer, so this is an EOF. */
3256  if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
3257  {
3258  /* We matched a single character, the EOB, so
3259  * treat this as a final EOF.
3260  */
3261  return EOB_ACT_END_OF_FILE;
3262  }
3263 
3264  else
3265  {
3266  /* We matched some text prior to the EOB, first
3267  * process it.
3268  */
3269  return EOB_ACT_LAST_MATCH;
3270  }
3271  }
3272 
3273  /* Try to read more data. */
3274 
3275  /* First move last chars to start of buffer. */
3276  number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
3277 
3278  for ( i = 0; i < number_to_move; ++i )
3279  *(dest++) = *(source++);
3280 
3281  if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
3282  /* don't do the read, it's not guaranteed to return an EOF,
3283  * just force an EOF
3284  */
3285  YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
3286 
3287  else
3288  {
3289  int num_to_read =
3290  YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
3291 
3292  while ( num_to_read <= 0 )
3293  { /* Not enough room in the buffer - grow it. */
3294 
3296 "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
3297 
3298  }
3299 
3300  if ( num_to_read > YY_READ_BUF_SIZE )
3301  num_to_read = YY_READ_BUF_SIZE;
3302 
3303  /* Read in more data. */
3304  YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
3305  (yy_n_chars), (size_t) num_to_read );
3306 
3307  YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
3308  }
3309 
3310  if ( (yy_n_chars) == 0 )
3311  {
3312  if ( number_to_move == YY_MORE_ADJ )
3313  {
3314  ret_val = EOB_ACT_END_OF_FILE;
3316  }
3317 
3318  else
3319  {
3320  ret_val = EOB_ACT_LAST_MATCH;
3321  YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
3323  }
3324  }
3325 
3326  else
3327  ret_val = EOB_ACT_CONTINUE_SCAN;
3328 
3329  if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
3330  /* Extend the array by 50%, plus the number we really need. */
3331  yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
3332  YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) pycodeYYrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
3333  if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
3334  YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
3335  }
3336 
3337  (yy_n_chars) += number_to_move;
3340 
3341  (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
3342 
3343  return ret_val;
3344 }
3345 
3346 /* yy_get_previous_state - get the state just before the EOB char was reached */
3347 
3348  static yy_state_type yy_get_previous_state (void)
3349 {
3350  register yy_state_type yy_current_state;
3351  register char *yy_cp;
3352 
3353  yy_current_state = (yy_start);
3354 
3355  (yy_state_ptr) = (yy_state_buf);
3356  *(yy_state_ptr)++ = yy_current_state;
3357 
3358  for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
3359  {
3360  register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
3361  while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
3362  {
3363  yy_current_state = (int) yy_def[yy_current_state];
3364  if ( yy_current_state >= 540 )
3365  yy_c = yy_meta[(unsigned int) yy_c];
3366  }
3367  yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
3368  *(yy_state_ptr)++ = yy_current_state;
3369  }
3370 
3371  return yy_current_state;
3372 }
3373 
3374 /* yy_try_NUL_trans - try to make a transition on the NUL character
3375  *
3376  * synopsis
3377  * next_state = yy_try_NUL_trans( current_state );
3378  */
3379  static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
3380 {
3381  register int yy_is_jam;
3382 
3383  register YY_CHAR yy_c = 1;
3384  while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
3385  {
3386  yy_current_state = (int) yy_def[yy_current_state];
3387  if ( yy_current_state >= 540 )
3388  yy_c = yy_meta[(unsigned int) yy_c];
3389  }
3390  yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
3391  yy_is_jam = (yy_current_state == 539);
3392  if ( ! yy_is_jam )
3393  *(yy_state_ptr)++ = yy_current_state;
3394 
3395  return yy_is_jam ? 0 : yy_current_state;
3396 }
3397 
3398  static void yyunput (int c, register char * yy_bp )
3399 {
3400  register char *yy_cp;
3401 
3402  yy_cp = (yy_c_buf_p);
3403 
3404  /* undo effects of setting up pycodeYYtext */
3405  *yy_cp = (yy_hold_char);
3406 
3407  if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
3408  { /* need to shift things up to make room */
3409  /* +2 for EOB chars. */
3410  register int number_to_move = (yy_n_chars) + 2;
3411  register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
3412  YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
3413  register char *source =
3414  &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
3415 
3416  while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
3417  *--dest = *--source;
3418 
3419  yy_cp += (int) (dest - source);
3420  yy_bp += (int) (dest - source);
3421  YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
3422  (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
3423 
3424  if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
3425  YY_FATAL_ERROR( "flex scanner push-back overflow" );
3426  }
3427 
3428  *--yy_cp = (char) c;
3429 
3430  (yytext_ptr) = yy_bp;
3431  (yy_hold_char) = *yy_cp;
3432  (yy_c_buf_p) = yy_cp;
3433 }
3434 
3435 #ifndef YY_NO_INPUT
3436 #ifdef __cplusplus
3437  static int yyinput (void)
3438 #else
3439  static int input (void)
3440 #endif
3441 
3442 {
3443  int c;
3444 
3445  *(yy_c_buf_p) = (yy_hold_char);
3446 
3447  if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
3448  {
3449  /* yy_c_buf_p now points to the character we want to return.
3450  * If this occurs *before* the EOB characters, then it's a
3451  * valid NUL; if not, then we've hit the end of the buffer.
3452  */
3453  if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
3454  /* This was really a NUL. */
3455  *(yy_c_buf_p) = '\0';
3456 
3457  else
3458  { /* need more input */
3459  int offset = (yy_c_buf_p) - (yytext_ptr);
3460  ++(yy_c_buf_p);
3461 
3462  switch ( yy_get_next_buffer( ) )
3463  {
3464  case EOB_ACT_LAST_MATCH:
3465  /* This happens because yy_g_n_b()
3466  * sees that we've accumulated a
3467  * token and flags that we need to
3468  * try matching the token before
3469  * proceeding. But for input(),
3470  * there's no matching to consider.
3471  * So convert the EOB_ACT_LAST_MATCH
3472  * to EOB_ACT_END_OF_FILE.
3473  */
3474 
3475  /* Reset buffer status. */
3477 
3478  /*FALLTHROUGH*/
3479 
3480  case EOB_ACT_END_OF_FILE:
3481  {
3482  if ( pycodeYYwrap( ) )
3483  return EOF;
3484 
3485  if ( ! (yy_did_buffer_switch_on_eof) )
3486  YY_NEW_FILE;
3487 #ifdef __cplusplus
3488  return yyinput();
3489 #else
3490  return input();
3491 #endif
3492  }
3493 
3494  case EOB_ACT_CONTINUE_SCAN:
3495  (yy_c_buf_p) = (yytext_ptr) + offset;
3496  break;
3497  }
3498  }
3499  }
3500 
3501  c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
3502  *(yy_c_buf_p) = '\0'; /* preserve pycodeYYtext */
3503  (yy_hold_char) = *++(yy_c_buf_p);
3504 
3505  return c;
3506 }
3507 #endif /* ifndef YY_NO_INPUT */
3508 
3509 /** Immediately switch to a different input stream.
3510  * @param input_file A readable stream.
3511  *
3512  * @note This function does not reset the start condition to @c INITIAL .
3513  */
3515 {
3516 
3517  if ( ! YY_CURRENT_BUFFER ){
3521  }
3522 
3525 }
3526 
3527 /** Switch to a different input buffer.
3528  * @param new_buffer The new input buffer.
3529  *
3530  */
3531  void pycodeYY_switch_to_buffer (YY_BUFFER_STATE new_buffer )
3532 {
3533 
3534  /* TODO. We should be able to replace this entire function body
3535  * with
3536  * pycodeYYpop_buffer_state();
3537  * pycodeYYpush_buffer_state(new_buffer);
3538  */
3540  if ( YY_CURRENT_BUFFER == new_buffer )
3541  return;
3542 
3543  if ( YY_CURRENT_BUFFER )
3544  {
3545  /* Flush out information for old buffer. */
3546  *(yy_c_buf_p) = (yy_hold_char);
3547  YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
3548  YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
3549  }
3550 
3551  YY_CURRENT_BUFFER_LVALUE = new_buffer;
3553 
3554  /* We don't actually know whether we did this switch during
3555  * EOF (pycodeYYwrap()) processing, but the only time this flag
3556  * is looked at is after pycodeYYwrap() is called, so it's safe
3557  * to go ahead and always set it.
3558  */
3560 }
3561 
3562 static void pycodeYY_load_buffer_state (void)
3563 {
3564  (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
3565  (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
3566  pycodeYYin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
3567  (yy_hold_char) = *(yy_c_buf_p);
3568 }
3569 
3570 /** Allocate and initialize an input buffer state.
3571  * @param file A readable stream.
3572  * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
3573  *
3574  * @return the allocated buffer state.
3575  */
3576  YY_BUFFER_STATE pycodeYY_create_buffer (FILE * file, int size )
3577 {
3578  YY_BUFFER_STATE b;
3579 
3580  b = (YY_BUFFER_STATE) pycodeYYalloc(sizeof( struct yy_buffer_state ) );
3581  if ( ! b )
3582  YY_FATAL_ERROR( "out of dynamic memory in pycodeYY_create_buffer()" );
3583 
3584  b->yy_buf_size = size;
3585 
3586  /* yy_ch_buf has to be 2 characters longer than the size given because
3587  * we need to put in 2 end-of-buffer characters.
3588  */
3589  b->yy_ch_buf = (char *) pycodeYYalloc(b->yy_buf_size + 2 );
3590  if ( ! b->yy_ch_buf )
3591  YY_FATAL_ERROR( "out of dynamic memory in pycodeYY_create_buffer()" );
3592 
3593  b->yy_is_our_buffer = 1;
3594 
3595  pycodeYY_init_buffer(b,file );
3596 
3597  return b;
3598 }
3599 
3600 /** Destroy the buffer.
3601  * @param b a buffer created with pycodeYY_create_buffer()
3602  *
3603  */
3604  void pycodeYY_delete_buffer (YY_BUFFER_STATE b )
3605 {
3606 
3607  if ( ! b )
3608  return;
3609 
3610  if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
3612 
3613  if ( b->yy_is_our_buffer )
3614  pycodeYYfree((void *) b->yy_ch_buf );
3615 
3616  pycodeYYfree((void *) b );
3617 }
3618 
3619 /* Initializes or reinitializes a buffer.
3620  * This function is sometimes called more than once on the same buffer,
3621  * such as during a pycodeYYrestart() or at EOF.
3622  */
3623  static void pycodeYY_init_buffer (YY_BUFFER_STATE b, FILE * file )
3624 
3625 {
3626  int oerrno = errno;
3627 
3629 
3630  b->yy_input_file = file;
3631  b->yy_fill_buffer = 1;
3632 
3633  /* If b is the current buffer, then pycodeYY_init_buffer was _probably_
3634  * called from pycodeYYrestart() or through yy_get_next_buffer.
3635  * In that case, we don't want to reset the lineno or column.
3636  */
3637  if (b != YY_CURRENT_BUFFER){
3638  b->yy_bs_lineno = 1;
3639  b->yy_bs_column = 0;
3640  }
3641 
3642  b->yy_is_interactive = 0;
3643 
3644  errno = oerrno;
3645 }
3646 
3647 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
3648  * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
3649  *
3650  */
3651  void pycodeYY_flush_buffer (YY_BUFFER_STATE b )
3652 {
3653  if ( ! b )
3654  return;
3655 
3656  b->yy_n_chars = 0;
3657 
3658  /* We always need two end-of-buffer characters. The first causes
3659  * a transition to the end-of-buffer state. The second causes
3660  * a jam in that state.
3661  */
3664 
3665  b->yy_buf_pos = &b->yy_ch_buf[0];
3666 
3667  b->yy_at_bol = 1;
3669 
3670  if ( b == YY_CURRENT_BUFFER )
3672 }
3673 
3674 /** Pushes the new state onto the stack. The new state becomes
3675  * the current state. This function will allocate the stack
3676  * if necessary.
3677  * @param new_buffer The new state.
3678  *
3679  */
3680 void pycodeYYpush_buffer_state (YY_BUFFER_STATE new_buffer )
3681 {
3682  if (new_buffer == NULL)
3683  return;
3684 
3686 
3687  /* This block is copied from pycodeYY_switch_to_buffer. */
3688  if ( YY_CURRENT_BUFFER )
3689  {
3690  /* Flush out information for old buffer. */
3691  *(yy_c_buf_p) = (yy_hold_char);
3692  YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
3693  YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
3694  }
3695 
3696  /* Only push if top exists. Otherwise, replace top. */
3697  if (YY_CURRENT_BUFFER)
3698  (yy_buffer_stack_top)++;
3699  YY_CURRENT_BUFFER_LVALUE = new_buffer;
3700 
3701  /* copied from pycodeYY_switch_to_buffer. */
3704 }
3705 
3706 /** Removes and deletes the top of the stack, if present.
3707  * The next element becomes the new top.
3708  *
3709  */
3711 {
3712  if (!YY_CURRENT_BUFFER)
3713  return;
3714 
3716  YY_CURRENT_BUFFER_LVALUE = NULL;
3717  if ((yy_buffer_stack_top) > 0)
3718  --(yy_buffer_stack_top);
3719 
3720  if (YY_CURRENT_BUFFER) {
3723  }
3724 }
3725 
3726 /* Allocates the stack if it does not exist.
3727  * Guarantees space for at least one push.
3728  */
3730 {
3731  int num_to_alloc;
3732 
3733  if (!(yy_buffer_stack)) {
3734 
3735  /* First allocation is just for 2 elements, since we don't know if this
3736  * scanner will even need a stack. We use 2 instead of 1 to avoid an
3737  * immediate realloc on the next call.
3738  */
3739  num_to_alloc = 1;
3741  (num_to_alloc * sizeof(struct yy_buffer_state*)
3742  );
3743  if ( ! (yy_buffer_stack) )
3744  YY_FATAL_ERROR( "out of dynamic memory in pycodeYYensure_buffer_stack()" );
3745 
3746  memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
3747 
3748  (yy_buffer_stack_max) = num_to_alloc;
3749  (yy_buffer_stack_top) = 0;
3750  return;
3751  }
3752 
3753  if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
3754 
3755  /* Increase the buffer to prepare for a possible push. */
3756  int grow_size = 8 /* arbitrary grow size */;
3757 
3758  num_to_alloc = (yy_buffer_stack_max) + grow_size;
3760  ((yy_buffer_stack),
3761  num_to_alloc * sizeof(struct yy_buffer_state*)
3762  );
3763  if ( ! (yy_buffer_stack) )
3764  YY_FATAL_ERROR( "out of dynamic memory in pycodeYYensure_buffer_stack()" );
3765 
3766  /* zero only the new slots.*/
3767  memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
3768  (yy_buffer_stack_max) = num_to_alloc;
3769  }
3770 }
3771 
3772 /** Setup the input buffer state to scan directly from a user-specified character buffer.
3773  * @param base the character buffer
3774  * @param size the size in bytes of the character buffer
3775  *
3776  * @return the newly allocated buffer state object.
3777  */
3778 YY_BUFFER_STATE pycodeYY_scan_buffer (char * base, yy_size_t size )
3779 {
3780  YY_BUFFER_STATE b;
3781 
3782  if ( size < 2 ||
3783  base[size-2] != YY_END_OF_BUFFER_CHAR ||
3784  base[size-1] != YY_END_OF_BUFFER_CHAR )
3785  /* They forgot to leave room for the EOB's. */
3786  return 0;
3787 
3788  b = (YY_BUFFER_STATE) pycodeYYalloc(sizeof( struct yy_buffer_state ) );
3789  if ( ! b )
3790  YY_FATAL_ERROR( "out of dynamic memory in pycodeYY_scan_buffer()" );
3791 
3792  b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
3793  b->yy_buf_pos = b->yy_ch_buf = base;
3794  b->yy_is_our_buffer = 0;
3795  b->yy_input_file = 0;
3796  b->yy_n_chars = b->yy_buf_size;
3797  b->yy_is_interactive = 0;
3798  b->yy_at_bol = 1;
3799  b->yy_fill_buffer = 0;
3801 
3803 
3804  return b;
3805 }
3806 
3807 /** Setup the input buffer state to scan a string. The next call to pycodeYYlex() will
3808  * scan from a @e copy of @a str.
3809  * @param yystr a NUL-terminated string to scan
3810  *
3811  * @return the newly allocated buffer state object.
3812  * @note If you want to scan bytes that may contain NUL values, then use
3813  * pycodeYY_scan_bytes() instead.
3814  */
3815 YY_BUFFER_STATE pycodeYY_scan_string (yyconst char * yystr )
3816 {
3817 
3818  return pycodeYY_scan_bytes(yystr,strlen(yystr) );
3819 }
3820 
3821 /** Setup the input buffer state to scan the given bytes. The next call to pycodeYYlex() will
3822  * scan from a @e copy of @a bytes.
3823  * @param bytes the byte buffer to scan
3824  * @param len the number of bytes in the buffer pointed to by @a bytes.
3825  *
3826  * @return the newly allocated buffer state object.
3827  */
3828 YY_BUFFER_STATE pycodeYY_scan_bytes (yyconst char * yybytes, int _yybytes_len )
3829 {
3830  YY_BUFFER_STATE b;
3831  char *buf;
3832  yy_size_t n;
3833  int i;
3834 
3835  /* Get memory for full buffer, including space for trailing EOB's. */
3836  n = _yybytes_len + 2;
3837  buf = (char *) pycodeYYalloc(n );
3838  if ( ! buf )
3839  YY_FATAL_ERROR( "out of dynamic memory in pycodeYY_scan_bytes()" );
3840 
3841  for ( i = 0; i < _yybytes_len; ++i )
3842  buf[i] = yybytes[i];
3843 
3844  buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
3845 
3846  b = pycodeYY_scan_buffer(buf,n );
3847  if ( ! b )
3848  YY_FATAL_ERROR( "bad buffer in pycodeYY_scan_bytes()" );
3849 
3850  /* It's okay to grow etc. this buffer, and we should throw it
3851  * away when we're done.
3852  */
3853  b->yy_is_our_buffer = 1;
3854 
3855  return b;
3856 }
3857 
3858  static void yy_push_state (int new_state )
3859 {
3860  if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) )
3861  {
3862  yy_size_t new_size;
3863 
3865  new_size = (yy_start_stack_depth) * sizeof( int );
3866 
3867  if ( ! (yy_start_stack) )
3868  (yy_start_stack) = (int *) pycodeYYalloc(new_size );
3869 
3870  else
3871  (yy_start_stack) = (int *) pycodeYYrealloc((void *) (yy_start_stack),new_size );
3872 
3873  if ( ! (yy_start_stack) )
3874  YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
3875  }
3876 
3877  (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START;
3878 
3879  BEGIN(new_state);
3880 }
3881 
3882  static void yy_pop_state (void)
3883 {
3884  if ( --(yy_start_stack_ptr) < 0 )
3885  YY_FATAL_ERROR( "start-condition stack underflow" );
3886 
3887  BEGIN((yy_start_stack)[(yy_start_stack_ptr)]);
3888 }
3889 
3890  static int yy_top_state (void)
3891 {
3892  return (yy_start_stack)[(yy_start_stack_ptr) - 1];
3893 }
3894 
3895 #ifndef YY_EXIT_FAILURE
3896 #define YY_EXIT_FAILURE 2
3897 #endif
3898 
3899 static void yy_fatal_error (yyconst char* msg )
3900 {
3901  (void) fprintf( stderr, "%s\n", msg );
3902  exit( YY_EXIT_FAILURE );
3903 }
3904 
3905 /* Redefine yyless() so it works in section 3 code. */
3906 
3907 #undef yyless
3908 #define yyless(n) \
3909  do \
3910  { \
3911  /* Undo effects of setting up pycodeYYtext. */ \
3912  int yyless_macro_arg = (n); \
3913  YY_LESS_LINENO(yyless_macro_arg);\
3914  pycodeYYtext[pycodeYYleng] = (yy_hold_char); \
3915  (yy_c_buf_p) = pycodeYYtext + yyless_macro_arg; \
3916  (yy_hold_char) = *(yy_c_buf_p); \
3917  *(yy_c_buf_p) = '\0'; \
3918  pycodeYYleng = yyless_macro_arg; \
3919  } \
3920  while ( 0 )
3921 
3922 /* Accessor methods (get/set functions) to struct members. */
3923 
3924 /** Get the current line number.
3925  *
3926  */
3928 {
3929 
3930  return pycodeYYlineno;
3931 }
3932 
3933 /** Get the input stream.
3934  *
3935  */
3936 FILE *pycodeYYget_in (void)
3937 {
3938  return pycodeYYin;
3939 }
3940 
3941 /** Get the output stream.
3942  *
3943  */
3944 FILE *pycodeYYget_out (void)
3945 {
3946  return pycodeYYout;
3947 }
3948 
3949 /** Get the length of the current token.
3950  *
3951  */
3953 {
3954  return pycodeYYleng;
3955 }
3956 
3957 /** Get the current token.
3958  *
3959  */
3960 
3961 char *pycodeYYget_text (void)
3962 {
3963  return pycodeYYtext;
3964 }
3965 
3966 /** Set the current line number.
3967  * @param line_number
3968  *
3969  */
3970 void pycodeYYset_lineno (int line_number )
3971 {
3972 
3973  pycodeYYlineno = line_number;
3974 }
3975 
3976 /** Set the input stream. This does not discard the current
3977  * input buffer.
3978  * @param in_str A readable stream.
3979  *
3980  * @see pycodeYY_switch_to_buffer
3981  */
3982 void pycodeYYset_in (FILE * in_str )
3983 {
3984  pycodeYYin = in_str ;
3985 }
3986 
3987 void pycodeYYset_out (FILE * out_str )
3988 {
3989  pycodeYYout = out_str ;
3990 }
3991 
3993 {
3994  return pycodeYY_flex_debug;
3995 }
3996 
3997 void pycodeYYset_debug (int bdebug )
3998 {
3999  pycodeYY_flex_debug = bdebug ;
4000 }
4001 
4002 static int yy_init_globals (void)
4003 {
4004  /* Initialization is the same as for the non-reentrant scanner.
4005  * This function is called from pycodeYYlex_destroy(), so don't allocate here.
4006  */
4007 
4008  (yy_buffer_stack) = 0;
4009  (yy_buffer_stack_top) = 0;
4010  (yy_buffer_stack_max) = 0;
4011  (yy_c_buf_p) = (char *) 0;
4012  (yy_init) = 0;
4013  (yy_start) = 0;
4014 
4015  (yy_start_stack_ptr) = 0;
4016  (yy_start_stack_depth) = 0;
4017  (yy_start_stack) = NULL;
4018 
4019  (yy_state_buf) = 0;
4020  (yy_state_ptr) = 0;
4021  (yy_full_match) = 0;
4022  (yy_lp) = 0;
4023 
4024 /* Defined in main.c */
4025 #ifdef YY_STDINIT
4026  pycodeYYin = stdin;
4027  pycodeYYout = stdout;
4028 #else
4029  pycodeYYin = (FILE *) 0;
4030  pycodeYYout = (FILE *) 0;
4031 #endif
4032 
4033  /* For future reference: Set errno on error, since we are called by
4034  * pycodeYYlex_init()
4035  */
4036  return 0;
4037 }
4038 
4039 /* pycodeYYlex_destroy is for both reentrant and non-reentrant scanners. */
4041 {
4042 
4043  /* Pop the buffer stack, destroying each element. */
4044  while(YY_CURRENT_BUFFER){
4046  YY_CURRENT_BUFFER_LVALUE = NULL;
4048  }
4049 
4050  /* Destroy the stack itself. */
4051  pycodeYYfree((yy_buffer_stack) );
4052  (yy_buffer_stack) = NULL;
4053 
4054  /* Destroy the start condition stack. */
4055  pycodeYYfree((yy_start_stack) );
4056  (yy_start_stack) = NULL;
4057 
4058  pycodeYYfree ( (yy_state_buf) );
4059  (yy_state_buf) = NULL;
4060 
4061  /* Reset the globals. This is important in a non-reentrant scanner so the next time
4062  * pycodeYYlex() is called, initialization will occur. */
4063  yy_init_globals( );
4064 
4065  return 0;
4066 }
4067 
4068 /*
4069  * Internal utility routines.
4070  */
4071 
4072 #ifndef yytext_ptr
4073 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
4074 {
4075  register int i;
4076  for ( i = 0; i < n; ++i )
4077  s1[i] = s2[i];
4078 }
4079 #endif
4080 
4081 #ifdef YY_NEED_STRLEN
4082 static int yy_flex_strlen (yyconst char * s )
4083 {
4084  register int n;
4085  for ( n = 0; s[n]; ++n )
4086  ;
4087 
4088  return n;
4089 }
4090 #endif
4091 
4093 {
4094  return (void *) malloc( size );
4095 }
4096 
4097 void *pycodeYYrealloc (void * ptr, yy_size_t size )
4098 {
4099  /* The cast to (char *) in the following accommodates both
4100  * implementations that use char* generic pointers, and those
4101  * that use void* generic pointers. It works with the latter
4102  * because both ANSI C and C++ allow castless assignment from
4103  * any pointer type to void*, and deal with argument conversions
4104  * as though doing an assignment.
4105  */
4106  return (void *) realloc( (char *) ptr, size );
4107 }
4108 
4109 void pycodeYYfree (void * ptr )
4110 {
4111  free( (char *) ptr ); /* see pycodeYYrealloc() for (char *) cast */
4112 }
4113 
4114 #define YYTABLES_NAME "yytables"
4115 
4116 #line 1469 "pycode.l"
4117 
4118 
4119 
4120 /*@ ----------------------------------------------------------------------------
4121  */
4122 
4124 {
4125  g_currentDefinition = 0;
4126  g_currentMemberDef = 0;
4127  g_doubleStringIsDoc = FALSE;
4128  g_paramParens = 0;
4129  g_indents.clear();
4130  BEGIN( Body );
4131 }
4132 
4133 /*!
4134  Examines current stack of white-space indentations;
4135  re-syncs the parser with the correct scope.
4136 */
4137 static void adjustScopesAndSuites(unsigned indentLength)
4138 {
4139  // States to pop
4140  if (!g_indents.isEmpty() && indentLength < g_indents.top())
4141  {
4142  while (!g_indents.isEmpty() && indentLength < g_indents.top())
4143  {
4144  // printf("Exited scope indent of [%d]\n", g_indents.top());
4145  g_indents.pop(); // Pop the old suite's indentation
4146 
4147  g_currentMemberDef=0;
4148  if (g_currentDefinition)
4149  g_currentDefinition=g_currentDefinition->getOuterScope();
4150  }
4151  }
4152 
4153  // Are there any remaining indentation levels for suites?
4154  if (!g_indents.isEmpty())
4155  {
4156  BEGIN( Suite );
4157  }
4158  else
4159  {
4160  BEGIN( Body );
4161  }
4162 }
4163 
4164 void parsePythonCode(CodeOutputInterface &od,const char * /*className*/,
4165  const QCString &s,bool exBlock, const char *exName,
4166  FileDef *fd,int startLine,int endLine,bool /*inlineFragment*/,
4167  MemberDef *,bool,Definition *searchCtx,bool collectXRefs)
4168 {
4169 
4170  //printf("***parseCode()\n");
4171 
4172  //--------------------------------------
4173  if (s.isEmpty()) return;
4174  printlex(pycodeYY_flex_debug, TRUE, __FILE__, fd ? fd->fileName().data(): NULL);
4176  g_code = &od;
4177  g_inputString = s;
4178  g_inputPosition = 0;
4179  g_currentFontClass = 0;
4180  g_needsTermination = FALSE;
4181  g_searchCtx=searchCtx;
4182  g_collectXRefs=collectXRefs;
4183  if (endLine!=-1)
4184  g_inputLines = endLine+1;
4185  else
4186  g_inputLines = countLines();
4187 
4188  if (startLine!=-1)
4189  g_yyLineNr = startLine;
4190  else
4191  g_yyLineNr = 1;
4192 
4193  g_exampleBlock = exBlock;
4194  g_exampleName = exName;
4195  g_sourceFileDef = fd;
4196 
4197  bool cleanupSourceDef = FALSE;
4198  if (fd==0)
4199  {
4200  // create a dummy filedef for the example
4201  g_sourceFileDef = new FileDef("",(exName?exName:"generated"));
4202  cleanupSourceDef = TRUE;
4203  }
4204  if (g_sourceFileDef)
4205  {
4206  setCurrentDoc("l00001");
4207  }
4208 
4209  // Starts line 1 on the output
4210  startCodeLine();
4211 
4213 
4214  pycodeYYlex();
4215 
4216  if (!g_indents.isEmpty())
4217  {
4218  // printf("Exited pysourceparser in inconsistent state!\n");
4219  }
4220 
4221  if (g_needsTermination)
4222  {
4223  endCodeLine();
4224  }
4225  if (fd)
4226  {
4228  }
4229  if (cleanupSourceDef)
4230  {
4231  // delete the temporary file definition used for this example
4232  delete g_sourceFileDef;
4233  g_sourceFileDef=0;
4234  }
4235  printlex(pycodeYY_flex_debug, FALSE, __FILE__, fd ? fd->fileName().data(): NULL);
4236  return;
4237 }
4238 
4239 
4240 #if !defined(YY_FLEX_SUBMINOR_VERSION)
4241 extern "C" { // some bogus code to keep the compiler happy
4242  void pycodeYYdummy() { yy_flex_realloc(0,0); }
4243 }
4244 #elif YY_FLEX_MAJOR_VERSION<=2 && YY_FLEX_MINOR_VERSION<=5 && YY_FLEX_SUBMINOR_VERSION<33
4245 #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)."
4246 #endif
4247 
4248 
static void endFontClass()
Definition: pycode.cpp:1657
static QCString name
Definition: declinfo.cpp:673
static bool g_searchingForBody
Definition: pycode.cpp:1245
static int yyread(char *buf, int max_size)
Definition: pycode.cpp:2013
#define YY_READ_BUF_SIZE
Definition: pycode.cpp:2145
int pycodeYYlineno
Definition: pycode.cpp:365
static QCString g_classScope
Definition: pycode.cpp:1246
bool resize(uint newlen)
Definition: qcstring.h:225
void pycodeYYfree(void *)
Definition: pycode.cpp:4109
void pycodeYYpop_buffer_state(void)
Definition: pycode.cpp:3710
static yyconst flex_int16_t yy_nxt[1769]
Definition: pycode.cpp:750
static QCString g_type
Definition: pycode.cpp:1253
static void addVariable(EntryNav *rootNav, int isFuncPtr=-1)
Definition: doxygen.cpp:2808
static void writeMultiLineCodeLink(CodeOutputInterface &ol, Definition *d, const char *text)
Definition: pycode.cpp:1607
static bool g_noSuiteFound
Definition: pycode.cpp:1258
static char * yy_full_match
Definition: pycode.cpp:1150
#define YY_BREAK
Definition: pycode.cpp:2232
#define SuiteMaintain
Definition: pycode.cpp:2050
char * yy_buf_pos
Definition: code.cpp:213
static yy_state_type * yy_state_ptr
Definition: pycode.cpp:1149
FILE * yy_input_file
Definition: code.cpp:210
short int flex_int16_t
Definition: code.cpp:71
static int g_inputLines
number of line in the code fragment
Definition: pycode.cpp:1236
void pycodeYY_switch_to_buffer(YY_BUFFER_STATE new_buffer)
Definition: pycode.cpp:3531
int yy_n_chars
Definition: code.cpp:223
#define TripleString
Definition: pycode.cpp:2055
virtual bool isLinkable() const =0
void clear()
Definition: pycode.cpp:1424
void resetPythonCodeParserState()
Definition: pycode.cpp:4123
FILE * pycodeYYget_in(void)
Definition: pycode.cpp:3936
static QCString scope
Definition: declinfo.cpp:668
static bool findMemberLink(CodeOutputInterface &ol, Definition *sym, const char *symName)
Definition: pycode.cpp:1947
#define EOB_ACT_LAST_MATCH
Definition: pycode.cpp:181
static yyconst flex_int32_t yy_meta[44]
Definition: pycode.cpp:607
virtual QCString getReference() const
MemberDef * getMemberByName(const QCString &) const
static int yy_start_stack_depth
Definition: pycode.cpp:2134
static QCString result
bool isEmpty() const
Definition: qcstring.h:189
QCString getReference() const
Definition: memberdef.cpp:1001
static PyCallContext g_theCallContext
Definition: pycode.cpp:1444
virtual void writeLineNumber(const char *ref, const char *file, const char *anchor, int lineNumber)=0
MemberDef * getSourceMember(int lineNr) const
Definition: filedef.cpp:1226
void msg(const char *fmt,...)
Definition: message.cpp:107
static int yy_get_next_buffer(void)
Definition: pycode.cpp:3243
void printlex(int dbg, bool enter, const char *lexName, const char *fileName)
Definition: message.cpp:242
#define YY_CURRENT_BUFFER
Definition: pycode.cpp:282
int yy_fill_buffer
Definition: code.cpp:250
#define yytext_ptr
Definition: pycode.cpp:368
uint length() const
Definition: qcstring.h:195
virtual bool isLinkableInProject() const =0
YY_BUFFER_STATE pycodeYY_create_buffer(FILE *file, int size)
Definition: pycode.cpp:3576
char * pycodeYYget_text(void)
Definition: pycode.cpp:3961
register int yy_act
Definition: pycode.cpp:2244
void addTooltip(Definition *d)
Definition: tooltip.cpp:71
Definition: types.h:26
static yy_state_type yy_get_previous_state(void)
Definition: pycode.cpp:3348
#define SuiteStart
Definition: pycode.cpp:2049
static int yy_did_buffer_switch_on_eof
Definition: pycode.cpp:304
static const char * g_inputString
the code fragment as text
Definition: pycode.cpp:1230
#define YY_EXIT_FAILURE
Definition: pycode.cpp:3896
#define YY_BUFFER_NORMAL
Definition: pycode.cpp:255
static int g_bodyCurlyCount
Definition: pycode.cpp:1244
type * first()
Definition: qinternallist.h:87
static int countLines()
Definition: pycode.cpp:1448
static int * yy_start_stack
Definition: pycode.cpp:2135
#define unput(c)
Definition: pycode.cpp:199
static CodeOutputInterface * g_code
Definition: pycode.cpp:1229
static void generateClassOrGlobalLink(CodeOutputInterface &ol, char *clName, bool typeOnly=FALSE)
Definition: pycode.cpp:1777
virtual ~PyCallContext()
Definition: pycode.cpp:1392
FILE * pycodeYYout
Definition: pycode.cpp:359
void pushScope()
Definition: pycode.cpp:1402
FileDef * getBodyDef() const
#define Suite
Definition: pycode.cpp:2047
static ClassSDict g_codeClassSDict(17)
static Definition * g_searchCtx
Definition: pycode.cpp:1234
int flex_int32_t
Definition: pycode.cpp:72
static YY_BUFFER_STATE * yy_buffer_stack
Definition: pycode.cpp:274
static char * yy_c_buf_p
Definition: pycode.cpp:297
static int yy_lp
Definition: pycode.cpp:1151
void clear()
Definition: qvaluelist.h:396
const bool FALSE
Definition: qglobal.h:370
#define DoubleQuoteString
Definition: pycode.cpp:2054
virtual void endFontClass()=0
static void yy_fatal_error(yyconst char msg[])
YY_BUFFER_STATE pycodeYY_scan_bytes(yyconst char *bytes, int len)
Definition: pycode.cpp:3828
virtual void startFontClass(const char *clsName)=0
static QCString g_name
Definition: pycode.cpp:1254
int yy_bs_lineno
Definition: code.cpp:244
YY_BUFFER_STATE pycodeYY_scan_buffer(char *base, yy_size_t size)
Definition: pycode.cpp:3778
static bool g_exampleBlock
Definition: pycode.cpp:1250
void pycodeYYpush_buffer_state(YY_BUFFER_STATE new_buffer)
Definition: pycode.cpp:3680
static Definition * g_currentDefinition
Definition: pycode.cpp:1239
static QCString className
Definition: declinfo.cpp:669
int yy_state_type
Definition: pycode.cpp:361
QCString left(uint len) const
Definition: qcstring.cpp:213
void clearTooltips()
Definition: tooltip.cpp:54
static int * yy_full_state
Definition: pycode.cpp:1154
static bool getLink(const char *className, const char *memberName, CodeOutputInterface &ol, const char *text=0)
Definition: pycode.cpp:1752
int errno
Contains the last error code.
Definition: structcmd.h:53
unsigned int flex_uint32_t
Definition: pycode.cpp:75
MemberDef * getMemberByName(const QCString &) const
Definition: classdef.cpp:3968
#define ECHO
Definition: pycode.cpp:2153
virtual QCString getOutputFileBase() const =0
static int g_stringContext
Definition: pycode.cpp:1259
void pycodeYY_delete_buffer(YY_BUFFER_STATE b)
Definition: pycode.cpp:3604
yy_size_t yy_buf_size
Definition: code.cpp:218
virtual QCString displayName(bool includeScope=TRUE) const =0
void append(const char *key, const T *d)
Definition: sortdict.h:135
static yyconst flex_int32_t yy_ec[256]
Definition: pycode.cpp:575
ClassDef * findVariable(const QCString &name)
Definition: pycode.cpp:1352
int findRev(char c, int index=-1, bool cs=TRUE) const
Definition: qcstring.cpp:95
Definition: types.h:29
bool isBaseClass(ClassDef *bcd, bool followInstances, int level=0)
Definition: classdef.cpp:2777
virtual ~PyVariableContext()
Definition: pycode.cpp:1290
char * pycodeYYtext
Definition: pycode.cpp:1171
YY_EXTRA_TYPE pycodeYYget_extra(void)
QCString copy() const
Definition: qcstring.h:250
ClassDef * getClass(const char *n)
Definition: util.cpp:472
#define FunctionParams
Definition: pycode.cpp:2044
register char * yy_bp
Definition: pycode.cpp:2243
static int yy_init
Definition: pycode.cpp:298
void parsePythonCode(CodeOutputInterface &od, const char *, const QCString &s, bool exBlock, const char *exName, FileDef *fd, int startLine, int endLine, bool, MemberDef *, bool, Definition *searchCtx, bool collectXRefs)
Definition: pycode.cpp:4164
decltype(auto) constexpr size(T &&obj)
ADL-aware version of std::size.
Definition: StdUtils.h:92
static NamespaceDef * globalScope
Definition: doxygen.h:128
#define pycodeYYwrap(n)
Definition: pycode.cpp:354
virtual DefType definitionType() const =0
void push(const T &d)
Definition: qvaluestack.h:52
void pycodeYYrestart(FILE *input_file)
Definition: pycode.cpp:3514
Definition: sortdict.h:73
const char * typeString() const
Definition: memberdef.cpp:4035
size_t yy_size_t
Definition: pycode.cpp:203
static QCString g_realScope
Definition: pycode.cpp:1242
#define YY_DECL
Definition: pycode.cpp:2220
#define YY_TRAILING_HEAD_MASK
Definition: pycode.cpp:1156
#define SingleQuoteString
Definition: pycode.cpp:2053
static SearchIndexIntf * searchIndex
Definition: doxygen.h:133
#define YY_END_OF_BUFFER_CHAR
Definition: pycode.cpp:159
const QCString & name() const
Definition: definition.h:114
FILE * pycodeYYget_out(void)
Definition: pycode.cpp:3944
int yy_bs_column
Definition: code.cpp:245
if(!(yy_init))
Definition: pycode.cpp:2251
static char yy_hold_char
Definition: pycode.cpp:292
static int yy_looking_for_trail_begin
Definition: pycode.cpp:1152
static int input(void)
Definition: code.cpp:15695
static void yy_pop_state(void)
Definition: pycode.cpp:3882
static yyconst flex_int16_t yy_chk[1769]
Definition: pycode.cpp:948
unsigned char YY_CHAR
Definition: pycode.cpp:357
int pycodeYY_flex_debug
Definition: pycode.cpp:1147
bool getDefs(const QCString &scName, const QCString &mbName, const char *args, MemberDef *&md, ClassDef *&cd, FileDef *&fd, NamespaceDef *&nd, GroupDef *&gd, bool forceEmptyScope, FileDef *currentFile, bool checkCV, const char *forceTagFile)
Definition: util.cpp:3932
#define INITIAL
Definition: pycode.cpp:2041
unsigned short int flex_uint16_t
Definition: pycode.cpp:74
#define YY_BUFFER_EOF_PENDING
Definition: pycode.cpp:266
static QCString g_curClassName
Definition: pycode.cpp:1225
void pycodeYYset_debug(int debug_flag)
Definition: pycode.cpp:3997
static void yyunput(int c, char *buf_ptr)
static void startFontClass(const char *s)
Definition: pycode.cpp:1645
virtual void writeCodeLink(const char *ref, const char *file, const char *anchor, const char *name, const char *tooltip)=0
#define DocBlock
Definition: pycode.cpp:2056
#define YY_START_STACK_INCR
Definition: pycode.cpp:2202
QCString right(uint len) const
Definition: qcstring.cpp:231
std::void_t< T > n
static void setCurrentDoc(const QCString &anchor)
Definition: pycode.cpp:1467
static void pycodeYYensure_buffer_stack(void)
Definition: pycode.cpp:3729
void pycodeYYset_extra(YY_EXTRA_TYPE user_defined)
static MemberDef * g_currentMemberDef
Definition: pycode.cpp:1240
void setClass(ClassDef *cd)
Definition: pycode.cpp:1394
static int g_inputPosition
read offset during parsing
Definition: pycode.cpp:1231
#define ClassInheritance
Definition: pycode.cpp:2046
virtual void addWord(const char *word, bool hiPriority)=0
int pycodeYYget_leng(void)
Definition: pycode.cpp:3952
#define FunctionDec
Definition: pycode.cpp:2043
void popScope()
Definition: pycode.cpp:1407
Definition * getSourceDefinition(int lineNr) const
Definition: filedef.cpp:1215
static QDict< DefinitionIntf > * symbolMap
Definition: doxygen.h:134
FILE * pycodeYYin
Definition: pycode.cpp:359
void pycodeYY_flush_buffer(YY_BUFFER_STATE b)
Definition: pycode.cpp:3651
void pycodeYYset_lineno(int line_number)
Definition: pycode.cpp:3970
void inSort(const type *d)
Definition: qinternallist.h:59
QCString & prepend(const char *s)
Definition: qcstring.cpp:387
p
Definition: test.py:223
#define YY_END_OF_BUFFER
Definition: pycode.cpp:386
void * pycodeYYrealloc(void *, yy_size_t)
Definition: pycode.cpp:4097
A bunch of utility functions.
const char * data() const
Definition: qcstring.h:207
static yyconst flex_int16_t yy_def[574]
Definition: pycode.cpp:683
bool isLinkable() const
Definition: classdef.cpp:2729
QCString anchor() const
Definition: memberdef.cpp:1031
type * current() const
Definition: qlist.h:146
char * yy_ch_buf
Definition: code.cpp:212
string tmp
Definition: languages.py:63
int pycodeYYget_lineno(void)
Definition: pycode.cpp:3927
static void pycodeYY_load_buffer_state(void)
Definition: pycode.cpp:3562
void pycodeYYset_in(FILE *in_str)
Definition: pycode.cpp:3982
#define Config_getBool(val)
Definition: config.cpp:664
unsigned char YY_CHAR
Definition: code.cpp:357
static void startCodeLine()
Definition: pycode.cpp:1525
static size_t yy_buffer_stack_max
Definition: pycode.cpp:273
type * next()
Definition: qinternallist.h:89
int flex_int32_t
Definition: code.cpp:72
#define EOB_ACT_CONTINUE_SCAN
Definition: pycode.cpp:179
YY_BUFFER_STATE pycodeYY_scan_string(yyconst char *yy_str)
Definition: pycode.cpp:3815
static QCString g_docBlock
contents of all lines of a documentation block
Definition: pycode.cpp:1263
static yyconst flex_int16_t yy_base[574]
Definition: pycode.cpp:616
int yy_is_our_buffer
Definition: code.cpp:229
unsigned char flex_uint8_t
Definition: pycode.cpp:73
QCString removeRedundantWhiteSpace(const QCString &s)
Definition: util.cpp:1655
int extractClassNameFromType(const QCString &type, int &pos, QCString &name, QCString &templSpec, SrcLangExt lang)
Definition: util.cpp:5963
#define EOB_ACT_END_OF_FILE
Definition: pycode.cpp:180
static void codify(const char *text)
Definition: pycode.cpp:1580
#define YY_EXTRA_TYPE
Definition: pycode.cpp:2067
#define ClassDec
Definition: pycode.cpp:2045
QCString & sprintf(const char *format,...)
Definition: qcstring.cpp:27
static const ClassDef * dummyContext
Definition: pycode.cpp:1278
static int g_paramParens
Definition: pycode.cpp:1247
static int g_yyLineNr
current line number
Definition: pycode.cpp:1237
virtual void codify(const char *s)=0
void insertBaseClass(ClassDef *, const char *name, Protection p, Specifier s, const char *t=0)
Definition: classdef.cpp:358
static int yy_start_stack_ptr
Definition: pycode.cpp:2133
#define YY_RULE_SETUP
Definition: pycode.cpp:2235
static yy_state_type yy_try_NUL_trans(yy_state_type current_state)
Definition: pycode.cpp:3379
void writeTooltips(CodeOutputInterface &ol)
Definition: tooltip.cpp:93
#define YY_DO_BEFORE_ACTION
Definition: pycode.cpp:378
virtual Definition * getOuterScope() const
short int flex_int16_t
Definition: pycode.cpp:71
#define YY_NEW_FILE
Definition: pycode.cpp:157
GroupDef * getGroupDef() const
Definition: memberdef.cpp:4095
int pycodeYYlex(void)
void addDocCrossReference(MemberDef *src, MemberDef *dst)
Definition: util.cpp:8189
static void addToSearchIndex(const char *text)
Definition: pycode.cpp:1482
#define BEGIN
Definition: pycode.cpp:144
static QStrList g_curClassBases
Definition: pycode.cpp:1226
#define SuiteCaptureIndent
Definition: pycode.cpp:2048
NamespaceDef * getResolvedNamespace(const char *name)
Definition: util.cpp:489
int strcmp(const String &s1, const String &s2)
Definition: relates.cpp:14
virtual void startCodeLine(bool hasLineNumbers)=0
static FileDef * g_sourceFileDef
Definition: pycode.cpp:1238
static bool g_includeCodeFragment
Definition: pycode.cpp:1241
static void nextCodeLine()
Definition: pycode.cpp:1591
struct yy_buffer_state * YY_BUFFER_STATE
Definition: pycode.cpp:172
void pycodeYYset_out(FILE *out_str)
Definition: pycode.cpp:3987
static void pycodeYY_init_buffer(YY_BUFFER_STATE b, FILE *file)
Definition: pycode.cpp:3623
#define YY_CURRENT_BUFFER_LVALUE
Definition: pycode.cpp:289
#define YY_START
Definition: pycode.cpp:150
QCString fileName() const
Definition: filedef.h:81
static TooltipManager * instance()
Definition: tooltip.cpp:45
register char * yy_cp
Definition: pycode.cpp:2243
#define Body
Definition: pycode.cpp:2042
Q_EXPORT char * qstrcpy(char *dst, const char *src)
Definition: qcstring.h:87
static const char * g_currentFontClass
Definition: pycode.cpp:1232
virtual void setCurrentDoc(Definition *ctx, const char *anchor, bool isSourceFile)=0
QCString getOutputFileBase() const
Definition: memberdef.cpp:941
static void generateFunctionLink(CodeOutputInterface &ol, char *funcName)
Definition: pycode.cpp:1911
static bool * b
Definition: config.cpp:1043
#define YY_RESTORE_YY_MORE_OFFSET
Definition: pycode.cpp:1170
static void endCodeLine()
Definition: pycode.cpp:1585
static QCString g_exampleName
Definition: pycode.cpp:1251
int pycodeYYget_debug(void)
Definition: pycode.cpp:3992
static yyconst flex_int16_t yy_acclist[1033]
Definition: pycode.cpp:394
#define YY_FATAL_ERROR(msg)
Definition: pycode.cpp:2207
int yy_is_interactive
Definition: code.cpp:236
#define yyconst
Definition: pycode.cpp:127
static void adjustScopesAndSuites(unsigned indentLength)
Definition: pycode.cpp:4137
ClassDef * getClass() const
Definition: pycode.cpp:1430
#define LongString
Definition: pycode.cpp:2052
#define YY_MORE_ADJ
Definition: pycode.cpp:1169
static void codifyLines(char *text)
Definition: pycode.cpp:1666
bool isEmpty() const
Definition: qvaluelist.h:368
QCString briefDescriptionAsTooltip() const
#define YY_BUF_SIZE
Definition: pycode.cpp:163
virtual void endCodeLine()=0
static bool g_doubleStringIsDoc
Definition: pycode.cpp:1256
void addVariable(const QCString &type, const QCString &name)
Definition: pycode.cpp:1326
#define DBG_CTX(x)
Definition: pycode.cpp:1219
static bool g_collectXRefs
Definition: pycode.cpp:1235
T * find(const char *key)
Definition: sortdict.h:232
#define SuiteContinuing
Definition: pycode.cpp:2051
#define YY_STATE_BUF_SIZE
Definition: pycode.cpp:168
static bool g_doubleQuote
Definition: pycode.cpp:1257
QList< Scope > m_scopes
Definition: pycode.cpp:1323
ClassDef * getResolvedClass(Definition *scope, FileDef *fileScope, const char *n, MemberDef **pTypeDef, QCString *pTemplSpec, bool mayBeUnlinkable, bool mayBeHidden, QCString *pResolvedType)
Definition: util.cpp:1563
#define YY_STATE_EOF(state)
Definition: pycode.cpp:154
signed char flex_int8_t
Definition: pycode.cpp:70
int pycodeYYlex_destroy(void)
Definition: pycode.cpp:4040
static void yy_push_state(int new_state)
Definition: pycode.cpp:3858
bool isLinkable() const
Definition: memberdef.cpp:1161
byte bytes
Alias for common language habits.
Definition: datasize.h:101
void clearExceptGlobal()
Definition: pycode.cpp:1313
size_t yy_size_t
Definition: code.cpp:203
type * toLast()
Definition: qlist.h:136
#define yyterminate()
Definition: pycode.cpp:2197
int yy_buffer_status
Definition: code.cpp:252
static QCString * s
Definition: config.cpp:1042
static QValueStack< uint > g_indents
Tracks indentation levels for scoping in python.
Definition: pycode.cpp:1261
const bool TRUE
Definition: qglobal.h:371
bool collectXRefs
static QCString str
static bool g_endComment
Definition: pycode.cpp:1264
static int yy_full_lp
Definition: pycode.cpp:1153
QCString simplifyWhiteSpace() const
Definition: qcstring.cpp:323
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
Definition: util.cpp:5088
virtual QCString anchor() const =0
static int yy_start
Definition: pycode.cpp:299
QList< Ctx > m_classList
Definition: pycode.cpp:1441
#define YY_BUFFER_NEW
Definition: pycode.cpp:254
#define YY_TRAILING_MASK
Definition: pycode.cpp:1155
static int yy_init_globals(void)
Definition: pycode.cpp:4002
static ClassDef * stripClassName(const char *s, Definition *d=g_currentDefinition)
Definition: pycode.cpp:1491
void * pycodeYYalloc(yy_size_t)
Definition: pycode.cpp:4092
int pycodeYYleng
Definition: pycode.cpp:294
BaseClassList * baseClasses() const
Definition: classdef.cpp:4399
#define YY_SC_TO_UI(c)
Definition: pycode.cpp:138
static PyVariableContext g_theVarContext
Definition: pycode.cpp:1372
Definition: qlist.h:54
#define REJECT
Definition: pycode.cpp:1157
static size_t yy_buffer_stack_top
Definition: pycode.cpp:272
static yy_state_type * yy_state_buf
Definition: pycode.cpp:1149
static bool g_needsTermination
Definition: pycode.cpp:1233
static yyconst flex_int16_t yy_accept[541]
Definition: pycode.cpp:512
static int yy_top_state(void)
Definition: pycode.cpp:3890
type * toFirst()
Definition: qlist.h:135
#define YY_INPUT(buf, result, max_size)
Definition: pycode.cpp:2011
static bool getLinkInScope(const QCString &c, const QCString &m, const char *memberText, CodeOutputInterface &ol, const char *text)
Definition: pycode.cpp:1708
ClassDef * cd
Definition: pycode.cpp:1383