Line data Source code
1 : /* A Bison parser, made by GNU Bison 3.7.5. */
2 :
3 : /* Bison implementation for Yacc-like parsers in C
4 :
5 : Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
6 : Inc.
7 :
8 : This program is free software: you can redistribute it and/or modify
9 : it under the terms of the GNU General Public License as published by
10 : the Free Software Foundation, either version 3 of the License, or
11 : (at your option) any later version.
12 :
13 : This program is distributed in the hope that it will be useful,
14 : but WITHOUT ANY WARRANTY; without even the implied warranty of
15 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 : GNU General Public License for more details.
17 :
18 : You should have received a copy of the GNU General Public License
19 : along with this program. If not, see <http://www.gnu.org/licenses/>. */
20 :
21 : /* As a special exception, you may create a larger work that contains
22 : part or all of the Bison parser skeleton and distribute that work
23 : under terms of your choice, so long as that work isn't itself a
24 : parser generator using the skeleton or a modified version thereof
25 : as a parser skeleton. Alternatively, if you modify or redistribute
26 : the parser skeleton itself, you may (at your option) remove this
27 : special exception, which will cause the skeleton and the resulting
28 : Bison output files to be licensed under the GNU General Public
29 : License without this special exception.
30 :
31 : This special exception was added by the Free Software Foundation in
32 : version 2.2 of Bison. */
33 :
34 : /* C LALR(1) parser skeleton written by Richard Stallman, by
35 : simplifying the original so-called "semantic" parser. */
36 :
37 : /* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
38 : especially those whose name start with YY_ or yy_. They are
39 : private implementation details that can be changed or removed. */
40 :
41 : /* All symbols defined below should begin with yy or YY, to avoid
42 : infringing on user name space. This should be done even for local
43 : variables, as they might otherwise be expanded by user macros.
44 : There are some unavoidable exceptions within include files to
45 : define necessary library symbols; they are noted "INFRINGES ON
46 : USER NAME SPACE" below. */
47 :
48 : /* Identify Bison output, and Bison version. */
49 : #define YYBISON 30705
50 :
51 : /* Bison version string. */
52 : #define YYBISON_VERSION "3.7.5"
53 :
54 : /* Skeleton name. */
55 : #define YYSKELETON_NAME "yacc.c"
56 :
57 : /* Pure parsers. */
58 : #define YYPURE 0
59 :
60 : /* Push parsers. */
61 : #define YYPUSH 0
62 :
63 : /* Pull parsers. */
64 : #define YYPULL 1
65 :
66 :
67 :
68 :
69 : /* First part of user prologue. */
70 : #line 19 "../src/preproc/pic/pic.ypp"
71 :
72 : #ifdef HAVE_CONFIG_H
73 : #include <config.h>
74 : #endif
75 :
76 : #include <assert.h>
77 : #include <errno.h> // EDOM, ERANGE, errno
78 : #include <math.h> // atan2(), cos(), floor(), fmod(), log10(), pow(),
79 : // sin(), sqrt()
80 : #include <stdcountof.h>
81 : #include <stdio.h> // fflush(), fprintf(), snprintf(), sprintf(), stderr
82 : #include <stdlib.h> // rand(), srand(), system()
83 : #include <string.h> // strcat(), strchr(), strcmp(), strcpy(), strlen()
84 :
85 : #ifdef NEED_DECLARATION_RAND
86 : #undef rand
87 : extern "C" {
88 : int rand();
89 : }
90 : #endif /* NEED_DECLARATION_RAND */
91 :
92 : #ifdef NEED_DECLARATION_SRAND
93 : #undef srand
94 : extern "C" {
95 : #ifdef RET_TYPE_SRAND_IS_VOID
96 : void srand(unsigned int);
97 : #else
98 : int srand(unsigned int);
99 : #endif
100 : }
101 : #endif /* NEED_DECLARATION_SRAND */
102 :
103 : #include "pic.h"
104 : #include "ptable.h"
105 : #include "object.h"
106 :
107 : extern int delim_flag;
108 : extern void copy_rest_thru(const char *, const char *);
109 : extern void copy_file_thru(const char *, const char *, const char *);
110 : extern void push_body(const char *);
111 : extern void do_for(char *var, double from, double to,
112 : int by_is_multiplicative, double by, char *body);
113 : extern void do_lookahead();
114 :
115 : /* Maximum number of characters produced by printf("%g") */
116 : #define GDIGITS 14
117 :
118 : int yylex();
119 : void yyerror(const char *);
120 :
121 : void reset(const char *nm);
122 : void reset_all();
123 :
124 : place *lookup_label(const char *);
125 : void define_label(const char *label, const place *pl);
126 :
127 : direction current_direction;
128 : position current_position;
129 :
130 : implement_ptable(place)
131 :
132 : PTABLE(place) top_table;
133 :
134 : PTABLE(place) *current_table = &top_table;
135 : saved_state *current_saved_state = 0 /* nullptr */;
136 :
137 : object_list olist;
138 :
139 : const char *ordinal_postfix(int n);
140 : const char *object_type_name(object_type type);
141 : char *format_number(const char *fmt, double n);
142 : char *do_sprintf(const char *fmt, const double *v, int nv);
143 :
144 :
145 : #line 146 "src/preproc/pic/pic.cpp"
146 :
147 : # ifndef YY_CAST
148 : # ifdef __cplusplus
149 : # define YY_CAST(Type, Val) static_cast<Type> (Val)
150 : # define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
151 : # else
152 : # define YY_CAST(Type, Val) ((Type) (Val))
153 : # define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
154 : # endif
155 : # endif
156 : # ifndef YY_NULLPTR
157 : # if defined __cplusplus
158 : # if 201103L <= __cplusplus
159 : # define YY_NULLPTR nullptr
160 : # else
161 : # define YY_NULLPTR 0
162 : # endif
163 : # else
164 : # define YY_NULLPTR ((void*)0)
165 : # endif
166 : # endif
167 :
168 : /* Use api.header.include to #include this header
169 : instead of duplicating it here. */
170 : #ifndef YY_YY_SRC_PREPROC_PIC_PIC_HPP_INCLUDED
171 : # define YY_YY_SRC_PREPROC_PIC_PIC_HPP_INCLUDED
172 : /* Debug traces. */
173 : #ifndef YYDEBUG
174 : # define YYDEBUG 0
175 : #endif
176 : #if YYDEBUG
177 : extern int yydebug;
178 : #endif
179 :
180 : /* Token kinds. */
181 : #ifndef YYTOKENTYPE
182 : # define YYTOKENTYPE
183 : enum yytokentype
184 : {
185 : YYEMPTY = -2,
186 : YYEOF = 0, /* "end of file" */
187 : YYerror = 256, /* error */
188 : YYUNDEF = 257, /* "invalid token" */
189 : LABEL = 258, /* LABEL */
190 : VARIABLE = 259, /* VARIABLE */
191 : NUMBER = 260, /* NUMBER */
192 : TEXT = 261, /* TEXT */
193 : COMMAND_LINE = 262, /* COMMAND_LINE */
194 : DELIMITED = 263, /* DELIMITED */
195 : ORDINAL = 264, /* ORDINAL */
196 : TH = 265, /* TH */
197 : LEFT_ARROW_HEAD = 266, /* LEFT_ARROW_HEAD */
198 : RIGHT_ARROW_HEAD = 267, /* RIGHT_ARROW_HEAD */
199 : DOUBLE_ARROW_HEAD = 268, /* DOUBLE_ARROW_HEAD */
200 : LAST = 269, /* LAST */
201 : BOX = 270, /* BOX */
202 : CIRCLE = 271, /* CIRCLE */
203 : ELLIPSE = 272, /* ELLIPSE */
204 : ARC = 273, /* ARC */
205 : LINE = 274, /* LINE */
206 : POLYGON = 275, /* POLYGON */
207 : ARROW = 276, /* ARROW */
208 : MOVE = 277, /* MOVE */
209 : SPLINE = 278, /* SPLINE */
210 : HEIGHT = 279, /* HEIGHT */
211 : RADIUS = 280, /* RADIUS */
212 : FIGNAME = 281, /* FIGNAME */
213 : WIDTH = 282, /* WIDTH */
214 : DIAMETER = 283, /* DIAMETER */
215 : UP = 284, /* UP */
216 : DOWN = 285, /* DOWN */
217 : RIGHT = 286, /* RIGHT */
218 : LEFT = 287, /* LEFT */
219 : FROM = 288, /* FROM */
220 : TO = 289, /* TO */
221 : AT = 290, /* AT */
222 : WITH = 291, /* WITH */
223 : BY = 292, /* BY */
224 : THEN = 293, /* THEN */
225 : SOLID = 294, /* SOLID */
226 : DOTTED = 295, /* DOTTED */
227 : DASHED = 296, /* DASHED */
228 : CHOP = 297, /* CHOP */
229 : SAME = 298, /* SAME */
230 : INVISIBLE = 299, /* INVISIBLE */
231 : LJUST = 300, /* LJUST */
232 : RJUST = 301, /* RJUST */
233 : ABOVE = 302, /* ABOVE */
234 : BELOW = 303, /* BELOW */
235 : OF = 304, /* OF */
236 : THE = 305, /* THE */
237 : WAY = 306, /* WAY */
238 : BETWEEN = 307, /* BETWEEN */
239 : AND = 308, /* AND */
240 : HERE = 309, /* HERE */
241 : DOT_N = 310, /* DOT_N */
242 : DOT_E = 311, /* DOT_E */
243 : DOT_W = 312, /* DOT_W */
244 : DOT_S = 313, /* DOT_S */
245 : DOT_NE = 314, /* DOT_NE */
246 : DOT_SE = 315, /* DOT_SE */
247 : DOT_NW = 316, /* DOT_NW */
248 : DOT_SW = 317, /* DOT_SW */
249 : DOT_C = 318, /* DOT_C */
250 : DOT_MID = 319, /* DOT_MID */
251 : DOT_V = 320, /* DOT_V */
252 : DOT_START = 321, /* DOT_START */
253 : DOT_END = 322, /* DOT_END */
254 : DOT_X = 323, /* DOT_X */
255 : DOT_Y = 324, /* DOT_Y */
256 : DOT_HT = 325, /* DOT_HT */
257 : DOT_WID = 326, /* DOT_WID */
258 : DOT_RAD = 327, /* DOT_RAD */
259 : SIN = 328, /* SIN */
260 : COS = 329, /* COS */
261 : ATAN2 = 330, /* ATAN2 */
262 : LOG = 331, /* LOG */
263 : EXP = 332, /* EXP */
264 : SQRT = 333, /* SQRT */
265 : K_MAX = 334, /* K_MAX */
266 : K_MIN = 335, /* K_MIN */
267 : INT = 336, /* INT */
268 : RAND = 337, /* RAND */
269 : SRAND = 338, /* SRAND */
270 : COPY = 339, /* COPY */
271 : THRU = 340, /* THRU */
272 : TOP = 341, /* TOP */
273 : BOTTOM = 342, /* BOTTOM */
274 : UPPER = 343, /* UPPER */
275 : LOWER = 344, /* LOWER */
276 : SH = 345, /* SH */
277 : PRINT = 346, /* PRINT */
278 : CW = 347, /* CW */
279 : CCW = 348, /* CCW */
280 : FOR = 349, /* FOR */
281 : DO = 350, /* DO */
282 : IF = 351, /* IF */
283 : ELSE = 352, /* ELSE */
284 : ANDAND = 353, /* ANDAND */
285 : OROR = 354, /* OROR */
286 : NOTEQUAL = 355, /* NOTEQUAL */
287 : EQUALEQUAL = 356, /* EQUALEQUAL */
288 : LESSEQUAL = 357, /* LESSEQUAL */
289 : GREATEREQUAL = 358, /* GREATEREQUAL */
290 : LEFT_CORNER = 359, /* LEFT_CORNER */
291 : RIGHT_CORNER = 360, /* RIGHT_CORNER */
292 : NORTH = 361, /* NORTH */
293 : SOUTH = 362, /* SOUTH */
294 : EAST = 363, /* EAST */
295 : WEST = 364, /* WEST */
296 : CENTER = 365, /* CENTER */
297 : END = 366, /* END */
298 : START = 367, /* START */
299 : RESET = 368, /* RESET */
300 : UNTIL = 369, /* UNTIL */
301 : PLOT = 370, /* PLOT */
302 : THICKNESS = 371, /* THICKNESS */
303 : FILL = 372, /* FILL */
304 : COLORED = 373, /* COLORED */
305 : OUTLINED = 374, /* OUTLINED */
306 : SHADED = 375, /* SHADED */
307 : XSLANTED = 376, /* XSLANTED */
308 : YSLANTED = 377, /* YSLANTED */
309 : ALIGNED = 378, /* ALIGNED */
310 : SPRINTF = 379, /* SPRINTF */
311 : COMMAND = 380, /* COMMAND */
312 : DEFINE = 381, /* DEFINE */
313 : UNDEF = 382 /* UNDEF */
314 : };
315 : typedef enum yytokentype yytoken_kind_t;
316 : #endif
317 : /* Token kinds. */
318 : #define YYEMPTY -2
319 : #define YYEOF 0
320 : #define YYerror 256
321 : #define YYUNDEF 257
322 : #define LABEL 258
323 : #define VARIABLE 259
324 : #define NUMBER 260
325 : #define TEXT 261
326 : #define COMMAND_LINE 262
327 : #define DELIMITED 263
328 : #define ORDINAL 264
329 : #define TH 265
330 : #define LEFT_ARROW_HEAD 266
331 : #define RIGHT_ARROW_HEAD 267
332 : #define DOUBLE_ARROW_HEAD 268
333 : #define LAST 269
334 : #define BOX 270
335 : #define CIRCLE 271
336 : #define ELLIPSE 272
337 : #define ARC 273
338 : #define LINE 274
339 : #define POLYGON 275
340 : #define ARROW 276
341 : #define MOVE 277
342 : #define SPLINE 278
343 : #define HEIGHT 279
344 : #define RADIUS 280
345 : #define FIGNAME 281
346 : #define WIDTH 282
347 : #define DIAMETER 283
348 : #define UP 284
349 : #define DOWN 285
350 : #define RIGHT 286
351 : #define LEFT 287
352 : #define FROM 288
353 : #define TO 289
354 : #define AT 290
355 : #define WITH 291
356 : #define BY 292
357 : #define THEN 293
358 : #define SOLID 294
359 : #define DOTTED 295
360 : #define DASHED 296
361 : #define CHOP 297
362 : #define SAME 298
363 : #define INVISIBLE 299
364 : #define LJUST 300
365 : #define RJUST 301
366 : #define ABOVE 302
367 : #define BELOW 303
368 : #define OF 304
369 : #define THE 305
370 : #define WAY 306
371 : #define BETWEEN 307
372 : #define AND 308
373 : #define HERE 309
374 : #define DOT_N 310
375 : #define DOT_E 311
376 : #define DOT_W 312
377 : #define DOT_S 313
378 : #define DOT_NE 314
379 : #define DOT_SE 315
380 : #define DOT_NW 316
381 : #define DOT_SW 317
382 : #define DOT_C 318
383 : #define DOT_MID 319
384 : #define DOT_V 320
385 : #define DOT_START 321
386 : #define DOT_END 322
387 : #define DOT_X 323
388 : #define DOT_Y 324
389 : #define DOT_HT 325
390 : #define DOT_WID 326
391 : #define DOT_RAD 327
392 : #define SIN 328
393 : #define COS 329
394 : #define ATAN2 330
395 : #define LOG 331
396 : #define EXP 332
397 : #define SQRT 333
398 : #define K_MAX 334
399 : #define K_MIN 335
400 : #define INT 336
401 : #define RAND 337
402 : #define SRAND 338
403 : #define COPY 339
404 : #define THRU 340
405 : #define TOP 341
406 : #define BOTTOM 342
407 : #define UPPER 343
408 : #define LOWER 344
409 : #define SH 345
410 : #define PRINT 346
411 : #define CW 347
412 : #define CCW 348
413 : #define FOR 349
414 : #define DO 350
415 : #define IF 351
416 : #define ELSE 352
417 : #define ANDAND 353
418 : #define OROR 354
419 : #define NOTEQUAL 355
420 : #define EQUALEQUAL 356
421 : #define LESSEQUAL 357
422 : #define GREATEREQUAL 358
423 : #define LEFT_CORNER 359
424 : #define RIGHT_CORNER 360
425 : #define NORTH 361
426 : #define SOUTH 362
427 : #define EAST 363
428 : #define WEST 364
429 : #define CENTER 365
430 : #define END 366
431 : #define START 367
432 : #define RESET 368
433 : #define UNTIL 369
434 : #define PLOT 370
435 : #define THICKNESS 371
436 : #define FILL 372
437 : #define COLORED 373
438 : #define OUTLINED 374
439 : #define SHADED 375
440 : #define XSLANTED 376
441 : #define YSLANTED 377
442 : #define ALIGNED 378
443 : #define SPRINTF 379
444 : #define COMMAND 380
445 : #define DEFINE 381
446 : #define UNDEF 382
447 :
448 : /* Value type. */
449 : #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
450 : union YYSTYPE
451 : {
452 : #line 96 "../src/preproc/pic/pic.ypp"
453 :
454 : char *str;
455 : int n;
456 : double x;
457 : struct pair_s { double x, y; } pair;
458 : struct if_data_s { double x; char *body; } if_data;
459 : struct lstr_s { char *str; const char *filename; int lineno; } lstr;
460 : struct dv_s { double *v; int nv; int maxv; } dv;
461 : struct by_s { double val; int is_multiplicative; } by;
462 : place pl;
463 : object *obj;
464 : corner crn;
465 : vertex ver;
466 : path *pth;
467 : object_spec *spec;
468 : saved_state *pstate;
469 : graphics_state state;
470 : object_type obtype;
471 :
472 : #line 473 "src/preproc/pic/pic.cpp"
473 :
474 : };
475 : typedef union YYSTYPE YYSTYPE;
476 : # define YYSTYPE_IS_TRIVIAL 1
477 : # define YYSTYPE_IS_DECLARED 1
478 : #endif
479 :
480 :
481 : extern YYSTYPE yylval;
482 :
483 : int yyparse (void);
484 :
485 : #endif /* !YY_YY_SRC_PREPROC_PIC_PIC_HPP_INCLUDED */
486 : /* Symbol kind. */
487 : enum yysymbol_kind_t
488 : {
489 : YYSYMBOL_YYEMPTY = -2,
490 : YYSYMBOL_YYEOF = 0, /* "end of file" */
491 : YYSYMBOL_YYerror = 1, /* error */
492 : YYSYMBOL_YYUNDEF = 2, /* "invalid token" */
493 : YYSYMBOL_LABEL = 3, /* LABEL */
494 : YYSYMBOL_VARIABLE = 4, /* VARIABLE */
495 : YYSYMBOL_NUMBER = 5, /* NUMBER */
496 : YYSYMBOL_TEXT = 6, /* TEXT */
497 : YYSYMBOL_COMMAND_LINE = 7, /* COMMAND_LINE */
498 : YYSYMBOL_DELIMITED = 8, /* DELIMITED */
499 : YYSYMBOL_ORDINAL = 9, /* ORDINAL */
500 : YYSYMBOL_TH = 10, /* TH */
501 : YYSYMBOL_LEFT_ARROW_HEAD = 11, /* LEFT_ARROW_HEAD */
502 : YYSYMBOL_RIGHT_ARROW_HEAD = 12, /* RIGHT_ARROW_HEAD */
503 : YYSYMBOL_DOUBLE_ARROW_HEAD = 13, /* DOUBLE_ARROW_HEAD */
504 : YYSYMBOL_LAST = 14, /* LAST */
505 : YYSYMBOL_BOX = 15, /* BOX */
506 : YYSYMBOL_CIRCLE = 16, /* CIRCLE */
507 : YYSYMBOL_ELLIPSE = 17, /* ELLIPSE */
508 : YYSYMBOL_ARC = 18, /* ARC */
509 : YYSYMBOL_LINE = 19, /* LINE */
510 : YYSYMBOL_POLYGON = 20, /* POLYGON */
511 : YYSYMBOL_ARROW = 21, /* ARROW */
512 : YYSYMBOL_MOVE = 22, /* MOVE */
513 : YYSYMBOL_SPLINE = 23, /* SPLINE */
514 : YYSYMBOL_HEIGHT = 24, /* HEIGHT */
515 : YYSYMBOL_RADIUS = 25, /* RADIUS */
516 : YYSYMBOL_FIGNAME = 26, /* FIGNAME */
517 : YYSYMBOL_WIDTH = 27, /* WIDTH */
518 : YYSYMBOL_DIAMETER = 28, /* DIAMETER */
519 : YYSYMBOL_UP = 29, /* UP */
520 : YYSYMBOL_DOWN = 30, /* DOWN */
521 : YYSYMBOL_RIGHT = 31, /* RIGHT */
522 : YYSYMBOL_LEFT = 32, /* LEFT */
523 : YYSYMBOL_FROM = 33, /* FROM */
524 : YYSYMBOL_TO = 34, /* TO */
525 : YYSYMBOL_AT = 35, /* AT */
526 : YYSYMBOL_WITH = 36, /* WITH */
527 : YYSYMBOL_BY = 37, /* BY */
528 : YYSYMBOL_THEN = 38, /* THEN */
529 : YYSYMBOL_SOLID = 39, /* SOLID */
530 : YYSYMBOL_DOTTED = 40, /* DOTTED */
531 : YYSYMBOL_DASHED = 41, /* DASHED */
532 : YYSYMBOL_CHOP = 42, /* CHOP */
533 : YYSYMBOL_SAME = 43, /* SAME */
534 : YYSYMBOL_INVISIBLE = 44, /* INVISIBLE */
535 : YYSYMBOL_LJUST = 45, /* LJUST */
536 : YYSYMBOL_RJUST = 46, /* RJUST */
537 : YYSYMBOL_ABOVE = 47, /* ABOVE */
538 : YYSYMBOL_BELOW = 48, /* BELOW */
539 : YYSYMBOL_OF = 49, /* OF */
540 : YYSYMBOL_THE = 50, /* THE */
541 : YYSYMBOL_WAY = 51, /* WAY */
542 : YYSYMBOL_BETWEEN = 52, /* BETWEEN */
543 : YYSYMBOL_AND = 53, /* AND */
544 : YYSYMBOL_HERE = 54, /* HERE */
545 : YYSYMBOL_DOT_N = 55, /* DOT_N */
546 : YYSYMBOL_DOT_E = 56, /* DOT_E */
547 : YYSYMBOL_DOT_W = 57, /* DOT_W */
548 : YYSYMBOL_DOT_S = 58, /* DOT_S */
549 : YYSYMBOL_DOT_NE = 59, /* DOT_NE */
550 : YYSYMBOL_DOT_SE = 60, /* DOT_SE */
551 : YYSYMBOL_DOT_NW = 61, /* DOT_NW */
552 : YYSYMBOL_DOT_SW = 62, /* DOT_SW */
553 : YYSYMBOL_DOT_C = 63, /* DOT_C */
554 : YYSYMBOL_DOT_MID = 64, /* DOT_MID */
555 : YYSYMBOL_DOT_V = 65, /* DOT_V */
556 : YYSYMBOL_DOT_START = 66, /* DOT_START */
557 : YYSYMBOL_DOT_END = 67, /* DOT_END */
558 : YYSYMBOL_DOT_X = 68, /* DOT_X */
559 : YYSYMBOL_DOT_Y = 69, /* DOT_Y */
560 : YYSYMBOL_DOT_HT = 70, /* DOT_HT */
561 : YYSYMBOL_DOT_WID = 71, /* DOT_WID */
562 : YYSYMBOL_DOT_RAD = 72, /* DOT_RAD */
563 : YYSYMBOL_SIN = 73, /* SIN */
564 : YYSYMBOL_COS = 74, /* COS */
565 : YYSYMBOL_ATAN2 = 75, /* ATAN2 */
566 : YYSYMBOL_LOG = 76, /* LOG */
567 : YYSYMBOL_EXP = 77, /* EXP */
568 : YYSYMBOL_SQRT = 78, /* SQRT */
569 : YYSYMBOL_K_MAX = 79, /* K_MAX */
570 : YYSYMBOL_K_MIN = 80, /* K_MIN */
571 : YYSYMBOL_INT = 81, /* INT */
572 : YYSYMBOL_RAND = 82, /* RAND */
573 : YYSYMBOL_SRAND = 83, /* SRAND */
574 : YYSYMBOL_COPY = 84, /* COPY */
575 : YYSYMBOL_THRU = 85, /* THRU */
576 : YYSYMBOL_TOP = 86, /* TOP */
577 : YYSYMBOL_BOTTOM = 87, /* BOTTOM */
578 : YYSYMBOL_UPPER = 88, /* UPPER */
579 : YYSYMBOL_LOWER = 89, /* LOWER */
580 : YYSYMBOL_SH = 90, /* SH */
581 : YYSYMBOL_PRINT = 91, /* PRINT */
582 : YYSYMBOL_CW = 92, /* CW */
583 : YYSYMBOL_CCW = 93, /* CCW */
584 : YYSYMBOL_FOR = 94, /* FOR */
585 : YYSYMBOL_DO = 95, /* DO */
586 : YYSYMBOL_IF = 96, /* IF */
587 : YYSYMBOL_ELSE = 97, /* ELSE */
588 : YYSYMBOL_ANDAND = 98, /* ANDAND */
589 : YYSYMBOL_OROR = 99, /* OROR */
590 : YYSYMBOL_NOTEQUAL = 100, /* NOTEQUAL */
591 : YYSYMBOL_EQUALEQUAL = 101, /* EQUALEQUAL */
592 : YYSYMBOL_LESSEQUAL = 102, /* LESSEQUAL */
593 : YYSYMBOL_GREATEREQUAL = 103, /* GREATEREQUAL */
594 : YYSYMBOL_LEFT_CORNER = 104, /* LEFT_CORNER */
595 : YYSYMBOL_RIGHT_CORNER = 105, /* RIGHT_CORNER */
596 : YYSYMBOL_NORTH = 106, /* NORTH */
597 : YYSYMBOL_SOUTH = 107, /* SOUTH */
598 : YYSYMBOL_EAST = 108, /* EAST */
599 : YYSYMBOL_WEST = 109, /* WEST */
600 : YYSYMBOL_CENTER = 110, /* CENTER */
601 : YYSYMBOL_END = 111, /* END */
602 : YYSYMBOL_START = 112, /* START */
603 : YYSYMBOL_RESET = 113, /* RESET */
604 : YYSYMBOL_UNTIL = 114, /* UNTIL */
605 : YYSYMBOL_PLOT = 115, /* PLOT */
606 : YYSYMBOL_THICKNESS = 116, /* THICKNESS */
607 : YYSYMBOL_FILL = 117, /* FILL */
608 : YYSYMBOL_COLORED = 118, /* COLORED */
609 : YYSYMBOL_OUTLINED = 119, /* OUTLINED */
610 : YYSYMBOL_SHADED = 120, /* SHADED */
611 : YYSYMBOL_XSLANTED = 121, /* XSLANTED */
612 : YYSYMBOL_YSLANTED = 122, /* YSLANTED */
613 : YYSYMBOL_ALIGNED = 123, /* ALIGNED */
614 : YYSYMBOL_SPRINTF = 124, /* SPRINTF */
615 : YYSYMBOL_COMMAND = 125, /* COMMAND */
616 : YYSYMBOL_DEFINE = 126, /* DEFINE */
617 : YYSYMBOL_UNDEF = 127, /* UNDEF */
618 : YYSYMBOL_128_ = 128, /* '.' */
619 : YYSYMBOL_129_ = 129, /* '(' */
620 : YYSYMBOL_130_ = 130, /* '`' */
621 : YYSYMBOL_131_ = 131, /* '[' */
622 : YYSYMBOL_132_ = 132, /* ',' */
623 : YYSYMBOL_133_ = 133, /* '<' */
624 : YYSYMBOL_134_ = 134, /* '>' */
625 : YYSYMBOL_135_ = 135, /* '+' */
626 : YYSYMBOL_136_ = 136, /* '-' */
627 : YYSYMBOL_137_ = 137, /* '*' */
628 : YYSYMBOL_138_ = 138, /* '/' */
629 : YYSYMBOL_139_ = 139, /* '%' */
630 : YYSYMBOL_140_ = 140, /* '!' */
631 : YYSYMBOL_141_ = 141, /* '^' */
632 : YYSYMBOL_142_ = 142, /* ';' */
633 : YYSYMBOL_143_ = 143, /* '=' */
634 : YYSYMBOL_144_ = 144, /* ':' */
635 : YYSYMBOL_145_ = 145, /* '{' */
636 : YYSYMBOL_146_ = 146, /* '}' */
637 : YYSYMBOL_147_ = 147, /* ']' */
638 : YYSYMBOL_148_ = 148, /* ')' */
639 : YYSYMBOL_149_ = 149, /* '\'' */
640 : YYSYMBOL_YYACCEPT = 150, /* $accept */
641 : YYSYMBOL_top = 151, /* top */
642 : YYSYMBOL_element_list = 152, /* element_list */
643 : YYSYMBOL_middle_element_list = 153, /* middle_element_list */
644 : YYSYMBOL_optional_separator = 154, /* optional_separator */
645 : YYSYMBOL_separator = 155, /* separator */
646 : YYSYMBOL_placeless_element = 156, /* placeless_element */
647 : YYSYMBOL_157_1 = 157, /* $@1 */
648 : YYSYMBOL_158_2 = 158, /* $@2 */
649 : YYSYMBOL_159_3 = 159, /* $@3 */
650 : YYSYMBOL_160_4 = 160, /* $@4 */
651 : YYSYMBOL_161_5 = 161, /* $@5 */
652 : YYSYMBOL_162_6 = 162, /* $@6 */
653 : YYSYMBOL_163_7 = 163, /* $@7 */
654 : YYSYMBOL_macro_name = 164, /* macro_name */
655 : YYSYMBOL_reset_variables = 165, /* reset_variables */
656 : YYSYMBOL_print_args = 166, /* print_args */
657 : YYSYMBOL_print_arg = 167, /* print_arg */
658 : YYSYMBOL_simple_if = 168, /* simple_if */
659 : YYSYMBOL_169_8 = 169, /* $@8 */
660 : YYSYMBOL_until = 170, /* until */
661 : YYSYMBOL_any_expr = 171, /* any_expr */
662 : YYSYMBOL_text_expr = 172, /* text_expr */
663 : YYSYMBOL_optional_by = 173, /* optional_by */
664 : YYSYMBOL_element = 174, /* element */
665 : YYSYMBOL_175_9 = 175, /* @9 */
666 : YYSYMBOL_176_10 = 176, /* $@10 */
667 : YYSYMBOL_optional_element = 177, /* optional_element */
668 : YYSYMBOL_object_spec = 178, /* object_spec */
669 : YYSYMBOL_179_11 = 179, /* @11 */
670 : YYSYMBOL_text = 180, /* text */
671 : YYSYMBOL_sprintf_args = 181, /* sprintf_args */
672 : YYSYMBOL_position = 182, /* position */
673 : YYSYMBOL_position_not_place = 183, /* position_not_place */
674 : YYSYMBOL_between = 184, /* between */
675 : YYSYMBOL_expr_pair = 185, /* expr_pair */
676 : YYSYMBOL_place = 186, /* place */
677 : YYSYMBOL_label = 187, /* label */
678 : YYSYMBOL_ordinal = 188, /* ordinal */
679 : YYSYMBOL_optional_ordinal_last = 189, /* optional_ordinal_last */
680 : YYSYMBOL_nth_primitive = 190, /* nth_primitive */
681 : YYSYMBOL_object_type = 191, /* object_type */
682 : YYSYMBOL_label_path = 192, /* label_path */
683 : YYSYMBOL_relative_path = 193, /* relative_path */
684 : YYSYMBOL_path = 194, /* path */
685 : YYSYMBOL_corner = 195, /* corner */
686 : YYSYMBOL_vertex = 196, /* vertex */
687 : YYSYMBOL_expr = 197, /* expr */
688 : YYSYMBOL_expr_lower_than = 198, /* expr_lower_than */
689 : YYSYMBOL_expr_not_lower_than = 199 /* expr_not_lower_than */
690 : };
691 : typedef enum yysymbol_kind_t yysymbol_kind_t;
692 :
693 :
694 :
695 :
696 : #ifdef short
697 : # undef short
698 : #endif
699 :
700 : /* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
701 : <limits.h> and (if available) <stdint.h> are included
702 : so that the code can choose integer types of a good width. */
703 :
704 : #ifndef __PTRDIFF_MAX__
705 : # include <limits.h> /* INFRINGES ON USER NAME SPACE */
706 : # if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
707 : # include <stdint.h> /* INFRINGES ON USER NAME SPACE */
708 : # define YY_STDINT_H
709 : # endif
710 : #endif
711 :
712 : /* Narrow types that promote to a signed type and that can represent a
713 : signed or unsigned integer of at least N bits. In tables they can
714 : save space and decrease cache pressure. Promoting to a signed type
715 : helps avoid bugs in integer arithmetic. */
716 :
717 : #ifdef __INT_LEAST8_MAX__
718 : typedef __INT_LEAST8_TYPE__ yytype_int8;
719 : #elif defined YY_STDINT_H
720 : typedef int_least8_t yytype_int8;
721 : #else
722 : typedef signed char yytype_int8;
723 : #endif
724 :
725 : #ifdef __INT_LEAST16_MAX__
726 : typedef __INT_LEAST16_TYPE__ yytype_int16;
727 : #elif defined YY_STDINT_H
728 : typedef int_least16_t yytype_int16;
729 : #else
730 : typedef short yytype_int16;
731 : #endif
732 :
733 : /* Work around bug in HP-UX 11.23, which defines these macros
734 : incorrectly for preprocessor constants. This workaround can likely
735 : be removed in 2023, as HPE has promised support for HP-UX 11.23
736 : (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
737 : <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>. */
738 : #ifdef __hpux
739 : # undef UINT_LEAST8_MAX
740 : # undef UINT_LEAST16_MAX
741 : # define UINT_LEAST8_MAX 255
742 : # define UINT_LEAST16_MAX 65535
743 : #endif
744 :
745 : #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
746 : typedef __UINT_LEAST8_TYPE__ yytype_uint8;
747 : #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
748 : && UINT_LEAST8_MAX <= INT_MAX)
749 : typedef uint_least8_t yytype_uint8;
750 : #elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
751 : typedef unsigned char yytype_uint8;
752 : #else
753 : typedef short yytype_uint8;
754 : #endif
755 :
756 : #if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
757 : typedef __UINT_LEAST16_TYPE__ yytype_uint16;
758 : #elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
759 : && UINT_LEAST16_MAX <= INT_MAX)
760 : typedef uint_least16_t yytype_uint16;
761 : #elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
762 : typedef unsigned short yytype_uint16;
763 : #else
764 : typedef int yytype_uint16;
765 : #endif
766 :
767 : #ifndef YYPTRDIFF_T
768 : # if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
769 : # define YYPTRDIFF_T __PTRDIFF_TYPE__
770 : # define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
771 : # elif defined PTRDIFF_MAX
772 : # ifndef ptrdiff_t
773 : # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
774 : # endif
775 : # define YYPTRDIFF_T ptrdiff_t
776 : # define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
777 : # else
778 : # define YYPTRDIFF_T long
779 : # define YYPTRDIFF_MAXIMUM LONG_MAX
780 : # endif
781 : #endif
782 :
783 : #ifndef YYSIZE_T
784 : # ifdef __SIZE_TYPE__
785 : # define YYSIZE_T __SIZE_TYPE__
786 : # elif defined size_t
787 : # define YYSIZE_T size_t
788 : # elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
789 : # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
790 : # define YYSIZE_T size_t
791 : # else
792 : # define YYSIZE_T unsigned
793 : # endif
794 : #endif
795 :
796 : #define YYSIZE_MAXIMUM \
797 : YY_CAST (YYPTRDIFF_T, \
798 : (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \
799 : ? YYPTRDIFF_MAXIMUM \
800 : : YY_CAST (YYSIZE_T, -1)))
801 :
802 : #define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
803 :
804 :
805 : /* Stored state numbers (used for stacks). */
806 : typedef yytype_int16 yy_state_t;
807 :
808 : /* State numbers in computations. */
809 : typedef int yy_state_fast_t;
810 :
811 : #ifndef YY_
812 : # if defined YYENABLE_NLS && YYENABLE_NLS
813 : # if ENABLE_NLS
814 : # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
815 : # define YY_(Msgid) dgettext ("bison-runtime", Msgid)
816 : # endif
817 : # endif
818 : # ifndef YY_
819 : # define YY_(Msgid) Msgid
820 : # endif
821 : #endif
822 :
823 :
824 : #ifndef YY_ATTRIBUTE_PURE
825 : # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
826 : # define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
827 : # else
828 : # define YY_ATTRIBUTE_PURE
829 : # endif
830 : #endif
831 :
832 : #ifndef YY_ATTRIBUTE_UNUSED
833 : # if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
834 : # define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
835 : # else
836 : # define YY_ATTRIBUTE_UNUSED
837 : # endif
838 : #endif
839 :
840 : /* Suppress unused-variable warnings by "using" E. */
841 : #if ! defined lint || defined __GNUC__
842 : # define YY_USE(E) ((void) (E))
843 : #else
844 : # define YY_USE(E) /* empty */
845 : #endif
846 :
847 : #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
848 : /* Suppress an incorrect diagnostic about yylval being uninitialized. */
849 : # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
850 : _Pragma ("GCC diagnostic push") \
851 : _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
852 : _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
853 : # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
854 : _Pragma ("GCC diagnostic pop")
855 : #else
856 : # define YY_INITIAL_VALUE(Value) Value
857 : #endif
858 : #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
859 : # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
860 : # define YY_IGNORE_MAYBE_UNINITIALIZED_END
861 : #endif
862 : #ifndef YY_INITIAL_VALUE
863 : # define YY_INITIAL_VALUE(Value) /* Nothing. */
864 : #endif
865 :
866 : #if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
867 : # define YY_IGNORE_USELESS_CAST_BEGIN \
868 : _Pragma ("GCC diagnostic push") \
869 : _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
870 : # define YY_IGNORE_USELESS_CAST_END \
871 : _Pragma ("GCC diagnostic pop")
872 : #endif
873 : #ifndef YY_IGNORE_USELESS_CAST_BEGIN
874 : # define YY_IGNORE_USELESS_CAST_BEGIN
875 : # define YY_IGNORE_USELESS_CAST_END
876 : #endif
877 :
878 :
879 : #define YY_ASSERT(E) ((void) (0 && (E)))
880 :
881 : #if !defined yyoverflow
882 :
883 : /* The parser invokes alloca or malloc; define the necessary symbols. */
884 :
885 : # ifdef YYSTACK_USE_ALLOCA
886 : # if YYSTACK_USE_ALLOCA
887 : # ifdef __GNUC__
888 : # define YYSTACK_ALLOC __builtin_alloca
889 : # elif defined __BUILTIN_VA_ARG_INCR
890 : # include <alloca.h> /* INFRINGES ON USER NAME SPACE */
891 : # elif defined _AIX
892 : # define YYSTACK_ALLOC __alloca
893 : # elif defined _MSC_VER
894 : # include <malloc.h> /* INFRINGES ON USER NAME SPACE */
895 : # define alloca _alloca
896 : # else
897 : # define YYSTACK_ALLOC alloca
898 : # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
899 : # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
900 : /* Use EXIT_SUCCESS as a witness for stdlib.h. */
901 : # ifndef EXIT_SUCCESS
902 : # define EXIT_SUCCESS 0
903 : # endif
904 : # endif
905 : # endif
906 : # endif
907 : # endif
908 :
909 : # ifdef YYSTACK_ALLOC
910 : /* Pacify GCC's 'empty if-body' warning. */
911 : # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
912 : # ifndef YYSTACK_ALLOC_MAXIMUM
913 : /* The OS might guarantee only one guard page at the bottom of the stack,
914 : and a page size can be as small as 4096 bytes. So we cannot safely
915 : invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
916 : to allow for a few compiler-allocated temporary stack slots. */
917 : # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
918 : # endif
919 : # else
920 : # define YYSTACK_ALLOC YYMALLOC
921 : # define YYSTACK_FREE YYFREE
922 : # ifndef YYSTACK_ALLOC_MAXIMUM
923 : # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
924 : # endif
925 : # if (defined __cplusplus && ! defined EXIT_SUCCESS \
926 : && ! ((defined YYMALLOC || defined malloc) \
927 : && (defined YYFREE || defined free)))
928 : # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
929 : # ifndef EXIT_SUCCESS
930 : # define EXIT_SUCCESS 0
931 : # endif
932 : # endif
933 : # ifndef YYMALLOC
934 : # define YYMALLOC malloc
935 : # if ! defined malloc && ! defined EXIT_SUCCESS
936 : void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
937 : # endif
938 : # endif
939 : # ifndef YYFREE
940 : # define YYFREE free
941 : # if ! defined free && ! defined EXIT_SUCCESS
942 : void free (void *); /* INFRINGES ON USER NAME SPACE */
943 : # endif
944 : # endif
945 : # endif
946 : #endif /* !defined yyoverflow */
947 :
948 : #if (! defined yyoverflow \
949 : && (! defined __cplusplus \
950 : || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
951 :
952 : /* A type that is properly aligned for any stack member. */
953 : union yyalloc
954 : {
955 : yy_state_t yyss_alloc;
956 : YYSTYPE yyvs_alloc;
957 : };
958 :
959 : /* The size of the maximum gap between one aligned stack and the next. */
960 : # define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
961 :
962 : /* The size of an array large to enough to hold all stacks, each with
963 : N elements. */
964 : # define YYSTACK_BYTES(N) \
965 : ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
966 : + YYSTACK_GAP_MAXIMUM)
967 :
968 : # define YYCOPY_NEEDED 1
969 :
970 : /* Relocate STACK from its old location to the new one. The
971 : local variables YYSIZE and YYSTACKSIZE give the old and new number of
972 : elements in the stack, and YYPTR gives the new location of the
973 : stack. Advance YYPTR to a properly aligned location for the next
974 : stack. */
975 : # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
976 : do \
977 : { \
978 : YYPTRDIFF_T yynewbytes; \
979 : YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
980 : Stack = &yyptr->Stack_alloc; \
981 : yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
982 : yyptr += yynewbytes / YYSIZEOF (*yyptr); \
983 : } \
984 : while (0)
985 :
986 : #endif
987 :
988 : #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
989 : /* Copy COUNT objects from SRC to DST. The source and destination do
990 : not overlap. */
991 : # ifndef YYCOPY
992 : # if defined __GNUC__ && 1 < __GNUC__
993 : # define YYCOPY(Dst, Src, Count) \
994 : __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
995 : # else
996 : # define YYCOPY(Dst, Src, Count) \
997 : do \
998 : { \
999 : YYPTRDIFF_T yyi; \
1000 : for (yyi = 0; yyi < (Count); yyi++) \
1001 : (Dst)[yyi] = (Src)[yyi]; \
1002 : } \
1003 : while (0)
1004 : # endif
1005 : # endif
1006 : #endif /* !YYCOPY_NEEDED */
1007 :
1008 : /* YYFINAL -- State number of the termination state. */
1009 : #define YYFINAL 6
1010 : /* YYLAST -- Last index in YYTABLE. */
1011 : #define YYLAST 2745
1012 :
1013 : /* YYNTOKENS -- Number of terminals. */
1014 : #define YYNTOKENS 150
1015 : /* YYNNTS -- Number of nonterminals. */
1016 : #define YYNNTS 50
1017 : /* YYNRULES -- Number of rules. */
1018 : #define YYNRULES 269
1019 : /* YYNSTATES -- Number of states. */
1020 : #define YYNSTATES 471
1021 :
1022 : /* YYMAXUTOK -- Last valid token kind. */
1023 : #define YYMAXUTOK 382
1024 :
1025 :
1026 : /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
1027 : as returned by yylex, with out-of-bounds checking. */
1028 : #define YYTRANSLATE(YYX) \
1029 : (0 <= (YYX) && (YYX) <= YYMAXUTOK \
1030 : ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \
1031 : : YYSYMBOL_YYUNDEF)
1032 :
1033 : /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
1034 : as returned by yylex. */
1035 : static const yytype_uint8 yytranslate[] =
1036 : {
1037 : 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1038 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1039 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1040 : 2, 2, 2, 140, 2, 2, 2, 139, 2, 149,
1041 : 129, 148, 137, 135, 132, 136, 128, 138, 2, 2,
1042 : 2, 2, 2, 2, 2, 2, 2, 2, 144, 142,
1043 : 133, 143, 134, 2, 2, 2, 2, 2, 2, 2,
1044 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1045 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1046 : 2, 131, 2, 147, 141, 2, 130, 2, 2, 2,
1047 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1048 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1049 : 2, 2, 2, 145, 2, 146, 2, 2, 2, 2,
1050 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1051 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1052 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1053 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1054 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1055 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1056 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1057 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1058 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1059 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1060 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1061 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1062 : 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
1063 : 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1064 : 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1065 : 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1066 : 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1067 : 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1068 : 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1069 : 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
1070 : 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
1071 : 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
1072 : 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
1073 : 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
1074 : 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
1075 : 125, 126, 127
1076 : };
1077 :
1078 : #if YYDEBUG
1079 : /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
1080 : static const yytype_int16 yyrline[] =
1081 : {
1082 : 0, 311, 311, 312, 321, 326, 328, 332, 334, 338,
1083 : 339, 343, 351, 356, 368, 370, 372, 374, 376, 381,
1084 : 386, 393, 392, 408, 416, 418, 415, 429, 431, 428,
1085 : 441, 440, 449, 458, 457, 471, 472, 477, 478, 482,
1086 : 487, 492, 500, 502, 521, 528, 530, 541, 540, 552,
1087 : 553, 558, 560, 565, 571, 577, 579, 581, 583, 585,
1088 : 587, 589, 596, 600, 605, 613, 627, 633, 641, 648,
1089 : 654, 647, 663, 673, 674, 679, 681, 683, 685, 690,
1090 : 697, 704, 711, 718, 725, 730, 737, 745, 744, 771,
1091 : 777, 783, 789, 795, 814, 821, 828, 835, 842, 849,
1092 : 856, 863, 870, 877, 892, 904, 910, 918, 927, 934,
1093 : 959, 963, 969, 975, 981, 987, 992, 998, 1004, 1010,
1094 : 1017, 1026, 1033, 1049, 1066, 1071, 1076, 1081, 1086, 1091,
1095 : 1096, 1101, 1109, 1119, 1129, 1139, 1149, 1155, 1163, 1165,
1096 : 1177, 1182, 1204, 1206, 1212, 1221, 1223, 1228, 1233, 1238,
1097 : 1243, 1248, 1253, 1259, 1264, 1272, 1273, 1277, 1282, 1288,
1098 : 1290, 1296, 1303, 1309, 1315, 1322, 1331, 1341, 1343, 1352,
1099 : 1354, 1362, 1364, 1369, 1384, 1402, 1404, 1406, 1408, 1410,
1100 : 1412, 1414, 1416, 1418, 1420, 1425, 1427, 1435, 1439, 1441,
1101 : 1449, 1451, 1457, 1463, 1469, 1475, 1484, 1486, 1488, 1490,
1102 : 1492, 1494, 1496, 1498, 1500, 1502, 1504, 1506, 1508, 1510,
1103 : 1512, 1514, 1516, 1518, 1520, 1522, 1524, 1526, 1528, 1530,
1104 : 1532, 1534, 1536, 1538, 1540, 1542, 1544, 1546, 1551, 1556,
1105 : 1561, 1567, 1576, 1578, 1583, 1588, 1596, 1598, 1605, 1612,
1106 : 1619, 1626, 1633, 1635, 1637, 1639, 1647, 1655, 1668, 1670,
1107 : 1672, 1681, 1690, 1703, 1712, 1721, 1730, 1732, 1734, 1736,
1108 : 1743, 1749, 1754, 1756, 1758, 1760, 1762, 1764, 1766, 1768
1109 : };
1110 : #endif
1111 :
1112 : /** Accessing symbol of state STATE. */
1113 : #define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
1114 :
1115 : #if YYDEBUG || 0
1116 : /* The user-facing name of the symbol whose (internal) number is
1117 : YYSYMBOL. No bounds checking. */
1118 : static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
1119 :
1120 : /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1121 : First, the terminals, then, starting at YYNTOKENS, nonterminals. */
1122 : static const char *const yytname[] =
1123 : {
1124 : "\"end of file\"", "error", "\"invalid token\"", "LABEL", "VARIABLE",
1125 : "NUMBER", "TEXT", "COMMAND_LINE", "DELIMITED", "ORDINAL", "TH",
1126 : "LEFT_ARROW_HEAD", "RIGHT_ARROW_HEAD", "DOUBLE_ARROW_HEAD", "LAST",
1127 : "BOX", "CIRCLE", "ELLIPSE", "ARC", "LINE", "POLYGON", "ARROW", "MOVE",
1128 : "SPLINE", "HEIGHT", "RADIUS", "FIGNAME", "WIDTH", "DIAMETER", "UP",
1129 : "DOWN", "RIGHT", "LEFT", "FROM", "TO", "AT", "WITH", "BY", "THEN",
1130 : "SOLID", "DOTTED", "DASHED", "CHOP", "SAME", "INVISIBLE", "LJUST",
1131 : "RJUST", "ABOVE", "BELOW", "OF", "THE", "WAY", "BETWEEN", "AND", "HERE",
1132 : "DOT_N", "DOT_E", "DOT_W", "DOT_S", "DOT_NE", "DOT_SE", "DOT_NW",
1133 : "DOT_SW", "DOT_C", "DOT_MID", "DOT_V", "DOT_START", "DOT_END", "DOT_X",
1134 : "DOT_Y", "DOT_HT", "DOT_WID", "DOT_RAD", "SIN", "COS", "ATAN2", "LOG",
1135 : "EXP", "SQRT", "K_MAX", "K_MIN", "INT", "RAND", "SRAND", "COPY", "THRU",
1136 : "TOP", "BOTTOM", "UPPER", "LOWER", "SH", "PRINT", "CW", "CCW", "FOR",
1137 : "DO", "IF", "ELSE", "ANDAND", "OROR", "NOTEQUAL", "EQUALEQUAL",
1138 : "LESSEQUAL", "GREATEREQUAL", "LEFT_CORNER", "RIGHT_CORNER", "NORTH",
1139 : "SOUTH", "EAST", "WEST", "CENTER", "END", "START", "RESET", "UNTIL",
1140 : "PLOT", "THICKNESS", "FILL", "COLORED", "OUTLINED", "SHADED", "XSLANTED",
1141 : "YSLANTED", "ALIGNED", "SPRINTF", "COMMAND", "DEFINE", "UNDEF", "'.'",
1142 : "'('", "'`'", "'['", "','", "'<'", "'>'", "'+'", "'-'", "'*'", "'/'",
1143 : "'%'", "'!'", "'^'", "';'", "'='", "':'", "'{'", "'}'", "']'", "')'",
1144 : "'\\''", "$accept", "top", "element_list", "middle_element_list",
1145 : "optional_separator", "separator", "placeless_element", "$@1", "$@2",
1146 : "$@3", "$@4", "$@5", "$@6", "$@7", "macro_name", "reset_variables",
1147 : "print_args", "print_arg", "simple_if", "$@8", "until", "any_expr",
1148 : "text_expr", "optional_by", "element", "@9", "$@10", "optional_element",
1149 : "object_spec", "@11", "text", "sprintf_args", "position",
1150 : "position_not_place", "between", "expr_pair", "place", "label",
1151 : "ordinal", "optional_ordinal_last", "nth_primitive", "object_type",
1152 : "label_path", "relative_path", "path", "corner", "vertex", "expr",
1153 : "expr_lower_than", "expr_not_lower_than", YY_NULLPTR
1154 : };
1155 :
1156 : static const char *
1157 : yysymbol_name (yysymbol_kind_t yysymbol)
1158 : {
1159 : return yytname[yysymbol];
1160 : }
1161 : #endif
1162 :
1163 : #ifdef YYPRINT
1164 : /* YYTOKNUM[NUM] -- (External) token number corresponding to the
1165 : (internal) symbol number NUM (which must be that of a token). */
1166 : static const yytype_int16 yytoknum[] =
1167 : {
1168 : 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
1169 : 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
1170 : 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
1171 : 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
1172 : 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
1173 : 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
1174 : 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
1175 : 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
1176 : 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
1177 : 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
1178 : 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
1179 : 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
1180 : 375, 376, 377, 378, 379, 380, 381, 382, 46, 40,
1181 : 96, 91, 44, 60, 62, 43, 45, 42, 47, 37,
1182 : 33, 94, 59, 61, 58, 123, 125, 93, 41, 39
1183 : };
1184 : #endif
1185 :
1186 : #define YYPACT_NINF (-148)
1187 :
1188 : #define yypact_value_is_default(Yyn) \
1189 : ((Yyn) == YYPACT_NINF)
1190 :
1191 : #define YYTABLE_NINF (-211)
1192 :
1193 : #define yytable_value_is_error(Yyn) \
1194 : 0
1195 :
1196 : /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1197 : STATE-NUM. */
1198 : static const yytype_int16 yypact[] =
1199 : {
1200 : -139, -148, 9, -148, 742, -120, -148, -117, -84, -148,
1201 : -148, -148, -148, -148, -148, -148, -148, -148, -148, -148,
1202 : -108, -148, -148, -148, -148, 5, -148, 1080, 20, 1167,
1203 : 35, 1602, -81, 1080, -148, -148, -139, -148, 8, -40,
1204 : -148, 865, -148, -148, -139, 1167, -78, 138, -18, -148,
1205 : 66, -148, -148, -148, -148, -148, -148, -148, -148, -148,
1206 : -148, -148, -148, -148, -148, -148, -148, -148, 1689, 1776,
1207 : -148, -148, -45, -35, -33, -31, -29, -24, -22, -20,
1208 : 6, 26, 29, -148, -148, 21, 182, -148, -148, -148,
1209 : -148, -148, -148, -148, -148, -148, 1254, 1167, 1602, 1602,
1210 : 1080, -148, -148, 31, -148, -148, 295, 2451, 62, 285,
1211 : -148, 40, 111, 2352, -148, -47, -32, 1167, 1167, 145,
1212 : 48, 74, 295, 2553, -148, -148, 2233, 188, 1080, -139,
1213 : -139, -148, 706, -148, 232, -148, -148, -148, -148, 1602,
1214 : 1602, 1602, 1602, 2213, 2213, 2038, 2126, 1863, 1863, 1863,
1215 : 1428, 1950, -148, -148, 2213, 2213, 2213, -148, -148, -148,
1216 : -148, -148, -148, -148, -148, 1602, 2213, 10, 10, 10,
1217 : 1602, 1602, -148, -148, 2562, 575, -148, 1167, -148, -148,
1218 : -148, -148, 230, -148, 1167, 2562, 1167, 2562, 1167, 1167,
1219 : 1167, 1167, 1167, 1167, 1167, 1167, 1167, 437, 1167, -148,
1220 : -148, -148, -148, -148, -148, -148, -148, 103, 153, 112,
1221 : -51, 2364, 135, 261, 149, 149, -148, 1950, 1950, -148,
1222 : -148, -148, -148, -148, 304, -148, -148, -148, -148, -148,
1223 : -148, -148, -148, -148, -148, -148, -148, 164, -148, -148,
1224 : 52, 186, 52, 268, -148, 1602, 1602, 1602, 1602, 1602,
1225 : 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602,
1226 : 1863, 1863, 1602, -148, 149, -148, 1167, 1167, 10, 10,
1227 : 1167, 1167, -148, -148, 172, 742, 176, -148, -148, 324,
1228 : 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 31, 2352,
1229 : 31, 31, 2464, 308, 308, 343, 993, 31, 2320, -148,
1230 : -148, 40, 111, 1341, -148, 2509, 2562, 2562, 2562, 2562,
1231 : 2562, -148, -148, -148, 2562, 2562, -117, -84, 95, 106,
1232 : -148, 31, 81, 272, -148, 339, -148, 2482, 2491, 200,
1233 : 206, 223, 209, 210, 211, 228, 244, 220, -148, 233,
1234 : 234, -148, 1863, 1950, 1950, -148, -148, 1863, 1863, -148,
1235 : -148, -148, -148, -148, 186, 186, 327, 347, 2577, 419,
1236 : 419, 120, 120, 2562, 120, 120, 143, 143, 149, 149,
1237 : 149, 149, -48, 177, 236, 372, -148, 347, 288, 2604,
1238 : -148, -148, -148, 347, 288, 2604, -119, -148, -148, -148,
1239 : -148, -148, 2333, 2333, -148, 251, 384, -148, 112, 2535,
1240 : -148, 274, -148, -148, -148, -148, 1167, -148, -148, -148,
1241 : 1167, 1167, -148, -148, -148, -73, 241, 242, -43, 217,
1242 : 340, 1863, 1863, 1602, -148, 1602, -148, 742, -148, -148,
1243 : 2333, -148, 274, 385, -148, 245, 249, 252, -148, -148,
1244 : -148, 1863, 1863, -148, 31, -102, 677, 2562, -148, -148,
1245 : 253, -148, -148, -148, -148, -148, 114, 131, -148, 1515,
1246 : 307, -148, -148, 255, 1602, 2562, -148, -148, 2562, 391,
1247 : -148
1248 : };
1249 :
1250 : /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
1251 : Performed when YYTABLE does not specify something else to do. Zero
1252 : means the default is an error. */
1253 : static const yytype_int16 yydefact[] =
1254 : {
1255 : 7, 9, 0, 3, 2, 8, 1, 0, 0, 138,
1256 : 18, 75, 76, 77, 78, 79, 80, 81, 82, 83,
1257 : 0, 14, 15, 17, 16, 0, 21, 0, 0, 0,
1258 : 36, 0, 0, 0, 87, 69, 7, 72, 35, 32,
1259 : 5, 65, 84, 10, 7, 0, 0, 0, 23, 27,
1260 : 0, 166, 235, 236, 169, 171, 210, 209, 165, 196,
1261 : 197, 198, 199, 200, 201, 202, 203, 204, 0, 0,
1262 : 205, 206, 0, 0, 0, 0, 0, 0, 0, 0,
1263 : 0, 0, 0, 207, 208, 0, 0, 215, 216, 221,
1264 : 222, 223, 224, 225, 227, 226, 0, 0, 0, 0,
1265 : 20, 42, 45, 46, 142, 145, 143, 159, 0, 0,
1266 : 167, 0, 0, 44, 232, 233, 0, 0, 0, 0,
1267 : 52, 0, 0, 51, 233, 39, 85, 0, 19, 7,
1268 : 7, 4, 8, 40, 0, 33, 126, 127, 128, 0,
1269 : 0, 0, 0, 94, 96, 98, 100, 0, 0, 0,
1270 : 0, 0, 109, 110, 111, 113, 122, 124, 125, 132,
1271 : 133, 134, 135, 129, 130, 0, 115, 0, 0, 0,
1272 : 0, 0, 137, 131, 93, 0, 12, 0, 38, 37,
1273 : 11, 24, 0, 22, 0, 230, 0, 228, 0, 0,
1274 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 213,
1275 : 211, 217, 219, 214, 212, 218, 220, 0, 0, 145,
1276 : 143, 51, 233, 0, 248, 269, 43, 0, 0, 237,
1277 : 238, 239, 240, 241, 0, 160, 161, 184, 172, 175,
1278 : 176, 177, 178, 179, 180, 181, 182, 0, 173, 174,
1279 : 0, 162, 0, 0, 155, 0, 0, 0, 0, 0,
1280 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1281 : 0, 0, 0, 61, 269, 47, 0, 0, 0, 0,
1282 : 0, 0, 86, 140, 0, 0, 0, 6, 41, 0,
1283 : 89, 90, 91, 92, 95, 97, 99, 101, 102, 0,
1284 : 103, 104, 166, 169, 171, 0, 0, 107, 188, 190,
1285 : 105, 187, 106, 0, 108, 0, 112, 114, 123, 136,
1286 : 116, 120, 121, 119, 117, 118, 166, 235, 210, 209,
1287 : 66, 0, 67, 68, 13, 0, 28, 51, 51, 0,
1288 : 0, 0, 0, 0, 0, 0, 0, 0, 260, 0,
1289 : 0, 249, 0, 0, 0, 158, 144, 0, 0, 170,
1290 : 146, 148, 168, 183, 163, 164, 0, 267, 268, 266,
1291 : 265, 262, 264, 157, 234, 263, 242, 243, 244, 245,
1292 : 246, 247, 0, 0, 0, 0, 55, 56, 58, 59,
1293 : 54, 53, 57, 267, 60, 268, 0, 88, 70, 34,
1294 : 195, 187, 0, 0, 185, 0, 0, 189, 0, 51,
1295 : 25, 49, 231, 229, 250, 251, 0, 253, 254, 255,
1296 : 0, 0, 258, 259, 261, 0, 146, 148, 0, 0,
1297 : 0, 0, 0, 0, 48, 0, 139, 73, 194, 193,
1298 : 0, 186, 49, 0, 29, 0, 0, 0, 150, 147,
1299 : 149, 0, 0, 156, 151, 0, 62, 141, 74, 71,
1300 : 0, 26, 50, 252, 256, 257, 151, 0, 153, 0,
1301 : 0, 191, 152, 153, 0, 63, 30, 154, 64, 0,
1302 : 31
1303 : };
1304 :
1305 : /* YYPGOTO[NTERM-NUM]. */
1306 : static const yytype_int16 yypgoto[] =
1307 : {
1308 : -148, -148, 148, -148, 2, 368, -148, -148, -148, -148,
1309 : -148, -148, -148, -148, -148, -148, 373, -77, -148, -148,
1310 : -23, 11, -90, -148, -131, -148, -148, -148, -148, -148,
1311 : 4, -148, 14, 235, 194, -49, 3, -86, -148, -148,
1312 : -148, -83, -148, -147, -148, -100, -92, -27, -148, 37
1313 : };
1314 :
1315 : /* YYDEFGOTO[NTERM-NUM]. */
1316 : static const yytype_int16 yydefgoto[] =
1317 : {
1318 : 0, 2, 3, 36, 275, 5, 37, 50, 325, 432,
1319 : 182, 401, 469, 279, 180, 38, 100, 101, 39, 375,
1320 : 434, 207, 120, 460, 40, 130, 427, 449, 41, 129,
1321 : 121, 386, 103, 104, 260, 105, 122, 107, 108, 109,
1322 : 110, 238, 298, 299, 300, 111, 112, 123, 114, 124
1323 : };
1324 :
1325 : /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
1326 : positive, shift that token. If negative, reduce the rule whose
1327 : number is the opposite. If YYTABLE_NINF, syntax error. */
1328 : static const yytype_int16 yytable[] =
1329 : {
1330 : 113, 277, 4, 1, 126, 421, 113, 225, 42, 6,
1331 : 441, 48, 133, 425, 174, 226, 9, 219, 220, 221,
1332 : 222, 223, 43, 216, 116, 241, 239, 44, 263, 426,
1333 : 106, 102, 458, 217, 218, 47, 106, 102, 131, 125,
1334 : 119, 185, 187, 51, 320, 173, 175, 209, 127, 54,
1335 : 301, 216, 199, 200, 55, 51, 176, 135, 302, 45,
1336 : 46, 54, 217, 218, 115, 177, 55, 181, 227, 211,
1337 : 115, 214, 215, 113, 183, 438, 228, 229, 230, 231,
1338 : 232, 233, 234, 235, 188, 236, 261, 217, 218, 240,
1339 : 49, 264, 217, 218, 189, -17, 190, 346, 191, 210,
1340 : 192, 113, 304, 106, 102, 193, -16, 194, 213, 195,
1341 : 208, 262, 280, 281, 282, 283, 284, 285, 286, 287,
1342 : 289, 289, 289, 289, 305, 201, 202, 306, 307, 308,
1343 : 272, 106, 102, 212, 32, 196, 42, 115, 309, 310,
1344 : 134, 178, 179, 314, 315, 390, 266, 267, 289, 395,
1345 : 106, 106, 106, 106, 354, 197, 355, 327, 198, 328,
1346 : 242, 288, 290, 291, 297, 115, 217, 218, 350, 351,
1347 : 97, 311, 312, 313, 268, 269, 376, 378, 323, 42,
1348 : 382, 384, 97, 265, 115, 115, 115, 115, 324, 321,
1349 : 305, 305, 391, 237, 273, 213, 301, 213, 397, 329,
1350 : 330, 331, 332, 333, 334, 335, 336, 337, 339, 340,
1351 : 392, 393, 115, 203, 204, 241, -142, -142, 357, 358,
1352 : 359, 360, 361, 362, 363, 364, 365, 366, 367, 368,
1353 : 369, 370, 371, 289, 289, 374, 278, -17, 326, 377,
1354 : 379, -17, -17, 383, 385, 428, 429, 209, -16, 217,
1355 : 218, 341, -16, -16, 398, 254, 255, 256, 257, 258,
1356 : 345, 259, 462, 106, 106, 463, 217, 218, 348, 211,
1357 : 423, 349, 380, 381, 372, 373, 399, 274, 276, 42,
1358 : 256, 257, 258, 450, 259, 342, 205, 206, 343, 344,
1359 : 259, 227, 391, 391, 416, 417, 448, 115, 115, 210,
1360 : 229, 230, 231, 232, 233, 234, 235, 352, 236, 422,
1361 : 208, 353, 217, 218, 224, 289, 305, 305, 356, 387,
1362 : 289, 289, 388, 229, 230, 231, 232, 233, 234, 235,
1363 : 391, 236, 389, 212, 245, 246, 247, 248, 249, 250,
1364 : 219, 220, 221, 222, 223, 106, 394, 400, 404, 442,
1365 : 106, 106, 217, 218, 405, 406, 415, 407, 408, 409,
1366 : 410, 418, 419, 219, 220, 221, 222, 223, 412, 252,
1367 : 253, 254, 255, 256, 257, 258, 411, 259, 420, 115,
1368 : 424, 413, 414, 430, 115, 115, 266, 431, 433, 439,
1369 : 440, 452, 443, 453, 289, 289, 446, 454, 447, 470,
1370 : 455, 461, 466, 467, 132, 347, 128, -143, -143, 451,
1371 : 322, 0, 0, 0, 289, 289, 237, 435, 0, 0,
1372 : 0, 436, 437, 0, 106, 106, 0, 0, 0, 0,
1373 : 0, 42, 465, 0, 0, 444, 445, 468, 0, 237,
1374 : 51, 52, 53, 9, 106, 106, 54, 247, 248, 249,
1375 : 250, 55, 0, 0, 0, 456, 457, 0, 115, 115,
1376 : 0, 0, 0, 0, 0, 0, 0, 0, 56, 57,
1377 : 0, 0, 0, 0, 0, 0, 0, 0, 115, 115,
1378 : 252, 253, 254, 255, 256, 257, 258, 0, 259, 0,
1379 : 0, 58, 59, 60, 61, 62, 63, 64, 65, 66,
1380 : 67, 68, 69, 70, 71, 0, 0, 0, 0, 0,
1381 : 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
1382 : 82, 249, 250, 83, 84, 85, 86, 0, 0, 0,
1383 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1384 : 0, 87, 88, 89, 90, 91, 92, 93, 94, 95,
1385 : 0, 0, 252, 253, 254, 255, 256, 257, 258, 0,
1386 : 259, 32, 0, 0, 0, 0, 117, 97, 0, 0,
1387 : 0, 0, 0, 98, 0, 0, 0, 118, 316, 317,
1388 : 53, 9, 10, 0, 54, 338, 0, 0, 0, 55,
1389 : 11, 12, 13, 14, 15, 16, 17, 18, 19, 0,
1390 : 0, 20, 0, 0, 21, 22, 318, 319, 0, 0,
1391 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1392 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,
1393 : 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
1394 : 69, 70, 71, 0, 0, 0, 0, 0, 72, 73,
1395 : 74, 75, 76, 77, 78, 79, 80, 81, 82, 25,
1396 : 0, 83, 84, 85, 86, 26, 27, 0, 0, 28,
1397 : 0, 29, 0, 0, 0, 0, 0, 0, 0, 87,
1398 : 88, 89, 90, 91, 92, 93, 94, 95, 30, 0,
1399 : 31, 0, 0, 0, 0, 0, 0, 0, 0, 32,
1400 : 33, 0, 0, 0, 96, 97, 34, 0, 0, 7,
1401 : 8, 98, 9, 10, 459, 99, 0, 0, 0, 0,
1402 : 35, 11, 12, 13, 14, 15, 16, 17, 18, 19,
1403 : 0, 0, 20, 0, 0, 21, 22, 23, 24, 0,
1404 : 0, 0, 0, 0, 0, 7, 8, 0, 9, 10,
1405 : 0, 0, 0, 0, 0, 0, 0, 11, 12, 13,
1406 : 14, 15, 16, 17, 18, 19, 0, 0, 20, 0,
1407 : 0, 21, 22, 23, 24, 245, 246, 247, 248, 249,
1408 : 250, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1409 : 25, 0, 0, 0, 0, 0, 26, 27, 0, 0,
1410 : 28, 0, 29, 0, 0, 0, 0, 0, 0, 0,
1411 : 252, 253, 254, 255, 256, 257, 258, 0, 259, 30,
1412 : 0, 31, 0, 0, 0, 0, 25, 0, 0, 0,
1413 : 32, 33, 26, 27, 0, 0, 28, 34, 29, 0,
1414 : 0, 0, 0, 0, 0, 0, 0, 0, 43, 0,
1415 : 0, 35, 0, 0, 0, 30, 0, 31, 0, 0,
1416 : 0, 0, 0, 0, 0, 0, 32, 33, 51, 52,
1417 : 53, 9, 0, 34, 54, 0, 136, 137, 138, 55,
1418 : 0, 0, 0, 0, 0, 0, 0, 35, 0, 139,
1419 : 140, 0, 141, 142, 143, 144, 145, 146, 147, 148,
1420 : 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
1421 : 159, 160, 161, 162, 0, 0, 0, 0, 0, 58,
1422 : 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
1423 : 69, 70, 71, 0, 0, 0, 0, 0, 72, 73,
1424 : 74, 75, 76, 77, 78, 79, 80, 81, 82, 0,
1425 : 0, 83, 84, 85, 86, 0, 0, 163, 164, 0,
1426 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,
1427 : 88, 89, 90, 91, 92, 93, 94, 95, 0, 0,
1428 : 0, 165, 166, 167, 168, 169, 170, 171, 172, 32,
1429 : 0, 0, 0, 0, 117, 97, 51, 52, 53, 9,
1430 : 0, 98, 54, 0, 0, 99, 0, 55, 0, 0,
1431 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1432 : 0, 0, 0, 0, 56, 57, 0, 0, 0, 0,
1433 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1434 : 0, 0, 0, 0, 0, 0, 0, 58, 59, 60,
1435 : 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
1436 : 71, 0, 0, 0, 0, 0, 72, 73, 74, 75,
1437 : 76, 77, 78, 79, 80, 81, 82, 0, 0, 83,
1438 : 84, 85, 86, 51, 52, 53, 9, 0, 0, 54,
1439 : 0, 0, 0, 0, 55, 0, 0, 87, 88, 89,
1440 : 90, 91, 92, 93, 94, 95, 0, 0, 0, 0,
1441 : 0, 56, 57, 0, 0, 0, 0, 32, 0, 0,
1442 : 0, 295, 96, 97, 0, 0, 0, 0, 0, 98,
1443 : 0, 0, 0, 118, 58, 59, 60, 61, 62, 63,
1444 : 64, 65, 66, 67, 68, 69, 70, 71, 0, 0,
1445 : 0, 0, 0, 72, 73, 74, 75, 76, 77, 78,
1446 : 79, 80, 81, 82, 0, 0, 83, 84, 85, 86,
1447 : 51, 52, 53, 9, 0, 0, 54, 0, 0, 0,
1448 : 0, 55, 0, 0, 87, 88, 89, 90, 91, 92,
1449 : 93, 94, 95, 0, 0, 0, 0, 0, 56, 57,
1450 : 0, 0, 0, 0, 32, 0, 0, 0, 0, 96,
1451 : 97, 0, 0, 0, 0, 0, 98, 0, 0, 0,
1452 : 99, 58, 59, 60, 61, 62, 63, 64, 65, 66,
1453 : 67, 68, 69, 70, 71, 0, 0, 0, 0, 0,
1454 : 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
1455 : 82, 0, 0, 83, 84, 85, 86, 51, 52, 53,
1456 : 9, 0, 0, 54, 0, 0, 0, 0, 55, 0,
1457 : 0, 87, 88, 89, 90, 91, 92, 93, 94, 95,
1458 : 0, 0, 0, 0, 0, 56, 57, 0, 0, 0,
1459 : 0, 32, 0, 0, 0, 0, 117, 97, 0, 0,
1460 : 0, 0, 0, 98, 0, 0, 0, 118, 58, 59,
1461 : 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
1462 : 70, 71, 0, 0, 0, 0, 0, 72, 73, 74,
1463 : 75, 76, 77, 78, 79, 80, 81, 82, 0, 0,
1464 : 83, 84, 85, 86, 51, 52, 53, 9, 0, 0,
1465 : 54, 0, 0, 0, 0, 55, 0, 0, 87, 88,
1466 : 89, 90, 91, 92, 93, 94, 95, 0, 0, 0,
1467 : 0, 0, 56, 57, 0, 0, 0, 0, 32, 0,
1468 : 0, 0, 0, 96, 97, 0, 0, 0, 0, 0,
1469 : 98, 0, 0, 0, 118, 58, 59, 60, 61, 62,
1470 : 63, 64, 65, 66, 67, 68, 69, 70, 71, 0,
1471 : 0, 0, 0, 0, 72, 73, 74, 75, 76, 77,
1472 : 78, 79, 80, 81, 82, 0, 0, 83, 84, 85,
1473 : 86, 292, 52, 53, 0, 0, 0, 293, 0, 0,
1474 : 0, 0, 294, 0, 0, 87, 88, 89, 90, 91,
1475 : 92, 93, 94, 95, 0, 0, 0, 0, 0, 56,
1476 : 57, 0, 0, 0, 0, 32, 0, 0, 0, 0,
1477 : 303, 97, 0, 0, 0, 0, 0, 98, 0, 0,
1478 : 0, 118, 58, 59, 60, 61, 62, 63, 64, 65,
1479 : 66, 67, 68, 69, 70, 71, 0, 0, 0, 0,
1480 : 0, 72, 73, 74, 75, 76, 77, 78, 79, 80,
1481 : 81, 82, 0, 0, 83, 84, 85, 86, 51, 52,
1482 : 53, 0, 0, 0, 54, 0, 0, 0, 0, 55,
1483 : 0, 0, 87, 88, 89, 90, 91, 92, 93, 94,
1484 : 95, 0, 0, 0, 0, 0, 56, 57, 0, 0,
1485 : 0, 0, 0, 0, 0, 0, 295, 296, 97, 0,
1486 : 0, 0, 0, 0, 98, 0, 0, 0, 99, 58,
1487 : 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
1488 : 69, 70, 71, 0, 0, 0, 0, 0, 72, 73,
1489 : 74, 75, 76, 77, 78, 79, 80, 81, 82, 0,
1490 : 0, 83, 84, 85, 86, 51, 52, 53, 0, 0,
1491 : 0, 54, 0, 0, 0, 0, 55, 0, 0, 87,
1492 : 88, 89, 90, 91, 92, 93, 94, 95, 0, 0,
1493 : 0, 0, 0, 56, 57, 0, 0, 0, 0, 0,
1494 : 0, 0, 0, 0, 117, 97, 0, 0, 0, 0,
1495 : 0, 98, 464, 0, 0, 99, 58, 59, 60, 61,
1496 : 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
1497 : 0, 0, 0, 0, 0, 72, 73, 74, 75, 76,
1498 : 77, 78, 79, 80, 81, 82, 0, 0, 83, 84,
1499 : 85, 86, 51, 52, 53, 0, 0, 0, 54, 0,
1500 : 0, 0, 0, 55, 0, 0, 87, 88, 89, 90,
1501 : 91, 92, 93, 94, 95, 0, 0, 0, 0, 0,
1502 : 56, 57, 0, 0, 0, 0, 0, 0, 0, 0,
1503 : 0, 117, 97, 0, 0, 0, 0, 0, 98, 0,
1504 : 0, 0, 99, 58, 59, 60, 61, 62, 63, 64,
1505 : 65, 66, 67, 68, 69, 70, 71, 0, 0, 0,
1506 : 0, 0, 72, 73, 74, 75, 76, 77, 78, 79,
1507 : 80, 81, 82, 0, 0, 83, 84, 85, 86, 51,
1508 : 52, 53, 0, 0, 0, 54, 0, 0, 0, 0,
1509 : 55, 0, 0, 87, 88, 89, 90, 91, 92, 93,
1510 : 94, 95, 0, 0, 0, 0, 0, 56, 57, 0,
1511 : 0, 0, 0, 0, 0, 0, 0, 0, 117, 184,
1512 : 0, 0, 0, 0, 0, 98, 0, 0, 0, 99,
1513 : 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
1514 : 68, 69, 70, 71, 0, 0, 0, 0, 0, 72,
1515 : 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
1516 : 0, 0, 83, 84, 85, 86, 51, 52, 53, 0,
1517 : 0, 0, 54, 0, 0, 0, 0, 55, 0, 0,
1518 : 87, 88, 89, 90, 91, 92, 93, 94, 95, 0,
1519 : 0, 0, 0, 0, 56, 57, 0, 0, 0, 0,
1520 : 0, 0, 0, 0, 0, 117, 186, 0, 0, 0,
1521 : 0, 0, 98, 0, 0, 0, 99, 58, 59, 60,
1522 : 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
1523 : 71, 0, 0, 0, 0, 0, 72, 73, 74, 75,
1524 : 76, 77, 78, 79, 80, 81, 82, 0, 0, 83,
1525 : 84, 85, 86, 51, 52, 53, 0, 0, 0, 54,
1526 : 0, 0, 0, 0, 55, 0, 0, 87, 88, 89,
1527 : 90, 91, 92, 93, 94, 95, 0, 0, 0, 0,
1528 : 0, 56, 57, 0, 0, 0, 0, 0, 0, 0,
1529 : 0, 0, 96, 97, 0, 0, 0, 0, 0, 98,
1530 : 0, 0, 0, 99, 58, 59, 60, 61, 62, 63,
1531 : 64, 65, 66, 67, 68, 69, 70, 71, 0, 0,
1532 : 0, 0, 0, 72, 73, 74, 75, 76, 77, 78,
1533 : 79, 80, 81, 82, 0, 0, 83, 84, 85, 86,
1534 : 0, 51, 52, 53, 0, 0, 0, 54, 0, 0,
1535 : 0, 0, 55, 0, 87, 88, 89, 90, 91, 92,
1536 : 93, 94, 95, 0, 0, 0, 0, 0, 0, 0,
1537 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 303,
1538 : 97, 0, 0, 0, 0, 0, 98, -210, 0, 0,
1539 : 99, 0, 58, 59, 60, 61, 62, 63, 64, 65,
1540 : 66, 67, 68, 69, 70, 71, 0, 0, 0, 0,
1541 : 0, 72, 73, 74, 75, 76, 77, 78, 79, 80,
1542 : 81, 82, 0, 0, 83, 84, 85, 86, 0, 51,
1543 : 52, 53, 0, 0, 0, 54, 0, 0, 0, 0,
1544 : 55, 0, 87, 88, 89, 90, 91, 92, 93, 94,
1545 : 95, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1546 : 0, 0, 0, 0, 0, 0, 0, 117, 97, 0,
1547 : 0, 0, 0, 0, 98, -209, 0, 0, 99, 0,
1548 : 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
1549 : 68, 69, 70, 71, 0, 0, 0, 0, 0, 72,
1550 : 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
1551 : 0, 0, 83, 84, 85, 86, 51, 52, 53, 0,
1552 : 0, 0, 54, 0, 0, 0, 0, 55, 0, 0,
1553 : 87, 88, 89, 90, 91, 92, 93, 94, 95, 9,
1554 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1555 : 0, 0, 0, 0, 0, 117, 97, 0, 0, 0,
1556 : 0, 0, 98, 0, 0, 0, 99, 58, 59, 60,
1557 : 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
1558 : 71, 0, 0, 0, 0, 0, 72, 73, 74, 75,
1559 : 76, 77, 78, 79, 80, 81, 82, 0, 0, 83,
1560 : 84, 85, 86, 0, 0, 0, 0, 0, 0, 0,
1561 : 0, 0, 0, 0, 0, 0, 0, 87, 88, 89,
1562 : 90, 91, 92, 93, 94, 95, 0, 0, 0, 0,
1563 : 0, 245, 246, 247, 248, 249, 250, 0, 0, 0,
1564 : 0, 0, 117, 97, 0, 0, 0, 0, 0, 98,
1565 : 0, 56, 57, 99, 0, 0, 0, 32, 0, 0,
1566 : 0, 0, 0, 0, 56, 57, 252, 253, 254, 255,
1567 : 256, 257, 258, 0, 259, 59, 60, 61, 62, 63,
1568 : 64, 65, 66, 67, 0, 0, 70, 71, 59, 60,
1569 : 61, 62, 63, 64, 65, 66, 67, 0, 0, 70,
1570 : 71, 243, 0, 0, 244, 0, 83, 84, 85, 86,
1571 : 0, 0, 0, 243, 0, 0, 244, 0, 0, 83,
1572 : 84, 85, 86, 0, 87, 88, 89, 90, 91, 92,
1573 : 93, 94, 95, 0, 0, 0, 0, 87, 88, 89,
1574 : 90, 91, 92, 93, 94, 95, 0, 0, 396, 0,
1575 : 245, 246, 247, 248, 249, 250, 0, 0, 0, 0,
1576 : 0, 295, 270, 271, 247, 248, 249, 250, 0, 0,
1577 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1578 : 0, 0, 0, 0, 251, 252, 253, 254, 255, 256,
1579 : 257, 258, 0, 259, 0, 0, 251, 252, 253, 254,
1580 : 255, 256, 257, 258, 0, 259, 59, 60, 61, 62,
1581 : 63, 64, 65, 66, 67, 68, 69, 70, 71, 59,
1582 : 60, 61, 62, 63, 64, 65, 66, 67, 0, 0,
1583 : 70, 71, 0, 0, 0, 0, 0, 83, 84, 85,
1584 : 86, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1585 : 83, 84, 85, 86, 0, 87, 88, 89, 90, 91,
1586 : 92, 93, 94, 95, 0, 0, 0, 0, 87, 88,
1587 : 89, 90, 91, 92, 93, 94, 95, 0, 0, 224,
1588 : 270, 271, 247, 248, 249, 250, 0, 0, 0, 270,
1589 : 271, 247, 248, 249, 250, 0, 0, 0, 0, 0,
1590 : 0, 0, 0, 0, 0, 0, 0, 245, 246, 247,
1591 : 248, 249, 250, 0, 0, 252, 253, 254, 255, 256,
1592 : 257, 258, 0, 259, 252, 253, 254, 255, 256, 257,
1593 : 258, 402, 259, 270, 271, 247, 248, 249, 250, 0,
1594 : 403, 251, 252, 253, 254, 255, 256, 257, 258, 0,
1595 : 259, 270, 271, 247, 248, 249, 250, 0, 0, 0,
1596 : 245, 246, 247, 248, 249, 250, 0, 251, 252, 253,
1597 : 254, 255, 256, 257, 258, 245, 259, 247, 248, 249,
1598 : 250, 0, 0, 0, 0, 0, 252, 253, 254, 255,
1599 : 256, 257, 258, 0, 259, 252, 253, 254, 255, 256,
1600 : 257, 258, 270, 259, 247, 248, 249, 250, 0, 0,
1601 : 252, 253, 254, 255, 256, 257, 258, 0, 259, 0,
1602 : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1603 : 0, 0, 0, 0, 0, 0, 0, 252, 253, 254,
1604 : 255, 256, 257, 258, 0, 259
1605 : };
1606 :
1607 : static const yytype_int16 yycheck[] =
1608 : {
1609 : 27, 132, 0, 142, 31, 53, 33, 107, 4, 0,
1610 : 53, 6, 4, 132, 41, 107, 6, 68, 69, 70,
1611 : 71, 72, 142, 100, 4, 111, 109, 144, 118, 148,
1612 : 27, 27, 134, 135, 136, 143, 33, 33, 36, 4,
1613 : 29, 68, 69, 3, 175, 41, 44, 96, 129, 9,
1614 : 150, 128, 31, 32, 14, 3, 45, 97, 150, 143,
1615 : 144, 9, 135, 136, 27, 143, 14, 85, 6, 96,
1616 : 33, 98, 99, 100, 8, 148, 14, 15, 16, 17,
1617 : 18, 19, 20, 21, 129, 23, 133, 135, 136, 49,
1618 : 85, 118, 135, 136, 129, 0, 129, 148, 129, 96,
1619 : 129, 128, 151, 100, 100, 129, 0, 129, 97, 129,
1620 : 96, 143, 139, 140, 141, 142, 143, 144, 145, 146,
1621 : 147, 148, 149, 150, 151, 104, 105, 154, 155, 156,
1622 : 126, 128, 128, 96, 124, 129, 132, 100, 165, 166,
1623 : 132, 3, 4, 170, 171, 292, 98, 99, 175, 296,
1624 : 147, 148, 149, 150, 240, 129, 242, 184, 129, 186,
1625 : 49, 147, 148, 149, 150, 128, 135, 136, 217, 218,
1626 : 130, 167, 168, 169, 100, 101, 266, 267, 175, 175,
1627 : 270, 271, 130, 38, 147, 148, 149, 150, 177, 175,
1628 : 217, 218, 292, 131, 6, 184, 296, 186, 298, 188,
1629 : 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
1630 : 293, 294, 175, 31, 32, 301, 135, 136, 245, 246,
1631 : 247, 248, 249, 250, 251, 252, 253, 254, 255, 256,
1632 : 257, 258, 259, 260, 261, 262, 4, 142, 8, 266,
1633 : 267, 146, 147, 270, 271, 392, 393, 296, 142, 135,
1634 : 136, 148, 146, 147, 303, 135, 136, 137, 138, 139,
1635 : 148, 141, 148, 260, 261, 134, 135, 136, 133, 296,
1636 : 34, 10, 268, 269, 260, 261, 303, 129, 130, 275,
1637 : 137, 138, 139, 430, 141, 132, 104, 105, 135, 136,
1638 : 141, 6, 392, 393, 343, 344, 427, 260, 261, 296,
1639 : 15, 16, 17, 18, 19, 20, 21, 3, 23, 132,
1640 : 296, 147, 135, 136, 128, 342, 343, 344, 50, 147,
1641 : 347, 348, 146, 15, 16, 17, 18, 19, 20, 21,
1642 : 430, 23, 8, 296, 98, 99, 100, 101, 102, 103,
1643 : 68, 69, 70, 71, 72, 342, 3, 8, 148, 132,
1644 : 347, 348, 135, 136, 148, 132, 342, 148, 148, 148,
1645 : 132, 347, 348, 68, 69, 70, 71, 72, 148, 133,
1646 : 134, 135, 136, 137, 138, 139, 132, 141, 51, 342,
1647 : 8, 148, 148, 132, 347, 348, 98, 3, 114, 148,
1648 : 148, 6, 52, 148, 421, 422, 423, 148, 425, 8,
1649 : 148, 148, 95, 148, 36, 211, 33, 135, 136, 432,
1650 : 175, -1, -1, -1, 441, 442, 131, 406, -1, -1,
1651 : -1, 410, 411, -1, 421, 422, -1, -1, -1, -1,
1652 : -1, 427, 459, -1, -1, 421, 422, 464, -1, 131,
1653 : 3, 4, 5, 6, 441, 442, 9, 100, 101, 102,
1654 : 103, 14, -1, -1, -1, 441, 442, -1, 421, 422,
1655 : -1, -1, -1, -1, -1, -1, -1, -1, 31, 32,
1656 : -1, -1, -1, -1, -1, -1, -1, -1, 441, 442,
1657 : 133, 134, 135, 136, 137, 138, 139, -1, 141, -1,
1658 : -1, 54, 55, 56, 57, 58, 59, 60, 61, 62,
1659 : 63, 64, 65, 66, 67, -1, -1, -1, -1, -1,
1660 : 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
1661 : 83, 102, 103, 86, 87, 88, 89, -1, -1, -1,
1662 : -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1663 : -1, 104, 105, 106, 107, 108, 109, 110, 111, 112,
1664 : -1, -1, 133, 134, 135, 136, 137, 138, 139, -1,
1665 : 141, 124, -1, -1, -1, -1, 129, 130, -1, -1,
1666 : -1, -1, -1, 136, -1, -1, -1, 140, 3, 4,
1667 : 5, 6, 7, -1, 9, 148, -1, -1, -1, 14,
1668 : 15, 16, 17, 18, 19, 20, 21, 22, 23, -1,
1669 : -1, 26, -1, -1, 29, 30, 31, 32, -1, -1,
1670 : -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1671 : -1, -1, -1, -1, -1, -1, -1, -1, -1, 54,
1672 : 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1673 : 65, 66, 67, -1, -1, -1, -1, -1, 73, 74,
1674 : 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
1675 : -1, 86, 87, 88, 89, 90, 91, -1, -1, 94,
1676 : -1, 96, -1, -1, -1, -1, -1, -1, -1, 104,
1677 : 105, 106, 107, 108, 109, 110, 111, 112, 113, -1,
1678 : 115, -1, -1, -1, -1, -1, -1, -1, -1, 124,
1679 : 125, -1, -1, -1, 129, 130, 131, -1, -1, 3,
1680 : 4, 136, 6, 7, 37, 140, -1, -1, -1, -1,
1681 : 145, 15, 16, 17, 18, 19, 20, 21, 22, 23,
1682 : -1, -1, 26, -1, -1, 29, 30, 31, 32, -1,
1683 : -1, -1, -1, -1, -1, 3, 4, -1, 6, 7,
1684 : -1, -1, -1, -1, -1, -1, -1, 15, 16, 17,
1685 : 18, 19, 20, 21, 22, 23, -1, -1, 26, -1,
1686 : -1, 29, 30, 31, 32, 98, 99, 100, 101, 102,
1687 : 103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1688 : 84, -1, -1, -1, -1, -1, 90, 91, -1, -1,
1689 : 94, -1, 96, -1, -1, -1, -1, -1, -1, -1,
1690 : 133, 134, 135, 136, 137, 138, 139, -1, 141, 113,
1691 : -1, 115, -1, -1, -1, -1, 84, -1, -1, -1,
1692 : 124, 125, 90, 91, -1, -1, 94, 131, 96, -1,
1693 : -1, -1, -1, -1, -1, -1, -1, -1, 142, -1,
1694 : -1, 145, -1, -1, -1, 113, -1, 115, -1, -1,
1695 : -1, -1, -1, -1, -1, -1, 124, 125, 3, 4,
1696 : 5, 6, -1, 131, 9, -1, 11, 12, 13, 14,
1697 : -1, -1, -1, -1, -1, -1, -1, 145, -1, 24,
1698 : 25, -1, 27, 28, 29, 30, 31, 32, 33, 34,
1699 : 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1700 : 45, 46, 47, 48, -1, -1, -1, -1, -1, 54,
1701 : 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1702 : 65, 66, 67, -1, -1, -1, -1, -1, 73, 74,
1703 : 75, 76, 77, 78, 79, 80, 81, 82, 83, -1,
1704 : -1, 86, 87, 88, 89, -1, -1, 92, 93, -1,
1705 : -1, -1, -1, -1, -1, -1, -1, -1, -1, 104,
1706 : 105, 106, 107, 108, 109, 110, 111, 112, -1, -1,
1707 : -1, 116, 117, 118, 119, 120, 121, 122, 123, 124,
1708 : -1, -1, -1, -1, 129, 130, 3, 4, 5, 6,
1709 : -1, 136, 9, -1, -1, 140, -1, 14, -1, -1,
1710 : -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1711 : -1, -1, -1, -1, 31, 32, -1, -1, -1, -1,
1712 : -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1713 : -1, -1, -1, -1, -1, -1, -1, 54, 55, 56,
1714 : 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
1715 : 67, -1, -1, -1, -1, -1, 73, 74, 75, 76,
1716 : 77, 78, 79, 80, 81, 82, 83, -1, -1, 86,
1717 : 87, 88, 89, 3, 4, 5, 6, -1, -1, 9,
1718 : -1, -1, -1, -1, 14, -1, -1, 104, 105, 106,
1719 : 107, 108, 109, 110, 111, 112, -1, -1, -1, -1,
1720 : -1, 31, 32, -1, -1, -1, -1, 124, -1, -1,
1721 : -1, 128, 129, 130, -1, -1, -1, -1, -1, 136,
1722 : -1, -1, -1, 140, 54, 55, 56, 57, 58, 59,
1723 : 60, 61, 62, 63, 64, 65, 66, 67, -1, -1,
1724 : -1, -1, -1, 73, 74, 75, 76, 77, 78, 79,
1725 : 80, 81, 82, 83, -1, -1, 86, 87, 88, 89,
1726 : 3, 4, 5, 6, -1, -1, 9, -1, -1, -1,
1727 : -1, 14, -1, -1, 104, 105, 106, 107, 108, 109,
1728 : 110, 111, 112, -1, -1, -1, -1, -1, 31, 32,
1729 : -1, -1, -1, -1, 124, -1, -1, -1, -1, 129,
1730 : 130, -1, -1, -1, -1, -1, 136, -1, -1, -1,
1731 : 140, 54, 55, 56, 57, 58, 59, 60, 61, 62,
1732 : 63, 64, 65, 66, 67, -1, -1, -1, -1, -1,
1733 : 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
1734 : 83, -1, -1, 86, 87, 88, 89, 3, 4, 5,
1735 : 6, -1, -1, 9, -1, -1, -1, -1, 14, -1,
1736 : -1, 104, 105, 106, 107, 108, 109, 110, 111, 112,
1737 : -1, -1, -1, -1, -1, 31, 32, -1, -1, -1,
1738 : -1, 124, -1, -1, -1, -1, 129, 130, -1, -1,
1739 : -1, -1, -1, 136, -1, -1, -1, 140, 54, 55,
1740 : 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
1741 : 66, 67, -1, -1, -1, -1, -1, 73, 74, 75,
1742 : 76, 77, 78, 79, 80, 81, 82, 83, -1, -1,
1743 : 86, 87, 88, 89, 3, 4, 5, 6, -1, -1,
1744 : 9, -1, -1, -1, -1, 14, -1, -1, 104, 105,
1745 : 106, 107, 108, 109, 110, 111, 112, -1, -1, -1,
1746 : -1, -1, 31, 32, -1, -1, -1, -1, 124, -1,
1747 : -1, -1, -1, 129, 130, -1, -1, -1, -1, -1,
1748 : 136, -1, -1, -1, 140, 54, 55, 56, 57, 58,
1749 : 59, 60, 61, 62, 63, 64, 65, 66, 67, -1,
1750 : -1, -1, -1, -1, 73, 74, 75, 76, 77, 78,
1751 : 79, 80, 81, 82, 83, -1, -1, 86, 87, 88,
1752 : 89, 3, 4, 5, -1, -1, -1, 9, -1, -1,
1753 : -1, -1, 14, -1, -1, 104, 105, 106, 107, 108,
1754 : 109, 110, 111, 112, -1, -1, -1, -1, -1, 31,
1755 : 32, -1, -1, -1, -1, 124, -1, -1, -1, -1,
1756 : 129, 130, -1, -1, -1, -1, -1, 136, -1, -1,
1757 : -1, 140, 54, 55, 56, 57, 58, 59, 60, 61,
1758 : 62, 63, 64, 65, 66, 67, -1, -1, -1, -1,
1759 : -1, 73, 74, 75, 76, 77, 78, 79, 80, 81,
1760 : 82, 83, -1, -1, 86, 87, 88, 89, 3, 4,
1761 : 5, -1, -1, -1, 9, -1, -1, -1, -1, 14,
1762 : -1, -1, 104, 105, 106, 107, 108, 109, 110, 111,
1763 : 112, -1, -1, -1, -1, -1, 31, 32, -1, -1,
1764 : -1, -1, -1, -1, -1, -1, 128, 129, 130, -1,
1765 : -1, -1, -1, -1, 136, -1, -1, -1, 140, 54,
1766 : 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1767 : 65, 66, 67, -1, -1, -1, -1, -1, 73, 74,
1768 : 75, 76, 77, 78, 79, 80, 81, 82, 83, -1,
1769 : -1, 86, 87, 88, 89, 3, 4, 5, -1, -1,
1770 : -1, 9, -1, -1, -1, -1, 14, -1, -1, 104,
1771 : 105, 106, 107, 108, 109, 110, 111, 112, -1, -1,
1772 : -1, -1, -1, 31, 32, -1, -1, -1, -1, -1,
1773 : -1, -1, -1, -1, 129, 130, -1, -1, -1, -1,
1774 : -1, 136, 137, -1, -1, 140, 54, 55, 56, 57,
1775 : 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
1776 : -1, -1, -1, -1, -1, 73, 74, 75, 76, 77,
1777 : 78, 79, 80, 81, 82, 83, -1, -1, 86, 87,
1778 : 88, 89, 3, 4, 5, -1, -1, -1, 9, -1,
1779 : -1, -1, -1, 14, -1, -1, 104, 105, 106, 107,
1780 : 108, 109, 110, 111, 112, -1, -1, -1, -1, -1,
1781 : 31, 32, -1, -1, -1, -1, -1, -1, -1, -1,
1782 : -1, 129, 130, -1, -1, -1, -1, -1, 136, -1,
1783 : -1, -1, 140, 54, 55, 56, 57, 58, 59, 60,
1784 : 61, 62, 63, 64, 65, 66, 67, -1, -1, -1,
1785 : -1, -1, 73, 74, 75, 76, 77, 78, 79, 80,
1786 : 81, 82, 83, -1, -1, 86, 87, 88, 89, 3,
1787 : 4, 5, -1, -1, -1, 9, -1, -1, -1, -1,
1788 : 14, -1, -1, 104, 105, 106, 107, 108, 109, 110,
1789 : 111, 112, -1, -1, -1, -1, -1, 31, 32, -1,
1790 : -1, -1, -1, -1, -1, -1, -1, -1, 129, 130,
1791 : -1, -1, -1, -1, -1, 136, -1, -1, -1, 140,
1792 : 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
1793 : 64, 65, 66, 67, -1, -1, -1, -1, -1, 73,
1794 : 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
1795 : -1, -1, 86, 87, 88, 89, 3, 4, 5, -1,
1796 : -1, -1, 9, -1, -1, -1, -1, 14, -1, -1,
1797 : 104, 105, 106, 107, 108, 109, 110, 111, 112, -1,
1798 : -1, -1, -1, -1, 31, 32, -1, -1, -1, -1,
1799 : -1, -1, -1, -1, -1, 129, 130, -1, -1, -1,
1800 : -1, -1, 136, -1, -1, -1, 140, 54, 55, 56,
1801 : 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
1802 : 67, -1, -1, -1, -1, -1, 73, 74, 75, 76,
1803 : 77, 78, 79, 80, 81, 82, 83, -1, -1, 86,
1804 : 87, 88, 89, 3, 4, 5, -1, -1, -1, 9,
1805 : -1, -1, -1, -1, 14, -1, -1, 104, 105, 106,
1806 : 107, 108, 109, 110, 111, 112, -1, -1, -1, -1,
1807 : -1, 31, 32, -1, -1, -1, -1, -1, -1, -1,
1808 : -1, -1, 129, 130, -1, -1, -1, -1, -1, 136,
1809 : -1, -1, -1, 140, 54, 55, 56, 57, 58, 59,
1810 : 60, 61, 62, 63, 64, 65, 66, 67, -1, -1,
1811 : -1, -1, -1, 73, 74, 75, 76, 77, 78, 79,
1812 : 80, 81, 82, 83, -1, -1, 86, 87, 88, 89,
1813 : -1, 3, 4, 5, -1, -1, -1, 9, -1, -1,
1814 : -1, -1, 14, -1, 104, 105, 106, 107, 108, 109,
1815 : 110, 111, 112, -1, -1, -1, -1, -1, -1, -1,
1816 : -1, -1, -1, -1, -1, -1, -1, -1, -1, 129,
1817 : 130, -1, -1, -1, -1, -1, 136, 49, -1, -1,
1818 : 140, -1, 54, 55, 56, 57, 58, 59, 60, 61,
1819 : 62, 63, 64, 65, 66, 67, -1, -1, -1, -1,
1820 : -1, 73, 74, 75, 76, 77, 78, 79, 80, 81,
1821 : 82, 83, -1, -1, 86, 87, 88, 89, -1, 3,
1822 : 4, 5, -1, -1, -1, 9, -1, -1, -1, -1,
1823 : 14, -1, 104, 105, 106, 107, 108, 109, 110, 111,
1824 : 112, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1825 : -1, -1, -1, -1, -1, -1, -1, 129, 130, -1,
1826 : -1, -1, -1, -1, 136, 49, -1, -1, 140, -1,
1827 : 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
1828 : 64, 65, 66, 67, -1, -1, -1, -1, -1, 73,
1829 : 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
1830 : -1, -1, 86, 87, 88, 89, 3, 4, 5, -1,
1831 : -1, -1, 9, -1, -1, -1, -1, 14, -1, -1,
1832 : 104, 105, 106, 107, 108, 109, 110, 111, 112, 6,
1833 : -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1834 : -1, -1, -1, -1, -1, 129, 130, -1, -1, -1,
1835 : -1, -1, 136, -1, -1, -1, 140, 54, 55, 56,
1836 : 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
1837 : 67, -1, -1, -1, -1, -1, 73, 74, 75, 76,
1838 : 77, 78, 79, 80, 81, 82, 83, -1, -1, 86,
1839 : 87, 88, 89, -1, -1, -1, -1, -1, -1, -1,
1840 : -1, -1, -1, -1, -1, -1, -1, 104, 105, 106,
1841 : 107, 108, 109, 110, 111, 112, -1, -1, -1, -1,
1842 : -1, 98, 99, 100, 101, 102, 103, -1, -1, -1,
1843 : -1, -1, 129, 130, -1, -1, -1, -1, -1, 136,
1844 : -1, 31, 32, 140, -1, -1, -1, 124, -1, -1,
1845 : -1, -1, -1, -1, 31, 32, 133, 134, 135, 136,
1846 : 137, 138, 139, -1, 141, 55, 56, 57, 58, 59,
1847 : 60, 61, 62, 63, -1, -1, 66, 67, 55, 56,
1848 : 57, 58, 59, 60, 61, 62, 63, -1, -1, 66,
1849 : 67, 49, -1, -1, 52, -1, 86, 87, 88, 89,
1850 : -1, -1, -1, 49, -1, -1, 52, -1, -1, 86,
1851 : 87, 88, 89, -1, 104, 105, 106, 107, 108, 109,
1852 : 110, 111, 112, -1, -1, -1, -1, 104, 105, 106,
1853 : 107, 108, 109, 110, 111, 112, -1, -1, 128, -1,
1854 : 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
1855 : -1, 128, 98, 99, 100, 101, 102, 103, -1, -1,
1856 : -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1857 : -1, -1, -1, -1, 132, 133, 134, 135, 136, 137,
1858 : 138, 139, -1, 141, -1, -1, 132, 133, 134, 135,
1859 : 136, 137, 138, 139, -1, 141, 55, 56, 57, 58,
1860 : 59, 60, 61, 62, 63, 64, 65, 66, 67, 55,
1861 : 56, 57, 58, 59, 60, 61, 62, 63, -1, -1,
1862 : 66, 67, -1, -1, -1, -1, -1, 86, 87, 88,
1863 : 89, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1864 : 86, 87, 88, 89, -1, 104, 105, 106, 107, 108,
1865 : 109, 110, 111, 112, -1, -1, -1, -1, 104, 105,
1866 : 106, 107, 108, 109, 110, 111, 112, -1, -1, 128,
1867 : 98, 99, 100, 101, 102, 103, -1, -1, -1, 98,
1868 : 99, 100, 101, 102, 103, -1, -1, -1, -1, -1,
1869 : -1, -1, -1, -1, -1, -1, -1, 98, 99, 100,
1870 : 101, 102, 103, -1, -1, 133, 134, 135, 136, 137,
1871 : 138, 139, -1, 141, 133, 134, 135, 136, 137, 138,
1872 : 139, 149, 141, 98, 99, 100, 101, 102, 103, -1,
1873 : 149, 132, 133, 134, 135, 136, 137, 138, 139, -1,
1874 : 141, 98, 99, 100, 101, 102, 103, -1, -1, -1,
1875 : 98, 99, 100, 101, 102, 103, -1, 132, 133, 134,
1876 : 135, 136, 137, 138, 139, 98, 141, 100, 101, 102,
1877 : 103, -1, -1, -1, -1, -1, 133, 134, 135, 136,
1878 : 137, 138, 139, -1, 141, 133, 134, 135, 136, 137,
1879 : 138, 139, 98, 141, 100, 101, 102, 103, -1, -1,
1880 : 133, 134, 135, 136, 137, 138, 139, -1, 141, -1,
1881 : -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1882 : -1, -1, -1, -1, -1, -1, -1, 133, 134, 135,
1883 : 136, 137, 138, 139, -1, 141
1884 : };
1885 :
1886 : /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
1887 : symbol of state STATE-NUM. */
1888 : static const yytype_uint8 yystos[] =
1889 : {
1890 : 0, 142, 151, 152, 154, 155, 0, 3, 4, 6,
1891 : 7, 15, 16, 17, 18, 19, 20, 21, 22, 23,
1892 : 26, 29, 30, 31, 32, 84, 90, 91, 94, 96,
1893 : 113, 115, 124, 125, 131, 145, 153, 156, 165, 168,
1894 : 174, 178, 180, 142, 144, 143, 144, 143, 6, 85,
1895 : 157, 3, 4, 5, 9, 14, 31, 32, 54, 55,
1896 : 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
1897 : 66, 67, 73, 74, 75, 76, 77, 78, 79, 80,
1898 : 81, 82, 83, 86, 87, 88, 89, 104, 105, 106,
1899 : 107, 108, 109, 110, 111, 112, 129, 130, 136, 140,
1900 : 166, 167, 180, 182, 183, 185, 186, 187, 188, 189,
1901 : 190, 195, 196, 197, 198, 199, 4, 129, 140, 171,
1902 : 172, 180, 186, 197, 199, 4, 197, 129, 166, 179,
1903 : 175, 154, 155, 4, 132, 97, 11, 12, 13, 24,
1904 : 25, 27, 28, 29, 30, 31, 32, 33, 34, 35,
1905 : 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
1906 : 46, 47, 48, 92, 93, 116, 117, 118, 119, 120,
1907 : 121, 122, 123, 180, 197, 154, 171, 143, 3, 4,
1908 : 164, 85, 160, 8, 130, 197, 130, 197, 129, 129,
1909 : 129, 129, 129, 129, 129, 129, 129, 129, 129, 31,
1910 : 32, 104, 105, 31, 32, 104, 105, 171, 182, 185,
1911 : 186, 197, 199, 171, 197, 197, 167, 135, 136, 68,
1912 : 69, 70, 71, 72, 128, 195, 196, 6, 14, 15,
1913 : 16, 17, 18, 19, 20, 21, 23, 131, 191, 191,
1914 : 49, 187, 49, 49, 52, 98, 99, 100, 101, 102,
1915 : 103, 132, 133, 134, 135, 136, 137, 138, 139, 141,
1916 : 184, 133, 143, 172, 197, 38, 98, 99, 100, 101,
1917 : 98, 99, 180, 6, 152, 154, 152, 174, 4, 163,
1918 : 197, 197, 197, 197, 197, 197, 197, 197, 182, 197,
1919 : 182, 182, 3, 9, 14, 128, 129, 182, 192, 193,
1920 : 194, 195, 196, 129, 185, 197, 197, 197, 197, 197,
1921 : 197, 180, 180, 180, 197, 197, 3, 4, 31, 32,
1922 : 174, 182, 183, 186, 171, 158, 8, 197, 197, 171,
1923 : 171, 171, 171, 171, 171, 171, 171, 171, 148, 171,
1924 : 171, 148, 132, 135, 136, 148, 148, 184, 133, 10,
1925 : 185, 185, 3, 147, 187, 187, 50, 197, 197, 197,
1926 : 197, 197, 197, 197, 197, 197, 197, 197, 197, 197,
1927 : 197, 197, 182, 182, 197, 169, 172, 197, 172, 197,
1928 : 180, 180, 172, 197, 172, 197, 181, 147, 146, 8,
1929 : 193, 195, 191, 191, 3, 193, 128, 195, 185, 197,
1930 : 8, 161, 149, 149, 148, 148, 132, 148, 148, 148,
1931 : 132, 132, 148, 148, 148, 182, 185, 185, 182, 182,
1932 : 51, 53, 132, 34, 8, 132, 148, 176, 193, 193,
1933 : 132, 3, 159, 114, 170, 171, 171, 171, 148, 148,
1934 : 148, 53, 132, 52, 182, 182, 197, 197, 174, 177,
1935 : 193, 170, 6, 148, 148, 148, 182, 182, 134, 37,
1936 : 173, 148, 148, 134, 137, 197, 95, 148, 197, 162,
1937 : 8
1938 : };
1939 :
1940 : /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
1941 : static const yytype_uint8 yyr1[] =
1942 : {
1943 : 0, 150, 151, 151, 152, 153, 153, 154, 154, 155,
1944 : 155, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1945 : 156, 157, 156, 156, 158, 159, 156, 160, 161, 156,
1946 : 162, 156, 156, 163, 156, 156, 156, 164, 164, 165,
1947 : 165, 165, 166, 166, 167, 167, 167, 169, 168, 170,
1948 : 170, 171, 171, 172, 172, 172, 172, 172, 172, 172,
1949 : 172, 172, 173, 173, 173, 174, 174, 174, 174, 175,
1950 : 176, 174, 174, 177, 177, 178, 178, 178, 178, 178,
1951 : 178, 178, 178, 178, 178, 178, 178, 179, 178, 178,
1952 : 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
1953 : 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
1954 : 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
1955 : 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
1956 : 178, 178, 178, 178, 178, 178, 178, 178, 180, 180,
1957 : 181, 181, 182, 182, 182, 183, 183, 183, 183, 183,
1958 : 183, 183, 183, 183, 183, 184, 184, 185, 185, 186,
1959 : 186, 186, 186, 186, 186, 186, 187, 187, 187, 188,
1960 : 188, 189, 189, 190, 190, 191, 191, 191, 191, 191,
1961 : 191, 191, 191, 191, 191, 192, 192, 193, 193, 193,
1962 : 194, 194, 194, 194, 194, 194, 195, 195, 195, 195,
1963 : 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
1964 : 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
1965 : 195, 195, 195, 195, 195, 195, 195, 195, 196, 196,
1966 : 196, 196, 197, 197, 198, 199, 199, 199, 199, 199,
1967 : 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
1968 : 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
1969 : 199, 199, 199, 199, 199, 199, 199, 199, 199, 199
1970 : };
1971 :
1972 : /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
1973 : static const yytype_int8 yyr2[] =
1974 : {
1975 : 0, 2, 1, 1, 3, 1, 3, 0, 1, 1,
1976 : 2, 3, 3, 4, 1, 1, 1, 1, 1, 2,
1977 : 2, 0, 3, 2, 0, 0, 7, 0, 0, 6,
1978 : 0, 10, 1, 0, 4, 1, 1, 1, 1, 2,
1979 : 2, 3, 1, 2, 1, 1, 1, 0, 5, 0,
1980 : 2, 1, 1, 3, 3, 3, 3, 3, 3, 3,
1981 : 3, 2, 0, 2, 3, 1, 4, 4, 4, 0,
1982 : 0, 6, 1, 0, 1, 1, 1, 1, 1, 1,
1983 : 1, 1, 1, 1, 1, 2, 3, 0, 4, 3,
1984 : 3, 3, 3, 2, 2, 3, 2, 3, 2, 3,
1985 : 2, 3, 3, 3, 3, 3, 3, 3, 3, 2,
1986 : 2, 2, 3, 2, 3, 2, 3, 3, 3, 3,
1987 : 3, 3, 2, 3, 2, 2, 2, 2, 2, 2,
1988 : 2, 2, 2, 2, 2, 2, 3, 2, 1, 5,
1989 : 0, 3, 1, 1, 3, 1, 3, 5, 3, 5,
1990 : 5, 5, 7, 6, 8, 1, 4, 3, 3, 1,
1991 : 2, 2, 2, 3, 3, 1, 1, 1, 3, 1,
1992 : 3, 1, 2, 2, 2, 1, 1, 1, 1, 1,
1993 : 1, 1, 1, 2, 1, 2, 3, 1, 1, 2,
1994 : 1, 5, 4, 3, 3, 2, 1, 1, 1, 1,
1995 : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1996 : 1, 2, 2, 2, 2, 1, 1, 2, 2, 2,
1997 : 2, 1, 1, 1, 1, 1, 1, 1, 2, 4,
1998 : 2, 4, 1, 1, 3, 1, 1, 2, 2, 2,
1999 : 2, 2, 3, 3, 3, 3, 3, 3, 2, 3,
2000 : 4, 4, 6, 4, 4, 4, 6, 6, 4, 4,
2001 : 3, 4, 3, 3, 3, 3, 3, 3, 3, 2
2002 : };
2003 :
2004 :
2005 : enum { YYENOMEM = -2 };
2006 :
2007 : #define yyerrok (yyerrstatus = 0)
2008 : #define yyclearin (yychar = YYEMPTY)
2009 :
2010 : #define YYACCEPT goto yyacceptlab
2011 : #define YYABORT goto yyabortlab
2012 : #define YYERROR goto yyerrorlab
2013 :
2014 :
2015 : #define YYRECOVERING() (!!yyerrstatus)
2016 :
2017 : #define YYBACKUP(Token, Value) \
2018 : do \
2019 : if (yychar == YYEMPTY) \
2020 : { \
2021 : yychar = (Token); \
2022 : yylval = (Value); \
2023 : YYPOPSTACK (yylen); \
2024 : yystate = *yyssp; \
2025 : goto yybackup; \
2026 : } \
2027 : else \
2028 : { \
2029 : yyerror (YY_("syntax error: cannot back up")); \
2030 : YYERROR; \
2031 : } \
2032 : while (0)
2033 :
2034 : /* Backward compatibility with an undocumented macro.
2035 : Use YYerror or YYUNDEF. */
2036 : #define YYERRCODE YYUNDEF
2037 :
2038 :
2039 : /* Enable debugging if requested. */
2040 : #if YYDEBUG
2041 :
2042 : # ifndef YYFPRINTF
2043 : # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
2044 : # define YYFPRINTF fprintf
2045 : # endif
2046 :
2047 : # define YYDPRINTF(Args) \
2048 : do { \
2049 : if (yydebug) \
2050 : YYFPRINTF Args; \
2051 : } while (0)
2052 :
2053 : /* This macro is provided for backward compatibility. */
2054 : # ifndef YY_LOCATION_PRINT
2055 : # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
2056 : # endif
2057 :
2058 :
2059 : # define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \
2060 : do { \
2061 : if (yydebug) \
2062 : { \
2063 : YYFPRINTF (stderr, "%s ", Title); \
2064 : yy_symbol_print (stderr, \
2065 : Kind, Value); \
2066 : YYFPRINTF (stderr, "\n"); \
2067 : } \
2068 : } while (0)
2069 :
2070 :
2071 : /*-----------------------------------.
2072 : | Print this symbol's value on YYO. |
2073 : `-----------------------------------*/
2074 :
2075 : static void
2076 : yy_symbol_value_print (FILE *yyo,
2077 : yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
2078 : {
2079 : FILE *yyoutput = yyo;
2080 : YY_USE (yyoutput);
2081 : if (!yyvaluep)
2082 : return;
2083 : # ifdef YYPRINT
2084 : if (yykind < YYNTOKENS)
2085 : YYPRINT (yyo, yytoknum[yykind], *yyvaluep);
2086 : # endif
2087 : YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2088 : YY_USE (yykind);
2089 : YY_IGNORE_MAYBE_UNINITIALIZED_END
2090 : }
2091 :
2092 :
2093 : /*---------------------------.
2094 : | Print this symbol on YYO. |
2095 : `---------------------------*/
2096 :
2097 : static void
2098 : yy_symbol_print (FILE *yyo,
2099 : yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
2100 : {
2101 : YYFPRINTF (yyo, "%s %s (",
2102 : yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
2103 :
2104 : yy_symbol_value_print (yyo, yykind, yyvaluep);
2105 : YYFPRINTF (yyo, ")");
2106 : }
2107 :
2108 : /*------------------------------------------------------------------.
2109 : | yy_stack_print -- Print the state stack from its BOTTOM up to its |
2110 : | TOP (included). |
2111 : `------------------------------------------------------------------*/
2112 :
2113 : static void
2114 : yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
2115 : {
2116 : YYFPRINTF (stderr, "Stack now");
2117 : for (; yybottom <= yytop; yybottom++)
2118 : {
2119 : int yybot = *yybottom;
2120 : YYFPRINTF (stderr, " %d", yybot);
2121 : }
2122 : YYFPRINTF (stderr, "\n");
2123 : }
2124 :
2125 : # define YY_STACK_PRINT(Bottom, Top) \
2126 : do { \
2127 : if (yydebug) \
2128 : yy_stack_print ((Bottom), (Top)); \
2129 : } while (0)
2130 :
2131 :
2132 : /*------------------------------------------------.
2133 : | Report that the YYRULE is going to be reduced. |
2134 : `------------------------------------------------*/
2135 :
2136 : static void
2137 : yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp,
2138 : int yyrule)
2139 : {
2140 : int yylno = yyrline[yyrule];
2141 : int yynrhs = yyr2[yyrule];
2142 : int yyi;
2143 : YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
2144 : yyrule - 1, yylno);
2145 : /* The symbols being reduced. */
2146 : for (yyi = 0; yyi < yynrhs; yyi++)
2147 : {
2148 : YYFPRINTF (stderr, " $%d = ", yyi + 1);
2149 : yy_symbol_print (stderr,
2150 : YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
2151 : &yyvsp[(yyi + 1) - (yynrhs)]);
2152 : YYFPRINTF (stderr, "\n");
2153 : }
2154 : }
2155 :
2156 : # define YY_REDUCE_PRINT(Rule) \
2157 : do { \
2158 : if (yydebug) \
2159 : yy_reduce_print (yyssp, yyvsp, Rule); \
2160 : } while (0)
2161 :
2162 : /* Nonzero means print parse trace. It is left uninitialized so that
2163 : multiple parsers can coexist. */
2164 : int yydebug;
2165 : #else /* !YYDEBUG */
2166 : # define YYDPRINTF(Args) ((void) 0)
2167 : # define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
2168 : # define YY_STACK_PRINT(Bottom, Top)
2169 : # define YY_REDUCE_PRINT(Rule)
2170 : #endif /* !YYDEBUG */
2171 :
2172 :
2173 : /* YYINITDEPTH -- initial size of the parser's stacks. */
2174 : #ifndef YYINITDEPTH
2175 : # define YYINITDEPTH 200
2176 : #endif
2177 :
2178 : /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
2179 : if the built-in stack extension method is used).
2180 :
2181 : Do not make this value too large; the results are undefined if
2182 : YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
2183 : evaluated with infinite-precision integer arithmetic. */
2184 :
2185 : #ifndef YYMAXDEPTH
2186 : # define YYMAXDEPTH 10000
2187 : #endif
2188 :
2189 :
2190 :
2191 :
2192 :
2193 :
2194 : /*-----------------------------------------------.
2195 : | Release the memory associated to this symbol. |
2196 : `-----------------------------------------------*/
2197 :
2198 : static void
2199 228 : yydestruct (const char *yymsg,
2200 : yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
2201 : {
2202 : YY_USE (yyvaluep);
2203 228 : if (!yymsg)
2204 0 : yymsg = "Deleting";
2205 : YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
2206 :
2207 : YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2208 : YY_USE (yykind);
2209 : YY_IGNORE_MAYBE_UNINITIALIZED_END
2210 228 : }
2211 :
2212 :
2213 : /* Lookahead token kind. */
2214 : int yychar;
2215 :
2216 : /* The semantic value of the lookahead symbol. */
2217 : YYSTYPE yylval;
2218 : /* Number of syntax errors so far. */
2219 : int yynerrs;
2220 :
2221 :
2222 :
2223 :
2224 : /*----------.
2225 : | yyparse. |
2226 : `----------*/
2227 :
2228 : int
2229 114 : yyparse (void)
2230 : {
2231 114 : yy_state_fast_t yystate = 0;
2232 : /* Number of tokens to shift before error messages enabled. */
2233 114 : int yyerrstatus = 0;
2234 :
2235 : /* Refer to the stacks through separate pointers, to allow yyoverflow
2236 : to reallocate them elsewhere. */
2237 :
2238 : /* Their size. */
2239 114 : YYPTRDIFF_T yystacksize = YYINITDEPTH;
2240 :
2241 : /* The state stack: array, bottom, top. */
2242 : yy_state_t yyssa[YYINITDEPTH];
2243 114 : yy_state_t *yyss = yyssa;
2244 114 : yy_state_t *yyssp = yyss;
2245 :
2246 : /* The semantic value stack: array, bottom, top. */
2247 : YYSTYPE yyvsa[YYINITDEPTH];
2248 114 : YYSTYPE *yyvs = yyvsa;
2249 114 : YYSTYPE *yyvsp = yyvs;
2250 :
2251 : int yyn;
2252 : /* The return value of yyparse. */
2253 : int yyresult;
2254 : /* Lookahead symbol kind. */
2255 114 : yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
2256 : /* The variables used to return semantic value and location from the
2257 : action routines. */
2258 : YYSTYPE yyval;
2259 :
2260 :
2261 :
2262 : #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
2263 :
2264 : /* The number of symbols on the RHS of the reduced rule.
2265 : Keep to zero when no symbol should be popped. */
2266 114 : int yylen = 0;
2267 :
2268 : YYDPRINTF ((stderr, "Starting parse\n"));
2269 :
2270 114 : yychar = YYEMPTY; /* Cause a token to be read. */
2271 114 : goto yysetstate;
2272 :
2273 :
2274 : /*------------------------------------------------------------.
2275 : | yynewstate -- push a new state, which is found in yystate. |
2276 : `------------------------------------------------------------*/
2277 49129 : yynewstate:
2278 : /* In all cases, when you get here, the value and location stacks
2279 : have just been pushed. So pushing a state here evens the stacks. */
2280 49129 : yyssp++;
2281 :
2282 :
2283 : /*--------------------------------------------------------------------.
2284 : | yysetstate -- set current state (the top of the stack) to yystate. |
2285 : `--------------------------------------------------------------------*/
2286 49243 : yysetstate:
2287 : YYDPRINTF ((stderr, "Entering state %d\n", yystate));
2288 : YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
2289 : YY_IGNORE_USELESS_CAST_BEGIN
2290 49243 : *yyssp = YY_CAST (yy_state_t, yystate);
2291 : YY_IGNORE_USELESS_CAST_END
2292 : YY_STACK_PRINT (yyss, yyssp);
2293 :
2294 49243 : if (yyss + yystacksize - 1 <= yyssp)
2295 : #if !defined yyoverflow && !defined YYSTACK_RELOCATE
2296 : goto yyexhaustedlab;
2297 : #else
2298 : {
2299 : /* Get the current used size of the three stacks, in elements. */
2300 0 : YYPTRDIFF_T yysize = yyssp - yyss + 1;
2301 :
2302 : # if defined yyoverflow
2303 : {
2304 : /* Give user a chance to reallocate the stack. Use copies of
2305 : these so that the &'s don't force the real ones into
2306 : memory. */
2307 : yy_state_t *yyss1 = yyss;
2308 : YYSTYPE *yyvs1 = yyvs;
2309 :
2310 : /* Each stack pointer address is followed by the size of the
2311 : data in use in that stack, in bytes. This used to be a
2312 : conditional around just the two extra args, but that might
2313 : be undefined if yyoverflow is a macro. */
2314 : yyoverflow (YY_("memory exhausted"),
2315 : &yyss1, yysize * YYSIZEOF (*yyssp),
2316 : &yyvs1, yysize * YYSIZEOF (*yyvsp),
2317 : &yystacksize);
2318 : yyss = yyss1;
2319 : yyvs = yyvs1;
2320 : }
2321 : # else /* defined YYSTACK_RELOCATE */
2322 : /* Extend the stack our own way. */
2323 0 : if (YYMAXDEPTH <= yystacksize)
2324 0 : goto yyexhaustedlab;
2325 0 : yystacksize *= 2;
2326 0 : if (YYMAXDEPTH < yystacksize)
2327 0 : yystacksize = YYMAXDEPTH;
2328 :
2329 : {
2330 0 : yy_state_t *yyss1 = yyss;
2331 : union yyalloc *yyptr =
2332 0 : YY_CAST (union yyalloc *,
2333 : YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
2334 0 : if (! yyptr)
2335 0 : goto yyexhaustedlab;
2336 0 : YYSTACK_RELOCATE (yyss_alloc, yyss);
2337 0 : YYSTACK_RELOCATE (yyvs_alloc, yyvs);
2338 : # undef YYSTACK_RELOCATE
2339 0 : if (yyss1 != yyssa)
2340 0 : YYSTACK_FREE (yyss1);
2341 : }
2342 : # endif
2343 :
2344 0 : yyssp = yyss + yysize - 1;
2345 0 : yyvsp = yyvs + yysize - 1;
2346 :
2347 : YY_IGNORE_USELESS_CAST_BEGIN
2348 : YYDPRINTF ((stderr, "Stack size increased to %ld\n",
2349 : YY_CAST (long, yystacksize)));
2350 : YY_IGNORE_USELESS_CAST_END
2351 :
2352 0 : if (yyss + yystacksize - 1 <= yyssp)
2353 0 : YYABORT;
2354 : }
2355 : #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
2356 :
2357 49243 : if (yystate == YYFINAL)
2358 114 : YYACCEPT;
2359 :
2360 49129 : goto yybackup;
2361 :
2362 :
2363 : /*-----------.
2364 : | yybackup. |
2365 : `-----------*/
2366 49129 : yybackup:
2367 : /* Do appropriate processing given the current state. Read a
2368 : lookahead token if we need one and don't already have one. */
2369 :
2370 : /* First try to decide what to do without reference to lookahead token. */
2371 49129 : yyn = yypact[yystate];
2372 49129 : if (yypact_value_is_default (yyn))
2373 22155 : goto yydefault;
2374 :
2375 : /* Not known => get a lookahead token if don't already have one. */
2376 :
2377 : /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */
2378 26974 : if (yychar == YYEMPTY)
2379 : {
2380 : YYDPRINTF ((stderr, "Reading a token\n"));
2381 18446 : yychar = yylex ();
2382 : }
2383 :
2384 26974 : if (yychar <= YYEOF)
2385 : {
2386 228 : yychar = YYEOF;
2387 228 : yytoken = YYSYMBOL_YYEOF;
2388 : YYDPRINTF ((stderr, "Now at end of input.\n"));
2389 : }
2390 26746 : else if (yychar == YYerror)
2391 : {
2392 : /* The scanner already issued an error message, process directly
2393 : to error recovery. But do not keep the error token as
2394 : lookahead, it is too special and may lead us to an endless
2395 : loop in error recovery. */
2396 0 : yychar = YYUNDEF;
2397 0 : yytoken = YYSYMBOL_YYerror;
2398 0 : goto yyerrlab1;
2399 : }
2400 : else
2401 : {
2402 26746 : yytoken = YYTRANSLATE (yychar);
2403 : YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
2404 : }
2405 :
2406 : /* If the proper action on seeing token YYTOKEN is to reduce or to
2407 : detect an error, take that action. */
2408 26974 : yyn += yytoken;
2409 26974 : if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
2410 8528 : goto yydefault;
2411 18446 : yyn = yytable[yyn];
2412 18446 : if (yyn <= 0)
2413 : {
2414 : if (yytable_value_is_error (yyn))
2415 : goto yyerrlab;
2416 0 : yyn = -yyn;
2417 0 : goto yyreduce;
2418 : }
2419 :
2420 : /* Count tokens shifted since error; after three, turn off error
2421 : status. */
2422 18446 : if (yyerrstatus)
2423 0 : yyerrstatus--;
2424 :
2425 : /* Shift the lookahead token. */
2426 : YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
2427 18446 : yystate = yyn;
2428 : YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2429 18446 : *++yyvsp = yylval;
2430 : YY_IGNORE_MAYBE_UNINITIALIZED_END
2431 :
2432 : /* Discard the shifted token. */
2433 18446 : yychar = YYEMPTY;
2434 18446 : goto yynewstate;
2435 :
2436 :
2437 : /*-----------------------------------------------------------.
2438 : | yydefault -- do the default action for the current state. |
2439 : `-----------------------------------------------------------*/
2440 30683 : yydefault:
2441 30683 : yyn = yydefact[yystate];
2442 30683 : if (yyn == 0)
2443 0 : goto yyerrlab;
2444 30683 : goto yyreduce;
2445 :
2446 :
2447 : /*-----------------------------.
2448 : | yyreduce -- do a reduction. |
2449 : `-----------------------------*/
2450 30683 : yyreduce:
2451 : /* yyn is the number of a rule to reduce with. */
2452 30683 : yylen = yyr2[yyn];
2453 :
2454 : /* If YYLEN is nonzero, implement the default value of the action:
2455 : '$$ = $1'.
2456 :
2457 : Otherwise, the following line sets YYVAL to garbage.
2458 : This behavior is undocumented and Bison
2459 : users should not rely upon it. Assigning to YYVAL
2460 : unconditionally makes the parser a bit smaller, and it avoids a
2461 : GCC warning that YYVAL may be used uninitialized. */
2462 30683 : yyval = yyvsp[1-yylen];
2463 :
2464 :
2465 : YY_REDUCE_PRINT (yyn);
2466 30683 : switch (yyn)
2467 : {
2468 114 : case 3: /* top: element_list */
2469 : #line 313 "../src/preproc/pic/pic.ypp"
2470 : {
2471 : if (olist.head)
2472 : print_picture(olist.head);
2473 : }
2474 : #line 2475 "src/preproc/pic/pic.cpp"
2475 114 : break;
2476 :
2477 294 : case 4: /* element_list: optional_separator middle_element_list optional_separator */
2478 : #line 322 "../src/preproc/pic/pic.ypp"
2479 : { (yyval.pl) = (yyvsp[-1].pl); }
2480 : #line 2481 "src/preproc/pic/pic.cpp"
2481 294 : break;
2482 :
2483 294 : case 5: /* middle_element_list: element */
2484 : #line 327 "../src/preproc/pic/pic.ypp"
2485 : { (yyval.pl) = (yyvsp[0].pl); }
2486 : #line 2487 "src/preproc/pic/pic.cpp"
2487 294 : break;
2488 :
2489 1783 : case 6: /* middle_element_list: middle_element_list separator element */
2490 : #line 329 "../src/preproc/pic/pic.ypp"
2491 : { (yyval.pl) = (yyvsp[-2].pl); }
2492 : #line 2493 "src/preproc/pic/pic.cpp"
2493 1783 : break;
2494 :
2495 0 : case 11: /* placeless_element: FIGNAME '=' macro_name */
2496 : #line 344 "../src/preproc/pic/pic.ypp"
2497 : {
2498 : delete[] graphname;
2499 : graphname = new char[strlen((yyvsp[0].str)) + 1];
2500 : strcpy(graphname, (yyvsp[0].str));
2501 : delete[] (yyvsp[0].str);
2502 : }
2503 : #line 2504 "src/preproc/pic/pic.cpp"
2504 0 : break;
2505 :
2506 143 : case 12: /* placeless_element: VARIABLE '=' any_expr */
2507 : #line 352 "../src/preproc/pic/pic.ypp"
2508 : {
2509 : define_variable((yyvsp[-2].str), (yyvsp[0].x));
2510 : free((yyvsp[-2].str));
2511 : }
2512 : #line 2513 "src/preproc/pic/pic.cpp"
2513 143 : break;
2514 :
2515 0 : case 13: /* placeless_element: VARIABLE ':' '=' any_expr */
2516 : #line 357 "../src/preproc/pic/pic.ypp"
2517 : {
2518 : place *p = lookup_label((yyvsp[-3].str));
2519 : if (!p) {
2520 : lex_error("variable '%1' not defined", (yyvsp[-3].str));
2521 : YYABORT;
2522 : }
2523 : p->obj = 0 /* nullptr */;
2524 : p->x = (yyvsp[0].x);
2525 : p->y = 0.0;
2526 : free((yyvsp[-3].str));
2527 : }
2528 : #line 2529 "src/preproc/pic/pic.cpp"
2529 0 : break;
2530 :
2531 5 : case 14: /* placeless_element: UP */
2532 : #line 369 "../src/preproc/pic/pic.ypp"
2533 : { current_direction = UP_DIRECTION; }
2534 : #line 2535 "src/preproc/pic/pic.cpp"
2535 5 : break;
2536 :
2537 24 : case 15: /* placeless_element: DOWN */
2538 : #line 371 "../src/preproc/pic/pic.ypp"
2539 : { current_direction = DOWN_DIRECTION; }
2540 : #line 2541 "src/preproc/pic/pic.cpp"
2541 24 : break;
2542 :
2543 2 : case 16: /* placeless_element: LEFT */
2544 : #line 373 "../src/preproc/pic/pic.ypp"
2545 : { current_direction = LEFT_DIRECTION; }
2546 : #line 2547 "src/preproc/pic/pic.cpp"
2547 2 : break;
2548 :
2549 13 : case 17: /* placeless_element: RIGHT */
2550 : #line 375 "../src/preproc/pic/pic.ypp"
2551 : { current_direction = RIGHT_DIRECTION; }
2552 : #line 2553 "src/preproc/pic/pic.cpp"
2553 13 : break;
2554 :
2555 24 : case 18: /* placeless_element: COMMAND_LINE */
2556 : #line 377 "../src/preproc/pic/pic.ypp"
2557 : {
2558 : olist.append(make_command_object((yyvsp[0].lstr).str, (yyvsp[0].lstr).filename,
2559 : (yyvsp[0].lstr).lineno));
2560 : }
2561 : #line 2562 "src/preproc/pic/pic.cpp"
2562 24 : break;
2563 :
2564 0 : case 19: /* placeless_element: COMMAND print_args */
2565 : #line 382 "../src/preproc/pic/pic.ypp"
2566 : {
2567 : olist.append(make_command_object((yyvsp[0].lstr).str, (yyvsp[0].lstr).filename,
2568 : (yyvsp[0].lstr).lineno));
2569 : }
2570 : #line 2571 "src/preproc/pic/pic.cpp"
2571 0 : break;
2572 :
2573 0 : case 20: /* placeless_element: PRINT print_args */
2574 : #line 387 "../src/preproc/pic/pic.ypp"
2575 : {
2576 : fprintf(stderr, "%s\n", (yyvsp[0].lstr).str);
2577 : delete[] (yyvsp[0].lstr).str;
2578 : fflush(stderr);
2579 : }
2580 : #line 2581 "src/preproc/pic/pic.cpp"
2581 0 : break;
2582 :
2583 0 : case 21: /* $@1: %empty */
2584 : #line 393 "../src/preproc/pic/pic.ypp"
2585 : { delim_flag = 1; }
2586 : #line 2587 "src/preproc/pic/pic.cpp"
2587 0 : break;
2588 :
2589 0 : case 22: /* placeless_element: SH $@1 DELIMITED */
2590 : #line 395 "../src/preproc/pic/pic.ypp"
2591 : {
2592 : delim_flag = 0;
2593 : if (!want_unsafe_mode)
2594 : lex_error("unsafe to run command '%1'; ignoring",
2595 : (yyvsp[0].str));
2596 : else {
2597 : int retval = system((yyvsp[0].str));
2598 : if (retval < 0)
2599 : lex_error("error running command '%1': system()"
2600 : " returned %2", (yyvsp[0].str), retval);
2601 : }
2602 : delete[] (yyvsp[0].str);
2603 : }
2604 : #line 2605 "src/preproc/pic/pic.cpp"
2605 0 : break;
2606 :
2607 1 : case 23: /* placeless_element: COPY TEXT */
2608 : #line 409 "../src/preproc/pic/pic.ypp"
2609 : {
2610 : if (yychar < 0)
2611 : do_lookahead();
2612 : do_copy((yyvsp[0].lstr).str);
2613 : // do not delete the filename
2614 : }
2615 : #line 2616 "src/preproc/pic/pic.cpp"
2616 1 : break;
2617 :
2618 0 : case 24: /* $@2: %empty */
2619 : #line 416 "../src/preproc/pic/pic.ypp"
2620 : { delim_flag = 2; }
2621 : #line 2622 "src/preproc/pic/pic.cpp"
2622 0 : break;
2623 :
2624 0 : case 25: /* $@3: %empty */
2625 : #line 418 "../src/preproc/pic/pic.ypp"
2626 : { delim_flag = 0; }
2627 : #line 2628 "src/preproc/pic/pic.cpp"
2628 0 : break;
2629 :
2630 0 : case 26: /* placeless_element: COPY TEXT THRU $@2 DELIMITED $@3 until */
2631 : #line 420 "../src/preproc/pic/pic.ypp"
2632 : {
2633 : if (yychar < 0)
2634 : do_lookahead();
2635 : copy_file_thru((yyvsp[-5].lstr).str, (yyvsp[-2].str), (yyvsp[0].str));
2636 : // do not delete the filename
2637 : delete[] (yyvsp[-2].str);
2638 : delete[] (yyvsp[0].str);
2639 : }
2640 : #line 2641 "src/preproc/pic/pic.cpp"
2641 0 : break;
2642 :
2643 0 : case 27: /* $@4: %empty */
2644 : #line 429 "../src/preproc/pic/pic.ypp"
2645 : { delim_flag = 2; }
2646 : #line 2647 "src/preproc/pic/pic.cpp"
2647 0 : break;
2648 :
2649 0 : case 28: /* $@5: %empty */
2650 : #line 431 "../src/preproc/pic/pic.ypp"
2651 : { delim_flag = 0; }
2652 : #line 2653 "src/preproc/pic/pic.cpp"
2653 0 : break;
2654 :
2655 0 : case 29: /* placeless_element: COPY THRU $@4 DELIMITED $@5 until */
2656 : #line 433 "../src/preproc/pic/pic.ypp"
2657 : {
2658 : if (yychar < 0)
2659 : do_lookahead();
2660 : copy_rest_thru((yyvsp[-2].str), (yyvsp[0].str));
2661 : delete[] (yyvsp[-2].str);
2662 : delete[] (yyvsp[0].str);
2663 : }
2664 : #line 2665 "src/preproc/pic/pic.cpp"
2665 0 : break;
2666 :
2667 20 : case 30: /* $@6: %empty */
2668 : #line 441 "../src/preproc/pic/pic.ypp"
2669 : { delim_flag = 1; }
2670 : #line 2671 "src/preproc/pic/pic.cpp"
2671 20 : break;
2672 :
2673 20 : case 31: /* placeless_element: FOR VARIABLE '=' expr TO expr optional_by DO $@6 DELIMITED */
2674 : #line 443 "../src/preproc/pic/pic.ypp"
2675 : {
2676 : delim_flag = 0;
2677 : if (yychar < 0)
2678 : do_lookahead();
2679 : do_for((yyvsp[-8].str), (yyvsp[-6].x), (yyvsp[-4].x), (yyvsp[-3].by).is_multiplicative, (yyvsp[-3].by).val, (yyvsp[0].str));
2680 : }
2681 : #line 2682 "src/preproc/pic/pic.cpp"
2682 20 : break;
2683 :
2684 0 : case 32: /* placeless_element: simple_if */
2685 : #line 450 "../src/preproc/pic/pic.ypp"
2686 : {
2687 : if (yychar < 0)
2688 : do_lookahead();
2689 : if ((yyvsp[0].if_data).x != 0.0)
2690 : push_body((yyvsp[0].if_data).body);
2691 : delete[] (yyvsp[0].if_data).body;
2692 : }
2693 : #line 2694 "src/preproc/pic/pic.cpp"
2694 0 : break;
2695 :
2696 0 : case 33: /* $@7: %empty */
2697 : #line 458 "../src/preproc/pic/pic.ypp"
2698 : { delim_flag = 1; }
2699 : #line 2700 "src/preproc/pic/pic.cpp"
2700 0 : break;
2701 :
2702 0 : case 34: /* placeless_element: simple_if ELSE $@7 DELIMITED */
2703 : #line 460 "../src/preproc/pic/pic.ypp"
2704 : {
2705 : delim_flag = 0;
2706 : if (yychar < 0)
2707 : do_lookahead();
2708 : if ((yyvsp[-3].if_data).x != 0.0)
2709 : push_body((yyvsp[-3].if_data).body);
2710 : else
2711 : push_body((yyvsp[0].str));
2712 : free((yyvsp[-3].if_data).body);
2713 : free((yyvsp[0].str));
2714 : }
2715 : #line 2716 "src/preproc/pic/pic.cpp"
2716 0 : break;
2717 :
2718 0 : case 36: /* placeless_element: RESET */
2719 : #line 473 "../src/preproc/pic/pic.ypp"
2720 : { define_variable("scale", 1.0); }
2721 : #line 2722 "src/preproc/pic/pic.cpp"
2722 0 : break;
2723 :
2724 0 : case 39: /* reset_variables: RESET VARIABLE */
2725 : #line 483 "../src/preproc/pic/pic.ypp"
2726 : {
2727 : reset((yyvsp[0].str));
2728 : delete[] (yyvsp[0].str);
2729 : }
2730 : #line 2731 "src/preproc/pic/pic.cpp"
2731 0 : break;
2732 :
2733 0 : case 40: /* reset_variables: reset_variables VARIABLE */
2734 : #line 488 "../src/preproc/pic/pic.ypp"
2735 : {
2736 : reset((yyvsp[0].str));
2737 : delete[] (yyvsp[0].str);
2738 : }
2739 : #line 2740 "src/preproc/pic/pic.cpp"
2740 0 : break;
2741 :
2742 0 : case 41: /* reset_variables: reset_variables ',' VARIABLE */
2743 : #line 493 "../src/preproc/pic/pic.ypp"
2744 : {
2745 : reset((yyvsp[0].str));
2746 : delete[] (yyvsp[0].str);
2747 : }
2748 : #line 2749 "src/preproc/pic/pic.cpp"
2749 0 : break;
2750 :
2751 0 : case 42: /* print_args: print_arg */
2752 : #line 501 "../src/preproc/pic/pic.ypp"
2753 : { (yyval.lstr) = (yyvsp[0].lstr); }
2754 : #line 2755 "src/preproc/pic/pic.cpp"
2755 0 : break;
2756 :
2757 0 : case 43: /* print_args: print_args print_arg */
2758 : #line 503 "../src/preproc/pic/pic.ypp"
2759 : {
2760 : (yyval.lstr).str = new char[strlen((yyvsp[-1].lstr).str) + strlen((yyvsp[0].lstr).str) + 1];
2761 : strcpy((yyval.lstr).str, (yyvsp[-1].lstr).str);
2762 : strcat((yyval.lstr).str, (yyvsp[0].lstr).str);
2763 : delete[] (yyvsp[-1].lstr).str;
2764 : delete[] (yyvsp[0].lstr).str;
2765 : if ((yyvsp[-1].lstr).filename) {
2766 : (yyval.lstr).filename = (yyvsp[-1].lstr).filename;
2767 : (yyval.lstr).lineno = (yyvsp[-1].lstr).lineno;
2768 : }
2769 : else if ((yyvsp[0].lstr).filename) {
2770 : (yyval.lstr).filename = (yyvsp[0].lstr).filename;
2771 : (yyval.lstr).lineno = (yyvsp[0].lstr).lineno;
2772 : }
2773 : }
2774 : #line 2775 "src/preproc/pic/pic.cpp"
2775 0 : break;
2776 :
2777 0 : case 44: /* print_arg: expr */
2778 : #line 522 "../src/preproc/pic/pic.ypp"
2779 : {
2780 : (yyval.lstr).str = new char[GDIGITS + 1];
2781 : sprintf((yyval.lstr).str, "%g", (yyvsp[0].x));
2782 : (yyval.lstr).filename = 0 /* nullptr */;
2783 : (yyval.lstr).lineno = 0;
2784 : }
2785 : #line 2786 "src/preproc/pic/pic.cpp"
2786 0 : break;
2787 :
2788 0 : case 45: /* print_arg: text */
2789 : #line 529 "../src/preproc/pic/pic.ypp"
2790 : { (yyval.lstr) = (yyvsp[0].lstr); }
2791 : #line 2792 "src/preproc/pic/pic.cpp"
2792 0 : break;
2793 :
2794 0 : case 46: /* print_arg: position */
2795 : #line 531 "../src/preproc/pic/pic.ypp"
2796 : {
2797 : (yyval.lstr).str = new char[GDIGITS + 2 + GDIGITS + 1];
2798 : sprintf((yyval.lstr).str, "%g, %g", (yyvsp[0].pair).x, (yyvsp[0].pair).y);
2799 : (yyval.lstr).filename = 0 /* nullptr */;
2800 : (yyval.lstr).lineno = 0;
2801 : }
2802 : #line 2803 "src/preproc/pic/pic.cpp"
2803 0 : break;
2804 :
2805 0 : case 47: /* $@8: %empty */
2806 : #line 541 "../src/preproc/pic/pic.ypp"
2807 : { delim_flag = 1; }
2808 : #line 2809 "src/preproc/pic/pic.cpp"
2809 0 : break;
2810 :
2811 0 : case 48: /* simple_if: IF any_expr THEN $@8 DELIMITED */
2812 : #line 543 "../src/preproc/pic/pic.ypp"
2813 : {
2814 : delim_flag = 0;
2815 : (yyval.if_data).x = (yyvsp[-3].x);
2816 : (yyval.if_data).body = (yyvsp[0].str);
2817 : }
2818 : #line 2819 "src/preproc/pic/pic.cpp"
2819 0 : break;
2820 :
2821 0 : case 49: /* until: %empty */
2822 : #line 552 "../src/preproc/pic/pic.ypp"
2823 : { (yyval.str) = 0; }
2824 : #line 2825 "src/preproc/pic/pic.cpp"
2825 0 : break;
2826 :
2827 0 : case 50: /* until: UNTIL TEXT */
2828 : #line 554 "../src/preproc/pic/pic.ypp"
2829 : { (yyval.str) = (yyvsp[0].lstr).str; }
2830 : #line 2831 "src/preproc/pic/pic.cpp"
2831 0 : break;
2832 :
2833 487 : case 51: /* any_expr: expr */
2834 : #line 559 "../src/preproc/pic/pic.ypp"
2835 : { (yyval.x) = (yyvsp[0].x); }
2836 : #line 2837 "src/preproc/pic/pic.cpp"
2837 487 : break;
2838 :
2839 0 : case 52: /* any_expr: text_expr */
2840 : #line 561 "../src/preproc/pic/pic.ypp"
2841 : { (yyval.x) = (yyvsp[0].x); }
2842 : #line 2843 "src/preproc/pic/pic.cpp"
2843 0 : break;
2844 :
2845 0 : case 53: /* text_expr: text EQUALEQUAL text */
2846 : #line 566 "../src/preproc/pic/pic.ypp"
2847 : {
2848 : (yyval.x) = strcmp((yyvsp[-2].lstr).str, (yyvsp[0].lstr).str) == 0;
2849 : delete[] (yyvsp[-2].lstr).str;
2850 : delete[] (yyvsp[0].lstr).str;
2851 : }
2852 : #line 2853 "src/preproc/pic/pic.cpp"
2853 0 : break;
2854 :
2855 0 : case 54: /* text_expr: text NOTEQUAL text */
2856 : #line 572 "../src/preproc/pic/pic.ypp"
2857 : {
2858 : (yyval.x) = strcmp((yyvsp[-2].lstr).str, (yyvsp[0].lstr).str) != 0;
2859 : delete[] (yyvsp[-2].lstr).str;
2860 : delete[] (yyvsp[0].lstr).str;
2861 : }
2862 : #line 2863 "src/preproc/pic/pic.cpp"
2863 0 : break;
2864 :
2865 0 : case 55: /* text_expr: text_expr ANDAND text_expr */
2866 : #line 578 "../src/preproc/pic/pic.ypp"
2867 : { (yyval.x) = ((yyvsp[-2].x) != 0.0 && (yyvsp[0].x) != 0.0); }
2868 : #line 2869 "src/preproc/pic/pic.cpp"
2869 0 : break;
2870 :
2871 0 : case 56: /* text_expr: text_expr ANDAND expr */
2872 : #line 580 "../src/preproc/pic/pic.ypp"
2873 : { (yyval.x) = ((yyvsp[-2].x) != 0.0 && (yyvsp[0].x) != 0.0); }
2874 : #line 2875 "src/preproc/pic/pic.cpp"
2875 0 : break;
2876 :
2877 0 : case 57: /* text_expr: expr ANDAND text_expr */
2878 : #line 582 "../src/preproc/pic/pic.ypp"
2879 : { (yyval.x) = ((yyvsp[-2].x) != 0.0 && (yyvsp[0].x) != 0.0); }
2880 : #line 2881 "src/preproc/pic/pic.cpp"
2881 0 : break;
2882 :
2883 0 : case 58: /* text_expr: text_expr OROR text_expr */
2884 : #line 584 "../src/preproc/pic/pic.ypp"
2885 : { (yyval.x) = ((yyvsp[-2].x) != 0.0 || (yyvsp[0].x) != 0.0); }
2886 : #line 2887 "src/preproc/pic/pic.cpp"
2887 0 : break;
2888 :
2889 0 : case 59: /* text_expr: text_expr OROR expr */
2890 : #line 586 "../src/preproc/pic/pic.ypp"
2891 : { (yyval.x) = ((yyvsp[-2].x) != 0.0 || (yyvsp[0].x) != 0.0); }
2892 : #line 2893 "src/preproc/pic/pic.cpp"
2893 0 : break;
2894 :
2895 0 : case 60: /* text_expr: expr OROR text_expr */
2896 : #line 588 "../src/preproc/pic/pic.ypp"
2897 : { (yyval.x) = ((yyvsp[-2].x) != 0.0 || (yyvsp[0].x) != 0.0); }
2898 : #line 2899 "src/preproc/pic/pic.cpp"
2899 0 : break;
2900 :
2901 0 : case 61: /* text_expr: '!' text_expr */
2902 : #line 590 "../src/preproc/pic/pic.ypp"
2903 : { (yyval.x) = ((yyvsp[0].x) == 0.0); }
2904 : #line 2905 "src/preproc/pic/pic.cpp"
2905 0 : break;
2906 :
2907 18 : case 62: /* optional_by: %empty */
2908 : #line 596 "../src/preproc/pic/pic.ypp"
2909 : {
2910 : (yyval.by).val = 1.0;
2911 : (yyval.by).is_multiplicative = 0;
2912 : }
2913 : #line 2914 "src/preproc/pic/pic.cpp"
2914 18 : break;
2915 :
2916 2 : case 63: /* optional_by: BY expr */
2917 : #line 601 "../src/preproc/pic/pic.ypp"
2918 : {
2919 : (yyval.by).val = (yyvsp[0].x);
2920 : (yyval.by).is_multiplicative = 0;
2921 : }
2922 : #line 2923 "src/preproc/pic/pic.cpp"
2923 2 : break;
2924 :
2925 0 : case 64: /* optional_by: BY '*' expr */
2926 : #line 606 "../src/preproc/pic/pic.ypp"
2927 : {
2928 : (yyval.by).val = (yyvsp[0].x);
2929 : (yyval.by).is_multiplicative = 1;
2930 : }
2931 : #line 2932 "src/preproc/pic/pic.cpp"
2932 0 : break;
2933 :
2934 1804 : case 65: /* element: object_spec */
2935 : #line 614 "../src/preproc/pic/pic.ypp"
2936 : {
2937 : (yyval.pl).obj = (yyvsp[0].spec)->make_object(¤t_position,
2938 : ¤t_direction);
2939 : if ((yyval.pl).obj == 0 /* nullptr */)
2940 : YYABORT;
2941 : delete (yyvsp[0].spec);
2942 : if ((yyval.pl).obj)
2943 : olist.append((yyval.pl).obj);
2944 : else {
2945 : (yyval.pl).x = current_position.x;
2946 : (yyval.pl).y = current_position.y;
2947 : }
2948 : }
2949 : #line 2950 "src/preproc/pic/pic.cpp"
2950 1804 : break;
2951 :
2952 93 : case 66: /* element: LABEL ':' optional_separator element */
2953 : #line 628 "../src/preproc/pic/pic.ypp"
2954 : {
2955 : (yyval.pl) = (yyvsp[0].pl);
2956 : define_label((yyvsp[-3].str), & (yyval.pl));
2957 : free((yyvsp[-3].str));
2958 : }
2959 : #line 2960 "src/preproc/pic/pic.cpp"
2960 93 : break;
2961 :
2962 3 : case 67: /* element: LABEL ':' optional_separator position_not_place */
2963 : #line 634 "../src/preproc/pic/pic.ypp"
2964 : {
2965 : (yyval.pl).obj = 0 /* nullptr */;
2966 : (yyval.pl).x = (yyvsp[0].pair).x;
2967 : (yyval.pl).y = (yyvsp[0].pair).y;
2968 : define_label((yyvsp[-3].str), & (yyval.pl));
2969 : free((yyvsp[-3].str));
2970 : }
2971 : #line 2972 "src/preproc/pic/pic.cpp"
2972 3 : break;
2973 :
2974 6 : case 68: /* element: LABEL ':' optional_separator place */
2975 : #line 642 "../src/preproc/pic/pic.ypp"
2976 : {
2977 : (yyval.pl) = (yyvsp[0].pl);
2978 : define_label((yyvsp[-3].str), & (yyval.pl));
2979 : free((yyvsp[-3].str));
2980 : }
2981 : #line 2982 "src/preproc/pic/pic.cpp"
2982 6 : break;
2983 :
2984 32 : case 69: /* @9: %empty */
2985 : #line 648 "../src/preproc/pic/pic.ypp"
2986 : {
2987 : (yyval.state).x = current_position.x;
2988 : (yyval.state).y = current_position.y;
2989 : (yyval.state).dir = current_direction;
2990 : }
2991 : #line 2992 "src/preproc/pic/pic.cpp"
2992 32 : break;
2993 :
2994 32 : case 70: /* $@10: %empty */
2995 : #line 654 "../src/preproc/pic/pic.ypp"
2996 : {
2997 : current_position.x = (yyvsp[-2].state).x;
2998 : current_position.y = (yyvsp[-2].state).y;
2999 : current_direction = (yyvsp[-2].state).dir;
3000 : }
3001 : #line 3002 "src/preproc/pic/pic.cpp"
3002 32 : break;
3003 :
3004 32 : case 71: /* element: '{' @9 element_list '}' $@10 optional_element */
3005 : #line 660 "../src/preproc/pic/pic.ypp"
3006 : {
3007 : (yyval.pl) = (yyvsp[-3].pl);
3008 : }
3009 : #line 3010 "src/preproc/pic/pic.cpp"
3010 32 : break;
3011 :
3012 232 : case 72: /* element: placeless_element */
3013 : #line 664 "../src/preproc/pic/pic.ypp"
3014 : {
3015 : (yyval.pl).obj = 0 /* nullptr */;
3016 : (yyval.pl).x = current_position.x;
3017 : (yyval.pl).y = current_position.y;
3018 : }
3019 : #line 3020 "src/preproc/pic/pic.cpp"
3020 232 : break;
3021 :
3022 32 : case 73: /* optional_element: %empty */
3023 : #line 673 "../src/preproc/pic/pic.ypp"
3024 : {}
3025 : #line 3026 "src/preproc/pic/pic.cpp"
3026 32 : break;
3027 :
3028 0 : case 74: /* optional_element: element */
3029 : #line 675 "../src/preproc/pic/pic.ypp"
3030 : {}
3031 : #line 3032 "src/preproc/pic/pic.cpp"
3032 0 : break;
3033 :
3034 367 : case 75: /* object_spec: BOX */
3035 : #line 680 "../src/preproc/pic/pic.ypp"
3036 : { (yyval.spec) = new object_spec(BOX_OBJECT); }
3037 : #line 3038 "src/preproc/pic/pic.cpp"
3038 367 : break;
3039 :
3040 164 : case 76: /* object_spec: CIRCLE */
3041 : #line 682 "../src/preproc/pic/pic.ypp"
3042 : { (yyval.spec) = new object_spec(CIRCLE_OBJECT); }
3043 : #line 3044 "src/preproc/pic/pic.cpp"
3044 164 : break;
3045 :
3046 29 : case 77: /* object_spec: ELLIPSE */
3047 : #line 684 "../src/preproc/pic/pic.ypp"
3048 : { (yyval.spec) = new object_spec(ELLIPSE_OBJECT); }
3049 : #line 3050 "src/preproc/pic/pic.cpp"
3050 29 : break;
3051 :
3052 20 : case 78: /* object_spec: ARC */
3053 : #line 686 "../src/preproc/pic/pic.ypp"
3054 : {
3055 : (yyval.spec) = new object_spec(ARC_OBJECT);
3056 : (yyval.spec)->dir = current_direction;
3057 : }
3058 : #line 3059 "src/preproc/pic/pic.cpp"
3059 20 : break;
3060 :
3061 88 : case 79: /* object_spec: LINE */
3062 : #line 691 "../src/preproc/pic/pic.ypp"
3063 : {
3064 : (yyval.spec) = new object_spec(LINE_OBJECT);
3065 : lookup_variable("lineht", & (yyval.spec)->segment_height);
3066 : lookup_variable("linewid", & (yyval.spec)->segment_width);
3067 : (yyval.spec)->dir = current_direction;
3068 : }
3069 : #line 3070 "src/preproc/pic/pic.cpp"
3070 88 : break;
3071 :
3072 7 : case 80: /* object_spec: POLYGON */
3073 : #line 698 "../src/preproc/pic/pic.ypp"
3074 : {
3075 : (yyval.spec) = new object_spec(POLYGON_OBJECT);
3076 : lookup_variable("lineht", & (yyval.spec)->segment_height);
3077 : lookup_variable("linewid", & (yyval.spec)->segment_width);
3078 : (yyval.spec)->dir = current_direction;
3079 : }
3080 : #line 3081 "src/preproc/pic/pic.cpp"
3081 7 : break;
3082 :
3083 163 : case 81: /* object_spec: ARROW */
3084 : #line 705 "../src/preproc/pic/pic.ypp"
3085 : {
3086 : (yyval.spec) = new object_spec(ARROW_OBJECT);
3087 : lookup_variable("lineht", & (yyval.spec)->segment_height);
3088 : lookup_variable("linewid", & (yyval.spec)->segment_width);
3089 : (yyval.spec)->dir = current_direction;
3090 : }
3091 : #line 3092 "src/preproc/pic/pic.cpp"
3092 163 : break;
3093 :
3094 230 : case 82: /* object_spec: MOVE */
3095 : #line 712 "../src/preproc/pic/pic.ypp"
3096 : {
3097 : (yyval.spec) = new object_spec(MOVE_OBJECT);
3098 : lookup_variable("moveht", & (yyval.spec)->segment_height);
3099 : lookup_variable("movewid", & (yyval.spec)->segment_width);
3100 : (yyval.spec)->dir = current_direction;
3101 : }
3102 : #line 3103 "src/preproc/pic/pic.cpp"
3103 230 : break;
3104 :
3105 10 : case 83: /* object_spec: SPLINE */
3106 : #line 719 "../src/preproc/pic/pic.ypp"
3107 : {
3108 : (yyval.spec) = new object_spec(SPLINE_OBJECT);
3109 : lookup_variable("lineht", & (yyval.spec)->segment_height);
3110 : lookup_variable("linewid", & (yyval.spec)->segment_width);
3111 : (yyval.spec)->dir = current_direction;
3112 : }
3113 : #line 3114 "src/preproc/pic/pic.cpp"
3114 10 : break;
3115 :
3116 578 : case 84: /* object_spec: text */
3117 : #line 726 "../src/preproc/pic/pic.ypp"
3118 : {
3119 : (yyval.spec) = new object_spec(TEXT_OBJECT);
3120 : (yyval.spec)->text = new text_item((yyvsp[0].lstr).str, (yyvsp[0].lstr).filename, (yyvsp[0].lstr).lineno);
3121 : }
3122 : #line 3123 "src/preproc/pic/pic.cpp"
3123 578 : break;
3124 :
3125 0 : case 85: /* object_spec: PLOT expr */
3126 : #line 731 "../src/preproc/pic/pic.ypp"
3127 : {
3128 : lex_warning("'plot' is deprecated; use 'sprintf'"
3129 : " instead");
3130 : (yyval.spec) = new object_spec(TEXT_OBJECT);
3131 : (yyval.spec)->text = new text_item(format_number(0, (yyvsp[0].x)), 0, -1);
3132 : }
3133 : #line 3134 "src/preproc/pic/pic.cpp"
3134 0 : break;
3135 :
3136 0 : case 86: /* object_spec: PLOT expr text */
3137 : #line 738 "../src/preproc/pic/pic.ypp"
3138 : {
3139 : (yyval.spec) = new object_spec(TEXT_OBJECT);
3140 : (yyval.spec)->text = new text_item(format_number((yyvsp[0].lstr).str, (yyvsp[-1].x)),
3141 : (yyvsp[0].lstr).filename, (yyvsp[0].lstr).lineno);
3142 : delete[] (yyvsp[0].lstr).str;
3143 : }
3144 : #line 3145 "src/preproc/pic/pic.cpp"
3145 0 : break;
3146 :
3147 148 : case 87: /* @11: %empty */
3148 : #line 745 "../src/preproc/pic/pic.ypp"
3149 : {
3150 : saved_state *p = new saved_state;
3151 : (yyval.pstate) = p;
3152 : p->x = current_position.x;
3153 : p->y = current_position.y;
3154 : p->dir = current_direction;
3155 : p->tbl = current_table;
3156 : p->prev = current_saved_state;
3157 : current_position.x = 0.0;
3158 : current_position.y = 0.0;
3159 : current_table = new PTABLE(place);
3160 : current_saved_state = p;
3161 : olist.append(make_mark_object());
3162 : }
3163 : #line 3164 "src/preproc/pic/pic.cpp"
3164 148 : break;
3165 :
3166 148 : case 88: /* object_spec: '[' @11 element_list ']' */
3167 : #line 760 "../src/preproc/pic/pic.ypp"
3168 : {
3169 : current_position.x = (yyvsp[-2].pstate)->x;
3170 : current_position.y = (yyvsp[-2].pstate)->y;
3171 : current_direction = (yyvsp[-2].pstate)->dir;
3172 : (yyval.spec) = new object_spec(BLOCK_OBJECT);
3173 : olist.wrap_up_block(& (yyval.spec)->oblist);
3174 : (yyval.spec)->tbl = current_table;
3175 : current_table = (yyvsp[-2].pstate)->tbl;
3176 : current_saved_state = (yyvsp[-2].pstate)->prev;
3177 : delete (yyvsp[-2].pstate);
3178 : }
3179 : #line 3180 "src/preproc/pic/pic.cpp"
3180 148 : break;
3181 :
3182 184 : case 89: /* object_spec: object_spec HEIGHT expr */
3183 : #line 772 "../src/preproc/pic/pic.ypp"
3184 : {
3185 : (yyval.spec) = (yyvsp[-2].spec);
3186 : (yyval.spec)->height = (yyvsp[0].x);
3187 : (yyval.spec)->flags |= HAS_HEIGHT;
3188 : }
3189 : #line 3190 "src/preproc/pic/pic.cpp"
3190 184 : break;
3191 :
3192 170 : case 90: /* object_spec: object_spec RADIUS expr */
3193 : #line 778 "../src/preproc/pic/pic.ypp"
3194 : {
3195 : (yyval.spec) = (yyvsp[-2].spec);
3196 : (yyval.spec)->radius = (yyvsp[0].x);
3197 : (yyval.spec)->flags |= HAS_RADIUS;
3198 : }
3199 : #line 3200 "src/preproc/pic/pic.cpp"
3200 170 : break;
3201 :
3202 184 : case 91: /* object_spec: object_spec WIDTH expr */
3203 : #line 784 "../src/preproc/pic/pic.ypp"
3204 : {
3205 : (yyval.spec) = (yyvsp[-2].spec);
3206 : (yyval.spec)->width = (yyvsp[0].x);
3207 : (yyval.spec)->flags |= HAS_WIDTH;
3208 : }
3209 : #line 3210 "src/preproc/pic/pic.cpp"
3210 184 : break;
3211 :
3212 2 : case 92: /* object_spec: object_spec DIAMETER expr */
3213 : #line 790 "../src/preproc/pic/pic.ypp"
3214 : {
3215 : (yyval.spec) = (yyvsp[-2].spec);
3216 : (yyval.spec)->radius = (yyvsp[0].x)/2.0;
3217 : (yyval.spec)->flags |= HAS_RADIUS;
3218 : }
3219 : #line 3220 "src/preproc/pic/pic.cpp"
3220 2 : break;
3221 :
3222 71 : case 93: /* object_spec: object_spec expr */
3223 : #line 796 "../src/preproc/pic/pic.ypp"
3224 : {
3225 : (yyval.spec) = (yyvsp[-1].spec);
3226 : (yyval.spec)->flags |= HAS_SEGMENT;
3227 : switch ((yyval.spec)->dir) {
3228 : case UP_DIRECTION:
3229 : (yyval.spec)->segment_pos.y += (yyvsp[0].x);
3230 : break;
3231 : case DOWN_DIRECTION:
3232 : (yyval.spec)->segment_pos.y -= (yyvsp[0].x);
3233 : break;
3234 : case RIGHT_DIRECTION:
3235 : (yyval.spec)->segment_pos.x += (yyvsp[0].x);
3236 : break;
3237 : case LEFT_DIRECTION:
3238 : (yyval.spec)->segment_pos.x -= (yyvsp[0].x);
3239 : break;
3240 : }
3241 : }
3242 : #line 3243 "src/preproc/pic/pic.cpp"
3243 71 : break;
3244 :
3245 30 : case 94: /* object_spec: object_spec UP */
3246 : #line 815 "../src/preproc/pic/pic.ypp"
3247 : {
3248 : (yyval.spec) = (yyvsp[-1].spec);
3249 : (yyval.spec)->dir = UP_DIRECTION;
3250 : (yyval.spec)->flags |= HAS_SEGMENT;
3251 : (yyval.spec)->segment_pos.y += (yyval.spec)->segment_height;
3252 : }
3253 : #line 3254 "src/preproc/pic/pic.cpp"
3254 30 : break;
3255 :
3256 29 : case 95: /* object_spec: object_spec UP expr */
3257 : #line 822 "../src/preproc/pic/pic.ypp"
3258 : {
3259 : (yyval.spec) = (yyvsp[-2].spec);
3260 : (yyval.spec)->dir = UP_DIRECTION;
3261 : (yyval.spec)->flags |= HAS_SEGMENT;
3262 : (yyval.spec)->segment_pos.y += (yyvsp[0].x);
3263 : }
3264 : #line 3265 "src/preproc/pic/pic.cpp"
3265 29 : break;
3266 :
3267 44 : case 96: /* object_spec: object_spec DOWN */
3268 : #line 829 "../src/preproc/pic/pic.ypp"
3269 : {
3270 : (yyval.spec) = (yyvsp[-1].spec);
3271 : (yyval.spec)->dir = DOWN_DIRECTION;
3272 : (yyval.spec)->flags |= HAS_SEGMENT;
3273 : (yyval.spec)->segment_pos.y -= (yyval.spec)->segment_height;
3274 : }
3275 : #line 3276 "src/preproc/pic/pic.cpp"
3276 44 : break;
3277 :
3278 66 : case 97: /* object_spec: object_spec DOWN expr */
3279 : #line 836 "../src/preproc/pic/pic.ypp"
3280 : {
3281 : (yyval.spec) = (yyvsp[-2].spec);
3282 : (yyval.spec)->dir = DOWN_DIRECTION;
3283 : (yyval.spec)->flags |= HAS_SEGMENT;
3284 : (yyval.spec)->segment_pos.y -= (yyvsp[0].x);
3285 : }
3286 : #line 3287 "src/preproc/pic/pic.cpp"
3287 66 : break;
3288 :
3289 24 : case 98: /* object_spec: object_spec RIGHT */
3290 : #line 843 "../src/preproc/pic/pic.ypp"
3291 : {
3292 : (yyval.spec) = (yyvsp[-1].spec);
3293 : (yyval.spec)->dir = RIGHT_DIRECTION;
3294 : (yyval.spec)->flags |= HAS_SEGMENT;
3295 : (yyval.spec)->segment_pos.x += (yyval.spec)->segment_width;
3296 : }
3297 : #line 3298 "src/preproc/pic/pic.cpp"
3298 24 : break;
3299 :
3300 88 : case 99: /* object_spec: object_spec RIGHT expr */
3301 : #line 850 "../src/preproc/pic/pic.ypp"
3302 : {
3303 : (yyval.spec) = (yyvsp[-2].spec);
3304 : (yyval.spec)->dir = RIGHT_DIRECTION;
3305 : (yyval.spec)->flags |= HAS_SEGMENT;
3306 : (yyval.spec)->segment_pos.x += (yyvsp[0].x);
3307 : }
3308 : #line 3309 "src/preproc/pic/pic.cpp"
3309 88 : break;
3310 :
3311 10 : case 100: /* object_spec: object_spec LEFT */
3312 : #line 857 "../src/preproc/pic/pic.ypp"
3313 : {
3314 : (yyval.spec) = (yyvsp[-1].spec);
3315 : (yyval.spec)->dir = LEFT_DIRECTION;
3316 : (yyval.spec)->flags |= HAS_SEGMENT;
3317 : (yyval.spec)->segment_pos.x -= (yyval.spec)->segment_width;
3318 : }
3319 : #line 3320 "src/preproc/pic/pic.cpp"
3320 10 : break;
3321 :
3322 49 : case 101: /* object_spec: object_spec LEFT expr */
3323 : #line 864 "../src/preproc/pic/pic.ypp"
3324 : {
3325 : (yyval.spec) = (yyvsp[-2].spec);
3326 : (yyval.spec)->dir = LEFT_DIRECTION;
3327 : (yyval.spec)->flags |= HAS_SEGMENT;
3328 : (yyval.spec)->segment_pos.x -= (yyvsp[0].x);
3329 : }
3330 : #line 3331 "src/preproc/pic/pic.cpp"
3331 49 : break;
3332 :
3333 141 : case 102: /* object_spec: object_spec FROM position */
3334 : #line 871 "../src/preproc/pic/pic.ypp"
3335 : {
3336 : (yyval.spec) = (yyvsp[-2].spec);
3337 : (yyval.spec)->flags |= HAS_FROM;
3338 : (yyval.spec)->from.x = (yyvsp[0].pair).x;
3339 : (yyval.spec)->from.y = (yyvsp[0].pair).y;
3340 : }
3341 : #line 3342 "src/preproc/pic/pic.cpp"
3342 141 : break;
3343 :
3344 54 : case 103: /* object_spec: object_spec TO position */
3345 : #line 878 "../src/preproc/pic/pic.ypp"
3346 : {
3347 : (yyval.spec) = (yyvsp[-2].spec);
3348 : if ((yyval.spec)->flags & HAS_SEGMENT)
3349 : (yyval.spec)->segment_list = new segment((yyval.spec)->segment_pos,
3350 : (yyval.spec)->segment_is_absolute,
3351 : (yyval.spec)->segment_list);
3352 : (yyval.spec)->flags |= HAS_SEGMENT;
3353 : (yyval.spec)->segment_pos.x = (yyvsp[0].pair).x;
3354 : (yyval.spec)->segment_pos.y = (yyvsp[0].pair).y;
3355 : (yyval.spec)->segment_is_absolute = 1;
3356 : (yyval.spec)->flags |= HAS_TO;
3357 : (yyval.spec)->to.x = (yyvsp[0].pair).x;
3358 : (yyval.spec)->to.y = (yyvsp[0].pair).y;
3359 : }
3360 : #line 3361 "src/preproc/pic/pic.cpp"
3361 54 : break;
3362 :
3363 816 : case 104: /* object_spec: object_spec AT position */
3364 : #line 893 "../src/preproc/pic/pic.ypp"
3365 : {
3366 : (yyval.spec) = (yyvsp[-2].spec);
3367 : (yyval.spec)->flags |= HAS_AT;
3368 : (yyval.spec)->at.x = (yyvsp[0].pair).x;
3369 : (yyval.spec)->at.y = (yyvsp[0].pair).y;
3370 : if ((yyval.spec)->type != ARC_OBJECT) {
3371 : (yyval.spec)->flags |= HAS_FROM;
3372 : (yyval.spec)->from.x = (yyvsp[0].pair).x;
3373 : (yyval.spec)->from.y = (yyvsp[0].pair).y;
3374 : }
3375 : }
3376 : #line 3377 "src/preproc/pic/pic.cpp"
3377 816 : break;
3378 :
3379 134 : case 105: /* object_spec: object_spec WITH path */
3380 : #line 905 "../src/preproc/pic/pic.ypp"
3381 : {
3382 : (yyval.spec) = (yyvsp[-2].spec);
3383 : (yyval.spec)->flags |= HAS_WITH;
3384 : (yyval.spec)->with = (yyvsp[0].pth);
3385 : }
3386 : #line 3387 "src/preproc/pic/pic.cpp"
3387 134 : break;
3388 :
3389 2 : case 106: /* object_spec: object_spec WITH vertex */
3390 : #line 911 "../src/preproc/pic/pic.ypp"
3391 : {
3392 : (yyval.spec) = (yyvsp[-2].spec);
3393 : (yyval.spec)->flags |= HAS_WITH;
3394 : (yyval.spec)->with = new path((yyvsp[0].ver).crn);
3395 : (yyval.spec)->vertex_number = (yyvsp[0].ver).vertex_number;
3396 : (yyval.spec)->is_edge = (yyvsp[0].ver).is_edge;
3397 : }
3398 : #line 3399 "src/preproc/pic/pic.cpp"
3399 2 : break;
3400 :
3401 0 : case 107: /* object_spec: object_spec WITH position */
3402 : #line 919 "../src/preproc/pic/pic.ypp"
3403 : {
3404 : (yyval.spec) = (yyvsp[-2].spec);
3405 : (yyval.spec)->flags |= HAS_WITH;
3406 : position pos;
3407 : pos.x = (yyvsp[0].pair).x;
3408 : pos.y = (yyvsp[0].pair).y;
3409 : (yyval.spec)->with = new path(pos);
3410 : }
3411 : #line 3412 "src/preproc/pic/pic.cpp"
3412 0 : break;
3413 :
3414 0 : case 108: /* object_spec: object_spec BY expr_pair */
3415 : #line 928 "../src/preproc/pic/pic.ypp"
3416 : {
3417 : (yyval.spec) = (yyvsp[-2].spec);
3418 : (yyval.spec)->flags |= HAS_SEGMENT;
3419 : (yyval.spec)->segment_pos.x += (yyvsp[0].pair).x;
3420 : (yyval.spec)->segment_pos.y += (yyvsp[0].pair).y;
3421 : }
3422 : #line 3423 "src/preproc/pic/pic.cpp"
3423 0 : break;
3424 :
3425 51 : case 109: /* object_spec: object_spec THEN */
3426 : #line 935 "../src/preproc/pic/pic.ypp"
3427 : {
3428 : (yyval.spec) = (yyvsp[-1].spec);
3429 : if (!((yyval.spec)->flags & HAS_SEGMENT))
3430 : switch ((yyval.spec)->dir) {
3431 : case UP_DIRECTION:
3432 : (yyval.spec)->segment_pos.y += (yyval.spec)->segment_width;
3433 : break;
3434 : case DOWN_DIRECTION:
3435 : (yyval.spec)->segment_pos.y -= (yyval.spec)->segment_width;
3436 : break;
3437 : case RIGHT_DIRECTION:
3438 : (yyval.spec)->segment_pos.x += (yyval.spec)->segment_width;
3439 : break;
3440 : case LEFT_DIRECTION:
3441 : (yyval.spec)->segment_pos.x -= (yyval.spec)->segment_width;
3442 : break;
3443 : }
3444 : (yyval.spec)->segment_list = new segment((yyval.spec)->segment_pos,
3445 : (yyval.spec)->segment_is_absolute,
3446 : (yyval.spec)->segment_list);
3447 : (yyval.spec)->flags &= ~HAS_SEGMENT;
3448 : (yyval.spec)->segment_pos.x = (yyval.spec)->segment_pos.y = 0.0;
3449 : (yyval.spec)->segment_is_absolute = 0;
3450 : }
3451 : #line 3452 "src/preproc/pic/pic.cpp"
3452 51 : break;
3453 :
3454 0 : case 110: /* object_spec: object_spec SOLID */
3455 : #line 960 "../src/preproc/pic/pic.ypp"
3456 : {
3457 : (yyval.spec) = (yyvsp[-1].spec); // nothing
3458 : }
3459 : #line 3460 "src/preproc/pic/pic.cpp"
3460 0 : break;
3461 :
3462 48 : case 111: /* object_spec: object_spec DOTTED */
3463 : #line 964 "../src/preproc/pic/pic.ypp"
3464 : {
3465 : (yyval.spec) = (yyvsp[-1].spec);
3466 : (yyval.spec)->flags |= IS_DOTTED;
3467 : lookup_variable("dashwid", & (yyval.spec)->dash_width);
3468 : }
3469 : #line 3470 "src/preproc/pic/pic.cpp"
3470 48 : break;
3471 :
3472 8 : case 112: /* object_spec: object_spec DOTTED expr */
3473 : #line 970 "../src/preproc/pic/pic.ypp"
3474 : {
3475 : (yyval.spec) = (yyvsp[-2].spec);
3476 : (yyval.spec)->flags |= IS_DOTTED;
3477 : (yyval.spec)->dash_width = (yyvsp[0].x);
3478 : }
3479 : #line 3480 "src/preproc/pic/pic.cpp"
3480 8 : break;
3481 :
3482 21 : case 113: /* object_spec: object_spec DASHED */
3483 : #line 976 "../src/preproc/pic/pic.ypp"
3484 : {
3485 : (yyval.spec) = (yyvsp[-1].spec);
3486 : (yyval.spec)->flags |= IS_DASHED;
3487 : lookup_variable("dashwid", & (yyval.spec)->dash_width);
3488 : }
3489 : #line 3490 "src/preproc/pic/pic.cpp"
3490 21 : break;
3491 :
3492 8 : case 114: /* object_spec: object_spec DASHED expr */
3493 : #line 982 "../src/preproc/pic/pic.ypp"
3494 : {
3495 : (yyval.spec) = (yyvsp[-2].spec);
3496 : (yyval.spec)->flags |= IS_DASHED;
3497 : (yyval.spec)->dash_width = (yyvsp[0].x);
3498 : }
3499 : #line 3500 "src/preproc/pic/pic.cpp"
3500 8 : break;
3501 :
3502 122 : case 115: /* object_spec: object_spec FILL */
3503 : #line 988 "../src/preproc/pic/pic.ypp"
3504 : {
3505 : (yyval.spec) = (yyvsp[-1].spec);
3506 : (yyval.spec)->flags |= IS_DEFAULT_FILLED;
3507 : }
3508 : #line 3509 "src/preproc/pic/pic.cpp"
3509 122 : break;
3510 :
3511 83 : case 116: /* object_spec: object_spec FILL expr */
3512 : #line 993 "../src/preproc/pic/pic.ypp"
3513 : {
3514 : (yyval.spec) = (yyvsp[-2].spec);
3515 : (yyval.spec)->flags |= IS_FILLED;
3516 : (yyval.spec)->fill = (yyvsp[0].x);
3517 : }
3518 : #line 3519 "src/preproc/pic/pic.cpp"
3519 83 : break;
3520 :
3521 16 : case 117: /* object_spec: object_spec XSLANTED expr */
3522 : #line 999 "../src/preproc/pic/pic.ypp"
3523 : {
3524 : (yyval.spec) = (yyvsp[-2].spec);
3525 : (yyval.spec)->flags |= IS_XSLANTED;
3526 : (yyval.spec)->xslanted = (yyvsp[0].x);
3527 : }
3528 : #line 3529 "src/preproc/pic/pic.cpp"
3529 16 : break;
3530 :
3531 16 : case 118: /* object_spec: object_spec YSLANTED expr */
3532 : #line 1005 "../src/preproc/pic/pic.ypp"
3533 : {
3534 : (yyval.spec) = (yyvsp[-2].spec);
3535 : (yyval.spec)->flags |= IS_YSLANTED;
3536 : (yyval.spec)->yslanted = (yyvsp[0].x);
3537 : }
3538 : #line 3539 "src/preproc/pic/pic.cpp"
3539 16 : break;
3540 :
3541 2 : case 119: /* object_spec: object_spec SHADED text */
3542 : #line 1011 "../src/preproc/pic/pic.ypp"
3543 : {
3544 : (yyval.spec) = (yyvsp[-2].spec);
3545 : (yyval.spec)->flags |= (IS_SHADED | IS_FILLED);
3546 : (yyval.spec)->shaded = new char[strlen((yyvsp[0].lstr).str)+1];
3547 : strcpy((yyval.spec)->shaded, (yyvsp[0].lstr).str);
3548 : }
3549 : #line 3550 "src/preproc/pic/pic.cpp"
3550 2 : break;
3551 :
3552 40 : case 120: /* object_spec: object_spec COLORED text */
3553 : #line 1018 "../src/preproc/pic/pic.ypp"
3554 : {
3555 : (yyval.spec) = (yyvsp[-2].spec);
3556 : (yyval.spec)->flags |= (IS_SHADED | IS_OUTLINED | IS_FILLED);
3557 : (yyval.spec)->shaded = new char[strlen((yyvsp[0].lstr).str)+1];
3558 : strcpy((yyval.spec)->shaded, (yyvsp[0].lstr).str);
3559 : (yyval.spec)->outlined = new char[strlen((yyvsp[0].lstr).str)+1];
3560 : strcpy((yyval.spec)->outlined, (yyvsp[0].lstr).str);
3561 : }
3562 : #line 3563 "src/preproc/pic/pic.cpp"
3563 40 : break;
3564 :
3565 20 : case 121: /* object_spec: object_spec OUTLINED text */
3566 : #line 1027 "../src/preproc/pic/pic.ypp"
3567 : {
3568 : (yyval.spec) = (yyvsp[-2].spec);
3569 : (yyval.spec)->flags |= IS_OUTLINED;
3570 : (yyval.spec)->outlined = new char[strlen((yyvsp[0].lstr).str)+1];
3571 : strcpy((yyval.spec)->outlined, (yyvsp[0].lstr).str);
3572 : }
3573 : #line 3574 "src/preproc/pic/pic.cpp"
3574 20 : break;
3575 :
3576 6 : case 122: /* object_spec: object_spec CHOP */
3577 : #line 1034 "../src/preproc/pic/pic.ypp"
3578 : {
3579 : (yyval.spec) = (yyvsp[-1].spec);
3580 : // line chop chop means line chop 0 chop 0
3581 : if ((yyval.spec)->flags & IS_DEFAULT_CHOPPED) {
3582 : (yyval.spec)->flags |= IS_CHOPPED;
3583 : (yyval.spec)->flags &= ~IS_DEFAULT_CHOPPED;
3584 : (yyval.spec)->start_chop = (yyval.spec)->end_chop = 0.0;
3585 : }
3586 : else if ((yyval.spec)->flags & IS_CHOPPED) {
3587 : (yyval.spec)->end_chop = 0.0;
3588 : }
3589 : else {
3590 : (yyval.spec)->flags |= IS_DEFAULT_CHOPPED;
3591 : }
3592 : }
3593 : #line 3594 "src/preproc/pic/pic.cpp"
3594 6 : break;
3595 :
3596 12 : case 123: /* object_spec: object_spec CHOP expr */
3597 : #line 1050 "../src/preproc/pic/pic.ypp"
3598 : {
3599 : (yyval.spec) = (yyvsp[-2].spec);
3600 : if ((yyval.spec)->flags & IS_DEFAULT_CHOPPED) {
3601 : (yyval.spec)->flags |= IS_CHOPPED;
3602 : (yyval.spec)->flags &= ~IS_DEFAULT_CHOPPED;
3603 : (yyval.spec)->start_chop = 0.0;
3604 : (yyval.spec)->end_chop = (yyvsp[0].x);
3605 : }
3606 : else if ((yyval.spec)->flags & IS_CHOPPED) {
3607 : (yyval.spec)->end_chop = (yyvsp[0].x);
3608 : }
3609 : else {
3610 : (yyval.spec)->start_chop = (yyval.spec)->end_chop = (yyvsp[0].x);
3611 : (yyval.spec)->flags |= IS_CHOPPED;
3612 : }
3613 : }
3614 : #line 3615 "src/preproc/pic/pic.cpp"
3615 12 : break;
3616 :
3617 2 : case 124: /* object_spec: object_spec SAME */
3618 : #line 1067 "../src/preproc/pic/pic.ypp"
3619 : {
3620 : (yyval.spec) = (yyvsp[-1].spec);
3621 : (yyval.spec)->flags |= IS_SAME;
3622 : }
3623 : #line 3624 "src/preproc/pic/pic.cpp"
3624 2 : break;
3625 :
3626 79 : case 125: /* object_spec: object_spec INVISIBLE */
3627 : #line 1072 "../src/preproc/pic/pic.ypp"
3628 : {
3629 : (yyval.spec) = (yyvsp[-1].spec);
3630 : (yyval.spec)->flags |= IS_INVISIBLE;
3631 : }
3632 : #line 3633 "src/preproc/pic/pic.cpp"
3633 79 : break;
3634 :
3635 8 : case 126: /* object_spec: object_spec LEFT_ARROW_HEAD */
3636 : #line 1077 "../src/preproc/pic/pic.ypp"
3637 : {
3638 : (yyval.spec) = (yyvsp[-1].spec);
3639 : (yyval.spec)->flags |= HAS_LEFT_ARROW_HEAD;
3640 : }
3641 : #line 3642 "src/preproc/pic/pic.cpp"
3642 8 : break;
3643 :
3644 16 : case 127: /* object_spec: object_spec RIGHT_ARROW_HEAD */
3645 : #line 1082 "../src/preproc/pic/pic.ypp"
3646 : {
3647 : (yyval.spec) = (yyvsp[-1].spec);
3648 : (yyval.spec)->flags |= HAS_RIGHT_ARROW_HEAD;
3649 : }
3650 : #line 3651 "src/preproc/pic/pic.cpp"
3651 16 : break;
3652 :
3653 0 : case 128: /* object_spec: object_spec DOUBLE_ARROW_HEAD */
3654 : #line 1087 "../src/preproc/pic/pic.ypp"
3655 : {
3656 : (yyval.spec) = (yyvsp[-1].spec);
3657 : (yyval.spec)->flags |= (HAS_LEFT_ARROW_HEAD|HAS_RIGHT_ARROW_HEAD);
3658 : }
3659 : #line 3660 "src/preproc/pic/pic.cpp"
3660 0 : break;
3661 :
3662 8 : case 129: /* object_spec: object_spec CW */
3663 : #line 1092 "../src/preproc/pic/pic.ypp"
3664 : {
3665 : (yyval.spec) = (yyvsp[-1].spec);
3666 : (yyval.spec)->flags |= IS_CLOCKWISE;
3667 : }
3668 : #line 3669 "src/preproc/pic/pic.cpp"
3669 8 : break;
3670 :
3671 0 : case 130: /* object_spec: object_spec CCW */
3672 : #line 1097 "../src/preproc/pic/pic.ypp"
3673 : {
3674 : (yyval.spec) = (yyvsp[-1].spec);
3675 : (yyval.spec)->flags &= ~IS_CLOCKWISE;
3676 : }
3677 : #line 3678 "src/preproc/pic/pic.cpp"
3678 0 : break;
3679 :
3680 270 : case 131: /* object_spec: object_spec text */
3681 : #line 1102 "../src/preproc/pic/pic.ypp"
3682 : {
3683 : (yyval.spec) = (yyvsp[-1].spec);
3684 : text_item **p;
3685 : for (p = & (yyval.spec)->text; *p; p = &(*p)->next)
3686 : ;
3687 : *p = new text_item((yyvsp[0].lstr).str, (yyvsp[0].lstr).filename, (yyvsp[0].lstr).lineno);
3688 : }
3689 : #line 3690 "src/preproc/pic/pic.cpp"
3690 270 : break;
3691 :
3692 32 : case 132: /* object_spec: object_spec LJUST */
3693 : #line 1110 "../src/preproc/pic/pic.ypp"
3694 : {
3695 : (yyval.spec) = (yyvsp[-1].spec);
3696 : if ((yyval.spec)->text) {
3697 : text_item *p;
3698 : for (p = (yyval.spec)->text; p->next; p = p->next)
3699 : ;
3700 : p->adj.h = LEFT_ADJUST;
3701 : }
3702 : }
3703 : #line 3704 "src/preproc/pic/pic.cpp"
3704 32 : break;
3705 :
3706 40 : case 133: /* object_spec: object_spec RJUST */
3707 : #line 1120 "../src/preproc/pic/pic.ypp"
3708 : {
3709 : (yyval.spec) = (yyvsp[-1].spec);
3710 : if ((yyval.spec)->text) {
3711 : text_item *p;
3712 : for (p = (yyval.spec)->text; p->next; p = p->next)
3713 : ;
3714 : p->adj.h = RIGHT_ADJUST;
3715 : }
3716 : }
3717 : #line 3718 "src/preproc/pic/pic.cpp"
3718 40 : break;
3719 :
3720 26 : case 134: /* object_spec: object_spec ABOVE */
3721 : #line 1130 "../src/preproc/pic/pic.ypp"
3722 : {
3723 : (yyval.spec) = (yyvsp[-1].spec);
3724 : if ((yyval.spec)->text) {
3725 : text_item *p;
3726 : for (p = (yyval.spec)->text; p->next; p = p->next)
3727 : ;
3728 : p->adj.v = ABOVE_ADJUST;
3729 : }
3730 : }
3731 : #line 3732 "src/preproc/pic/pic.cpp"
3732 26 : break;
3733 :
3734 26 : case 135: /* object_spec: object_spec BELOW */
3735 : #line 1140 "../src/preproc/pic/pic.ypp"
3736 : {
3737 : (yyval.spec) = (yyvsp[-1].spec);
3738 : if ((yyval.spec)->text) {
3739 : text_item *p;
3740 : for (p = (yyval.spec)->text; p->next; p = p->next)
3741 : ;
3742 : p->adj.v = BELOW_ADJUST;
3743 : }
3744 : }
3745 : #line 3746 "src/preproc/pic/pic.cpp"
3746 26 : break;
3747 :
3748 0 : case 136: /* object_spec: object_spec THICKNESS expr */
3749 : #line 1150 "../src/preproc/pic/pic.ypp"
3750 : {
3751 : (yyval.spec) = (yyvsp[-2].spec);
3752 : (yyval.spec)->flags |= HAS_THICKNESS;
3753 : (yyval.spec)->thickness = (yyvsp[0].x);
3754 : }
3755 : #line 3756 "src/preproc/pic/pic.cpp"
3756 0 : break;
3757 :
3758 0 : case 137: /* object_spec: object_spec ALIGNED */
3759 : #line 1156 "../src/preproc/pic/pic.ypp"
3760 : {
3761 : (yyval.spec) = (yyvsp[-1].spec);
3762 : (yyval.spec)->flags |= IS_ALIGNED;
3763 : }
3764 : #line 3765 "src/preproc/pic/pic.cpp"
3765 0 : break;
3766 :
3767 894 : case 138: /* text: TEXT */
3768 : #line 1164 "../src/preproc/pic/pic.ypp"
3769 : { (yyval.lstr) = (yyvsp[0].lstr); }
3770 : #line 3771 "src/preproc/pic/pic.cpp"
3771 894 : break;
3772 :
3773 16 : case 139: /* text: SPRINTF '(' TEXT sprintf_args ')' */
3774 : #line 1166 "../src/preproc/pic/pic.ypp"
3775 : {
3776 : (yyval.lstr).filename = (yyvsp[-2].lstr).filename;
3777 : (yyval.lstr).lineno = (yyvsp[-2].lstr).lineno;
3778 : (yyval.lstr).str = do_sprintf((yyvsp[-2].lstr).str, (yyvsp[-1].dv).v, (yyvsp[-1].dv).nv);
3779 : delete[] (yyvsp[-1].dv).v;
3780 : free((yyvsp[-2].lstr).str);
3781 : }
3782 : #line 3783 "src/preproc/pic/pic.cpp"
3783 16 : break;
3784 :
3785 16 : case 140: /* sprintf_args: %empty */
3786 : #line 1177 "../src/preproc/pic/pic.ypp"
3787 : {
3788 : (yyval.dv).v = 0;
3789 : (yyval.dv).nv = 0;
3790 : (yyval.dv).maxv = 0;
3791 : }
3792 : #line 3793 "src/preproc/pic/pic.cpp"
3793 16 : break;
3794 :
3795 16 : case 141: /* sprintf_args: sprintf_args ',' expr */
3796 : #line 1183 "../src/preproc/pic/pic.ypp"
3797 : {
3798 : (yyval.dv) = (yyvsp[-2].dv);
3799 : if ((yyval.dv).nv >= (yyval.dv).maxv) {
3800 : if ((yyval.dv).nv == 0) {
3801 : (yyval.dv).v = new double[4];
3802 : (yyval.dv).maxv = 4;
3803 : }
3804 : else {
3805 : double *oldv = (yyval.dv).v;
3806 : (yyval.dv).maxv *= 2;
3807 : (yyval.dv).v = new double[(yyval.dv).maxv];
3808 : memcpy((yyval.dv).v, oldv, ((yyval.dv).nv * sizeof(double)));
3809 : delete[] oldv;
3810 : }
3811 : }
3812 : (yyval.dv).v[(yyval.dv).nv] = (yyvsp[0].x);
3813 : (yyval.dv).nv += 1;
3814 : }
3815 : #line 3816 "src/preproc/pic/pic.cpp"
3816 16 : break;
3817 :
3818 466 : case 142: /* position: position_not_place */
3819 : #line 1205 "../src/preproc/pic/pic.ypp"
3820 : { (yyval.pair) = (yyvsp[0].pair); }
3821 : #line 3822 "src/preproc/pic/pic.cpp"
3822 466 : break;
3823 :
3824 647 : case 143: /* position: place */
3825 : #line 1207 "../src/preproc/pic/pic.ypp"
3826 : {
3827 : position pos = (yyvsp[0].pl);
3828 : (yyval.pair).x = pos.x;
3829 : (yyval.pair).y = pos.y;
3830 : }
3831 : #line 3832 "src/preproc/pic/pic.cpp"
3832 647 : break;
3833 :
3834 0 : case 144: /* position: '(' place ')' */
3835 : #line 1213 "../src/preproc/pic/pic.ypp"
3836 : {
3837 : position pos = (yyvsp[-1].pl);
3838 : (yyval.pair).x = pos.x;
3839 : (yyval.pair).y = pos.y;
3840 : }
3841 : #line 3842 "src/preproc/pic/pic.cpp"
3842 0 : break;
3843 :
3844 379 : case 145: /* position_not_place: expr_pair */
3845 : #line 1222 "../src/preproc/pic/pic.ypp"
3846 : { (yyval.pair) = (yyvsp[0].pair); }
3847 : #line 3848 "src/preproc/pic/pic.cpp"
3848 379 : break;
3849 :
3850 76 : case 146: /* position_not_place: position '+' expr_pair */
3851 : #line 1224 "../src/preproc/pic/pic.ypp"
3852 : {
3853 : (yyval.pair).x = (yyvsp[-2].pair).x + (yyvsp[0].pair).x;
3854 : (yyval.pair).y = (yyvsp[-2].pair).y + (yyvsp[0].pair).y;
3855 : }
3856 : #line 3857 "src/preproc/pic/pic.cpp"
3857 76 : break;
3858 :
3859 0 : case 147: /* position_not_place: '(' position '+' expr_pair ')' */
3860 : #line 1229 "../src/preproc/pic/pic.ypp"
3861 : {
3862 : (yyval.pair).x = (yyvsp[-3].pair).x + (yyvsp[-1].pair).x;
3863 : (yyval.pair).y = (yyvsp[-3].pair).y + (yyvsp[-1].pair).y;
3864 : }
3865 : #line 3866 "src/preproc/pic/pic.cpp"
3866 0 : break;
3867 :
3868 2 : case 148: /* position_not_place: position '-' expr_pair */
3869 : #line 1234 "../src/preproc/pic/pic.ypp"
3870 : {
3871 : (yyval.pair).x = (yyvsp[-2].pair).x - (yyvsp[0].pair).x;
3872 : (yyval.pair).y = (yyvsp[-2].pair).y - (yyvsp[0].pair).y;
3873 : }
3874 : #line 3875 "src/preproc/pic/pic.cpp"
3875 2 : break;
3876 :
3877 0 : case 149: /* position_not_place: '(' position '-' expr_pair ')' */
3878 : #line 1239 "../src/preproc/pic/pic.ypp"
3879 : {
3880 : (yyval.pair).x = (yyvsp[-3].pair).x - (yyvsp[-1].pair).x;
3881 : (yyval.pair).y = (yyvsp[-3].pair).y - (yyvsp[-1].pair).y;
3882 : }
3883 : #line 3884 "src/preproc/pic/pic.cpp"
3884 0 : break;
3885 :
3886 0 : case 150: /* position_not_place: '(' position ',' position ')' */
3887 : #line 1244 "../src/preproc/pic/pic.ypp"
3888 : {
3889 : (yyval.pair).x = (yyvsp[-3].pair).x;
3890 : (yyval.pair).y = (yyvsp[-1].pair).y;
3891 : }
3892 : #line 3893 "src/preproc/pic/pic.cpp"
3893 0 : break;
3894 :
3895 8 : case 151: /* position_not_place: expr between position AND position */
3896 : #line 1249 "../src/preproc/pic/pic.ypp"
3897 : {
3898 : (yyval.pair).x = (1.0 - (yyvsp[-4].x))*(yyvsp[-2].pair).x + (yyvsp[-4].x)*(yyvsp[0].pair).x;
3899 : (yyval.pair).y = (1.0 - (yyvsp[-4].x))*(yyvsp[-2].pair).y + (yyvsp[-4].x)*(yyvsp[0].pair).y;
3900 : }
3901 : #line 3902 "src/preproc/pic/pic.cpp"
3902 8 : break;
3903 :
3904 0 : case 152: /* position_not_place: '(' expr between position AND position ')' */
3905 : #line 1254 "../src/preproc/pic/pic.ypp"
3906 : {
3907 : (yyval.pair).x = (1.0 - (yyvsp[-5].x))*(yyvsp[-3].pair).x + (yyvsp[-5].x)*(yyvsp[-1].pair).x;
3908 : (yyval.pair).y = (1.0 - (yyvsp[-5].x))*(yyvsp[-3].pair).y + (yyvsp[-5].x)*(yyvsp[-1].pair).y;
3909 : }
3910 : #line 3911 "src/preproc/pic/pic.cpp"
3911 0 : break;
3912 :
3913 4 : case 153: /* position_not_place: expr_not_lower_than '<' position ',' position '>' */
3914 : #line 1260 "../src/preproc/pic/pic.ypp"
3915 : {
3916 : (yyval.pair).x = (1.0 - (yyvsp[-5].x))*(yyvsp[-3].pair).x + (yyvsp[-5].x)*(yyvsp[-1].pair).x;
3917 : (yyval.pair).y = (1.0 - (yyvsp[-5].x))*(yyvsp[-3].pair).y + (yyvsp[-5].x)*(yyvsp[-1].pair).y;
3918 : }
3919 : #line 3920 "src/preproc/pic/pic.cpp"
3920 4 : break;
3921 :
3922 0 : case 154: /* position_not_place: '(' expr_not_lower_than '<' position ',' position '>' ')' */
3923 : #line 1265 "../src/preproc/pic/pic.ypp"
3924 : {
3925 : (yyval.pair).x = (1.0 - (yyvsp[-6].x))*(yyvsp[-4].pair).x + (yyvsp[-6].x)*(yyvsp[-2].pair).x;
3926 : (yyval.pair).y = (1.0 - (yyvsp[-6].x))*(yyvsp[-4].pair).y + (yyvsp[-6].x)*(yyvsp[-2].pair).y;
3927 : }
3928 : #line 3929 "src/preproc/pic/pic.cpp"
3929 0 : break;
3930 :
3931 457 : case 157: /* expr_pair: expr ',' expr */
3932 : #line 1278 "../src/preproc/pic/pic.ypp"
3933 : {
3934 : (yyval.pair).x = (yyvsp[-2].x);
3935 : (yyval.pair).y = (yyvsp[0].x);
3936 : }
3937 : #line 3938 "src/preproc/pic/pic.cpp"
3938 457 : break;
3939 :
3940 456 : case 158: /* expr_pair: '(' expr_pair ')' */
3941 : #line 1283 "../src/preproc/pic/pic.ypp"
3942 : { (yyval.pair) = (yyvsp[-1].pair); }
3943 : #line 3944 "src/preproc/pic/pic.cpp"
3944 456 : break;
3945 :
3946 116 : case 159: /* place: label */
3947 : #line 1289 "../src/preproc/pic/pic.ypp"
3948 : { (yyval.pl) = (yyvsp[0].pl); }
3949 : #line 3950 "src/preproc/pic/pic.cpp"
3950 116 : break;
3951 :
3952 507 : case 160: /* place: label corner */
3953 : #line 1291 "../src/preproc/pic/pic.ypp"
3954 : {
3955 : path pth((yyvsp[0].crn));
3956 : if (!pth.follow((yyvsp[-1].pl), & (yyval.pl)))
3957 : YYABORT;
3958 : }
3959 : #line 3960 "src/preproc/pic/pic.cpp"
3960 507 : break;
3961 :
3962 34 : case 161: /* place: label vertex */
3963 : #line 1297 "../src/preproc/pic/pic.ypp"
3964 : {
3965 : (yyvsp[-1].pl).obj->set_vertex_number((yyvsp[0].ver).vertex_number);
3966 : path pth((yyvsp[0].ver).crn);
3967 : if (!pth.follow((yyvsp[-1].pl), & (yyval.pl)))
3968 : YYABORT;
3969 : }
3970 : #line 3971 "src/preproc/pic/pic.cpp"
3971 34 : break;
3972 :
3973 0 : case 162: /* place: corner label */
3974 : #line 1304 "../src/preproc/pic/pic.ypp"
3975 : {
3976 : path pth((yyvsp[-1].crn));
3977 : if (!pth.follow((yyvsp[0].pl), & (yyval.pl)))
3978 : YYABORT;
3979 : }
3980 : #line 3981 "src/preproc/pic/pic.cpp"
3981 0 : break;
3982 :
3983 80 : case 163: /* place: corner OF label */
3984 : #line 1310 "../src/preproc/pic/pic.ypp"
3985 : {
3986 : path pth((yyvsp[-2].crn));
3987 : if (!pth.follow((yyvsp[0].pl), & (yyval.pl)))
3988 : YYABORT;
3989 : }
3990 : #line 3991 "src/preproc/pic/pic.cpp"
3991 80 : break;
3992 :
3993 0 : case 164: /* place: vertex OF label */
3994 : #line 1316 "../src/preproc/pic/pic.ypp"
3995 : {
3996 : (yyvsp[0].pl).obj->set_vertex_number((yyvsp[-2].ver).vertex_number);
3997 : path pth((yyvsp[-2].ver).crn);
3998 : if (!pth.follow((yyvsp[0].pl), & (yyval.pl)))
3999 : YYABORT;
4000 : }
4001 : #line 4002 "src/preproc/pic/pic.cpp"
4002 0 : break;
4003 :
4004 0 : case 165: /* place: HERE */
4005 : #line 1323 "../src/preproc/pic/pic.ypp"
4006 : {
4007 : (yyval.pl).x = current_position.x;
4008 : (yyval.pl).y = current_position.y;
4009 : (yyval.pl).obj = 0;
4010 : }
4011 : #line 4012 "src/preproc/pic/pic.cpp"
4012 0 : break;
4013 :
4014 449 : case 166: /* label: LABEL */
4015 : #line 1332 "../src/preproc/pic/pic.ypp"
4016 : {
4017 : place *p = lookup_label((yyvsp[0].str));
4018 : if (!p) {
4019 : lex_error("there is no place '%1'", (yyvsp[0].str));
4020 : YYABORT;
4021 : }
4022 : (yyval.pl) = *p;
4023 : free((yyvsp[0].str));
4024 : }
4025 : #line 4026 "src/preproc/pic/pic.cpp"
4026 449 : break;
4027 :
4028 288 : case 167: /* label: nth_primitive */
4029 : #line 1342 "../src/preproc/pic/pic.ypp"
4030 : { (yyval.pl).obj = (yyvsp[0].obj); }
4031 : #line 4032 "src/preproc/pic/pic.cpp"
4032 288 : break;
4033 :
4034 22 : case 168: /* label: label '.' LABEL */
4035 : #line 1344 "../src/preproc/pic/pic.ypp"
4036 : {
4037 : path pth((yyvsp[0].str));
4038 : if (!pth.follow((yyvsp[-2].pl), & (yyval.pl)))
4039 : YYABORT;
4040 : }
4041 : #line 4042 "src/preproc/pic/pic.cpp"
4042 22 : break;
4043 :
4044 36 : case 169: /* ordinal: ORDINAL */
4045 : #line 1353 "../src/preproc/pic/pic.ypp"
4046 : { (yyval.n) = (yyvsp[0].n); }
4047 : #line 4048 "src/preproc/pic/pic.cpp"
4048 36 : break;
4049 :
4050 0 : case 170: /* ordinal: '`' any_expr TH */
4051 : #line 1355 "../src/preproc/pic/pic.ypp"
4052 : {
4053 : // XXX Check for overflow (and non-integers?).
4054 : (yyval.n) = int((yyvsp[-1].x));
4055 : }
4056 : #line 4057 "src/preproc/pic/pic.cpp"
4057 0 : break;
4058 :
4059 252 : case 171: /* optional_ordinal_last: LAST */
4060 : #line 1363 "../src/preproc/pic/pic.ypp"
4061 : { (yyval.n) = 1; }
4062 : #line 4063 "src/preproc/pic/pic.cpp"
4063 252 : break;
4064 :
4065 12 : case 172: /* optional_ordinal_last: ordinal LAST */
4066 : #line 1365 "../src/preproc/pic/pic.ypp"
4067 : { (yyval.n) = (yyvsp[-1].n); }
4068 : #line 4069 "src/preproc/pic/pic.cpp"
4069 12 : break;
4070 :
4071 24 : case 173: /* nth_primitive: ordinal object_type */
4072 : #line 1370 "../src/preproc/pic/pic.ypp"
4073 : {
4074 : int count = 0;
4075 : object *p;
4076 : for (p = olist.head; p != 0; p = p->next)
4077 : if (p->type() == (yyvsp[0].obtype) && ++count == (yyvsp[-1].n)) {
4078 : (yyval.obj) = p;
4079 : break;
4080 : }
4081 : if (p == 0) {
4082 : lex_error("there is no %1%2 %3", (yyvsp[-1].n), ordinal_postfix((yyvsp[-1].n)),
4083 : object_type_name((yyvsp[0].obtype)));
4084 : YYABORT;
4085 : }
4086 : }
4087 : #line 4088 "src/preproc/pic/pic.cpp"
4088 24 : break;
4089 :
4090 264 : case 174: /* nth_primitive: optional_ordinal_last object_type */
4091 : #line 1385 "../src/preproc/pic/pic.ypp"
4092 : {
4093 : int count = 0;
4094 : object *p;
4095 : for (p = olist.tail; p != 0; p = p->prev)
4096 : if (p->type() == (yyvsp[0].obtype) && ++count == (yyvsp[-1].n)) {
4097 : (yyval.obj) = p;
4098 : break;
4099 : }
4100 : if (p == 0) {
4101 : lex_error("there is no %1%2 last %3", (yyvsp[-1].n),
4102 : ordinal_postfix((yyvsp[-1].n)), object_type_name((yyvsp[0].obtype)));
4103 : YYABORT;
4104 : }
4105 : }
4106 : #line 4107 "src/preproc/pic/pic.cpp"
4107 264 : break;
4108 :
4109 96 : case 175: /* object_type: BOX */
4110 : #line 1403 "../src/preproc/pic/pic.ypp"
4111 : { (yyval.obtype) = BOX_OBJECT; }
4112 : #line 4113 "src/preproc/pic/pic.cpp"
4113 96 : break;
4114 :
4115 58 : case 176: /* object_type: CIRCLE */
4116 : #line 1405 "../src/preproc/pic/pic.ypp"
4117 : { (yyval.obtype) = CIRCLE_OBJECT; }
4118 : #line 4119 "src/preproc/pic/pic.cpp"
4119 58 : break;
4120 :
4121 2 : case 177: /* object_type: ELLIPSE */
4122 : #line 1407 "../src/preproc/pic/pic.ypp"
4123 : { (yyval.obtype) = ELLIPSE_OBJECT; }
4124 : #line 4125 "src/preproc/pic/pic.cpp"
4125 2 : break;
4126 :
4127 6 : case 178: /* object_type: ARC */
4128 : #line 1409 "../src/preproc/pic/pic.ypp"
4129 : { (yyval.obtype) = ARC_OBJECT; }
4130 : #line 4131 "src/preproc/pic/pic.cpp"
4131 6 : break;
4132 :
4133 2 : case 179: /* object_type: LINE */
4134 : #line 1411 "../src/preproc/pic/pic.ypp"
4135 : { (yyval.obtype) = LINE_OBJECT; }
4136 : #line 4137 "src/preproc/pic/pic.cpp"
4137 2 : break;
4138 :
4139 6 : case 180: /* object_type: POLYGON */
4140 : #line 1413 "../src/preproc/pic/pic.ypp"
4141 : { (yyval.obtype) = POLYGON_OBJECT; }
4142 : #line 4143 "src/preproc/pic/pic.cpp"
4143 6 : break;
4144 :
4145 38 : case 181: /* object_type: ARROW */
4146 : #line 1415 "../src/preproc/pic/pic.ypp"
4147 : { (yyval.obtype) = ARROW_OBJECT; }
4148 : #line 4149 "src/preproc/pic/pic.cpp"
4149 38 : break;
4150 :
4151 8 : case 182: /* object_type: SPLINE */
4152 : #line 1417 "../src/preproc/pic/pic.ypp"
4153 : { (yyval.obtype) = SPLINE_OBJECT; }
4154 : #line 4155 "src/preproc/pic/pic.cpp"
4155 8 : break;
4156 :
4157 72 : case 183: /* object_type: '[' ']' */
4158 : #line 1419 "../src/preproc/pic/pic.ypp"
4159 : { (yyval.obtype) = BLOCK_OBJECT; }
4160 : #line 4161 "src/preproc/pic/pic.cpp"
4161 72 : break;
4162 :
4163 0 : case 184: /* object_type: TEXT */
4164 : #line 1421 "../src/preproc/pic/pic.ypp"
4165 : { (yyval.obtype) = TEXT_OBJECT; }
4166 : #line 4167 "src/preproc/pic/pic.cpp"
4167 0 : break;
4168 :
4169 0 : case 185: /* label_path: '.' LABEL */
4170 : #line 1426 "../src/preproc/pic/pic.ypp"
4171 : { (yyval.pth) = new path((yyvsp[0].str)); }
4172 : #line 4173 "src/preproc/pic/pic.cpp"
4173 0 : break;
4174 :
4175 0 : case 186: /* label_path: label_path '.' LABEL */
4176 : #line 1428 "../src/preproc/pic/pic.ypp"
4177 : {
4178 : (yyval.pth) = (yyvsp[-2].pth);
4179 : (yyval.pth)->append((yyvsp[0].str));
4180 : }
4181 : #line 4182 "src/preproc/pic/pic.cpp"
4182 0 : break;
4183 :
4184 134 : case 187: /* relative_path: corner */
4185 : #line 1436 "../src/preproc/pic/pic.ypp"
4186 : { (yyval.pth) = new path((yyvsp[0].crn)); }
4187 : #line 4188 "src/preproc/pic/pic.cpp"
4188 134 : break;
4189 :
4190 0 : case 188: /* relative_path: label_path */
4191 : #line 1440 "../src/preproc/pic/pic.ypp"
4192 : { (yyval.pth) = (yyvsp[0].pth); }
4193 : #line 4194 "src/preproc/pic/pic.cpp"
4194 0 : break;
4195 :
4196 0 : case 189: /* relative_path: label_path corner */
4197 : #line 1442 "../src/preproc/pic/pic.ypp"
4198 : {
4199 : (yyval.pth) = (yyvsp[-1].pth);
4200 : (yyval.pth)->append((yyvsp[0].crn));
4201 : }
4202 : #line 4203 "src/preproc/pic/pic.cpp"
4203 0 : break;
4204 :
4205 134 : case 190: /* path: relative_path */
4206 : #line 1450 "../src/preproc/pic/pic.ypp"
4207 : { (yyval.pth) = (yyvsp[0].pth); }
4208 : #line 4209 "src/preproc/pic/pic.cpp"
4209 134 : break;
4210 :
4211 0 : case 191: /* path: '(' relative_path ',' relative_path ')' */
4212 : #line 1452 "../src/preproc/pic/pic.ypp"
4213 : {
4214 : (yyval.pth) = (yyvsp[-3].pth);
4215 : (yyval.pth)->set_ypath((yyvsp[-1].pth));
4216 : }
4217 : #line 4218 "src/preproc/pic/pic.cpp"
4218 0 : break;
4219 :
4220 0 : case 192: /* path: ORDINAL LAST object_type relative_path */
4221 : #line 1458 "../src/preproc/pic/pic.ypp"
4222 : {
4223 : lex_warning("'%1%2 last %3' in 'with' argument ignored",
4224 : (yyvsp[-3].n), ordinal_postfix((yyvsp[-3].n)), object_type_name((yyvsp[-1].obtype)));
4225 : (yyval.pth) = (yyvsp[0].pth);
4226 : }
4227 : #line 4228 "src/preproc/pic/pic.cpp"
4228 0 : break;
4229 :
4230 0 : case 193: /* path: LAST object_type relative_path */
4231 : #line 1464 "../src/preproc/pic/pic.ypp"
4232 : {
4233 : lex_warning("'last %1' in 'with' argument ignored",
4234 : object_type_name((yyvsp[-1].obtype)));
4235 : (yyval.pth) = (yyvsp[0].pth);
4236 : }
4237 : #line 4238 "src/preproc/pic/pic.cpp"
4238 0 : break;
4239 :
4240 0 : case 194: /* path: ORDINAL object_type relative_path */
4241 : #line 1470 "../src/preproc/pic/pic.ypp"
4242 : {
4243 : lex_warning("'%1%2 %3' in 'with' argument ignored",
4244 : (yyvsp[-2].n), ordinal_postfix((yyvsp[-2].n)), object_type_name((yyvsp[-1].obtype)));
4245 : (yyval.pth) = (yyvsp[0].pth);
4246 : }
4247 : #line 4248 "src/preproc/pic/pic.cpp"
4248 0 : break;
4249 :
4250 0 : case 195: /* path: LABEL relative_path */
4251 : #line 1476 "../src/preproc/pic/pic.ypp"
4252 : {
4253 : lex_warning("initial '%1' in 'with' argument ignored", (yyvsp[-1].str));
4254 : delete[] (yyvsp[-1].str);
4255 : (yyval.pth) = (yyvsp[0].pth);
4256 : }
4257 : #line 4258 "src/preproc/pic/pic.cpp"
4258 0 : break;
4259 :
4260 71 : case 196: /* corner: DOT_N */
4261 : #line 1485 "../src/preproc/pic/pic.ypp"
4262 : { (yyval.crn) = &object::north; }
4263 : #line 4264 "src/preproc/pic/pic.cpp"
4264 71 : break;
4265 :
4266 76 : case 197: /* corner: DOT_E */
4267 : #line 1487 "../src/preproc/pic/pic.ypp"
4268 : { (yyval.crn) = &object::east; }
4269 : #line 4270 "src/preproc/pic/pic.cpp"
4270 76 : break;
4271 :
4272 29 : case 198: /* corner: DOT_W */
4273 : #line 1489 "../src/preproc/pic/pic.ypp"
4274 : { (yyval.crn) = &object::west; }
4275 : #line 4276 "src/preproc/pic/pic.cpp"
4276 29 : break;
4277 :
4278 113 : case 199: /* corner: DOT_S */
4279 : #line 1491 "../src/preproc/pic/pic.ypp"
4280 : { (yyval.crn) = &object::south; }
4281 : #line 4282 "src/preproc/pic/pic.cpp"
4282 113 : break;
4283 :
4284 35 : case 200: /* corner: DOT_NE */
4285 : #line 1493 "../src/preproc/pic/pic.ypp"
4286 : { (yyval.crn) = &object::north_east; }
4287 : #line 4288 "src/preproc/pic/pic.cpp"
4288 35 : break;
4289 :
4290 57 : case 201: /* corner: DOT_SE */
4291 : #line 1495 "../src/preproc/pic/pic.ypp"
4292 : { (yyval.crn) = &object::south_east; }
4293 : #line 4294 "src/preproc/pic/pic.cpp"
4294 57 : break;
4295 :
4296 71 : case 202: /* corner: DOT_NW */
4297 : #line 1497 "../src/preproc/pic/pic.ypp"
4298 : { (yyval.crn) = &object::north_west; }
4299 : #line 4300 "src/preproc/pic/pic.cpp"
4300 71 : break;
4301 :
4302 57 : case 203: /* corner: DOT_SW */
4303 : #line 1499 "../src/preproc/pic/pic.ypp"
4304 : { (yyval.crn) = &object::south_west; }
4305 : #line 4306 "src/preproc/pic/pic.cpp"
4306 57 : break;
4307 :
4308 62 : case 204: /* corner: DOT_C */
4309 : #line 1501 "../src/preproc/pic/pic.ypp"
4310 : { (yyval.crn) = &object::center; }
4311 : #line 4312 "src/preproc/pic/pic.cpp"
4312 62 : break;
4313 :
4314 22 : case 205: /* corner: DOT_START */
4315 : #line 1503 "../src/preproc/pic/pic.ypp"
4316 : { (yyval.crn) = &object::start; }
4317 : #line 4318 "src/preproc/pic/pic.cpp"
4318 22 : break;
4319 :
4320 48 : case 206: /* corner: DOT_END */
4321 : #line 1505 "../src/preproc/pic/pic.ypp"
4322 : { (yyval.crn) = &object::end; }
4323 : #line 4324 "src/preproc/pic/pic.cpp"
4324 48 : break;
4325 :
4326 0 : case 207: /* corner: TOP */
4327 : #line 1507 "../src/preproc/pic/pic.ypp"
4328 : { (yyval.crn) = &object::north; }
4329 : #line 4330 "src/preproc/pic/pic.cpp"
4330 0 : break;
4331 :
4332 0 : case 208: /* corner: BOTTOM */
4333 : #line 1509 "../src/preproc/pic/pic.ypp"
4334 : { (yyval.crn) = &object::south; }
4335 : #line 4336 "src/preproc/pic/pic.cpp"
4336 0 : break;
4337 :
4338 0 : case 209: /* corner: LEFT */
4339 : #line 1511 "../src/preproc/pic/pic.ypp"
4340 : { (yyval.crn) = &object::west; }
4341 : #line 4342 "src/preproc/pic/pic.cpp"
4342 0 : break;
4343 :
4344 0 : case 210: /* corner: RIGHT */
4345 : #line 1513 "../src/preproc/pic/pic.ypp"
4346 : { (yyval.crn) = &object::east; }
4347 : #line 4348 "src/preproc/pic/pic.cpp"
4348 0 : break;
4349 :
4350 0 : case 211: /* corner: UPPER LEFT */
4351 : #line 1515 "../src/preproc/pic/pic.ypp"
4352 : { (yyval.crn) = &object::north_west; }
4353 : #line 4354 "src/preproc/pic/pic.cpp"
4354 0 : break;
4355 :
4356 0 : case 212: /* corner: LOWER LEFT */
4357 : #line 1517 "../src/preproc/pic/pic.ypp"
4358 : { (yyval.crn) = &object::south_west; }
4359 : #line 4360 "src/preproc/pic/pic.cpp"
4360 0 : break;
4361 :
4362 0 : case 213: /* corner: UPPER RIGHT */
4363 : #line 1519 "../src/preproc/pic/pic.ypp"
4364 : { (yyval.crn) = &object::north_east; }
4365 : #line 4366 "src/preproc/pic/pic.cpp"
4366 0 : break;
4367 :
4368 0 : case 214: /* corner: LOWER RIGHT */
4369 : #line 1521 "../src/preproc/pic/pic.ypp"
4370 : { (yyval.crn) = &object::south_east; }
4371 : #line 4372 "src/preproc/pic/pic.cpp"
4372 0 : break;
4373 :
4374 0 : case 215: /* corner: LEFT_CORNER */
4375 : #line 1523 "../src/preproc/pic/pic.ypp"
4376 : { (yyval.crn) = &object::west; }
4377 : #line 4378 "src/preproc/pic/pic.cpp"
4378 0 : break;
4379 :
4380 0 : case 216: /* corner: RIGHT_CORNER */
4381 : #line 1525 "../src/preproc/pic/pic.ypp"
4382 : { (yyval.crn) = &object::east; }
4383 : #line 4384 "src/preproc/pic/pic.cpp"
4384 0 : break;
4385 :
4386 0 : case 217: /* corner: UPPER LEFT_CORNER */
4387 : #line 1527 "../src/preproc/pic/pic.ypp"
4388 : { (yyval.crn) = &object::north_west; }
4389 : #line 4390 "src/preproc/pic/pic.cpp"
4390 0 : break;
4391 :
4392 0 : case 218: /* corner: LOWER LEFT_CORNER */
4393 : #line 1529 "../src/preproc/pic/pic.ypp"
4394 : { (yyval.crn) = &object::south_west; }
4395 : #line 4396 "src/preproc/pic/pic.cpp"
4396 0 : break;
4397 :
4398 0 : case 219: /* corner: UPPER RIGHT_CORNER */
4399 : #line 1531 "../src/preproc/pic/pic.ypp"
4400 : { (yyval.crn) = &object::north_east; }
4401 : #line 4402 "src/preproc/pic/pic.cpp"
4402 0 : break;
4403 :
4404 0 : case 220: /* corner: LOWER RIGHT_CORNER */
4405 : #line 1533 "../src/preproc/pic/pic.ypp"
4406 : { (yyval.crn) = &object::south_east; }
4407 : #line 4408 "src/preproc/pic/pic.cpp"
4408 0 : break;
4409 :
4410 0 : case 221: /* corner: NORTH */
4411 : #line 1535 "../src/preproc/pic/pic.ypp"
4412 : { (yyval.crn) = &object::north; }
4413 : #line 4414 "src/preproc/pic/pic.cpp"
4414 0 : break;
4415 :
4416 0 : case 222: /* corner: SOUTH */
4417 : #line 1537 "../src/preproc/pic/pic.ypp"
4418 : { (yyval.crn) = &object::south; }
4419 : #line 4420 "src/preproc/pic/pic.cpp"
4420 0 : break;
4421 :
4422 0 : case 223: /* corner: EAST */
4423 : #line 1539 "../src/preproc/pic/pic.ypp"
4424 : { (yyval.crn) = &object::east; }
4425 : #line 4426 "src/preproc/pic/pic.cpp"
4426 0 : break;
4427 :
4428 0 : case 224: /* corner: WEST */
4429 : #line 1541 "../src/preproc/pic/pic.ypp"
4430 : { (yyval.crn) = &object::west; }
4431 : #line 4432 "src/preproc/pic/pic.cpp"
4432 0 : break;
4433 :
4434 78 : case 225: /* corner: CENTER */
4435 : #line 1543 "../src/preproc/pic/pic.ypp"
4436 : { (yyval.crn) = &object::center; }
4437 : #line 4438 "src/preproc/pic/pic.cpp"
4438 78 : break;
4439 :
4440 2 : case 226: /* corner: START */
4441 : #line 1545 "../src/preproc/pic/pic.ypp"
4442 : { (yyval.crn) = &object::start; }
4443 : #line 4444 "src/preproc/pic/pic.cpp"
4444 2 : break;
4445 :
4446 0 : case 227: /* corner: END */
4447 : #line 1547 "../src/preproc/pic/pic.ypp"
4448 : { (yyval.crn) = &object::end; }
4449 : #line 4450 "src/preproc/pic/pic.cpp"
4450 0 : break;
4451 :
4452 12 : case 228: /* vertex: DOT_V expr */
4453 : #line 1552 "../src/preproc/pic/pic.ypp"
4454 : {
4455 : (yyval.ver).crn = &object::vertex;
4456 : (yyval.ver).vertex_number = (yyvsp[0].x);
4457 : }
4458 : #line 4459 "src/preproc/pic/pic.cpp"
4459 12 : break;
4460 :
4461 6 : case 229: /* vertex: DOT_V '`' expr '\'' */
4462 : #line 1557 "../src/preproc/pic/pic.ypp"
4463 : {
4464 : (yyval.ver).crn = &object::vertex;
4465 : (yyval.ver).vertex_number = (yyvsp[-1].x);
4466 : }
4467 : #line 4468 "src/preproc/pic/pic.cpp"
4468 6 : break;
4469 :
4470 6 : case 230: /* vertex: DOT_MID expr */
4471 : #line 1562 "../src/preproc/pic/pic.ypp"
4472 : {
4473 : (yyval.ver).crn = &object::point;
4474 : (yyval.ver).vertex_number = (yyvsp[0].x);
4475 : (yyval.ver).is_edge = 1;
4476 : }
4477 : #line 4478 "src/preproc/pic/pic.cpp"
4478 6 : break;
4479 :
4480 12 : case 231: /* vertex: DOT_MID '`' expr '\'' */
4481 : #line 1568 "../src/preproc/pic/pic.ypp"
4482 : {
4483 : (yyval.ver).crn = &object::point;
4484 : (yyval.ver).vertex_number = (yyvsp[-1].x);
4485 : (yyval.ver).is_edge = 1;
4486 : }
4487 : #line 4488 "src/preproc/pic/pic.cpp"
4488 12 : break;
4489 :
4490 0 : case 232: /* expr: expr_lower_than */
4491 : #line 1577 "../src/preproc/pic/pic.ypp"
4492 : { (yyval.x) = (yyvsp[0].x); }
4493 : #line 4494 "src/preproc/pic/pic.cpp"
4494 0 : break;
4495 :
4496 4233 : case 233: /* expr: expr_not_lower_than */
4497 : #line 1579 "../src/preproc/pic/pic.ypp"
4498 : { (yyval.x) = (yyvsp[0].x); }
4499 : #line 4500 "src/preproc/pic/pic.cpp"
4500 4233 : break;
4501 :
4502 0 : case 234: /* expr_lower_than: expr '<' expr */
4503 : #line 1584 "../src/preproc/pic/pic.ypp"
4504 : { (yyval.x) = ((yyvsp[-2].x) < (yyvsp[0].x)); }
4505 : #line 4506 "src/preproc/pic/pic.cpp"
4506 0 : break;
4507 :
4508 756 : case 235: /* expr_not_lower_than: VARIABLE */
4509 : #line 1589 "../src/preproc/pic/pic.ypp"
4510 : {
4511 : if (!lookup_variable((yyvsp[0].str), & (yyval.x))) {
4512 : lex_error("there is no variable '%1'", (yyvsp[0].str));
4513 : YYABORT;
4514 : }
4515 : free((yyvsp[0].str));
4516 : }
4517 : #line 4518 "src/preproc/pic/pic.cpp"
4518 756 : break;
4519 :
4520 2127 : case 236: /* expr_not_lower_than: NUMBER */
4521 : #line 1597 "../src/preproc/pic/pic.ypp"
4522 : { (yyval.x) = (yyvsp[0].x); }
4523 : #line 4524 "src/preproc/pic/pic.cpp"
4524 2127 : break;
4525 :
4526 0 : case 237: /* expr_not_lower_than: place DOT_X */
4527 : #line 1599 "../src/preproc/pic/pic.ypp"
4528 : {
4529 : if ((yyvsp[-1].pl).obj != 0)
4530 : (yyval.x) = (yyvsp[-1].pl).obj->origin().x;
4531 : else
4532 : (yyval.x) = (yyvsp[-1].pl).x;
4533 : }
4534 : #line 4535 "src/preproc/pic/pic.cpp"
4535 0 : break;
4536 :
4537 0 : case 238: /* expr_not_lower_than: place DOT_Y */
4538 : #line 1606 "../src/preproc/pic/pic.ypp"
4539 : {
4540 : if ((yyvsp[-1].pl).obj != 0)
4541 : (yyval.x) = (yyvsp[-1].pl).obj->origin().y;
4542 : else
4543 : (yyval.x) = (yyvsp[-1].pl).y;
4544 : }
4545 : #line 4546 "src/preproc/pic/pic.cpp"
4546 0 : break;
4547 :
4548 42 : case 239: /* expr_not_lower_than: place DOT_HT */
4549 : #line 1613 "../src/preproc/pic/pic.ypp"
4550 : {
4551 : if ((yyvsp[-1].pl).obj != 0)
4552 : (yyval.x) = (yyvsp[-1].pl).obj->height();
4553 : else
4554 : (yyval.x) = 0.0;
4555 : }
4556 : #line 4557 "src/preproc/pic/pic.cpp"
4557 42 : break;
4558 :
4559 42 : case 240: /* expr_not_lower_than: place DOT_WID */
4560 : #line 1620 "../src/preproc/pic/pic.ypp"
4561 : {
4562 : if ((yyvsp[-1].pl).obj != 0)
4563 : (yyval.x) = (yyvsp[-1].pl).obj->width();
4564 : else
4565 : (yyval.x) = 0.0;
4566 : }
4567 : #line 4568 "src/preproc/pic/pic.cpp"
4568 42 : break;
4569 :
4570 0 : case 241: /* expr_not_lower_than: place DOT_RAD */
4571 : #line 1627 "../src/preproc/pic/pic.ypp"
4572 : {
4573 : if ((yyvsp[-1].pl).obj != 0)
4574 : (yyval.x) = (yyvsp[-1].pl).obj->radius();
4575 : else
4576 : (yyval.x) = 0.0;
4577 : }
4578 : #line 4579 "src/preproc/pic/pic.cpp"
4579 0 : break;
4580 :
4581 2 : case 242: /* expr_not_lower_than: expr '+' expr */
4582 : #line 1634 "../src/preproc/pic/pic.ypp"
4583 : { (yyval.x) = (yyvsp[-2].x) + (yyvsp[0].x); }
4584 : #line 4585 "src/preproc/pic/pic.cpp"
4585 2 : break;
4586 :
4587 2 : case 243: /* expr_not_lower_than: expr '-' expr */
4588 : #line 1636 "../src/preproc/pic/pic.ypp"
4589 : { (yyval.x) = (yyvsp[-2].x) - (yyvsp[0].x); }
4590 : #line 4591 "src/preproc/pic/pic.cpp"
4591 2 : break;
4592 :
4593 80 : case 244: /* expr_not_lower_than: expr '*' expr */
4594 : #line 1638 "../src/preproc/pic/pic.ypp"
4595 : { (yyval.x) = (yyvsp[-2].x) * (yyvsp[0].x); }
4596 : #line 4597 "src/preproc/pic/pic.cpp"
4597 80 : break;
4598 :
4599 732 : case 245: /* expr_not_lower_than: expr '/' expr */
4600 : #line 1640 "../src/preproc/pic/pic.ypp"
4601 : {
4602 : if ((yyvsp[0].x) == 0.0) {
4603 : lex_error("division by zero");
4604 : YYABORT;
4605 : }
4606 : (yyval.x) = (yyvsp[-2].x)/(yyvsp[0].x);
4607 : }
4608 : #line 4609 "src/preproc/pic/pic.cpp"
4609 732 : break;
4610 :
4611 0 : case 246: /* expr_not_lower_than: expr '%' expr */
4612 : #line 1648 "../src/preproc/pic/pic.ypp"
4613 : {
4614 : if ((yyvsp[0].x) == 0.0) {
4615 : lex_error("modulus by zero");
4616 : YYABORT;
4617 : }
4618 : (yyval.x) = fmod((yyvsp[-2].x), (yyvsp[0].x));
4619 : }
4620 : #line 4621 "src/preproc/pic/pic.cpp"
4621 0 : break;
4622 :
4623 0 : case 247: /* expr_not_lower_than: expr '^' expr */
4624 : #line 1656 "../src/preproc/pic/pic.ypp"
4625 : {
4626 : errno = 0;
4627 : (yyval.x) = pow((yyvsp[-2].x), (yyvsp[0].x));
4628 : if (errno == EDOM) {
4629 : lex_error("arguments to '^' operator out of domain");
4630 : YYABORT;
4631 : }
4632 : if (errno == ERANGE) {
4633 : lex_error("result of '^' operator out of range");
4634 : YYABORT;
4635 : }
4636 : }
4637 : #line 4638 "src/preproc/pic/pic.cpp"
4638 0 : break;
4639 :
4640 76 : case 248: /* expr_not_lower_than: '-' expr */
4641 : #line 1669 "../src/preproc/pic/pic.ypp"
4642 : { (yyval.x) = -(yyvsp[0].x); }
4643 : #line 4644 "src/preproc/pic/pic.cpp"
4644 76 : break;
4645 :
4646 88 : case 249: /* expr_not_lower_than: '(' any_expr ')' */
4647 : #line 1671 "../src/preproc/pic/pic.ypp"
4648 : { (yyval.x) = (yyvsp[-1].x); }
4649 : #line 4650 "src/preproc/pic/pic.cpp"
4650 88 : break;
4651 :
4652 126 : case 250: /* expr_not_lower_than: SIN '(' any_expr ')' */
4653 : #line 1673 "../src/preproc/pic/pic.ypp"
4654 : {
4655 : errno = 0;
4656 : (yyval.x) = sin((yyvsp[-1].x));
4657 : if (errno == ERANGE) {
4658 : lex_error("sin result out of range");
4659 : YYABORT;
4660 : }
4661 : }
4662 : #line 4663 "src/preproc/pic/pic.cpp"
4663 126 : break;
4664 :
4665 126 : case 251: /* expr_not_lower_than: COS '(' any_expr ')' */
4666 : #line 1682 "../src/preproc/pic/pic.ypp"
4667 : {
4668 : errno = 0;
4669 : (yyval.x) = cos((yyvsp[-1].x));
4670 : if (errno == ERANGE) {
4671 : lex_error("cos result out of range");
4672 : YYABORT;
4673 : }
4674 : }
4675 : #line 4676 "src/preproc/pic/pic.cpp"
4676 126 : break;
4677 :
4678 2 : case 252: /* expr_not_lower_than: ATAN2 '(' any_expr ',' any_expr ')' */
4679 : #line 1691 "../src/preproc/pic/pic.ypp"
4680 : {
4681 : errno = 0;
4682 : (yyval.x) = atan2((yyvsp[-3].x), (yyvsp[-1].x));
4683 : if (errno == EDOM) {
4684 : lex_error("atan2 argument out of domain");
4685 : YYABORT;
4686 : }
4687 : if (errno == ERANGE) {
4688 : lex_error("atan2 result out of range");
4689 : YYABORT;
4690 : }
4691 : }
4692 : #line 4693 "src/preproc/pic/pic.cpp"
4693 2 : break;
4694 :
4695 0 : case 253: /* expr_not_lower_than: LOG '(' any_expr ')' */
4696 : #line 1704 "../src/preproc/pic/pic.ypp"
4697 : {
4698 : errno = 0;
4699 : (yyval.x) = log10((yyvsp[-1].x));
4700 : if (errno == ERANGE) {
4701 : lex_error("log result out of range");
4702 : YYABORT;
4703 : }
4704 : }
4705 : #line 4706 "src/preproc/pic/pic.cpp"
4706 0 : break;
4707 :
4708 0 : case 254: /* expr_not_lower_than: EXP '(' any_expr ')' */
4709 : #line 1713 "../src/preproc/pic/pic.ypp"
4710 : {
4711 : errno = 0;
4712 : (yyval.x) = pow(10.0, (yyvsp[-1].x));
4713 : if (errno == ERANGE) {
4714 : lex_error("exp result out of range");
4715 : YYABORT;
4716 : }
4717 : }
4718 : #line 4719 "src/preproc/pic/pic.cpp"
4719 0 : break;
4720 :
4721 0 : case 255: /* expr_not_lower_than: SQRT '(' any_expr ')' */
4722 : #line 1722 "../src/preproc/pic/pic.ypp"
4723 : {
4724 : errno = 0;
4725 : (yyval.x) = sqrt((yyvsp[-1].x));
4726 : if (errno == EDOM) {
4727 : lex_error("sqrt argument out of domain");
4728 : YYABORT;
4729 : }
4730 : }
4731 : #line 4732 "src/preproc/pic/pic.cpp"
4732 0 : break;
4733 :
4734 0 : case 256: /* expr_not_lower_than: K_MAX '(' any_expr ',' any_expr ')' */
4735 : #line 1731 "../src/preproc/pic/pic.ypp"
4736 : { (yyval.x) = (yyvsp[-3].x) > (yyvsp[-1].x) ? (yyvsp[-3].x) : (yyvsp[-1].x); }
4737 : #line 4738 "src/preproc/pic/pic.cpp"
4738 0 : break;
4739 :
4740 0 : case 257: /* expr_not_lower_than: K_MIN '(' any_expr ',' any_expr ')' */
4741 : #line 1733 "../src/preproc/pic/pic.ypp"
4742 : { (yyval.x) = (yyvsp[-3].x) < (yyvsp[-1].x) ? (yyvsp[-3].x) : (yyvsp[-1].x); }
4743 : #line 4744 "src/preproc/pic/pic.cpp"
4744 0 : break;
4745 :
4746 0 : case 258: /* expr_not_lower_than: INT '(' any_expr ')' */
4747 : #line 1735 "../src/preproc/pic/pic.ypp"
4748 : { (yyval.x) = (yyvsp[-1].x) < 0 ? -floor(-(yyvsp[-1].x)) : floor((yyvsp[-1].x)); }
4749 : #line 4750 "src/preproc/pic/pic.cpp"
4750 0 : break;
4751 :
4752 0 : case 259: /* expr_not_lower_than: RAND '(' any_expr ')' */
4753 : #line 1737 "../src/preproc/pic/pic.ypp"
4754 : {
4755 : lex_error("use of 'rand' with an argument is"
4756 : " deprecated; shift and scale 'rand()' with"
4757 : " arithmetic instead");
4758 : (yyval.x) = 1.0 + floor(((rand()&0x7fff)/double(0x7fff))*(yyvsp[-1].x));
4759 : }
4760 : #line 4761 "src/preproc/pic/pic.cpp"
4761 0 : break;
4762 :
4763 0 : case 260: /* expr_not_lower_than: RAND '(' ')' */
4764 : #line 1744 "../src/preproc/pic/pic.ypp"
4765 : {
4766 : /* return a random number in the range [0,1) */
4767 : /* portable, but not very random */
4768 : (yyval.x) = (rand() & 0x7fff) / double(0x8000);
4769 : }
4770 : #line 4771 "src/preproc/pic/pic.cpp"
4771 0 : break;
4772 :
4773 0 : case 261: /* expr_not_lower_than: SRAND '(' any_expr ')' */
4774 : #line 1750 "../src/preproc/pic/pic.ypp"
4775 : {
4776 : (yyval.x) = 0;
4777 : srand((unsigned int)(yyvsp[-1].x));
4778 : }
4779 : #line 4780 "src/preproc/pic/pic.cpp"
4780 0 : break;
4781 :
4782 0 : case 262: /* expr_not_lower_than: expr LESSEQUAL expr */
4783 : #line 1755 "../src/preproc/pic/pic.ypp"
4784 : { (yyval.x) = ((yyvsp[-2].x) <= (yyvsp[0].x)); }
4785 : #line 4786 "src/preproc/pic/pic.cpp"
4786 0 : break;
4787 :
4788 0 : case 263: /* expr_not_lower_than: expr '>' expr */
4789 : #line 1757 "../src/preproc/pic/pic.ypp"
4790 : { (yyval.x) = ((yyvsp[-2].x) > (yyvsp[0].x)); }
4791 : #line 4792 "src/preproc/pic/pic.cpp"
4792 0 : break;
4793 :
4794 0 : case 264: /* expr_not_lower_than: expr GREATEREQUAL expr */
4795 : #line 1759 "../src/preproc/pic/pic.ypp"
4796 : { (yyval.x) = ((yyvsp[-2].x) >= (yyvsp[0].x)); }
4797 : #line 4798 "src/preproc/pic/pic.cpp"
4798 0 : break;
4799 :
4800 0 : case 265: /* expr_not_lower_than: expr EQUALEQUAL expr */
4801 : #line 1761 "../src/preproc/pic/pic.ypp"
4802 : { (yyval.x) = ((yyvsp[-2].x) == (yyvsp[0].x)); }
4803 : #line 4804 "src/preproc/pic/pic.cpp"
4804 0 : break;
4805 :
4806 0 : case 266: /* expr_not_lower_than: expr NOTEQUAL expr */
4807 : #line 1763 "../src/preproc/pic/pic.ypp"
4808 : { (yyval.x) = ((yyvsp[-2].x) != (yyvsp[0].x)); }
4809 : #line 4810 "src/preproc/pic/pic.cpp"
4810 0 : break;
4811 :
4812 0 : case 267: /* expr_not_lower_than: expr ANDAND expr */
4813 : #line 1765 "../src/preproc/pic/pic.ypp"
4814 : { (yyval.x) = ((yyvsp[-2].x) != 0.0 && (yyvsp[0].x) != 0.0); }
4815 : #line 4816 "src/preproc/pic/pic.cpp"
4816 0 : break;
4817 :
4818 0 : case 268: /* expr_not_lower_than: expr OROR expr */
4819 : #line 1767 "../src/preproc/pic/pic.ypp"
4820 : { (yyval.x) = ((yyvsp[-2].x) != 0.0 || (yyvsp[0].x) != 0.0); }
4821 : #line 4822 "src/preproc/pic/pic.cpp"
4822 0 : break;
4823 :
4824 36 : case 269: /* expr_not_lower_than: '!' expr */
4825 : #line 1769 "../src/preproc/pic/pic.ypp"
4826 : { (yyval.x) = ((yyvsp[0].x) == 0.0); }
4827 : #line 4828 "src/preproc/pic/pic.cpp"
4828 36 : break;
4829 :
4830 :
4831 : #line 4832 "src/preproc/pic/pic.cpp"
4832 :
4833 4859 : default: break;
4834 : }
4835 : /* User semantic actions sometimes alter yychar, and that requires
4836 : that yytoken be updated with the new translation. We take the
4837 : approach of translating immediately before every use of yytoken.
4838 : One alternative is translating here after every semantic action,
4839 : but that translation would be missed if the semantic action invokes
4840 : YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
4841 : if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
4842 : incorrect destructor might then be invoked immediately. In the
4843 : case of YYERROR or YYBACKUP, subsequent parser actions might lead
4844 : to an incorrect destructor call or verbose syntax error message
4845 : before the lookahead is translated. */
4846 : YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
4847 :
4848 30683 : YYPOPSTACK (yylen);
4849 30683 : yylen = 0;
4850 :
4851 30683 : *++yyvsp = yyval;
4852 :
4853 : /* Now 'shift' the result of the reduction. Determine what state
4854 : that goes to, based on the state we popped back to and the rule
4855 : number reduced by. */
4856 : {
4857 30683 : const int yylhs = yyr1[yyn] - YYNTOKENS;
4858 30683 : const int yyi = yypgoto[yylhs] + *yyssp;
4859 24373 : yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
4860 46219 : ? yytable[yyi]
4861 15147 : : yydefgoto[yylhs]);
4862 : }
4863 :
4864 30683 : goto yynewstate;
4865 :
4866 :
4867 : /*--------------------------------------.
4868 : | yyerrlab -- here on detecting error. |
4869 : `--------------------------------------*/
4870 0 : yyerrlab:
4871 : /* Make sure we have latest lookahead translation. See comments at
4872 : user semantic actions for why this is necessary. */
4873 0 : yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
4874 : /* If not already recovering from an error, report this error. */
4875 0 : if (!yyerrstatus)
4876 : {
4877 0 : ++yynerrs;
4878 0 : yyerror (YY_("syntax error"));
4879 : }
4880 :
4881 0 : if (yyerrstatus == 3)
4882 : {
4883 : /* If just tried and failed to reuse lookahead token after an
4884 : error, discard it. */
4885 :
4886 0 : if (yychar <= YYEOF)
4887 : {
4888 : /* Return failure if at end of input. */
4889 0 : if (yychar == YYEOF)
4890 0 : YYABORT;
4891 : }
4892 : else
4893 : {
4894 0 : yydestruct ("Error: discarding",
4895 : yytoken, &yylval);
4896 0 : yychar = YYEMPTY;
4897 : }
4898 : }
4899 :
4900 : /* Else will try to reuse lookahead token after shifting the error
4901 : token. */
4902 0 : goto yyerrlab1;
4903 :
4904 :
4905 : /*---------------------------------------------------.
4906 : | yyerrorlab -- error raised explicitly by YYERROR. |
4907 : `---------------------------------------------------*/
4908 : yyerrorlab:
4909 : /* Pacify compilers when the user code never invokes YYERROR and the
4910 : label yyerrorlab therefore never appears in user code. */
4911 : if (0)
4912 : YYERROR;
4913 :
4914 : /* Do not reclaim the symbols of the rule whose action triggered
4915 : this YYERROR. */
4916 : YYPOPSTACK (yylen);
4917 : yylen = 0;
4918 : YY_STACK_PRINT (yyss, yyssp);
4919 : yystate = *yyssp;
4920 : goto yyerrlab1;
4921 :
4922 :
4923 : /*-------------------------------------------------------------.
4924 : | yyerrlab1 -- common code for both syntax error and YYERROR. |
4925 : `-------------------------------------------------------------*/
4926 0 : yyerrlab1:
4927 0 : yyerrstatus = 3; /* Each real token shifted decrements this. */
4928 :
4929 : /* Pop stack until we find a state that shifts the error token. */
4930 : for (;;)
4931 : {
4932 0 : yyn = yypact[yystate];
4933 0 : if (!yypact_value_is_default (yyn))
4934 : {
4935 0 : yyn += YYSYMBOL_YYerror;
4936 0 : if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
4937 : {
4938 0 : yyn = yytable[yyn];
4939 0 : if (0 < yyn)
4940 0 : break;
4941 : }
4942 : }
4943 :
4944 : /* Pop the current state because it cannot handle the error token. */
4945 0 : if (yyssp == yyss)
4946 0 : YYABORT;
4947 :
4948 :
4949 0 : yydestruct ("Error: popping",
4950 0 : YY_ACCESSING_SYMBOL (yystate), yyvsp);
4951 0 : YYPOPSTACK (1);
4952 0 : yystate = *yyssp;
4953 : YY_STACK_PRINT (yyss, yyssp);
4954 : }
4955 :
4956 : YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
4957 0 : *++yyvsp = yylval;
4958 : YY_IGNORE_MAYBE_UNINITIALIZED_END
4959 :
4960 :
4961 : /* Shift the error token. */
4962 : YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
4963 :
4964 0 : yystate = yyn;
4965 0 : goto yynewstate;
4966 :
4967 :
4968 : /*-------------------------------------.
4969 : | yyacceptlab -- YYACCEPT comes here. |
4970 : `-------------------------------------*/
4971 114 : yyacceptlab:
4972 114 : yyresult = 0;
4973 114 : goto yyreturn;
4974 :
4975 :
4976 : /*-----------------------------------.
4977 : | yyabortlab -- YYABORT comes here. |
4978 : `-----------------------------------*/
4979 0 : yyabortlab:
4980 0 : yyresult = 1;
4981 0 : goto yyreturn;
4982 :
4983 :
4984 : #if !defined yyoverflow
4985 : /*-------------------------------------------------.
4986 : | yyexhaustedlab -- memory exhaustion comes here. |
4987 : `-------------------------------------------------*/
4988 0 : yyexhaustedlab:
4989 0 : yyerror (YY_("memory exhausted"));
4990 0 : yyresult = 2;
4991 0 : goto yyreturn;
4992 : #endif
4993 :
4994 :
4995 : /*-------------------------------------------------------.
4996 : | yyreturn -- parsing is finished, clean up and return. |
4997 : `-------------------------------------------------------*/
4998 114 : yyreturn:
4999 114 : if (yychar != YYEMPTY)
5000 : {
5001 : /* Make sure we have latest lookahead translation. See comments at
5002 : user semantic actions for why this is necessary. */
5003 0 : yytoken = YYTRANSLATE (yychar);
5004 0 : yydestruct ("Cleanup: discarding lookahead",
5005 : yytoken, &yylval);
5006 : }
5007 : /* Do not reclaim the symbols of the rule whose action triggered
5008 : this YYABORT or YYACCEPT. */
5009 114 : YYPOPSTACK (yylen);
5010 : YY_STACK_PRINT (yyss, yyssp);
5011 342 : while (yyssp != yyss)
5012 : {
5013 228 : yydestruct ("Cleanup: popping",
5014 228 : YY_ACCESSING_SYMBOL (+*yyssp), yyvsp);
5015 228 : YYPOPSTACK (1);
5016 : }
5017 : #ifndef yyoverflow
5018 114 : if (yyss != yyssa)
5019 0 : YYSTACK_FREE (yyss);
5020 : #endif
5021 :
5022 114 : return yyresult;
5023 : }
5024 :
5025 : #line 1773 "../src/preproc/pic/pic.ypp"
5026 :
5027 :
5028 : /* bison defines const to be empty unless __STDC__ is defined, which it
5029 : isn't under cfront */
5030 :
5031 : #ifdef const
5032 : #undef const
5033 : #endif
5034 :
5035 : static struct pic_defaults_table {
5036 : const char *name;
5037 : double val;
5038 : int scaled; // non-zero if val should be multiplied by scale
5039 : } defaults_table[] = {
5040 : { "arcrad", .25, 1 },
5041 : { "arrowht", .1, 1 },
5042 : { "arrowwid", .05, 1 },
5043 : { "circlerad", .25, 1 },
5044 : { "boxht", .5, 1 },
5045 : { "boxwid", .75, 1 },
5046 : { "boxrad", 0.0, 1 },
5047 : { "dashwid", .05, 1 },
5048 : { "ellipseht", .5, 1 },
5049 : { "ellipsewid", .75, 1 },
5050 : { "moveht", .5, 1 },
5051 : { "movewid", .5, 1 },
5052 : { "lineht", .5, 1 },
5053 : { "linewid", .5, 1 },
5054 : { "textht", 0.0, 1 },
5055 : { "textwid", 0.0, 1 },
5056 : { "scale", 1.0, 0 },
5057 : { "linethick", -1.0, 0 }, // in points
5058 : { "fillval", .5, 0 },
5059 : { "arrowhead", 1.0, 0 },
5060 : { "maxpswid", 8.5, 0 },
5061 : { "maxpsht", 11.0, 0 },
5062 : };
5063 :
5064 : place *lookup_label(const char *label)
5065 : {
5066 : saved_state *state = current_saved_state;
5067 : PTABLE(place) *tbl = current_table;
5068 : for (;;) {
5069 : place *pl = tbl->lookup(label);
5070 : if (pl)
5071 : return pl;
5072 : if (!state)
5073 : return 0 /* nullptr */;
5074 : tbl = state->tbl;
5075 : state = state->prev;
5076 : }
5077 : }
5078 :
5079 : void define_label(const char *label, const place *pl)
5080 : {
5081 : place *p = new place[1];
5082 : *p = *pl;
5083 : current_table->define(label, p);
5084 : }
5085 :
5086 : int lookup_variable(const char *name, double *val)
5087 : {
5088 : place *pl = lookup_label(name);
5089 : if (pl) {
5090 : *val = pl->x;
5091 : return 1;
5092 : }
5093 : return 0;
5094 : }
5095 :
5096 : void define_variable(const char *name, double val)
5097 : {
5098 : place *p = new place[1];
5099 : p->obj = 0;
5100 : p->x = val;
5101 : p->y = 0.0;
5102 : current_table->define(name, p);
5103 : if (strcmp(name, "scale") == 0) {
5104 : // When the scale changes, reset all scaled predefined variables to
5105 : // their default values.
5106 : for (size_t i = 0; i < countof(defaults_table); i++)
5107 : if (defaults_table[i].scaled)
5108 : define_variable(defaults_table[i].name,
5109 : (val * defaults_table[i].val));
5110 : }
5111 : }
5112 :
5113 : // called once only (not once per parse)
5114 :
5115 : void parse_init()
5116 : {
5117 : current_direction = RIGHT_DIRECTION;
5118 : current_position.x = 0.0;
5119 : current_position.y = 0.0;
5120 : // This resets everything to its default value.
5121 : reset_all();
5122 : }
5123 :
5124 : void reset(const char *nm)
5125 : {
5126 : for (size_t i = 0; i < countof(defaults_table); i++)
5127 : if (strcmp(nm, defaults_table[i].name) == 0) {
5128 : double val = defaults_table[i].val;
5129 : if (defaults_table[i].scaled) {
5130 : double scale;
5131 : lookup_variable("scale", &scale);
5132 : val *= scale;
5133 : }
5134 : define_variable(defaults_table[i].name, val);
5135 : return;
5136 : }
5137 : lex_error("'%1' is not a predefined variable", nm);
5138 : }
5139 :
5140 : void reset_all()
5141 : {
5142 : // We only have to explicitly reset the predefined variables that
5143 : // aren't scaled because 'scale' is not scaled, and changing the
5144 : // value of 'scale' will reset all the predefined variables that
5145 : // are scaled.
5146 : for (size_t i = 0; i < countof(defaults_table); i++)
5147 : if (!defaults_table[i].scaled)
5148 : define_variable(defaults_table[i].name, defaults_table[i].val);
5149 : }
5150 :
5151 : // called after each parse
5152 :
5153 : void parse_cleanup()
5154 : {
5155 : while (current_saved_state != 0) {
5156 : delete current_table;
5157 : current_table = current_saved_state->tbl;
5158 : saved_state *tem = current_saved_state;
5159 : current_saved_state = current_saved_state->prev;
5160 : delete tem;
5161 : }
5162 : assert(current_table == &top_table);
5163 : PTABLE_ITERATOR(place) iter(current_table);
5164 : const char *key;
5165 : place *pl;
5166 : while (iter.next(&key, &pl))
5167 : if (pl->obj != 0) {
5168 : position pos = pl->obj->origin();
5169 : pl->obj = 0;
5170 : pl->x = pos.x;
5171 : pl->y = pos.y;
5172 : }
5173 : while (olist.head != 0) {
5174 : object *tem = olist.head;
5175 : olist.head = olist.head->next;
5176 : delete tem;
5177 : }
5178 : olist.tail = 0;
5179 : current_direction = RIGHT_DIRECTION;
5180 : current_position.x = 0.0;
5181 : current_position.y = 0.0;
5182 : }
5183 :
5184 : const char *ordinal_postfix(int n)
5185 : {
5186 : if (n < 10 || n > 20)
5187 : switch (n % 10) {
5188 : case 1:
5189 : return "st";
5190 : case 2:
5191 : return "nd";
5192 : case 3:
5193 : return "rd";
5194 : }
5195 : return "th";
5196 : }
5197 :
5198 : const char *object_type_name(object_type type)
5199 : {
5200 : switch (type) {
5201 : case BOX_OBJECT:
5202 : return "box";
5203 : case CIRCLE_OBJECT:
5204 : return "circle";
5205 : case ELLIPSE_OBJECT:
5206 : return "ellipse";
5207 : case ARC_OBJECT:
5208 : return "arc";
5209 : case SPLINE_OBJECT:
5210 : return "spline";
5211 : case LINE_OBJECT:
5212 : return "line";
5213 : case POLYGON_OBJECT:
5214 : return "polygon";
5215 : case ARROW_OBJECT:
5216 : return "arrow";
5217 : case MOVE_OBJECT:
5218 : return "move";
5219 : case TEXT_OBJECT:
5220 : return "\"\"";
5221 : case BLOCK_OBJECT:
5222 : return "[]";
5223 : case OTHER_OBJECT:
5224 : case MARK_OBJECT:
5225 : default:
5226 : break;
5227 : }
5228 : return "object";
5229 : }
5230 :
5231 : static char sprintf_buf[1024];
5232 :
5233 : char *format_number(const char *fmt, double n)
5234 : {
5235 : if (0 /* nullptr */ == fmt)
5236 : fmt = "%g";
5237 : return do_sprintf(fmt, &n, 1);
5238 : }
5239 :
5240 : char *do_sprintf(const char *fmt, const double *v, int nv)
5241 : {
5242 : // Define valid conversion specifiers and modifiers.
5243 : static const char spcs[] = "eEfgG%";
5244 : static const char mods[] = "#-+ 0123456789.";
5245 : string result;
5246 : int i = 0;
5247 : string one_format;
5248 : while (*fmt) {
5249 : if ('%' == *fmt) {
5250 : one_format += *fmt++;
5251 : for (; *fmt != '\0' && strchr(mods, *fmt) != 0; fmt++)
5252 : one_format += *fmt;
5253 : if ('\0' == *fmt || strchr(spcs, *fmt) == 0) {
5254 : lex_error("invalid sprintf conversion specifier '%1'", *fmt);
5255 : result += one_format;
5256 : result += fmt;
5257 : break;
5258 : }
5259 : if ('%' == *fmt) {
5260 : fmt++;
5261 : snprintf(sprintf_buf, sizeof sprintf_buf, "%%");
5262 : }
5263 : else {
5264 : if (i >= nv) {
5265 : lex_error("too few arguments to sprintf");
5266 : result += one_format;
5267 : result += fmt;
5268 : break;
5269 : }
5270 : one_format += *fmt++;
5271 : one_format += '\0';
5272 : // We validated the format string above. Most conversion specifiers are
5273 : // rejected, including `n`.
5274 : #pragma GCC diagnostic push
5275 : #pragma GCC diagnostic ignored "-Wformat-nonliteral"
5276 : snprintf(sprintf_buf, sizeof sprintf_buf,
5277 : one_format.contents(), v[i++]);
5278 : #pragma GCC diagnostic pop
5279 : }
5280 : one_format.clear();
5281 : result += sprintf_buf;
5282 : }
5283 : else
5284 : result += *fmt++;
5285 : }
5286 : result += '\0';
5287 : return strsave(result.contents());
5288 : }
5289 :
5290 : // Local Variables:
5291 : // fill-column: 72
5292 : // mode: C++
5293 : // End:
5294 : // vim: set cindent noexpandtab shiftwidth=2 textwidth=72:
|