config.cpp
Go to the documentation of this file.
1 #line 2 "/nova/app/home/novasoft/doxygen/doxygen-1.8.11/build/generated_src/config.cpp"
2 
3 #line 4 "/nova/app/home/novasoft/doxygen/doxygen-1.8.11/build/generated_src/config.cpp"
4 
5 #define YY_INT_ALIGNED short int
6 
7 /* A lexical scanner generated by flex */
8 
9 #define yy_create_buffer configYY_create_buffer
10 #define yy_delete_buffer configYY_delete_buffer
11 #define yy_flex_debug configYY_flex_debug
12 #define yy_init_buffer configYY_init_buffer
13 #define yy_flush_buffer configYY_flush_buffer
14 #define yy_load_buffer_state configYY_load_buffer_state
15 #define yy_switch_to_buffer configYY_switch_to_buffer
16 #define yyin configYYin
17 #define yyleng configYYleng
18 #define yylex configYYlex
19 #define yylineno configYYlineno
20 #define yyout configYYout
21 #define yyrestart configYYrestart
22 #define yytext configYYtext
23 #define yywrap configYYwrap
24 #define yyalloc configYYalloc
25 #define yyrealloc configYYrealloc
26 #define yyfree configYYfree
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 configYYrestart(configYYin )
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 configYYleng;
176 
177 extern FILE *configYYin, *configYYout;
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 configYYtext. */ \
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 configYYtext 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 configYYrestart()), so that the user can continue scanning by
264  * just pointing configYYin 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 configYYtext 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 configYYwrap()'s to do buffer switches
302  * instead of setting up a fresh configYYin. A bit of a hack ...
303  */
305 
306 void configYYrestart (FILE *input_file );
307 void configYY_switch_to_buffer (YY_BUFFER_STATE new_buffer );
308 YY_BUFFER_STATE configYY_create_buffer (FILE *file,int size );
309 void configYY_delete_buffer (YY_BUFFER_STATE b );
310 void configYY_flush_buffer (YY_BUFFER_STATE b );
311 void configYYpush_buffer_state (YY_BUFFER_STATE new_buffer );
312 void configYYpop_buffer_state (void );
313 
314 static void configYYensure_buffer_stack (void );
315 static void configYY_load_buffer_state (void );
316 static void configYY_init_buffer (YY_BUFFER_STATE b,FILE *file );
317 
318 #define YY_FLUSH_BUFFER configYY_flush_buffer(YY_CURRENT_BUFFER )
319 
320 YY_BUFFER_STATE configYY_scan_buffer (char *base,yy_size_t size );
321 YY_BUFFER_STATE configYY_scan_string (yyconst char *yy_str );
322 YY_BUFFER_STATE configYY_scan_bytes (yyconst char *bytes,int len );
323 
324 void *configYYalloc (yy_size_t );
325 void *configYYrealloc (void *,yy_size_t );
326 void configYYfree (void * );
327 
328 #define yy_new_buffer configYY_create_buffer
329 
330 #define yy_set_interactive(is_interactive) \
331  { \
332  if ( ! YY_CURRENT_BUFFER ){ \
333  configYYensure_buffer_stack (); \
334  YY_CURRENT_BUFFER_LVALUE = \
335  configYY_create_buffer(configYYin,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  configYYensure_buffer_stack (); \
344  YY_CURRENT_BUFFER_LVALUE = \
345  configYY_create_buffer(configYYin,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 configYYwrap(n) 1
355 #define YY_SKIP_YYWRAP
356 
357 typedef unsigned char YY_CHAR;
358 
359 FILE *configYYin = (FILE *) 0, *configYYout = (FILE *) 0;
360 
361 typedef int yy_state_type;
362 
363 extern int configYYlineno;
364 
365 int configYYlineno = 1;
366 
367 extern char *configYYtext;
368 #define yytext_ptr configYYtext
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 configYYtext.
377  */
378 #define YY_DO_BEFORE_ACTION \
379  (yytext_ptr) = yy_bp; \
380  configYYleng = (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 27
386 #define YY_END_OF_BUFFER 28
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  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
397  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
398  0, 0, 28, 25, 26, 25, 25, 3, 3, 3,
399  3, 5, 11, 25, 11, 22, 25, 12, 16, 15,
400  5, 15, 15, 20, 21, 14, 13, 21, 21, 19,
401  17, 17, 19, 19, 10, 25, 10, 10, 0, 24,
402  0, 0, 0, 11, 0, 0, 0, 11, 6, 0,
403  23, 15, 15, 15, 20, 21, 14, 21, 18, 10,
404  0, 10, 0, 0, 2, 0, 4, 0, 7, 15,
405  15, 21, 10, 10, 1, 0, 1, 1, 1, 0,
406 
407  0, 0, 0, 0, 9, 0, 0, 0, 0, 0,
408  0, 8, 0
409  } ;
410 
412  { 0,
413  1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
414  1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
415  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
416  1, 2, 1, 5, 6, 1, 1, 1, 1, 1,
417  1, 1, 7, 1, 1, 1, 1, 8, 9, 9,
418  9, 9, 9, 9, 9, 9, 9, 1, 1, 1,
419  10, 1, 1, 11, 12, 13, 14, 15, 16, 13,
420  13, 17, 18, 13, 13, 19, 13, 20, 13, 21,
421  13, 13, 13, 22, 23, 13, 13, 13, 13, 13,
422  1, 24, 1, 1, 25, 1, 13, 13, 13, 26,
423 
424  13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
425  13, 13, 13, 13, 13, 13, 13, 13, 13, 27,
426  13, 13, 1, 1, 1, 1, 1, 1, 1, 1,
427  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
428  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
429  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
430  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
431  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
432  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
433  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
434 
435  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
436  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
437  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
438  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
439  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
440  1, 1, 1, 1, 1
441  } ;
442 
444  { 0,
445  1, 2, 3, 4, 3, 5, 6, 7, 7, 6,
446  1, 8, 8, 8, 8, 8, 8, 8, 8, 8,
447  8, 8, 8, 1, 7, 8, 8, 1
448  } ;
449 
451  { 0,
452  0, 1, 2, 3, 31, 0, 57, 58, 84, 110,
453  137, 164, 192, 0, 219, 246, 60, 67, 68, 70,
454  273, 300, 179, 442, 442, 8, 151, 442, 171, 11,
455  149, 169, 0, 156, 67, 442, 14, 442, 442, 0,
456  167, 17, 145, 0, 0, 169, 442, 64, 137, 442,
457  442, 442, 97, 136, 0, 0, 76, 135, 101, 442,
458  152, 155, 154, 0, 136, 104, 145, 115, 442, 116,
459  442, 0, 124, 145, 0, 0, 150, 143, 442, 0,
460  145, 141, 122, 144, 442, 132, 442, 110, 442, 128,
461  97, 95, 442, 84, 442, 90, 0, 0, 0, 84,
462 
463  82, 77, 134, 73, 442, 55, 52, 40, 6, 135,
464  144, 442, 442, 328, 336, 344, 352, 360, 368, 370,
465  377, 385, 14, 393, 401, 409, 417, 425, 433
466  } ;
467 
469  { 0,
470  114, 114, 115, 115, 113, 5, 114, 114, 114, 114,
471  116, 116, 113, 13, 117, 117, 118, 118, 114, 114,
472  119, 119, 113, 113, 113, 113, 113, 113, 113, 113,
473  113, 113, 120, 113, 121, 113, 113, 113, 113, 122,
474  122, 122, 122, 123, 124, 113, 113, 124, 124, 113,
475  113, 113, 113, 113, 125, 126, 125, 125, 113, 113,
476  113, 127, 128, 120, 113, 113, 113, 121, 113, 113,
477  113, 122, 129, 122, 123, 124, 113, 124, 113, 125,
478  126, 125, 113, 127, 113, 128, 113, 113, 113, 129,
479  122, 124, 113, 125, 113, 113, 122, 124, 125, 113,
480 
481  113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
482  113, 113, 0, 113, 113, 113, 113, 113, 113, 113,
483  113, 113, 113, 113, 113, 113, 113, 113, 113
484  } ;
485 
487  { 0,
488  113, 113, 25, 25, 25, 25, 113, 29, 29, 59,
489  60, 59, 59, 60, 59, 70, 71, 70, 59, 60,
490  59, 75, 110, 26, 26, 30, 30, 27, 27, 31,
491  31, 24, 24, 25, 24, 24, 32, 24, 33, 33,
492  24, 34, 35, 35, 35, 35, 35, 35, 35, 35,
493  35, 35, 35, 35, 26, 35, 35, 35, 27, 36,
494  36, 109, 51, 108, 52, 59, 60, 59, 66, 51,
495  25, 52, 25, 67, 104, 107, 69, 59, 60, 59,
496  37, 37, 105, 53, 27, 27, 38, 54, 39, 32,
497  53, 26, 103, 26, 54, 27, 102, 27, 59, 60,
498 
499  59, 79, 59, 60, 59, 66, 101, 26, 100, 99,
500  67, 27, 38, 69, 39, 32, 66, 70, 71, 70,
501  98, 67, 97, 96, 69, 86, 87, 86, 86, 86,
502  87, 86, 86, 26, 87, 104, 111, 27, 24, 38,
503  24, 39, 41, 105, 112, 111, 85, 95, 94, 93,
504  92, 77, 91, 112, 89, 88, 87, 85, 106, 83,
505  42, 82, 61, 78, 43, 24, 38, 24, 39, 41,
506  77, 74, 73, 65, 63, 61, 62, 61, 113, 113,
507  113, 113, 113, 113, 113, 113, 113, 42, 113, 113,
508  113, 43, 24, 24, 38, 24, 24, 32, 24, 24,
509 
510  24, 24, 24, 44, 44, 44, 44, 44, 44, 44,
511  44, 44, 44, 44, 44, 26, 24, 44, 44, 27,
512  46, 47, 24, 39, 32, 113, 113, 113, 113, 113,
513  113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
514  113, 113, 48, 113, 113, 113, 49, 46, 47, 24,
515  39, 32, 113, 113, 113, 113, 113, 113, 113, 113,
516  113, 113, 113, 113, 113, 113, 113, 113, 113, 48,
517  113, 113, 113, 49, 24, 25, 24, 56, 113, 113,
518  113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
519  113, 113, 113, 113, 113, 113, 57, 113, 113, 113,
520 
521  58, 24, 25, 24, 56, 113, 113, 113, 113, 113,
522  113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
523  113, 113, 113, 57, 113, 113, 113, 58, 24, 24,
524  24, 24, 24, 24, 24, 24, 28, 28, 28, 28,
525  28, 28, 28, 28, 40, 40, 40, 40, 40, 40,
526  40, 40, 45, 45, 45, 45, 45, 45, 45, 45,
527  50, 50, 50, 50, 50, 50, 50, 50, 55, 55,
528  55, 55, 55, 55, 55, 55, 64, 64, 68, 113,
529  113, 113, 68, 68, 68, 72, 113, 113, 113, 72,
530  72, 72, 72, 76, 113, 113, 113, 113, 76, 76,
531 
532  76, 80, 113, 113, 113, 80, 80, 80, 80, 81,
533  81, 113, 81, 81, 81, 81, 81, 84, 84, 84,
534  84, 84, 84, 84, 84, 86, 86, 86, 86, 86,
535  86, 86, 86, 90, 90, 90, 90, 90, 90, 90,
536  90, 23, 113, 113, 113, 113, 113, 113, 113, 113,
537  113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
538  113, 113, 113, 113, 113, 113, 113, 113, 113, 113
539  } ;
540 
542  { 0,
543  0, 0, 1, 2, 3, 4, 0, 3, 4, 26,
544  26, 26, 30, 30, 30, 37, 37, 37, 42, 42,
545  42, 123, 109, 1, 2, 3, 4, 1, 2, 3,
546  4, 5, 5, 5, 5, 5, 5, 5, 5, 5,
547  5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
548  5, 5, 5, 5, 5, 5, 5, 5, 5, 7,
549  8, 108, 17, 107, 17, 48, 48, 48, 35, 18,
550  19, 18, 20, 35, 104, 106, 35, 57, 57, 57,
551  7, 8, 104, 17, 7, 8, 9, 17, 9, 9,
552  18, 19, 102, 20, 18, 19, 101, 20, 53, 53,
553 
554  53, 53, 59, 59, 59, 66, 100, 9, 96, 94,
555  66, 9, 10, 66, 10, 10, 68, 70, 70, 70,
556  92, 68, 91, 88, 68, 73, 73, 73, 73, 90,
557  90, 90, 90, 10, 86, 103, 110, 10, 11, 11,
558  11, 11, 11, 103, 110, 111, 84, 83, 82, 81,
559  78, 77, 74, 111, 67, 65, 63, 62, 103, 61,
560  11, 58, 54, 49, 11, 12, 12, 12, 12, 12,
561  46, 43, 41, 34, 32, 31, 29, 27, 23, 0,
562  0, 0, 0, 0, 0, 0, 0, 12, 0, 0,
563  0, 12, 13, 13, 13, 13, 13, 13, 13, 13,
564 
565  13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
566  13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
567  15, 15, 15, 15, 15, 0, 0, 0, 0, 0,
568  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
569  0, 0, 15, 0, 0, 0, 15, 16, 16, 16,
570  16, 16, 0, 0, 0, 0, 0, 0, 0, 0,
571  0, 0, 0, 0, 0, 0, 0, 0, 0, 16,
572  0, 0, 0, 16, 21, 21, 21, 21, 0, 0,
573  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
574  0, 0, 0, 0, 0, 0, 21, 0, 0, 0,
575 
576  21, 22, 22, 22, 22, 0, 0, 0, 0, 0,
577  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
578  0, 0, 0, 22, 0, 0, 0, 22, 114, 114,
579  114, 114, 114, 114, 114, 114, 115, 115, 115, 115,
580  115, 115, 115, 115, 116, 116, 116, 116, 116, 116,
581  116, 116, 117, 117, 117, 117, 117, 117, 117, 117,
582  118, 118, 118, 118, 118, 118, 118, 118, 119, 119,
583  119, 119, 119, 119, 119, 119, 120, 120, 121, 0,
584  0, 0, 121, 121, 121, 122, 0, 0, 0, 122,
585  122, 122, 122, 124, 0, 0, 0, 0, 124, 124,
586 
587  124, 125, 0, 0, 0, 125, 125, 125, 125, 126,
588  126, 0, 126, 126, 126, 126, 126, 127, 127, 127,
589  127, 127, 127, 127, 127, 128, 128, 128, 128, 128,
590  128, 128, 128, 129, 129, 129, 129, 129, 129, 129,
591  129, 113, 113, 113, 113, 113, 113, 113, 113, 113,
592  113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
593  113, 113, 113, 113, 113, 113, 113, 113, 113, 113
594  } ;
595 
596 static yy_state_type yy_last_accepting_state;
598 
599 extern int configYY_flex_debug;
600 int configYY_flex_debug = 0;
601 
602 /* The intent behind this definition is that it'll catch
603  * any uses of REJECT which flex missed.
604  */
605 #define REJECT reject_used_but_not_detected
606 #define yymore() yymore_used_but_not_detected
607 #define YY_MORE_ADJ 0
608 #define YY_RESTORE_YY_MORE_OFFSET
610 #line 1 "config.l"
611 /******************************************************************************
612  *
613  * Copyright (C) 1997-2015 by Dimitri van Heesch.
614  *
615  * Permission to use, copy, modify, and distribute this software and its
616  * documentation under the terms of the GNU General Public License is hereby
617  * granted. No representations are made about the suitability of this software
618  * for any purpose. It is provided "as is" without express or implied warranty.
619  * See the GNU General Public License for more details.
620  *
621  */
622 #line 14 "config.l"
623 
624 /*
625  * includes
626  */
627 #include <stdio.h>
628 #include <stdlib.h>
629 #include <assert.h>
630 #include <ctype.h>
631 #include <stdarg.h>
632 #include <errno.h>
633 
634 #include <qfileinfo.h>
635 #include <qdir.h>
636 #include <qtextstream.h>
637 #include <qregexp.h>
638 #include <qstack.h>
639 #include <qglobal.h>
640 
641 #include "config.h"
642 #include "version.h"
643 #include "portable.h"
644 #include "util.h"
645 #include "message.h"
646 
647 #include "lang_cfg.h"
648 #include "configoptions.h"
649 
650 #undef Config_getString
651 #undef Config_getInt
652 #undef Config_getList
653 #undef Config_getEnum
654 #undef Config_getBool
655 
656 #define YY_NO_INPUT 1
657 #define YY_NO_UNISTD_H 1
658 
659 // use in-class definitions
660 #define Config_getString(val) getString(__FILE__,__LINE__,val)
661 #define Config_getInt(val) getInt(__FILE__,__LINE__,val)
662 #define Config_getList(val) getList(__FILE__,__LINE__,val)
663 #define Config_getEnum(val) getEnum(__FILE__,__LINE__,val)
664 #define Config_getBool(val) getBool(__FILE__,__LINE__,val)
665 
666 static const char *warning_str = "warning: ";
667 static const char *error_str = "error: ";
668 
669 void config_err(const char *fmt, ...)
670 {
671  va_list args;
672  va_start(args, fmt);
673  vfprintf(stderr, (QCString(error_str) + fmt).data(), args);
674  va_end(args);
675 }
676 void config_warn(const char *fmt, ...)
677 {
678  va_list args;
679  va_start(args, fmt);
680  vfprintf(stderr, (QCString(warning_str) + fmt).data(), args);
681  va_end(args);
682 }
683 
685  const QCString &str,
686  const char *fromEncoding,
687  const char *toEncoding);
688 
689 #define MAX_INCLUDE_DEPTH 10
690 #define YY_NEVER_INTERACTIVE 1
691 
692 /* -----------------------------------------------------------------
693  */
694 static QCString convertToComment(const QCString &s, const QCString &u)
695 {
696  //printf("convertToComment(%s)=%s\n",s.data(),u.data());
698  if (!s.isEmpty())
699  {
701  const char *p=tmp.data();
702  char c;
703  result+="#";
704  if (*p && *p!='\n')
705  result+=" ";
706  while ((c=*p++))
707  {
708  if (c=='\n')
709  {
710  result+="\n#";
711  if (*p && *p!='\n')
712  result+=" ";
713  }
714  else result+=c;
715  }
716  result+='\n';
717  }
718  if (!u.isEmpty())
719  {
720  if (!result.isEmpty()) result+='\n';
721  result+= u;
722  }
723  return result;
724 }
725 
727 {
728  t << " ";
729  if (v) t << "YES"; else t << "NO";
730 }
731 
733 {
734  t << " " << i;
735 }
736 
738 {
739  char c;
740  bool needsEscaping=FALSE;
741  // convert the string back to it original encoding
742  QCString se = configStringRecode(s,"UTF-8",m_encoding);
743  const char *p=se.data();
744  if (p)
745  {
746  t << " ";
747  while ((c=*p++)!=0 && !needsEscaping)
748  needsEscaping = (c==' ' || c=='\n' || c=='\t' || c=='"' || c=='#');
749  if (needsEscaping)
750  {
751  t << "\"";
752  p=se.data();
753  while (*p)
754  {
755  if (*p==' ' && *(p+1)=='\0') break; // skip inserted space at the end
756  if (*p=='"') t << "\\"; // escape quotes
757  t << *p++;
758  }
759  t << "\"";
760  }
761  else
762  {
763  t << se;
764  }
765  }
766 }
767 
769 {
770  const char *p = l.first();
771  bool first=TRUE;
772  while (p)
773  {
774  QCString s=p;
775  if (!first)
776  t << " ";
777  first=FALSE;
778  writeStringValue(t,s);
779  p = l.next();
780  if (p) t << " \\" << endl;
781  }
782 }
783 
784 /* -----------------------------------------------------------------
785  */
786 
787 Config *Config::m_instance = 0;
788 
790 {
791  if (!m_valueString.isEmpty())
792  {
793  bool ok;
794  int val = m_valueString.toInt(&ok);
795  if (!ok || val<m_minVal || val>m_maxVal)
796  {
797  config_warn("argument `%s' for option %s is not a valid number in the range [%d..%d]!\n"
798  "Using the default: %d!\n",m_valueString.data(),m_name.data(),m_minVal,m_maxVal,m_value);
799  }
800  else
801  {
802  m_value=val;
803  }
804  }
805 }
806 
808 {
809  QCString val = m_valueString.stripWhiteSpace().lower();
810  if (!val.isEmpty())
811  {
812  if (val=="yes" || val=="true" || val=="1" || val=="all")
813  {
814  m_value=TRUE;
815  }
816  else if (val=="no" || val=="false" || val=="0" || val=="none")
817  {
818  m_value=FALSE;
819  }
820  else
821  {
822  config_warn("argument `%s' for option %s is not a valid boolean value\n"
823  "Using the default: %s!\n",m_valueString.data(),m_name.data(),m_value?"YES":"NO");
824  }
825  }
826 }
827 
828 QCString &Config::getString(const char *fileName,int num,const char *name) const
829 {
830  ConfigOption *opt = m_dict->find(name);
831  if (opt==0)
832  {
833  config_err("%s<%d>: Internal error: Requested unknown option %s!\n",fileName,num,name);
834  exit(1);
835  }
836  else if (opt->kind()!=ConfigOption::O_String)
837  {
838  config_err("%s<%d>: Internal error: Requested option %s not of string type!\n",fileName,num,name);
839  exit(1);
840  }
841  return *((ConfigString *)opt)->valueRef();
842 }
843 
844 QStrList &Config::getList(const char *fileName,int num,const char *name) const
845 {
846  ConfigOption *opt = m_dict->find(name);
847  if (opt==0)
848  {
849  config_err("%s<%d>: Internal error: Requested unknown option %s!\n",fileName,num,name);
850  exit(1);
851  }
852  else if (opt->kind()!=ConfigOption::O_List)
853  {
854  config_err("%s<%d>: Internal error: Requested option %s not of list type!\n",fileName,num,name);
855  exit(1);
856  }
857  return *((ConfigList *)opt)->valueRef();
858 }
859 
860 QCString &Config::getEnum(const char *fileName,int num,const char *name) const
861 {
862  ConfigOption *opt = m_dict->find(name);
863  if (opt==0)
864  {
865  config_err("%s<%d>: Internal error: Requested unknown option %s!\n",fileName,num,name);
866  exit(1);
867  }
868  else if (opt->kind()!=ConfigOption::O_Enum)
869  {
870  config_err("%s<%d>: Internal error: Requested option %s not of enum type!\n",fileName,num,name);
871  exit(1);
872  }
873  return *((ConfigEnum *)opt)->valueRef();
874 }
875 
876 int &Config::getInt(const char *fileName,int num,const char *name) const
877 {
878  ConfigOption *opt = m_dict->find(name);
879  if (opt==0)
880  {
881  config_err("%s<%d>: Internal error: Requested unknown option %s!\n",fileName,num,name);
882  exit(1);
883  }
884  else if (opt->kind()!=ConfigOption::O_Int)
885  {
886  config_err("%s<%d>: Internal error: Requested option %s not of integer type!\n",fileName,num,name);
887  exit(1);
888  }
889  return *((ConfigInt *)opt)->valueRef();
890 }
891 
892 bool &Config::getBool(const char *fileName,int num,const char *name) const
893 {
894  ConfigOption *opt = m_dict->find(name);
895  if (opt==0)
896  {
897  config_err("%s<%d>: Internal error: Requested unknown option %s!\n",fileName,num,name);
898  exit(1);
899  }
900  else if (opt->kind()!=ConfigOption::O_Bool)
901  {
902  config_err("%s<%d>: Internal error: Requested option %s not of boolean type!\n",fileName,num,name);
903  exit(1);
904  }
905  return *((ConfigBool *)opt)->valueRef();
906 }
907 
908 /* ------------------------------------------ */
909 
911 {
912  if (!sl)
913  {
914  t << "\n";
915  }
916  t << "#---------------------------------------------------------------------------\n";
917  t << "# " << m_doc << endl;
918  t << "#---------------------------------------------------------------------------\n";
919 }
920 
922 {
923  if (!sl)
924  {
925  t << endl;
926  t << convertToComment(m_doc, m_userComment);
927  t << endl;
928  }
929  else if (!m_userComment.isEmpty())
930  {
931  t << convertToComment("", m_userComment);
932  }
933  t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "=";
934  writeStringList(t,m_value);
935  t << "\n";
936 }
937 
939 {
940  if (!sl)
941  {
942  t << endl;
943  t << convertToComment(m_doc, m_userComment);
944  t << endl;
945  }
946  else if (!m_userComment.isEmpty())
947  {
948  t << convertToComment("", m_userComment);
949  }
950  t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "=";
951  writeStringValue(t,m_value);
952  t << "\n";
953 }
954 
956 {
957  if (!sl)
958  {
959  t << endl;
960  t << convertToComment(m_doc, m_userComment);
961  t << endl;
962  }
963  else if (!m_userComment.isEmpty())
964  {
965  t << convertToComment("", m_userComment);
966  }
967  t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "=";
968  writeStringValue(t,m_value);
969  t << "\n";
970 }
971 
972 void ConfigInt::writeTemplate(FTextStream &t,bool sl,bool upd)
973 {
974  if (!sl)
975  {
976  t << endl;
977  t << convertToComment(m_doc, m_userComment);
978  t << endl;
979  }
980  else if (!m_userComment.isEmpty())
981  {
982  t << convertToComment("", m_userComment);
983  }
984  t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "=";
985  if (upd && !m_valueString.isEmpty())
986  {
987  writeStringValue(t,m_valueString);
988  }
989  else
990  {
991  writeIntValue(t,m_value);
992  }
993  t << "\n";
994 }
995 
996 void ConfigBool::writeTemplate(FTextStream &t,bool sl,bool upd)
997 {
998  if (!sl)
999  {
1000  t << endl;
1001  t << convertToComment(m_doc, m_userComment);
1002  t << endl;
1003  }
1004  else if (!m_userComment.isEmpty())
1005  {
1006  t << convertToComment("", m_userComment);
1007  }
1008  t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "=";
1009  if (upd && !m_valueString.isEmpty())
1010  {
1011  writeStringValue(t,m_valueString);
1012  }
1013  else
1014  {
1015  writeBoolValue(t,m_value);
1016  }
1017  t << "\n";
1018 }
1019 
1022 
1023 /* -----------------------------------------------------------------
1024  *
1025  * static variables
1026  */
1027 
1029 {
1030  int lineNr;
1031  FILE *filePtr;
1032  YY_BUFFER_STATE oldState;
1033  YY_BUFFER_STATE newState;
1035 };
1036 
1037 static const char *inputString;
1038 static int inputPosition;
1039 static int yyLineNr;
1042 static QCString *s=0;
1043 static bool *b=0;
1044 static QStrList *l=0;
1045 static int lastState;
1049 static int includeDepth;
1050 static bool config_upd = FALSE;
1051 
1053 
1054 static Config *config;
1055 
1056 /* -----------------------------------------------------------------
1057  */
1058 #undef YY_INPUT
1059 #define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
1060 
1061 static int yyread(char *buf,int max_size)
1062 {
1063  // no file included
1064  if (includeStack.isEmpty())
1065  {
1066  int c=0;
1067  if (inputString==0) return c;
1068  while( c < max_size && inputString[inputPosition] )
1069  {
1070  *buf = inputString[inputPosition++] ;
1071  c++; buf++;
1072  }
1073  return c;
1074  }
1075  else
1076  {
1077  //assert(includeStack.current()->newState==YY_CURRENT_BUFFER);
1078  return (int)fread(buf,1,max_size,includeStack.current()->filePtr);
1079  }
1080 }
1081 
1082 
1084  const QCString &str,
1085  const char *fromEncoding,
1086  const char *toEncoding)
1087 {
1088  QCString inputEncoding = fromEncoding;
1089  QCString outputEncoding = toEncoding;
1090  if (inputEncoding.isEmpty() || outputEncoding.isEmpty() || inputEncoding==outputEncoding) return str;
1091  int inputSize=str.length();
1092  int outputSize=inputSize*4+1;
1093  QCString output(outputSize);
1094  void *cd = portable_iconv_open(outputEncoding,inputEncoding);
1095  if (cd==(void *)(-1))
1096  {
1097  fprintf(stderr,"Error: unsupported character conversion: '%s'->'%s'\n",
1098  inputEncoding.data(),outputEncoding.data());
1099  exit(1);
1100  }
1101  size_t iLeft=(size_t)inputSize;
1102  size_t oLeft=(size_t)outputSize;
1103  char *inputPtr = str.rawData();
1104  char *outputPtr = output.rawData();
1105  if (!portable_iconv(cd, &inputPtr, &iLeft, &outputPtr, &oLeft))
1106  {
1107  outputSize-=(int)oLeft;
1108  output.resize(outputSize+1);
1109  output.at(outputSize)='\0';
1110  //printf("iconv: input size=%d output size=%d\n[%s]\n",size,newSize,srcBuf.data());
1111  }
1112  else
1113  {
1114  fprintf(stderr,"Error: failed to translate characters from %s to %s: %s\n",
1115  inputEncoding.data(),outputEncoding.data(),strerror(errno));
1116  exit(1);
1117  }
1119  return output;
1120 }
1121 
1122 static void checkEncoding()
1123 {
1124  ConfigString *option = (ConfigString*)config->get("DOXYFILE_ENCODING");
1125  encoding = *option->valueRef();
1126 }
1127 
1128 static FILE *tryPath(const char *path,const char *fileName)
1129 {
1130  QCString absName=(path ? (QCString)path+"/"+fileName : (QCString)fileName);
1131  QFileInfo fi(absName);
1132  if (fi.exists() && fi.isFile())
1133  {
1134  FILE *f=portable_fopen(absName,"r");
1135  if (!f) config_err("could not open file %s for reading\n",absName.data());
1136  return f;
1137  }
1138  return 0;
1139 }
1140 
1141 static void substEnvVarsInStrList(QStrList &sl);
1142 static void substEnvVarsInString(QCString &s);
1143 
1144 static FILE *findFile(const char *fileName)
1145 {
1146  if (fileName==0)
1147  {
1148  return 0;
1149  }
1150  if (portable_isAbsolutePath(fileName))
1151  {
1152  return tryPath(NULL, fileName);
1153  }
1154  substEnvVarsInStrList(includePathList);
1155  char *s=includePathList.first();
1156  while (s) // try each of the include paths
1157  {
1158  FILE *f = tryPath(s,fileName);
1159  if (f) return f;
1160  s=includePathList.next();
1161  }
1162  // try cwd if includePathList fails
1163  return tryPath(".",fileName);
1164 }
1165 
1166 static void readIncludeFile(const char *incName)
1167 {
1168  if (includeDepth==MAX_INCLUDE_DEPTH) {
1169  config_err("maximum include depth (%d) reached, %s is not included. Aborting...\n",
1170  MAX_INCLUDE_DEPTH,incName);
1171  exit(1);
1172  }
1173 
1174  QCString inc = incName;
1175  substEnvVarsInString(inc);
1176  inc = inc.stripWhiteSpace();
1177  uint incLen = inc.length();
1178  if (incLen>0 && inc.at(0)=='"' && inc.at(incLen-1)=='"') // strip quotes
1179  {
1180  inc=inc.mid(1,incLen-2);
1181  }
1182 
1183  FILE *f;
1184 
1185  if ((f=findFile(inc))) // see if the include file can be found
1186  {
1187  // For debugging
1188 #if SHOW_INCLUDES
1189  for (i=0;i<includeStack.count();i++) msg(" ");
1190  msg("@INCLUDE = %s: parsing...\n",inc.data());
1191 #endif
1192 
1193  // store the state of the old file
1196  fs->lineNr=yyLineNr;
1197  fs->fileName=yyFileName;
1198  fs->filePtr=f;
1199  // push the state on the stack
1200  includeStack.push(fs);
1201  // set the scanner to the include file
1203  fs->newState=YY_CURRENT_BUFFER;
1204  yyFileName=inc;
1205  includeDepth++;
1206  }
1207  else
1208  {
1209  config_err("@INCLUDE = %s: not found!\n",inc.data());
1210  exit(1);
1211  }
1212 }
1213 
1214 
1215 
1216 
1217 
1218 
1219 
1220 
1221 
1222 
1223 
1224 
1225 #line 1226 "/nova/app/home/novasoft/doxygen/doxygen-1.8.11/build/generated_src/config.cpp"
1226 
1227 #define INITIAL 0
1228 #define PreStart 1
1229 #define Start 2
1230 #define SkipComment 3
1231 #define SkipInvalid 4
1232 #define GetString 5
1233 #define GetBool 6
1234 #define GetStrList 7
1235 #define GetQuotedString 8
1236 #define GetEnvVar 9
1237 #define Include 10
1238 
1239 #ifndef YY_NO_UNISTD_H
1240 /* Special case for "unistd.h", since it is non-ANSI. We include it way
1241  * down here because we want the user's section 1 to have been scanned first.
1242  * The user has a chance to override it with an option.
1243  */
1244 #include <unistd.h>
1245 #endif
1246 
1247 #ifndef YY_EXTRA_TYPE
1248 #define YY_EXTRA_TYPE void *
1249 #endif
1250 
1251 static int yy_init_globals (void );
1252 
1253 /* Accessor methods to globals.
1254  These are made visible to non-reentrant scanners for convenience. */
1255 
1256 int configYYlex_destroy (void );
1257 
1258 int configYYget_debug (void );
1259 
1260 void configYYset_debug (int debug_flag );
1261 
1263 
1264 void configYYset_extra (YY_EXTRA_TYPE user_defined );
1265 
1266 FILE *configYYget_in (void );
1267 
1268 void configYYset_in (FILE * in_str );
1269 
1270 FILE *configYYget_out (void );
1271 
1272 void configYYset_out (FILE * out_str );
1273 
1274 int configYYget_leng (void );
1275 
1276 char *configYYget_text (void );
1277 
1278 int configYYget_lineno (void );
1279 
1280 void configYYset_lineno (int line_number );
1281 
1282 /* Macros after this point can all be overridden by user definitions in
1283  * section 1.
1284  */
1285 
1286 #ifndef YY_SKIP_YYWRAP
1287 #ifdef __cplusplus
1288 extern "C" int configYYwrap (void );
1289 #else
1290 extern int configYYwrap (void );
1291 #endif
1292 #endif
1293 
1294  static void yyunput (int c,char *buf_ptr );
1295 
1296 #ifndef yytext_ptr
1297 static void yy_flex_strncpy (char *,yyconst char *,int );
1298 #endif
1299 
1300 #ifdef YY_NEED_STRLEN
1301 static int yy_flex_strlen (yyconst char * );
1302 #endif
1303 
1304 #ifndef YY_NO_INPUT
1305 
1306 #ifdef __cplusplus
1307 static int yyinput (void );
1308 #else
1309 static int input (void );
1310 #endif
1311 
1312 #endif
1313 
1314 /* Amount of stuff to slurp up with each read. */
1315 #ifndef YY_READ_BUF_SIZE
1316 #define YY_READ_BUF_SIZE 8192
1317 #endif
1318 
1319 /* Copy whatever the last rule matched to the standard output. */
1320 #ifndef ECHO
1321 /* This used to be an fputs(), but since the string might contain NUL's,
1322  * we now use fwrite().
1323  */
1324 #define ECHO do { if (fwrite( configYYtext, configYYleng, 1, configYYout )) {} } while (0)
1325 #endif
1326 
1327 /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
1328  * is returned in "result".
1329  */
1330 #ifndef YY_INPUT
1331 #define YY_INPUT(buf,result,max_size) \
1332  if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
1333  { \
1334  int c = '*'; \
1335  unsigned n; \
1336  for ( n = 0; n < max_size && \
1337  (c = getc( configYYin )) != EOF && c != '\n'; ++n ) \
1338  buf[n] = (char) c; \
1339  if ( c == '\n' ) \
1340  buf[n++] = (char) c; \
1341  if ( c == EOF && ferror( configYYin ) ) \
1342  YY_FATAL_ERROR( "input in flex scanner failed" ); \
1343  result = n; \
1344  } \
1345  else \
1346  { \
1347  errno=0; \
1348  while ( (result = fread(buf, 1, max_size, configYYin))==0 && ferror(configYYin)) \
1349  { \
1350  if( errno != EINTR) \
1351  { \
1352  YY_FATAL_ERROR( "input in flex scanner failed" ); \
1353  break; \
1354  } \
1355  errno=0; \
1356  clearerr(configYYin); \
1357  } \
1358  }\
1359 \
1360 
1361 #endif
1362 
1363 /* No semi-colon after return; correct usage is to write "yyterminate();" -
1364  * we don't want an extra ';' after the "return" because that will cause
1365  * some compilers to complain about unreachable statements.
1366  */
1367 #ifndef yyterminate
1368 #define yyterminate() return YY_NULL
1369 #endif
1370 
1371 /* Number of entries by which start-condition stack grows. */
1372 #ifndef YY_START_STACK_INCR
1373 #define YY_START_STACK_INCR 25
1374 #endif
1375 
1376 /* Report a fatal error. */
1377 #ifndef YY_FATAL_ERROR
1378 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
1379 #endif
1380 
1381 /* end tables serialization structures and prototypes */
1382 
1383 /* Default declaration of generated scanner - a define so the user can
1384  * easily add parameters.
1385  */
1386 #ifndef YY_DECL
1387 #define YY_DECL_IS_OURS 1
1388 
1389 extern int configYYlex (void);
1390 
1391 #define YY_DECL int configYYlex (void)
1392 #endif /* !YY_DECL */
1393 
1394 /* Code executed at the beginning of each rule, after configYYtext and configYYleng
1395  * have been set up.
1396  */
1397 #ifndef YY_USER_ACTION
1398 #define YY_USER_ACTION
1399 #endif
1400 
1401 /* Code executed at the end of each rule. */
1402 #ifndef YY_BREAK
1403 #define YY_BREAK break;
1404 #endif
1405 
1406 #define YY_RULE_SETUP \
1407  YY_USER_ACTION
1408 
1409 /** The main scanner function which does all the work.
1410  */
1411 YY_DECL
1413  register yy_state_type yy_current_state;
1414  register char *yy_cp, *yy_bp;
1415  register int yy_act;
1416 
1417 #line 621 "config.l"
1418 
1419 
1420 #line 1421 "/nova/app/home/novasoft/doxygen/doxygen-1.8.11/build/generated_src/config.cpp"
1421 
1422  if ( !(yy_init) )
1423  {
1424  (yy_init) = 1;
1425 
1426 #ifdef YY_USER_INIT
1427  YY_USER_INIT;
1428 #endif
1429 
1430  if ( ! (yy_start) )
1431  (yy_start) = 1; /* first start state */
1432 
1433  if ( ! configYYin )
1434  configYYin = stdin;
1435 
1436  if ( ! configYYout )
1437  configYYout = stdout;
1438 
1439  if ( ! YY_CURRENT_BUFFER ) {
1443  }
1444 
1446  }
1447 
1448  while ( 1 ) /* loops until end-of-file is reached */
1449  {
1450  yy_cp = (yy_c_buf_p);
1451 
1452  /* Support of configYYtext. */
1453  *yy_cp = (yy_hold_char);
1454 
1455  /* yy_bp points to the position in yy_ch_buf of the start of
1456  * the current run.
1457  */
1458  yy_bp = yy_cp;
1459 
1460  yy_current_state = (yy_start);
1461 yy_match:
1462  do
1463  {
1464  register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
1465  if ( yy_accept[yy_current_state] )
1466  {
1467  (yy_last_accepting_state) = yy_current_state;
1468  (yy_last_accepting_cpos) = yy_cp;
1469  }
1470  while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1471  {
1472  yy_current_state = (int) yy_def[yy_current_state];
1473  if ( yy_current_state >= 114 )
1474  yy_c = yy_meta[(unsigned int) yy_c];
1475  }
1476  yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
1477  ++yy_cp;
1478  }
1479  while ( yy_current_state != 113 );
1480  yy_cp = (yy_last_accepting_cpos);
1481  yy_current_state = (yy_last_accepting_state);
1482 
1483 yy_find_action:
1484  yy_act = yy_accept[yy_current_state];
1485 
1487 
1488 do_action: /* This label is used only to access EOF actions. */
1489 
1490  switch ( yy_act )
1491  { /* beginning of action switch */
1492  case 0: /* must back up */
1493  /* undo the effects of YY_DO_BEFORE_ACTION */
1494  *yy_cp = (yy_hold_char);
1495  yy_cp = (yy_last_accepting_cpos);
1496  yy_current_state = (yy_last_accepting_state);
1497  goto yy_find_action;
1498 
1499 case 1:
1501 #line 623 "config.l"
1502 
1503  YY_BREAK
1504 case 2:
1505 /* rule 2 can match eol */
1507 #line 624 "config.l"
1508 { config->appendStartComment(configYYtext);}
1509  YY_BREAK
1510 case 3:
1512 #line 625 "config.l"
1513 {
1514  BEGIN(Start);
1515  unput(*configYYtext);
1516  }
1517  YY_BREAK
1518 case 4:
1519 /* rule 4 can match eol */
1521 #line 629 "config.l"
1522 { config->appendUserComment(configYYtext);}
1523  YY_BREAK
1524 case 5:
1526 #line 630 "config.l"
1527 { BEGIN(SkipComment); }
1528  YY_BREAK
1529 case 6:
1531 #line 631 "config.l"
1533  cmd=cmd.left(cmd.length()-1).stripWhiteSpace();
1534  ConfigOption *option = config->get(cmd);
1535  if (option==0) // oops not known
1536  {
1537  config_warn("ignoring unsupported tag `%s' at line %d, file %s\n",
1538  configYYtext,yyLineNr,yyFileName.data());
1539  BEGIN(SkipInvalid);
1540  }
1541  else // known tag
1542  {
1543  option->setUserComment(config->takeUserComment());
1544  option->setEncoding(encoding);
1545  switch(option->kind())
1546  {
1547  case ConfigOption::O_Info:
1548  // shouldn't get here!
1549  BEGIN(SkipInvalid);
1550  break;
1551  case ConfigOption::O_List:
1552  l = ((ConfigList *)option)->valueRef();
1553  l->clear();
1554  elemStr="";
1555  BEGIN(GetStrList);
1556  break;
1557  case ConfigOption::O_Enum:
1558  s = ((ConfigEnum *)option)->valueRef();
1559  s->resize(0);
1560  BEGIN(GetString);
1561  break;
1563  s = ((ConfigString *)option)->valueRef();
1564  s->resize(0);
1565  BEGIN(GetString);
1566  break;
1567  case ConfigOption::O_Int:
1568  s = ((ConfigInt *)option)->valueStringRef();
1569  s->resize(0);
1570  BEGIN(GetString);
1571  break;
1572  case ConfigOption::O_Bool:
1573  s = ((ConfigBool *)option)->valueStringRef();
1574  s->resize(0);
1575  BEGIN(GetString);
1576  break;
1578  if (config_upd)
1579  {
1580  config_warn("Tag `%s' at line %d of file `%s' has become obsolete.\n"
1581  " This tag has been removed.\n", cmd.data(),yyLineNr,yyFileName.data());
1582  }
1583  else
1584  {
1585  config_warn("Tag `%s' at line %d of file `%s' has become obsolete.\n"
1586  " To avoid this warning please remove this line from your configuration "
1587  "file or upgrade it using \"doxygen -u\"\n", cmd.data(),yyLineNr,yyFileName.data());
1588  }
1589  BEGIN(SkipInvalid);
1590  break;
1592  if (config_upd)
1593  {
1594  config_warn("Tag `%s' at line %d of file `%s' belongs to an option that was not enabled at compile time.\n"
1595  " This tag has been removed.\n", cmd.data(),yyLineNr,yyFileName.data());
1596  }
1597  else
1598  {
1599  config_warn("Tag `%s' at line %d of file `%s' belongs to an option that was not enabled at compile time.\n"
1600  " To avoid this warning please remove this line from your configuration "
1601  "file or upgrade it using \"doxygen -u\", or recompile doxygen with this feature enabled.\n", cmd.data(),yyLineNr,yyFileName.data());
1602  }
1603  BEGIN(SkipInvalid);
1604  break;
1605  }
1606  }
1607  }
1608  YY_BREAK
1609 case 7:
1611 #line 707 "config.l"
1613  cmd=cmd.left(cmd.length()-2).stripWhiteSpace();
1614  ConfigOption *option = config->get(cmd);
1615  if (option==0) // oops not known
1616  {
1617  config_warn("ignoring unsupported tag `%s' at line %d, file %s\n",
1618  configYYtext,yyLineNr,yyFileName.data());
1619  BEGIN(SkipInvalid);
1620  }
1621  else // known tag
1622  {
1623  option->setUserComment(config->takeUserComment());
1624  switch(option->kind())
1625  {
1626  case ConfigOption::O_Info:
1627  // shouldn't get here!
1628  BEGIN(SkipInvalid);
1629  break;
1630  case ConfigOption::O_List:
1631  l = ((ConfigList *)option)->valueRef();
1632  elemStr="";
1633  BEGIN(GetStrList);
1634  break;
1635  case ConfigOption::O_Enum:
1637  case ConfigOption::O_Int:
1638  case ConfigOption::O_Bool:
1639  config_warn("operator += not supported for `%s'. Ignoring line at line %d, file %s\n",
1640  configYYtext,yyLineNr,yyFileName.data());
1641  BEGIN(SkipInvalid);
1642  break;
1644  config_warn("Tag `%s' at line %d of file %s has become obsolete.\n"
1645  "To avoid this warning please update your configuration "
1646  "file using \"doxygen -u\"\n", cmd.data(),yyLineNr,yyFileName.data());
1647  BEGIN(SkipInvalid);
1648  break;
1650  config_warn("Tag `%s' at line %d of file %s belongs to an option that was not enabled at compile time.\n"
1651  "To avoid this warning please remove this line from your configuration "
1652  "file, upgrade it using \"doxygen -u\", or recompile doxygen with this feature enabled.\n", cmd.data(),yyLineNr,yyFileName.data());
1653  BEGIN(SkipInvalid);
1654  break;
1655  }
1656  }
1657  }
1658  YY_BREAK
1659 case 8:
1661 #line 753 "config.l"
1662 { BEGIN(GetStrList); l=&includePathList; l->clear(); elemStr=""; }
1663  YY_BREAK
1664 /* include a config file */
1665 case 9:
1667 #line 755 "config.l"
1668 { BEGIN(Include);}
1669  YY_BREAK
1670 case 10:
1672 #line 756 "config.l"
1673 {
1674  readIncludeFile(configStringRecode(configYYtext,encoding,"UTF-8"));
1675  BEGIN(Start);
1676  }
1677  YY_BREAK
1678 case YY_STATE_EOF(INITIAL):
1679 case YY_STATE_EOF(PreStart):
1680 case YY_STATE_EOF(Start):
1683 case YY_STATE_EOF(GetString):
1684 case YY_STATE_EOF(GetBool):
1685 case YY_STATE_EOF(GetStrList):
1687 case YY_STATE_EOF(GetEnvVar):
1688 case YY_STATE_EOF(Include):
1689 #line 760 "config.l"
1690 {
1691  //printf("End of include file\n");
1692  //printf("Include stack depth=%d\n",g_includeStack.count());
1693  if (includeStack.isEmpty())
1694  {
1695  //printf("Terminating scanner!\n");
1696  yyterminate();
1697  }
1698  else
1699  {
1700  ConfigFileState *fs=includeStack.pop();
1701  fclose(fs->filePtr);
1702  YY_BUFFER_STATE oldBuf = YY_CURRENT_BUFFER;
1704  configYY_delete_buffer(oldBuf );
1705  yyLineNr=fs->lineNr;
1706  yyFileName=fs->fileName;
1707  delete fs; fs=0;
1708  includeDepth--;
1709  }
1710  }
1711  YY_BREAK
1712 case 11:
1714 #line 782 "config.l"
1715 { config_warn("ignoring unknown tag `%s' at line %d, file %s\n",configYYtext,yyLineNr,yyFileName.data()); }
1716  YY_BREAK
1717 case 12:
1718 /* rule 12 can match eol */
1720 #line 783 "config.l"
1721 { yyLineNr++; BEGIN(Start); }
1722  YY_BREAK
1723 case 13:
1724 /* rule 13 can match eol */
1726 #line 784 "config.l"
1727 {
1728  yyLineNr++;
1729  if (!elemStr.isEmpty())
1730  {
1731  //printf("elemStr1=`%s'\n",elemStr.data());
1732  l->append(elemStr);
1733  }
1734  BEGIN(Start);
1735  }
1736  YY_BREAK
1737 case 14:
1739 #line 793 "config.l"
1740 {
1741  if (!elemStr.isEmpty())
1742  {
1743  //printf("elemStr2=`%s'\n",elemStr.data());
1744  l->append(elemStr);
1745  }
1746  elemStr.resize(0);
1747  }
1748  YY_BREAK
1749 case 15:
1751 #line 801 "config.l"
1752 { (*s)+=configStringRecode(configYYtext,encoding,"UTF-8");
1753  checkEncoding();
1754  }
1755  YY_BREAK
1756 case 16:
1758 #line 804 "config.l"
1759 { lastState=YY_START;
1761  tmpString.resize(0);
1762  }
1763  YY_BREAK
1764 case 17:
1765 /* rule 17 can match eol */
1767 #line 808 "config.l"
1768 {
1769  // we add a bogus space to signal that the string was quoted. This space will be stripped later on.
1770  tmpString+=" ";
1771  //printf("Quoted String = `%s'\n",tmpString.data());
1772  if (lastState==GetString)
1773  {
1774  (*s)+=configStringRecode(tmpString,encoding,"UTF-8");
1775  checkEncoding();
1776  }
1777  else
1778  {
1779  elemStr+=configStringRecode(tmpString,encoding,"UTF-8");
1780  }
1781  if (*configYYtext=='\n')
1782  {
1783  config_warn("Missing end quote (\") on line %d, file %s\n",yyLineNr,yyFileName.data());
1784  yyLineNr++;
1785  }
1786  BEGIN(lastState);
1787  }
1788  YY_BREAK
1789 case 18:
1791 #line 828 "config.l"
1792 {
1793  tmpString+='"';
1794  }
1795  YY_BREAK
1796 case 19:
1798 #line 831 "config.l"
1799 { tmpString+=*configYYtext; }
1800  YY_BREAK
1801 case 20:
1803 #line 832 "config.l"
1804 {
1805  QCString bs=configYYtext;
1806  bs=bs.upper();
1807  if (bs=="YES" || bs=="1")
1808  *b=TRUE;
1809  else if (bs=="NO" || bs=="0")
1810  *b=FALSE;
1811  else
1812  {
1813  *b=FALSE;
1814  config_warn("Invalid value `%s' for "
1815  "boolean tag in line %d, file %s; use YES or NO\n",
1816  bs.data(),yyLineNr,yyFileName.data());
1817  }
1818  }
1819  YY_BREAK
1820 case 21:
1822 #line 847 "config.l"
1823 {
1824  elemStr+=configStringRecode(configYYtext,encoding,"UTF-8");
1825  }
1826  YY_BREAK
1827 case 22:
1828 /* rule 22 can match eol */
1830 #line 850 "config.l"
1831 { yyLineNr++; BEGIN(Start); }
1832  YY_BREAK
1833 case 23:
1834 /* rule 23 can match eol */
1836 #line 851 "config.l"
1837 { yyLineNr++; BEGIN(Start); }
1838  YY_BREAK
1839 case 24:
1840 /* rule 24 can match eol */
1842 #line 852 "config.l"
1843 { yyLineNr++; }
1844  YY_BREAK
1845 case 25:
1847 #line 853 "config.l"
1848 
1849  YY_BREAK
1850 case 26:
1851 /* rule 26 can match eol */
1853 #line 854 "config.l"
1854 { yyLineNr++ ; }
1855  YY_BREAK
1856 case 27:
1858 #line 856 "config.l"
1859 ECHO;
1860  YY_BREAK
1861 #line 1862 "/nova/app/home/novasoft/doxygen/doxygen-1.8.11/build/generated_src/config.cpp"
1862 
1863  case YY_END_OF_BUFFER:
1864  {
1865  /* Amount of text matched not including the EOB char. */
1866  int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
1867 
1868  /* Undo the effects of YY_DO_BEFORE_ACTION. */
1869  *yy_cp = (yy_hold_char);
1871 
1872  if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
1873  {
1874  /* We're scanning a new file or input source. It's
1875  * possible that this happened because the user
1876  * just pointed configYYin at a new source and called
1877  * configYYlex(). If so, then we have to assure
1878  * consistency between YY_CURRENT_BUFFER and our
1879  * globals. Here is the right place to do so, because
1880  * this is the first action (other than possibly a
1881  * back-up) that will match for the new input source.
1882  */
1883  (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
1884  YY_CURRENT_BUFFER_LVALUE->yy_input_file = configYYin;
1885  YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
1886  }
1887 
1888  /* Note that here we test for yy_c_buf_p "<=" to the position
1889  * of the first EOB in the buffer, since yy_c_buf_p will
1890  * already have been incremented past the NUL character
1891  * (since all states make transitions on EOB to the
1892  * end-of-buffer state). Contrast this with the test
1893  * in input().
1894  */
1895  if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
1896  { /* This was really a NUL. */
1897  yy_state_type yy_next_state;
1898 
1899  (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
1900 
1901  yy_current_state = yy_get_previous_state( );
1902 
1903  /* Okay, we're now positioned to make the NUL
1904  * transition. We couldn't have
1905  * yy_get_previous_state() go ahead and do it
1906  * for us because it doesn't know how to deal
1907  * with the possibility of jamming (and we don't
1908  * want to build jamming into it because then it
1909  * will run more slowly).
1910  */
1911 
1912  yy_next_state = yy_try_NUL_trans( yy_current_state );
1913 
1914  yy_bp = (yytext_ptr) + YY_MORE_ADJ;
1915 
1916  if ( yy_next_state )
1917  {
1918  /* Consume the NUL. */
1919  yy_cp = ++(yy_c_buf_p);
1920  yy_current_state = yy_next_state;
1921  goto yy_match;
1922  }
1923 
1924  else
1925  {
1926  yy_cp = (yy_last_accepting_cpos);
1927  yy_current_state = (yy_last_accepting_state);
1928  goto yy_find_action;
1929  }
1930  }
1931 
1932  else switch ( yy_get_next_buffer( ) )
1933  {
1934  case EOB_ACT_END_OF_FILE:
1935  {
1937 
1938  if ( configYYwrap( ) )
1939  {
1940  /* Note: because we've taken care in
1941  * yy_get_next_buffer() to have set up
1942  * configYYtext, we can now set up
1943  * yy_c_buf_p so that if some total
1944  * hoser (like flex itself) wants to
1945  * call the scanner after we return the
1946  * YY_NULL, it'll still work - another
1947  * YY_NULL will get returned.
1948  */
1950 
1951  yy_act = YY_STATE_EOF(YY_START);
1952  goto do_action;
1953  }
1954 
1955  else
1956  {
1957  if ( ! (yy_did_buffer_switch_on_eof) )
1958  YY_NEW_FILE;
1959  }
1960  break;
1961  }
1962 
1963  case EOB_ACT_CONTINUE_SCAN:
1964  (yy_c_buf_p) =
1965  (yytext_ptr) + yy_amount_of_matched_text;
1966 
1967  yy_current_state = yy_get_previous_state( );
1968 
1969  yy_cp = (yy_c_buf_p);
1970  yy_bp = (yytext_ptr) + YY_MORE_ADJ;
1971  goto yy_match;
1972 
1973  case EOB_ACT_LAST_MATCH:
1974  (yy_c_buf_p) =
1975  &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
1976 
1977  yy_current_state = yy_get_previous_state( );
1978 
1979  yy_cp = (yy_c_buf_p);
1980  yy_bp = (yytext_ptr) + YY_MORE_ADJ;
1981  goto yy_find_action;
1982  }
1983  break;
1984  }
1985 
1986  default:
1988  "fatal flex scanner internal error--no action found" );
1989  } /* end of action switch */
1990  } /* end of scanning one token */
1991 } /* end of configYYlex */
1992 
1993 /* yy_get_next_buffer - try to read in a new buffer
1994  *
1995  * Returns a code representing an action:
1996  * EOB_ACT_LAST_MATCH -
1997  * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
1998  * EOB_ACT_END_OF_FILE - end of file
1999  */
2000 static int yy_get_next_buffer (void)
2001 {
2002  register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
2003  register char *source = (yytext_ptr);
2004  register int number_to_move, i;
2005  int ret_val;
2006 
2007  if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
2009  "fatal flex scanner internal error--end of buffer missed" );
2010 
2011  if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
2012  { /* Don't try to fill the buffer, so this is an EOF. */
2013  if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
2014  {
2015  /* We matched a single character, the EOB, so
2016  * treat this as a final EOF.
2017  */
2018  return EOB_ACT_END_OF_FILE;
2019  }
2020 
2021  else
2022  {
2023  /* We matched some text prior to the EOB, first
2024  * process it.
2025  */
2026  return EOB_ACT_LAST_MATCH;
2027  }
2028  }
2029 
2030  /* Try to read more data. */
2031 
2032  /* First move last chars to start of buffer. */
2033  number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
2034 
2035  for ( i = 0; i < number_to_move; ++i )
2036  *(dest++) = *(source++);
2037 
2038  if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
2039  /* don't do the read, it's not guaranteed to return an EOF,
2040  * just force an EOF
2041  */
2042  YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
2043 
2044  else
2045  {
2046  int num_to_read =
2047  YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
2048 
2049  while ( num_to_read <= 0 )
2050  { /* Not enough room in the buffer - grow it. */
2051 
2052  /* just a shorter name for the current buffer */
2053  YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
2054 
2055  int yy_c_buf_p_offset =
2056  (int) ((yy_c_buf_p) - b->yy_ch_buf);
2057 
2058  if ( b->yy_is_our_buffer )
2059  {
2060  int new_size = b->yy_buf_size * 2;
2061 
2062  if ( new_size <= 0 )
2063  b->yy_buf_size += b->yy_buf_size / 8;
2064  else
2065  b->yy_buf_size *= 2;
2066 
2067  b->yy_ch_buf = (char *)
2068  /* Include room in for 2 EOB chars. */
2069  configYYrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 );
2070  }
2071  else
2072  /* Can't grow it, we don't own it. */
2073  b->yy_ch_buf = 0;
2074 
2075  if ( ! b->yy_ch_buf )
2077  "fatal error - scanner input buffer overflow" );
2078 
2079  (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
2080 
2081  num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
2082  number_to_move - 1;
2083 
2084  }
2085 
2086  if ( num_to_read > YY_READ_BUF_SIZE )
2087  num_to_read = YY_READ_BUF_SIZE;
2088 
2089  /* Read in more data. */
2090  YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
2091  (yy_n_chars), (size_t) num_to_read );
2092 
2093  YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
2094  }
2095 
2096  if ( (yy_n_chars) == 0 )
2097  {
2098  if ( number_to_move == YY_MORE_ADJ )
2099  {
2100  ret_val = EOB_ACT_END_OF_FILE;
2102  }
2103 
2104  else
2105  {
2106  ret_val = EOB_ACT_LAST_MATCH;
2107  YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
2109  }
2110  }
2111 
2112  else
2113  ret_val = EOB_ACT_CONTINUE_SCAN;
2114 
2115  if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
2116  /* Extend the array by 50%, plus the number we really need. */
2117  yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
2118  YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) configYYrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
2119  if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
2120  YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
2121  }
2122 
2123  (yy_n_chars) += number_to_move;
2126 
2127  (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
2128 
2129  return ret_val;
2130 }
2131 
2132 /* yy_get_previous_state - get the state just before the EOB char was reached */
2133 
2134  static yy_state_type yy_get_previous_state (void)
2135 {
2136  register yy_state_type yy_current_state;
2137  register char *yy_cp;
2138 
2139  yy_current_state = (yy_start);
2140 
2141  for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
2142  {
2143  register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 28);
2144  if ( yy_accept[yy_current_state] )
2145  {
2146  (yy_last_accepting_state) = yy_current_state;
2147  (yy_last_accepting_cpos) = yy_cp;
2148  }
2149  while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2150  {
2151  yy_current_state = (int) yy_def[yy_current_state];
2152  if ( yy_current_state >= 114 )
2153  yy_c = yy_meta[(unsigned int) yy_c];
2154  }
2155  yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
2156  }
2157 
2158  return yy_current_state;
2159 }
2160 
2161 /* yy_try_NUL_trans - try to make a transition on the NUL character
2162  *
2163  * synopsis
2164  * next_state = yy_try_NUL_trans( current_state );
2165  */
2166  static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
2167 {
2168  register int yy_is_jam;
2169  register char *yy_cp = (yy_c_buf_p);
2170 
2171  register YY_CHAR yy_c = 28;
2172  if ( yy_accept[yy_current_state] )
2173  {
2174  (yy_last_accepting_state) = yy_current_state;
2175  (yy_last_accepting_cpos) = yy_cp;
2176  }
2177  while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2178  {
2179  yy_current_state = (int) yy_def[yy_current_state];
2180  if ( yy_current_state >= 114 )
2181  yy_c = yy_meta[(unsigned int) yy_c];
2182  }
2183  yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
2184  yy_is_jam = (yy_current_state == 113);
2185 
2186  return yy_is_jam ? 0 : yy_current_state;
2187 }
2188 
2189  static void yyunput (int c, register char * yy_bp )
2190 {
2191  register char *yy_cp;
2192 
2193  yy_cp = (yy_c_buf_p);
2194 
2195  /* undo effects of setting up configYYtext */
2196  *yy_cp = (yy_hold_char);
2197 
2198  if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
2199  { /* need to shift things up to make room */
2200  /* +2 for EOB chars. */
2201  register int number_to_move = (yy_n_chars) + 2;
2202  register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
2203  YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
2204  register char *source =
2205  &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
2206 
2207  while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
2208  *--dest = *--source;
2209 
2210  yy_cp += (int) (dest - source);
2211  yy_bp += (int) (dest - source);
2212  YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
2213  (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
2214 
2215  if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
2216  YY_FATAL_ERROR( "flex scanner push-back overflow" );
2217  }
2218 
2219  *--yy_cp = (char) c;
2220 
2221  (yytext_ptr) = yy_bp;
2222  (yy_hold_char) = *yy_cp;
2223  (yy_c_buf_p) = yy_cp;
2224 }
2225 
2226 #ifndef YY_NO_INPUT
2227 #ifdef __cplusplus
2228  static int yyinput (void)
2229 #else
2230  static int input (void)
2231 #endif
2232 
2233 {
2234  int c;
2235 
2236  *(yy_c_buf_p) = (yy_hold_char);
2237 
2238  if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
2239  {
2240  /* yy_c_buf_p now points to the character we want to return.
2241  * If this occurs *before* the EOB characters, then it's a
2242  * valid NUL; if not, then we've hit the end of the buffer.
2243  */
2244  if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
2245  /* This was really a NUL. */
2246  *(yy_c_buf_p) = '\0';
2247 
2248  else
2249  { /* need more input */
2250  int offset = (yy_c_buf_p) - (yytext_ptr);
2251  ++(yy_c_buf_p);
2252 
2253  switch ( yy_get_next_buffer( ) )
2254  {
2255  case EOB_ACT_LAST_MATCH:
2256  /* This happens because yy_g_n_b()
2257  * sees that we've accumulated a
2258  * token and flags that we need to
2259  * try matching the token before
2260  * proceeding. But for input(),
2261  * there's no matching to consider.
2262  * So convert the EOB_ACT_LAST_MATCH
2263  * to EOB_ACT_END_OF_FILE.
2264  */
2265 
2266  /* Reset buffer status. */
2268 
2269  /*FALLTHROUGH*/
2270 
2271  case EOB_ACT_END_OF_FILE:
2272  {
2273  if ( configYYwrap( ) )
2274  return EOF;
2275 
2276  if ( ! (yy_did_buffer_switch_on_eof) )
2277  YY_NEW_FILE;
2278 #ifdef __cplusplus
2279  return yyinput();
2280 #else
2281  return input();
2282 #endif
2283  }
2284 
2285  case EOB_ACT_CONTINUE_SCAN:
2286  (yy_c_buf_p) = (yytext_ptr) + offset;
2287  break;
2288  }
2289  }
2290  }
2291 
2292  c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
2293  *(yy_c_buf_p) = '\0'; /* preserve configYYtext */
2294  (yy_hold_char) = *++(yy_c_buf_p);
2295 
2296  return c;
2297 }
2298 #endif /* ifndef YY_NO_INPUT */
2299 
2300 /** Immediately switch to a different input stream.
2301  * @param input_file A readable stream.
2302  *
2303  * @note This function does not reset the start condition to @c INITIAL .
2304  */
2306 {
2307 
2308  if ( ! YY_CURRENT_BUFFER ){
2312  }
2313 
2316 }
2317 
2318 /** Switch to a different input buffer.
2319  * @param new_buffer The new input buffer.
2320  *
2321  */
2322  void configYY_switch_to_buffer (YY_BUFFER_STATE new_buffer )
2323 {
2324 
2325  /* TODO. We should be able to replace this entire function body
2326  * with
2327  * configYYpop_buffer_state();
2328  * configYYpush_buffer_state(new_buffer);
2329  */
2331  if ( YY_CURRENT_BUFFER == new_buffer )
2332  return;
2333 
2334  if ( YY_CURRENT_BUFFER )
2335  {
2336  /* Flush out information for old buffer. */
2337  *(yy_c_buf_p) = (yy_hold_char);
2338  YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
2339  YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
2340  }
2341 
2342  YY_CURRENT_BUFFER_LVALUE = new_buffer;
2344 
2345  /* We don't actually know whether we did this switch during
2346  * EOF (configYYwrap()) processing, but the only time this flag
2347  * is looked at is after configYYwrap() is called, so it's safe
2348  * to go ahead and always set it.
2349  */
2351 }
2352 
2353 static void configYY_load_buffer_state (void)
2354 {
2355  (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
2356  (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
2357  configYYin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
2358  (yy_hold_char) = *(yy_c_buf_p);
2359 }
2360 
2361 /** Allocate and initialize an input buffer state.
2362  * @param file A readable stream.
2363  * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
2364  *
2365  * @return the allocated buffer state.
2366  */
2367  YY_BUFFER_STATE configYY_create_buffer (FILE * file, int size )
2368 {
2369  YY_BUFFER_STATE b;
2370 
2371  b = (YY_BUFFER_STATE) configYYalloc(sizeof( struct yy_buffer_state ) );
2372  if ( ! b )
2373  YY_FATAL_ERROR( "out of dynamic memory in configYY_create_buffer()" );
2374 
2375  b->yy_buf_size = size;
2376 
2377  /* yy_ch_buf has to be 2 characters longer than the size given because
2378  * we need to put in 2 end-of-buffer characters.
2379  */
2380  b->yy_ch_buf = (char *) configYYalloc(b->yy_buf_size + 2 );
2381  if ( ! b->yy_ch_buf )
2382  YY_FATAL_ERROR( "out of dynamic memory in configYY_create_buffer()" );
2383 
2384  b->yy_is_our_buffer = 1;
2385 
2386  configYY_init_buffer(b,file );
2387 
2388  return b;
2389 }
2390 
2391 /** Destroy the buffer.
2392  * @param b a buffer created with configYY_create_buffer()
2393  *
2394  */
2395  void configYY_delete_buffer (YY_BUFFER_STATE b )
2396 {
2397 
2398  if ( ! b )
2399  return;
2400 
2401  if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
2403 
2404  if ( b->yy_is_our_buffer )
2405  configYYfree((void *) b->yy_ch_buf );
2406 
2407  configYYfree((void *) b );
2408 }
2409 
2410 /* Initializes or reinitializes a buffer.
2411  * This function is sometimes called more than once on the same buffer,
2412  * such as during a configYYrestart() or at EOF.
2413  */
2414  static void configYY_init_buffer (YY_BUFFER_STATE b, FILE * file )
2415 
2416 {
2417  int oerrno = errno;
2418 
2420 
2421  b->yy_input_file = file;
2422  b->yy_fill_buffer = 1;
2423 
2424  /* If b is the current buffer, then configYY_init_buffer was _probably_
2425  * called from configYYrestart() or through yy_get_next_buffer.
2426  * In that case, we don't want to reset the lineno or column.
2427  */
2428  if (b != YY_CURRENT_BUFFER){
2429  b->yy_bs_lineno = 1;
2430  b->yy_bs_column = 0;
2431  }
2432 
2433  b->yy_is_interactive = 0;
2434 
2435  errno = oerrno;
2436 }
2437 
2438 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
2439  * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
2440  *
2441  */
2442  void configYY_flush_buffer (YY_BUFFER_STATE b )
2443 {
2444  if ( ! b )
2445  return;
2446 
2447  b->yy_n_chars = 0;
2448 
2449  /* We always need two end-of-buffer characters. The first causes
2450  * a transition to the end-of-buffer state. The second causes
2451  * a jam in that state.
2452  */
2455 
2456  b->yy_buf_pos = &b->yy_ch_buf[0];
2457 
2458  b->yy_at_bol = 1;
2460 
2461  if ( b == YY_CURRENT_BUFFER )
2463 }
2464 
2465 /** Pushes the new state onto the stack. The new state becomes
2466  * the current state. This function will allocate the stack
2467  * if necessary.
2468  * @param new_buffer The new state.
2469  *
2470  */
2471 void configYYpush_buffer_state (YY_BUFFER_STATE new_buffer )
2472 {
2473  if (new_buffer == NULL)
2474  return;
2475 
2477 
2478  /* This block is copied from configYY_switch_to_buffer. */
2479  if ( YY_CURRENT_BUFFER )
2480  {
2481  /* Flush out information for old buffer. */
2482  *(yy_c_buf_p) = (yy_hold_char);
2483  YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
2484  YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
2485  }
2486 
2487  /* Only push if top exists. Otherwise, replace top. */
2488  if (YY_CURRENT_BUFFER)
2489  (yy_buffer_stack_top)++;
2490  YY_CURRENT_BUFFER_LVALUE = new_buffer;
2491 
2492  /* copied from configYY_switch_to_buffer. */
2495 }
2496 
2497 /** Removes and deletes the top of the stack, if present.
2498  * The next element becomes the new top.
2499  *
2500  */
2502 {
2503  if (!YY_CURRENT_BUFFER)
2504  return;
2505 
2507  YY_CURRENT_BUFFER_LVALUE = NULL;
2508  if ((yy_buffer_stack_top) > 0)
2509  --(yy_buffer_stack_top);
2510 
2511  if (YY_CURRENT_BUFFER) {
2514  }
2515 }
2516 
2517 /* Allocates the stack if it does not exist.
2518  * Guarantees space for at least one push.
2519  */
2521 {
2522  int num_to_alloc;
2523 
2524  if (!(yy_buffer_stack)) {
2525 
2526  /* First allocation is just for 2 elements, since we don't know if this
2527  * scanner will even need a stack. We use 2 instead of 1 to avoid an
2528  * immediate realloc on the next call.
2529  */
2530  num_to_alloc = 1;
2532  (num_to_alloc * sizeof(struct yy_buffer_state*)
2533  );
2534  if ( ! (yy_buffer_stack) )
2535  YY_FATAL_ERROR( "out of dynamic memory in configYYensure_buffer_stack()" );
2536 
2537  memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
2538 
2539  (yy_buffer_stack_max) = num_to_alloc;
2540  (yy_buffer_stack_top) = 0;
2541  return;
2542  }
2543 
2544  if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
2545 
2546  /* Increase the buffer to prepare for a possible push. */
2547  int grow_size = 8 /* arbitrary grow size */;
2548 
2549  num_to_alloc = (yy_buffer_stack_max) + grow_size;
2551  ((yy_buffer_stack),
2552  num_to_alloc * sizeof(struct yy_buffer_state*)
2553  );
2554  if ( ! (yy_buffer_stack) )
2555  YY_FATAL_ERROR( "out of dynamic memory in configYYensure_buffer_stack()" );
2556 
2557  /* zero only the new slots.*/
2558  memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
2559  (yy_buffer_stack_max) = num_to_alloc;
2560  }
2561 }
2562 
2563 /** Setup the input buffer state to scan directly from a user-specified character buffer.
2564  * @param base the character buffer
2565  * @param size the size in bytes of the character buffer
2566  *
2567  * @return the newly allocated buffer state object.
2568  */
2569 YY_BUFFER_STATE configYY_scan_buffer (char * base, yy_size_t size )
2570 {
2571  YY_BUFFER_STATE b;
2572 
2573  if ( size < 2 ||
2574  base[size-2] != YY_END_OF_BUFFER_CHAR ||
2575  base[size-1] != YY_END_OF_BUFFER_CHAR )
2576  /* They forgot to leave room for the EOB's. */
2577  return 0;
2578 
2579  b = (YY_BUFFER_STATE) configYYalloc(sizeof( struct yy_buffer_state ) );
2580  if ( ! b )
2581  YY_FATAL_ERROR( "out of dynamic memory in configYY_scan_buffer()" );
2582 
2583  b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
2584  b->yy_buf_pos = b->yy_ch_buf = base;
2585  b->yy_is_our_buffer = 0;
2586  b->yy_input_file = 0;
2587  b->yy_n_chars = b->yy_buf_size;
2588  b->yy_is_interactive = 0;
2589  b->yy_at_bol = 1;
2590  b->yy_fill_buffer = 0;
2592 
2594 
2595  return b;
2596 }
2597 
2598 /** Setup the input buffer state to scan a string. The next call to configYYlex() will
2599  * scan from a @e copy of @a str.
2600  * @param yystr a NUL-terminated string to scan
2601  *
2602  * @return the newly allocated buffer state object.
2603  * @note If you want to scan bytes that may contain NUL values, then use
2604  * configYY_scan_bytes() instead.
2605  */
2606 YY_BUFFER_STATE configYY_scan_string (yyconst char * yystr )
2607 {
2608 
2609  return configYY_scan_bytes(yystr,strlen(yystr) );
2610 }
2611 
2612 /** Setup the input buffer state to scan the given bytes. The next call to configYYlex() will
2613  * scan from a @e copy of @a bytes.
2614  * @param bytes the byte buffer to scan
2615  * @param len the number of bytes in the buffer pointed to by @a bytes.
2616  *
2617  * @return the newly allocated buffer state object.
2618  */
2619 YY_BUFFER_STATE configYY_scan_bytes (yyconst char * yybytes, int _yybytes_len )
2620 {
2621  YY_BUFFER_STATE b;
2622  char *buf;
2623  yy_size_t n;
2624  int i;
2625 
2626  /* Get memory for full buffer, including space for trailing EOB's. */
2627  n = _yybytes_len + 2;
2628  buf = (char *) configYYalloc(n );
2629  if ( ! buf )
2630  YY_FATAL_ERROR( "out of dynamic memory in configYY_scan_bytes()" );
2631 
2632  for ( i = 0; i < _yybytes_len; ++i )
2633  buf[i] = yybytes[i];
2634 
2635  buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
2636 
2637  b = configYY_scan_buffer(buf,n );
2638  if ( ! b )
2639  YY_FATAL_ERROR( "bad buffer in configYY_scan_bytes()" );
2640 
2641  /* It's okay to grow etc. this buffer, and we should throw it
2642  * away when we're done.
2643  */
2644  b->yy_is_our_buffer = 1;
2645 
2646  return b;
2647 }
2648 
2649 #ifndef YY_EXIT_FAILURE
2650 #define YY_EXIT_FAILURE 2
2651 #endif
2652 
2653 static void yy_fatal_error (yyconst char* msg )
2654 {
2655  (void) fprintf( stderr, "%s\n", msg );
2656  exit( YY_EXIT_FAILURE );
2657 }
2658 
2659 /* Redefine yyless() so it works in section 3 code. */
2660 
2661 #undef yyless
2662 #define yyless(n) \
2663  do \
2664  { \
2665  /* Undo effects of setting up configYYtext. */ \
2666  int yyless_macro_arg = (n); \
2667  YY_LESS_LINENO(yyless_macro_arg);\
2668  configYYtext[configYYleng] = (yy_hold_char); \
2669  (yy_c_buf_p) = configYYtext + yyless_macro_arg; \
2670  (yy_hold_char) = *(yy_c_buf_p); \
2671  *(yy_c_buf_p) = '\0'; \
2672  configYYleng = yyless_macro_arg; \
2673  } \
2674  while ( 0 )
2675 
2676 /* Accessor methods (get/set functions) to struct members. */
2677 
2678 /** Get the current line number.
2679  *
2680  */
2682 {
2683 
2684  return configYYlineno;
2685 }
2686 
2687 /** Get the input stream.
2688  *
2689  */
2690 FILE *configYYget_in (void)
2691 {
2692  return configYYin;
2693 }
2694 
2695 /** Get the output stream.
2696  *
2697  */
2698 FILE *configYYget_out (void)
2699 {
2700  return configYYout;
2701 }
2702 
2703 /** Get the length of the current token.
2704  *
2705  */
2707 {
2708  return configYYleng;
2709 }
2710 
2711 /** Get the current token.
2712  *
2713  */
2714 
2715 char *configYYget_text (void)
2716 {
2717  return configYYtext;
2718 }
2719 
2720 /** Set the current line number.
2721  * @param line_number
2722  *
2723  */
2724 void configYYset_lineno (int line_number )
2725 {
2726 
2727  configYYlineno = line_number;
2728 }
2729 
2730 /** Set the input stream. This does not discard the current
2731  * input buffer.
2732  * @param in_str A readable stream.
2733  *
2734  * @see configYY_switch_to_buffer
2735  */
2736 void configYYset_in (FILE * in_str )
2737 {
2738  configYYin = in_str ;
2739 }
2740 
2741 void configYYset_out (FILE * out_str )
2742 {
2743  configYYout = out_str ;
2744 }
2745 
2747 {
2748  return configYY_flex_debug;
2749 }
2750 
2751 void configYYset_debug (int bdebug )
2752 {
2753  configYY_flex_debug = bdebug ;
2754 }
2755 
2756 static int yy_init_globals (void)
2757 {
2758  /* Initialization is the same as for the non-reentrant scanner.
2759  * This function is called from configYYlex_destroy(), so don't allocate here.
2760  */
2761 
2762  (yy_buffer_stack) = 0;
2763  (yy_buffer_stack_top) = 0;
2764  (yy_buffer_stack_max) = 0;
2765  (yy_c_buf_p) = (char *) 0;
2766  (yy_init) = 0;
2767  (yy_start) = 0;
2768 
2769 /* Defined in main.c */
2770 #ifdef YY_STDINIT
2771  configYYin = stdin;
2772  configYYout = stdout;
2773 #else
2774  configYYin = (FILE *) 0;
2775  configYYout = (FILE *) 0;
2776 #endif
2777 
2778  /* For future reference: Set errno on error, since we are called by
2779  * configYYlex_init()
2780  */
2781  return 0;
2782 }
2783 
2784 /* configYYlex_destroy is for both reentrant and non-reentrant scanners. */
2786 {
2787 
2788  /* Pop the buffer stack, destroying each element. */
2789  while(YY_CURRENT_BUFFER){
2791  YY_CURRENT_BUFFER_LVALUE = NULL;
2793  }
2794 
2795  /* Destroy the stack itself. */
2796  configYYfree((yy_buffer_stack) );
2797  (yy_buffer_stack) = NULL;
2798 
2799  /* Reset the globals. This is important in a non-reentrant scanner so the next time
2800  * configYYlex() is called, initialization will occur. */
2801  yy_init_globals( );
2802 
2803  return 0;
2804 }
2805 
2806 /*
2807  * Internal utility routines.
2808  */
2809 
2810 #ifndef yytext_ptr
2811 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
2812 {
2813  register int i;
2814  for ( i = 0; i < n; ++i )
2815  s1[i] = s2[i];
2816 }
2817 #endif
2818 
2819 #ifdef YY_NEED_STRLEN
2820 static int yy_flex_strlen (yyconst char * s )
2821 {
2822  register int n;
2823  for ( n = 0; s[n]; ++n )
2824  ;
2825 
2826  return n;
2827 }
2828 #endif
2829 
2831 {
2832  return (void *) malloc( size );
2833 }
2834 
2835 void *configYYrealloc (void * ptr, yy_size_t size )
2836 {
2837  /* The cast to (char *) in the following accommodates both
2838  * implementations that use char* generic pointers, and those
2839  * that use void* generic pointers. It works with the latter
2840  * because both ANSI C and C++ allow castless assignment from
2841  * any pointer type to void*, and deal with argument conversions
2842  * as though doing an assignment.
2843  */
2844  return (void *) realloc( (char *) ptr, size );
2845 }
2846 
2847 void configYYfree (void * ptr )
2848 {
2849  free( (char *) ptr ); /* see configYYrealloc() for (char *) cast */
2850 }
2851 
2852 #define YYTABLES_NAME "yytables"
2853 
2854 #line 856 "config.l"
2855 
2856 
2857 
2858 /*@ ----------------------------------------------------------------------------
2859  */
2860 
2861 void Config::writeTemplate(FTextStream &t,bool sl,bool upd)
2862 {
2863  /* print first lines of user comment that were at the beginning of the file, might have special meaning for editors */
2864  if (m_startComment)
2865  {
2866  t << takeStartComment() << endl;
2867  }
2868  t << "# Doxyfile " << versionString << endl << endl;
2869  if (!sl)
2870  {
2871  t << convertToComment(m_header,"");
2872  }
2874  ConfigOption *option;
2875  for (;(option=it.current());++it)
2876  {
2877  option->writeTemplate(t,sl,upd);
2878  }
2879  /* print last lines of user comment that were at the end of the file */
2880  if (m_userComment)
2881  {
2882  t << "\n";
2883  t << takeUserComment();
2884  }
2885 }
2886 
2888 {
2890  ConfigOption *option;
2891  for (;(option=it.current());++it)
2892  {
2893  option->convertStrToVal();
2894  }
2895 }
2896 
2898 {
2899  static QRegExp re("\\$\\([a-z_A-Z0-9.-]+\\)");
2900  static QRegExp re2("\\$\\([a-z_A-Z0-9.-]+\\([a-z_A-Z0-9.-]+\\)\\)"); // For e.g. PROGRAMFILES(X86)
2901  if (s.isEmpty()) return;
2902  int p=0;
2903  int i,l;
2904  //printf("substEnvVarInString(%s) start\n",s.data());
2905  while ((i=re.match(s,p,&l))!=-1 || (i=re2.match(s,p,&l))!=-1)
2906  {
2907  //printf("Found environment var s.mid(%d,%d)=`%s'\n",i+2,l-3,s.mid(i+2,l-3).data());
2908  QCString env=portable_getenv(s.mid(i+2,l-3));
2909  substEnvVarsInString(env); // recursively expand variables if needed.
2910  s = s.left(i)+env+s.right(s.length()-i-l);
2911  p=i+env.length(); // next time start at the end of the expanded string
2912  }
2913  s=s.stripWhiteSpace(); // to strip the bogus space that was added when an argument
2914  // has quotes
2915  //printf("substEnvVarInString(%s) end\n",s.data());
2916 }
2917 
2919 {
2920  char *s = sl.first();
2921  while (s)
2922  {
2923  QCString result(s);
2924  // an argument with quotes will have an extra space at the end, so wasQuoted will be TRUE.
2925  bool wasQuoted = (result.find(' ')!=-1) || (result.find('\t')!=-1);
2926  // here we strip the quote again
2927  substEnvVarsInString(result);
2928 
2929  //printf("Result %s was quoted=%d\n",result.data(),wasQuoted);
2930 
2931  if (!wasQuoted) /* as a result of the expansion, a single string
2932  may have expanded into a list, which we'll
2933  add to sl. If the original string already
2934  contained multiple elements no further
2935  splitting is done to allow quoted items with spaces! */
2936  {
2937  int l=result.length();
2938  int i,p=0;
2939  // skip spaces
2940  // search for a "word"
2941  for (i=0;i<l;i++)
2942  {
2943  char c=0;
2944  // skip until start of new word
2945  while (i<l && ((c=result.at(i))==' ' || c=='\t')) i++;
2946  p=i; // p marks the start index of the word
2947  // skip until end of a word
2948  while (i<l && ((c=result.at(i))!=' ' && c!='\t' && c!='"')) i++;
2949  if (i<l) // not at the end of the string
2950  {
2951  if (c=='"') // word within quotes
2952  {
2953  p=i+1;
2954  for (i++;i<l;i++)
2955  {
2956  c=result.at(i);
2957  if (c=='"') // end quote
2958  {
2959  // replace the string in the list and go to the next item.
2960  sl.insert(sl.at(),result.mid(p,i-p)); // insert new item before current item.
2961  sl.next(); // current item is now the old item
2962  p=i+1;
2963  break;
2964  }
2965  else if (c=='\\') // skip escaped stuff
2966  {
2967  i++;
2968  }
2969  }
2970  }
2971  else if (c==' ' || c=='\t') // separator
2972  {
2973  // replace the string in the list and go to the next item.
2974  sl.insert(sl.at(),result.mid(p,i-p)); // insert new item before current item.
2975  sl.next(); // current item is now the old item
2976  p=i+1;
2977  }
2978  }
2979  }
2980  if (p!=l) // add the leftover as a string
2981  {
2982  // replace the string in the list and go to the next item.
2983  sl.insert(sl.at(),result.right(l-p)); // insert new item before current item.
2984  sl.next(); // current item is now the old item
2985  }
2986  }
2987  else // just goto the next element in the list
2988  {
2989  sl.insert(sl.at(),result);
2990  sl.next();
2991  }
2992  // remove the old unexpanded string from the list
2993  int i=sl.at();
2994  sl.remove(); // current item index changes if the last element is removed.
2995  if (sl.at()==i) // not last item
2996  s = sl.current();
2997  else // just removed last item
2998  s = 0;
2999  }
3000 }
3001 
3003 {
3004  substEnvVarsInString(m_value);
3005 }
3006 
3008 {
3009  substEnvVarsInStrList(m_value);
3010 }
3011 
3013 {
3014  substEnvVarsInString(m_valueString);
3015 }
3016 
3018 {
3019  substEnvVarsInString(m_valueString);
3020 }
3021 
3023 {
3024  substEnvVarsInString(m_value);
3025 }
3026 
3028 {
3030  ConfigOption *option;
3031  for (;(option=it.current());++it)
3032  {
3033  option->substEnvVars();
3034  }
3035 }
3036 
3037 static void cleanUpPaths(QStrList &str)
3038 {
3039  char *sfp = str.first();
3040  while (sfp)
3041  {
3042  register char *p = sfp;
3043  if (p)
3044  {
3045  char c;
3046  while ((c=*p))
3047  {
3048  if (c=='\\') *p='/';
3049  p++;
3050  }
3051  }
3052  QCString path = sfp;
3053  if ((path.at(0)!='/' && (path.length()<=2 || path.at(1)!=':')) ||
3054  path.at(path.length()-1)!='/'
3055  )
3056  {
3057  QFileInfo fi(path);
3058  if (fi.exists() && fi.isDir())
3059  {
3060  int i = str.at();
3061  str.remove();
3062  if (str.at()==i) // did not remove last item
3063  str.insert(i,fi.absFilePath().utf8()+"/");
3064  else
3065  str.append(fi.absFilePath().utf8()+"/");
3066  }
3067  }
3068  sfp = str.next();
3069  }
3070 }
3071 
3072 void Config::checkFileName(const char *optionName)
3073 {
3074  QCString &s = Config_getString(optionName);
3076  if ((val=="yes" || val=="true" || val=="1" || val=="all") ||
3077  (val=="no" || val=="false" || val=="0" || val=="none"))
3078  {
3079  config_err("file name expected for option %s, got %s instead. Ignoring...\n",optionName,s.data());
3080  s=""; // note the use of &s above: this will change the option value!
3081  }
3082 }
3083 
3085 {
3086  //if (!projectName.isEmpty())
3087  //{
3088  // projectName[0]=toupper(projectName[0]);
3089  //}
3090 
3091  QCString &warnFormat = Config_getString("WARN_FORMAT");
3092  if (warnFormat.stripWhiteSpace().isEmpty())
3093  {
3094  warnFormat="$file:$line $text";
3095  }
3096  else
3097  {
3098  if (warnFormat.find("$file")==-1)
3099  {
3100  config_warn("warning format does not contain a $file tag!\n");
3101  }
3102  if (warnFormat.find("$line")==-1)
3103  {
3104  config_warn("warning format does not contain a $line tag!\n");
3105  }
3106  if (warnFormat.find("$text")==-1)
3107  {
3108  config_warn("warning format foes not contain a $text tag!\n");
3109  }
3110  }
3111 
3112  QCString &manExtension = Config_getString("MAN_EXTENSION");
3113 
3114  // set default man page extension if non is given by the user
3115  if (manExtension.isEmpty())
3116  {
3117  manExtension=".3";
3118  }
3119 
3120  QCString &paperType = Config_getEnum("PAPER_TYPE");
3121  paperType=paperType.lower().stripWhiteSpace();
3122  if (paperType.isEmpty() || paperType=="a4wide")
3123  {
3124  paperType = "a4";
3125  }
3126  if (paperType!="a4" && paperType!="letter" &&
3127  paperType!="legal" && paperType!="executive")
3128  {
3129  config_err("Unknown page type specified\n");
3130  paperType="a4";
3131  }
3132 
3133  QCString &outputLanguage=Config_getEnum("OUTPUT_LANGUAGE");
3134  outputLanguage=outputLanguage.stripWhiteSpace();
3135  if (outputLanguage.isEmpty())
3136  {
3137  outputLanguage = "English";
3138  }
3139 
3140  QCString &htmlFileExtension=Config_getString("HTML_FILE_EXTENSION");
3141  htmlFileExtension=htmlFileExtension.stripWhiteSpace();
3142  if (htmlFileExtension.isEmpty())
3143  {
3144  htmlFileExtension = ".html";
3145  }
3146 
3147  // expand the relative stripFromPath values
3148  QStrList &stripFromPath = Config_getList("STRIP_FROM_PATH");
3149  char *sfp = stripFromPath.first();
3150  if (sfp==0) // by default use the current path
3151  {
3152  stripFromPath.append(QDir::currentDirPath().utf8()+"/");
3153  }
3154  else
3155  {
3156  cleanUpPaths(stripFromPath);
3157  }
3158 
3159  // expand the relative stripFromPath values
3160  QStrList &stripFromIncPath = Config_getList("STRIP_FROM_INC_PATH");
3161  cleanUpPaths(stripFromIncPath);
3162 
3163  // Test to see if HTML header is valid
3164  QCString &headerFile = Config_getString("HTML_HEADER");
3165  if (!headerFile.isEmpty())
3166  {
3167  QFileInfo fi(headerFile);
3168  if (!fi.exists())
3169  {
3170  config_err("tag HTML_HEADER: header file `%s' "
3171  "does not exist\n",headerFile.data());
3172  exit(1);
3173  }
3174  }
3175  // Test to see if HTML footer is valid
3176  QCString &footerFile = Config_getString("HTML_FOOTER");
3177  if (!footerFile.isEmpty())
3178  {
3179  QFileInfo fi(footerFile);
3180  if (!fi.exists())
3181  {
3182  config_err("tag HTML_FOOTER: footer file `%s' "
3183  "does not exist\n",footerFile.data());
3184  exit(1);
3185  }
3186  }
3187 
3188  // Test to see if MathJax code file is valid
3189  if (Config_getBool("USE_MATHJAX"))
3190  {
3191  QCString &MathJaxCodefile = Config_getString("MATHJAX_CODEFILE");
3192  if (!MathJaxCodefile.isEmpty())
3193  {
3194  QFileInfo fi(MathJaxCodefile);
3195  if (!fi.exists())
3196  {
3197  config_err("tag MATHJAX_CODEFILE file `%s' "
3198  "does not exist\n",MathJaxCodefile.data());
3199  exit(1);
3200  }
3201  }
3202  QCString &path = Config_getString("MATHJAX_RELPATH");
3203  if (!path.isEmpty() && path.at(path.length()-1)!='/')
3204  {
3205  path+="/";
3206  }
3207 
3208  }
3209 
3210  // Test to see if LaTeX header is valid
3211  QCString &latexHeaderFile = Config_getString("LATEX_HEADER");
3212  if (!latexHeaderFile.isEmpty())
3213  {
3214  QFileInfo fi(latexHeaderFile);
3215  if (!fi.exists())
3216  {
3217  config_err("tag LATEX_HEADER: header file `%s' "
3218  "does not exist\n",latexHeaderFile.data());
3219  exit(1);
3220  }
3221  }
3222  // Test to see if LaTeX footer is valid
3223  QCString &latexFooterFile = Config_getString("LATEX_FOOTER");
3224  if (!latexFooterFile.isEmpty())
3225  {
3226  QFileInfo fi(latexFooterFile);
3227  if (!fi.exists())
3228  {
3229  config_err("tag LATEX_FOOTER: footer file `%s' "
3230  "does not exist\n",latexFooterFile.data());
3231  exit(1);
3232  }
3233  }
3234 
3235  // check include path
3236  QStrList &includePath = Config_getList("INCLUDE_PATH");
3237  char *s=includePath.first();
3238  while (s)
3239  {
3240  QFileInfo fi(s);
3241  if (!fi.exists()) config_warn("tag INCLUDE_PATH: include path `%s' "
3242  "does not exist\n",s);
3243  s=includePath.next();
3244  }
3245 
3246  // check aliases
3247  QStrList &aliasList = Config_getList("ALIASES");
3248  s=aliasList.first();
3249  while (s)
3250  {
3251  QRegExp re1("[a-z_A-Z][a-z_A-Z0-9]*[ \t]*="); // alias without argument
3252  QRegExp re2("[a-z_A-Z][a-z_A-Z0-9]*{[0-9]*}[ \t]*="); // alias with argument
3253  QCString alias=s;
3254  alias=alias.stripWhiteSpace();
3255  if (alias.find(re1)!=0 && alias.find(re2)!=0)
3256  {
3257  config_err("Illegal alias format `%s'. Use \"name=value\" or \"name(n)=value\", where n is the number of arguments\n",
3258  alias.data());
3259  }
3260  s=aliasList.next();
3261  }
3262 
3263  // check if GENERATE_TREEVIEW and GENERATE_HTMLHELP are both enabled
3264  if (Config_getBool("GENERATE_TREEVIEW") && Config_getBool("GENERATE_HTMLHELP"))
3265  {
3266  config_err("When enabling GENERATE_HTMLHELP the tree view (GENERATE_TREEVIEW) should be disabled. I'll do it for you.\n");
3267  Config_getBool("GENERATE_TREEVIEW")=FALSE;
3268  }
3269  if (Config_getBool("SEARCHENGINE") && Config_getBool("GENERATE_HTMLHELP"))
3270  {
3271  config_err("When enabling GENERATE_HTMLHELP the search engine (SEARCHENGINE) should be disabled. I'll do it for you.\n");
3272  Config_getBool("SEARCHENGINE")=FALSE;
3273  }
3274 
3275  // check if SEPARATE_MEMBER_PAGES and INLINE_GROUPED_CLASSES are both enabled
3276  if (Config_getBool("SEPARATE_MEMBER_PAGES") && Config_getBool("INLINE_GROUPED_CLASSES"))
3277  {
3278  config_err("When enabling INLINE_GROUPED_CLASSES the SEPARATE_MEMBER_PAGES option should be disabled. I'll do it for you.\n");
3279  Config_getBool("SEPARATE_MEMBER_PAGES")=FALSE;
3280  }
3281 
3282  // check dot image format
3283  QCString &dotImageFormat=Config_getEnum("DOT_IMAGE_FORMAT");
3284  dotImageFormat=dotImageFormat.stripWhiteSpace();
3285  if (dotImageFormat.isEmpty())
3286  {
3287  dotImageFormat = "png";
3288  }
3289  //else if (dotImageFormat!="gif" && dotImageFormat!="png" && dotImageFormat!="jpg")
3290  //{
3291  // config_err("Invalid value for DOT_IMAGE_FORMAT: `%s'. Using the default.\n",dotImageFormat.data());
3292  // dotImageFormat = "png";
3293  //}
3294 
3295  QCString &dotFontName=Config_getString("DOT_FONTNAME");
3296  if (dotFontName=="FreeSans" || dotFontName=="FreeSans.ttf")
3297  {
3298  config_warn("doxygen no longer ships with the FreeSans font.\n"
3299  "You may want to clear or change DOT_FONTNAME.\n"
3300  "Otherwise you run the risk that the wrong font is being used for dot generated graphs.\n");
3301  }
3302 
3303 
3304  // check dot path
3305  QCString &dotPath = Config_getString("DOT_PATH");
3306  if (!dotPath.isEmpty())
3307  {
3308  QFileInfo fi(dotPath);
3309  if (fi.exists() && fi.isFile()) // user specified path + exec
3310  {
3311  dotPath=fi.dirPath(TRUE).utf8()+"/";
3312  }
3313  else
3314  {
3315  QFileInfo dp(dotPath+"/dot"+portable_commandExtension());
3316  if (!dp.exists() || !dp.isFile())
3317  {
3318  config_warn("the dot tool could not be found at %s\n",dotPath.data());
3319  dotPath="";
3320  }
3321  else
3322  {
3323  dotPath=dp.dirPath(TRUE).utf8()+"/";
3324  }
3325  }
3326 #if defined(_WIN32) // convert slashes
3327  uint i=0,l=dotPath.length();
3328  for (i=0;i<l;i++) if (dotPath.at(i)=='/') dotPath.at(i)='\\';
3329 #endif
3330  }
3331  else // make sure the string is empty but not null!
3332  {
3333  dotPath="";
3334  }
3335 
3336  // check mscgen path
3337  QCString &mscgenPath = Config_getString("MSCGEN_PATH");
3338  if (!mscgenPath.isEmpty())
3339  {
3340  QFileInfo dp(mscgenPath+"/mscgen"+portable_commandExtension());
3341  if (!dp.exists() || !dp.isFile())
3342  {
3343  config_warn("the mscgen tool could not be found at %s\n",mscgenPath.data());
3344  mscgenPath="";
3345  }
3346  else
3347  {
3348  mscgenPath=dp.dirPath(TRUE).utf8()+"/";
3349 #if defined(_WIN32) // convert slashes
3350  uint i=0,l=mscgenPath.length();
3351  for (i=0;i<l;i++) if (mscgenPath.at(i)=='/') mscgenPath.at(i)='\\';
3352 #endif
3353  }
3354  }
3355  else // make sure the string is empty but not null!
3356  {
3357  mscgenPath="";
3358  }
3359 
3360  // check plantuml path
3361  QCString &plantumlJarPath = Config_getString("PLANTUML_JAR_PATH");
3362  if (!plantumlJarPath.isEmpty())
3363  {
3364  QFileInfo pu(plantumlJarPath);
3365  if (pu.exists() && pu.isDir()) // PLANTUML_JAR_PATH is directory
3366  {
3367  QFileInfo jar(plantumlJarPath+portable_pathSeparator()+"plantuml.jar");
3368  if (jar.exists() && jar.isFile())
3369  {
3370  plantumlJarPath = jar.dirPath(TRUE).utf8()+portable_pathSeparator();
3371  }
3372  else
3373  {
3374  config_err("Jar file plantuml.jar not found at location "
3375  "specified via PLANTUML_JAR_PATH: '%s'\n",plantumlJarPath.data());
3376  plantumlJarPath="";
3377  }
3378  }
3379  else if (pu.exists() && pu.isFile() && plantumlJarPath.right(4)==".jar") // PLANTUML_JAR_PATH is file
3380  {
3381  plantumlJarPath = pu.dirPath(TRUE).utf8()+portable_pathSeparator();
3382  }
3383  else
3384  {
3385  config_err("path specified via PLANTUML_JAR_PATH does not exist or not a directory: %s\n",
3386  plantumlJarPath.data());
3387  plantumlJarPath="";
3388  }
3389  }
3390 
3391  // check dia path
3392  QCString &diaPath = Config_getString("DIA_PATH");
3393  if (!diaPath.isEmpty())
3394  {
3395  QFileInfo dp(diaPath+"/dia"+portable_commandExtension());
3396  if (!dp.exists() || !dp.isFile())
3397  {
3398  config_warn("dia could not be found at %s\n",diaPath.data());
3399  diaPath="";
3400  }
3401  else
3402  {
3403  diaPath=dp.dirPath(TRUE).utf8()+"/";
3404 #if defined(_WIN32) // convert slashes
3405  uint i=0,l=diaPath.length();
3406  for (i=0;i<l;i++) if (diaPath.at(i)=='/') diaPath.at(i)='\\';
3407 #endif
3408  }
3409  }
3410  else // make sure the string is empty but not null!
3411  {
3412  diaPath="";
3413  }
3414 
3415  // check input
3416  QStrList &inputSources=Config_getList("INPUT");
3417  if (inputSources.count()==0)
3418  {
3419  // use current dir as the default
3420  inputSources.append(QDir::currentDirPath().utf8());
3421  }
3422  else
3423  {
3424  s=inputSources.first();
3425  while (s)
3426  {
3427  QFileInfo fi(s);
3428  if (!fi.exists())
3429  {
3430  config_warn("tag INPUT: input source `%s' does not exist\n",s);
3431  }
3432  s=inputSources.next();
3433  }
3434  }
3435 
3436  initFilePattern();
3437 
3438  // add default pattern if needed
3439  QStrList &examplePatternList = Config_getList("EXAMPLE_PATTERNS");
3440  if (examplePatternList.isEmpty())
3441  {
3442  examplePatternList.append("*");
3443  }
3444 
3445  // if no output format is enabled, warn the user
3446  if (!Config_getBool("GENERATE_HTML") &&
3447  !Config_getBool("GENERATE_LATEX") &&
3448  !Config_getBool("GENERATE_MAN") &&
3449  !Config_getBool("GENERATE_RTF") &&
3450  !Config_getBool("GENERATE_XML") &&
3451  !Config_getBool("GENERATE_PERLMOD") &&
3452  !Config_getBool("GENERATE_RTF") &&
3453  !Config_getBool("GENERATE_DOCBOOK") &&
3454  !Config_getBool("GENERATE_AUTOGEN_DEF") &&
3455  Config_getString("GENERATE_TAGFILE").isEmpty()
3456  )
3457  {
3458  config_warn("No output formats selected! Set at least one of the main GENERATE_* options to YES.\n");
3459  }
3460 
3461  // check HTMLHELP creation requirements
3462  if (!Config_getBool("GENERATE_HTML") &&
3463  Config_getBool("GENERATE_HTMLHELP"))
3464  {
3465  config_warn("GENERATE_HTMLHELP=YES requires GENERATE_HTML=YES.\n");
3466  }
3467 
3468  // check QHP creation requirements
3469  if (Config_getBool("GENERATE_QHP"))
3470  {
3471  if (Config_getString("QHP_NAMESPACE").isEmpty())
3472  {
3473  config_err("GENERATE_QHP=YES requires QHP_NAMESPACE to be set. Using 'org.doxygen.doc' as default!.\n");
3474  Config_getString("QHP_NAMESPACE")="org.doxygen.doc";
3475  }
3476 
3477  if (Config_getString("QHP_VIRTUAL_FOLDER").isEmpty())
3478  {
3479  config_err("GENERATE_QHP=YES requires QHP_VIRTUAL_FOLDER to be set. Using 'doc' as default!\n");
3480  Config_getString("QHP_VIRTUAL_FOLDER")="doc";
3481  }
3482  }
3483 
3484  if (Config_getBool("OPTIMIZE_OUTPUT_JAVA") && Config_getBool("INLINE_INFO"))
3485  {
3486  // don't show inline info for Java output, since Java has no inline
3487  // concept.
3488  Config_getBool("INLINE_INFO")=FALSE;
3489  }
3490 
3491  int &depth = Config_getInt("MAX_DOT_GRAPH_DEPTH");
3492  if (depth==0)
3493  {
3494  depth=1000;
3495  }
3496 
3497  int &hue = Config_getInt("HTML_COLORSTYLE_HUE");
3498  if (hue<0)
3499  {
3500  hue=0;
3501  }
3502  else if (hue>=360)
3503  {
3504  hue=hue%360;
3505  }
3506 
3507  int &sat = Config_getInt("HTML_COLORSTYLE_SAT");
3508  if (sat<0)
3509  {
3510  sat=0;
3511  }
3512  else if (sat>255)
3513  {
3514  sat=255;
3515  }
3516  int &gamma = Config_getInt("HTML_COLORSTYLE_GAMMA");
3517  if (gamma<40)
3518  {
3519  gamma=40;
3520  }
3521  else if (gamma>240)
3522  {
3523  gamma=240;
3524  }
3525 
3526  QCString mathJaxFormat = Config_getEnum("MATHJAX_FORMAT");
3527  if (!mathJaxFormat.isEmpty() && mathJaxFormat!="HTML-CSS" &&
3528  mathJaxFormat!="NativeMML" && mathJaxFormat!="SVG")
3529  {
3530  config_err("Unsupported value for MATHJAX_FORMAT: Should be one of HTML-CSS, NativeMML, or SVG\n");
3531  Config_getEnum("MATHJAX_FORMAT")="HTML-CSS";
3532  }
3533 
3534  // add default words if needed
3535  QStrList &annotationFromBrief = Config_getList("ABBREVIATE_BRIEF");
3536  if (annotationFromBrief.isEmpty())
3537  {
3538  annotationFromBrief.append("The $name class");
3539  annotationFromBrief.append("The $name widget");
3540  annotationFromBrief.append("The $name file");
3541  annotationFromBrief.append("is");
3542  annotationFromBrief.append("provides");
3543  annotationFromBrief.append("specifies");
3544  annotationFromBrief.append("contains");
3545  annotationFromBrief.append("represents");
3546  annotationFromBrief.append("a");
3547  annotationFromBrief.append("an");
3548  annotationFromBrief.append("the");
3549  }
3550 
3551  // some default settings for vhdl
3552  if (Config_getBool("OPTIMIZE_OUTPUT_VHDL") &&
3553  (Config_getBool("INLINE_INHERITED_MEMB") ||
3554  Config_getBool("INHERIT_DOCS") ||
3555  !Config_getBool("HIDE_SCOPE_NAMES") ||
3556  !Config_getBool("EXTRACT_PRIVATE") ||
3557  !Config_getBool("EXTRACT_PACKAGE")
3558  )
3559  )
3560  {
3561  bool b1 = Config_getBool("INLINE_INHERITED_MEMB");
3562  bool b2 = Config_getBool("INHERIT_DOCS");
3563  bool b3 = Config_getBool("HIDE_SCOPE_NAMES");
3564  bool b4 = Config_getBool("EXTRACT_PRIVATE");
3565  bool b5 = Config_getBool("SKIP_FUNCTION_MACROS");
3566  bool b6 = Config_getBool("EXTRACT_PACKAGE");
3567  const char *s1,*s2,*s3,*s4,*s5,*s6;
3568  if (b1) s1=" INLINE_INHERITED_MEMB = NO (was YES)\n"; else s1="";
3569  if (b2) s2=" INHERIT_DOCS = NO (was YES)\n"; else s2="";
3570  if (!b3) s3=" HIDE_SCOPE_NAMES = YES (was NO)\n"; else s3="";
3571  if (!b4) s4=" EXTRACT_PRIVATE = YES (was NO)\n"; else s4="";
3572  if (b5) s5=" ENABLE_PREPROCESSING = NO (was YES)\n"; else s5="";
3573  if (!b6) s6=" EXTRACT_PACKAGE = YES (was NO)\n"; else s6="";
3574 
3575 
3576  config_warn("enabling OPTIMIZE_OUTPUT_VHDL assumes the following settings:\n"
3577  "%s%s%s%s%s%s",s1,s2,s3,s4,s5,s6
3578  );
3579 
3580  Config_getBool("INLINE_INHERITED_MEMB") = FALSE;
3581  Config_getBool("INHERIT_DOCS") = FALSE;
3582  Config_getBool("HIDE_SCOPE_NAMES") = TRUE;
3583  Config_getBool("EXTRACT_PRIVATE") = TRUE;
3584  Config_getBool("ENABLE_PREPROCESSING") = FALSE;
3585  Config_getBool("EXTRACT_PACKAGE") = TRUE;
3586  }
3587 
3588  checkFileName("GENERATE_TAGFILE");
3589 
3590 #if 0 // TODO: this breaks test 25; SOURCEBROWSER = NO and SOURCE_TOOLTIPS = YES.
3591  // So this and other regressions should be analysed and fixed before this can be enabled
3592  // disable any boolean options that depend on disabled options
3594  ConfigOption *option;
3595  for (it.toFirst();(option=it.current());++it)
3596  {
3597  QCString depName = option->dependsOn(); // option has a dependency
3598  if (!depName.isEmpty())
3599  {
3600  ConfigOption * dep = Config::instance()->get(depName);
3601  if (dep->kind()==ConfigOption::O_Bool &&
3602  Config_getBool(depName)==FALSE) // dependent option is disabled
3603  {
3604  if (option->kind()==ConfigOption::O_Bool)
3605  {
3606  printf("disabling option %s\n",option->name().data());
3607  Config_getBool(option->name())=FALSE; // also disable this option
3608  }
3609  }
3610  }
3611  }
3612 #endif
3613 }
3614 
3616 {
3618  ConfigOption *option;
3619  for (;(option=it.current());++it)
3620  {
3621  option->init();
3622  }
3623 
3624  // sanity check if all depends relations are valid
3625  for (it.toFirst();(option=it.current());++it)
3626  {
3627  QCString depName = option->dependsOn();
3628  if (!depName.isEmpty())
3629  {
3630  ConfigOption * opt = Config::instance()->get(depName);
3631  if (opt==0)
3632  {
3633  config_warn("Config option '%s' has invalid depends relation on unknown option '%s'\n",
3634  option->name().data(),depName.data());
3635  exit(1);
3636  }
3637  }
3638  }
3639 }
3640 
3642 {
3643  if (m_initialized) return;
3644  m_initialized = TRUE;
3645  addConfigOptions(this);
3646 }
3647 
3648 static QCString configFileToString(const char *name)
3649 {
3650  if (name==0 || name[0]==0) return 0;
3651  QFile f;
3652 
3653  bool fileOpened=FALSE;
3654  if (name[0]=='-' && name[1]==0) // read from stdin
3655  {
3656  fileOpened=f.open(IO_ReadOnly,stdin);
3657  if (fileOpened)
3658  {
3659  const int bSize=4096;
3660  QCString contents(bSize);
3661  int totalSize=0;
3662  int size;
3663  while ((size=f.readBlock(contents.rawData()+totalSize,bSize))==bSize)
3664  {
3665  totalSize+=bSize;
3666  contents.resize(totalSize+bSize);
3667  }
3668  totalSize+=size+2;
3669  contents.resize(totalSize);
3670  contents.at(totalSize-2)='\n'; // to help the scanner
3671  contents.at(totalSize-1)='\0';
3672  return contents;
3673  }
3674  }
3675  else // read from file
3676  {
3677  QFileInfo fi(name);
3678  if (!fi.exists() || !fi.isFile())
3679  {
3680  config_err("file `%s' not found\n",name);
3681  return "";
3682  }
3683  f.setName(name);
3684  fileOpened=f.open(IO_ReadOnly);
3685  if (fileOpened)
3686  {
3687  int fsize=f.size();
3688  QCString contents(fsize+2);
3689  f.readBlock(contents.rawData(),fsize);
3690  f.close();
3691  if (fsize==0 || contents[fsize-1]=='\n')
3692  contents[fsize]='\0';
3693  else
3694  contents[fsize]='\n'; // to help the scanner
3695  contents[fsize+1]='\0';
3696  return contents;
3697  }
3698  }
3699  if (!fileOpened)
3700  {
3701  config_err("cannot open file `%s' for reading\n",name);
3702  exit(1);
3703  }
3704  return "";
3705 }
3706 
3707 bool Config::parseString(const char *fn,const char *str,bool update)
3708 {
3709  config = Config::instance();
3710  inputString = str;
3711  inputPosition = 0;
3712  yyFileName = fn;
3713  yyLineNr = 1;
3714  includeStack.setAutoDelete(TRUE);
3715  includeStack.clear();
3716  includeDepth = 0;
3718  BEGIN( PreStart );
3719  config_upd = update;
3720  configYYlex();
3721  config_upd = FALSE;
3722  inputString = 0;
3723  return TRUE;
3724 }
3725 
3726 bool Config::parse(const char *fn,bool update)
3727 {
3728  int retval;
3729  encoding = "UTF-8";
3730  printlex(configYY_flex_debug, TRUE, __FILE__, fn);
3731  retval = parseString(fn,configFileToString(fn), update);
3732  printlex(configYY_flex_debug, FALSE, __FILE__, fn);
3733  return retval;
3734 }
3735 
3736 extern "C" { // some bogus code to keep the compiler happy
3737  //int configYYwrap() { return 1 ; }
3738 }
3739 
static QCString name
Definition: declinfo.cpp:673
QCString * valueRef()
Definition: config.h:182
static int lastState
Definition: config.cpp:1045
static int inputPosition
Definition: config.cpp:1038
YY_BUFFER_STATE oldState
Definition: config.cpp:1032
static const char * error_str
Definition: config.cpp:667
#define YY_BUF_SIZE
Definition: config.cpp:163
void setAutoDelete(bool del)
Definition: qstack.h:55
intermediate_table::iterator iterator
bool resize(uint newlen)
Definition: qcstring.h:225
static const char * inputString
Definition: config.cpp:1037
char * rawData() const
Definition: qcstring.h:216
register int yy_act
Definition: config.cpp:1415
bool portable_isAbsolutePath(const char *fileName)
Definition: portable.cpp:434
void writeTemplate(FTextStream &t, bool sl, bool)
Definition: config.cpp:921
#define yyconst
Definition: config.cpp:127
#define configYYwrap(n)
Definition: config.cpp:354
#define GetQuotedString
Definition: config.cpp:1235
char * yy_buf_pos
Definition: code.cpp:213
#define YY_START
Definition: config.cpp:150
FILE * yy_input_file
Definition: code.cpp:210
short int flex_int16_t
Definition: code.cpp:71
void setEncoding(const QCString &e)
Definition: config.h:71
static QStrList includePathList
Definition: config.cpp:1047
static void configYY_init_buffer(YY_BUFFER_STATE b, FILE *file)
Definition: config.cpp:2414
static yyconst flex_int32_t yy_ec[256]
Definition: config.cpp:411
int yy_n_chars
Definition: code.cpp:223
void writeBoolValue(FTextStream &t, bool v)
Definition: config.cpp:726
int flex_int32_t
Definition: config.cpp:72
QCString stripWhiteSpace() const
Definition: qcstring.cpp:295
static int yyLineNr
Definition: config.cpp:1039
YY_BUFFER_STATE newState
Definition: config.cpp:1033
static int yy_start
Definition: config.cpp:299
void addConfigOptions(Config *cfg)
static void configYYensure_buffer_stack(void)
Definition: config.cpp:2520
void create()
Definition: config.cpp:3641
void configYYset_out(FILE *out_str)
Definition: config.cpp:2741
static char yy_hold_char
Definition: config.cpp:292
static QCString result
bool isEmpty() const
Definition: qcstring.h:189
register char * yy_cp
Definition: config.cpp:1414
The QRegExp class provides pattern matching using regular expressions or wildcards.
Definition: qregexp.h:46
type * current() const
Definition: qstack.h:65
#define GetBool
Definition: config.cpp:1233
void msg(const char *fmt,...)
Definition: message.cpp:107
#define GetString
Definition: config.cpp:1232
static QCString configStringRecode(const QCString &str, const char *fromEncoding, const char *toEncoding)
Definition: config.cpp:1083
bool & getBool(const char *fileName, int num, const char *name) const
Definition: config.cpp:892
void printlex(int dbg, bool enter, const char *lexName, const char *fileName)
Definition: message.cpp:242
int yy_fill_buffer
Definition: code.cpp:250
static QCString convertToComment(const QCString &s, const QCString &u)
Definition: config.cpp:694
uint length() const
Definition: qcstring.h:195
void writeTemplate(FTextStream &, bool, bool)
Definition: config.cpp:1020
#define YY_READ_BUF_SIZE
Definition: config.cpp:1316
static yyconst flex_int16_t yy_accept[114]
Definition: config.cpp:394
bool parseString(const char *fn, const char *str, bool upd=FALSE)
Definition: config.cpp:3707
static YY_BUFFER_STATE * yy_buffer_stack
Definition: config.cpp:274
const char * portable_getenv(const char *variable)
Definition: portable.cpp:317
void checkFileName(const char *)
Definition: config.cpp:3072
void substEnvVars()
Definition: config.cpp:3007
void writeTemplate(FTextStream &t, bool shortIndex, bool updateOnly)
Definition: config.cpp:2861
static char * yy_c_buf_p
Definition: config.cpp:297
type * first()
Definition: qinternallist.h:87
int configYYlex_destroy(void)
Definition: config.cpp:2785
unsigned char YY_CHAR
Definition: config.cpp:357
char & at(uint i) const
Definition: qcstring.h:326
opt
Definition: train.py:196
int configYYleng
Definition: config.cpp:294
#define YY_BUFFER_NORMAL
Definition: config.cpp:255
void convertStrToVal()
Definition: config.cpp:2887
YY_BUFFER_STATE configYY_create_buffer(FILE *file, int size)
Definition: config.cpp:2367
size_t portable_iconv(void *cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
Definition: portable_c.c:24
void writeStringValue(FTextStream &t, QCString &s)
Definition: config.cpp:737
const bool FALSE
Definition: qglobal.h:370
signed char flex_int8_t
Definition: config.cpp:70
static constexpr double fs
Definition: Units.h:100
void writeStringList(FTextStream &t, QStrList &l)
Definition: config.cpp:768
static yyconst flex_int16_t yy_nxt[471]
Definition: config.cpp:486
Definition: qstack.h:46
const std::string instance
int yy_bs_lineno
Definition: code.cpp:244
short int flex_int16_t
Definition: config.cpp:71
int readBlock(char *data, uint len)
Definition: qfile_unix.cpp:473
bool parse(const char *fn, bool upd=FALSE)
Definition: config.cpp:3726
#define Config_getList(val)
Definition: config.cpp:662
void configYYset_debug(int debug_flag)
Definition: config.cpp:2751
QCString left(uint len) const
Definition: qcstring.cpp:213
FILE * configYYin
Definition: config.cpp:359
if(!(yy_init))
Definition: config.cpp:1422
void convertStrToVal()
Definition: config.cpp:789
Simplified and optimized version of QTextStream.
Definition: ftextstream.h:11
#define YY_BREAK
Definition: config.cpp:1403
void substEnvVars()
Definition: config.cpp:3022
int errno
Contains the last error code.
Definition: structcmd.h:53
char * configYYget_text(void)
Definition: config.cpp:2715
init
Definition: train.py:42
int find(char c, int index=0, bool cs=TRUE) const
Definition: qcstring.cpp:41
OptionType kind() const
Definition: config.h:65
void config_err(const char *fmt,...)
Definition: config.cpp:669
void setName(const QString &name)
Definition: qfile.cpp:167
QCString & getEnum(const char *fileName, int num, const char *name) const
Definition: config.cpp:860
void convertStrToVal()
Definition: config.cpp:807
yy_size_t yy_buf_size
Definition: code.cpp:218
static QCString args
Definition: declinfo.cpp:674
static QStrList * l
Definition: config.cpp:1044
void configYYset_in(FILE *in_str)
Definition: config.cpp:2736
void configYY_delete_buffer(YY_BUFFER_STATE b)
Definition: config.cpp:2395
bool check(const std::vector< std::vector< float > > &outputs)
static yyconst flex_int16_t yy_def[130]
Definition: config.cpp:468
#define YY_INPUT(buf, result, max_size)
Definition: config.cpp:1059
static FILE * findFile(const char *fileName)
Definition: config.cpp:1144
bool isFile() const
void push(const type *d)
Definition: qstack.h:58
int configYY_flex_debug
Definition: config.cpp:600
#define IO_ReadOnly
Definition: qiodevice.h:61
void configYYset_extra(YY_EXTRA_TYPE user_defined)
#define Config_getEnum(val)
Definition: config.cpp:663
static QCString stripFromPath(const QCString &path, QStrList &l)
Definition: util.cpp:274
QString absFilePath() const
int portable_iconv_close(void *cd)
Definition: portable_c.c:30
void writeTemplate(FTextStream &t, bool sl, bool)
Definition: config.cpp:955
type * current() const
Definition: qinternallist.h:83
#define Config_getInt(val)
Definition: config.cpp:661
decltype(auto) constexpr size(T &&obj)
ADL-aware version of std::size.
Definition: StdUtils.h:92
static int includeDepth
Definition: config.cpp:1049
#define EOB_ACT_END_OF_FILE
Definition: config.cpp:180
virtual void convertStrToVal()
Definition: config.h:76
FILE * configYYout
Definition: config.cpp:359
void * configYYrealloc(void *, yy_size_t)
Definition: config.cpp:2835
static QCString configFileToString(const char *name)
Definition: config.cpp:3648
static QStack< ConfigFileState > includeStack
Definition: config.cpp:1048
YY_BUFFER_STATE configYY_scan_bytes(yyconst char *bytes, int len)
Definition: config.cpp:2619
typename config_impl< T >::type Config
Definition: ModuleMacros.h:52
QAsciiDict< Entry > fn
void configYYset_lineno(int line_number)
Definition: config.cpp:2724
void configYYfree(void *)
Definition: config.cpp:2847
#define YY_END_OF_BUFFER
Definition: config.cpp:386
#define YY_END_OF_BUFFER_CHAR
Definition: config.cpp:159
QCString upper() const
Definition: qcstring.cpp:279
int configYYlex(void)
#define YY_CURRENT_BUFFER
Definition: config.cpp:282
void writeIntValue(FTextStream &t, int i)
Definition: config.cpp:732
int yy_bs_column
Definition: code.cpp:245
#define YY_FATAL_ERROR(msg)
Definition: config.cpp:1378
static bool config_upd
Definition: config.cpp:1050
static int input(void)
Definition: code.cpp:15695
FILE * filePtr
Definition: config.cpp:1031
FILE * configYYget_in(void)
Definition: config.cpp:2690
fileName
Definition: dumpTree.py:9
uint count() const
Definition: qstack.h:56
QString dirPath(bool absPath=FALSE) const
int & getInt(const char *fileName, int num, const char *name) const
Definition: config.cpp:876
static void yy_fatal_error(yyconst char msg[])
bool isEmpty() const
Definition: qstack.h:57
#define YY_NEW_FILE
Definition: config.cpp:157
static Config * config
Definition: config.cpp:1054
QCString & getString(const char *fileName, int num, const char *name) const
Definition: config.cpp:828
#define YY_BUFFER_NEW
Definition: config.cpp:254
void writeTemplate(FTextStream &t, bool sl, bool)
Definition: config.cpp:938
QCString right(uint len) const
Definition: qcstring.cpp:231
std::void_t< T > n
static FILE * tryPath(const char *path, const char *fileName)
Definition: config.cpp:1128
bool open(int)
Definition: qfile_unix.cpp:134
void writeTemplate(FTextStream &t, bool sl, bool upd)
Definition: config.cpp:996
static QString currentDirPath()
Definition: qdir_unix.cpp:141
static int yy_init
Definition: config.cpp:298
bool insert(uint i, const type *d)
Definition: qinternallist.h:58
char versionString[]
Definition: version.cpp:1
static yy_state_type yy_last_accepting_state
Definition: config.cpp:596
void * configYYalloc(yy_size_t)
Definition: config.cpp:2830
void configYY_flush_buffer(YY_BUFFER_STATE b)
Definition: config.cpp:2442
static void cleanUpPaths(QStrList &str)
Definition: config.cpp:3037
#define PreStart
Definition: config.cpp:1228
static QCString elemStr
Definition: config.cpp:1046
static QCString yyFileName
Definition: config.cpp:1040
int configYYlineno
Definition: config.cpp:365
p
Definition: test.py:223
void append(const type *d)
Definition: qinternallist.h:61
void configYYrestart(FILE *input_file)
Definition: config.cpp:2305
A bunch of utility functions.
static size_t yy_buffer_stack_max
Definition: config.cpp:273
unsigned char flex_uint8_t
Definition: config.cpp:73
void initFilePattern(void)
Definition: util.cpp:8569
#define YY_RULE_SETUP
Definition: config.cpp:1406
YY_EXTRA_TYPE configYYget_extra(void)
const char * data() const
Definition: qcstring.h:207
#define YY_RESTORE_YY_MORE_OFFSET
Definition: config.cpp:608
#define Config_getString(val)
Definition: config.cpp:660
type * current() const
Definition: qlist.h:146
void * portable_iconv_open(const char *tocode, const char *fromcode)
Definition: portable_c.c:19
void writeTemplate(FTextStream &, bool, bool)
Definition: config.cpp:1021
char * yy_ch_buf
Definition: code.cpp:212
string tmp
Definition: languages.py:63
#define INITIAL
Definition: config.cpp:1227
static yyconst flex_int32_t yy_meta[29]
Definition: config.cpp:443
static char * yy_last_accepting_cpos
Definition: config.cpp:597
#define Config_getBool(val)
Definition: config.cpp:664
unsigned char YY_CHAR
Definition: code.cpp:357
#define unput(c)
Definition: config.cpp:199
void writeTemplate(FTextStream &t, bool sl, bool)
Definition: config.cpp:910
static void yyunput(int c, char *buf_ptr)
double gamma(double KE, const simb::MCParticle *part)
struct yy_buffer_state * YY_BUFFER_STATE
Definition: config.cpp:172
#define EOB_ACT_CONTINUE_SCAN
Definition: config.cpp:179
type * next()
Definition: qinternallist.h:89
int flex_int32_t
Definition: code.cpp:72
virtual void substEnvVars()=0
type * pop()
Definition: qstack.h:59
int yy_is_our_buffer
Definition: code.cpp:229
static int yyread(char *buf, int max_size)
Definition: config.cpp:1061
static yy_state_type yy_try_NUL_trans(yy_state_type current_state)
Definition: config.cpp:2166
#define Include
Definition: config.cpp:1237
unsigned int flex_uint32_t
Definition: config.cpp:75
QCString mid(uint index, uint len=0xffffffff) const
Definition: qcstring.cpp:246
#define YY_SC_TO_UI(c)
Definition: config.cpp:138
int match(const QCString &str, int index=0, int *len=0, bool indexIsStart=TRUE) const
Definition: qregexp.cpp:649
The QFile class is an I/O device that operates on files.
Definition: qfile.h:50
#define YY_STATE_EOF(state)
Definition: config.cpp:154
static int yy_init_globals(void)
Definition: config.cpp:2756
static int yy_did_buffer_switch_on_eof
Definition: config.cpp:304
#define YY_MORE_ADJ
Definition: config.cpp:607
void substituteEnvironmentVars()
Definition: config.cpp:3027
int configYYget_debug(void)
Definition: config.cpp:2746
void substEnvVars()
Definition: config.cpp:3017
static const char * warning_str
Definition: config.cpp:666
#define yyterminate()
Definition: config.cpp:1368
YY_BUFFER_STATE configYY_scan_buffer(char *base, yy_size_t size)
Definition: config.cpp:2569
#define YY_CURRENT_BUFFER_LVALUE
Definition: config.cpp:289
void substEnvVars()
Definition: config.cpp:3012
static yyconst flex_int16_t yy_base[130]
Definition: config.cpp:450
char * configYYtext
Definition: config.cpp:609
#define YY_DECL
Definition: config.cpp:1391
unsigned short int flex_uint16_t
Definition: config.cpp:74
static QCString encoding
Definition: config.cpp:1052
static QCString tmpString
Definition: config.cpp:1041
static int yy_get_next_buffer(void)
Definition: config.cpp:2000
QStrList & getList(const char *fileName, int num, const char *name) const
Definition: config.cpp:844
QCString name() const
Definition: config.h:66
#define BEGIN
Definition: config.cpp:144
#define SkipInvalid
Definition: config.cpp:1231
static yyconst flex_int16_t yy_chk[471]
Definition: config.cpp:541
void writeStringValue(QTextStream &t, QTextCodec *codec, const QString &s)
void config_warn(const char *fmt,...)
Definition: config.cpp:676
int configYYget_lineno(void)
Definition: config.cpp:2681
bool isEmpty() const
Definition: qinternallist.h:57
#define EOB_ACT_LAST_MATCH
Definition: config.cpp:181
void configYYpush_buffer_state(YY_BUFFER_STATE new_buffer)
Definition: config.cpp:2471
void substEnvVars()
Definition: config.cpp:3002
static bool * b
Definition: config.cpp:1043
QCString dependsOn() const
Definition: config.h:69
QCString fileName
Definition: config.cpp:1034
#define YY_EXIT_FAILURE
Definition: config.cpp:2650
register char * yy_bp
Definition: config.cpp:1414
const char * portable_commandExtension()
Definition: portable.cpp:382
static void substEnvVarsInString(QCString &s)
Definition: config.cpp:2897
int configYYget_leng(void)
Definition: config.cpp:2706
#define YY_BUFFER_EOF_PENDING
Definition: config.cpp:266
void writeTemplate(FTextStream &t, bool sl, bool upd)
Definition: config.cpp:972
int yy_is_interactive
Definition: code.cpp:236
type * at(uint i)
Definition: qinternallist.h:81
virtual void init()
Definition: config.h:78
size_t yy_size_t
Definition: config.cpp:203
#define GetStrList
Definition: config.cpp:1234
list cmd
Definition: getreco.py:22
void clear()
Definition: qstack.h:61
char portable_pathSeparator()
Definition: portable.cpp:355
#define yytext_ptr
Definition: config.cpp:368
The QFileInfo class provides system-independent file information.
Definition: qfileinfo.h:51
QCString lower() const
Definition: qcstring.cpp:263
uint count() const
Definition: qinternallist.h:56
#define ECHO
Definition: config.cpp:1324
static yy_state_type yy_get_previous_state(void)
Definition: config.cpp:2134
void close()
Definition: qfile_unix.cpp:614
QCString utf8() const
Definition: qstring.cpp:14507
unsigned uint
Definition: qglobal.h:351
int yy_state_type
Definition: config.cpp:361
FILE * configYYget_out(void)
Definition: config.cpp:2698
byte bytes
Alias for common language habits.
Definition: datasize.h:101
FILE * portable_fopen(const char *fileName, const char *mode)
Definition: portable.cpp:344
size_t yy_size_t
Definition: code.cpp:203
YY_BUFFER_STATE configYY_scan_string(yyconst char *yy_str)
Definition: config.cpp:2606
static void configYY_load_buffer_state(void)
Definition: config.cpp:2353
static void substEnvVarsInStrList(QStrList &sl)
Definition: config.cpp:2918
int yy_buffer_status
Definition: code.cpp:252
void configYY_switch_to_buffer(YY_BUFFER_STATE new_buffer)
Definition: config.cpp:2322
static QCString * s
Definition: config.cpp:1042
bool isDir() const
#define GetEnvVar
Definition: config.cpp:1236
static void checkEncoding()
Definition: config.cpp:1122
const bool TRUE
Definition: qglobal.h:371
static void readIncludeFile(const char *incName)
Definition: config.cpp:1166
static QCString str
#define Start
Definition: config.cpp:1229
bool remove(uint i)
Definition: qinternallist.h:62
Portable versions of functions that are platform dependent.
#define MAX_INCLUDE_DEPTH
Definition: config.cpp:689
static size_t yy_buffer_stack_top
Definition: config.cpp:272
Definition: se.py:1
uint size() const
Definition: qfile_unix.cpp:398
QTextStream & endl(QTextStream &s)
virtual void writeTemplate(FTextStream &t, bool sl, bool upd)=0
void configYYpop_buffer_state(void)
Definition: config.cpp:2501
void setUserComment(const QCString &u)
Definition: config.h:72
bool exists() const
Definition: qfileinfo.cpp:265
#define YY_DO_BEFORE_ACTION
Definition: config.cpp:378
type * toFirst()
Definition: qlist.h:135
#define SkipComment
Definition: config.cpp:1230
#define YY_EXTRA_TYPE
Definition: config.cpp:1248