Fossil SCM

Add in the latest Pikchr module with bug fixes and with support for up to 5 strings per object.

drh 2020-09-10 16:15 trunk
Commit d6639e466edba3a08c1949ac734404d10d71db27f0400d8120e0d3a8620409b4
1 file changed +1420 -1320
+1420 -1320
--- src/pikchr.c
+++ src/pikchr.c
@@ -168,21 +168,25 @@
168168
#define FN_MAX 3
169169
#define FN_MIN 4
170170
#define FN_SIN 5
171171
#define FN_SQRT 6
172172
173
-/* Text position and style flags */
174
-#define TP_LJUST 0x01 /* left justify...... */
175
-#define TP_RJUST 0x02 /* ...Right justify */
176
-#define TP_JMASK 0x03 /* Mask for justification bits */
177
-#define TP_ABOVE 0x04 /* Position text above PElem.ptAt */
178
-#define TP_BELOW 0x08 /* Position text below PElem.ptAt */
179
-#define TP_VMASK 0x0c /* Mask for text positioning flags */
180
-#define TP_ITALIC 0x10 /* Italic font */
181
-#define TP_BOLD 0x20 /* Bold font */
182
-#define TP_FMASK 0x30 /* Mask for font style */
183
-#define TP_ALIGN 0x40 /* Rotate to align with the line */
173
+/* Text position and style flags. Stored in PToken.eCode so limited
174
+** to 15 bits. */
175
+#define TP_LJUST 0x0001 /* left justify...... */
176
+#define TP_RJUST 0x0002 /* ...Right justify */
177
+#define TP_JMASK 0x0003 /* Mask for justification bits */
178
+#define TP_ABOVE2 0x0004 /* Position text way above PElem.ptAt */
179
+#define TP_ABOVE 0x0008 /* Position text above PElem.ptAt */
180
+#define TP_CENTER 0x0010 /* On the line */
181
+#define TP_BELOW 0x0020 /* Position text below PElem.ptAt */
182
+#define TP_BELOW2 0x0040 /* Position text way below PElem.ptAt */
183
+#define TP_VMASK 0x007c /* Mask for text positioning flags */
184
+#define TP_ITALIC 0x1000 /* Italic font */
185
+#define TP_BOLD 0x2000 /* Bold font */
186
+#define TP_FMASK 0x3000 /* Mask for font style */
187
+#define TP_ALIGN 0x4000 /* Rotate to align with the line */
184188
185189
/* An object to hold a position in 2-D space */
186190
struct PPoint {
187191
PNum x, y; /* X and Y coordinates */
188192
};
@@ -286,11 +290,11 @@
286290
char bClose; /* True if "close" is seen */
287291
char bChop; /* True if "chop" is seen */
288292
unsigned char nTxt; /* Number of text values */
289293
unsigned mProp; /* Masks of properties set so far */
290294
unsigned mCalc; /* Values computed from other constraints */
291
- PToken aTxt[3]; /* Text with .eCode holding TP flags */
295
+ PToken aTxt[5]; /* Text with .eCode holding TP flags */
292296
int iLayer; /* Rendering order */
293297
int inDir, outDir; /* Entry and exit directions */
294298
int nPath; /* Number of path points */
295299
PPoint *aPath; /* Array of path points */
296300
PBox bbox; /* Bounding box */
@@ -408,89 +412,89 @@
408412
static void pik_same(Pik *p, PElem*, PToken*);
409413
static PPoint pik_nth_vertex(Pik *p, PToken *pNth, PToken *pErr, PElem *pElem);
410414
static PToken pik_next_semantic_token(Pik *p, PToken *pThis);
411415
412416
413
-#line 439 "pikchr.c"
417
+#line 443 "pikchr.c"
414418
/**************** End of %include directives **********************************/
415419
/* These constants specify the various numeric values for terminal symbols.
416420
***************** Begin token definitions *************************************/
417421
#ifndef T_ID
418422
#define T_ID 1
419423
#define T_EDGEPT 2
420
-#define T_EOL 3
421
-#define T_ASSIGN 4
422
-#define T_PLACENAME 5
423
-#define T_COLON 6
424
-#define T_FILL 7
425
-#define T_COLOR 8
426
-#define T_PRINT 9
427
-#define T_STRING 10
428
-#define T_COMMA 11
429
-#define T_CLASSNAME 12
430
-#define T_LB 13
431
-#define T_RB 14
432
-#define T_UP 15
433
-#define T_DOWN 16
434
-#define T_LEFT 17
435
-#define T_RIGHT 18
436
-#define T_PERCENT 19
437
-#define T_CLOSE 20
438
-#define T_CHOP 21
439
-#define T_FROM 22
440
-#define T_TO 23
441
-#define T_THEN 24
442
-#define T_AT 25
443
-#define T_WITH 26
444
-#define T_SAME 27
445
-#define T_AS 28
446
-#define T_FIT 29
447
-#define T_UNTIL 30
448
-#define T_EVEN 31
449
-#define T_AND 32
450
-#define T_DOT_E 33
451
-#define T_HEIGHT 34
452
-#define T_WIDTH 35
453
-#define T_RADIUS 36
454
-#define T_DIAMETER 37
455
-#define T_THICKNESS 38
456
-#define T_DOTTED 39
457
-#define T_DASHED 40
458
-#define T_CW 41
459
-#define T_CCW 42
460
-#define T_LARROW 43
461
-#define T_RARROW 44
462
-#define T_LRARROW 45
463
-#define T_INVIS 46
464
-#define T_CENTER 47
465
-#define T_LJUST 48
466
-#define T_RJUST 49
467
-#define T_ABOVE 50
468
-#define T_BELOW 51
469
-#define T_ITALIC 52
470
-#define T_BOLD 53
471
-#define T_ALIGNED 54
472
-#define T_PLUS 55
473
-#define T_MINUS 56
474
-#define T_LP 57
475
-#define T_RP 58
476
-#define T_OF 59
477
-#define T_HEADING 60
478
-#define T_WAY 61
479
-#define T_BETWEEN 62
480
-#define T_THE 63
481
-#define T_DOT_L 64
482
-#define T_START 65
483
-#define T_END 66
484
-#define T_NTH 67
485
-#define T_VERTEX 68
486
-#define T_IN 69
487
-#define T_DOT_U 70
488
-#define T_LAST 71
489
-#define T_STAR 72
490
-#define T_SLASH 73
491
-#define T_UMINUS 74
424
+#define T_OF 3
425
+#define T_PLUS 4
426
+#define T_MINUS 5
427
+#define T_STAR 6
428
+#define T_SLASH 7
429
+#define T_PERCENT 8
430
+#define T_UMINUS 9
431
+#define T_EOL 10
432
+#define T_ASSIGN 11
433
+#define T_PLACENAME 12
434
+#define T_COLON 13
435
+#define T_FILL 14
436
+#define T_COLOR 15
437
+#define T_THICKNESS 16
438
+#define T_PRINT 17
439
+#define T_STRING 18
440
+#define T_COMMA 19
441
+#define T_CLASSNAME 20
442
+#define T_LB 21
443
+#define T_RB 22
444
+#define T_UP 23
445
+#define T_DOWN 24
446
+#define T_LEFT 25
447
+#define T_RIGHT 26
448
+#define T_CLOSE 27
449
+#define T_CHOP 28
450
+#define T_FROM 29
451
+#define T_TO 30
452
+#define T_THEN 31
453
+#define T_AT 32
454
+#define T_WITH 33
455
+#define T_SAME 34
456
+#define T_AS 35
457
+#define T_FIT 36
458
+#define T_UNTIL 37
459
+#define T_EVEN 38
460
+#define T_AND 39
461
+#define T_DOT_E 40
462
+#define T_HEIGHT 41
463
+#define T_WIDTH 42
464
+#define T_RADIUS 43
465
+#define T_DIAMETER 44
466
+#define T_DOTTED 45
467
+#define T_DASHED 46
468
+#define T_CW 47
469
+#define T_CCW 48
470
+#define T_LARROW 49
471
+#define T_RARROW 50
472
+#define T_LRARROW 51
473
+#define T_INVIS 52
474
+#define T_CENTER 53
475
+#define T_LJUST 54
476
+#define T_RJUST 55
477
+#define T_ABOVE 56
478
+#define T_BELOW 57
479
+#define T_ITALIC 58
480
+#define T_BOLD 59
481
+#define T_ALIGNED 60
482
+#define T_LP 61
483
+#define T_RP 62
484
+#define T_HEADING 63
485
+#define T_WAY 64
486
+#define T_BETWEEN 65
487
+#define T_THE 66
488
+#define T_DOT_L 67
489
+#define T_START 68
490
+#define T_END 69
491
+#define T_NTH 70
492
+#define T_VERTEX 71
493
+#define T_IN 72
494
+#define T_DOT_U 73
495
+#define T_LAST 74
492496
#define T_NUMBER 75
493497
#define T_FUNC1 76
494498
#define T_FUNC2 77
495499
#define T_X 78
496500
#define T_Y 79
@@ -580,21 +584,21 @@
580584
#define pik_parserCTX_PARAM ,p
581585
#define pik_parserCTX_FETCH Pik *p=yypParser->p;
582586
#define pik_parserCTX_STORE yypParser->p=p;
583587
#define YYFALLBACK 1
584588
#define YYNSTATE 153
585
-#define YYNRULE 142
586
-#define YYNRULE_WITH_ACTION 107
589
+#define YYNRULE 146
590
+#define YYNRULE_WITH_ACTION 110
587591
#define YYNTOKEN 82
588592
#define YY_MAX_SHIFT 152
589
-#define YY_MIN_SHIFTREDUCE 264
590
-#define YY_MAX_SHIFTREDUCE 405
591
-#define YY_ERROR_ACTION 406
592
-#define YY_ACCEPT_ACTION 407
593
-#define YY_NO_ACTION 408
594
-#define YY_MIN_REDUCE 409
595
-#define YY_MAX_REDUCE 550
593
+#define YY_MIN_SHIFTREDUCE 268
594
+#define YY_MAX_SHIFTREDUCE 413
595
+#define YY_ERROR_ACTION 414
596
+#define YY_ACCEPT_ACTION 415
597
+#define YY_NO_ACTION 416
598
+#define YY_MIN_REDUCE 417
599
+#define YY_MAX_REDUCE 562
596600
/************* End control #defines *******************************************/
597601
#define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
598602
599603
/* Define the yytestcase() macro to be a no-op if is not already defined
600604
** otherwise.
@@ -657,246 +661,248 @@
657661
** yy_reduce_ofst[] For each state, the offset into yy_action for
658662
** shifting non-terminals after a reduce.
659663
** yy_default[] Default action for each state.
660664
**
661665
*********** Begin parsing tables **********************************************/
662
-#define YY_ACTTAB_COUNT (853)
666
+#define YY_ACTTAB_COUNT (866)
663667
static const YYACTIONTYPE yy_action[] = {
664
- /* 0 */ 505, 19, 113, 506, 507, 504, 112, 393, 394, 41,
665
- /* 10 */ 72, 27, 40, 28, 132, 378, 379, 380, 381, 142,
666
- /* 20 */ 294, 295, 10, 9, 298, 8, 51, 111, 277, 303,
667
- /* 30 */ 114, 114, 529, 529, 306, 306, 306, 306, 306, 391,
668
- /* 40 */ 392, 307, 308, 309, 310, 311, 312, 356, 401, 343,
669
- /* 50 */ 147, 339, 25, 393, 394, 314, 314, 314, 314, 314,
670
- /* 60 */ 314, 314, 314, 404, 405, 64, 137, 129, 21, 139,
671
- /* 70 */ 135, 141, 99, 101, 100, 151, 109, 401, 50, 49,
672
- /* 80 */ 306, 306, 306, 306, 306, 391, 392, 73, 24, 124,
673
- /* 90 */ 38, 35, 404, 405, 74, 48, 47, 95, 39, 281,
674
- /* 100 */ 52, 45, 46, 1, 126, 125, 103, 151, 109, 6,
675
- /* 110 */ 420, 131, 130, 89, 7, 69, 69, 107, 341, 148,
676
- /* 120 */ 95, 355, 144, 143, 400, 400, 402, 403, 356, 103,
677
- /* 130 */ 151, 109, 339, 420, 393, 394, 63, 18, 17, 522,
678
- /* 140 */ 341, 148, 50, 49, 388, 354, 122, 32, 123, 397,
679
- /* 150 */ 98, 410, 417, 26, 12, 402, 403, 413, 387, 48,
680
- /* 160 */ 47, 306, 306, 306, 306, 306, 391, 392, 152, 356,
681
- /* 170 */ 401, 22, 116, 339, 128, 339, 11, 108, 71, 77,
682
- /* 180 */ 279, 70, 45, 46, 5, 404, 405, 320, 103, 151,
683
- /* 190 */ 109, 446, 151, 109, 94, 398, 356, 401, 107, 108,
684
- /* 200 */ 339, 321, 355, 144, 143, 400, 400, 415, 26, 65,
685
- /* 210 */ 121, 129, 404, 405, 120, 401, 416, 101, 100, 151,
686
- /* 220 */ 109, 48, 47, 45, 46, 1, 127, 151, 109, 409,
687
- /* 230 */ 404, 405, 24, 131, 130, 89, 484, 97, 124, 107,
688
- /* 240 */ 112, 107, 396, 355, 144, 143, 66, 39, 402, 403,
689
- /* 250 */ 45, 46, 1, 126, 125, 14, 15, 411, 417, 26,
690
- /* 260 */ 131, 130, 89, 413, 16, 535, 107, 484, 53, 95,
691
- /* 270 */ 355, 144, 143, 484, 152, 402, 403, 22, 103, 151,
692
- /* 280 */ 109, 106, 434, 393, 394, 54, 18, 17, 67, 55,
693
- /* 290 */ 82, 50, 49, 402, 403, 122, 32, 123, 397, 103,
694
- /* 300 */ 151, 109, 480, 151, 109, 20, 363, 364, 48, 47,
695
- /* 310 */ 306, 306, 306, 306, 306, 391, 392, 371, 356, 30,
696
- /* 320 */ 56, 133, 339, 372, 373, 375, 71, 2, 279, 70,
697
- /* 330 */ 68, 378, 379, 380, 381, 356, 393, 394, 102, 96,
698
- /* 340 */ 368, 331, 332, 367, 276, 369, 370, 117, 115, 65,
699
- /* 350 */ 57, 129, 13, 58, 400, 400, 450, 101, 100, 151,
700
- /* 360 */ 109, 31, 366, 306, 306, 306, 306, 306, 391, 392,
701
- /* 370 */ 95, 356, 45, 46, 5, 339, 479, 151, 109, 103,
702
- /* 380 */ 151, 109, 59, 414, 94, 50, 49, 78, 107, 45,
703
- /* 390 */ 46, 5, 355, 144, 143, 356, 103, 151, 109, 96,
704
- /* 400 */ 365, 94, 48, 47, 60, 107, 43, 400, 400, 355,
705
- /* 410 */ 144, 143, 356, 75, 137, 44, 339, 139, 135, 141,
706
- /* 420 */ 61, 84, 103, 151, 109, 45, 46, 5, 347, 356,
707
- /* 430 */ 103, 151, 109, 339, 340, 50, 49, 94, 319, 342,
708
- /* 440 */ 149, 107, 423, 290, 23, 355, 144, 143, 150, 45,
709
- /* 450 */ 46, 5, 48, 47, 62, 110, 410, 417, 26, 345,
710
- /* 460 */ 29, 94, 413, 408, 62, 107, 45, 46, 3, 355,
711
- /* 470 */ 144, 143, 408, 152, 34, 407, 22, 408, 94, 50,
712
- /* 480 */ 49, 346, 107, 45, 46, 4, 355, 144, 143, 408,
713
- /* 490 */ 408, 50, 49, 408, 318, 94, 48, 47, 408, 107,
714
- /* 500 */ 408, 341, 148, 355, 144, 143, 76, 137, 48, 47,
715
- /* 510 */ 139, 135, 141, 408, 408, 103, 151, 109, 50, 49,
716
- /* 520 */ 88, 137, 408, 408, 139, 135, 141, 408, 408, 103,
717
- /* 530 */ 151, 109, 65, 408, 129, 48, 47, 408, 90, 449,
718
- /* 540 */ 101, 100, 151, 109, 65, 408, 129, 103, 151, 109,
719
- /* 550 */ 408, 444, 101, 100, 151, 109, 65, 146, 129, 408,
720
- /* 560 */ 108, 408, 408, 442, 101, 100, 151, 109, 408, 65,
721
- /* 570 */ 408, 129, 478, 151, 109, 408, 441, 101, 100, 151,
722
- /* 580 */ 109, 408, 65, 408, 129, 408, 408, 408, 408, 467,
723
- /* 590 */ 101, 100, 151, 109, 65, 408, 129, 134, 151, 109,
724
- /* 600 */ 408, 119, 101, 100, 151, 109, 408, 65, 408, 129,
725
- /* 610 */ 408, 408, 408, 79, 473, 101, 100, 151, 109, 65,
726
- /* 620 */ 408, 129, 103, 151, 109, 80, 472, 101, 100, 151,
727
- /* 630 */ 109, 65, 408, 129, 103, 151, 109, 408, 471, 101,
728
- /* 640 */ 100, 151, 109, 65, 408, 129, 408, 136, 151, 109,
729
- /* 650 */ 470, 101, 100, 151, 109, 37, 65, 408, 129, 138,
730
- /* 660 */ 151, 109, 33, 469, 101, 100, 151, 109, 36, 65,
731
- /* 670 */ 408, 129, 408, 408, 285, 408, 468, 101, 100, 151,
732
- /* 680 */ 109, 65, 284, 129, 408, 140, 151, 109, 118, 101,
733
- /* 690 */ 100, 151, 109, 408, 65, 408, 129, 408, 408, 50,
734
- /* 700 */ 49, 438, 101, 100, 151, 109, 50, 49, 42, 354,
735
- /* 710 */ 50, 49, 50, 49, 408, 354, 48, 47, 50, 49,
736
- /* 720 */ 408, 408, 91, 48, 47, 408, 408, 48, 47, 48,
737
- /* 730 */ 47, 103, 151, 109, 408, 48, 47, 50, 49, 408,
738
- /* 740 */ 358, 145, 151, 109, 50, 49, 408, 357, 50, 49,
739
- /* 750 */ 408, 354, 50, 49, 48, 47, 483, 151, 109, 408,
740
- /* 760 */ 408, 48, 47, 81, 408, 48, 47, 92, 408, 48,
741
- /* 770 */ 47, 408, 103, 151, 109, 408, 103, 151, 109, 408,
742
- /* 780 */ 408, 93, 408, 408, 408, 408, 83, 408, 408, 85,
743
- /* 790 */ 103, 151, 109, 86, 408, 103, 151, 109, 103, 151,
744
- /* 800 */ 109, 408, 103, 151, 109, 87, 408, 408, 408, 498,
745
- /* 810 */ 408, 408, 408, 408, 103, 151, 109, 497, 103, 151,
746
- /* 820 */ 109, 408, 496, 408, 408, 495, 103, 151, 109, 408,
747
- /* 830 */ 408, 103, 151, 109, 103, 151, 109, 408, 104, 408,
748
- /* 840 */ 408, 105, 408, 408, 408, 408, 408, 103, 151, 109,
749
- /* 850 */ 103, 151, 109,
668
+ /* 0 */ 64, 137, 129, 19, 139, 135, 141, 99, 101, 100,
669
+ /* 10 */ 151, 109, 38, 35, 401, 402, 313, 516, 72, 113,
670
+ /* 20 */ 517, 518, 515, 386, 387, 388, 389, 301, 302, 10,
671
+ /* 30 */ 9, 305, 8, 51, 111, 41, 310, 27, 40, 28,
672
+ /* 40 */ 132, 313, 313, 313, 313, 399, 400, 314, 315, 316,
673
+ /* 50 */ 317, 318, 319, 363, 409, 142, 45, 46, 541, 541,
674
+ /* 60 */ 284, 423, 26, 65, 346, 129, 401, 402, 313, 12,
675
+ /* 70 */ 424, 101, 100, 151, 109, 48, 47, 412, 413, 401,
676
+ /* 80 */ 402, 313, 321, 321, 321, 321, 321, 321, 321, 321,
677
+ /* 90 */ 112, 112, 24, 313, 313, 313, 313, 399, 400, 22,
678
+ /* 100 */ 124, 122, 50, 49, 48, 47, 313, 313, 313, 313,
679
+ /* 110 */ 399, 400, 328, 1, 114, 114, 547, 39, 73, 67,
680
+ /* 120 */ 131, 130, 89, 126, 125, 74, 107, 362, 144, 143,
681
+ /* 130 */ 408, 408, 410, 411, 363, 370, 371, 45, 46, 52,
682
+ /* 140 */ 346, 82, 6, 408, 408, 346, 30, 401, 402, 313,
683
+ /* 150 */ 103, 151, 109, 7, 18, 17, 20, 457, 151, 109,
684
+ /* 160 */ 361, 32, 123, 405, 63, 124, 122, 50, 49, 48,
685
+ /* 170 */ 47, 396, 409, 395, 313, 313, 313, 313, 399, 400,
686
+ /* 180 */ 363, 409, 39, 45, 46, 127, 151, 109, 126, 125,
687
+ /* 190 */ 116, 346, 376, 377, 5, 412, 413, 71, 97, 286,
688
+ /* 200 */ 70, 11, 107, 94, 412, 413, 25, 107, 362, 144,
689
+ /* 210 */ 143, 408, 408, 363, 409, 327, 45, 46, 288, 18,
690
+ /* 220 */ 17, 350, 147, 406, 346, 495, 32, 123, 405, 50,
691
+ /* 230 */ 49, 48, 47, 297, 65, 121, 129, 412, 413, 120,
692
+ /* 240 */ 1, 461, 101, 100, 151, 109, 62, 131, 130, 89,
693
+ /* 250 */ 410, 411, 495, 107, 362, 144, 143, 95, 495, 410,
694
+ /* 260 */ 411, 363, 348, 148, 45, 46, 103, 151, 109, 417,
695
+ /* 270 */ 445, 404, 96, 1, 279, 280, 281, 68, 283, 25,
696
+ /* 280 */ 131, 130, 89, 378, 349, 149, 107, 362, 144, 143,
697
+ /* 290 */ 14, 15, 410, 411, 133, 16, 379, 380, 381, 383,
698
+ /* 300 */ 71, 106, 286, 70, 31, 386, 387, 388, 389, 53,
699
+ /* 310 */ 54, 401, 402, 313, 363, 62, 108, 45, 46, 55,
700
+ /* 320 */ 56, 5, 491, 151, 109, 346, 50, 49, 48, 47,
701
+ /* 330 */ 94, 2, 102, 375, 107, 362, 144, 143, 313, 313,
702
+ /* 340 */ 313, 313, 399, 400, 363, 374, 373, 45, 46, 58,
703
+ /* 350 */ 117, 115, 490, 151, 109, 346, 50, 49, 48, 47,
704
+ /* 360 */ 292, 110, 418, 425, 26, 338, 339, 363, 421, 43,
705
+ /* 370 */ 45, 46, 57, 372, 5, 408, 408, 60, 96, 152,
706
+ /* 380 */ 59, 415, 21, 94, 326, 44, 61, 107, 362, 144,
707
+ /* 390 */ 143, 363, 354, 352, 45, 46, 50, 49, 48, 47,
708
+ /* 400 */ 291, 353, 346, 347, 5, 75, 137, 150, 29, 139,
709
+ /* 410 */ 135, 141, 416, 94, 103, 151, 109, 107, 362, 144,
710
+ /* 420 */ 143, 363, 416, 416, 45, 46, 416, 5, 77, 416,
711
+ /* 430 */ 416, 416, 346, 416, 416, 78, 94, 103, 151, 109,
712
+ /* 440 */ 107, 362, 144, 143, 103, 151, 109, 416, 76, 137,
713
+ /* 450 */ 416, 3, 139, 135, 141, 416, 416, 103, 151, 109,
714
+ /* 460 */ 94, 416, 416, 416, 107, 362, 144, 143, 88, 137,
715
+ /* 470 */ 416, 416, 139, 135, 141, 95, 416, 103, 151, 109,
716
+ /* 480 */ 416, 4, 416, 416, 103, 151, 109, 416, 422, 416,
717
+ /* 490 */ 94, 65, 416, 129, 107, 362, 144, 143, 460, 101,
718
+ /* 500 */ 100, 151, 109, 65, 416, 129, 50, 49, 48, 47,
719
+ /* 510 */ 455, 101, 100, 151, 109, 409, 489, 151, 109, 65,
720
+ /* 520 */ 416, 129, 416, 90, 416, 416, 453, 101, 100, 151,
721
+ /* 530 */ 109, 13, 103, 151, 109, 65, 416, 129, 412, 413,
722
+ /* 540 */ 416, 84, 452, 101, 100, 151, 109, 65, 416, 129,
723
+ /* 550 */ 103, 151, 109, 66, 478, 101, 100, 151, 109, 65,
724
+ /* 560 */ 416, 129, 434, 416, 23, 416, 119, 101, 100, 151,
725
+ /* 570 */ 109, 416, 50, 49, 48, 47, 416, 65, 416, 129,
726
+ /* 580 */ 50, 49, 48, 47, 484, 101, 100, 151, 109, 65,
727
+ /* 590 */ 416, 129, 416, 410, 411, 37, 483, 101, 100, 151,
728
+ /* 600 */ 109, 65, 416, 129, 134, 151, 109, 416, 482, 101,
729
+ /* 610 */ 100, 151, 109, 65, 416, 129, 348, 148, 348, 148,
730
+ /* 620 */ 481, 101, 100, 151, 109, 50, 49, 48, 47, 65,
731
+ /* 630 */ 325, 129, 50, 49, 48, 47, 480, 101, 100, 151,
732
+ /* 640 */ 109, 65, 416, 129, 50, 49, 48, 47, 479, 101,
733
+ /* 650 */ 100, 151, 109, 65, 416, 129, 416, 416, 416, 33,
734
+ /* 660 */ 118, 101, 100, 151, 109, 416, 65, 128, 129, 146,
735
+ /* 670 */ 108, 95, 108, 449, 101, 100, 151, 109, 416, 416,
736
+ /* 680 */ 103, 151, 109, 365, 431, 416, 95, 416, 416, 69,
737
+ /* 690 */ 69, 98, 418, 425, 26, 103, 151, 109, 421, 431,
738
+ /* 700 */ 416, 416, 361, 416, 416, 534, 136, 151, 109, 152,
739
+ /* 710 */ 416, 416, 21, 419, 425, 26, 416, 416, 416, 421,
740
+ /* 720 */ 50, 49, 48, 47, 50, 49, 48, 47, 416, 416,
741
+ /* 730 */ 152, 416, 416, 21, 416, 36, 138, 151, 109, 34,
742
+ /* 740 */ 50, 49, 48, 47, 50, 49, 48, 47, 50, 49,
743
+ /* 750 */ 48, 47, 416, 79, 416, 42, 416, 416, 80, 416,
744
+ /* 760 */ 416, 91, 103, 151, 109, 416, 416, 103, 151, 109,
745
+ /* 770 */ 103, 151, 109, 81, 416, 416, 92, 416, 361, 93,
746
+ /* 780 */ 416, 416, 103, 151, 109, 103, 151, 109, 103, 151,
747
+ /* 790 */ 109, 140, 151, 109, 145, 151, 109, 416, 416, 83,
748
+ /* 800 */ 416, 416, 364, 494, 151, 109, 361, 85, 103, 151,
749
+ /* 810 */ 109, 86, 416, 416, 87, 416, 103, 151, 109, 416,
750
+ /* 820 */ 103, 151, 109, 103, 151, 109, 416, 509, 416, 416,
751
+ /* 830 */ 416, 508, 416, 416, 507, 416, 103, 151, 109, 416,
752
+ /* 840 */ 103, 151, 109, 103, 151, 109, 416, 416, 506, 416,
753
+ /* 850 */ 416, 104, 416, 416, 105, 416, 416, 103, 151, 109,
754
+ /* 860 */ 103, 151, 109, 103, 151, 109,
750755
};
751756
static const YYCODETYPE yy_lookahead[] = {
752
- /* 0 */ 87, 114, 88, 90, 91, 92, 88, 7, 8, 87,
753
- /* 10 */ 10, 89, 90, 91, 88, 15, 16, 17, 18, 88,
754
- /* 20 */ 20, 21, 22, 23, 24, 25, 26, 27, 11, 29,
755
- /* 30 */ 112, 113, 110, 111, 34, 35, 36, 37, 38, 39,
756
- /* 40 */ 40, 41, 42, 43, 44, 45, 46, 1, 2, 12,
757
- /* 50 */ 13, 5, 106, 7, 8, 47, 48, 49, 50, 51,
758
- /* 60 */ 52, 53, 54, 17, 18, 86, 87, 88, 108, 90,
759
- /* 70 */ 91, 92, 93, 94, 95, 96, 97, 2, 55, 56,
760
- /* 80 */ 34, 35, 36, 37, 38, 39, 40, 98, 3, 2,
761
- /* 90 */ 55, 56, 17, 18, 98, 72, 73, 86, 11, 14,
762
- /* 100 */ 28, 55, 56, 57, 17, 18, 95, 96, 97, 25,
763
- /* 110 */ 99, 65, 66, 67, 25, 104, 105, 71, 12, 13,
764
- /* 120 */ 86, 75, 76, 77, 78, 79, 80, 81, 1, 95,
765
- /* 130 */ 96, 97, 5, 99, 7, 8, 32, 50, 51, 105,
766
- /* 140 */ 12, 13, 55, 56, 26, 58, 59, 60, 61, 62,
767
- /* 150 */ 82, 83, 84, 85, 11, 80, 81, 89, 26, 72,
768
- /* 160 */ 73, 34, 35, 36, 37, 38, 39, 40, 100, 1,
769
- /* 170 */ 2, 103, 31, 5, 68, 5, 32, 71, 10, 86,
770
- /* 180 */ 12, 13, 55, 56, 57, 17, 18, 58, 95, 96,
771
- /* 190 */ 97, 95, 96, 97, 67, 62, 1, 2, 71, 71,
772
- /* 200 */ 5, 58, 75, 76, 77, 78, 79, 84, 85, 86,
773
- /* 210 */ 63, 88, 17, 18, 61, 2, 93, 94, 95, 96,
774
- /* 220 */ 97, 72, 73, 55, 56, 57, 95, 96, 97, 0,
775
- /* 230 */ 17, 18, 3, 65, 66, 67, 33, 67, 2, 71,
776
- /* 240 */ 88, 71, 62, 75, 76, 77, 33, 11, 80, 81,
777
- /* 250 */ 55, 56, 57, 17, 18, 59, 59, 83, 84, 85,
778
- /* 260 */ 65, 66, 67, 89, 59, 113, 71, 64, 59, 86,
779
- /* 270 */ 75, 76, 77, 70, 100, 80, 81, 103, 95, 96,
780
- /* 280 */ 97, 64, 99, 7, 8, 59, 50, 51, 33, 59,
781
- /* 290 */ 86, 55, 56, 80, 81, 59, 60, 61, 62, 95,
782
- /* 300 */ 96, 97, 95, 96, 97, 101, 78, 79, 72, 73,
783
- /* 310 */ 34, 35, 36, 37, 38, 39, 40, 1, 1, 64,
784
- /* 320 */ 59, 5, 5, 7, 8, 9, 10, 6, 12, 13,
785
- /* 330 */ 33, 15, 16, 17, 18, 1, 7, 8, 64, 5,
786
- /* 340 */ 58, 65, 66, 58, 10, 78, 79, 30, 31, 86,
787
- /* 350 */ 59, 88, 22, 59, 78, 79, 93, 94, 95, 96,
788
- /* 360 */ 97, 64, 58, 34, 35, 36, 37, 38, 39, 40,
789
- /* 370 */ 86, 1, 55, 56, 57, 5, 95, 96, 97, 95,
790
- /* 380 */ 96, 97, 59, 99, 67, 55, 56, 86, 71, 55,
791
- /* 390 */ 56, 57, 75, 76, 77, 1, 95, 96, 97, 5,
792
- /* 400 */ 58, 67, 72, 73, 59, 71, 57, 78, 79, 75,
793
- /* 410 */ 76, 77, 1, 86, 87, 57, 5, 90, 91, 92,
794
- /* 420 */ 59, 86, 95, 96, 97, 55, 56, 57, 14, 1,
795
- /* 430 */ 95, 96, 97, 5, 5, 55, 56, 67, 58, 12,
796
- /* 440 */ 13, 71, 107, 19, 109, 75, 76, 77, 70, 55,
797
- /* 450 */ 56, 57, 72, 73, 59, 82, 83, 84, 85, 14,
798
- /* 460 */ 4, 67, 89, 115, 69, 71, 55, 56, 57, 75,
799
- /* 470 */ 76, 77, 115, 100, 11, 102, 103, 115, 67, 55,
800
- /* 480 */ 56, 14, 71, 55, 56, 57, 75, 76, 77, 115,
801
- /* 490 */ 115, 55, 56, 115, 58, 67, 72, 73, 115, 71,
802
- /* 500 */ 115, 12, 13, 75, 76, 77, 86, 87, 72, 73,
803
- /* 510 */ 90, 91, 92, 115, 115, 95, 96, 97, 55, 56,
804
- /* 520 */ 86, 87, 115, 115, 90, 91, 92, 115, 115, 95,
805
- /* 530 */ 96, 97, 86, 115, 88, 72, 73, 115, 86, 93,
806
- /* 540 */ 94, 95, 96, 97, 86, 115, 88, 95, 96, 97,
807
- /* 550 */ 115, 93, 94, 95, 96, 97, 86, 68, 88, 115,
808
- /* 560 */ 71, 115, 115, 93, 94, 95, 96, 97, 115, 86,
809
- /* 570 */ 115, 88, 95, 96, 97, 115, 93, 94, 95, 96,
810
- /* 580 */ 97, 115, 86, 115, 88, 115, 115, 115, 115, 93,
811
- /* 590 */ 94, 95, 96, 97, 86, 115, 88, 95, 96, 97,
812
- /* 600 */ 115, 93, 94, 95, 96, 97, 115, 86, 115, 88,
813
- /* 610 */ 115, 115, 115, 86, 93, 94, 95, 96, 97, 86,
814
- /* 620 */ 115, 88, 95, 96, 97, 86, 93, 94, 95, 96,
815
- /* 630 */ 97, 86, 115, 88, 95, 96, 97, 115, 93, 94,
816
- /* 640 */ 95, 96, 97, 86, 115, 88, 115, 95, 96, 97,
817
- /* 650 */ 93, 94, 95, 96, 97, 11, 86, 115, 88, 95,
818
- /* 660 */ 96, 97, 11, 93, 94, 95, 96, 97, 11, 86,
819
- /* 670 */ 115, 88, 115, 115, 19, 115, 93, 94, 95, 96,
820
- /* 680 */ 97, 86, 19, 88, 115, 95, 96, 97, 93, 94,
821
- /* 690 */ 95, 96, 97, 115, 86, 115, 88, 115, 115, 55,
822
- /* 700 */ 56, 93, 94, 95, 96, 97, 55, 56, 11, 58,
823
- /* 710 */ 55, 56, 55, 56, 115, 58, 72, 73, 55, 56,
824
- /* 720 */ 115, 115, 86, 72, 73, 115, 115, 72, 73, 72,
825
- /* 730 */ 73, 95, 96, 97, 115, 72, 73, 55, 56, 115,
826
- /* 740 */ 58, 95, 96, 97, 55, 56, 115, 58, 55, 56,
827
- /* 750 */ 115, 58, 55, 56, 72, 73, 95, 96, 97, 115,
828
- /* 760 */ 115, 72, 73, 86, 115, 72, 73, 86, 115, 72,
829
- /* 770 */ 73, 115, 95, 96, 97, 115, 95, 96, 97, 115,
830
- /* 780 */ 115, 86, 115, 115, 115, 115, 86, 115, 115, 86,
831
- /* 790 */ 95, 96, 97, 86, 115, 95, 96, 97, 95, 96,
832
- /* 800 */ 97, 115, 95, 96, 97, 86, 115, 115, 115, 86,
833
- /* 810 */ 115, 115, 115, 115, 95, 96, 97, 86, 95, 96,
834
- /* 820 */ 97, 115, 86, 115, 115, 86, 95, 96, 97, 115,
835
- /* 830 */ 115, 95, 96, 97, 95, 96, 97, 115, 86, 115,
836
- /* 840 */ 115, 86, 115, 115, 115, 115, 115, 95, 96, 97,
837
- /* 850 */ 95, 96, 97, 82, 82, 82, 82, 82, 82, 82,
838
- /* 860 */ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
757
+ /* 0 */ 86, 87, 88, 114, 90, 91, 92, 93, 94, 95,
758
+ /* 10 */ 96, 97, 4, 5, 14, 15, 16, 87, 18, 88,
759
+ /* 20 */ 90, 91, 92, 23, 24, 25, 26, 27, 28, 29,
760
+ /* 30 */ 30, 31, 32, 33, 34, 87, 36, 89, 90, 91,
761
+ /* 40 */ 88, 41, 42, 43, 44, 45, 46, 47, 48, 49,
762
+ /* 50 */ 50, 51, 52, 1, 2, 88, 4, 5, 110, 111,
763
+ /* 60 */ 19, 84, 85, 86, 12, 88, 14, 15, 16, 19,
764
+ /* 70 */ 93, 94, 95, 96, 97, 6, 7, 25, 26, 14,
765
+ /* 80 */ 15, 16, 53, 54, 55, 56, 57, 58, 59, 60,
766
+ /* 90 */ 88, 88, 106, 41, 42, 43, 44, 45, 46, 108,
767
+ /* 100 */ 2, 3, 4, 5, 6, 7, 41, 42, 43, 44,
768
+ /* 110 */ 45, 46, 62, 61, 112, 113, 113, 19, 98, 40,
769
+ /* 120 */ 68, 69, 70, 25, 26, 98, 74, 75, 76, 77,
770
+ /* 130 */ 78, 79, 80, 81, 1, 78, 79, 4, 5, 35,
771
+ /* 140 */ 12, 86, 32, 78, 79, 12, 67, 14, 15, 16,
772
+ /* 150 */ 95, 96, 97, 32, 56, 57, 101, 95, 96, 97,
773
+ /* 160 */ 62, 63, 64, 65, 39, 2, 3, 4, 5, 6,
774
+ /* 170 */ 7, 33, 2, 33, 41, 42, 43, 44, 45, 46,
775
+ /* 180 */ 1, 2, 19, 4, 5, 95, 96, 97, 25, 26,
776
+ /* 190 */ 38, 12, 78, 79, 61, 25, 26, 18, 70, 20,
777
+ /* 200 */ 21, 39, 74, 70, 25, 26, 10, 74, 75, 76,
778
+ /* 210 */ 77, 78, 79, 1, 2, 62, 4, 5, 22, 56,
779
+ /* 220 */ 57, 20, 21, 65, 12, 40, 63, 64, 65, 4,
780
+ /* 230 */ 5, 6, 7, 8, 86, 66, 88, 25, 26, 64,
781
+ /* 240 */ 61, 93, 94, 95, 96, 97, 3, 68, 69, 70,
782
+ /* 250 */ 80, 81, 67, 74, 75, 76, 77, 86, 73, 80,
783
+ /* 260 */ 81, 1, 20, 21, 4, 5, 95, 96, 97, 0,
784
+ /* 270 */ 99, 65, 12, 61, 14, 15, 16, 40, 18, 10,
785
+ /* 280 */ 68, 69, 70, 1, 20, 21, 74, 75, 76, 77,
786
+ /* 290 */ 3, 3, 80, 81, 12, 3, 14, 15, 16, 17,
787
+ /* 300 */ 18, 67, 20, 21, 67, 23, 24, 25, 26, 3,
788
+ /* 310 */ 3, 14, 15, 16, 1, 72, 74, 4, 5, 3,
789
+ /* 320 */ 3, 61, 95, 96, 97, 12, 4, 5, 6, 7,
790
+ /* 330 */ 70, 13, 67, 62, 74, 75, 76, 77, 41, 42,
791
+ /* 340 */ 43, 44, 45, 46, 1, 62, 62, 4, 5, 3,
792
+ /* 350 */ 37, 38, 95, 96, 97, 12, 4, 5, 6, 7,
793
+ /* 360 */ 8, 82, 83, 84, 85, 68, 69, 1, 89, 61,
794
+ /* 370 */ 4, 5, 3, 62, 61, 78, 79, 3, 12, 100,
795
+ /* 380 */ 3, 102, 103, 70, 62, 61, 3, 74, 75, 76,
796
+ /* 390 */ 77, 1, 22, 22, 4, 5, 4, 5, 6, 7,
797
+ /* 400 */ 8, 22, 12, 12, 61, 86, 87, 73, 11, 90,
798
+ /* 410 */ 91, 92, 115, 70, 95, 96, 97, 74, 75, 76,
799
+ /* 420 */ 77, 1, 115, 115, 4, 5, 115, 61, 86, 115,
800
+ /* 430 */ 115, 115, 12, 115, 115, 86, 70, 95, 96, 97,
801
+ /* 440 */ 74, 75, 76, 77, 95, 96, 97, 115, 86, 87,
802
+ /* 450 */ 115, 61, 90, 91, 92, 115, 115, 95, 96, 97,
803
+ /* 460 */ 70, 115, 115, 115, 74, 75, 76, 77, 86, 87,
804
+ /* 470 */ 115, 115, 90, 91, 92, 86, 115, 95, 96, 97,
805
+ /* 480 */ 115, 61, 115, 115, 95, 96, 97, 115, 99, 115,
806
+ /* 490 */ 70, 86, 115, 88, 74, 75, 76, 77, 93, 94,
807
+ /* 500 */ 95, 96, 97, 86, 115, 88, 4, 5, 6, 7,
808
+ /* 510 */ 93, 94, 95, 96, 97, 2, 95, 96, 97, 86,
809
+ /* 520 */ 115, 88, 115, 86, 115, 115, 93, 94, 95, 96,
810
+ /* 530 */ 97, 29, 95, 96, 97, 86, 115, 88, 25, 26,
811
+ /* 540 */ 115, 86, 93, 94, 95, 96, 97, 86, 115, 88,
812
+ /* 550 */ 95, 96, 97, 40, 93, 94, 95, 96, 97, 86,
813
+ /* 560 */ 115, 88, 107, 115, 109, 115, 93, 94, 95, 96,
814
+ /* 570 */ 97, 115, 4, 5, 6, 7, 115, 86, 115, 88,
815
+ /* 580 */ 4, 5, 6, 7, 93, 94, 95, 96, 97, 86,
816
+ /* 590 */ 115, 88, 115, 80, 81, 19, 93, 94, 95, 96,
817
+ /* 600 */ 97, 86, 115, 88, 95, 96, 97, 115, 93, 94,
818
+ /* 610 */ 95, 96, 97, 86, 115, 88, 20, 21, 20, 21,
819
+ /* 620 */ 93, 94, 95, 96, 97, 4, 5, 6, 7, 86,
820
+ /* 630 */ 62, 88, 4, 5, 6, 7, 93, 94, 95, 96,
821
+ /* 640 */ 97, 86, 115, 88, 4, 5, 6, 7, 93, 94,
822
+ /* 650 */ 95, 96, 97, 86, 115, 88, 115, 115, 115, 19,
823
+ /* 660 */ 93, 94, 95, 96, 97, 115, 86, 71, 88, 71,
824
+ /* 670 */ 74, 86, 74, 93, 94, 95, 96, 97, 115, 115,
825
+ /* 680 */ 95, 96, 97, 62, 99, 115, 86, 115, 115, 104,
826
+ /* 690 */ 105, 82, 83, 84, 85, 95, 96, 97, 89, 99,
827
+ /* 700 */ 115, 115, 62, 115, 115, 105, 95, 96, 97, 100,
828
+ /* 710 */ 115, 115, 103, 83, 84, 85, 115, 115, 115, 89,
829
+ /* 720 */ 4, 5, 6, 7, 4, 5, 6, 7, 115, 115,
830
+ /* 730 */ 100, 115, 115, 103, 115, 19, 95, 96, 97, 19,
831
+ /* 740 */ 4, 5, 6, 7, 4, 5, 6, 7, 4, 5,
832
+ /* 750 */ 6, 7, 115, 86, 115, 19, 115, 115, 86, 115,
833
+ /* 760 */ 115, 86, 95, 96, 97, 115, 115, 95, 96, 97,
834
+ /* 770 */ 95, 96, 97, 86, 115, 115, 86, 115, 62, 86,
835
+ /* 780 */ 115, 115, 95, 96, 97, 95, 96, 97, 95, 96,
836
+ /* 790 */ 97, 95, 96, 97, 95, 96, 97, 115, 115, 86,
837
+ /* 800 */ 115, 115, 62, 95, 96, 97, 62, 86, 95, 96,
838
+ /* 810 */ 97, 86, 115, 115, 86, 115, 95, 96, 97, 115,
839
+ /* 820 */ 95, 96, 97, 95, 96, 97, 115, 86, 115, 115,
840
+ /* 830 */ 115, 86, 115, 115, 86, 115, 95, 96, 97, 115,
841
+ /* 840 */ 95, 96, 97, 95, 96, 97, 115, 115, 86, 115,
842
+ /* 850 */ 115, 86, 115, 115, 86, 115, 115, 95, 96, 97,
843
+ /* 860 */ 95, 96, 97, 95, 96, 97, 82, 82, 82, 82,
839844
/* 870 */ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
840845
/* 880 */ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
841846
/* 890 */ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
842847
/* 900 */ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
843848
/* 910 */ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
844849
/* 920 */ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
845
- /* 930 */ 82, 82, 82, 82, 82,
850
+ /* 930 */ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
851
+ /* 940 */ 82, 82, 82, 82, 82, 82, 82, 82,
846852
};
847853
#define YY_SHIFT_COUNT (152)
848854
#define YY_SHIFT_MIN (0)
849
-#define YY_SHIFT_MAX (697)
855
+#define YY_SHIFT_MAX (744)
850856
static const unsigned short int yy_shift_ofst[] = {
851
- /* 0 */ 316, 46, 168, 127, 127, 127, 195, 195, 195, 195,
852
- /* 10 */ 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
853
- /* 20 */ 195, 316, 334, 0, 316, 334, 370, 317, 394, 394,
854
- /* 30 */ 276, 329, 370, 370, 370, 411, 370, 370, 428, 370,
855
- /* 40 */ 370, 370, 370, 370, 370, 370, 370, 370, 370, 370,
856
- /* 50 */ 370, 213, 170, 170, 170, 170, 170, 170, 170, 170,
857
- /* 60 */ 170, 170, 170, 213, 87, 236, 75, 75, 75, 17,
858
- /* 70 */ 853, 853, 853, 8, 8, 651, 657, 330, 380, 463,
859
- /* 80 */ 436, 644, 424, 655, 663, 682, 697, 689, 693, 106,
860
- /* 90 */ 23, 23, 23, 23, 489, 23, 203, 128, 85, 143,
861
- /* 100 */ 255, 35, 228, 297, 149, 149, 267, 37, 427, 395,
862
- /* 110 */ 229, 72, 84, 89, 104, 118, 132, 141, 144, 129,
863
- /* 120 */ 133, 153, 147, 180, 196, 197, 205, 217, 209, 226,
864
- /* 130 */ 230, 261, 274, 321, 282, 291, 285, 294, 304, 323,
865
- /* 140 */ 342, 345, 274, 349, 358, 217, 361, 414, 445, 467,
866
- /* 150 */ 429, 378, 456,
857
+ /* 0 */ 282, 52, 179, 133, 133, 133, 212, 212, 212, 212,
858
+ /* 10 */ 212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
859
+ /* 20 */ 212, 260, 282, 0, 260, 282, 343, 313, 366, 366,
860
+ /* 30 */ 297, 65, 343, 343, 343, 390, 343, 343, 420, 343,
861
+ /* 40 */ 343, 343, 343, 343, 343, 343, 343, 343, 343, 343,
862
+ /* 50 */ 343, 513, 128, 128, 128, 128, 128, 128, 128, 128,
863
+ /* 60 */ 128, 128, 128, 513, 98, 163, 170, 170, 170, 41,
864
+ /* 70 */ 866, 866, 866, 29, 29, 640, 716, 502, 322, 720,
865
+ /* 80 */ 568, 576, 225, 352, 392, 621, 736, 740, 744, 596,
866
+ /* 90 */ 628, 628, 628, 628, 598, 628, 185, 242, 196, 50,
867
+ /* 100 */ 79, 8, 57, 237, 69, 69, 114, 201, 264, 243,
868
+ /* 110 */ 269, 104, 110, 121, 125, 138, 140, 152, 162, 153,
869
+ /* 120 */ 158, 175, 169, 206, 287, 288, 292, 234, 306, 307,
870
+ /* 130 */ 316, 317, 265, 318, 271, 369, 283, 346, 284, 377,
871
+ /* 140 */ 311, 374, 265, 308, 324, 234, 383, 370, 371, 379,
872
+ /* 150 */ 391, 334, 397,
867873
};
868874
#define YY_REDUCE_COUNT (72)
869
-#define YY_REDUCE_MIN (-113)
870
-#define YY_REDUCE_MAX (755)
875
+#define YY_REDUCE_MIN (-111)
876
+#define YY_REDUCE_MAX (768)
871877
static const short yy_reduce_ofst[] = {
872
- /* 0 */ 373, -21, 123, 327, 420, 434, 263, 446, 458, 470,
873
- /* 10 */ 483, 496, 508, 521, 533, 545, 557, 570, 583, 595,
874
- /* 20 */ 608, 68, 11, -78, 174, 34, 335, 204, 183, 284,
875
- /* 30 */ -87, -87, 93, 301, 452, 527, 539, 636, 677, 681,
876
- /* 40 */ 695, 700, 703, 707, 719, 723, 731, 736, 739, 752,
877
- /* 50 */ 755, -82, 96, 131, 207, 281, 477, 502, 552, 564,
878
- /* 60 */ 590, 646, 661, 152, -113, -113, -86, -74, -69, -54,
879
- /* 70 */ -40, -11, -4,
878
+ /* 0 */ 279, -86, -23, 319, 362, 382, 148, 405, 417, 433,
879
+ /* 10 */ 449, 461, 473, 491, 503, 515, 527, 543, 555, 567,
880
+ /* 20 */ 580, 585, 609, -52, 600, 630, 455, 55, 171, 389,
881
+ /* 30 */ -70, -70, 342, 349, 437, 667, 672, 675, 687, 690,
882
+ /* 40 */ 693, 713, 721, 725, 728, 741, 745, 748, 762, 765,
883
+ /* 50 */ 768, 2, 62, 90, 227, 257, 421, 509, 611, 641,
884
+ /* 60 */ 696, 699, 708, 3, -111, -111, -69, -48, -33, -14,
885
+ /* 70 */ -9, 20, 27,
880886
};
881887
static const YYACTIONTYPE yy_default[] = {
882
- /* 0 */ 412, 406, 406, 406, 406, 406, 406, 406, 406, 406,
883
- /* 10 */ 406, 406, 406, 406, 406, 406, 406, 406, 406, 406,
884
- /* 20 */ 406, 412, 406, 527, 412, 406, 528, 437, 406, 406,
885
- /* 30 */ 406, 406, 406, 406, 406, 406, 406, 406, 406, 406,
886
- /* 40 */ 433, 406, 406, 406, 406, 406, 406, 406, 406, 406,
887
- /* 50 */ 406, 406, 406, 406, 406, 406, 406, 406, 406, 406,
888
- /* 60 */ 406, 406, 406, 406, 406, 406, 406, 406, 406, 418,
889
- /* 70 */ 427, 458, 458, 425, 447, 406, 406, 406, 406, 406,
890
- /* 80 */ 406, 406, 436, 431, 428, 406, 406, 406, 406, 406,
891
- /* 90 */ 462, 461, 460, 432, 406, 519, 419, 406, 406, 406,
892
- /* 100 */ 474, 540, 406, 406, 494, 493, 406, 489, 406, 482,
893
- /* 110 */ 406, 445, 406, 406, 531, 406, 406, 406, 406, 406,
894
- /* 120 */ 406, 406, 406, 406, 406, 406, 406, 481, 406, 406,
895
- /* 130 */ 406, 406, 475, 406, 406, 406, 406, 406, 406, 406,
896
- /* 140 */ 406, 406, 406, 406, 406, 406, 406, 406, 406, 406,
897
- /* 150 */ 406, 544, 406,
888
+ /* 0 */ 420, 414, 414, 414, 414, 414, 414, 414, 414, 414,
889
+ /* 10 */ 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
890
+ /* 20 */ 414, 414, 420, 539, 414, 420, 540, 448, 414, 414,
891
+ /* 30 */ 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
892
+ /* 40 */ 444, 414, 414, 414, 414, 414, 414, 414, 414, 414,
893
+ /* 50 */ 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
894
+ /* 60 */ 414, 414, 414, 414, 414, 414, 414, 414, 414, 426,
895
+ /* 70 */ 438, 469, 469, 436, 458, 414, 414, 414, 414, 414,
896
+ /* 80 */ 414, 414, 447, 442, 439, 414, 414, 414, 414, 414,
897
+ /* 90 */ 473, 472, 471, 443, 414, 531, 427, 414, 414, 414,
898
+ /* 100 */ 485, 552, 414, 414, 505, 504, 414, 500, 414, 493,
899
+ /* 110 */ 414, 456, 414, 414, 543, 414, 414, 414, 414, 414,
900
+ /* 120 */ 414, 414, 414, 414, 414, 414, 414, 492, 414, 414,
901
+ /* 130 */ 414, 414, 486, 414, 414, 414, 414, 414, 414, 414,
902
+ /* 140 */ 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
903
+ /* 150 */ 414, 556, 414,
898904
};
899905
/********** End of lemon-generated parsing tables *****************************/
900906
901907
/* The next table maps tokens (terminal symbols) into fallback tokens.
902908
** If a construct like the following:
@@ -915,16 +921,24 @@
915921
#ifdef YYFALLBACK
916922
static const YYCODETYPE yyFallback[] = {
917923
0, /* $ => nothing */
918924
0, /* ID => nothing */
919925
1, /* EDGEPT => ID */
926
+ 0, /* OF => nothing */
927
+ 0, /* PLUS => nothing */
928
+ 0, /* MINUS => nothing */
929
+ 0, /* STAR => nothing */
930
+ 0, /* SLASH => nothing */
931
+ 0, /* PERCENT => nothing */
932
+ 0, /* UMINUS => nothing */
920933
0, /* EOL => nothing */
921934
0, /* ASSIGN => nothing */
922935
0, /* PLACENAME => nothing */
923936
0, /* COLON => nothing */
924937
0, /* FILL => nothing */
925938
0, /* COLOR => nothing */
939
+ 0, /* THICKNESS => nothing */
926940
0, /* PRINT => nothing */
927941
0, /* STRING => nothing */
928942
0, /* COMMA => nothing */
929943
0, /* CLASSNAME => nothing */
930944
0, /* LB => nothing */
@@ -931,11 +945,10 @@
931945
0, /* RB => nothing */
932946
0, /* UP => nothing */
933947
0, /* DOWN => nothing */
934948
0, /* LEFT => nothing */
935949
0, /* RIGHT => nothing */
936
- 0, /* PERCENT => nothing */
937950
0, /* CLOSE => nothing */
938951
0, /* CHOP => nothing */
939952
0, /* FROM => nothing */
940953
0, /* TO => nothing */
941954
0, /* THEN => nothing */
@@ -950,11 +963,10 @@
950963
0, /* DOT_E => nothing */
951964
0, /* HEIGHT => nothing */
952965
0, /* WIDTH => nothing */
953966
0, /* RADIUS => nothing */
954967
0, /* DIAMETER => nothing */
955
- 0, /* THICKNESS => nothing */
956968
0, /* DOTTED => nothing */
957969
0, /* DASHED => nothing */
958970
0, /* CW => nothing */
959971
0, /* CCW => nothing */
960972
0, /* LARROW => nothing */
@@ -967,15 +979,12 @@
967979
0, /* ABOVE => nothing */
968980
0, /* BELOW => nothing */
969981
0, /* ITALIC => nothing */
970982
0, /* BOLD => nothing */
971983
0, /* ALIGNED => nothing */
972
- 0, /* PLUS => nothing */
973
- 0, /* MINUS => nothing */
974984
0, /* LP => nothing */
975985
0, /* RP => nothing */
976
- 0, /* OF => nothing */
977986
0, /* HEADING => nothing */
978987
0, /* WAY => nothing */
979988
0, /* BETWEEN => nothing */
980989
0, /* THE => nothing */
981990
0, /* DOT_L => nothing */
@@ -984,13 +993,10 @@
984993
0, /* NTH => nothing */
985994
0, /* VERTEX => nothing */
986995
0, /* IN => nothing */
987996
0, /* DOT_U => nothing */
988997
0, /* LAST => nothing */
989
- 0, /* STAR => nothing */
990
- 0, /* SLASH => nothing */
991
- 0, /* UMINUS => nothing */
992998
0, /* NUMBER => nothing */
993999
0, /* FUNC1 => nothing */
9941000
0, /* FUNC2 => nothing */
9951001
0, /* X => nothing */
9961002
0, /* Y => nothing */
@@ -1085,82 +1091,82 @@
10851091
** are required. The following table supplies these names */
10861092
static const char *const yyTokenName[] = {
10871093
/* 0 */ "$",
10881094
/* 1 */ "ID",
10891095
/* 2 */ "EDGEPT",
1090
- /* 3 */ "EOL",
1091
- /* 4 */ "ASSIGN",
1092
- /* 5 */ "PLACENAME",
1093
- /* 6 */ "COLON",
1094
- /* 7 */ "FILL",
1095
- /* 8 */ "COLOR",
1096
- /* 9 */ "PRINT",
1097
- /* 10 */ "STRING",
1098
- /* 11 */ "COMMA",
1099
- /* 12 */ "CLASSNAME",
1100
- /* 13 */ "LB",
1101
- /* 14 */ "RB",
1102
- /* 15 */ "UP",
1103
- /* 16 */ "DOWN",
1104
- /* 17 */ "LEFT",
1105
- /* 18 */ "RIGHT",
1106
- /* 19 */ "PERCENT",
1107
- /* 20 */ "CLOSE",
1108
- /* 21 */ "CHOP",
1109
- /* 22 */ "FROM",
1110
- /* 23 */ "TO",
1111
- /* 24 */ "THEN",
1112
- /* 25 */ "AT",
1113
- /* 26 */ "WITH",
1114
- /* 27 */ "SAME",
1115
- /* 28 */ "AS",
1116
- /* 29 */ "FIT",
1117
- /* 30 */ "UNTIL",
1118
- /* 31 */ "EVEN",
1119
- /* 32 */ "AND",
1120
- /* 33 */ "DOT_E",
1121
- /* 34 */ "HEIGHT",
1122
- /* 35 */ "WIDTH",
1123
- /* 36 */ "RADIUS",
1124
- /* 37 */ "DIAMETER",
1125
- /* 38 */ "THICKNESS",
1126
- /* 39 */ "DOTTED",
1127
- /* 40 */ "DASHED",
1128
- /* 41 */ "CW",
1129
- /* 42 */ "CCW",
1130
- /* 43 */ "LARROW",
1131
- /* 44 */ "RARROW",
1132
- /* 45 */ "LRARROW",
1133
- /* 46 */ "INVIS",
1134
- /* 47 */ "CENTER",
1135
- /* 48 */ "LJUST",
1136
- /* 49 */ "RJUST",
1137
- /* 50 */ "ABOVE",
1138
- /* 51 */ "BELOW",
1139
- /* 52 */ "ITALIC",
1140
- /* 53 */ "BOLD",
1141
- /* 54 */ "ALIGNED",
1142
- /* 55 */ "PLUS",
1143
- /* 56 */ "MINUS",
1144
- /* 57 */ "LP",
1145
- /* 58 */ "RP",
1146
- /* 59 */ "OF",
1147
- /* 60 */ "HEADING",
1148
- /* 61 */ "WAY",
1149
- /* 62 */ "BETWEEN",
1150
- /* 63 */ "THE",
1151
- /* 64 */ "DOT_L",
1152
- /* 65 */ "START",
1153
- /* 66 */ "END",
1154
- /* 67 */ "NTH",
1155
- /* 68 */ "VERTEX",
1156
- /* 69 */ "IN",
1157
- /* 70 */ "DOT_U",
1158
- /* 71 */ "LAST",
1159
- /* 72 */ "STAR",
1160
- /* 73 */ "SLASH",
1161
- /* 74 */ "UMINUS",
1096
+ /* 3 */ "OF",
1097
+ /* 4 */ "PLUS",
1098
+ /* 5 */ "MINUS",
1099
+ /* 6 */ "STAR",
1100
+ /* 7 */ "SLASH",
1101
+ /* 8 */ "PERCENT",
1102
+ /* 9 */ "UMINUS",
1103
+ /* 10 */ "EOL",
1104
+ /* 11 */ "ASSIGN",
1105
+ /* 12 */ "PLACENAME",
1106
+ /* 13 */ "COLON",
1107
+ /* 14 */ "FILL",
1108
+ /* 15 */ "COLOR",
1109
+ /* 16 */ "THICKNESS",
1110
+ /* 17 */ "PRINT",
1111
+ /* 18 */ "STRING",
1112
+ /* 19 */ "COMMA",
1113
+ /* 20 */ "CLASSNAME",
1114
+ /* 21 */ "LB",
1115
+ /* 22 */ "RB",
1116
+ /* 23 */ "UP",
1117
+ /* 24 */ "DOWN",
1118
+ /* 25 */ "LEFT",
1119
+ /* 26 */ "RIGHT",
1120
+ /* 27 */ "CLOSE",
1121
+ /* 28 */ "CHOP",
1122
+ /* 29 */ "FROM",
1123
+ /* 30 */ "TO",
1124
+ /* 31 */ "THEN",
1125
+ /* 32 */ "AT",
1126
+ /* 33 */ "WITH",
1127
+ /* 34 */ "SAME",
1128
+ /* 35 */ "AS",
1129
+ /* 36 */ "FIT",
1130
+ /* 37 */ "UNTIL",
1131
+ /* 38 */ "EVEN",
1132
+ /* 39 */ "AND",
1133
+ /* 40 */ "DOT_E",
1134
+ /* 41 */ "HEIGHT",
1135
+ /* 42 */ "WIDTH",
1136
+ /* 43 */ "RADIUS",
1137
+ /* 44 */ "DIAMETER",
1138
+ /* 45 */ "DOTTED",
1139
+ /* 46 */ "DASHED",
1140
+ /* 47 */ "CW",
1141
+ /* 48 */ "CCW",
1142
+ /* 49 */ "LARROW",
1143
+ /* 50 */ "RARROW",
1144
+ /* 51 */ "LRARROW",
1145
+ /* 52 */ "INVIS",
1146
+ /* 53 */ "CENTER",
1147
+ /* 54 */ "LJUST",
1148
+ /* 55 */ "RJUST",
1149
+ /* 56 */ "ABOVE",
1150
+ /* 57 */ "BELOW",
1151
+ /* 58 */ "ITALIC",
1152
+ /* 59 */ "BOLD",
1153
+ /* 60 */ "ALIGNED",
1154
+ /* 61 */ "LP",
1155
+ /* 62 */ "RP",
1156
+ /* 63 */ "HEADING",
1157
+ /* 64 */ "WAY",
1158
+ /* 65 */ "BETWEEN",
1159
+ /* 66 */ "THE",
1160
+ /* 67 */ "DOT_L",
1161
+ /* 68 */ "START",
1162
+ /* 69 */ "END",
1163
+ /* 70 */ "NTH",
1164
+ /* 71 */ "VERTEX",
1165
+ /* 72 */ "IN",
1166
+ /* 73 */ "DOT_U",
1167
+ /* 74 */ "LAST",
11621168
/* 75 */ "NUMBER",
11631169
/* 76 */ "FUNC1",
11641170
/* 77 */ "FUNC2",
11651171
/* 78 */ "X",
11661172
/* 79 */ "Y",
@@ -1215,141 +1221,145 @@
12151221
/* 6 */ "element ::= PLACENAME COLON unnamed_element",
12161222
/* 7 */ "element ::= PLACENAME COLON position",
12171223
/* 8 */ "element ::= unnamed_element",
12181224
/* 9 */ "element ::= print prlist",
12191225
/* 10 */ "rvalue ::= PLACENAME",
1220
- /* 11 */ "pritem ::= rvalue",
1221
- /* 12 */ "pritem ::= STRING",
1222
- /* 13 */ "prsep ::= COMMA",
1223
- /* 14 */ "unnamed_element ::= basetype attribute_list",
1224
- /* 15 */ "basetype ::= CLASSNAME",
1225
- /* 16 */ "basetype ::= STRING textposition",
1226
- /* 17 */ "basetype ::= LB savelist element_list RB",
1227
- /* 18 */ "savelist ::=",
1228
- /* 19 */ "attribute_list ::= expr",
1229
- /* 20 */ "attribute_list ::= expr PERCENT",
1230
- /* 21 */ "attribute ::= numproperty expr PERCENT",
1231
- /* 22 */ "attribute ::= numproperty expr",
1232
- /* 23 */ "attribute ::= dashproperty expr",
1233
- /* 24 */ "attribute ::= dashproperty",
1234
- /* 25 */ "attribute ::= colorproperty rvalue",
1235
- /* 26 */ "attribute ::= direction expr PERCENT",
1236
- /* 27 */ "attribute ::= direction expr",
1237
- /* 28 */ "attribute ::= direction",
1238
- /* 29 */ "attribute ::= direction even position",
1239
- /* 30 */ "attribute ::= CLOSE",
1240
- /* 31 */ "attribute ::= CHOP",
1241
- /* 32 */ "attribute ::= FROM position",
1242
- /* 33 */ "attribute ::= TO position",
1243
- /* 34 */ "attribute ::= THEN",
1244
- /* 35 */ "attribute ::= AT position",
1245
- /* 36 */ "attribute ::= SAME",
1246
- /* 37 */ "attribute ::= SAME AS object",
1247
- /* 38 */ "attribute ::= STRING textposition",
1248
- /* 39 */ "attribute ::= FIT",
1249
- /* 40 */ "with ::= DOT_E edge AT position",
1250
- /* 41 */ "with ::= edge AT position",
1251
- /* 42 */ "numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS",
1252
- /* 43 */ "boolproperty ::= CW",
1253
- /* 44 */ "boolproperty ::= CCW",
1254
- /* 45 */ "boolproperty ::= LARROW",
1255
- /* 46 */ "boolproperty ::= RARROW",
1256
- /* 47 */ "boolproperty ::= LRARROW",
1257
- /* 48 */ "boolproperty ::= INVIS",
1258
- /* 49 */ "textposition ::=",
1259
- /* 50 */ "textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED",
1260
- /* 51 */ "position ::= expr COMMA expr",
1261
- /* 52 */ "position ::= place PLUS expr COMMA expr",
1262
- /* 53 */ "position ::= place MINUS expr COMMA expr",
1263
- /* 54 */ "position ::= place PLUS LP expr COMMA expr RP",
1264
- /* 55 */ "position ::= place MINUS LP expr COMMA expr RP",
1265
- /* 56 */ "position ::= LP position COMMA position RP",
1266
- /* 57 */ "position ::= LP position RP",
1267
- /* 58 */ "position ::= expr between position AND position",
1268
- /* 59 */ "position ::= expr ABOVE position",
1269
- /* 60 */ "position ::= expr BELOW position",
1270
- /* 61 */ "position ::= expr LEFT OF position",
1271
- /* 62 */ "position ::= expr RIGHT OF position",
1272
- /* 63 */ "position ::= expr EDGEPT OF position",
1273
- /* 64 */ "position ::= expr HEADING expr FROM position",
1274
- /* 65 */ "place ::= object",
1275
- /* 66 */ "place ::= object DOT_E edge",
1276
- /* 67 */ "place ::= object DOT_L START",
1277
- /* 68 */ "place ::= object DOT_L END",
1278
- /* 69 */ "place ::= START OF object",
1279
- /* 70 */ "place ::= END OF object",
1280
- /* 71 */ "place ::= edge OF object",
1281
- /* 72 */ "place ::= NTH VERTEX OF object",
1282
- /* 73 */ "object ::= nth",
1283
- /* 74 */ "object ::= nth OF|IN object",
1284
- /* 75 */ "objectname ::= PLACENAME",
1285
- /* 76 */ "objectname ::= objectname DOT_U PLACENAME",
1286
- /* 77 */ "nth ::= NTH CLASSNAME",
1287
- /* 78 */ "nth ::= NTH LAST CLASSNAME",
1288
- /* 79 */ "nth ::= LAST CLASSNAME",
1289
- /* 80 */ "nth ::= LAST",
1290
- /* 81 */ "nth ::= NTH LB RB",
1291
- /* 82 */ "nth ::= NTH LAST LB RB",
1292
- /* 83 */ "nth ::= LAST LB RB",
1293
- /* 84 */ "expr ::= expr PLUS expr",
1294
- /* 85 */ "expr ::= expr MINUS expr",
1295
- /* 86 */ "expr ::= expr STAR expr",
1296
- /* 87 */ "expr ::= expr SLASH expr",
1297
- /* 88 */ "expr ::= MINUS expr",
1298
- /* 89 */ "expr ::= PLUS expr",
1299
- /* 90 */ "expr ::= LP expr RP",
1300
- /* 91 */ "expr ::= NUMBER",
1301
- /* 92 */ "expr ::= ID",
1302
- /* 93 */ "expr ::= FUNC1 LP expr RP",
1303
- /* 94 */ "expr ::= FUNC2 LP expr COMMA expr RP",
1304
- /* 95 */ "expr ::= object DOT_L locproperty",
1305
- /* 96 */ "expr ::= object DOT_L numproperty",
1306
- /* 97 */ "expr ::= object DOT_L dashproperty",
1307
- /* 98 */ "expr ::= object DOT_L colorproperty",
1308
- /* 99 */ "expr ::= object DOT_E edge DOT_L X",
1309
- /* 100 */ "expr ::= object DOT_E edge DOT_L Y",
1310
- /* 101 */ "expr ::= LP locproperty OF object RP",
1311
- /* 102 */ "expr ::= LP dashproperty OF object RP",
1312
- /* 103 */ "expr ::= LP numproperty OF object RP",
1313
- /* 104 */ "expr ::= LP colorproperty OF object RP",
1314
- /* 105 */ "expr ::= NTH VERTEX OF object DOT_L X",
1315
- /* 106 */ "expr ::= NTH VERTEX OF object DOT_L Y",
1316
- /* 107 */ "lvalue ::= ID",
1317
- /* 108 */ "lvalue ::= FILL",
1318
- /* 109 */ "lvalue ::= COLOR",
1319
- /* 110 */ "rvalue ::= expr",
1320
- /* 111 */ "print ::= PRINT",
1321
- /* 112 */ "prlist ::= pritem",
1322
- /* 113 */ "prlist ::= prlist prsep pritem",
1323
- /* 114 */ "direction ::= UP",
1324
- /* 115 */ "direction ::= DOWN",
1325
- /* 116 */ "direction ::= LEFT",
1326
- /* 117 */ "direction ::= RIGHT",
1327
- /* 118 */ "attribute_list ::= alist",
1328
- /* 119 */ "alist ::=",
1329
- /* 120 */ "alist ::= alist attribute",
1330
- /* 121 */ "attribute ::= boolproperty",
1331
- /* 122 */ "attribute ::= WITH withclause",
1332
- /* 123 */ "even ::= UNTIL EVEN WITH",
1333
- /* 124 */ "even ::= EVEN WITH",
1334
- /* 125 */ "withclause ::= with",
1335
- /* 126 */ "withclause ::= withclause AND with",
1336
- /* 127 */ "dashproperty ::= DOTTED",
1337
- /* 128 */ "dashproperty ::= DASHED",
1338
- /* 129 */ "colorproperty ::= FILL",
1339
- /* 130 */ "colorproperty ::= COLOR",
1340
- /* 131 */ "position ::= place",
1341
- /* 132 */ "between ::= WAY BETWEEN",
1342
- /* 133 */ "between ::= BETWEEN",
1343
- /* 134 */ "between ::= OF THE WAY BETWEEN",
1344
- /* 135 */ "object ::= objectname",
1345
- /* 136 */ "locproperty ::= X|Y",
1346
- /* 137 */ "edge ::= EDGEPT",
1347
- /* 138 */ "edge ::= TOP",
1348
- /* 139 */ "edge ::= BOTTOM",
1349
- /* 140 */ "edge ::= LEFT",
1350
- /* 141 */ "edge ::= RIGHT",
1226
+ /* 11 */ "pritem ::= FILL",
1227
+ /* 12 */ "pritem ::= COLOR",
1228
+ /* 13 */ "pritem ::= THICKNESS",
1229
+ /* 14 */ "pritem ::= rvalue",
1230
+ /* 15 */ "pritem ::= STRING",
1231
+ /* 16 */ "prsep ::= COMMA",
1232
+ /* 17 */ "unnamed_element ::= basetype attribute_list",
1233
+ /* 18 */ "basetype ::= CLASSNAME",
1234
+ /* 19 */ "basetype ::= STRING textposition",
1235
+ /* 20 */ "basetype ::= LB savelist element_list RB",
1236
+ /* 21 */ "savelist ::=",
1237
+ /* 22 */ "attribute_list ::= expr",
1238
+ /* 23 */ "attribute_list ::= expr PERCENT",
1239
+ /* 24 */ "attribute ::= numproperty expr PERCENT",
1240
+ /* 25 */ "attribute ::= numproperty expr",
1241
+ /* 26 */ "attribute ::= dashproperty expr",
1242
+ /* 27 */ "attribute ::= dashproperty",
1243
+ /* 28 */ "attribute ::= colorproperty rvalue",
1244
+ /* 29 */ "attribute ::= direction expr PERCENT",
1245
+ /* 30 */ "attribute ::= direction expr",
1246
+ /* 31 */ "attribute ::= direction",
1247
+ /* 32 */ "attribute ::= direction even position",
1248
+ /* 33 */ "attribute ::= CLOSE",
1249
+ /* 34 */ "attribute ::= CHOP",
1250
+ /* 35 */ "attribute ::= FROM position",
1251
+ /* 36 */ "attribute ::= TO position",
1252
+ /* 37 */ "attribute ::= THEN",
1253
+ /* 38 */ "attribute ::= AT position",
1254
+ /* 39 */ "attribute ::= SAME",
1255
+ /* 40 */ "attribute ::= SAME AS object",
1256
+ /* 41 */ "attribute ::= STRING textposition",
1257
+ /* 42 */ "attribute ::= FIT",
1258
+ /* 43 */ "with ::= DOT_E edge AT position",
1259
+ /* 44 */ "with ::= edge AT position",
1260
+ /* 45 */ "numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS",
1261
+ /* 46 */ "boolproperty ::= CW",
1262
+ /* 47 */ "boolproperty ::= CCW",
1263
+ /* 48 */ "boolproperty ::= LARROW",
1264
+ /* 49 */ "boolproperty ::= RARROW",
1265
+ /* 50 */ "boolproperty ::= LRARROW",
1266
+ /* 51 */ "boolproperty ::= INVIS",
1267
+ /* 52 */ "textposition ::=",
1268
+ /* 53 */ "textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED",
1269
+ /* 54 */ "position ::= expr COMMA expr",
1270
+ /* 55 */ "position ::= place PLUS expr COMMA expr",
1271
+ /* 56 */ "position ::= place MINUS expr COMMA expr",
1272
+ /* 57 */ "position ::= place PLUS LP expr COMMA expr RP",
1273
+ /* 58 */ "position ::= place MINUS LP expr COMMA expr RP",
1274
+ /* 59 */ "position ::= LP position COMMA position RP",
1275
+ /* 60 */ "position ::= LP position RP",
1276
+ /* 61 */ "position ::= expr between position AND position",
1277
+ /* 62 */ "position ::= expr ABOVE position",
1278
+ /* 63 */ "position ::= expr BELOW position",
1279
+ /* 64 */ "position ::= expr LEFT OF position",
1280
+ /* 65 */ "position ::= expr RIGHT OF position",
1281
+ /* 66 */ "position ::= expr EDGEPT OF position",
1282
+ /* 67 */ "position ::= expr HEADING expr FROM position",
1283
+ /* 68 */ "place ::= object",
1284
+ /* 69 */ "place ::= object DOT_E edge",
1285
+ /* 70 */ "place ::= object DOT_L START",
1286
+ /* 71 */ "place ::= object DOT_L END",
1287
+ /* 72 */ "place ::= START OF object",
1288
+ /* 73 */ "place ::= END OF object",
1289
+ /* 74 */ "place ::= edge OF object",
1290
+ /* 75 */ "place ::= NTH VERTEX OF object",
1291
+ /* 76 */ "object ::= nth",
1292
+ /* 77 */ "object ::= nth OF|IN object",
1293
+ /* 78 */ "objectname ::= PLACENAME",
1294
+ /* 79 */ "objectname ::= objectname DOT_U PLACENAME",
1295
+ /* 80 */ "nth ::= NTH CLASSNAME",
1296
+ /* 81 */ "nth ::= NTH LAST CLASSNAME",
1297
+ /* 82 */ "nth ::= LAST CLASSNAME",
1298
+ /* 83 */ "nth ::= LAST",
1299
+ /* 84 */ "nth ::= NTH LB RB",
1300
+ /* 85 */ "nth ::= NTH LAST LB RB",
1301
+ /* 86 */ "nth ::= LAST LB RB",
1302
+ /* 87 */ "expr ::= expr PLUS expr",
1303
+ /* 88 */ "expr ::= expr MINUS expr",
1304
+ /* 89 */ "expr ::= expr STAR expr",
1305
+ /* 90 */ "expr ::= expr SLASH expr",
1306
+ /* 91 */ "expr ::= MINUS expr",
1307
+ /* 92 */ "expr ::= PLUS expr",
1308
+ /* 93 */ "expr ::= LP expr RP",
1309
+ /* 94 */ "expr ::= NUMBER",
1310
+ /* 95 */ "expr ::= ID",
1311
+ /* 96 */ "expr ::= FUNC1 LP expr RP",
1312
+ /* 97 */ "expr ::= FUNC2 LP expr COMMA expr RP",
1313
+ /* 98 */ "expr ::= object DOT_L locproperty",
1314
+ /* 99 */ "expr ::= object DOT_L numproperty",
1315
+ /* 100 */ "expr ::= object DOT_L dashproperty",
1316
+ /* 101 */ "expr ::= object DOT_L colorproperty",
1317
+ /* 102 */ "expr ::= object DOT_E edge DOT_L X",
1318
+ /* 103 */ "expr ::= object DOT_E edge DOT_L Y",
1319
+ /* 104 */ "expr ::= LP locproperty OF object RP",
1320
+ /* 105 */ "expr ::= LP dashproperty OF object RP",
1321
+ /* 106 */ "expr ::= LP numproperty OF object RP",
1322
+ /* 107 */ "expr ::= LP colorproperty OF object RP",
1323
+ /* 108 */ "expr ::= NTH VERTEX OF object DOT_L X",
1324
+ /* 109 */ "expr ::= NTH VERTEX OF object DOT_L Y",
1325
+ /* 110 */ "lvalue ::= ID",
1326
+ /* 111 */ "lvalue ::= FILL",
1327
+ /* 112 */ "lvalue ::= COLOR",
1328
+ /* 113 */ "lvalue ::= THICKNESS",
1329
+ /* 114 */ "rvalue ::= expr",
1330
+ /* 115 */ "print ::= PRINT",
1331
+ /* 116 */ "prlist ::= pritem",
1332
+ /* 117 */ "prlist ::= prlist prsep pritem",
1333
+ /* 118 */ "direction ::= UP",
1334
+ /* 119 */ "direction ::= DOWN",
1335
+ /* 120 */ "direction ::= LEFT",
1336
+ /* 121 */ "direction ::= RIGHT",
1337
+ /* 122 */ "attribute_list ::= alist",
1338
+ /* 123 */ "alist ::=",
1339
+ /* 124 */ "alist ::= alist attribute",
1340
+ /* 125 */ "attribute ::= boolproperty",
1341
+ /* 126 */ "attribute ::= WITH withclause",
1342
+ /* 127 */ "even ::= UNTIL EVEN WITH",
1343
+ /* 128 */ "even ::= EVEN WITH",
1344
+ /* 129 */ "withclause ::= with",
1345
+ /* 130 */ "withclause ::= withclause AND with",
1346
+ /* 131 */ "dashproperty ::= DOTTED",
1347
+ /* 132 */ "dashproperty ::= DASHED",
1348
+ /* 133 */ "colorproperty ::= FILL",
1349
+ /* 134 */ "colorproperty ::= COLOR",
1350
+ /* 135 */ "position ::= place",
1351
+ /* 136 */ "between ::= WAY BETWEEN",
1352
+ /* 137 */ "between ::= BETWEEN",
1353
+ /* 138 */ "between ::= OF THE WAY BETWEEN",
1354
+ /* 139 */ "object ::= objectname",
1355
+ /* 140 */ "locproperty ::= X|Y",
1356
+ /* 141 */ "edge ::= EDGEPT",
1357
+ /* 142 */ "edge ::= TOP",
1358
+ /* 143 */ "edge ::= BOTTOM",
1359
+ /* 144 */ "edge ::= LEFT",
1360
+ /* 145 */ "edge ::= RIGHT",
13511361
};
13521362
#endif /* NDEBUG */
13531363
13541364
13551365
#if YYSTACKDEPTH<=0
@@ -1473,22 +1483,22 @@
14731483
** inside the C code.
14741484
*/
14751485
/********* Begin destructor definitions ***************************************/
14761486
case 82: /* element_list */
14771487
{
1478
-#line 422 "pikchr.y"
1488
+#line 432 "pikchr.y"
14791489
pik_elist_free(p,(yypminor->yy42));
1480
-#line 1505 "pikchr.c"
1490
+#line 1515 "pikchr.c"
14811491
}
14821492
break;
14831493
case 83: /* element */
14841494
case 84: /* unnamed_element */
14851495
case 85: /* basetype */
14861496
{
1487
-#line 424 "pikchr.y"
1497
+#line 434 "pikchr.y"
14881498
pik_elem_free(p,(yypminor->yy24));
1489
-#line 1514 "pikchr.c"
1499
+#line 1524 "pikchr.c"
14901500
}
14911501
break;
14921502
/********* End destructor definitions *****************************************/
14931503
default: break; /* If no destructor action specified: do nothing */
14941504
}
@@ -1702,14 +1712,14 @@
17021712
#endif
17031713
while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
17041714
/* Here code is inserted which will execute if the parser
17051715
** stack every overflows */
17061716
/******** Begin %stack_overflow code ******************************************/
1707
-#line 453 "pikchr.y"
1717
+#line 463 "pikchr.y"
17081718
17091719
pik_error(p, 0, "parser stack overflow");
1710
-#line 1735 "pikchr.c"
1720
+#line 1745 "pikchr.c"
17111721
/******** End %stack_overflow code ********************************************/
17121722
pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */
17131723
pik_parserCTX_STORE
17141724
}
17151725
@@ -1788,141 +1798,145 @@
17881798
83, /* (6) element ::= PLACENAME COLON unnamed_element */
17891799
83, /* (7) element ::= PLACENAME COLON position */
17901800
83, /* (8) element ::= unnamed_element */
17911801
83, /* (9) element ::= print prlist */
17921802
99, /* (10) rvalue ::= PLACENAME */
1793
- 105, /* (11) pritem ::= rvalue */
1794
- 105, /* (12) pritem ::= STRING */
1795
- 106, /* (13) prsep ::= COMMA */
1796
- 84, /* (14) unnamed_element ::= basetype attribute_list */
1797
- 85, /* (15) basetype ::= CLASSNAME */
1798
- 85, /* (16) basetype ::= STRING textposition */
1799
- 85, /* (17) basetype ::= LB savelist element_list RB */
1800
- 108, /* (18) savelist ::= */
1801
- 107, /* (19) attribute_list ::= expr */
1802
- 107, /* (20) attribute_list ::= expr PERCENT */
1803
- 110, /* (21) attribute ::= numproperty expr PERCENT */
1804
- 110, /* (22) attribute ::= numproperty expr */
1805
- 110, /* (23) attribute ::= dashproperty expr */
1806
- 110, /* (24) attribute ::= dashproperty */
1807
- 110, /* (25) attribute ::= colorproperty rvalue */
1808
- 110, /* (26) attribute ::= direction expr PERCENT */
1809
- 110, /* (27) attribute ::= direction expr */
1810
- 110, /* (28) attribute ::= direction */
1811
- 110, /* (29) attribute ::= direction even position */
1812
- 110, /* (30) attribute ::= CLOSE */
1813
- 110, /* (31) attribute ::= CHOP */
1814
- 110, /* (32) attribute ::= FROM position */
1815
- 110, /* (33) attribute ::= TO position */
1816
- 110, /* (34) attribute ::= THEN */
1817
- 110, /* (35) attribute ::= AT position */
1818
- 110, /* (36) attribute ::= SAME */
1819
- 110, /* (37) attribute ::= SAME AS object */
1820
- 110, /* (38) attribute ::= STRING textposition */
1821
- 110, /* (39) attribute ::= FIT */
1822
- 113, /* (40) with ::= DOT_E edge AT position */
1823
- 113, /* (41) with ::= edge AT position */
1824
- 87, /* (42) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
1825
- 111, /* (43) boolproperty ::= CW */
1826
- 111, /* (44) boolproperty ::= CCW */
1827
- 111, /* (45) boolproperty ::= LARROW */
1828
- 111, /* (46) boolproperty ::= RARROW */
1829
- 111, /* (47) boolproperty ::= LRARROW */
1830
- 111, /* (48) boolproperty ::= INVIS */
1831
- 98, /* (49) textposition ::= */
1832
- 98, /* (50) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED */
1833
- 93, /* (51) position ::= expr COMMA expr */
1834
- 93, /* (52) position ::= place PLUS expr COMMA expr */
1835
- 93, /* (53) position ::= place MINUS expr COMMA expr */
1836
- 93, /* (54) position ::= place PLUS LP expr COMMA expr RP */
1837
- 93, /* (55) position ::= place MINUS LP expr COMMA expr RP */
1838
- 93, /* (56) position ::= LP position COMMA position RP */
1839
- 93, /* (57) position ::= LP position RP */
1840
- 93, /* (58) position ::= expr between position AND position */
1841
- 93, /* (59) position ::= expr ABOVE position */
1842
- 93, /* (60) position ::= expr BELOW position */
1843
- 93, /* (61) position ::= expr LEFT OF position */
1844
- 93, /* (62) position ::= expr RIGHT OF position */
1845
- 93, /* (63) position ::= expr EDGEPT OF position */
1846
- 93, /* (64) position ::= expr HEADING expr FROM position */
1847
- 94, /* (65) place ::= object */
1848
- 94, /* (66) place ::= object DOT_E edge */
1849
- 94, /* (67) place ::= object DOT_L START */
1850
- 94, /* (68) place ::= object DOT_L END */
1851
- 94, /* (69) place ::= START OF object */
1852
- 94, /* (70) place ::= END OF object */
1853
- 94, /* (71) place ::= edge OF object */
1854
- 94, /* (72) place ::= NTH VERTEX OF object */
1855
- 95, /* (73) object ::= nth */
1856
- 95, /* (74) object ::= nth OF|IN object */
1857
- 96, /* (75) objectname ::= PLACENAME */
1858
- 96, /* (76) objectname ::= objectname DOT_U PLACENAME */
1859
- 97, /* (77) nth ::= NTH CLASSNAME */
1860
- 97, /* (78) nth ::= NTH LAST CLASSNAME */
1861
- 97, /* (79) nth ::= LAST CLASSNAME */
1862
- 97, /* (80) nth ::= LAST */
1863
- 97, /* (81) nth ::= NTH LB RB */
1864
- 97, /* (82) nth ::= NTH LAST LB RB */
1865
- 97, /* (83) nth ::= LAST LB RB */
1866
- 86, /* (84) expr ::= expr PLUS expr */
1867
- 86, /* (85) expr ::= expr MINUS expr */
1868
- 86, /* (86) expr ::= expr STAR expr */
1869
- 86, /* (87) expr ::= expr SLASH expr */
1870
- 86, /* (88) expr ::= MINUS expr */
1871
- 86, /* (89) expr ::= PLUS expr */
1872
- 86, /* (90) expr ::= LP expr RP */
1873
- 86, /* (91) expr ::= NUMBER */
1874
- 86, /* (92) expr ::= ID */
1875
- 86, /* (93) expr ::= FUNC1 LP expr RP */
1876
- 86, /* (94) expr ::= FUNC2 LP expr COMMA expr RP */
1877
- 86, /* (95) expr ::= object DOT_L locproperty */
1878
- 86, /* (96) expr ::= object DOT_L numproperty */
1879
- 86, /* (97) expr ::= object DOT_L dashproperty */
1880
- 86, /* (98) expr ::= object DOT_L colorproperty */
1881
- 86, /* (99) expr ::= object DOT_E edge DOT_L X */
1882
- 86, /* (100) expr ::= object DOT_E edge DOT_L Y */
1883
- 86, /* (101) expr ::= LP locproperty OF object RP */
1884
- 86, /* (102) expr ::= LP dashproperty OF object RP */
1885
- 86, /* (103) expr ::= LP numproperty OF object RP */
1886
- 86, /* (104) expr ::= LP colorproperty OF object RP */
1887
- 86, /* (105) expr ::= NTH VERTEX OF object DOT_L X */
1888
- 86, /* (106) expr ::= NTH VERTEX OF object DOT_L Y */
1889
- 100, /* (107) lvalue ::= ID */
1890
- 100, /* (108) lvalue ::= FILL */
1891
- 100, /* (109) lvalue ::= COLOR */
1892
- 99, /* (110) rvalue ::= expr */
1893
- 103, /* (111) print ::= PRINT */
1894
- 104, /* (112) prlist ::= pritem */
1895
- 104, /* (113) prlist ::= prlist prsep pritem */
1896
- 89, /* (114) direction ::= UP */
1897
- 89, /* (115) direction ::= DOWN */
1898
- 89, /* (116) direction ::= LEFT */
1899
- 89, /* (117) direction ::= RIGHT */
1900
- 107, /* (118) attribute_list ::= alist */
1901
- 109, /* (119) alist ::= */
1902
- 109, /* (120) alist ::= alist attribute */
1903
- 110, /* (121) attribute ::= boolproperty */
1904
- 110, /* (122) attribute ::= WITH withclause */
1905
- 101, /* (123) even ::= UNTIL EVEN WITH */
1906
- 101, /* (124) even ::= EVEN WITH */
1907
- 112, /* (125) withclause ::= with */
1908
- 112, /* (126) withclause ::= withclause AND with */
1909
- 90, /* (127) dashproperty ::= DOTTED */
1910
- 90, /* (128) dashproperty ::= DASHED */
1911
- 91, /* (129) colorproperty ::= FILL */
1912
- 91, /* (130) colorproperty ::= COLOR */
1913
- 93, /* (131) position ::= place */
1914
- 114, /* (132) between ::= WAY BETWEEN */
1915
- 114, /* (133) between ::= BETWEEN */
1916
- 114, /* (134) between ::= OF THE WAY BETWEEN */
1917
- 95, /* (135) object ::= objectname */
1918
- 92, /* (136) locproperty ::= X|Y */
1919
- 88, /* (137) edge ::= EDGEPT */
1920
- 88, /* (138) edge ::= TOP */
1921
- 88, /* (139) edge ::= BOTTOM */
1922
- 88, /* (140) edge ::= LEFT */
1923
- 88, /* (141) edge ::= RIGHT */
1803
+ 105, /* (11) pritem ::= FILL */
1804
+ 105, /* (12) pritem ::= COLOR */
1805
+ 105, /* (13) pritem ::= THICKNESS */
1806
+ 105, /* (14) pritem ::= rvalue */
1807
+ 105, /* (15) pritem ::= STRING */
1808
+ 106, /* (16) prsep ::= COMMA */
1809
+ 84, /* (17) unnamed_element ::= basetype attribute_list */
1810
+ 85, /* (18) basetype ::= CLASSNAME */
1811
+ 85, /* (19) basetype ::= STRING textposition */
1812
+ 85, /* (20) basetype ::= LB savelist element_list RB */
1813
+ 108, /* (21) savelist ::= */
1814
+ 107, /* (22) attribute_list ::= expr */
1815
+ 107, /* (23) attribute_list ::= expr PERCENT */
1816
+ 110, /* (24) attribute ::= numproperty expr PERCENT */
1817
+ 110, /* (25) attribute ::= numproperty expr */
1818
+ 110, /* (26) attribute ::= dashproperty expr */
1819
+ 110, /* (27) attribute ::= dashproperty */
1820
+ 110, /* (28) attribute ::= colorproperty rvalue */
1821
+ 110, /* (29) attribute ::= direction expr PERCENT */
1822
+ 110, /* (30) attribute ::= direction expr */
1823
+ 110, /* (31) attribute ::= direction */
1824
+ 110, /* (32) attribute ::= direction even position */
1825
+ 110, /* (33) attribute ::= CLOSE */
1826
+ 110, /* (34) attribute ::= CHOP */
1827
+ 110, /* (35) attribute ::= FROM position */
1828
+ 110, /* (36) attribute ::= TO position */
1829
+ 110, /* (37) attribute ::= THEN */
1830
+ 110, /* (38) attribute ::= AT position */
1831
+ 110, /* (39) attribute ::= SAME */
1832
+ 110, /* (40) attribute ::= SAME AS object */
1833
+ 110, /* (41) attribute ::= STRING textposition */
1834
+ 110, /* (42) attribute ::= FIT */
1835
+ 113, /* (43) with ::= DOT_E edge AT position */
1836
+ 113, /* (44) with ::= edge AT position */
1837
+ 87, /* (45) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
1838
+ 111, /* (46) boolproperty ::= CW */
1839
+ 111, /* (47) boolproperty ::= CCW */
1840
+ 111, /* (48) boolproperty ::= LARROW */
1841
+ 111, /* (49) boolproperty ::= RARROW */
1842
+ 111, /* (50) boolproperty ::= LRARROW */
1843
+ 111, /* (51) boolproperty ::= INVIS */
1844
+ 98, /* (52) textposition ::= */
1845
+ 98, /* (53) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED */
1846
+ 93, /* (54) position ::= expr COMMA expr */
1847
+ 93, /* (55) position ::= place PLUS expr COMMA expr */
1848
+ 93, /* (56) position ::= place MINUS expr COMMA expr */
1849
+ 93, /* (57) position ::= place PLUS LP expr COMMA expr RP */
1850
+ 93, /* (58) position ::= place MINUS LP expr COMMA expr RP */
1851
+ 93, /* (59) position ::= LP position COMMA position RP */
1852
+ 93, /* (60) position ::= LP position RP */
1853
+ 93, /* (61) position ::= expr between position AND position */
1854
+ 93, /* (62) position ::= expr ABOVE position */
1855
+ 93, /* (63) position ::= expr BELOW position */
1856
+ 93, /* (64) position ::= expr LEFT OF position */
1857
+ 93, /* (65) position ::= expr RIGHT OF position */
1858
+ 93, /* (66) position ::= expr EDGEPT OF position */
1859
+ 93, /* (67) position ::= expr HEADING expr FROM position */
1860
+ 94, /* (68) place ::= object */
1861
+ 94, /* (69) place ::= object DOT_E edge */
1862
+ 94, /* (70) place ::= object DOT_L START */
1863
+ 94, /* (71) place ::= object DOT_L END */
1864
+ 94, /* (72) place ::= START OF object */
1865
+ 94, /* (73) place ::= END OF object */
1866
+ 94, /* (74) place ::= edge OF object */
1867
+ 94, /* (75) place ::= NTH VERTEX OF object */
1868
+ 95, /* (76) object ::= nth */
1869
+ 95, /* (77) object ::= nth OF|IN object */
1870
+ 96, /* (78) objectname ::= PLACENAME */
1871
+ 96, /* (79) objectname ::= objectname DOT_U PLACENAME */
1872
+ 97, /* (80) nth ::= NTH CLASSNAME */
1873
+ 97, /* (81) nth ::= NTH LAST CLASSNAME */
1874
+ 97, /* (82) nth ::= LAST CLASSNAME */
1875
+ 97, /* (83) nth ::= LAST */
1876
+ 97, /* (84) nth ::= NTH LB RB */
1877
+ 97, /* (85) nth ::= NTH LAST LB RB */
1878
+ 97, /* (86) nth ::= LAST LB RB */
1879
+ 86, /* (87) expr ::= expr PLUS expr */
1880
+ 86, /* (88) expr ::= expr MINUS expr */
1881
+ 86, /* (89) expr ::= expr STAR expr */
1882
+ 86, /* (90) expr ::= expr SLASH expr */
1883
+ 86, /* (91) expr ::= MINUS expr */
1884
+ 86, /* (92) expr ::= PLUS expr */
1885
+ 86, /* (93) expr ::= LP expr RP */
1886
+ 86, /* (94) expr ::= NUMBER */
1887
+ 86, /* (95) expr ::= ID */
1888
+ 86, /* (96) expr ::= FUNC1 LP expr RP */
1889
+ 86, /* (97) expr ::= FUNC2 LP expr COMMA expr RP */
1890
+ 86, /* (98) expr ::= object DOT_L locproperty */
1891
+ 86, /* (99) expr ::= object DOT_L numproperty */
1892
+ 86, /* (100) expr ::= object DOT_L dashproperty */
1893
+ 86, /* (101) expr ::= object DOT_L colorproperty */
1894
+ 86, /* (102) expr ::= object DOT_E edge DOT_L X */
1895
+ 86, /* (103) expr ::= object DOT_E edge DOT_L Y */
1896
+ 86, /* (104) expr ::= LP locproperty OF object RP */
1897
+ 86, /* (105) expr ::= LP dashproperty OF object RP */
1898
+ 86, /* (106) expr ::= LP numproperty OF object RP */
1899
+ 86, /* (107) expr ::= LP colorproperty OF object RP */
1900
+ 86, /* (108) expr ::= NTH VERTEX OF object DOT_L X */
1901
+ 86, /* (109) expr ::= NTH VERTEX OF object DOT_L Y */
1902
+ 100, /* (110) lvalue ::= ID */
1903
+ 100, /* (111) lvalue ::= FILL */
1904
+ 100, /* (112) lvalue ::= COLOR */
1905
+ 100, /* (113) lvalue ::= THICKNESS */
1906
+ 99, /* (114) rvalue ::= expr */
1907
+ 103, /* (115) print ::= PRINT */
1908
+ 104, /* (116) prlist ::= pritem */
1909
+ 104, /* (117) prlist ::= prlist prsep pritem */
1910
+ 89, /* (118) direction ::= UP */
1911
+ 89, /* (119) direction ::= DOWN */
1912
+ 89, /* (120) direction ::= LEFT */
1913
+ 89, /* (121) direction ::= RIGHT */
1914
+ 107, /* (122) attribute_list ::= alist */
1915
+ 109, /* (123) alist ::= */
1916
+ 109, /* (124) alist ::= alist attribute */
1917
+ 110, /* (125) attribute ::= boolproperty */
1918
+ 110, /* (126) attribute ::= WITH withclause */
1919
+ 101, /* (127) even ::= UNTIL EVEN WITH */
1920
+ 101, /* (128) even ::= EVEN WITH */
1921
+ 112, /* (129) withclause ::= with */
1922
+ 112, /* (130) withclause ::= withclause AND with */
1923
+ 90, /* (131) dashproperty ::= DOTTED */
1924
+ 90, /* (132) dashproperty ::= DASHED */
1925
+ 91, /* (133) colorproperty ::= FILL */
1926
+ 91, /* (134) colorproperty ::= COLOR */
1927
+ 93, /* (135) position ::= place */
1928
+ 114, /* (136) between ::= WAY BETWEEN */
1929
+ 114, /* (137) between ::= BETWEEN */
1930
+ 114, /* (138) between ::= OF THE WAY BETWEEN */
1931
+ 95, /* (139) object ::= objectname */
1932
+ 92, /* (140) locproperty ::= X|Y */
1933
+ 88, /* (141) edge ::= EDGEPT */
1934
+ 88, /* (142) edge ::= TOP */
1935
+ 88, /* (143) edge ::= BOTTOM */
1936
+ 88, /* (144) edge ::= LEFT */
1937
+ 88, /* (145) edge ::= RIGHT */
19241938
};
19251939
19261940
/* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
19271941
** of symbols on the right-hand side of that rule. */
19281942
static const signed char yyRuleInfoNRhs[] = {
@@ -1935,141 +1949,145 @@
19351949
-3, /* (6) element ::= PLACENAME COLON unnamed_element */
19361950
-3, /* (7) element ::= PLACENAME COLON position */
19371951
-1, /* (8) element ::= unnamed_element */
19381952
-2, /* (9) element ::= print prlist */
19391953
-1, /* (10) rvalue ::= PLACENAME */
1940
- -1, /* (11) pritem ::= rvalue */
1941
- -1, /* (12) pritem ::= STRING */
1942
- -1, /* (13) prsep ::= COMMA */
1943
- -2, /* (14) unnamed_element ::= basetype attribute_list */
1944
- -1, /* (15) basetype ::= CLASSNAME */
1945
- -2, /* (16) basetype ::= STRING textposition */
1946
- -4, /* (17) basetype ::= LB savelist element_list RB */
1947
- 0, /* (18) savelist ::= */
1948
- -1, /* (19) attribute_list ::= expr */
1949
- -2, /* (20) attribute_list ::= expr PERCENT */
1950
- -3, /* (21) attribute ::= numproperty expr PERCENT */
1951
- -2, /* (22) attribute ::= numproperty expr */
1952
- -2, /* (23) attribute ::= dashproperty expr */
1953
- -1, /* (24) attribute ::= dashproperty */
1954
- -2, /* (25) attribute ::= colorproperty rvalue */
1955
- -3, /* (26) attribute ::= direction expr PERCENT */
1956
- -2, /* (27) attribute ::= direction expr */
1957
- -1, /* (28) attribute ::= direction */
1958
- -3, /* (29) attribute ::= direction even position */
1959
- -1, /* (30) attribute ::= CLOSE */
1960
- -1, /* (31) attribute ::= CHOP */
1961
- -2, /* (32) attribute ::= FROM position */
1962
- -2, /* (33) attribute ::= TO position */
1963
- -1, /* (34) attribute ::= THEN */
1964
- -2, /* (35) attribute ::= AT position */
1965
- -1, /* (36) attribute ::= SAME */
1966
- -3, /* (37) attribute ::= SAME AS object */
1967
- -2, /* (38) attribute ::= STRING textposition */
1968
- -1, /* (39) attribute ::= FIT */
1969
- -4, /* (40) with ::= DOT_E edge AT position */
1970
- -3, /* (41) with ::= edge AT position */
1971
- -1, /* (42) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
1972
- -1, /* (43) boolproperty ::= CW */
1973
- -1, /* (44) boolproperty ::= CCW */
1974
- -1, /* (45) boolproperty ::= LARROW */
1975
- -1, /* (46) boolproperty ::= RARROW */
1976
- -1, /* (47) boolproperty ::= LRARROW */
1977
- -1, /* (48) boolproperty ::= INVIS */
1978
- 0, /* (49) textposition ::= */
1979
- -2, /* (50) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED */
1980
- -3, /* (51) position ::= expr COMMA expr */
1981
- -5, /* (52) position ::= place PLUS expr COMMA expr */
1982
- -5, /* (53) position ::= place MINUS expr COMMA expr */
1983
- -7, /* (54) position ::= place PLUS LP expr COMMA expr RP */
1984
- -7, /* (55) position ::= place MINUS LP expr COMMA expr RP */
1985
- -5, /* (56) position ::= LP position COMMA position RP */
1986
- -3, /* (57) position ::= LP position RP */
1987
- -5, /* (58) position ::= expr between position AND position */
1988
- -3, /* (59) position ::= expr ABOVE position */
1989
- -3, /* (60) position ::= expr BELOW position */
1990
- -4, /* (61) position ::= expr LEFT OF position */
1991
- -4, /* (62) position ::= expr RIGHT OF position */
1992
- -4, /* (63) position ::= expr EDGEPT OF position */
1993
- -5, /* (64) position ::= expr HEADING expr FROM position */
1994
- -1, /* (65) place ::= object */
1995
- -3, /* (66) place ::= object DOT_E edge */
1996
- -3, /* (67) place ::= object DOT_L START */
1997
- -3, /* (68) place ::= object DOT_L END */
1998
- -3, /* (69) place ::= START OF object */
1999
- -3, /* (70) place ::= END OF object */
2000
- -3, /* (71) place ::= edge OF object */
2001
- -4, /* (72) place ::= NTH VERTEX OF object */
2002
- -1, /* (73) object ::= nth */
2003
- -3, /* (74) object ::= nth OF|IN object */
2004
- -1, /* (75) objectname ::= PLACENAME */
2005
- -3, /* (76) objectname ::= objectname DOT_U PLACENAME */
2006
- -2, /* (77) nth ::= NTH CLASSNAME */
2007
- -3, /* (78) nth ::= NTH LAST CLASSNAME */
2008
- -2, /* (79) nth ::= LAST CLASSNAME */
2009
- -1, /* (80) nth ::= LAST */
2010
- -3, /* (81) nth ::= NTH LB RB */
2011
- -4, /* (82) nth ::= NTH LAST LB RB */
2012
- -3, /* (83) nth ::= LAST LB RB */
2013
- -3, /* (84) expr ::= expr PLUS expr */
2014
- -3, /* (85) expr ::= expr MINUS expr */
2015
- -3, /* (86) expr ::= expr STAR expr */
2016
- -3, /* (87) expr ::= expr SLASH expr */
2017
- -2, /* (88) expr ::= MINUS expr */
2018
- -2, /* (89) expr ::= PLUS expr */
2019
- -3, /* (90) expr ::= LP expr RP */
2020
- -1, /* (91) expr ::= NUMBER */
2021
- -1, /* (92) expr ::= ID */
2022
- -4, /* (93) expr ::= FUNC1 LP expr RP */
2023
- -6, /* (94) expr ::= FUNC2 LP expr COMMA expr RP */
2024
- -3, /* (95) expr ::= object DOT_L locproperty */
2025
- -3, /* (96) expr ::= object DOT_L numproperty */
2026
- -3, /* (97) expr ::= object DOT_L dashproperty */
2027
- -3, /* (98) expr ::= object DOT_L colorproperty */
2028
- -5, /* (99) expr ::= object DOT_E edge DOT_L X */
2029
- -5, /* (100) expr ::= object DOT_E edge DOT_L Y */
2030
- -5, /* (101) expr ::= LP locproperty OF object RP */
2031
- -5, /* (102) expr ::= LP dashproperty OF object RP */
2032
- -5, /* (103) expr ::= LP numproperty OF object RP */
2033
- -5, /* (104) expr ::= LP colorproperty OF object RP */
2034
- -6, /* (105) expr ::= NTH VERTEX OF object DOT_L X */
2035
- -6, /* (106) expr ::= NTH VERTEX OF object DOT_L Y */
2036
- -1, /* (107) lvalue ::= ID */
2037
- -1, /* (108) lvalue ::= FILL */
2038
- -1, /* (109) lvalue ::= COLOR */
2039
- -1, /* (110) rvalue ::= expr */
2040
- -1, /* (111) print ::= PRINT */
2041
- -1, /* (112) prlist ::= pritem */
2042
- -3, /* (113) prlist ::= prlist prsep pritem */
2043
- -1, /* (114) direction ::= UP */
2044
- -1, /* (115) direction ::= DOWN */
2045
- -1, /* (116) direction ::= LEFT */
2046
- -1, /* (117) direction ::= RIGHT */
2047
- -1, /* (118) attribute_list ::= alist */
2048
- 0, /* (119) alist ::= */
2049
- -2, /* (120) alist ::= alist attribute */
2050
- -1, /* (121) attribute ::= boolproperty */
2051
- -2, /* (122) attribute ::= WITH withclause */
2052
- -3, /* (123) even ::= UNTIL EVEN WITH */
2053
- -2, /* (124) even ::= EVEN WITH */
2054
- -1, /* (125) withclause ::= with */
2055
- -3, /* (126) withclause ::= withclause AND with */
2056
- -1, /* (127) dashproperty ::= DOTTED */
2057
- -1, /* (128) dashproperty ::= DASHED */
2058
- -1, /* (129) colorproperty ::= FILL */
2059
- -1, /* (130) colorproperty ::= COLOR */
2060
- -1, /* (131) position ::= place */
2061
- -2, /* (132) between ::= WAY BETWEEN */
2062
- -1, /* (133) between ::= BETWEEN */
2063
- -4, /* (134) between ::= OF THE WAY BETWEEN */
2064
- -1, /* (135) object ::= objectname */
2065
- -1, /* (136) locproperty ::= X|Y */
2066
- -1, /* (137) edge ::= EDGEPT */
2067
- -1, /* (138) edge ::= TOP */
2068
- -1, /* (139) edge ::= BOTTOM */
2069
- -1, /* (140) edge ::= LEFT */
2070
- -1, /* (141) edge ::= RIGHT */
1954
+ -1, /* (11) pritem ::= FILL */
1955
+ -1, /* (12) pritem ::= COLOR */
1956
+ -1, /* (13) pritem ::= THICKNESS */
1957
+ -1, /* (14) pritem ::= rvalue */
1958
+ -1, /* (15) pritem ::= STRING */
1959
+ -1, /* (16) prsep ::= COMMA */
1960
+ -2, /* (17) unnamed_element ::= basetype attribute_list */
1961
+ -1, /* (18) basetype ::= CLASSNAME */
1962
+ -2, /* (19) basetype ::= STRING textposition */
1963
+ -4, /* (20) basetype ::= LB savelist element_list RB */
1964
+ 0, /* (21) savelist ::= */
1965
+ -1, /* (22) attribute_list ::= expr */
1966
+ -2, /* (23) attribute_list ::= expr PERCENT */
1967
+ -3, /* (24) attribute ::= numproperty expr PERCENT */
1968
+ -2, /* (25) attribute ::= numproperty expr */
1969
+ -2, /* (26) attribute ::= dashproperty expr */
1970
+ -1, /* (27) attribute ::= dashproperty */
1971
+ -2, /* (28) attribute ::= colorproperty rvalue */
1972
+ -3, /* (29) attribute ::= direction expr PERCENT */
1973
+ -2, /* (30) attribute ::= direction expr */
1974
+ -1, /* (31) attribute ::= direction */
1975
+ -3, /* (32) attribute ::= direction even position */
1976
+ -1, /* (33) attribute ::= CLOSE */
1977
+ -1, /* (34) attribute ::= CHOP */
1978
+ -2, /* (35) attribute ::= FROM position */
1979
+ -2, /* (36) attribute ::= TO position */
1980
+ -1, /* (37) attribute ::= THEN */
1981
+ -2, /* (38) attribute ::= AT position */
1982
+ -1, /* (39) attribute ::= SAME */
1983
+ -3, /* (40) attribute ::= SAME AS object */
1984
+ -2, /* (41) attribute ::= STRING textposition */
1985
+ -1, /* (42) attribute ::= FIT */
1986
+ -4, /* (43) with ::= DOT_E edge AT position */
1987
+ -3, /* (44) with ::= edge AT position */
1988
+ -1, /* (45) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
1989
+ -1, /* (46) boolproperty ::= CW */
1990
+ -1, /* (47) boolproperty ::= CCW */
1991
+ -1, /* (48) boolproperty ::= LARROW */
1992
+ -1, /* (49) boolproperty ::= RARROW */
1993
+ -1, /* (50) boolproperty ::= LRARROW */
1994
+ -1, /* (51) boolproperty ::= INVIS */
1995
+ 0, /* (52) textposition ::= */
1996
+ -2, /* (53) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED */
1997
+ -3, /* (54) position ::= expr COMMA expr */
1998
+ -5, /* (55) position ::= place PLUS expr COMMA expr */
1999
+ -5, /* (56) position ::= place MINUS expr COMMA expr */
2000
+ -7, /* (57) position ::= place PLUS LP expr COMMA expr RP */
2001
+ -7, /* (58) position ::= place MINUS LP expr COMMA expr RP */
2002
+ -5, /* (59) position ::= LP position COMMA position RP */
2003
+ -3, /* (60) position ::= LP position RP */
2004
+ -5, /* (61) position ::= expr between position AND position */
2005
+ -3, /* (62) position ::= expr ABOVE position */
2006
+ -3, /* (63) position ::= expr BELOW position */
2007
+ -4, /* (64) position ::= expr LEFT OF position */
2008
+ -4, /* (65) position ::= expr RIGHT OF position */
2009
+ -4, /* (66) position ::= expr EDGEPT OF position */
2010
+ -5, /* (67) position ::= expr HEADING expr FROM position */
2011
+ -1, /* (68) place ::= object */
2012
+ -3, /* (69) place ::= object DOT_E edge */
2013
+ -3, /* (70) place ::= object DOT_L START */
2014
+ -3, /* (71) place ::= object DOT_L END */
2015
+ -3, /* (72) place ::= START OF object */
2016
+ -3, /* (73) place ::= END OF object */
2017
+ -3, /* (74) place ::= edge OF object */
2018
+ -4, /* (75) place ::= NTH VERTEX OF object */
2019
+ -1, /* (76) object ::= nth */
2020
+ -3, /* (77) object ::= nth OF|IN object */
2021
+ -1, /* (78) objectname ::= PLACENAME */
2022
+ -3, /* (79) objectname ::= objectname DOT_U PLACENAME */
2023
+ -2, /* (80) nth ::= NTH CLASSNAME */
2024
+ -3, /* (81) nth ::= NTH LAST CLASSNAME */
2025
+ -2, /* (82) nth ::= LAST CLASSNAME */
2026
+ -1, /* (83) nth ::= LAST */
2027
+ -3, /* (84) nth ::= NTH LB RB */
2028
+ -4, /* (85) nth ::= NTH LAST LB RB */
2029
+ -3, /* (86) nth ::= LAST LB RB */
2030
+ -3, /* (87) expr ::= expr PLUS expr */
2031
+ -3, /* (88) expr ::= expr MINUS expr */
2032
+ -3, /* (89) expr ::= expr STAR expr */
2033
+ -3, /* (90) expr ::= expr SLASH expr */
2034
+ -2, /* (91) expr ::= MINUS expr */
2035
+ -2, /* (92) expr ::= PLUS expr */
2036
+ -3, /* (93) expr ::= LP expr RP */
2037
+ -1, /* (94) expr ::= NUMBER */
2038
+ -1, /* (95) expr ::= ID */
2039
+ -4, /* (96) expr ::= FUNC1 LP expr RP */
2040
+ -6, /* (97) expr ::= FUNC2 LP expr COMMA expr RP */
2041
+ -3, /* (98) expr ::= object DOT_L locproperty */
2042
+ -3, /* (99) expr ::= object DOT_L numproperty */
2043
+ -3, /* (100) expr ::= object DOT_L dashproperty */
2044
+ -3, /* (101) expr ::= object DOT_L colorproperty */
2045
+ -5, /* (102) expr ::= object DOT_E edge DOT_L X */
2046
+ -5, /* (103) expr ::= object DOT_E edge DOT_L Y */
2047
+ -5, /* (104) expr ::= LP locproperty OF object RP */
2048
+ -5, /* (105) expr ::= LP dashproperty OF object RP */
2049
+ -5, /* (106) expr ::= LP numproperty OF object RP */
2050
+ -5, /* (107) expr ::= LP colorproperty OF object RP */
2051
+ -6, /* (108) expr ::= NTH VERTEX OF object DOT_L X */
2052
+ -6, /* (109) expr ::= NTH VERTEX OF object DOT_L Y */
2053
+ -1, /* (110) lvalue ::= ID */
2054
+ -1, /* (111) lvalue ::= FILL */
2055
+ -1, /* (112) lvalue ::= COLOR */
2056
+ -1, /* (113) lvalue ::= THICKNESS */
2057
+ -1, /* (114) rvalue ::= expr */
2058
+ -1, /* (115) print ::= PRINT */
2059
+ -1, /* (116) prlist ::= pritem */
2060
+ -3, /* (117) prlist ::= prlist prsep pritem */
2061
+ -1, /* (118) direction ::= UP */
2062
+ -1, /* (119) direction ::= DOWN */
2063
+ -1, /* (120) direction ::= LEFT */
2064
+ -1, /* (121) direction ::= RIGHT */
2065
+ -1, /* (122) attribute_list ::= alist */
2066
+ 0, /* (123) alist ::= */
2067
+ -2, /* (124) alist ::= alist attribute */
2068
+ -1, /* (125) attribute ::= boolproperty */
2069
+ -2, /* (126) attribute ::= WITH withclause */
2070
+ -3, /* (127) even ::= UNTIL EVEN WITH */
2071
+ -2, /* (128) even ::= EVEN WITH */
2072
+ -1, /* (129) withclause ::= with */
2073
+ -3, /* (130) withclause ::= withclause AND with */
2074
+ -1, /* (131) dashproperty ::= DOTTED */
2075
+ -1, /* (132) dashproperty ::= DASHED */
2076
+ -1, /* (133) colorproperty ::= FILL */
2077
+ -1, /* (134) colorproperty ::= COLOR */
2078
+ -1, /* (135) position ::= place */
2079
+ -2, /* (136) between ::= WAY BETWEEN */
2080
+ -1, /* (137) between ::= BETWEEN */
2081
+ -4, /* (138) between ::= OF THE WAY BETWEEN */
2082
+ -1, /* (139) object ::= objectname */
2083
+ -1, /* (140) locproperty ::= X|Y */
2084
+ -1, /* (141) edge ::= EDGEPT */
2085
+ -1, /* (142) edge ::= TOP */
2086
+ -1, /* (143) edge ::= BOTTOM */
2087
+ -1, /* (144) edge ::= LEFT */
2088
+ -1, /* (145) edge ::= RIGHT */
20712089
};
20722090
20732091
static void yy_accept(yyParser*); /* Forward Declaration */
20742092
20752093
/*
@@ -2156,587 +2174,595 @@
21562174
** break;
21572175
*/
21582176
/********** Begin reduce actions **********************************************/
21592177
YYMINORTYPE yylhsminor;
21602178
case 0: /* document ::= element_list */
2161
-#line 457 "pikchr.y"
2179
+#line 467 "pikchr.y"
21622180
{pik_render(p,yymsp[0].minor.yy42);}
2163
-#line 2188 "pikchr.c"
2181
+#line 2206 "pikchr.c"
21642182
break;
21652183
case 1: /* element_list ::= element */
2166
-#line 460 "pikchr.y"
2184
+#line 470 "pikchr.y"
21672185
{ yylhsminor.yy42 = pik_elist_append(p,0,yymsp[0].minor.yy24); }
2168
-#line 2193 "pikchr.c"
2186
+#line 2211 "pikchr.c"
21692187
yymsp[0].minor.yy42 = yylhsminor.yy42;
21702188
break;
21712189
case 2: /* element_list ::= element_list EOL element */
2172
-#line 462 "pikchr.y"
2190
+#line 472 "pikchr.y"
21732191
{ yylhsminor.yy42 = pik_elist_append(p,yymsp[-2].minor.yy42,yymsp[0].minor.yy24); }
2174
-#line 2199 "pikchr.c"
2192
+#line 2217 "pikchr.c"
21752193
yymsp[-2].minor.yy42 = yylhsminor.yy42;
21762194
break;
21772195
case 3: /* element ::= */
2178
-#line 465 "pikchr.y"
2196
+#line 475 "pikchr.y"
21792197
{ yymsp[1].minor.yy24 = 0; }
2180
-#line 2205 "pikchr.c"
2198
+#line 2223 "pikchr.c"
21812199
break;
21822200
case 4: /* element ::= direction */
2183
-#line 466 "pikchr.y"
2201
+#line 476 "pikchr.y"
21842202
{ pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy24=0; }
2185
-#line 2210 "pikchr.c"
2203
+#line 2228 "pikchr.c"
21862204
yymsp[0].minor.yy24 = yylhsminor.yy24;
21872205
break;
21882206
case 5: /* element ::= lvalue ASSIGN rvalue */
2189
-#line 467 "pikchr.y"
2207
+#line 477 "pikchr.y"
21902208
{pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy83,&yymsp[-1].minor.yy0); yylhsminor.yy24=0;}
2191
-#line 2216 "pikchr.c"
2209
+#line 2234 "pikchr.c"
21922210
yymsp[-2].minor.yy24 = yylhsminor.yy24;
21932211
break;
21942212
case 6: /* element ::= PLACENAME COLON unnamed_element */
2195
-#line 469 "pikchr.y"
2213
+#line 479 "pikchr.y"
21962214
{ yylhsminor.yy24 = yymsp[0].minor.yy24; pik_elem_setname(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0); }
2197
-#line 2222 "pikchr.c"
2215
+#line 2240 "pikchr.c"
21982216
yymsp[-2].minor.yy24 = yylhsminor.yy24;
21992217
break;
22002218
case 7: /* element ::= PLACENAME COLON position */
2201
-#line 471 "pikchr.y"
2219
+#line 481 "pikchr.y"
22022220
{ yylhsminor.yy24 = pik_elem_new(p,0,0,0);
22032221
if(yylhsminor.yy24){ yylhsminor.yy24->ptAt = yymsp[0].minor.yy49; pik_elem_setname(p,yylhsminor.yy24,&yymsp[-2].minor.yy0); }}
2204
-#line 2229 "pikchr.c"
2222
+#line 2247 "pikchr.c"
22052223
yymsp[-2].minor.yy24 = yylhsminor.yy24;
22062224
break;
22072225
case 8: /* element ::= unnamed_element */
2208
-#line 473 "pikchr.y"
2226
+#line 483 "pikchr.y"
22092227
{yylhsminor.yy24 = yymsp[0].minor.yy24;}
2210
-#line 2235 "pikchr.c"
2228
+#line 2253 "pikchr.c"
22112229
yymsp[0].minor.yy24 = yylhsminor.yy24;
22122230
break;
22132231
case 9: /* element ::= print prlist */
2214
-#line 474 "pikchr.y"
2215
-{pik_append(p,"<br>\n",5); yymsp[-1].minor.yy24=0;}
2216
-#line 2241 "pikchr.c"
2217
- break;
2218
- case 10: /* rvalue ::= PLACENAME */
2219
-#line 484 "pikchr.y"
2220
-{yylhsminor.yy83 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2221
-#line 2246 "pikchr.c"
2222
- yymsp[0].minor.yy83 = yylhsminor.yy83;
2223
- break;
2224
- case 11: /* pritem ::= rvalue */
2225
-#line 489 "pikchr.y"
2226
-{pik_append_num(p,"",yymsp[0].minor.yy83);}
2227
-#line 2252 "pikchr.c"
2228
- break;
2229
- case 12: /* pritem ::= STRING */
2230
-#line 490 "pikchr.y"
2231
-{pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2232
-#line 2257 "pikchr.c"
2233
- break;
2234
- case 13: /* prsep ::= COMMA */
2235
-#line 491 "pikchr.y"
2236
-{pik_append(p, " ", 1);}
2237
-#line 2262 "pikchr.c"
2238
- break;
2239
- case 14: /* unnamed_element ::= basetype attribute_list */
2240
-#line 494 "pikchr.y"
2241
-{yylhsminor.yy24 = yymsp[-1].minor.yy24; pik_after_adding_attributes(p,yylhsminor.yy24);}
2242
-#line 2267 "pikchr.c"
2243
- yymsp[-1].minor.yy24 = yylhsminor.yy24;
2244
- break;
2245
- case 15: /* basetype ::= CLASSNAME */
2246
-#line 496 "pikchr.y"
2247
-{yylhsminor.yy24 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2248
-#line 2273 "pikchr.c"
2249
- yymsp[0].minor.yy24 = yylhsminor.yy24;
2250
- break;
2251
- case 16: /* basetype ::= STRING textposition */
2252
-#line 498 "pikchr.y"
2253
-{yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy52; yylhsminor.yy24 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2254
-#line 2279 "pikchr.c"
2255
- yymsp[-1].minor.yy24 = yylhsminor.yy24;
2256
- break;
2257
- case 17: /* basetype ::= LB savelist element_list RB */
2258
-#line 500 "pikchr.y"
2259
-{ p->list = yymsp[-2].minor.yy42; yymsp[-3].minor.yy24 = pik_elem_new(p,0,0,yymsp[-1].minor.yy42); if(yymsp[-3].minor.yy24) yymsp[-3].minor.yy24->errTok = yymsp[0].minor.yy0; }
2260
-#line 2285 "pikchr.c"
2261
- break;
2262
- case 18: /* savelist ::= */
2263
-#line 505 "pikchr.y"
2264
-{yymsp[1].minor.yy42 = p->list; p->list = 0;}
2265
-#line 2290 "pikchr.c"
2266
- break;
2267
- case 19: /* attribute_list ::= expr */
2268
-#line 512 "pikchr.y"
2269
-{ pik_add_direction(p,0,&yymsp[0].minor.yy83,0);}
2270
-#line 2295 "pikchr.c"
2271
- break;
2272
- case 20: /* attribute_list ::= expr PERCENT */
2273
-#line 513 "pikchr.y"
2274
-{ pik_add_direction(p,0,&yymsp[-1].minor.yy83,1);}
2275
-#line 2300 "pikchr.c"
2276
- break;
2277
- case 21: /* attribute ::= numproperty expr PERCENT */
2278
-#line 518 "pikchr.y"
2279
-{ pik_set_numprop(p,&yymsp[-2].minor.yy0,0.0,yymsp[-1].minor.yy83/100.0); }
2280
-#line 2305 "pikchr.c"
2281
- break;
2282
- case 22: /* attribute ::= numproperty expr */
2283
- case 25: /* attribute ::= colorproperty rvalue */ yytestcase(yyruleno==25);
2284
-#line 519 "pikchr.y"
2285
-{ pik_set_numprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy83,0.0); }
2286
-#line 2311 "pikchr.c"
2287
- break;
2288
- case 23: /* attribute ::= dashproperty expr */
2289
-#line 520 "pikchr.y"
2290
-{ pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy83); }
2291
-#line 2316 "pikchr.c"
2292
- break;
2293
- case 24: /* attribute ::= dashproperty */
2294
-#line 521 "pikchr.y"
2295
-{ pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2296
-#line 2321 "pikchr.c"
2297
- break;
2298
- case 26: /* attribute ::= direction expr PERCENT */
2299
-#line 524 "pikchr.y"
2300
-{ pik_add_direction(p,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy83,1);}
2301
-#line 2326 "pikchr.c"
2302
- break;
2303
- case 27: /* attribute ::= direction expr */
2304
-#line 525 "pikchr.y"
2305
-{ pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy83,0);}
2306
-#line 2331 "pikchr.c"
2307
- break;
2308
- case 28: /* attribute ::= direction */
2309
-#line 526 "pikchr.y"
2310
-{ pik_add_direction(p,&yymsp[0].minor.yy0,0,0); }
2311
-#line 2336 "pikchr.c"
2312
- break;
2313
- case 29: /* attribute ::= direction even position */
2314
-#line 527 "pikchr.y"
2315
-{pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy49);}
2232
+#line 484 "pikchr.y"
2233
+{pik_append(p,"<br>\n",5); yymsp[-1].minor.yy24=0;}
2234
+#line 2259 "pikchr.c"
2235
+ break;
2236
+ case 10: /* rvalue ::= PLACENAME */
2237
+#line 495 "pikchr.y"
2238
+{yylhsminor.yy83 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2239
+#line 2264 "pikchr.c"
2240
+ yymsp[0].minor.yy83 = yylhsminor.yy83;
2241
+ break;
2242
+ case 11: /* pritem ::= FILL */
2243
+ case 12: /* pritem ::= COLOR */ yytestcase(yyruleno==12);
2244
+ case 13: /* pritem ::= THICKNESS */ yytestcase(yyruleno==13);
2245
+#line 500 "pikchr.y"
2246
+{pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));}
2247
+#line 2272 "pikchr.c"
2248
+ break;
2249
+ case 14: /* pritem ::= rvalue */
2250
+#line 503 "pikchr.y"
2251
+{pik_append_num(p,"",yymsp[0].minor.yy83);}
2252
+#line 2277 "pikchr.c"
2253
+ break;
2254
+ case 15: /* pritem ::= STRING */
2255
+#line 504 "pikchr.y"
2256
+{pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2257
+#line 2282 "pikchr.c"
2258
+ break;
2259
+ case 16: /* prsep ::= COMMA */
2260
+#line 505 "pikchr.y"
2261
+{pik_append(p, " ", 1);}
2262
+#line 2287 "pikchr.c"
2263
+ break;
2264
+ case 17: /* unnamed_element ::= basetype attribute_list */
2265
+#line 508 "pikchr.y"
2266
+{yylhsminor.yy24 = yymsp[-1].minor.yy24; pik_after_adding_attributes(p,yylhsminor.yy24);}
2267
+#line 2292 "pikchr.c"
2268
+ yymsp[-1].minor.yy24 = yylhsminor.yy24;
2269
+ break;
2270
+ case 18: /* basetype ::= CLASSNAME */
2271
+#line 510 "pikchr.y"
2272
+{yylhsminor.yy24 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2273
+#line 2298 "pikchr.c"
2274
+ yymsp[0].minor.yy24 = yylhsminor.yy24;
2275
+ break;
2276
+ case 19: /* basetype ::= STRING textposition */
2277
+#line 512 "pikchr.y"
2278
+{yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy52; yylhsminor.yy24 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2279
+#line 2304 "pikchr.c"
2280
+ yymsp[-1].minor.yy24 = yylhsminor.yy24;
2281
+ break;
2282
+ case 20: /* basetype ::= LB savelist element_list RB */
2283
+#line 514 "pikchr.y"
2284
+{ p->list = yymsp[-2].minor.yy42; yymsp[-3].minor.yy24 = pik_elem_new(p,0,0,yymsp[-1].minor.yy42); if(yymsp[-3].minor.yy24) yymsp[-3].minor.yy24->errTok = yymsp[0].minor.yy0; }
2285
+#line 2310 "pikchr.c"
2286
+ break;
2287
+ case 21: /* savelist ::= */
2288
+#line 519 "pikchr.y"
2289
+{yymsp[1].minor.yy42 = p->list; p->list = 0;}
2290
+#line 2315 "pikchr.c"
2291
+ break;
2292
+ case 22: /* attribute_list ::= expr */
2293
+#line 526 "pikchr.y"
2294
+{ pik_add_direction(p,0,&yymsp[0].minor.yy83,0);}
2295
+#line 2320 "pikchr.c"
2296
+ break;
2297
+ case 23: /* attribute_list ::= expr PERCENT */
2298
+#line 527 "pikchr.y"
2299
+{ pik_add_direction(p,0,&yymsp[-1].minor.yy83,1);}
2300
+#line 2325 "pikchr.c"
2301
+ break;
2302
+ case 24: /* attribute ::= numproperty expr PERCENT */
2303
+#line 532 "pikchr.y"
2304
+{ pik_set_numprop(p,&yymsp[-2].minor.yy0,0.0,yymsp[-1].minor.yy83/100.0); }
2305
+#line 2330 "pikchr.c"
2306
+ break;
2307
+ case 25: /* attribute ::= numproperty expr */
2308
+ case 28: /* attribute ::= colorproperty rvalue */ yytestcase(yyruleno==28);
2309
+#line 533 "pikchr.y"
2310
+{ pik_set_numprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy83,0.0); }
2311
+#line 2336 "pikchr.c"
2312
+ break;
2313
+ case 26: /* attribute ::= dashproperty expr */
2314
+#line 534 "pikchr.y"
2315
+{ pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy83); }
23162316
#line 2341 "pikchr.c"
23172317
break;
2318
- case 30: /* attribute ::= CLOSE */
2319
-#line 528 "pikchr.y"
2320
-{ pik_close_path(p,&yymsp[0].minor.yy0); }
2318
+ case 27: /* attribute ::= dashproperty */
2319
+#line 535 "pikchr.y"
2320
+{ pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
23212321
#line 2346 "pikchr.c"
23222322
break;
2323
- case 31: /* attribute ::= CHOP */
2324
-#line 529 "pikchr.y"
2325
-{ p->cur->bChop = 1; }
2323
+ case 29: /* attribute ::= direction expr PERCENT */
2324
+#line 538 "pikchr.y"
2325
+{ pik_add_direction(p,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy83,1);}
23262326
#line 2351 "pikchr.c"
23272327
break;
2328
- case 32: /* attribute ::= FROM position */
2329
-#line 530 "pikchr.y"
2330
-{ pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy49); }
2328
+ case 30: /* attribute ::= direction expr */
2329
+#line 539 "pikchr.y"
2330
+{ pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy83,0);}
23312331
#line 2356 "pikchr.c"
23322332
break;
2333
- case 33: /* attribute ::= TO position */
2334
-#line 531 "pikchr.y"
2335
-{ pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy49); }
2333
+ case 31: /* attribute ::= direction */
2334
+#line 540 "pikchr.y"
2335
+{ pik_add_direction(p,&yymsp[0].minor.yy0,0,0); }
23362336
#line 2361 "pikchr.c"
23372337
break;
2338
- case 34: /* attribute ::= THEN */
2339
-#line 532 "pikchr.y"
2340
-{ pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2338
+ case 32: /* attribute ::= direction even position */
2339
+#line 541 "pikchr.y"
2340
+{pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy49);}
23412341
#line 2366 "pikchr.c"
23422342
break;
2343
- case 35: /* attribute ::= AT position */
2344
-#line 534 "pikchr.y"
2345
-{ pik_set_at(p,0,&yymsp[0].minor.yy49,&yymsp[-1].minor.yy0); }
2343
+ case 33: /* attribute ::= CLOSE */
2344
+#line 542 "pikchr.y"
2345
+{ pik_close_path(p,&yymsp[0].minor.yy0); }
23462346
#line 2371 "pikchr.c"
23472347
break;
2348
- case 36: /* attribute ::= SAME */
2349
-#line 536 "pikchr.y"
2350
-{pik_same(p,0,&yymsp[0].minor.yy0);}
2348
+ case 34: /* attribute ::= CHOP */
2349
+#line 543 "pikchr.y"
2350
+{ p->cur->bChop = 1; }
23512351
#line 2376 "pikchr.c"
23522352
break;
2353
- case 37: /* attribute ::= SAME AS object */
2354
-#line 537 "pikchr.y"
2355
-{pik_same(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0);}
2353
+ case 35: /* attribute ::= FROM position */
2354
+#line 544 "pikchr.y"
2355
+{ pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy49); }
23562356
#line 2381 "pikchr.c"
23572357
break;
2358
- case 38: /* attribute ::= STRING textposition */
2359
-#line 538 "pikchr.y"
2360
-{pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy52);}
2358
+ case 36: /* attribute ::= TO position */
2359
+#line 545 "pikchr.y"
2360
+{ pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy49); }
23612361
#line 2386 "pikchr.c"
23622362
break;
2363
- case 39: /* attribute ::= FIT */
2364
-#line 539 "pikchr.y"
2365
-{pik_size_to_fit(p,&yymsp[0].minor.yy0); }
2363
+ case 37: /* attribute ::= THEN */
2364
+#line 546 "pikchr.y"
2365
+{ pik_then(p, &yymsp[0].minor.yy0, p->cur); }
23662366
#line 2391 "pikchr.c"
23672367
break;
2368
- case 40: /* with ::= DOT_E edge AT position */
2369
- case 41: /* with ::= edge AT position */ yytestcase(yyruleno==41);
2370
-#line 546 "pikchr.y"
2371
-{ pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy49,&yymsp[-1].minor.yy0); }
2372
-#line 2397 "pikchr.c"
2368
+ case 38: /* attribute ::= AT position */
2369
+#line 548 "pikchr.y"
2370
+{ pik_set_at(p,0,&yymsp[0].minor.yy49,&yymsp[-1].minor.yy0); }
2371
+#line 2396 "pikchr.c"
23732372
break;
2374
- case 42: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2373
+ case 39: /* attribute ::= SAME */
23752374
#line 550 "pikchr.y"
2375
+{pik_same(p,0,&yymsp[0].minor.yy0);}
2376
+#line 2401 "pikchr.c"
2377
+ break;
2378
+ case 40: /* attribute ::= SAME AS object */
2379
+#line 551 "pikchr.y"
2380
+{pik_same(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0);}
2381
+#line 2406 "pikchr.c"
2382
+ break;
2383
+ case 41: /* attribute ::= STRING textposition */
2384
+#line 552 "pikchr.y"
2385
+{pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy52);}
2386
+#line 2411 "pikchr.c"
2387
+ break;
2388
+ case 42: /* attribute ::= FIT */
2389
+#line 553 "pikchr.y"
2390
+{pik_size_to_fit(p,&yymsp[0].minor.yy0); }
2391
+#line 2416 "pikchr.c"
2392
+ break;
2393
+ case 43: /* with ::= DOT_E edge AT position */
2394
+ case 44: /* with ::= edge AT position */ yytestcase(yyruleno==44);
2395
+#line 560 "pikchr.y"
2396
+{ pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy49,&yymsp[-1].minor.yy0); }
2397
+#line 2422 "pikchr.c"
2398
+ break;
2399
+ case 45: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2400
+#line 564 "pikchr.y"
23762401
{yylhsminor.yy0 = yymsp[0].minor.yy0;}
2377
-#line 2402 "pikchr.c"
2402
+#line 2427 "pikchr.c"
23782403
yymsp[0].minor.yy0 = yylhsminor.yy0;
23792404
break;
2380
- case 43: /* boolproperty ::= CW */
2381
-#line 561 "pikchr.y"
2405
+ case 46: /* boolproperty ::= CW */
2406
+#line 575 "pikchr.y"
23822407
{p->cur->cw = 1;}
2383
-#line 2408 "pikchr.c"
2384
- break;
2385
- case 44: /* boolproperty ::= CCW */
2386
-#line 562 "pikchr.y"
2387
-{p->cur->cw = 0;}
2388
-#line 2413 "pikchr.c"
2389
- break;
2390
- case 45: /* boolproperty ::= LARROW */
2391
-#line 563 "pikchr.y"
2392
-{p->cur->larrow=1; p->cur->rarrow=0; }
2393
-#line 2418 "pikchr.c"
2394
- break;
2395
- case 46: /* boolproperty ::= RARROW */
2396
-#line 564 "pikchr.y"
2397
-{p->cur->larrow=0; p->cur->rarrow=1; }
2398
-#line 2423 "pikchr.c"
2399
- break;
2400
- case 47: /* boolproperty ::= LRARROW */
2401
-#line 565 "pikchr.y"
2402
-{p->cur->larrow=1; p->cur->rarrow=1; }
2403
-#line 2428 "pikchr.c"
2404
- break;
2405
- case 48: /* boolproperty ::= INVIS */
2406
-#line 566 "pikchr.y"
2407
-{p->cur->sw = 0.0;}
24082408
#line 2433 "pikchr.c"
24092409
break;
2410
- case 49: /* textposition ::= */
2411
-#line 568 "pikchr.y"
2412
-{yymsp[1].minor.yy52 = 0;}
2410
+ case 47: /* boolproperty ::= CCW */
2411
+#line 576 "pikchr.y"
2412
+{p->cur->cw = 0;}
24132413
#line 2438 "pikchr.c"
24142414
break;
2415
- case 50: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED */
2416
-#line 571 "pikchr.y"
2417
-{yylhsminor.yy52 = pik_text_position(p,yymsp[-1].minor.yy52,&yymsp[0].minor.yy0);}
2415
+ case 48: /* boolproperty ::= LARROW */
2416
+#line 577 "pikchr.y"
2417
+{p->cur->larrow=1; p->cur->rarrow=0; }
24182418
#line 2443 "pikchr.c"
2419
+ break;
2420
+ case 49: /* boolproperty ::= RARROW */
2421
+#line 578 "pikchr.y"
2422
+{p->cur->larrow=0; p->cur->rarrow=1; }
2423
+#line 2448 "pikchr.c"
2424
+ break;
2425
+ case 50: /* boolproperty ::= LRARROW */
2426
+#line 579 "pikchr.y"
2427
+{p->cur->larrow=1; p->cur->rarrow=1; }
2428
+#line 2453 "pikchr.c"
2429
+ break;
2430
+ case 51: /* boolproperty ::= INVIS */
2431
+#line 580 "pikchr.y"
2432
+{p->cur->sw = 0.0;}
2433
+#line 2458 "pikchr.c"
2434
+ break;
2435
+ case 52: /* textposition ::= */
2436
+#line 582 "pikchr.y"
2437
+{yymsp[1].minor.yy52 = 0;}
2438
+#line 2463 "pikchr.c"
2439
+ break;
2440
+ case 53: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED */
2441
+#line 585 "pikchr.y"
2442
+{yylhsminor.yy52 = pik_text_position(p,yymsp[-1].minor.yy52,&yymsp[0].minor.yy0);}
2443
+#line 2468 "pikchr.c"
24192444
yymsp[-1].minor.yy52 = yylhsminor.yy52;
24202445
break;
2421
- case 51: /* position ::= expr COMMA expr */
2422
-#line 574 "pikchr.y"
2423
-{yylhsminor.yy49.x=yymsp[-2].minor.yy83; yylhsminor.yy49.y=yymsp[0].minor.yy83;}
2424
-#line 2449 "pikchr.c"
2425
- yymsp[-2].minor.yy49 = yylhsminor.yy49;
2426
- break;
2427
- case 52: /* position ::= place PLUS expr COMMA expr */
2428
-#line 576 "pikchr.y"
2429
-{yylhsminor.yy49.x=yymsp[-4].minor.yy49.x+yymsp[-2].minor.yy83; yylhsminor.yy49.y=yymsp[-4].minor.yy49.y+yymsp[0].minor.yy83;}
2430
-#line 2455 "pikchr.c"
2431
- yymsp[-4].minor.yy49 = yylhsminor.yy49;
2432
- break;
2433
- case 53: /* position ::= place MINUS expr COMMA expr */
2434
-#line 577 "pikchr.y"
2435
-{yylhsminor.yy49.x=yymsp[-4].minor.yy49.x-yymsp[-2].minor.yy83; yylhsminor.yy49.y=yymsp[-4].minor.yy49.y-yymsp[0].minor.yy83;}
2436
-#line 2461 "pikchr.c"
2437
- yymsp[-4].minor.yy49 = yylhsminor.yy49;
2438
- break;
2439
- case 54: /* position ::= place PLUS LP expr COMMA expr RP */
2440
-#line 579 "pikchr.y"
2441
-{yylhsminor.yy49.x=yymsp[-6].minor.yy49.x+yymsp[-3].minor.yy83; yylhsminor.yy49.y=yymsp[-6].minor.yy49.y+yymsp[-1].minor.yy83;}
2442
-#line 2467 "pikchr.c"
2443
- yymsp[-6].minor.yy49 = yylhsminor.yy49;
2444
- break;
2445
- case 55: /* position ::= place MINUS LP expr COMMA expr RP */
2446
-#line 581 "pikchr.y"
2447
-{yylhsminor.yy49.x=yymsp[-6].minor.yy49.x-yymsp[-3].minor.yy83; yylhsminor.yy49.y=yymsp[-6].minor.yy49.y-yymsp[-1].minor.yy83;}
2448
-#line 2473 "pikchr.c"
2449
- yymsp[-6].minor.yy49 = yylhsminor.yy49;
2450
- break;
2451
- case 56: /* position ::= LP position COMMA position RP */
2452
-#line 582 "pikchr.y"
2453
-{yymsp[-4].minor.yy49.x=yymsp[-3].minor.yy49.x; yymsp[-4].minor.yy49.y=yymsp[-1].minor.yy49.y;}
2454
-#line 2479 "pikchr.c"
2455
- break;
2456
- case 57: /* position ::= LP position RP */
2457
-#line 583 "pikchr.y"
2458
-{yymsp[-2].minor.yy49=yymsp[-1].minor.yy49;}
2459
-#line 2484 "pikchr.c"
2460
- break;
2461
- case 58: /* position ::= expr between position AND position */
2462
-#line 585 "pikchr.y"
2463
-{yylhsminor.yy49 = pik_position_between(p,yymsp[-4].minor.yy83,yymsp[-2].minor.yy49,yymsp[0].minor.yy49);}
2464
-#line 2489 "pikchr.c"
2465
- yymsp[-4].minor.yy49 = yylhsminor.yy49;
2466
- break;
2467
- case 59: /* position ::= expr ABOVE position */
2468
-#line 586 "pikchr.y"
2469
-{yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.y += yymsp[-2].minor.yy83;}
2470
-#line 2495 "pikchr.c"
2471
- yymsp[-2].minor.yy49 = yylhsminor.yy49;
2472
- break;
2473
- case 60: /* position ::= expr BELOW position */
2474
-#line 587 "pikchr.y"
2475
-{yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.y -= yymsp[-2].minor.yy83;}
2476
-#line 2501 "pikchr.c"
2477
- yymsp[-2].minor.yy49 = yylhsminor.yy49;
2478
- break;
2479
- case 61: /* position ::= expr LEFT OF position */
2480
-#line 588 "pikchr.y"
2481
-{yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.x -= yymsp[-3].minor.yy83;}
2482
-#line 2507 "pikchr.c"
2483
- yymsp[-3].minor.yy49 = yylhsminor.yy49;
2484
- break;
2485
- case 62: /* position ::= expr RIGHT OF position */
2486
-#line 589 "pikchr.y"
2487
-{yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.x += yymsp[-3].minor.yy83;}
2488
-#line 2513 "pikchr.c"
2489
- yymsp[-3].minor.yy49 = yylhsminor.yy49;
2490
- break;
2491
- case 63: /* position ::= expr EDGEPT OF position */
2492
-#line 591 "pikchr.y"
2493
-{yylhsminor.yy49 = pik_position_at_hdg(p,yymsp[-3].minor.yy83,&yymsp[-2].minor.yy0,yymsp[0].minor.yy49);}
2494
-#line 2519 "pikchr.c"
2495
- yymsp[-3].minor.yy49 = yylhsminor.yy49;
2496
- break;
2497
- case 64: /* position ::= expr HEADING expr FROM position */
2498
-#line 593 "pikchr.y"
2499
-{yylhsminor.yy49 = pik_position_at_angle(p,yymsp[-4].minor.yy83,yymsp[-2].minor.yy83,yymsp[0].minor.yy49);}
2500
-#line 2525 "pikchr.c"
2501
- yymsp[-4].minor.yy49 = yylhsminor.yy49;
2502
- break;
2503
- case 65: /* place ::= object */
2504
-#line 599 "pikchr.y"
2505
-{yylhsminor.yy49 = pik_place_of_elem(p,yymsp[0].minor.yy24,0);}
2506
-#line 2531 "pikchr.c"
2507
- yymsp[0].minor.yy49 = yylhsminor.yy49;
2508
- break;
2509
- case 66: /* place ::= object DOT_E edge */
2510
- case 67: /* place ::= object DOT_L START */ yytestcase(yyruleno==67);
2511
- case 68: /* place ::= object DOT_L END */ yytestcase(yyruleno==68);
2512
-#line 600 "pikchr.y"
2513
-{yylhsminor.yy49 = pik_place_of_elem(p,yymsp[-2].minor.yy24,&yymsp[0].minor.yy0);}
2514
-#line 2539 "pikchr.c"
2515
- yymsp[-2].minor.yy49 = yylhsminor.yy49;
2516
- break;
2517
- case 69: /* place ::= START OF object */
2518
- case 70: /* place ::= END OF object */ yytestcase(yyruleno==70);
2519
- case 71: /* place ::= edge OF object */ yytestcase(yyruleno==71);
2520
-#line 603 "pikchr.y"
2521
-{yylhsminor.yy49 = pik_place_of_elem(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0);}
2522
-#line 2547 "pikchr.c"
2523
- yymsp[-2].minor.yy49 = yylhsminor.yy49;
2524
- break;
2525
- case 72: /* place ::= NTH VERTEX OF object */
2526
-#line 606 "pikchr.y"
2527
-{yylhsminor.yy49 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy24);}
2528
-#line 2553 "pikchr.c"
2529
- yymsp[-3].minor.yy49 = yylhsminor.yy49;
2530
- break;
2531
- case 73: /* object ::= nth */
2532
-#line 609 "pikchr.y"
2533
-{yylhsminor.yy24 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2534
-#line 2559 "pikchr.c"
2535
- yymsp[0].minor.yy24 = yylhsminor.yy24;
2536
- break;
2537
- case 74: /* object ::= nth OF|IN object */
2538
-#line 610 "pikchr.y"
2539
-{yylhsminor.yy24 = pik_find_nth(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0);}
2540
-#line 2565 "pikchr.c"
2541
- yymsp[-2].minor.yy24 = yylhsminor.yy24;
2542
- break;
2543
- case 75: /* objectname ::= PLACENAME */
2544
-#line 612 "pikchr.y"
2545
-{yylhsminor.yy24 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2546
-#line 2571 "pikchr.c"
2547
- yymsp[0].minor.yy24 = yylhsminor.yy24;
2548
- break;
2549
- case 76: /* objectname ::= objectname DOT_U PLACENAME */
2550
-#line 614 "pikchr.y"
2551
-{yylhsminor.yy24 = pik_find_byname(p,yymsp[-2].minor.yy24,&yymsp[0].minor.yy0);}
2552
-#line 2577 "pikchr.c"
2553
- yymsp[-2].minor.yy24 = yylhsminor.yy24;
2554
- break;
2555
- case 77: /* nth ::= NTH CLASSNAME */
2556
-#line 616 "pikchr.y"
2557
-{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2558
-#line 2583 "pikchr.c"
2559
- yymsp[-1].minor.yy0 = yylhsminor.yy0;
2560
- break;
2561
- case 78: /* nth ::= NTH LAST CLASSNAME */
2562
-#line 617 "pikchr.y"
2563
-{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2564
-#line 2589 "pikchr.c"
2565
- yymsp[-2].minor.yy0 = yylhsminor.yy0;
2566
- break;
2567
- case 79: /* nth ::= LAST CLASSNAME */
2568
-#line 618 "pikchr.y"
2569
-{yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2570
-#line 2595 "pikchr.c"
2571
- break;
2572
- case 80: /* nth ::= LAST */
2573
-#line 619 "pikchr.y"
2574
-{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2575
-#line 2600 "pikchr.c"
2576
- yymsp[0].minor.yy0 = yylhsminor.yy0;
2577
- break;
2578
- case 81: /* nth ::= NTH LB RB */
2579
-#line 620 "pikchr.y"
2580
-{yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2581
-#line 2606 "pikchr.c"
2582
- yymsp[-2].minor.yy0 = yylhsminor.yy0;
2583
- break;
2584
- case 82: /* nth ::= NTH LAST LB RB */
2585
-#line 621 "pikchr.y"
2586
-{yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2587
-#line 2612 "pikchr.c"
2588
- yymsp[-3].minor.yy0 = yylhsminor.yy0;
2589
- break;
2590
- case 83: /* nth ::= LAST LB RB */
2591
-#line 622 "pikchr.y"
2592
-{yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2593
-#line 2618 "pikchr.c"
2594
- break;
2595
- case 84: /* expr ::= expr PLUS expr */
2596
-#line 629 "pikchr.y"
2597
-{yylhsminor.yy83=yymsp[-2].minor.yy83+yymsp[0].minor.yy83;}
2598
-#line 2623 "pikchr.c"
2599
- yymsp[-2].minor.yy83 = yylhsminor.yy83;
2600
- break;
2601
- case 85: /* expr ::= expr MINUS expr */
2602
-#line 630 "pikchr.y"
2603
-{yylhsminor.yy83=yymsp[-2].minor.yy83-yymsp[0].minor.yy83;}
2604
-#line 2629 "pikchr.c"
2605
- yymsp[-2].minor.yy83 = yylhsminor.yy83;
2606
- break;
2607
- case 86: /* expr ::= expr STAR expr */
2608
-#line 631 "pikchr.y"
2609
-{yylhsminor.yy83=yymsp[-2].minor.yy83*yymsp[0].minor.yy83;}
2610
-#line 2635 "pikchr.c"
2611
- yymsp[-2].minor.yy83 = yylhsminor.yy83;
2612
- break;
2613
- case 87: /* expr ::= expr SLASH expr */
2614
-#line 632 "pikchr.y"
2446
+ case 54: /* position ::= expr COMMA expr */
2447
+#line 588 "pikchr.y"
2448
+{yylhsminor.yy49.x=yymsp[-2].minor.yy83; yylhsminor.yy49.y=yymsp[0].minor.yy83;}
2449
+#line 2474 "pikchr.c"
2450
+ yymsp[-2].minor.yy49 = yylhsminor.yy49;
2451
+ break;
2452
+ case 55: /* position ::= place PLUS expr COMMA expr */
2453
+#line 590 "pikchr.y"
2454
+{yylhsminor.yy49.x=yymsp[-4].minor.yy49.x+yymsp[-2].minor.yy83; yylhsminor.yy49.y=yymsp[-4].minor.yy49.y+yymsp[0].minor.yy83;}
2455
+#line 2480 "pikchr.c"
2456
+ yymsp[-4].minor.yy49 = yylhsminor.yy49;
2457
+ break;
2458
+ case 56: /* position ::= place MINUS expr COMMA expr */
2459
+#line 591 "pikchr.y"
2460
+{yylhsminor.yy49.x=yymsp[-4].minor.yy49.x-yymsp[-2].minor.yy83; yylhsminor.yy49.y=yymsp[-4].minor.yy49.y-yymsp[0].minor.yy83;}
2461
+#line 2486 "pikchr.c"
2462
+ yymsp[-4].minor.yy49 = yylhsminor.yy49;
2463
+ break;
2464
+ case 57: /* position ::= place PLUS LP expr COMMA expr RP */
2465
+#line 593 "pikchr.y"
2466
+{yylhsminor.yy49.x=yymsp[-6].minor.yy49.x+yymsp[-3].minor.yy83; yylhsminor.yy49.y=yymsp[-6].minor.yy49.y+yymsp[-1].minor.yy83;}
2467
+#line 2492 "pikchr.c"
2468
+ yymsp[-6].minor.yy49 = yylhsminor.yy49;
2469
+ break;
2470
+ case 58: /* position ::= place MINUS LP expr COMMA expr RP */
2471
+#line 595 "pikchr.y"
2472
+{yylhsminor.yy49.x=yymsp[-6].minor.yy49.x-yymsp[-3].minor.yy83; yylhsminor.yy49.y=yymsp[-6].minor.yy49.y-yymsp[-1].minor.yy83;}
2473
+#line 2498 "pikchr.c"
2474
+ yymsp[-6].minor.yy49 = yylhsminor.yy49;
2475
+ break;
2476
+ case 59: /* position ::= LP position COMMA position RP */
2477
+#line 596 "pikchr.y"
2478
+{yymsp[-4].minor.yy49.x=yymsp[-3].minor.yy49.x; yymsp[-4].minor.yy49.y=yymsp[-1].minor.yy49.y;}
2479
+#line 2504 "pikchr.c"
2480
+ break;
2481
+ case 60: /* position ::= LP position RP */
2482
+#line 597 "pikchr.y"
2483
+{yymsp[-2].minor.yy49=yymsp[-1].minor.yy49;}
2484
+#line 2509 "pikchr.c"
2485
+ break;
2486
+ case 61: /* position ::= expr between position AND position */
2487
+#line 599 "pikchr.y"
2488
+{yylhsminor.yy49 = pik_position_between(p,yymsp[-4].minor.yy83,yymsp[-2].minor.yy49,yymsp[0].minor.yy49);}
2489
+#line 2514 "pikchr.c"
2490
+ yymsp[-4].minor.yy49 = yylhsminor.yy49;
2491
+ break;
2492
+ case 62: /* position ::= expr ABOVE position */
2493
+#line 600 "pikchr.y"
2494
+{yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.y += yymsp[-2].minor.yy83;}
2495
+#line 2520 "pikchr.c"
2496
+ yymsp[-2].minor.yy49 = yylhsminor.yy49;
2497
+ break;
2498
+ case 63: /* position ::= expr BELOW position */
2499
+#line 601 "pikchr.y"
2500
+{yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.y -= yymsp[-2].minor.yy83;}
2501
+#line 2526 "pikchr.c"
2502
+ yymsp[-2].minor.yy49 = yylhsminor.yy49;
2503
+ break;
2504
+ case 64: /* position ::= expr LEFT OF position */
2505
+#line 602 "pikchr.y"
2506
+{yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.x -= yymsp[-3].minor.yy83;}
2507
+#line 2532 "pikchr.c"
2508
+ yymsp[-3].minor.yy49 = yylhsminor.yy49;
2509
+ break;
2510
+ case 65: /* position ::= expr RIGHT OF position */
2511
+#line 603 "pikchr.y"
2512
+{yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.x += yymsp[-3].minor.yy83;}
2513
+#line 2538 "pikchr.c"
2514
+ yymsp[-3].minor.yy49 = yylhsminor.yy49;
2515
+ break;
2516
+ case 66: /* position ::= expr EDGEPT OF position */
2517
+#line 605 "pikchr.y"
2518
+{yylhsminor.yy49 = pik_position_at_hdg(p,yymsp[-3].minor.yy83,&yymsp[-2].minor.yy0,yymsp[0].minor.yy49);}
2519
+#line 2544 "pikchr.c"
2520
+ yymsp[-3].minor.yy49 = yylhsminor.yy49;
2521
+ break;
2522
+ case 67: /* position ::= expr HEADING expr FROM position */
2523
+#line 607 "pikchr.y"
2524
+{yylhsminor.yy49 = pik_position_at_angle(p,yymsp[-4].minor.yy83,yymsp[-2].minor.yy83,yymsp[0].minor.yy49);}
2525
+#line 2550 "pikchr.c"
2526
+ yymsp[-4].minor.yy49 = yylhsminor.yy49;
2527
+ break;
2528
+ case 68: /* place ::= object */
2529
+#line 613 "pikchr.y"
2530
+{yylhsminor.yy49 = pik_place_of_elem(p,yymsp[0].minor.yy24,0);}
2531
+#line 2556 "pikchr.c"
2532
+ yymsp[0].minor.yy49 = yylhsminor.yy49;
2533
+ break;
2534
+ case 69: /* place ::= object DOT_E edge */
2535
+ case 70: /* place ::= object DOT_L START */ yytestcase(yyruleno==70);
2536
+ case 71: /* place ::= object DOT_L END */ yytestcase(yyruleno==71);
2537
+#line 614 "pikchr.y"
2538
+{yylhsminor.yy49 = pik_place_of_elem(p,yymsp[-2].minor.yy24,&yymsp[0].minor.yy0);}
2539
+#line 2564 "pikchr.c"
2540
+ yymsp[-2].minor.yy49 = yylhsminor.yy49;
2541
+ break;
2542
+ case 72: /* place ::= START OF object */
2543
+ case 73: /* place ::= END OF object */ yytestcase(yyruleno==73);
2544
+ case 74: /* place ::= edge OF object */ yytestcase(yyruleno==74);
2545
+#line 617 "pikchr.y"
2546
+{yylhsminor.yy49 = pik_place_of_elem(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0);}
2547
+#line 2572 "pikchr.c"
2548
+ yymsp[-2].minor.yy49 = yylhsminor.yy49;
2549
+ break;
2550
+ case 75: /* place ::= NTH VERTEX OF object */
2551
+#line 620 "pikchr.y"
2552
+{yylhsminor.yy49 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy24);}
2553
+#line 2578 "pikchr.c"
2554
+ yymsp[-3].minor.yy49 = yylhsminor.yy49;
2555
+ break;
2556
+ case 76: /* object ::= nth */
2557
+#line 623 "pikchr.y"
2558
+{yylhsminor.yy24 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2559
+#line 2584 "pikchr.c"
2560
+ yymsp[0].minor.yy24 = yylhsminor.yy24;
2561
+ break;
2562
+ case 77: /* object ::= nth OF|IN object */
2563
+#line 624 "pikchr.y"
2564
+{yylhsminor.yy24 = pik_find_nth(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0);}
2565
+#line 2590 "pikchr.c"
2566
+ yymsp[-2].minor.yy24 = yylhsminor.yy24;
2567
+ break;
2568
+ case 78: /* objectname ::= PLACENAME */
2569
+#line 626 "pikchr.y"
2570
+{yylhsminor.yy24 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2571
+#line 2596 "pikchr.c"
2572
+ yymsp[0].minor.yy24 = yylhsminor.yy24;
2573
+ break;
2574
+ case 79: /* objectname ::= objectname DOT_U PLACENAME */
2575
+#line 628 "pikchr.y"
2576
+{yylhsminor.yy24 = pik_find_byname(p,yymsp[-2].minor.yy24,&yymsp[0].minor.yy0);}
2577
+#line 2602 "pikchr.c"
2578
+ yymsp[-2].minor.yy24 = yylhsminor.yy24;
2579
+ break;
2580
+ case 80: /* nth ::= NTH CLASSNAME */
2581
+#line 630 "pikchr.y"
2582
+{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2583
+#line 2608 "pikchr.c"
2584
+ yymsp[-1].minor.yy0 = yylhsminor.yy0;
2585
+ break;
2586
+ case 81: /* nth ::= NTH LAST CLASSNAME */
2587
+#line 631 "pikchr.y"
2588
+{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2589
+#line 2614 "pikchr.c"
2590
+ yymsp[-2].minor.yy0 = yylhsminor.yy0;
2591
+ break;
2592
+ case 82: /* nth ::= LAST CLASSNAME */
2593
+#line 632 "pikchr.y"
2594
+{yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2595
+#line 2620 "pikchr.c"
2596
+ break;
2597
+ case 83: /* nth ::= LAST */
2598
+#line 633 "pikchr.y"
2599
+{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2600
+#line 2625 "pikchr.c"
2601
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
2602
+ break;
2603
+ case 84: /* nth ::= NTH LB RB */
2604
+#line 634 "pikchr.y"
2605
+{yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2606
+#line 2631 "pikchr.c"
2607
+ yymsp[-2].minor.yy0 = yylhsminor.yy0;
2608
+ break;
2609
+ case 85: /* nth ::= NTH LAST LB RB */
2610
+#line 635 "pikchr.y"
2611
+{yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2612
+#line 2637 "pikchr.c"
2613
+ yymsp[-3].minor.yy0 = yylhsminor.yy0;
2614
+ break;
2615
+ case 86: /* nth ::= LAST LB RB */
2616
+#line 636 "pikchr.y"
2617
+{yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2618
+#line 2643 "pikchr.c"
2619
+ break;
2620
+ case 87: /* expr ::= expr PLUS expr */
2621
+#line 638 "pikchr.y"
2622
+{yylhsminor.yy83=yymsp[-2].minor.yy83+yymsp[0].minor.yy83;}
2623
+#line 2648 "pikchr.c"
2624
+ yymsp[-2].minor.yy83 = yylhsminor.yy83;
2625
+ break;
2626
+ case 88: /* expr ::= expr MINUS expr */
2627
+#line 639 "pikchr.y"
2628
+{yylhsminor.yy83=yymsp[-2].minor.yy83-yymsp[0].minor.yy83;}
2629
+#line 2654 "pikchr.c"
2630
+ yymsp[-2].minor.yy83 = yylhsminor.yy83;
2631
+ break;
2632
+ case 89: /* expr ::= expr STAR expr */
2633
+#line 640 "pikchr.y"
2634
+{yylhsminor.yy83=yymsp[-2].minor.yy83*yymsp[0].minor.yy83;}
2635
+#line 2660 "pikchr.c"
2636
+ yymsp[-2].minor.yy83 = yylhsminor.yy83;
2637
+ break;
2638
+ case 90: /* expr ::= expr SLASH expr */
2639
+#line 641 "pikchr.y"
26152640
{
26162641
if( yymsp[0].minor.yy83==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy83 = 0.0; }
26172642
else{ yylhsminor.yy83 = yymsp[-2].minor.yy83/yymsp[0].minor.yy83; }
26182643
}
2619
-#line 2644 "pikchr.c"
2620
- yymsp[-2].minor.yy83 = yylhsminor.yy83;
2621
- break;
2622
- case 88: /* expr ::= MINUS expr */
2623
-#line 636 "pikchr.y"
2624
-{yymsp[-1].minor.yy83=-yymsp[0].minor.yy83;}
2625
-#line 2650 "pikchr.c"
2626
- break;
2627
- case 89: /* expr ::= PLUS expr */
2628
-#line 637 "pikchr.y"
2629
-{yymsp[-1].minor.yy83=yymsp[0].minor.yy83;}
2630
-#line 2655 "pikchr.c"
2631
- break;
2632
- case 90: /* expr ::= LP expr RP */
2633
-#line 638 "pikchr.y"
2634
-{yymsp[-2].minor.yy83=yymsp[-1].minor.yy83;}
2635
-#line 2660 "pikchr.c"
2636
- break;
2637
- case 91: /* expr ::= NUMBER */
2638
-#line 639 "pikchr.y"
2639
-{yylhsminor.yy83=pik_atof(p,&yymsp[0].minor.yy0);}
2640
-#line 2665 "pikchr.c"
2641
- yymsp[0].minor.yy83 = yylhsminor.yy83;
2642
- break;
2643
- case 92: /* expr ::= ID */
2644
-#line 640 "pikchr.y"
2645
-{yylhsminor.yy83=pik_get_var(p,&yymsp[0].minor.yy0);}
2646
-#line 2671 "pikchr.c"
2647
- yymsp[0].minor.yy83 = yylhsminor.yy83;
2648
- break;
2649
- case 93: /* expr ::= FUNC1 LP expr RP */
2650
-#line 641 "pikchr.y"
2651
-{yylhsminor.yy83 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy83,0.0);}
2652
-#line 2677 "pikchr.c"
2644
+#line 2669 "pikchr.c"
2645
+ yymsp[-2].minor.yy83 = yylhsminor.yy83;
2646
+ break;
2647
+ case 91: /* expr ::= MINUS expr */
2648
+#line 645 "pikchr.y"
2649
+{yymsp[-1].minor.yy83=-yymsp[0].minor.yy83;}
2650
+#line 2675 "pikchr.c"
2651
+ break;
2652
+ case 92: /* expr ::= PLUS expr */
2653
+#line 646 "pikchr.y"
2654
+{yymsp[-1].minor.yy83=yymsp[0].minor.yy83;}
2655
+#line 2680 "pikchr.c"
2656
+ break;
2657
+ case 93: /* expr ::= LP expr RP */
2658
+#line 647 "pikchr.y"
2659
+{yymsp[-2].minor.yy83=yymsp[-1].minor.yy83;}
2660
+#line 2685 "pikchr.c"
2661
+ break;
2662
+ case 94: /* expr ::= NUMBER */
2663
+#line 648 "pikchr.y"
2664
+{yylhsminor.yy83=pik_atof(p,&yymsp[0].minor.yy0);}
2665
+#line 2690 "pikchr.c"
2666
+ yymsp[0].minor.yy83 = yylhsminor.yy83;
2667
+ break;
2668
+ case 95: /* expr ::= ID */
2669
+#line 649 "pikchr.y"
2670
+{yylhsminor.yy83=pik_get_var(p,&yymsp[0].minor.yy0);}
2671
+#line 2696 "pikchr.c"
2672
+ yymsp[0].minor.yy83 = yylhsminor.yy83;
2673
+ break;
2674
+ case 96: /* expr ::= FUNC1 LP expr RP */
2675
+#line 650 "pikchr.y"
2676
+{yylhsminor.yy83 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy83,0.0);}
2677
+#line 2702 "pikchr.c"
26532678
yymsp[-3].minor.yy83 = yylhsminor.yy83;
26542679
break;
2655
- case 94: /* expr ::= FUNC2 LP expr COMMA expr RP */
2656
-#line 642 "pikchr.y"
2657
-{yylhsminor.yy83 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy83,yymsp[-1].minor.yy83);}
2658
-#line 2683 "pikchr.c"
2659
- yymsp[-5].minor.yy83 = yylhsminor.yy83;
2660
- break;
2661
- case 95: /* expr ::= object DOT_L locproperty */
2662
- case 96: /* expr ::= object DOT_L numproperty */ yytestcase(yyruleno==96);
2663
- case 97: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==97);
2664
- case 98: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==98);
2665
-#line 644 "pikchr.y"
2666
-{yylhsminor.yy83=pik_property_of(p,yymsp[-2].minor.yy24,&yymsp[0].minor.yy0);}
2667
-#line 2692 "pikchr.c"
2668
- yymsp[-2].minor.yy83 = yylhsminor.yy83;
2669
- break;
2670
- case 99: /* expr ::= object DOT_E edge DOT_L X */
2671
-#line 648 "pikchr.y"
2672
-{yylhsminor.yy83=pik_place_of_elem(p,yymsp[-4].minor.yy24,&yymsp[-2].minor.yy0).x;}
2673
-#line 2698 "pikchr.c"
2674
- yymsp[-4].minor.yy83 = yylhsminor.yy83;
2675
- break;
2676
- case 100: /* expr ::= object DOT_E edge DOT_L Y */
2677
-#line 649 "pikchr.y"
2678
-{yylhsminor.yy83=pik_place_of_elem(p,yymsp[-4].minor.yy24,&yymsp[-2].minor.yy0).y;}
2679
-#line 2704 "pikchr.c"
2680
- yymsp[-4].minor.yy83 = yylhsminor.yy83;
2681
- break;
2682
- case 101: /* expr ::= LP locproperty OF object RP */
2683
- case 102: /* expr ::= LP dashproperty OF object RP */ yytestcase(yyruleno==102);
2684
- case 103: /* expr ::= LP numproperty OF object RP */ yytestcase(yyruleno==103);
2685
- case 104: /* expr ::= LP colorproperty OF object RP */ yytestcase(yyruleno==104);
2686
-#line 650 "pikchr.y"
2687
-{yymsp[-4].minor.yy83=pik_property_of(p,yymsp[-1].minor.yy24,&yymsp[-3].minor.yy0);}
2688
-#line 2713 "pikchr.c"
2689
- break;
2690
- case 105: /* expr ::= NTH VERTEX OF object DOT_L X */
2691
-#line 656 "pikchr.y"
2692
-{yylhsminor.yy83 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy24).x;}
2693
-#line 2718 "pikchr.c"
2694
- yymsp[-5].minor.yy83 = yylhsminor.yy83;
2695
- break;
2696
- case 106: /* expr ::= NTH VERTEX OF object DOT_L Y */
2697
-#line 658 "pikchr.y"
2698
-{yylhsminor.yy83 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy24).y;}
2699
-#line 2724 "pikchr.c"
2680
+ case 97: /* expr ::= FUNC2 LP expr COMMA expr RP */
2681
+#line 651 "pikchr.y"
2682
+{yylhsminor.yy83 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy83,yymsp[-1].minor.yy83);}
2683
+#line 2708 "pikchr.c"
2684
+ yymsp[-5].minor.yy83 = yylhsminor.yy83;
2685
+ break;
2686
+ case 98: /* expr ::= object DOT_L locproperty */
2687
+ case 99: /* expr ::= object DOT_L numproperty */ yytestcase(yyruleno==99);
2688
+ case 100: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==100);
2689
+ case 101: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==101);
2690
+#line 653 "pikchr.y"
2691
+{yylhsminor.yy83=pik_property_of(p,yymsp[-2].minor.yy24,&yymsp[0].minor.yy0);}
2692
+#line 2717 "pikchr.c"
2693
+ yymsp[-2].minor.yy83 = yylhsminor.yy83;
2694
+ break;
2695
+ case 102: /* expr ::= object DOT_E edge DOT_L X */
2696
+#line 657 "pikchr.y"
2697
+{yylhsminor.yy83=pik_place_of_elem(p,yymsp[-4].minor.yy24,&yymsp[-2].minor.yy0).x;}
2698
+#line 2723 "pikchr.c"
2699
+ yymsp[-4].minor.yy83 = yylhsminor.yy83;
2700
+ break;
2701
+ case 103: /* expr ::= object DOT_E edge DOT_L Y */
2702
+#line 658 "pikchr.y"
2703
+{yylhsminor.yy83=pik_place_of_elem(p,yymsp[-4].minor.yy24,&yymsp[-2].minor.yy0).y;}
2704
+#line 2729 "pikchr.c"
2705
+ yymsp[-4].minor.yy83 = yylhsminor.yy83;
2706
+ break;
2707
+ case 104: /* expr ::= LP locproperty OF object RP */
2708
+ case 105: /* expr ::= LP dashproperty OF object RP */ yytestcase(yyruleno==105);
2709
+ case 106: /* expr ::= LP numproperty OF object RP */ yytestcase(yyruleno==106);
2710
+ case 107: /* expr ::= LP colorproperty OF object RP */ yytestcase(yyruleno==107);
2711
+#line 659 "pikchr.y"
2712
+{yymsp[-4].minor.yy83=pik_property_of(p,yymsp[-1].minor.yy24,&yymsp[-3].minor.yy0);}
2713
+#line 2738 "pikchr.c"
2714
+ break;
2715
+ case 108: /* expr ::= NTH VERTEX OF object DOT_L X */
2716
+#line 665 "pikchr.y"
2717
+{yylhsminor.yy83 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy24).x;}
2718
+#line 2743 "pikchr.c"
2719
+ yymsp[-5].minor.yy83 = yylhsminor.yy83;
2720
+ break;
2721
+ case 109: /* expr ::= NTH VERTEX OF object DOT_L Y */
2722
+#line 667 "pikchr.y"
2723
+{yylhsminor.yy83 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy24).y;}
2724
+#line 2749 "pikchr.c"
27002725
yymsp[-5].minor.yy83 = yylhsminor.yy83;
27012726
break;
27022727
default:
2703
- /* (107) lvalue ::= ID */ yytestcase(yyruleno==107);
2704
- /* (108) lvalue ::= FILL */ yytestcase(yyruleno==108);
2705
- /* (109) lvalue ::= COLOR */ yytestcase(yyruleno==109);
2706
- /* (110) rvalue ::= expr */ yytestcase(yyruleno==110);
2707
- /* (111) print ::= PRINT */ yytestcase(yyruleno==111);
2708
- /* (112) prlist ::= pritem (OPTIMIZED OUT) */ assert(yyruleno!=112);
2709
- /* (113) prlist ::= prlist prsep pritem */ yytestcase(yyruleno==113);
2710
- /* (114) direction ::= UP */ yytestcase(yyruleno==114);
2711
- /* (115) direction ::= DOWN */ yytestcase(yyruleno==115);
2712
- /* (116) direction ::= LEFT */ yytestcase(yyruleno==116);
2713
- /* (117) direction ::= RIGHT */ yytestcase(yyruleno==117);
2714
- /* (118) attribute_list ::= alist */ yytestcase(yyruleno==118);
2715
- /* (119) alist ::= */ yytestcase(yyruleno==119);
2716
- /* (120) alist ::= alist attribute */ yytestcase(yyruleno==120);
2717
- /* (121) attribute ::= boolproperty (OPTIMIZED OUT) */ assert(yyruleno!=121);
2718
- /* (122) attribute ::= WITH withclause */ yytestcase(yyruleno==122);
2719
- /* (123) even ::= UNTIL EVEN WITH */ yytestcase(yyruleno==123);
2720
- /* (124) even ::= EVEN WITH */ yytestcase(yyruleno==124);
2721
- /* (125) withclause ::= with (OPTIMIZED OUT) */ assert(yyruleno!=125);
2722
- /* (126) withclause ::= withclause AND with */ yytestcase(yyruleno==126);
2723
- /* (127) dashproperty ::= DOTTED */ yytestcase(yyruleno==127);
2724
- /* (128) dashproperty ::= DASHED */ yytestcase(yyruleno==128);
2725
- /* (129) colorproperty ::= FILL */ yytestcase(yyruleno==129);
2726
- /* (130) colorproperty ::= COLOR */ yytestcase(yyruleno==130);
2727
- /* (131) position ::= place */ yytestcase(yyruleno==131);
2728
- /* (132) between ::= WAY BETWEEN */ yytestcase(yyruleno==132);
2729
- /* (133) between ::= BETWEEN */ yytestcase(yyruleno==133);
2730
- /* (134) between ::= OF THE WAY BETWEEN */ yytestcase(yyruleno==134);
2731
- /* (135) object ::= objectname */ yytestcase(yyruleno==135);
2732
- /* (136) locproperty ::= X|Y */ yytestcase(yyruleno==136);
2733
- /* (137) edge ::= EDGEPT */ yytestcase(yyruleno==137);
2734
- /* (138) edge ::= TOP */ yytestcase(yyruleno==138);
2735
- /* (139) edge ::= BOTTOM */ yytestcase(yyruleno==139);
2736
- /* (140) edge ::= LEFT */ yytestcase(yyruleno==140);
2737
- /* (141) edge ::= RIGHT */ yytestcase(yyruleno==141);
2728
+ /* (110) lvalue ::= ID */ yytestcase(yyruleno==110);
2729
+ /* (111) lvalue ::= FILL */ yytestcase(yyruleno==111);
2730
+ /* (112) lvalue ::= COLOR */ yytestcase(yyruleno==112);
2731
+ /* (113) lvalue ::= THICKNESS */ yytestcase(yyruleno==113);
2732
+ /* (114) rvalue ::= expr */ yytestcase(yyruleno==114);
2733
+ /* (115) print ::= PRINT */ yytestcase(yyruleno==115);
2734
+ /* (116) prlist ::= pritem (OPTIMIZED OUT) */ assert(yyruleno!=116);
2735
+ /* (117) prlist ::= prlist prsep pritem */ yytestcase(yyruleno==117);
2736
+ /* (118) direction ::= UP */ yytestcase(yyruleno==118);
2737
+ /* (119) direction ::= DOWN */ yytestcase(yyruleno==119);
2738
+ /* (120) direction ::= LEFT */ yytestcase(yyruleno==120);
2739
+ /* (121) direction ::= RIGHT */ yytestcase(yyruleno==121);
2740
+ /* (122) attribute_list ::= alist */ yytestcase(yyruleno==122);
2741
+ /* (123) alist ::= */ yytestcase(yyruleno==123);
2742
+ /* (124) alist ::= alist attribute */ yytestcase(yyruleno==124);
2743
+ /* (125) attribute ::= boolproperty (OPTIMIZED OUT) */ assert(yyruleno!=125);
2744
+ /* (126) attribute ::= WITH withclause */ yytestcase(yyruleno==126);
2745
+ /* (127) even ::= UNTIL EVEN WITH */ yytestcase(yyruleno==127);
2746
+ /* (128) even ::= EVEN WITH */ yytestcase(yyruleno==128);
2747
+ /* (129) withclause ::= with (OPTIMIZED OUT) */ assert(yyruleno!=129);
2748
+ /* (130) withclause ::= withclause AND with */ yytestcase(yyruleno==130);
2749
+ /* (131) dashproperty ::= DOTTED */ yytestcase(yyruleno==131);
2750
+ /* (132) dashproperty ::= DASHED */ yytestcase(yyruleno==132);
2751
+ /* (133) colorproperty ::= FILL */ yytestcase(yyruleno==133);
2752
+ /* (134) colorproperty ::= COLOR */ yytestcase(yyruleno==134);
2753
+ /* (135) position ::= place */ yytestcase(yyruleno==135);
2754
+ /* (136) between ::= WAY BETWEEN */ yytestcase(yyruleno==136);
2755
+ /* (137) between ::= BETWEEN */ yytestcase(yyruleno==137);
2756
+ /* (138) between ::= OF THE WAY BETWEEN */ yytestcase(yyruleno==138);
2757
+ /* (139) object ::= objectname */ yytestcase(yyruleno==139);
2758
+ /* (140) locproperty ::= X|Y */ yytestcase(yyruleno==140);
2759
+ /* (141) edge ::= EDGEPT */ yytestcase(yyruleno==141);
2760
+ /* (142) edge ::= TOP */ yytestcase(yyruleno==142);
2761
+ /* (143) edge ::= BOTTOM */ yytestcase(yyruleno==143);
2762
+ /* (144) edge ::= LEFT */ yytestcase(yyruleno==144);
2763
+ /* (145) edge ::= RIGHT */ yytestcase(yyruleno==145);
27382764
break;
27392765
/********** End reduce actions ************************************************/
27402766
};
27412767
assert( yyruleno<sizeof(yyRuleInfoLhs)/sizeof(yyRuleInfoLhs[0]) );
27422768
yygoto = yyRuleInfoLhs[yyruleno];
@@ -2792,18 +2818,18 @@
27922818
){
27932819
pik_parserARG_FETCH
27942820
pik_parserCTX_FETCH
27952821
#define TOKEN yyminor
27962822
/************ Begin %syntax_error code ****************************************/
2797
-#line 446 "pikchr.y"
2823
+#line 456 "pikchr.y"
27982824
27992825
if( TOKEN.z && TOKEN.z[0] ){
28002826
pik_error(p, &TOKEN, "syntax error");
28012827
}else{
28022828
pik_error(p, 0, "syntax error");
28032829
}
2804
-#line 2829 "pikchr.c"
2830
+#line 2855 "pikchr.c"
28052831
/************ End %syntax_error code ******************************************/
28062832
pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
28072833
pik_parserCTX_STORE
28082834
}
28092835
@@ -3032,11 +3058,11 @@
30323058
#else
30333059
(void)iToken;
30343060
return 0;
30353061
#endif
30363062
}
3037
-#line 668 "pikchr.y"
3063
+#line 677 "pikchr.y"
30383064
30393065
30403066
30413067
/* Chart of the 140 official HTML color names with their
30423068
** corresponding RGB value.
@@ -3210,12 +3236,12 @@
32103236
{ "arrowht", 0.1 },
32113237
{ "arrowwid", 0.05 },
32123238
{ "boxht", 0.5 },
32133239
{ "boxrad", 0.0 },
32143240
{ "boxwid", 0.75 },
3215
- { "charht", 0.166 },
3216
- { "charwid", 0.083 },
3241
+ { "charht", 0.14 },
3242
+ { "charwid", 0.08 },
32173243
{ "circlerad", 0.25 },
32183244
{ "color", 0.0 },
32193245
{ "cylht", 0.5 },
32203246
{ "cylrad", 0.075 },
32213247
{ "cylwid", 0.75 },
@@ -3230,11 +3256,11 @@
32303256
{ "ovalht", 0.5 },
32313257
{ "ovalwid", 1.0 },
32323258
{ "scale", 1.0 },
32333259
{ "textht", 0.5 },
32343260
{ "textwid", 0.75 },
3235
- { "thickness", 0.01 },
3261
+ { "thickness", 0.015 },
32363262
};
32373263
32383264
32393265
/* Methods for the "arc" class */
32403266
static void arcInit(Pik *p, PElem *pElem){
@@ -4149,41 +4175,108 @@
41494175
pik_append_dis(p,"stroke-dasharray:",v,"");
41504176
pik_append_dis(p,",",v,";");
41514177
}
41524178
}
41534179
}
4180
+
4181
+/*
4182
+** Compute the vertical locations for all text items in the
4183
+** element pElem. In other words, set every pElem->aTxt[*].eCode
4184
+** value to contain exactly one of: TP_ABOVE2, TP_ABOVE, TP_CENTER,
4185
+** TP_BELOW, or TP_BELOW2 is set.
4186
+*/
4187
+static void pik_txt_vertical_layout(Pik *p, PElem *pElem){
4188
+ int n, i;
4189
+ PToken *aTxt;
4190
+ n = pElem->nTxt;
4191
+ if( n==0 ) return;
4192
+ aTxt = pElem->aTxt;
4193
+ if( n==1 ){
4194
+ if( (aTxt[0].eCode & TP_VMASK)==0 ){
4195
+ aTxt[0].eCode |= TP_CENTER;
4196
+ }
4197
+ }else{
4198
+ int allSlots = 0;
4199
+ int aFree[5];
4200
+ int iSlot;
4201
+ int j;
4202
+ /* If there is more than one TP_ABOVE, change the first to TP_ABOVE2. */
4203
+ for(j=0, i=n-1; i>=0; i--){
4204
+ if( aTxt[i].eCode & TP_ABOVE ){
4205
+ if( j==0 ){
4206
+ j++;
4207
+ }else{
4208
+ aTxt[i].eCode = (aTxt[i].eCode & ~TP_VMASK) | TP_ABOVE2;
4209
+ break;
4210
+ }
4211
+ }
4212
+ }
4213
+ /* If more than one TP_BELOW, change the last to TP_BELOW2 */
4214
+ for(j=0, i=0; i<n; i++){
4215
+ if( aTxt[i].eCode & TP_BELOW ){
4216
+ if( j==0 ){
4217
+ j++;
4218
+ }else{
4219
+ aTxt[i].eCode = (aTxt[i].eCode & ~TP_VMASK) | TP_BELOW2;
4220
+ break;
4221
+ }
4222
+ }
4223
+ }
4224
+ /* Compute a mask of all slots used */
4225
+ for(i=0; i<n; i++) allSlots |= aTxt[i].eCode & TP_VMASK;
4226
+ /* Set of an array of available slots */
4227
+ iSlot = 0;
4228
+ if( n>=4 && (allSlots & TP_ABOVE2)==0 ) aFree[iSlot++] = TP_ABOVE2;
4229
+ if( (allSlots & TP_ABOVE)==0 ) aFree[iSlot++] = TP_ABOVE;
4230
+ if( (n&1)!=0 ) aFree[iSlot++] = TP_CENTER;
4231
+ if( (allSlots & TP_BELOW)==0 ) aFree[iSlot++] = TP_BELOW;
4232
+ if( n>=4 && (allSlots & TP_BELOW2)==0 ) aFree[iSlot++] = TP_BELOW2;
4233
+ /* Set the VMASK for all unassigned texts */
4234
+ for(i=iSlot=0; i<n; i++){
4235
+ if( (aTxt[i].eCode & TP_VMASK)==0 ){
4236
+ aTxt[i].eCode = aFree[iSlot++];
4237
+ }
4238
+ }
4239
+ }
4240
+}
41544241
41554242
/* Append multiple <text> SGV element for the text fields of the PElem
41564243
*/
41574244
static void pik_append_txt(Pik *p, PElem *pElem){
4158
- PNum dy;
4245
+ PNum dy; /* Half the height of a single line of text */
4246
+ PNum dy2; /* Extra vertical space around the center */
41594247
int n, i, nz;
41604248
PNum x, y, orig_y;
41614249
const char *z;
4250
+ PToken *aTxt;
4251
+ int hasCenter = 0;
4252
+
41624253
if( p->nErr ) return;
41634254
if( pElem->nTxt==0 ) return;
4255
+ aTxt = pElem->aTxt;
41644256
dy = 0.5*pik_value(p,"charht",6,0);
41654257
n = pElem->nTxt;
4166
- if( n>1 ){
4167
- if( (pElem->aTxt[0].eCode & TP_VMASK)==0 ){
4168
- pElem->aTxt[0].eCode |= TP_ABOVE;
4169
- }
4170
- if( (pElem->aTxt[n-1].eCode & TP_VMASK)==0 ){
4171
- pElem->aTxt[n-1].eCode |= TP_BELOW;
4172
- }
4173
- for(i=0; i<n; i++){
4174
- if( (pElem->aTxt[i].eCode & TP_VMASK)==0 ){
4175
- dy *= 1.5;
4176
- }
4177
- }
4178
- }
4258
+ pik_txt_vertical_layout(p, pElem);
41794259
x = pElem->ptAt.x;
41804260
for(i=0; i<n; i++){
4181
- PToken *t = &pElem->aTxt[i];
4261
+ if( (pElem->aTxt[i].eCode & TP_CENTER)!=0 ) hasCenter = 1;
4262
+ }
4263
+ if( hasCenter ){
4264
+ dy2 = dy;
4265
+ }else if( pElem->type->isLine ){
4266
+ dy2 = pElem->sw;
4267
+ }else{
4268
+ dy2 = 0.0;
4269
+ }
4270
+ for(i=0; i<n; i++){
4271
+ PToken *t = &aTxt[i];
41824272
orig_y = y = pElem->ptAt.y;
4183
- if( t->eCode & TP_ABOVE ) y += dy;
4184
- if( t->eCode & TP_BELOW ) y -= dy;
4273
+ if( t->eCode & TP_ABOVE2 ) y += dy2 + 3*dy;
4274
+ if( t->eCode & TP_ABOVE ) y += dy2 + dy;
4275
+ if( t->eCode & TP_BELOW ) y -= dy2 + dy;
4276
+ if( t->eCode & TP_BELOW2 ) y -= dy2 + 3*dy;
4277
+
41854278
pik_append_x(p, "<text x=\"", x, "\"");
41864279
pik_append_y(p, " y=\"", y, "\"");
41874280
if( t->eCode & TP_RJUST ){
41884281
pik_append(p, " text-anchor=\"end\"", -1);
41894282
}else if( t->eCode & TP_LJUST ){
@@ -4988,17 +5081,24 @@
49885081
pik_error(0, pFit, "no text to fit to");
49895082
return;
49905083
}
49915084
if( pElem->type->xFit==0 ) return;
49925085
if( (pElem->mProp & A_HEIGHT)==0 ){
4993
- if( pElem->nTxt==1 && (pElem->aTxt[0].eCode & TP_VMASK)==0 ){
4994
- h = 1;
4995
- }else if( pElem->nTxt==3 ){
4996
- h = 3;
4997
- }else{
4998
- h = 2;
5086
+ int hasCenter = 0;
5087
+ int hasSingleStack = 0;
5088
+ int hasDoubleStack = 0;
5089
+ pik_txt_vertical_layout(p, pElem);
5090
+ for(i=0; i<pElem->nTxt; i++){
5091
+ if( pElem->aTxt[i].eCode & TP_CENTER ){
5092
+ hasCenter = 1;
5093
+ }else if( pElem->aTxt[i].eCode & (TP_ABOVE2|TP_BELOW2) ){
5094
+ hasDoubleStack = 1;
5095
+ }else if( pElem->aTxt[i].eCode & (TP_ABOVE|TP_BELOW) ){
5096
+ hasSingleStack = 1;
5097
+ }
49995098
}
5099
+ h = hasCenter + hasSingleStack*2 + hasDoubleStack*2;
50005100
}
50015101
if( (pElem->mProp & A_WIDTH)==0 ){
50025102
for(i=0; i<pElem->nTxt; i++){
50035103
int j, cnt;
50045104
const char *z = pElem->aTxt[i].z;
@@ -5046,11 +5146,11 @@
50465146
}
50475147
pVar->zName = z = (char*)&pVar[1];
50485148
memcpy(z, pId->z, pId->n);
50495149
z[pId->n] = 0;
50505150
pVar->pNext = p->pVar;
5051
- pVar->val = 0;
5151
+ pVar->val = pik_value(p, pId->z, pId->n, 0);
50525152
p->pVar = pVar;
50535153
}
50545154
switch( pOp->eCode ){
50555155
case T_PLUS: pVar->val += val; break;
50565156
case T_STAR: pVar->val *= val; break;
@@ -6331,6 +6431,6 @@
63316431
printf("</body></html>\n");
63326432
return 0;
63336433
}
63346434
#endif /* PIKCHR_SHELL */
63356435
6336
-#line 6361 "pikchr.c"
6436
+#line 6461 "pikchr.c"
63376437
--- src/pikchr.c
+++ src/pikchr.c
@@ -168,21 +168,25 @@
168 #define FN_MAX 3
169 #define FN_MIN 4
170 #define FN_SIN 5
171 #define FN_SQRT 6
172
173 /* Text position and style flags */
174 #define TP_LJUST 0x01 /* left justify...... */
175 #define TP_RJUST 0x02 /* ...Right justify */
176 #define TP_JMASK 0x03 /* Mask for justification bits */
177 #define TP_ABOVE 0x04 /* Position text above PElem.ptAt */
178 #define TP_BELOW 0x08 /* Position text below PElem.ptAt */
179 #define TP_VMASK 0x0c /* Mask for text positioning flags */
180 #define TP_ITALIC 0x10 /* Italic font */
181 #define TP_BOLD 0x20 /* Bold font */
182 #define TP_FMASK 0x30 /* Mask for font style */
183 #define TP_ALIGN 0x40 /* Rotate to align with the line */
 
 
 
 
184
185 /* An object to hold a position in 2-D space */
186 struct PPoint {
187 PNum x, y; /* X and Y coordinates */
188 };
@@ -286,11 +290,11 @@
286 char bClose; /* True if "close" is seen */
287 char bChop; /* True if "chop" is seen */
288 unsigned char nTxt; /* Number of text values */
289 unsigned mProp; /* Masks of properties set so far */
290 unsigned mCalc; /* Values computed from other constraints */
291 PToken aTxt[3]; /* Text with .eCode holding TP flags */
292 int iLayer; /* Rendering order */
293 int inDir, outDir; /* Entry and exit directions */
294 int nPath; /* Number of path points */
295 PPoint *aPath; /* Array of path points */
296 PBox bbox; /* Bounding box */
@@ -408,89 +412,89 @@
408 static void pik_same(Pik *p, PElem*, PToken*);
409 static PPoint pik_nth_vertex(Pik *p, PToken *pNth, PToken *pErr, PElem *pElem);
410 static PToken pik_next_semantic_token(Pik *p, PToken *pThis);
411
412
413 #line 439 "pikchr.c"
414 /**************** End of %include directives **********************************/
415 /* These constants specify the various numeric values for terminal symbols.
416 ***************** Begin token definitions *************************************/
417 #ifndef T_ID
418 #define T_ID 1
419 #define T_EDGEPT 2
420 #define T_EOL 3
421 #define T_ASSIGN 4
422 #define T_PLACENAME 5
423 #define T_COLON 6
424 #define T_FILL 7
425 #define T_COLOR 8
426 #define T_PRINT 9
427 #define T_STRING 10
428 #define T_COMMA 11
429 #define T_CLASSNAME 12
430 #define T_LB 13
431 #define T_RB 14
432 #define T_UP 15
433 #define T_DOWN 16
434 #define T_LEFT 17
435 #define T_RIGHT 18
436 #define T_PERCENT 19
437 #define T_CLOSE 20
438 #define T_CHOP 21
439 #define T_FROM 22
440 #define T_TO 23
441 #define T_THEN 24
442 #define T_AT 25
443 #define T_WITH 26
444 #define T_SAME 27
445 #define T_AS 28
446 #define T_FIT 29
447 #define T_UNTIL 30
448 #define T_EVEN 31
449 #define T_AND 32
450 #define T_DOT_E 33
451 #define T_HEIGHT 34
452 #define T_WIDTH 35
453 #define T_RADIUS 36
454 #define T_DIAMETER 37
455 #define T_THICKNESS 38
456 #define T_DOTTED 39
457 #define T_DASHED 40
458 #define T_CW 41
459 #define T_CCW 42
460 #define T_LARROW 43
461 #define T_RARROW 44
462 #define T_LRARROW 45
463 #define T_INVIS 46
464 #define T_CENTER 47
465 #define T_LJUST 48
466 #define T_RJUST 49
467 #define T_ABOVE 50
468 #define T_BELOW 51
469 #define T_ITALIC 52
470 #define T_BOLD 53
471 #define T_ALIGNED 54
472 #define T_PLUS 55
473 #define T_MINUS 56
474 #define T_LP 57
475 #define T_RP 58
476 #define T_OF 59
477 #define T_HEADING 60
478 #define T_WAY 61
479 #define T_BETWEEN 62
480 #define T_THE 63
481 #define T_DOT_L 64
482 #define T_START 65
483 #define T_END 66
484 #define T_NTH 67
485 #define T_VERTEX 68
486 #define T_IN 69
487 #define T_DOT_U 70
488 #define T_LAST 71
489 #define T_STAR 72
490 #define T_SLASH 73
491 #define T_UMINUS 74
492 #define T_NUMBER 75
493 #define T_FUNC1 76
494 #define T_FUNC2 77
495 #define T_X 78
496 #define T_Y 79
@@ -580,21 +584,21 @@
580 #define pik_parserCTX_PARAM ,p
581 #define pik_parserCTX_FETCH Pik *p=yypParser->p;
582 #define pik_parserCTX_STORE yypParser->p=p;
583 #define YYFALLBACK 1
584 #define YYNSTATE 153
585 #define YYNRULE 142
586 #define YYNRULE_WITH_ACTION 107
587 #define YYNTOKEN 82
588 #define YY_MAX_SHIFT 152
589 #define YY_MIN_SHIFTREDUCE 264
590 #define YY_MAX_SHIFTREDUCE 405
591 #define YY_ERROR_ACTION 406
592 #define YY_ACCEPT_ACTION 407
593 #define YY_NO_ACTION 408
594 #define YY_MIN_REDUCE 409
595 #define YY_MAX_REDUCE 550
596 /************* End control #defines *******************************************/
597 #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
598
599 /* Define the yytestcase() macro to be a no-op if is not already defined
600 ** otherwise.
@@ -657,246 +661,248 @@
657 ** yy_reduce_ofst[] For each state, the offset into yy_action for
658 ** shifting non-terminals after a reduce.
659 ** yy_default[] Default action for each state.
660 **
661 *********** Begin parsing tables **********************************************/
662 #define YY_ACTTAB_COUNT (853)
663 static const YYACTIONTYPE yy_action[] = {
664 /* 0 */ 505, 19, 113, 506, 507, 504, 112, 393, 394, 41,
665 /* 10 */ 72, 27, 40, 28, 132, 378, 379, 380, 381, 142,
666 /* 20 */ 294, 295, 10, 9, 298, 8, 51, 111, 277, 303,
667 /* 30 */ 114, 114, 529, 529, 306, 306, 306, 306, 306, 391,
668 /* 40 */ 392, 307, 308, 309, 310, 311, 312, 356, 401, 343,
669 /* 50 */ 147, 339, 25, 393, 394, 314, 314, 314, 314, 314,
670 /* 60 */ 314, 314, 314, 404, 405, 64, 137, 129, 21, 139,
671 /* 70 */ 135, 141, 99, 101, 100, 151, 109, 401, 50, 49,
672 /* 80 */ 306, 306, 306, 306, 306, 391, 392, 73, 24, 124,
673 /* 90 */ 38, 35, 404, 405, 74, 48, 47, 95, 39, 281,
674 /* 100 */ 52, 45, 46, 1, 126, 125, 103, 151, 109, 6,
675 /* 110 */ 420, 131, 130, 89, 7, 69, 69, 107, 341, 148,
676 /* 120 */ 95, 355, 144, 143, 400, 400, 402, 403, 356, 103,
677 /* 130 */ 151, 109, 339, 420, 393, 394, 63, 18, 17, 522,
678 /* 140 */ 341, 148, 50, 49, 388, 354, 122, 32, 123, 397,
679 /* 150 */ 98, 410, 417, 26, 12, 402, 403, 413, 387, 48,
680 /* 160 */ 47, 306, 306, 306, 306, 306, 391, 392, 152, 356,
681 /* 170 */ 401, 22, 116, 339, 128, 339, 11, 108, 71, 77,
682 /* 180 */ 279, 70, 45, 46, 5, 404, 405, 320, 103, 151,
683 /* 190 */ 109, 446, 151, 109, 94, 398, 356, 401, 107, 108,
684 /* 200 */ 339, 321, 355, 144, 143, 400, 400, 415, 26, 65,
685 /* 210 */ 121, 129, 404, 405, 120, 401, 416, 101, 100, 151,
686 /* 220 */ 109, 48, 47, 45, 46, 1, 127, 151, 109, 409,
687 /* 230 */ 404, 405, 24, 131, 130, 89, 484, 97, 124, 107,
688 /* 240 */ 112, 107, 396, 355, 144, 143, 66, 39, 402, 403,
689 /* 250 */ 45, 46, 1, 126, 125, 14, 15, 411, 417, 26,
690 /* 260 */ 131, 130, 89, 413, 16, 535, 107, 484, 53, 95,
691 /* 270 */ 355, 144, 143, 484, 152, 402, 403, 22, 103, 151,
692 /* 280 */ 109, 106, 434, 393, 394, 54, 18, 17, 67, 55,
693 /* 290 */ 82, 50, 49, 402, 403, 122, 32, 123, 397, 103,
694 /* 300 */ 151, 109, 480, 151, 109, 20, 363, 364, 48, 47,
695 /* 310 */ 306, 306, 306, 306, 306, 391, 392, 371, 356, 30,
696 /* 320 */ 56, 133, 339, 372, 373, 375, 71, 2, 279, 70,
697 /* 330 */ 68, 378, 379, 380, 381, 356, 393, 394, 102, 96,
698 /* 340 */ 368, 331, 332, 367, 276, 369, 370, 117, 115, 65,
699 /* 350 */ 57, 129, 13, 58, 400, 400, 450, 101, 100, 151,
700 /* 360 */ 109, 31, 366, 306, 306, 306, 306, 306, 391, 392,
701 /* 370 */ 95, 356, 45, 46, 5, 339, 479, 151, 109, 103,
702 /* 380 */ 151, 109, 59, 414, 94, 50, 49, 78, 107, 45,
703 /* 390 */ 46, 5, 355, 144, 143, 356, 103, 151, 109, 96,
704 /* 400 */ 365, 94, 48, 47, 60, 107, 43, 400, 400, 355,
705 /* 410 */ 144, 143, 356, 75, 137, 44, 339, 139, 135, 141,
706 /* 420 */ 61, 84, 103, 151, 109, 45, 46, 5, 347, 356,
707 /* 430 */ 103, 151, 109, 339, 340, 50, 49, 94, 319, 342,
708 /* 440 */ 149, 107, 423, 290, 23, 355, 144, 143, 150, 45,
709 /* 450 */ 46, 5, 48, 47, 62, 110, 410, 417, 26, 345,
710 /* 460 */ 29, 94, 413, 408, 62, 107, 45, 46, 3, 355,
711 /* 470 */ 144, 143, 408, 152, 34, 407, 22, 408, 94, 50,
712 /* 480 */ 49, 346, 107, 45, 46, 4, 355, 144, 143, 408,
713 /* 490 */ 408, 50, 49, 408, 318, 94, 48, 47, 408, 107,
714 /* 500 */ 408, 341, 148, 355, 144, 143, 76, 137, 48, 47,
715 /* 510 */ 139, 135, 141, 408, 408, 103, 151, 109, 50, 49,
716 /* 520 */ 88, 137, 408, 408, 139, 135, 141, 408, 408, 103,
717 /* 530 */ 151, 109, 65, 408, 129, 48, 47, 408, 90, 449,
718 /* 540 */ 101, 100, 151, 109, 65, 408, 129, 103, 151, 109,
719 /* 550 */ 408, 444, 101, 100, 151, 109, 65, 146, 129, 408,
720 /* 560 */ 108, 408, 408, 442, 101, 100, 151, 109, 408, 65,
721 /* 570 */ 408, 129, 478, 151, 109, 408, 441, 101, 100, 151,
722 /* 580 */ 109, 408, 65, 408, 129, 408, 408, 408, 408, 467,
723 /* 590 */ 101, 100, 151, 109, 65, 408, 129, 134, 151, 109,
724 /* 600 */ 408, 119, 101, 100, 151, 109, 408, 65, 408, 129,
725 /* 610 */ 408, 408, 408, 79, 473, 101, 100, 151, 109, 65,
726 /* 620 */ 408, 129, 103, 151, 109, 80, 472, 101, 100, 151,
727 /* 630 */ 109, 65, 408, 129, 103, 151, 109, 408, 471, 101,
728 /* 640 */ 100, 151, 109, 65, 408, 129, 408, 136, 151, 109,
729 /* 650 */ 470, 101, 100, 151, 109, 37, 65, 408, 129, 138,
730 /* 660 */ 151, 109, 33, 469, 101, 100, 151, 109, 36, 65,
731 /* 670 */ 408, 129, 408, 408, 285, 408, 468, 101, 100, 151,
732 /* 680 */ 109, 65, 284, 129, 408, 140, 151, 109, 118, 101,
733 /* 690 */ 100, 151, 109, 408, 65, 408, 129, 408, 408, 50,
734 /* 700 */ 49, 438, 101, 100, 151, 109, 50, 49, 42, 354,
735 /* 710 */ 50, 49, 50, 49, 408, 354, 48, 47, 50, 49,
736 /* 720 */ 408, 408, 91, 48, 47, 408, 408, 48, 47, 48,
737 /* 730 */ 47, 103, 151, 109, 408, 48, 47, 50, 49, 408,
738 /* 740 */ 358, 145, 151, 109, 50, 49, 408, 357, 50, 49,
739 /* 750 */ 408, 354, 50, 49, 48, 47, 483, 151, 109, 408,
740 /* 760 */ 408, 48, 47, 81, 408, 48, 47, 92, 408, 48,
741 /* 770 */ 47, 408, 103, 151, 109, 408, 103, 151, 109, 408,
742 /* 780 */ 408, 93, 408, 408, 408, 408, 83, 408, 408, 85,
743 /* 790 */ 103, 151, 109, 86, 408, 103, 151, 109, 103, 151,
744 /* 800 */ 109, 408, 103, 151, 109, 87, 408, 408, 408, 498,
745 /* 810 */ 408, 408, 408, 408, 103, 151, 109, 497, 103, 151,
746 /* 820 */ 109, 408, 496, 408, 408, 495, 103, 151, 109, 408,
747 /* 830 */ 408, 103, 151, 109, 103, 151, 109, 408, 104, 408,
748 /* 840 */ 408, 105, 408, 408, 408, 408, 408, 103, 151, 109,
749 /* 850 */ 103, 151, 109,
 
750 };
751 static const YYCODETYPE yy_lookahead[] = {
752 /* 0 */ 87, 114, 88, 90, 91, 92, 88, 7, 8, 87,
753 /* 10 */ 10, 89, 90, 91, 88, 15, 16, 17, 18, 88,
754 /* 20 */ 20, 21, 22, 23, 24, 25, 26, 27, 11, 29,
755 /* 30 */ 112, 113, 110, 111, 34, 35, 36, 37, 38, 39,
756 /* 40 */ 40, 41, 42, 43, 44, 45, 46, 1, 2, 12,
757 /* 50 */ 13, 5, 106, 7, 8, 47, 48, 49, 50, 51,
758 /* 60 */ 52, 53, 54, 17, 18, 86, 87, 88, 108, 90,
759 /* 70 */ 91, 92, 93, 94, 95, 96, 97, 2, 55, 56,
760 /* 80 */ 34, 35, 36, 37, 38, 39, 40, 98, 3, 2,
761 /* 90 */ 55, 56, 17, 18, 98, 72, 73, 86, 11, 14,
762 /* 100 */ 28, 55, 56, 57, 17, 18, 95, 96, 97, 25,
763 /* 110 */ 99, 65, 66, 67, 25, 104, 105, 71, 12, 13,
764 /* 120 */ 86, 75, 76, 77, 78, 79, 80, 81, 1, 95,
765 /* 130 */ 96, 97, 5, 99, 7, 8, 32, 50, 51, 105,
766 /* 140 */ 12, 13, 55, 56, 26, 58, 59, 60, 61, 62,
767 /* 150 */ 82, 83, 84, 85, 11, 80, 81, 89, 26, 72,
768 /* 160 */ 73, 34, 35, 36, 37, 38, 39, 40, 100, 1,
769 /* 170 */ 2, 103, 31, 5, 68, 5, 32, 71, 10, 86,
770 /* 180 */ 12, 13, 55, 56, 57, 17, 18, 58, 95, 96,
771 /* 190 */ 97, 95, 96, 97, 67, 62, 1, 2, 71, 71,
772 /* 200 */ 5, 58, 75, 76, 77, 78, 79, 84, 85, 86,
773 /* 210 */ 63, 88, 17, 18, 61, 2, 93, 94, 95, 96,
774 /* 220 */ 97, 72, 73, 55, 56, 57, 95, 96, 97, 0,
775 /* 230 */ 17, 18, 3, 65, 66, 67, 33, 67, 2, 71,
776 /* 240 */ 88, 71, 62, 75, 76, 77, 33, 11, 80, 81,
777 /* 250 */ 55, 56, 57, 17, 18, 59, 59, 83, 84, 85,
778 /* 260 */ 65, 66, 67, 89, 59, 113, 71, 64, 59, 86,
779 /* 270 */ 75, 76, 77, 70, 100, 80, 81, 103, 95, 96,
780 /* 280 */ 97, 64, 99, 7, 8, 59, 50, 51, 33, 59,
781 /* 290 */ 86, 55, 56, 80, 81, 59, 60, 61, 62, 95,
782 /* 300 */ 96, 97, 95, 96, 97, 101, 78, 79, 72, 73,
783 /* 310 */ 34, 35, 36, 37, 38, 39, 40, 1, 1, 64,
784 /* 320 */ 59, 5, 5, 7, 8, 9, 10, 6, 12, 13,
785 /* 330 */ 33, 15, 16, 17, 18, 1, 7, 8, 64, 5,
786 /* 340 */ 58, 65, 66, 58, 10, 78, 79, 30, 31, 86,
787 /* 350 */ 59, 88, 22, 59, 78, 79, 93, 94, 95, 96,
788 /* 360 */ 97, 64, 58, 34, 35, 36, 37, 38, 39, 40,
789 /* 370 */ 86, 1, 55, 56, 57, 5, 95, 96, 97, 95,
790 /* 380 */ 96, 97, 59, 99, 67, 55, 56, 86, 71, 55,
791 /* 390 */ 56, 57, 75, 76, 77, 1, 95, 96, 97, 5,
792 /* 400 */ 58, 67, 72, 73, 59, 71, 57, 78, 79, 75,
793 /* 410 */ 76, 77, 1, 86, 87, 57, 5, 90, 91, 92,
794 /* 420 */ 59, 86, 95, 96, 97, 55, 56, 57, 14, 1,
795 /* 430 */ 95, 96, 97, 5, 5, 55, 56, 67, 58, 12,
796 /* 440 */ 13, 71, 107, 19, 109, 75, 76, 77, 70, 55,
797 /* 450 */ 56, 57, 72, 73, 59, 82, 83, 84, 85, 14,
798 /* 460 */ 4, 67, 89, 115, 69, 71, 55, 56, 57, 75,
799 /* 470 */ 76, 77, 115, 100, 11, 102, 103, 115, 67, 55,
800 /* 480 */ 56, 14, 71, 55, 56, 57, 75, 76, 77, 115,
801 /* 490 */ 115, 55, 56, 115, 58, 67, 72, 73, 115, 71,
802 /* 500 */ 115, 12, 13, 75, 76, 77, 86, 87, 72, 73,
803 /* 510 */ 90, 91, 92, 115, 115, 95, 96, 97, 55, 56,
804 /* 520 */ 86, 87, 115, 115, 90, 91, 92, 115, 115, 95,
805 /* 530 */ 96, 97, 86, 115, 88, 72, 73, 115, 86, 93,
806 /* 540 */ 94, 95, 96, 97, 86, 115, 88, 95, 96, 97,
807 /* 550 */ 115, 93, 94, 95, 96, 97, 86, 68, 88, 115,
808 /* 560 */ 71, 115, 115, 93, 94, 95, 96, 97, 115, 86,
809 /* 570 */ 115, 88, 95, 96, 97, 115, 93, 94, 95, 96,
810 /* 580 */ 97, 115, 86, 115, 88, 115, 115, 115, 115, 93,
811 /* 590 */ 94, 95, 96, 97, 86, 115, 88, 95, 96, 97,
812 /* 600 */ 115, 93, 94, 95, 96, 97, 115, 86, 115, 88,
813 /* 610 */ 115, 115, 115, 86, 93, 94, 95, 96, 97, 86,
814 /* 620 */ 115, 88, 95, 96, 97, 86, 93, 94, 95, 96,
815 /* 630 */ 97, 86, 115, 88, 95, 96, 97, 115, 93, 94,
816 /* 640 */ 95, 96, 97, 86, 115, 88, 115, 95, 96, 97,
817 /* 650 */ 93, 94, 95, 96, 97, 11, 86, 115, 88, 95,
818 /* 660 */ 96, 97, 11, 93, 94, 95, 96, 97, 11, 86,
819 /* 670 */ 115, 88, 115, 115, 19, 115, 93, 94, 95, 96,
820 /* 680 */ 97, 86, 19, 88, 115, 95, 96, 97, 93, 94,
821 /* 690 */ 95, 96, 97, 115, 86, 115, 88, 115, 115, 55,
822 /* 700 */ 56, 93, 94, 95, 96, 97, 55, 56, 11, 58,
823 /* 710 */ 55, 56, 55, 56, 115, 58, 72, 73, 55, 56,
824 /* 720 */ 115, 115, 86, 72, 73, 115, 115, 72, 73, 72,
825 /* 730 */ 73, 95, 96, 97, 115, 72, 73, 55, 56, 115,
826 /* 740 */ 58, 95, 96, 97, 55, 56, 115, 58, 55, 56,
827 /* 750 */ 115, 58, 55, 56, 72, 73, 95, 96, 97, 115,
828 /* 760 */ 115, 72, 73, 86, 115, 72, 73, 86, 115, 72,
829 /* 770 */ 73, 115, 95, 96, 97, 115, 95, 96, 97, 115,
830 /* 780 */ 115, 86, 115, 115, 115, 115, 86, 115, 115, 86,
831 /* 790 */ 95, 96, 97, 86, 115, 95, 96, 97, 95, 96,
832 /* 800 */ 97, 115, 95, 96, 97, 86, 115, 115, 115, 86,
833 /* 810 */ 115, 115, 115, 115, 95, 96, 97, 86, 95, 96,
834 /* 820 */ 97, 115, 86, 115, 115, 86, 95, 96, 97, 115,
835 /* 830 */ 115, 95, 96, 97, 95, 96, 97, 115, 86, 115,
836 /* 840 */ 115, 86, 115, 115, 115, 115, 115, 95, 96, 97,
837 /* 850 */ 95, 96, 97, 82, 82, 82, 82, 82, 82, 82,
838 /* 860 */ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
839 /* 870 */ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
840 /* 880 */ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
841 /* 890 */ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
842 /* 900 */ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
843 /* 910 */ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
844 /* 920 */ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
845 /* 930 */ 82, 82, 82, 82, 82,
 
846 };
847 #define YY_SHIFT_COUNT (152)
848 #define YY_SHIFT_MIN (0)
849 #define YY_SHIFT_MAX (697)
850 static const unsigned short int yy_shift_ofst[] = {
851 /* 0 */ 316, 46, 168, 127, 127, 127, 195, 195, 195, 195,
852 /* 10 */ 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
853 /* 20 */ 195, 316, 334, 0, 316, 334, 370, 317, 394, 394,
854 /* 30 */ 276, 329, 370, 370, 370, 411, 370, 370, 428, 370,
855 /* 40 */ 370, 370, 370, 370, 370, 370, 370, 370, 370, 370,
856 /* 50 */ 370, 213, 170, 170, 170, 170, 170, 170, 170, 170,
857 /* 60 */ 170, 170, 170, 213, 87, 236, 75, 75, 75, 17,
858 /* 70 */ 853, 853, 853, 8, 8, 651, 657, 330, 380, 463,
859 /* 80 */ 436, 644, 424, 655, 663, 682, 697, 689, 693, 106,
860 /* 90 */ 23, 23, 23, 23, 489, 23, 203, 128, 85, 143,
861 /* 100 */ 255, 35, 228, 297, 149, 149, 267, 37, 427, 395,
862 /* 110 */ 229, 72, 84, 89, 104, 118, 132, 141, 144, 129,
863 /* 120 */ 133, 153, 147, 180, 196, 197, 205, 217, 209, 226,
864 /* 130 */ 230, 261, 274, 321, 282, 291, 285, 294, 304, 323,
865 /* 140 */ 342, 345, 274, 349, 358, 217, 361, 414, 445, 467,
866 /* 150 */ 429, 378, 456,
867 };
868 #define YY_REDUCE_COUNT (72)
869 #define YY_REDUCE_MIN (-113)
870 #define YY_REDUCE_MAX (755)
871 static const short yy_reduce_ofst[] = {
872 /* 0 */ 373, -21, 123, 327, 420, 434, 263, 446, 458, 470,
873 /* 10 */ 483, 496, 508, 521, 533, 545, 557, 570, 583, 595,
874 /* 20 */ 608, 68, 11, -78, 174, 34, 335, 204, 183, 284,
875 /* 30 */ -87, -87, 93, 301, 452, 527, 539, 636, 677, 681,
876 /* 40 */ 695, 700, 703, 707, 719, 723, 731, 736, 739, 752,
877 /* 50 */ 755, -82, 96, 131, 207, 281, 477, 502, 552, 564,
878 /* 60 */ 590, 646, 661, 152, -113, -113, -86, -74, -69, -54,
879 /* 70 */ -40, -11, -4,
880 };
881 static const YYACTIONTYPE yy_default[] = {
882 /* 0 */ 412, 406, 406, 406, 406, 406, 406, 406, 406, 406,
883 /* 10 */ 406, 406, 406, 406, 406, 406, 406, 406, 406, 406,
884 /* 20 */ 406, 412, 406, 527, 412, 406, 528, 437, 406, 406,
885 /* 30 */ 406, 406, 406, 406, 406, 406, 406, 406, 406, 406,
886 /* 40 */ 433, 406, 406, 406, 406, 406, 406, 406, 406, 406,
887 /* 50 */ 406, 406, 406, 406, 406, 406, 406, 406, 406, 406,
888 /* 60 */ 406, 406, 406, 406, 406, 406, 406, 406, 406, 418,
889 /* 70 */ 427, 458, 458, 425, 447, 406, 406, 406, 406, 406,
890 /* 80 */ 406, 406, 436, 431, 428, 406, 406, 406, 406, 406,
891 /* 90 */ 462, 461, 460, 432, 406, 519, 419, 406, 406, 406,
892 /* 100 */ 474, 540, 406, 406, 494, 493, 406, 489, 406, 482,
893 /* 110 */ 406, 445, 406, 406, 531, 406, 406, 406, 406, 406,
894 /* 120 */ 406, 406, 406, 406, 406, 406, 406, 481, 406, 406,
895 /* 130 */ 406, 406, 475, 406, 406, 406, 406, 406, 406, 406,
896 /* 140 */ 406, 406, 406, 406, 406, 406, 406, 406, 406, 406,
897 /* 150 */ 406, 544, 406,
898 };
899 /********** End of lemon-generated parsing tables *****************************/
900
901 /* The next table maps tokens (terminal symbols) into fallback tokens.
902 ** If a construct like the following:
@@ -915,16 +921,24 @@
915 #ifdef YYFALLBACK
916 static const YYCODETYPE yyFallback[] = {
917 0, /* $ => nothing */
918 0, /* ID => nothing */
919 1, /* EDGEPT => ID */
 
 
 
 
 
 
 
920 0, /* EOL => nothing */
921 0, /* ASSIGN => nothing */
922 0, /* PLACENAME => nothing */
923 0, /* COLON => nothing */
924 0, /* FILL => nothing */
925 0, /* COLOR => nothing */
 
926 0, /* PRINT => nothing */
927 0, /* STRING => nothing */
928 0, /* COMMA => nothing */
929 0, /* CLASSNAME => nothing */
930 0, /* LB => nothing */
@@ -931,11 +945,10 @@
931 0, /* RB => nothing */
932 0, /* UP => nothing */
933 0, /* DOWN => nothing */
934 0, /* LEFT => nothing */
935 0, /* RIGHT => nothing */
936 0, /* PERCENT => nothing */
937 0, /* CLOSE => nothing */
938 0, /* CHOP => nothing */
939 0, /* FROM => nothing */
940 0, /* TO => nothing */
941 0, /* THEN => nothing */
@@ -950,11 +963,10 @@
950 0, /* DOT_E => nothing */
951 0, /* HEIGHT => nothing */
952 0, /* WIDTH => nothing */
953 0, /* RADIUS => nothing */
954 0, /* DIAMETER => nothing */
955 0, /* THICKNESS => nothing */
956 0, /* DOTTED => nothing */
957 0, /* DASHED => nothing */
958 0, /* CW => nothing */
959 0, /* CCW => nothing */
960 0, /* LARROW => nothing */
@@ -967,15 +979,12 @@
967 0, /* ABOVE => nothing */
968 0, /* BELOW => nothing */
969 0, /* ITALIC => nothing */
970 0, /* BOLD => nothing */
971 0, /* ALIGNED => nothing */
972 0, /* PLUS => nothing */
973 0, /* MINUS => nothing */
974 0, /* LP => nothing */
975 0, /* RP => nothing */
976 0, /* OF => nothing */
977 0, /* HEADING => nothing */
978 0, /* WAY => nothing */
979 0, /* BETWEEN => nothing */
980 0, /* THE => nothing */
981 0, /* DOT_L => nothing */
@@ -984,13 +993,10 @@
984 0, /* NTH => nothing */
985 0, /* VERTEX => nothing */
986 0, /* IN => nothing */
987 0, /* DOT_U => nothing */
988 0, /* LAST => nothing */
989 0, /* STAR => nothing */
990 0, /* SLASH => nothing */
991 0, /* UMINUS => nothing */
992 0, /* NUMBER => nothing */
993 0, /* FUNC1 => nothing */
994 0, /* FUNC2 => nothing */
995 0, /* X => nothing */
996 0, /* Y => nothing */
@@ -1085,82 +1091,82 @@
1085 ** are required. The following table supplies these names */
1086 static const char *const yyTokenName[] = {
1087 /* 0 */ "$",
1088 /* 1 */ "ID",
1089 /* 2 */ "EDGEPT",
1090 /* 3 */ "EOL",
1091 /* 4 */ "ASSIGN",
1092 /* 5 */ "PLACENAME",
1093 /* 6 */ "COLON",
1094 /* 7 */ "FILL",
1095 /* 8 */ "COLOR",
1096 /* 9 */ "PRINT",
1097 /* 10 */ "STRING",
1098 /* 11 */ "COMMA",
1099 /* 12 */ "CLASSNAME",
1100 /* 13 */ "LB",
1101 /* 14 */ "RB",
1102 /* 15 */ "UP",
1103 /* 16 */ "DOWN",
1104 /* 17 */ "LEFT",
1105 /* 18 */ "RIGHT",
1106 /* 19 */ "PERCENT",
1107 /* 20 */ "CLOSE",
1108 /* 21 */ "CHOP",
1109 /* 22 */ "FROM",
1110 /* 23 */ "TO",
1111 /* 24 */ "THEN",
1112 /* 25 */ "AT",
1113 /* 26 */ "WITH",
1114 /* 27 */ "SAME",
1115 /* 28 */ "AS",
1116 /* 29 */ "FIT",
1117 /* 30 */ "UNTIL",
1118 /* 31 */ "EVEN",
1119 /* 32 */ "AND",
1120 /* 33 */ "DOT_E",
1121 /* 34 */ "HEIGHT",
1122 /* 35 */ "WIDTH",
1123 /* 36 */ "RADIUS",
1124 /* 37 */ "DIAMETER",
1125 /* 38 */ "THICKNESS",
1126 /* 39 */ "DOTTED",
1127 /* 40 */ "DASHED",
1128 /* 41 */ "CW",
1129 /* 42 */ "CCW",
1130 /* 43 */ "LARROW",
1131 /* 44 */ "RARROW",
1132 /* 45 */ "LRARROW",
1133 /* 46 */ "INVIS",
1134 /* 47 */ "CENTER",
1135 /* 48 */ "LJUST",
1136 /* 49 */ "RJUST",
1137 /* 50 */ "ABOVE",
1138 /* 51 */ "BELOW",
1139 /* 52 */ "ITALIC",
1140 /* 53 */ "BOLD",
1141 /* 54 */ "ALIGNED",
1142 /* 55 */ "PLUS",
1143 /* 56 */ "MINUS",
1144 /* 57 */ "LP",
1145 /* 58 */ "RP",
1146 /* 59 */ "OF",
1147 /* 60 */ "HEADING",
1148 /* 61 */ "WAY",
1149 /* 62 */ "BETWEEN",
1150 /* 63 */ "THE",
1151 /* 64 */ "DOT_L",
1152 /* 65 */ "START",
1153 /* 66 */ "END",
1154 /* 67 */ "NTH",
1155 /* 68 */ "VERTEX",
1156 /* 69 */ "IN",
1157 /* 70 */ "DOT_U",
1158 /* 71 */ "LAST",
1159 /* 72 */ "STAR",
1160 /* 73 */ "SLASH",
1161 /* 74 */ "UMINUS",
1162 /* 75 */ "NUMBER",
1163 /* 76 */ "FUNC1",
1164 /* 77 */ "FUNC2",
1165 /* 78 */ "X",
1166 /* 79 */ "Y",
@@ -1215,141 +1221,145 @@
1215 /* 6 */ "element ::= PLACENAME COLON unnamed_element",
1216 /* 7 */ "element ::= PLACENAME COLON position",
1217 /* 8 */ "element ::= unnamed_element",
1218 /* 9 */ "element ::= print prlist",
1219 /* 10 */ "rvalue ::= PLACENAME",
1220 /* 11 */ "pritem ::= rvalue",
1221 /* 12 */ "pritem ::= STRING",
1222 /* 13 */ "prsep ::= COMMA",
1223 /* 14 */ "unnamed_element ::= basetype attribute_list",
1224 /* 15 */ "basetype ::= CLASSNAME",
1225 /* 16 */ "basetype ::= STRING textposition",
1226 /* 17 */ "basetype ::= LB savelist element_list RB",
1227 /* 18 */ "savelist ::=",
1228 /* 19 */ "attribute_list ::= expr",
1229 /* 20 */ "attribute_list ::= expr PERCENT",
1230 /* 21 */ "attribute ::= numproperty expr PERCENT",
1231 /* 22 */ "attribute ::= numproperty expr",
1232 /* 23 */ "attribute ::= dashproperty expr",
1233 /* 24 */ "attribute ::= dashproperty",
1234 /* 25 */ "attribute ::= colorproperty rvalue",
1235 /* 26 */ "attribute ::= direction expr PERCENT",
1236 /* 27 */ "attribute ::= direction expr",
1237 /* 28 */ "attribute ::= direction",
1238 /* 29 */ "attribute ::= direction even position",
1239 /* 30 */ "attribute ::= CLOSE",
1240 /* 31 */ "attribute ::= CHOP",
1241 /* 32 */ "attribute ::= FROM position",
1242 /* 33 */ "attribute ::= TO position",
1243 /* 34 */ "attribute ::= THEN",
1244 /* 35 */ "attribute ::= AT position",
1245 /* 36 */ "attribute ::= SAME",
1246 /* 37 */ "attribute ::= SAME AS object",
1247 /* 38 */ "attribute ::= STRING textposition",
1248 /* 39 */ "attribute ::= FIT",
1249 /* 40 */ "with ::= DOT_E edge AT position",
1250 /* 41 */ "with ::= edge AT position",
1251 /* 42 */ "numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS",
1252 /* 43 */ "boolproperty ::= CW",
1253 /* 44 */ "boolproperty ::= CCW",
1254 /* 45 */ "boolproperty ::= LARROW",
1255 /* 46 */ "boolproperty ::= RARROW",
1256 /* 47 */ "boolproperty ::= LRARROW",
1257 /* 48 */ "boolproperty ::= INVIS",
1258 /* 49 */ "textposition ::=",
1259 /* 50 */ "textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED",
1260 /* 51 */ "position ::= expr COMMA expr",
1261 /* 52 */ "position ::= place PLUS expr COMMA expr",
1262 /* 53 */ "position ::= place MINUS expr COMMA expr",
1263 /* 54 */ "position ::= place PLUS LP expr COMMA expr RP",
1264 /* 55 */ "position ::= place MINUS LP expr COMMA expr RP",
1265 /* 56 */ "position ::= LP position COMMA position RP",
1266 /* 57 */ "position ::= LP position RP",
1267 /* 58 */ "position ::= expr between position AND position",
1268 /* 59 */ "position ::= expr ABOVE position",
1269 /* 60 */ "position ::= expr BELOW position",
1270 /* 61 */ "position ::= expr LEFT OF position",
1271 /* 62 */ "position ::= expr RIGHT OF position",
1272 /* 63 */ "position ::= expr EDGEPT OF position",
1273 /* 64 */ "position ::= expr HEADING expr FROM position",
1274 /* 65 */ "place ::= object",
1275 /* 66 */ "place ::= object DOT_E edge",
1276 /* 67 */ "place ::= object DOT_L START",
1277 /* 68 */ "place ::= object DOT_L END",
1278 /* 69 */ "place ::= START OF object",
1279 /* 70 */ "place ::= END OF object",
1280 /* 71 */ "place ::= edge OF object",
1281 /* 72 */ "place ::= NTH VERTEX OF object",
1282 /* 73 */ "object ::= nth",
1283 /* 74 */ "object ::= nth OF|IN object",
1284 /* 75 */ "objectname ::= PLACENAME",
1285 /* 76 */ "objectname ::= objectname DOT_U PLACENAME",
1286 /* 77 */ "nth ::= NTH CLASSNAME",
1287 /* 78 */ "nth ::= NTH LAST CLASSNAME",
1288 /* 79 */ "nth ::= LAST CLASSNAME",
1289 /* 80 */ "nth ::= LAST",
1290 /* 81 */ "nth ::= NTH LB RB",
1291 /* 82 */ "nth ::= NTH LAST LB RB",
1292 /* 83 */ "nth ::= LAST LB RB",
1293 /* 84 */ "expr ::= expr PLUS expr",
1294 /* 85 */ "expr ::= expr MINUS expr",
1295 /* 86 */ "expr ::= expr STAR expr",
1296 /* 87 */ "expr ::= expr SLASH expr",
1297 /* 88 */ "expr ::= MINUS expr",
1298 /* 89 */ "expr ::= PLUS expr",
1299 /* 90 */ "expr ::= LP expr RP",
1300 /* 91 */ "expr ::= NUMBER",
1301 /* 92 */ "expr ::= ID",
1302 /* 93 */ "expr ::= FUNC1 LP expr RP",
1303 /* 94 */ "expr ::= FUNC2 LP expr COMMA expr RP",
1304 /* 95 */ "expr ::= object DOT_L locproperty",
1305 /* 96 */ "expr ::= object DOT_L numproperty",
1306 /* 97 */ "expr ::= object DOT_L dashproperty",
1307 /* 98 */ "expr ::= object DOT_L colorproperty",
1308 /* 99 */ "expr ::= object DOT_E edge DOT_L X",
1309 /* 100 */ "expr ::= object DOT_E edge DOT_L Y",
1310 /* 101 */ "expr ::= LP locproperty OF object RP",
1311 /* 102 */ "expr ::= LP dashproperty OF object RP",
1312 /* 103 */ "expr ::= LP numproperty OF object RP",
1313 /* 104 */ "expr ::= LP colorproperty OF object RP",
1314 /* 105 */ "expr ::= NTH VERTEX OF object DOT_L X",
1315 /* 106 */ "expr ::= NTH VERTEX OF object DOT_L Y",
1316 /* 107 */ "lvalue ::= ID",
1317 /* 108 */ "lvalue ::= FILL",
1318 /* 109 */ "lvalue ::= COLOR",
1319 /* 110 */ "rvalue ::= expr",
1320 /* 111 */ "print ::= PRINT",
1321 /* 112 */ "prlist ::= pritem",
1322 /* 113 */ "prlist ::= prlist prsep pritem",
1323 /* 114 */ "direction ::= UP",
1324 /* 115 */ "direction ::= DOWN",
1325 /* 116 */ "direction ::= LEFT",
1326 /* 117 */ "direction ::= RIGHT",
1327 /* 118 */ "attribute_list ::= alist",
1328 /* 119 */ "alist ::=",
1329 /* 120 */ "alist ::= alist attribute",
1330 /* 121 */ "attribute ::= boolproperty",
1331 /* 122 */ "attribute ::= WITH withclause",
1332 /* 123 */ "even ::= UNTIL EVEN WITH",
1333 /* 124 */ "even ::= EVEN WITH",
1334 /* 125 */ "withclause ::= with",
1335 /* 126 */ "withclause ::= withclause AND with",
1336 /* 127 */ "dashproperty ::= DOTTED",
1337 /* 128 */ "dashproperty ::= DASHED",
1338 /* 129 */ "colorproperty ::= FILL",
1339 /* 130 */ "colorproperty ::= COLOR",
1340 /* 131 */ "position ::= place",
1341 /* 132 */ "between ::= WAY BETWEEN",
1342 /* 133 */ "between ::= BETWEEN",
1343 /* 134 */ "between ::= OF THE WAY BETWEEN",
1344 /* 135 */ "object ::= objectname",
1345 /* 136 */ "locproperty ::= X|Y",
1346 /* 137 */ "edge ::= EDGEPT",
1347 /* 138 */ "edge ::= TOP",
1348 /* 139 */ "edge ::= BOTTOM",
1349 /* 140 */ "edge ::= LEFT",
1350 /* 141 */ "edge ::= RIGHT",
 
 
 
 
1351 };
1352 #endif /* NDEBUG */
1353
1354
1355 #if YYSTACKDEPTH<=0
@@ -1473,22 +1483,22 @@
1473 ** inside the C code.
1474 */
1475 /********* Begin destructor definitions ***************************************/
1476 case 82: /* element_list */
1477 {
1478 #line 422 "pikchr.y"
1479 pik_elist_free(p,(yypminor->yy42));
1480 #line 1505 "pikchr.c"
1481 }
1482 break;
1483 case 83: /* element */
1484 case 84: /* unnamed_element */
1485 case 85: /* basetype */
1486 {
1487 #line 424 "pikchr.y"
1488 pik_elem_free(p,(yypminor->yy24));
1489 #line 1514 "pikchr.c"
1490 }
1491 break;
1492 /********* End destructor definitions *****************************************/
1493 default: break; /* If no destructor action specified: do nothing */
1494 }
@@ -1702,14 +1712,14 @@
1702 #endif
1703 while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
1704 /* Here code is inserted which will execute if the parser
1705 ** stack every overflows */
1706 /******** Begin %stack_overflow code ******************************************/
1707 #line 453 "pikchr.y"
1708
1709 pik_error(p, 0, "parser stack overflow");
1710 #line 1735 "pikchr.c"
1711 /******** End %stack_overflow code ********************************************/
1712 pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */
1713 pik_parserCTX_STORE
1714 }
1715
@@ -1788,141 +1798,145 @@
1788 83, /* (6) element ::= PLACENAME COLON unnamed_element */
1789 83, /* (7) element ::= PLACENAME COLON position */
1790 83, /* (8) element ::= unnamed_element */
1791 83, /* (9) element ::= print prlist */
1792 99, /* (10) rvalue ::= PLACENAME */
1793 105, /* (11) pritem ::= rvalue */
1794 105, /* (12) pritem ::= STRING */
1795 106, /* (13) prsep ::= COMMA */
1796 84, /* (14) unnamed_element ::= basetype attribute_list */
1797 85, /* (15) basetype ::= CLASSNAME */
1798 85, /* (16) basetype ::= STRING textposition */
1799 85, /* (17) basetype ::= LB savelist element_list RB */
1800 108, /* (18) savelist ::= */
1801 107, /* (19) attribute_list ::= expr */
1802 107, /* (20) attribute_list ::= expr PERCENT */
1803 110, /* (21) attribute ::= numproperty expr PERCENT */
1804 110, /* (22) attribute ::= numproperty expr */
1805 110, /* (23) attribute ::= dashproperty expr */
1806 110, /* (24) attribute ::= dashproperty */
1807 110, /* (25) attribute ::= colorproperty rvalue */
1808 110, /* (26) attribute ::= direction expr PERCENT */
1809 110, /* (27) attribute ::= direction expr */
1810 110, /* (28) attribute ::= direction */
1811 110, /* (29) attribute ::= direction even position */
1812 110, /* (30) attribute ::= CLOSE */
1813 110, /* (31) attribute ::= CHOP */
1814 110, /* (32) attribute ::= FROM position */
1815 110, /* (33) attribute ::= TO position */
1816 110, /* (34) attribute ::= THEN */
1817 110, /* (35) attribute ::= AT position */
1818 110, /* (36) attribute ::= SAME */
1819 110, /* (37) attribute ::= SAME AS object */
1820 110, /* (38) attribute ::= STRING textposition */
1821 110, /* (39) attribute ::= FIT */
1822 113, /* (40) with ::= DOT_E edge AT position */
1823 113, /* (41) with ::= edge AT position */
1824 87, /* (42) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
1825 111, /* (43) boolproperty ::= CW */
1826 111, /* (44) boolproperty ::= CCW */
1827 111, /* (45) boolproperty ::= LARROW */
1828 111, /* (46) boolproperty ::= RARROW */
1829 111, /* (47) boolproperty ::= LRARROW */
1830 111, /* (48) boolproperty ::= INVIS */
1831 98, /* (49) textposition ::= */
1832 98, /* (50) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED */
1833 93, /* (51) position ::= expr COMMA expr */
1834 93, /* (52) position ::= place PLUS expr COMMA expr */
1835 93, /* (53) position ::= place MINUS expr COMMA expr */
1836 93, /* (54) position ::= place PLUS LP expr COMMA expr RP */
1837 93, /* (55) position ::= place MINUS LP expr COMMA expr RP */
1838 93, /* (56) position ::= LP position COMMA position RP */
1839 93, /* (57) position ::= LP position RP */
1840 93, /* (58) position ::= expr between position AND position */
1841 93, /* (59) position ::= expr ABOVE position */
1842 93, /* (60) position ::= expr BELOW position */
1843 93, /* (61) position ::= expr LEFT OF position */
1844 93, /* (62) position ::= expr RIGHT OF position */
1845 93, /* (63) position ::= expr EDGEPT OF position */
1846 93, /* (64) position ::= expr HEADING expr FROM position */
1847 94, /* (65) place ::= object */
1848 94, /* (66) place ::= object DOT_E edge */
1849 94, /* (67) place ::= object DOT_L START */
1850 94, /* (68) place ::= object DOT_L END */
1851 94, /* (69) place ::= START OF object */
1852 94, /* (70) place ::= END OF object */
1853 94, /* (71) place ::= edge OF object */
1854 94, /* (72) place ::= NTH VERTEX OF object */
1855 95, /* (73) object ::= nth */
1856 95, /* (74) object ::= nth OF|IN object */
1857 96, /* (75) objectname ::= PLACENAME */
1858 96, /* (76) objectname ::= objectname DOT_U PLACENAME */
1859 97, /* (77) nth ::= NTH CLASSNAME */
1860 97, /* (78) nth ::= NTH LAST CLASSNAME */
1861 97, /* (79) nth ::= LAST CLASSNAME */
1862 97, /* (80) nth ::= LAST */
1863 97, /* (81) nth ::= NTH LB RB */
1864 97, /* (82) nth ::= NTH LAST LB RB */
1865 97, /* (83) nth ::= LAST LB RB */
1866 86, /* (84) expr ::= expr PLUS expr */
1867 86, /* (85) expr ::= expr MINUS expr */
1868 86, /* (86) expr ::= expr STAR expr */
1869 86, /* (87) expr ::= expr SLASH expr */
1870 86, /* (88) expr ::= MINUS expr */
1871 86, /* (89) expr ::= PLUS expr */
1872 86, /* (90) expr ::= LP expr RP */
1873 86, /* (91) expr ::= NUMBER */
1874 86, /* (92) expr ::= ID */
1875 86, /* (93) expr ::= FUNC1 LP expr RP */
1876 86, /* (94) expr ::= FUNC2 LP expr COMMA expr RP */
1877 86, /* (95) expr ::= object DOT_L locproperty */
1878 86, /* (96) expr ::= object DOT_L numproperty */
1879 86, /* (97) expr ::= object DOT_L dashproperty */
1880 86, /* (98) expr ::= object DOT_L colorproperty */
1881 86, /* (99) expr ::= object DOT_E edge DOT_L X */
1882 86, /* (100) expr ::= object DOT_E edge DOT_L Y */
1883 86, /* (101) expr ::= LP locproperty OF object RP */
1884 86, /* (102) expr ::= LP dashproperty OF object RP */
1885 86, /* (103) expr ::= LP numproperty OF object RP */
1886 86, /* (104) expr ::= LP colorproperty OF object RP */
1887 86, /* (105) expr ::= NTH VERTEX OF object DOT_L X */
1888 86, /* (106) expr ::= NTH VERTEX OF object DOT_L Y */
1889 100, /* (107) lvalue ::= ID */
1890 100, /* (108) lvalue ::= FILL */
1891 100, /* (109) lvalue ::= COLOR */
1892 99, /* (110) rvalue ::= expr */
1893 103, /* (111) print ::= PRINT */
1894 104, /* (112) prlist ::= pritem */
1895 104, /* (113) prlist ::= prlist prsep pritem */
1896 89, /* (114) direction ::= UP */
1897 89, /* (115) direction ::= DOWN */
1898 89, /* (116) direction ::= LEFT */
1899 89, /* (117) direction ::= RIGHT */
1900 107, /* (118) attribute_list ::= alist */
1901 109, /* (119) alist ::= */
1902 109, /* (120) alist ::= alist attribute */
1903 110, /* (121) attribute ::= boolproperty */
1904 110, /* (122) attribute ::= WITH withclause */
1905 101, /* (123) even ::= UNTIL EVEN WITH */
1906 101, /* (124) even ::= EVEN WITH */
1907 112, /* (125) withclause ::= with */
1908 112, /* (126) withclause ::= withclause AND with */
1909 90, /* (127) dashproperty ::= DOTTED */
1910 90, /* (128) dashproperty ::= DASHED */
1911 91, /* (129) colorproperty ::= FILL */
1912 91, /* (130) colorproperty ::= COLOR */
1913 93, /* (131) position ::= place */
1914 114, /* (132) between ::= WAY BETWEEN */
1915 114, /* (133) between ::= BETWEEN */
1916 114, /* (134) between ::= OF THE WAY BETWEEN */
1917 95, /* (135) object ::= objectname */
1918 92, /* (136) locproperty ::= X|Y */
1919 88, /* (137) edge ::= EDGEPT */
1920 88, /* (138) edge ::= TOP */
1921 88, /* (139) edge ::= BOTTOM */
1922 88, /* (140) edge ::= LEFT */
1923 88, /* (141) edge ::= RIGHT */
 
 
 
 
1924 };
1925
1926 /* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
1927 ** of symbols on the right-hand side of that rule. */
1928 static const signed char yyRuleInfoNRhs[] = {
@@ -1935,141 +1949,145 @@
1935 -3, /* (6) element ::= PLACENAME COLON unnamed_element */
1936 -3, /* (7) element ::= PLACENAME COLON position */
1937 -1, /* (8) element ::= unnamed_element */
1938 -2, /* (9) element ::= print prlist */
1939 -1, /* (10) rvalue ::= PLACENAME */
1940 -1, /* (11) pritem ::= rvalue */
1941 -1, /* (12) pritem ::= STRING */
1942 -1, /* (13) prsep ::= COMMA */
1943 -2, /* (14) unnamed_element ::= basetype attribute_list */
1944 -1, /* (15) basetype ::= CLASSNAME */
1945 -2, /* (16) basetype ::= STRING textposition */
1946 -4, /* (17) basetype ::= LB savelist element_list RB */
1947 0, /* (18) savelist ::= */
1948 -1, /* (19) attribute_list ::= expr */
1949 -2, /* (20) attribute_list ::= expr PERCENT */
1950 -3, /* (21) attribute ::= numproperty expr PERCENT */
1951 -2, /* (22) attribute ::= numproperty expr */
1952 -2, /* (23) attribute ::= dashproperty expr */
1953 -1, /* (24) attribute ::= dashproperty */
1954 -2, /* (25) attribute ::= colorproperty rvalue */
1955 -3, /* (26) attribute ::= direction expr PERCENT */
1956 -2, /* (27) attribute ::= direction expr */
1957 -1, /* (28) attribute ::= direction */
1958 -3, /* (29) attribute ::= direction even position */
1959 -1, /* (30) attribute ::= CLOSE */
1960 -1, /* (31) attribute ::= CHOP */
1961 -2, /* (32) attribute ::= FROM position */
1962 -2, /* (33) attribute ::= TO position */
1963 -1, /* (34) attribute ::= THEN */
1964 -2, /* (35) attribute ::= AT position */
1965 -1, /* (36) attribute ::= SAME */
1966 -3, /* (37) attribute ::= SAME AS object */
1967 -2, /* (38) attribute ::= STRING textposition */
1968 -1, /* (39) attribute ::= FIT */
1969 -4, /* (40) with ::= DOT_E edge AT position */
1970 -3, /* (41) with ::= edge AT position */
1971 -1, /* (42) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
1972 -1, /* (43) boolproperty ::= CW */
1973 -1, /* (44) boolproperty ::= CCW */
1974 -1, /* (45) boolproperty ::= LARROW */
1975 -1, /* (46) boolproperty ::= RARROW */
1976 -1, /* (47) boolproperty ::= LRARROW */
1977 -1, /* (48) boolproperty ::= INVIS */
1978 0, /* (49) textposition ::= */
1979 -2, /* (50) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED */
1980 -3, /* (51) position ::= expr COMMA expr */
1981 -5, /* (52) position ::= place PLUS expr COMMA expr */
1982 -5, /* (53) position ::= place MINUS expr COMMA expr */
1983 -7, /* (54) position ::= place PLUS LP expr COMMA expr RP */
1984 -7, /* (55) position ::= place MINUS LP expr COMMA expr RP */
1985 -5, /* (56) position ::= LP position COMMA position RP */
1986 -3, /* (57) position ::= LP position RP */
1987 -5, /* (58) position ::= expr between position AND position */
1988 -3, /* (59) position ::= expr ABOVE position */
1989 -3, /* (60) position ::= expr BELOW position */
1990 -4, /* (61) position ::= expr LEFT OF position */
1991 -4, /* (62) position ::= expr RIGHT OF position */
1992 -4, /* (63) position ::= expr EDGEPT OF position */
1993 -5, /* (64) position ::= expr HEADING expr FROM position */
1994 -1, /* (65) place ::= object */
1995 -3, /* (66) place ::= object DOT_E edge */
1996 -3, /* (67) place ::= object DOT_L START */
1997 -3, /* (68) place ::= object DOT_L END */
1998 -3, /* (69) place ::= START OF object */
1999 -3, /* (70) place ::= END OF object */
2000 -3, /* (71) place ::= edge OF object */
2001 -4, /* (72) place ::= NTH VERTEX OF object */
2002 -1, /* (73) object ::= nth */
2003 -3, /* (74) object ::= nth OF|IN object */
2004 -1, /* (75) objectname ::= PLACENAME */
2005 -3, /* (76) objectname ::= objectname DOT_U PLACENAME */
2006 -2, /* (77) nth ::= NTH CLASSNAME */
2007 -3, /* (78) nth ::= NTH LAST CLASSNAME */
2008 -2, /* (79) nth ::= LAST CLASSNAME */
2009 -1, /* (80) nth ::= LAST */
2010 -3, /* (81) nth ::= NTH LB RB */
2011 -4, /* (82) nth ::= NTH LAST LB RB */
2012 -3, /* (83) nth ::= LAST LB RB */
2013 -3, /* (84) expr ::= expr PLUS expr */
2014 -3, /* (85) expr ::= expr MINUS expr */
2015 -3, /* (86) expr ::= expr STAR expr */
2016 -3, /* (87) expr ::= expr SLASH expr */
2017 -2, /* (88) expr ::= MINUS expr */
2018 -2, /* (89) expr ::= PLUS expr */
2019 -3, /* (90) expr ::= LP expr RP */
2020 -1, /* (91) expr ::= NUMBER */
2021 -1, /* (92) expr ::= ID */
2022 -4, /* (93) expr ::= FUNC1 LP expr RP */
2023 -6, /* (94) expr ::= FUNC2 LP expr COMMA expr RP */
2024 -3, /* (95) expr ::= object DOT_L locproperty */
2025 -3, /* (96) expr ::= object DOT_L numproperty */
2026 -3, /* (97) expr ::= object DOT_L dashproperty */
2027 -3, /* (98) expr ::= object DOT_L colorproperty */
2028 -5, /* (99) expr ::= object DOT_E edge DOT_L X */
2029 -5, /* (100) expr ::= object DOT_E edge DOT_L Y */
2030 -5, /* (101) expr ::= LP locproperty OF object RP */
2031 -5, /* (102) expr ::= LP dashproperty OF object RP */
2032 -5, /* (103) expr ::= LP numproperty OF object RP */
2033 -5, /* (104) expr ::= LP colorproperty OF object RP */
2034 -6, /* (105) expr ::= NTH VERTEX OF object DOT_L X */
2035 -6, /* (106) expr ::= NTH VERTEX OF object DOT_L Y */
2036 -1, /* (107) lvalue ::= ID */
2037 -1, /* (108) lvalue ::= FILL */
2038 -1, /* (109) lvalue ::= COLOR */
2039 -1, /* (110) rvalue ::= expr */
2040 -1, /* (111) print ::= PRINT */
2041 -1, /* (112) prlist ::= pritem */
2042 -3, /* (113) prlist ::= prlist prsep pritem */
2043 -1, /* (114) direction ::= UP */
2044 -1, /* (115) direction ::= DOWN */
2045 -1, /* (116) direction ::= LEFT */
2046 -1, /* (117) direction ::= RIGHT */
2047 -1, /* (118) attribute_list ::= alist */
2048 0, /* (119) alist ::= */
2049 -2, /* (120) alist ::= alist attribute */
2050 -1, /* (121) attribute ::= boolproperty */
2051 -2, /* (122) attribute ::= WITH withclause */
2052 -3, /* (123) even ::= UNTIL EVEN WITH */
2053 -2, /* (124) even ::= EVEN WITH */
2054 -1, /* (125) withclause ::= with */
2055 -3, /* (126) withclause ::= withclause AND with */
2056 -1, /* (127) dashproperty ::= DOTTED */
2057 -1, /* (128) dashproperty ::= DASHED */
2058 -1, /* (129) colorproperty ::= FILL */
2059 -1, /* (130) colorproperty ::= COLOR */
2060 -1, /* (131) position ::= place */
2061 -2, /* (132) between ::= WAY BETWEEN */
2062 -1, /* (133) between ::= BETWEEN */
2063 -4, /* (134) between ::= OF THE WAY BETWEEN */
2064 -1, /* (135) object ::= objectname */
2065 -1, /* (136) locproperty ::= X|Y */
2066 -1, /* (137) edge ::= EDGEPT */
2067 -1, /* (138) edge ::= TOP */
2068 -1, /* (139) edge ::= BOTTOM */
2069 -1, /* (140) edge ::= LEFT */
2070 -1, /* (141) edge ::= RIGHT */
 
 
 
 
2071 };
2072
2073 static void yy_accept(yyParser*); /* Forward Declaration */
2074
2075 /*
@@ -2156,587 +2174,595 @@
2156 ** break;
2157 */
2158 /********** Begin reduce actions **********************************************/
2159 YYMINORTYPE yylhsminor;
2160 case 0: /* document ::= element_list */
2161 #line 457 "pikchr.y"
2162 {pik_render(p,yymsp[0].minor.yy42);}
2163 #line 2188 "pikchr.c"
2164 break;
2165 case 1: /* element_list ::= element */
2166 #line 460 "pikchr.y"
2167 { yylhsminor.yy42 = pik_elist_append(p,0,yymsp[0].minor.yy24); }
2168 #line 2193 "pikchr.c"
2169 yymsp[0].minor.yy42 = yylhsminor.yy42;
2170 break;
2171 case 2: /* element_list ::= element_list EOL element */
2172 #line 462 "pikchr.y"
2173 { yylhsminor.yy42 = pik_elist_append(p,yymsp[-2].minor.yy42,yymsp[0].minor.yy24); }
2174 #line 2199 "pikchr.c"
2175 yymsp[-2].minor.yy42 = yylhsminor.yy42;
2176 break;
2177 case 3: /* element ::= */
2178 #line 465 "pikchr.y"
2179 { yymsp[1].minor.yy24 = 0; }
2180 #line 2205 "pikchr.c"
2181 break;
2182 case 4: /* element ::= direction */
2183 #line 466 "pikchr.y"
2184 { pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy24=0; }
2185 #line 2210 "pikchr.c"
2186 yymsp[0].minor.yy24 = yylhsminor.yy24;
2187 break;
2188 case 5: /* element ::= lvalue ASSIGN rvalue */
2189 #line 467 "pikchr.y"
2190 {pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy83,&yymsp[-1].minor.yy0); yylhsminor.yy24=0;}
2191 #line 2216 "pikchr.c"
2192 yymsp[-2].minor.yy24 = yylhsminor.yy24;
2193 break;
2194 case 6: /* element ::= PLACENAME COLON unnamed_element */
2195 #line 469 "pikchr.y"
2196 { yylhsminor.yy24 = yymsp[0].minor.yy24; pik_elem_setname(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0); }
2197 #line 2222 "pikchr.c"
2198 yymsp[-2].minor.yy24 = yylhsminor.yy24;
2199 break;
2200 case 7: /* element ::= PLACENAME COLON position */
2201 #line 471 "pikchr.y"
2202 { yylhsminor.yy24 = pik_elem_new(p,0,0,0);
2203 if(yylhsminor.yy24){ yylhsminor.yy24->ptAt = yymsp[0].minor.yy49; pik_elem_setname(p,yylhsminor.yy24,&yymsp[-2].minor.yy0); }}
2204 #line 2229 "pikchr.c"
2205 yymsp[-2].minor.yy24 = yylhsminor.yy24;
2206 break;
2207 case 8: /* element ::= unnamed_element */
2208 #line 473 "pikchr.y"
2209 {yylhsminor.yy24 = yymsp[0].minor.yy24;}
2210 #line 2235 "pikchr.c"
2211 yymsp[0].minor.yy24 = yylhsminor.yy24;
2212 break;
2213 case 9: /* element ::= print prlist */
2214 #line 474 "pikchr.y"
2215 {pik_append(p,"<br>\n",5); yymsp[-1].minor.yy24=0;}
2216 #line 2241 "pikchr.c"
2217 break;
2218 case 10: /* rvalue ::= PLACENAME */
2219 #line 484 "pikchr.y"
2220 {yylhsminor.yy83 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2221 #line 2246 "pikchr.c"
2222 yymsp[0].minor.yy83 = yylhsminor.yy83;
2223 break;
2224 case 11: /* pritem ::= rvalue */
2225 #line 489 "pikchr.y"
2226 {pik_append_num(p,"",yymsp[0].minor.yy83);}
2227 #line 2252 "pikchr.c"
2228 break;
2229 case 12: /* pritem ::= STRING */
2230 #line 490 "pikchr.y"
2231 {pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2232 #line 2257 "pikchr.c"
2233 break;
2234 case 13: /* prsep ::= COMMA */
2235 #line 491 "pikchr.y"
2236 {pik_append(p, " ", 1);}
2237 #line 2262 "pikchr.c"
2238 break;
2239 case 14: /* unnamed_element ::= basetype attribute_list */
2240 #line 494 "pikchr.y"
2241 {yylhsminor.yy24 = yymsp[-1].minor.yy24; pik_after_adding_attributes(p,yylhsminor.yy24);}
2242 #line 2267 "pikchr.c"
2243 yymsp[-1].minor.yy24 = yylhsminor.yy24;
2244 break;
2245 case 15: /* basetype ::= CLASSNAME */
2246 #line 496 "pikchr.y"
2247 {yylhsminor.yy24 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2248 #line 2273 "pikchr.c"
2249 yymsp[0].minor.yy24 = yylhsminor.yy24;
2250 break;
2251 case 16: /* basetype ::= STRING textposition */
2252 #line 498 "pikchr.y"
2253 {yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy52; yylhsminor.yy24 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2254 #line 2279 "pikchr.c"
2255 yymsp[-1].minor.yy24 = yylhsminor.yy24;
2256 break;
2257 case 17: /* basetype ::= LB savelist element_list RB */
2258 #line 500 "pikchr.y"
2259 { p->list = yymsp[-2].minor.yy42; yymsp[-3].minor.yy24 = pik_elem_new(p,0,0,yymsp[-1].minor.yy42); if(yymsp[-3].minor.yy24) yymsp[-3].minor.yy24->errTok = yymsp[0].minor.yy0; }
2260 #line 2285 "pikchr.c"
2261 break;
2262 case 18: /* savelist ::= */
2263 #line 505 "pikchr.y"
2264 {yymsp[1].minor.yy42 = p->list; p->list = 0;}
2265 #line 2290 "pikchr.c"
2266 break;
2267 case 19: /* attribute_list ::= expr */
2268 #line 512 "pikchr.y"
2269 { pik_add_direction(p,0,&yymsp[0].minor.yy83,0);}
2270 #line 2295 "pikchr.c"
2271 break;
2272 case 20: /* attribute_list ::= expr PERCENT */
2273 #line 513 "pikchr.y"
2274 { pik_add_direction(p,0,&yymsp[-1].minor.yy83,1);}
2275 #line 2300 "pikchr.c"
2276 break;
2277 case 21: /* attribute ::= numproperty expr PERCENT */
2278 #line 518 "pikchr.y"
2279 { pik_set_numprop(p,&yymsp[-2].minor.yy0,0.0,yymsp[-1].minor.yy83/100.0); }
2280 #line 2305 "pikchr.c"
2281 break;
2282 case 22: /* attribute ::= numproperty expr */
2283 case 25: /* attribute ::= colorproperty rvalue */ yytestcase(yyruleno==25);
2284 #line 519 "pikchr.y"
2285 { pik_set_numprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy83,0.0); }
2286 #line 2311 "pikchr.c"
2287 break;
2288 case 23: /* attribute ::= dashproperty expr */
2289 #line 520 "pikchr.y"
2290 { pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy83); }
2291 #line 2316 "pikchr.c"
2292 break;
2293 case 24: /* attribute ::= dashproperty */
2294 #line 521 "pikchr.y"
2295 { pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2296 #line 2321 "pikchr.c"
2297 break;
2298 case 26: /* attribute ::= direction expr PERCENT */
2299 #line 524 "pikchr.y"
2300 { pik_add_direction(p,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy83,1);}
2301 #line 2326 "pikchr.c"
2302 break;
2303 case 27: /* attribute ::= direction expr */
2304 #line 525 "pikchr.y"
2305 { pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy83,0);}
2306 #line 2331 "pikchr.c"
2307 break;
2308 case 28: /* attribute ::= direction */
2309 #line 526 "pikchr.y"
2310 { pik_add_direction(p,&yymsp[0].minor.yy0,0,0); }
2311 #line 2336 "pikchr.c"
2312 break;
2313 case 29: /* attribute ::= direction even position */
2314 #line 527 "pikchr.y"
2315 {pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy49);}
2316 #line 2341 "pikchr.c"
2317 break;
2318 case 30: /* attribute ::= CLOSE */
2319 #line 528 "pikchr.y"
2320 { pik_close_path(p,&yymsp[0].minor.yy0); }
2321 #line 2346 "pikchr.c"
2322 break;
2323 case 31: /* attribute ::= CHOP */
2324 #line 529 "pikchr.y"
2325 { p->cur->bChop = 1; }
2326 #line 2351 "pikchr.c"
2327 break;
2328 case 32: /* attribute ::= FROM position */
2329 #line 530 "pikchr.y"
2330 { pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy49); }
2331 #line 2356 "pikchr.c"
2332 break;
2333 case 33: /* attribute ::= TO position */
2334 #line 531 "pikchr.y"
2335 { pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy49); }
2336 #line 2361 "pikchr.c"
2337 break;
2338 case 34: /* attribute ::= THEN */
2339 #line 532 "pikchr.y"
2340 { pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2341 #line 2366 "pikchr.c"
2342 break;
2343 case 35: /* attribute ::= AT position */
2344 #line 534 "pikchr.y"
2345 { pik_set_at(p,0,&yymsp[0].minor.yy49,&yymsp[-1].minor.yy0); }
2346 #line 2371 "pikchr.c"
2347 break;
2348 case 36: /* attribute ::= SAME */
2349 #line 536 "pikchr.y"
2350 {pik_same(p,0,&yymsp[0].minor.yy0);}
2351 #line 2376 "pikchr.c"
2352 break;
2353 case 37: /* attribute ::= SAME AS object */
2354 #line 537 "pikchr.y"
2355 {pik_same(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0);}
2356 #line 2381 "pikchr.c"
2357 break;
2358 case 38: /* attribute ::= STRING textposition */
2359 #line 538 "pikchr.y"
2360 {pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy52);}
2361 #line 2386 "pikchr.c"
2362 break;
2363 case 39: /* attribute ::= FIT */
2364 #line 539 "pikchr.y"
2365 {pik_size_to_fit(p,&yymsp[0].minor.yy0); }
2366 #line 2391 "pikchr.c"
2367 break;
2368 case 40: /* with ::= DOT_E edge AT position */
2369 case 41: /* with ::= edge AT position */ yytestcase(yyruleno==41);
2370 #line 546 "pikchr.y"
2371 { pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy49,&yymsp[-1].minor.yy0); }
2372 #line 2397 "pikchr.c"
2373 break;
2374 case 42: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2375 #line 550 "pikchr.y"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2376 {yylhsminor.yy0 = yymsp[0].minor.yy0;}
2377 #line 2402 "pikchr.c"
2378 yymsp[0].minor.yy0 = yylhsminor.yy0;
2379 break;
2380 case 43: /* boolproperty ::= CW */
2381 #line 561 "pikchr.y"
2382 {p->cur->cw = 1;}
2383 #line 2408 "pikchr.c"
2384 break;
2385 case 44: /* boolproperty ::= CCW */
2386 #line 562 "pikchr.y"
2387 {p->cur->cw = 0;}
2388 #line 2413 "pikchr.c"
2389 break;
2390 case 45: /* boolproperty ::= LARROW */
2391 #line 563 "pikchr.y"
2392 {p->cur->larrow=1; p->cur->rarrow=0; }
2393 #line 2418 "pikchr.c"
2394 break;
2395 case 46: /* boolproperty ::= RARROW */
2396 #line 564 "pikchr.y"
2397 {p->cur->larrow=0; p->cur->rarrow=1; }
2398 #line 2423 "pikchr.c"
2399 break;
2400 case 47: /* boolproperty ::= LRARROW */
2401 #line 565 "pikchr.y"
2402 {p->cur->larrow=1; p->cur->rarrow=1; }
2403 #line 2428 "pikchr.c"
2404 break;
2405 case 48: /* boolproperty ::= INVIS */
2406 #line 566 "pikchr.y"
2407 {p->cur->sw = 0.0;}
2408 #line 2433 "pikchr.c"
2409 break;
2410 case 49: /* textposition ::= */
2411 #line 568 "pikchr.y"
2412 {yymsp[1].minor.yy52 = 0;}
2413 #line 2438 "pikchr.c"
2414 break;
2415 case 50: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED */
2416 #line 571 "pikchr.y"
2417 {yylhsminor.yy52 = pik_text_position(p,yymsp[-1].minor.yy52,&yymsp[0].minor.yy0);}
2418 #line 2443 "pikchr.c"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2419 yymsp[-1].minor.yy52 = yylhsminor.yy52;
2420 break;
2421 case 51: /* position ::= expr COMMA expr */
2422 #line 574 "pikchr.y"
2423 {yylhsminor.yy49.x=yymsp[-2].minor.yy83; yylhsminor.yy49.y=yymsp[0].minor.yy83;}
2424 #line 2449 "pikchr.c"
2425 yymsp[-2].minor.yy49 = yylhsminor.yy49;
2426 break;
2427 case 52: /* position ::= place PLUS expr COMMA expr */
2428 #line 576 "pikchr.y"
2429 {yylhsminor.yy49.x=yymsp[-4].minor.yy49.x+yymsp[-2].minor.yy83; yylhsminor.yy49.y=yymsp[-4].minor.yy49.y+yymsp[0].minor.yy83;}
2430 #line 2455 "pikchr.c"
2431 yymsp[-4].minor.yy49 = yylhsminor.yy49;
2432 break;
2433 case 53: /* position ::= place MINUS expr COMMA expr */
2434 #line 577 "pikchr.y"
2435 {yylhsminor.yy49.x=yymsp[-4].minor.yy49.x-yymsp[-2].minor.yy83; yylhsminor.yy49.y=yymsp[-4].minor.yy49.y-yymsp[0].minor.yy83;}
2436 #line 2461 "pikchr.c"
2437 yymsp[-4].minor.yy49 = yylhsminor.yy49;
2438 break;
2439 case 54: /* position ::= place PLUS LP expr COMMA expr RP */
2440 #line 579 "pikchr.y"
2441 {yylhsminor.yy49.x=yymsp[-6].minor.yy49.x+yymsp[-3].minor.yy83; yylhsminor.yy49.y=yymsp[-6].minor.yy49.y+yymsp[-1].minor.yy83;}
2442 #line 2467 "pikchr.c"
2443 yymsp[-6].minor.yy49 = yylhsminor.yy49;
2444 break;
2445 case 55: /* position ::= place MINUS LP expr COMMA expr RP */
2446 #line 581 "pikchr.y"
2447 {yylhsminor.yy49.x=yymsp[-6].minor.yy49.x-yymsp[-3].minor.yy83; yylhsminor.yy49.y=yymsp[-6].minor.yy49.y-yymsp[-1].minor.yy83;}
2448 #line 2473 "pikchr.c"
2449 yymsp[-6].minor.yy49 = yylhsminor.yy49;
2450 break;
2451 case 56: /* position ::= LP position COMMA position RP */
2452 #line 582 "pikchr.y"
2453 {yymsp[-4].minor.yy49.x=yymsp[-3].minor.yy49.x; yymsp[-4].minor.yy49.y=yymsp[-1].minor.yy49.y;}
2454 #line 2479 "pikchr.c"
2455 break;
2456 case 57: /* position ::= LP position RP */
2457 #line 583 "pikchr.y"
2458 {yymsp[-2].minor.yy49=yymsp[-1].minor.yy49;}
2459 #line 2484 "pikchr.c"
2460 break;
2461 case 58: /* position ::= expr between position AND position */
2462 #line 585 "pikchr.y"
2463 {yylhsminor.yy49 = pik_position_between(p,yymsp[-4].minor.yy83,yymsp[-2].minor.yy49,yymsp[0].minor.yy49);}
2464 #line 2489 "pikchr.c"
2465 yymsp[-4].minor.yy49 = yylhsminor.yy49;
2466 break;
2467 case 59: /* position ::= expr ABOVE position */
2468 #line 586 "pikchr.y"
2469 {yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.y += yymsp[-2].minor.yy83;}
2470 #line 2495 "pikchr.c"
2471 yymsp[-2].minor.yy49 = yylhsminor.yy49;
2472 break;
2473 case 60: /* position ::= expr BELOW position */
2474 #line 587 "pikchr.y"
2475 {yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.y -= yymsp[-2].minor.yy83;}
2476 #line 2501 "pikchr.c"
2477 yymsp[-2].minor.yy49 = yylhsminor.yy49;
2478 break;
2479 case 61: /* position ::= expr LEFT OF position */
2480 #line 588 "pikchr.y"
2481 {yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.x -= yymsp[-3].minor.yy83;}
2482 #line 2507 "pikchr.c"
2483 yymsp[-3].minor.yy49 = yylhsminor.yy49;
2484 break;
2485 case 62: /* position ::= expr RIGHT OF position */
2486 #line 589 "pikchr.y"
2487 {yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.x += yymsp[-3].minor.yy83;}
2488 #line 2513 "pikchr.c"
2489 yymsp[-3].minor.yy49 = yylhsminor.yy49;
2490 break;
2491 case 63: /* position ::= expr EDGEPT OF position */
2492 #line 591 "pikchr.y"
2493 {yylhsminor.yy49 = pik_position_at_hdg(p,yymsp[-3].minor.yy83,&yymsp[-2].minor.yy0,yymsp[0].minor.yy49);}
2494 #line 2519 "pikchr.c"
2495 yymsp[-3].minor.yy49 = yylhsminor.yy49;
2496 break;
2497 case 64: /* position ::= expr HEADING expr FROM position */
2498 #line 593 "pikchr.y"
2499 {yylhsminor.yy49 = pik_position_at_angle(p,yymsp[-4].minor.yy83,yymsp[-2].minor.yy83,yymsp[0].minor.yy49);}
2500 #line 2525 "pikchr.c"
2501 yymsp[-4].minor.yy49 = yylhsminor.yy49;
2502 break;
2503 case 65: /* place ::= object */
2504 #line 599 "pikchr.y"
2505 {yylhsminor.yy49 = pik_place_of_elem(p,yymsp[0].minor.yy24,0);}
2506 #line 2531 "pikchr.c"
2507 yymsp[0].minor.yy49 = yylhsminor.yy49;
2508 break;
2509 case 66: /* place ::= object DOT_E edge */
2510 case 67: /* place ::= object DOT_L START */ yytestcase(yyruleno==67);
2511 case 68: /* place ::= object DOT_L END */ yytestcase(yyruleno==68);
2512 #line 600 "pikchr.y"
2513 {yylhsminor.yy49 = pik_place_of_elem(p,yymsp[-2].minor.yy24,&yymsp[0].minor.yy0);}
2514 #line 2539 "pikchr.c"
2515 yymsp[-2].minor.yy49 = yylhsminor.yy49;
2516 break;
2517 case 69: /* place ::= START OF object */
2518 case 70: /* place ::= END OF object */ yytestcase(yyruleno==70);
2519 case 71: /* place ::= edge OF object */ yytestcase(yyruleno==71);
2520 #line 603 "pikchr.y"
2521 {yylhsminor.yy49 = pik_place_of_elem(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0);}
2522 #line 2547 "pikchr.c"
2523 yymsp[-2].minor.yy49 = yylhsminor.yy49;
2524 break;
2525 case 72: /* place ::= NTH VERTEX OF object */
2526 #line 606 "pikchr.y"
2527 {yylhsminor.yy49 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy24);}
2528 #line 2553 "pikchr.c"
2529 yymsp[-3].minor.yy49 = yylhsminor.yy49;
2530 break;
2531 case 73: /* object ::= nth */
2532 #line 609 "pikchr.y"
2533 {yylhsminor.yy24 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2534 #line 2559 "pikchr.c"
2535 yymsp[0].minor.yy24 = yylhsminor.yy24;
2536 break;
2537 case 74: /* object ::= nth OF|IN object */
2538 #line 610 "pikchr.y"
2539 {yylhsminor.yy24 = pik_find_nth(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0);}
2540 #line 2565 "pikchr.c"
2541 yymsp[-2].minor.yy24 = yylhsminor.yy24;
2542 break;
2543 case 75: /* objectname ::= PLACENAME */
2544 #line 612 "pikchr.y"
2545 {yylhsminor.yy24 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2546 #line 2571 "pikchr.c"
2547 yymsp[0].minor.yy24 = yylhsminor.yy24;
2548 break;
2549 case 76: /* objectname ::= objectname DOT_U PLACENAME */
2550 #line 614 "pikchr.y"
2551 {yylhsminor.yy24 = pik_find_byname(p,yymsp[-2].minor.yy24,&yymsp[0].minor.yy0);}
2552 #line 2577 "pikchr.c"
2553 yymsp[-2].minor.yy24 = yylhsminor.yy24;
2554 break;
2555 case 77: /* nth ::= NTH CLASSNAME */
2556 #line 616 "pikchr.y"
2557 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2558 #line 2583 "pikchr.c"
2559 yymsp[-1].minor.yy0 = yylhsminor.yy0;
2560 break;
2561 case 78: /* nth ::= NTH LAST CLASSNAME */
2562 #line 617 "pikchr.y"
2563 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2564 #line 2589 "pikchr.c"
2565 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2566 break;
2567 case 79: /* nth ::= LAST CLASSNAME */
2568 #line 618 "pikchr.y"
2569 {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2570 #line 2595 "pikchr.c"
2571 break;
2572 case 80: /* nth ::= LAST */
2573 #line 619 "pikchr.y"
2574 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2575 #line 2600 "pikchr.c"
2576 yymsp[0].minor.yy0 = yylhsminor.yy0;
2577 break;
2578 case 81: /* nth ::= NTH LB RB */
2579 #line 620 "pikchr.y"
2580 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2581 #line 2606 "pikchr.c"
2582 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2583 break;
2584 case 82: /* nth ::= NTH LAST LB RB */
2585 #line 621 "pikchr.y"
2586 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2587 #line 2612 "pikchr.c"
2588 yymsp[-3].minor.yy0 = yylhsminor.yy0;
2589 break;
2590 case 83: /* nth ::= LAST LB RB */
2591 #line 622 "pikchr.y"
2592 {yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2593 #line 2618 "pikchr.c"
2594 break;
2595 case 84: /* expr ::= expr PLUS expr */
2596 #line 629 "pikchr.y"
2597 {yylhsminor.yy83=yymsp[-2].minor.yy83+yymsp[0].minor.yy83;}
2598 #line 2623 "pikchr.c"
2599 yymsp[-2].minor.yy83 = yylhsminor.yy83;
2600 break;
2601 case 85: /* expr ::= expr MINUS expr */
2602 #line 630 "pikchr.y"
2603 {yylhsminor.yy83=yymsp[-2].minor.yy83-yymsp[0].minor.yy83;}
2604 #line 2629 "pikchr.c"
2605 yymsp[-2].minor.yy83 = yylhsminor.yy83;
2606 break;
2607 case 86: /* expr ::= expr STAR expr */
2608 #line 631 "pikchr.y"
2609 {yylhsminor.yy83=yymsp[-2].minor.yy83*yymsp[0].minor.yy83;}
2610 #line 2635 "pikchr.c"
2611 yymsp[-2].minor.yy83 = yylhsminor.yy83;
2612 break;
2613 case 87: /* expr ::= expr SLASH expr */
2614 #line 632 "pikchr.y"
2615 {
2616 if( yymsp[0].minor.yy83==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy83 = 0.0; }
2617 else{ yylhsminor.yy83 = yymsp[-2].minor.yy83/yymsp[0].minor.yy83; }
2618 }
2619 #line 2644 "pikchr.c"
2620 yymsp[-2].minor.yy83 = yylhsminor.yy83;
2621 break;
2622 case 88: /* expr ::= MINUS expr */
2623 #line 636 "pikchr.y"
2624 {yymsp[-1].minor.yy83=-yymsp[0].minor.yy83;}
2625 #line 2650 "pikchr.c"
2626 break;
2627 case 89: /* expr ::= PLUS expr */
2628 #line 637 "pikchr.y"
2629 {yymsp[-1].minor.yy83=yymsp[0].minor.yy83;}
2630 #line 2655 "pikchr.c"
2631 break;
2632 case 90: /* expr ::= LP expr RP */
2633 #line 638 "pikchr.y"
2634 {yymsp[-2].minor.yy83=yymsp[-1].minor.yy83;}
2635 #line 2660 "pikchr.c"
2636 break;
2637 case 91: /* expr ::= NUMBER */
2638 #line 639 "pikchr.y"
2639 {yylhsminor.yy83=pik_atof(p,&yymsp[0].minor.yy0);}
2640 #line 2665 "pikchr.c"
2641 yymsp[0].minor.yy83 = yylhsminor.yy83;
2642 break;
2643 case 92: /* expr ::= ID */
2644 #line 640 "pikchr.y"
2645 {yylhsminor.yy83=pik_get_var(p,&yymsp[0].minor.yy0);}
2646 #line 2671 "pikchr.c"
2647 yymsp[0].minor.yy83 = yylhsminor.yy83;
2648 break;
2649 case 93: /* expr ::= FUNC1 LP expr RP */
2650 #line 641 "pikchr.y"
2651 {yylhsminor.yy83 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy83,0.0);}
2652 #line 2677 "pikchr.c"
2653 yymsp[-3].minor.yy83 = yylhsminor.yy83;
2654 break;
2655 case 94: /* expr ::= FUNC2 LP expr COMMA expr RP */
2656 #line 642 "pikchr.y"
2657 {yylhsminor.yy83 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy83,yymsp[-1].minor.yy83);}
2658 #line 2683 "pikchr.c"
2659 yymsp[-5].minor.yy83 = yylhsminor.yy83;
2660 break;
2661 case 95: /* expr ::= object DOT_L locproperty */
2662 case 96: /* expr ::= object DOT_L numproperty */ yytestcase(yyruleno==96);
2663 case 97: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==97);
2664 case 98: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==98);
2665 #line 644 "pikchr.y"
2666 {yylhsminor.yy83=pik_property_of(p,yymsp[-2].minor.yy24,&yymsp[0].minor.yy0);}
2667 #line 2692 "pikchr.c"
2668 yymsp[-2].minor.yy83 = yylhsminor.yy83;
2669 break;
2670 case 99: /* expr ::= object DOT_E edge DOT_L X */
2671 #line 648 "pikchr.y"
2672 {yylhsminor.yy83=pik_place_of_elem(p,yymsp[-4].minor.yy24,&yymsp[-2].minor.yy0).x;}
2673 #line 2698 "pikchr.c"
2674 yymsp[-4].minor.yy83 = yylhsminor.yy83;
2675 break;
2676 case 100: /* expr ::= object DOT_E edge DOT_L Y */
2677 #line 649 "pikchr.y"
2678 {yylhsminor.yy83=pik_place_of_elem(p,yymsp[-4].minor.yy24,&yymsp[-2].minor.yy0).y;}
2679 #line 2704 "pikchr.c"
2680 yymsp[-4].minor.yy83 = yylhsminor.yy83;
2681 break;
2682 case 101: /* expr ::= LP locproperty OF object RP */
2683 case 102: /* expr ::= LP dashproperty OF object RP */ yytestcase(yyruleno==102);
2684 case 103: /* expr ::= LP numproperty OF object RP */ yytestcase(yyruleno==103);
2685 case 104: /* expr ::= LP colorproperty OF object RP */ yytestcase(yyruleno==104);
2686 #line 650 "pikchr.y"
2687 {yymsp[-4].minor.yy83=pik_property_of(p,yymsp[-1].minor.yy24,&yymsp[-3].minor.yy0);}
2688 #line 2713 "pikchr.c"
2689 break;
2690 case 105: /* expr ::= NTH VERTEX OF object DOT_L X */
2691 #line 656 "pikchr.y"
2692 {yylhsminor.yy83 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy24).x;}
2693 #line 2718 "pikchr.c"
2694 yymsp[-5].minor.yy83 = yylhsminor.yy83;
2695 break;
2696 case 106: /* expr ::= NTH VERTEX OF object DOT_L Y */
2697 #line 658 "pikchr.y"
2698 {yylhsminor.yy83 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy24).y;}
2699 #line 2724 "pikchr.c"
2700 yymsp[-5].minor.yy83 = yylhsminor.yy83;
2701 break;
2702 default:
2703 /* (107) lvalue ::= ID */ yytestcase(yyruleno==107);
2704 /* (108) lvalue ::= FILL */ yytestcase(yyruleno==108);
2705 /* (109) lvalue ::= COLOR */ yytestcase(yyruleno==109);
2706 /* (110) rvalue ::= expr */ yytestcase(yyruleno==110);
2707 /* (111) print ::= PRINT */ yytestcase(yyruleno==111);
2708 /* (112) prlist ::= pritem (OPTIMIZED OUT) */ assert(yyruleno!=112);
2709 /* (113) prlist ::= prlist prsep pritem */ yytestcase(yyruleno==113);
2710 /* (114) direction ::= UP */ yytestcase(yyruleno==114);
2711 /* (115) direction ::= DOWN */ yytestcase(yyruleno==115);
2712 /* (116) direction ::= LEFT */ yytestcase(yyruleno==116);
2713 /* (117) direction ::= RIGHT */ yytestcase(yyruleno==117);
2714 /* (118) attribute_list ::= alist */ yytestcase(yyruleno==118);
2715 /* (119) alist ::= */ yytestcase(yyruleno==119);
2716 /* (120) alist ::= alist attribute */ yytestcase(yyruleno==120);
2717 /* (121) attribute ::= boolproperty (OPTIMIZED OUT) */ assert(yyruleno!=121);
2718 /* (122) attribute ::= WITH withclause */ yytestcase(yyruleno==122);
2719 /* (123) even ::= UNTIL EVEN WITH */ yytestcase(yyruleno==123);
2720 /* (124) even ::= EVEN WITH */ yytestcase(yyruleno==124);
2721 /* (125) withclause ::= with (OPTIMIZED OUT) */ assert(yyruleno!=125);
2722 /* (126) withclause ::= withclause AND with */ yytestcase(yyruleno==126);
2723 /* (127) dashproperty ::= DOTTED */ yytestcase(yyruleno==127);
2724 /* (128) dashproperty ::= DASHED */ yytestcase(yyruleno==128);
2725 /* (129) colorproperty ::= FILL */ yytestcase(yyruleno==129);
2726 /* (130) colorproperty ::= COLOR */ yytestcase(yyruleno==130);
2727 /* (131) position ::= place */ yytestcase(yyruleno==131);
2728 /* (132) between ::= WAY BETWEEN */ yytestcase(yyruleno==132);
2729 /* (133) between ::= BETWEEN */ yytestcase(yyruleno==133);
2730 /* (134) between ::= OF THE WAY BETWEEN */ yytestcase(yyruleno==134);
2731 /* (135) object ::= objectname */ yytestcase(yyruleno==135);
2732 /* (136) locproperty ::= X|Y */ yytestcase(yyruleno==136);
2733 /* (137) edge ::= EDGEPT */ yytestcase(yyruleno==137);
2734 /* (138) edge ::= TOP */ yytestcase(yyruleno==138);
2735 /* (139) edge ::= BOTTOM */ yytestcase(yyruleno==139);
2736 /* (140) edge ::= LEFT */ yytestcase(yyruleno==140);
2737 /* (141) edge ::= RIGHT */ yytestcase(yyruleno==141);
 
2738 break;
2739 /********** End reduce actions ************************************************/
2740 };
2741 assert( yyruleno<sizeof(yyRuleInfoLhs)/sizeof(yyRuleInfoLhs[0]) );
2742 yygoto = yyRuleInfoLhs[yyruleno];
@@ -2792,18 +2818,18 @@
2792 ){
2793 pik_parserARG_FETCH
2794 pik_parserCTX_FETCH
2795 #define TOKEN yyminor
2796 /************ Begin %syntax_error code ****************************************/
2797 #line 446 "pikchr.y"
2798
2799 if( TOKEN.z && TOKEN.z[0] ){
2800 pik_error(p, &TOKEN, "syntax error");
2801 }else{
2802 pik_error(p, 0, "syntax error");
2803 }
2804 #line 2829 "pikchr.c"
2805 /************ End %syntax_error code ******************************************/
2806 pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
2807 pik_parserCTX_STORE
2808 }
2809
@@ -3032,11 +3058,11 @@
3032 #else
3033 (void)iToken;
3034 return 0;
3035 #endif
3036 }
3037 #line 668 "pikchr.y"
3038
3039
3040
3041 /* Chart of the 140 official HTML color names with their
3042 ** corresponding RGB value.
@@ -3210,12 +3236,12 @@
3210 { "arrowht", 0.1 },
3211 { "arrowwid", 0.05 },
3212 { "boxht", 0.5 },
3213 { "boxrad", 0.0 },
3214 { "boxwid", 0.75 },
3215 { "charht", 0.166 },
3216 { "charwid", 0.083 },
3217 { "circlerad", 0.25 },
3218 { "color", 0.0 },
3219 { "cylht", 0.5 },
3220 { "cylrad", 0.075 },
3221 { "cylwid", 0.75 },
@@ -3230,11 +3256,11 @@
3230 { "ovalht", 0.5 },
3231 { "ovalwid", 1.0 },
3232 { "scale", 1.0 },
3233 { "textht", 0.5 },
3234 { "textwid", 0.75 },
3235 { "thickness", 0.01 },
3236 };
3237
3238
3239 /* Methods for the "arc" class */
3240 static void arcInit(Pik *p, PElem *pElem){
@@ -4149,41 +4175,108 @@
4149 pik_append_dis(p,"stroke-dasharray:",v,"");
4150 pik_append_dis(p,",",v,";");
4151 }
4152 }
4153 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4154
4155 /* Append multiple <text> SGV element for the text fields of the PElem
4156 */
4157 static void pik_append_txt(Pik *p, PElem *pElem){
4158 PNum dy;
 
4159 int n, i, nz;
4160 PNum x, y, orig_y;
4161 const char *z;
 
 
 
4162 if( p->nErr ) return;
4163 if( pElem->nTxt==0 ) return;
 
4164 dy = 0.5*pik_value(p,"charht",6,0);
4165 n = pElem->nTxt;
4166 if( n>1 ){
4167 if( (pElem->aTxt[0].eCode & TP_VMASK)==0 ){
4168 pElem->aTxt[0].eCode |= TP_ABOVE;
4169 }
4170 if( (pElem->aTxt[n-1].eCode & TP_VMASK)==0 ){
4171 pElem->aTxt[n-1].eCode |= TP_BELOW;
4172 }
4173 for(i=0; i<n; i++){
4174 if( (pElem->aTxt[i].eCode & TP_VMASK)==0 ){
4175 dy *= 1.5;
4176 }
4177 }
4178 }
4179 x = pElem->ptAt.x;
4180 for(i=0; i<n; i++){
4181 PToken *t = &pElem->aTxt[i];
 
 
 
 
 
 
 
 
 
 
4182 orig_y = y = pElem->ptAt.y;
4183 if( t->eCode & TP_ABOVE ) y += dy;
4184 if( t->eCode & TP_BELOW ) y -= dy;
 
 
 
4185 pik_append_x(p, "<text x=\"", x, "\"");
4186 pik_append_y(p, " y=\"", y, "\"");
4187 if( t->eCode & TP_RJUST ){
4188 pik_append(p, " text-anchor=\"end\"", -1);
4189 }else if( t->eCode & TP_LJUST ){
@@ -4988,17 +5081,24 @@
4988 pik_error(0, pFit, "no text to fit to");
4989 return;
4990 }
4991 if( pElem->type->xFit==0 ) return;
4992 if( (pElem->mProp & A_HEIGHT)==0 ){
4993 if( pElem->nTxt==1 && (pElem->aTxt[0].eCode & TP_VMASK)==0 ){
4994 h = 1;
4995 }else if( pElem->nTxt==3 ){
4996 h = 3;
4997 }else{
4998 h = 2;
 
 
 
 
 
 
4999 }
 
5000 }
5001 if( (pElem->mProp & A_WIDTH)==0 ){
5002 for(i=0; i<pElem->nTxt; i++){
5003 int j, cnt;
5004 const char *z = pElem->aTxt[i].z;
@@ -5046,11 +5146,11 @@
5046 }
5047 pVar->zName = z = (char*)&pVar[1];
5048 memcpy(z, pId->z, pId->n);
5049 z[pId->n] = 0;
5050 pVar->pNext = p->pVar;
5051 pVar->val = 0;
5052 p->pVar = pVar;
5053 }
5054 switch( pOp->eCode ){
5055 case T_PLUS: pVar->val += val; break;
5056 case T_STAR: pVar->val *= val; break;
@@ -6331,6 +6431,6 @@
6331 printf("</body></html>\n");
6332 return 0;
6333 }
6334 #endif /* PIKCHR_SHELL */
6335
6336 #line 6361 "pikchr.c"
6337
--- src/pikchr.c
+++ src/pikchr.c
@@ -168,21 +168,25 @@
168 #define FN_MAX 3
169 #define FN_MIN 4
170 #define FN_SIN 5
171 #define FN_SQRT 6
172
173 /* Text position and style flags. Stored in PToken.eCode so limited
174 ** to 15 bits. */
175 #define TP_LJUST 0x0001 /* left justify...... */
176 #define TP_RJUST 0x0002 /* ...Right justify */
177 #define TP_JMASK 0x0003 /* Mask for justification bits */
178 #define TP_ABOVE2 0x0004 /* Position text way above PElem.ptAt */
179 #define TP_ABOVE 0x0008 /* Position text above PElem.ptAt */
180 #define TP_CENTER 0x0010 /* On the line */
181 #define TP_BELOW 0x0020 /* Position text below PElem.ptAt */
182 #define TP_BELOW2 0x0040 /* Position text way below PElem.ptAt */
183 #define TP_VMASK 0x007c /* Mask for text positioning flags */
184 #define TP_ITALIC 0x1000 /* Italic font */
185 #define TP_BOLD 0x2000 /* Bold font */
186 #define TP_FMASK 0x3000 /* Mask for font style */
187 #define TP_ALIGN 0x4000 /* Rotate to align with the line */
188
189 /* An object to hold a position in 2-D space */
190 struct PPoint {
191 PNum x, y; /* X and Y coordinates */
192 };
@@ -286,11 +290,11 @@
290 char bClose; /* True if "close" is seen */
291 char bChop; /* True if "chop" is seen */
292 unsigned char nTxt; /* Number of text values */
293 unsigned mProp; /* Masks of properties set so far */
294 unsigned mCalc; /* Values computed from other constraints */
295 PToken aTxt[5]; /* Text with .eCode holding TP flags */
296 int iLayer; /* Rendering order */
297 int inDir, outDir; /* Entry and exit directions */
298 int nPath; /* Number of path points */
299 PPoint *aPath; /* Array of path points */
300 PBox bbox; /* Bounding box */
@@ -408,89 +412,89 @@
412 static void pik_same(Pik *p, PElem*, PToken*);
413 static PPoint pik_nth_vertex(Pik *p, PToken *pNth, PToken *pErr, PElem *pElem);
414 static PToken pik_next_semantic_token(Pik *p, PToken *pThis);
415
416
417 #line 443 "pikchr.c"
418 /**************** End of %include directives **********************************/
419 /* These constants specify the various numeric values for terminal symbols.
420 ***************** Begin token definitions *************************************/
421 #ifndef T_ID
422 #define T_ID 1
423 #define T_EDGEPT 2
424 #define T_OF 3
425 #define T_PLUS 4
426 #define T_MINUS 5
427 #define T_STAR 6
428 #define T_SLASH 7
429 #define T_PERCENT 8
430 #define T_UMINUS 9
431 #define T_EOL 10
432 #define T_ASSIGN 11
433 #define T_PLACENAME 12
434 #define T_COLON 13
435 #define T_FILL 14
436 #define T_COLOR 15
437 #define T_THICKNESS 16
438 #define T_PRINT 17
439 #define T_STRING 18
440 #define T_COMMA 19
441 #define T_CLASSNAME 20
442 #define T_LB 21
443 #define T_RB 22
444 #define T_UP 23
445 #define T_DOWN 24
446 #define T_LEFT 25
447 #define T_RIGHT 26
448 #define T_CLOSE 27
449 #define T_CHOP 28
450 #define T_FROM 29
451 #define T_TO 30
452 #define T_THEN 31
453 #define T_AT 32
454 #define T_WITH 33
455 #define T_SAME 34
456 #define T_AS 35
457 #define T_FIT 36
458 #define T_UNTIL 37
459 #define T_EVEN 38
460 #define T_AND 39
461 #define T_DOT_E 40
462 #define T_HEIGHT 41
463 #define T_WIDTH 42
464 #define T_RADIUS 43
465 #define T_DIAMETER 44
466 #define T_DOTTED 45
467 #define T_DASHED 46
468 #define T_CW 47
469 #define T_CCW 48
470 #define T_LARROW 49
471 #define T_RARROW 50
472 #define T_LRARROW 51
473 #define T_INVIS 52
474 #define T_CENTER 53
475 #define T_LJUST 54
476 #define T_RJUST 55
477 #define T_ABOVE 56
478 #define T_BELOW 57
479 #define T_ITALIC 58
480 #define T_BOLD 59
481 #define T_ALIGNED 60
482 #define T_LP 61
483 #define T_RP 62
484 #define T_HEADING 63
485 #define T_WAY 64
486 #define T_BETWEEN 65
487 #define T_THE 66
488 #define T_DOT_L 67
489 #define T_START 68
490 #define T_END 69
491 #define T_NTH 70
492 #define T_VERTEX 71
493 #define T_IN 72
494 #define T_DOT_U 73
495 #define T_LAST 74
496 #define T_NUMBER 75
497 #define T_FUNC1 76
498 #define T_FUNC2 77
499 #define T_X 78
500 #define T_Y 79
@@ -580,21 +584,21 @@
584 #define pik_parserCTX_PARAM ,p
585 #define pik_parserCTX_FETCH Pik *p=yypParser->p;
586 #define pik_parserCTX_STORE yypParser->p=p;
587 #define YYFALLBACK 1
588 #define YYNSTATE 153
589 #define YYNRULE 146
590 #define YYNRULE_WITH_ACTION 110
591 #define YYNTOKEN 82
592 #define YY_MAX_SHIFT 152
593 #define YY_MIN_SHIFTREDUCE 268
594 #define YY_MAX_SHIFTREDUCE 413
595 #define YY_ERROR_ACTION 414
596 #define YY_ACCEPT_ACTION 415
597 #define YY_NO_ACTION 416
598 #define YY_MIN_REDUCE 417
599 #define YY_MAX_REDUCE 562
600 /************* End control #defines *******************************************/
601 #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
602
603 /* Define the yytestcase() macro to be a no-op if is not already defined
604 ** otherwise.
@@ -657,246 +661,248 @@
661 ** yy_reduce_ofst[] For each state, the offset into yy_action for
662 ** shifting non-terminals after a reduce.
663 ** yy_default[] Default action for each state.
664 **
665 *********** Begin parsing tables **********************************************/
666 #define YY_ACTTAB_COUNT (866)
667 static const YYACTIONTYPE yy_action[] = {
668 /* 0 */ 64, 137, 129, 19, 139, 135, 141, 99, 101, 100,
669 /* 10 */ 151, 109, 38, 35, 401, 402, 313, 516, 72, 113,
670 /* 20 */ 517, 518, 515, 386, 387, 388, 389, 301, 302, 10,
671 /* 30 */ 9, 305, 8, 51, 111, 41, 310, 27, 40, 28,
672 /* 40 */ 132, 313, 313, 313, 313, 399, 400, 314, 315, 316,
673 /* 50 */ 317, 318, 319, 363, 409, 142, 45, 46, 541, 541,
674 /* 60 */ 284, 423, 26, 65, 346, 129, 401, 402, 313, 12,
675 /* 70 */ 424, 101, 100, 151, 109, 48, 47, 412, 413, 401,
676 /* 80 */ 402, 313, 321, 321, 321, 321, 321, 321, 321, 321,
677 /* 90 */ 112, 112, 24, 313, 313, 313, 313, 399, 400, 22,
678 /* 100 */ 124, 122, 50, 49, 48, 47, 313, 313, 313, 313,
679 /* 110 */ 399, 400, 328, 1, 114, 114, 547, 39, 73, 67,
680 /* 120 */ 131, 130, 89, 126, 125, 74, 107, 362, 144, 143,
681 /* 130 */ 408, 408, 410, 411, 363, 370, 371, 45, 46, 52,
682 /* 140 */ 346, 82, 6, 408, 408, 346, 30, 401, 402, 313,
683 /* 150 */ 103, 151, 109, 7, 18, 17, 20, 457, 151, 109,
684 /* 160 */ 361, 32, 123, 405, 63, 124, 122, 50, 49, 48,
685 /* 170 */ 47, 396, 409, 395, 313, 313, 313, 313, 399, 400,
686 /* 180 */ 363, 409, 39, 45, 46, 127, 151, 109, 126, 125,
687 /* 190 */ 116, 346, 376, 377, 5, 412, 413, 71, 97, 286,
688 /* 200 */ 70, 11, 107, 94, 412, 413, 25, 107, 362, 144,
689 /* 210 */ 143, 408, 408, 363, 409, 327, 45, 46, 288, 18,
690 /* 220 */ 17, 350, 147, 406, 346, 495, 32, 123, 405, 50,
691 /* 230 */ 49, 48, 47, 297, 65, 121, 129, 412, 413, 120,
692 /* 240 */ 1, 461, 101, 100, 151, 109, 62, 131, 130, 89,
693 /* 250 */ 410, 411, 495, 107, 362, 144, 143, 95, 495, 410,
694 /* 260 */ 411, 363, 348, 148, 45, 46, 103, 151, 109, 417,
695 /* 270 */ 445, 404, 96, 1, 279, 280, 281, 68, 283, 25,
696 /* 280 */ 131, 130, 89, 378, 349, 149, 107, 362, 144, 143,
697 /* 290 */ 14, 15, 410, 411, 133, 16, 379, 380, 381, 383,
698 /* 300 */ 71, 106, 286, 70, 31, 386, 387, 388, 389, 53,
699 /* 310 */ 54, 401, 402, 313, 363, 62, 108, 45, 46, 55,
700 /* 320 */ 56, 5, 491, 151, 109, 346, 50, 49, 48, 47,
701 /* 330 */ 94, 2, 102, 375, 107, 362, 144, 143, 313, 313,
702 /* 340 */ 313, 313, 399, 400, 363, 374, 373, 45, 46, 58,
703 /* 350 */ 117, 115, 490, 151, 109, 346, 50, 49, 48, 47,
704 /* 360 */ 292, 110, 418, 425, 26, 338, 339, 363, 421, 43,
705 /* 370 */ 45, 46, 57, 372, 5, 408, 408, 60, 96, 152,
706 /* 380 */ 59, 415, 21, 94, 326, 44, 61, 107, 362, 144,
707 /* 390 */ 143, 363, 354, 352, 45, 46, 50, 49, 48, 47,
708 /* 400 */ 291, 353, 346, 347, 5, 75, 137, 150, 29, 139,
709 /* 410 */ 135, 141, 416, 94, 103, 151, 109, 107, 362, 144,
710 /* 420 */ 143, 363, 416, 416, 45, 46, 416, 5, 77, 416,
711 /* 430 */ 416, 416, 346, 416, 416, 78, 94, 103, 151, 109,
712 /* 440 */ 107, 362, 144, 143, 103, 151, 109, 416, 76, 137,
713 /* 450 */ 416, 3, 139, 135, 141, 416, 416, 103, 151, 109,
714 /* 460 */ 94, 416, 416, 416, 107, 362, 144, 143, 88, 137,
715 /* 470 */ 416, 416, 139, 135, 141, 95, 416, 103, 151, 109,
716 /* 480 */ 416, 4, 416, 416, 103, 151, 109, 416, 422, 416,
717 /* 490 */ 94, 65, 416, 129, 107, 362, 144, 143, 460, 101,
718 /* 500 */ 100, 151, 109, 65, 416, 129, 50, 49, 48, 47,
719 /* 510 */ 455, 101, 100, 151, 109, 409, 489, 151, 109, 65,
720 /* 520 */ 416, 129, 416, 90, 416, 416, 453, 101, 100, 151,
721 /* 530 */ 109, 13, 103, 151, 109, 65, 416, 129, 412, 413,
722 /* 540 */ 416, 84, 452, 101, 100, 151, 109, 65, 416, 129,
723 /* 550 */ 103, 151, 109, 66, 478, 101, 100, 151, 109, 65,
724 /* 560 */ 416, 129, 434, 416, 23, 416, 119, 101, 100, 151,
725 /* 570 */ 109, 416, 50, 49, 48, 47, 416, 65, 416, 129,
726 /* 580 */ 50, 49, 48, 47, 484, 101, 100, 151, 109, 65,
727 /* 590 */ 416, 129, 416, 410, 411, 37, 483, 101, 100, 151,
728 /* 600 */ 109, 65, 416, 129, 134, 151, 109, 416, 482, 101,
729 /* 610 */ 100, 151, 109, 65, 416, 129, 348, 148, 348, 148,
730 /* 620 */ 481, 101, 100, 151, 109, 50, 49, 48, 47, 65,
731 /* 630 */ 325, 129, 50, 49, 48, 47, 480, 101, 100, 151,
732 /* 640 */ 109, 65, 416, 129, 50, 49, 48, 47, 479, 101,
733 /* 650 */ 100, 151, 109, 65, 416, 129, 416, 416, 416, 33,
734 /* 660 */ 118, 101, 100, 151, 109, 416, 65, 128, 129, 146,
735 /* 670 */ 108, 95, 108, 449, 101, 100, 151, 109, 416, 416,
736 /* 680 */ 103, 151, 109, 365, 431, 416, 95, 416, 416, 69,
737 /* 690 */ 69, 98, 418, 425, 26, 103, 151, 109, 421, 431,
738 /* 700 */ 416, 416, 361, 416, 416, 534, 136, 151, 109, 152,
739 /* 710 */ 416, 416, 21, 419, 425, 26, 416, 416, 416, 421,
740 /* 720 */ 50, 49, 48, 47, 50, 49, 48, 47, 416, 416,
741 /* 730 */ 152, 416, 416, 21, 416, 36, 138, 151, 109, 34,
742 /* 740 */ 50, 49, 48, 47, 50, 49, 48, 47, 50, 49,
743 /* 750 */ 48, 47, 416, 79, 416, 42, 416, 416, 80, 416,
744 /* 760 */ 416, 91, 103, 151, 109, 416, 416, 103, 151, 109,
745 /* 770 */ 103, 151, 109, 81, 416, 416, 92, 416, 361, 93,
746 /* 780 */ 416, 416, 103, 151, 109, 103, 151, 109, 103, 151,
747 /* 790 */ 109, 140, 151, 109, 145, 151, 109, 416, 416, 83,
748 /* 800 */ 416, 416, 364, 494, 151, 109, 361, 85, 103, 151,
749 /* 810 */ 109, 86, 416, 416, 87, 416, 103, 151, 109, 416,
750 /* 820 */ 103, 151, 109, 103, 151, 109, 416, 509, 416, 416,
751 /* 830 */ 416, 508, 416, 416, 507, 416, 103, 151, 109, 416,
752 /* 840 */ 103, 151, 109, 103, 151, 109, 416, 416, 506, 416,
753 /* 850 */ 416, 104, 416, 416, 105, 416, 416, 103, 151, 109,
754 /* 860 */ 103, 151, 109, 103, 151, 109,
755 };
756 static const YYCODETYPE yy_lookahead[] = {
757 /* 0 */ 86, 87, 88, 114, 90, 91, 92, 93, 94, 95,
758 /* 10 */ 96, 97, 4, 5, 14, 15, 16, 87, 18, 88,
759 /* 20 */ 90, 91, 92, 23, 24, 25, 26, 27, 28, 29,
760 /* 30 */ 30, 31, 32, 33, 34, 87, 36, 89, 90, 91,
761 /* 40 */ 88, 41, 42, 43, 44, 45, 46, 47, 48, 49,
762 /* 50 */ 50, 51, 52, 1, 2, 88, 4, 5, 110, 111,
763 /* 60 */ 19, 84, 85, 86, 12, 88, 14, 15, 16, 19,
764 /* 70 */ 93, 94, 95, 96, 97, 6, 7, 25, 26, 14,
765 /* 80 */ 15, 16, 53, 54, 55, 56, 57, 58, 59, 60,
766 /* 90 */ 88, 88, 106, 41, 42, 43, 44, 45, 46, 108,
767 /* 100 */ 2, 3, 4, 5, 6, 7, 41, 42, 43, 44,
768 /* 110 */ 45, 46, 62, 61, 112, 113, 113, 19, 98, 40,
769 /* 120 */ 68, 69, 70, 25, 26, 98, 74, 75, 76, 77,
770 /* 130 */ 78, 79, 80, 81, 1, 78, 79, 4, 5, 35,
771 /* 140 */ 12, 86, 32, 78, 79, 12, 67, 14, 15, 16,
772 /* 150 */ 95, 96, 97, 32, 56, 57, 101, 95, 96, 97,
773 /* 160 */ 62, 63, 64, 65, 39, 2, 3, 4, 5, 6,
774 /* 170 */ 7, 33, 2, 33, 41, 42, 43, 44, 45, 46,
775 /* 180 */ 1, 2, 19, 4, 5, 95, 96, 97, 25, 26,
776 /* 190 */ 38, 12, 78, 79, 61, 25, 26, 18, 70, 20,
777 /* 200 */ 21, 39, 74, 70, 25, 26, 10, 74, 75, 76,
778 /* 210 */ 77, 78, 79, 1, 2, 62, 4, 5, 22, 56,
779 /* 220 */ 57, 20, 21, 65, 12, 40, 63, 64, 65, 4,
780 /* 230 */ 5, 6, 7, 8, 86, 66, 88, 25, 26, 64,
781 /* 240 */ 61, 93, 94, 95, 96, 97, 3, 68, 69, 70,
782 /* 250 */ 80, 81, 67, 74, 75, 76, 77, 86, 73, 80,
783 /* 260 */ 81, 1, 20, 21, 4, 5, 95, 96, 97, 0,
784 /* 270 */ 99, 65, 12, 61, 14, 15, 16, 40, 18, 10,
785 /* 280 */ 68, 69, 70, 1, 20, 21, 74, 75, 76, 77,
786 /* 290 */ 3, 3, 80, 81, 12, 3, 14, 15, 16, 17,
787 /* 300 */ 18, 67, 20, 21, 67, 23, 24, 25, 26, 3,
788 /* 310 */ 3, 14, 15, 16, 1, 72, 74, 4, 5, 3,
789 /* 320 */ 3, 61, 95, 96, 97, 12, 4, 5, 6, 7,
790 /* 330 */ 70, 13, 67, 62, 74, 75, 76, 77, 41, 42,
791 /* 340 */ 43, 44, 45, 46, 1, 62, 62, 4, 5, 3,
792 /* 350 */ 37, 38, 95, 96, 97, 12, 4, 5, 6, 7,
793 /* 360 */ 8, 82, 83, 84, 85, 68, 69, 1, 89, 61,
794 /* 370 */ 4, 5, 3, 62, 61, 78, 79, 3, 12, 100,
795 /* 380 */ 3, 102, 103, 70, 62, 61, 3, 74, 75, 76,
796 /* 390 */ 77, 1, 22, 22, 4, 5, 4, 5, 6, 7,
797 /* 400 */ 8, 22, 12, 12, 61, 86, 87, 73, 11, 90,
798 /* 410 */ 91, 92, 115, 70, 95, 96, 97, 74, 75, 76,
799 /* 420 */ 77, 1, 115, 115, 4, 5, 115, 61, 86, 115,
800 /* 430 */ 115, 115, 12, 115, 115, 86, 70, 95, 96, 97,
801 /* 440 */ 74, 75, 76, 77, 95, 96, 97, 115, 86, 87,
802 /* 450 */ 115, 61, 90, 91, 92, 115, 115, 95, 96, 97,
803 /* 460 */ 70, 115, 115, 115, 74, 75, 76, 77, 86, 87,
804 /* 470 */ 115, 115, 90, 91, 92, 86, 115, 95, 96, 97,
805 /* 480 */ 115, 61, 115, 115, 95, 96, 97, 115, 99, 115,
806 /* 490 */ 70, 86, 115, 88, 74, 75, 76, 77, 93, 94,
807 /* 500 */ 95, 96, 97, 86, 115, 88, 4, 5, 6, 7,
808 /* 510 */ 93, 94, 95, 96, 97, 2, 95, 96, 97, 86,
809 /* 520 */ 115, 88, 115, 86, 115, 115, 93, 94, 95, 96,
810 /* 530 */ 97, 29, 95, 96, 97, 86, 115, 88, 25, 26,
811 /* 540 */ 115, 86, 93, 94, 95, 96, 97, 86, 115, 88,
812 /* 550 */ 95, 96, 97, 40, 93, 94, 95, 96, 97, 86,
813 /* 560 */ 115, 88, 107, 115, 109, 115, 93, 94, 95, 96,
814 /* 570 */ 97, 115, 4, 5, 6, 7, 115, 86, 115, 88,
815 /* 580 */ 4, 5, 6, 7, 93, 94, 95, 96, 97, 86,
816 /* 590 */ 115, 88, 115, 80, 81, 19, 93, 94, 95, 96,
817 /* 600 */ 97, 86, 115, 88, 95, 96, 97, 115, 93, 94,
818 /* 610 */ 95, 96, 97, 86, 115, 88, 20, 21, 20, 21,
819 /* 620 */ 93, 94, 95, 96, 97, 4, 5, 6, 7, 86,
820 /* 630 */ 62, 88, 4, 5, 6, 7, 93, 94, 95, 96,
821 /* 640 */ 97, 86, 115, 88, 4, 5, 6, 7, 93, 94,
822 /* 650 */ 95, 96, 97, 86, 115, 88, 115, 115, 115, 19,
823 /* 660 */ 93, 94, 95, 96, 97, 115, 86, 71, 88, 71,
824 /* 670 */ 74, 86, 74, 93, 94, 95, 96, 97, 115, 115,
825 /* 680 */ 95, 96, 97, 62, 99, 115, 86, 115, 115, 104,
826 /* 690 */ 105, 82, 83, 84, 85, 95, 96, 97, 89, 99,
827 /* 700 */ 115, 115, 62, 115, 115, 105, 95, 96, 97, 100,
828 /* 710 */ 115, 115, 103, 83, 84, 85, 115, 115, 115, 89,
829 /* 720 */ 4, 5, 6, 7, 4, 5, 6, 7, 115, 115,
830 /* 730 */ 100, 115, 115, 103, 115, 19, 95, 96, 97, 19,
831 /* 740 */ 4, 5, 6, 7, 4, 5, 6, 7, 4, 5,
832 /* 750 */ 6, 7, 115, 86, 115, 19, 115, 115, 86, 115,
833 /* 760 */ 115, 86, 95, 96, 97, 115, 115, 95, 96, 97,
834 /* 770 */ 95, 96, 97, 86, 115, 115, 86, 115, 62, 86,
835 /* 780 */ 115, 115, 95, 96, 97, 95, 96, 97, 95, 96,
836 /* 790 */ 97, 95, 96, 97, 95, 96, 97, 115, 115, 86,
837 /* 800 */ 115, 115, 62, 95, 96, 97, 62, 86, 95, 96,
838 /* 810 */ 97, 86, 115, 115, 86, 115, 95, 96, 97, 115,
839 /* 820 */ 95, 96, 97, 95, 96, 97, 115, 86, 115, 115,
840 /* 830 */ 115, 86, 115, 115, 86, 115, 95, 96, 97, 115,
841 /* 840 */ 95, 96, 97, 95, 96, 97, 115, 115, 86, 115,
842 /* 850 */ 115, 86, 115, 115, 86, 115, 115, 95, 96, 97,
843 /* 860 */ 95, 96, 97, 95, 96, 97, 82, 82, 82, 82,
844 /* 870 */ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
845 /* 880 */ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
846 /* 890 */ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
847 /* 900 */ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
848 /* 910 */ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
849 /* 920 */ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
850 /* 930 */ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
851 /* 940 */ 82, 82, 82, 82, 82, 82, 82, 82,
852 };
853 #define YY_SHIFT_COUNT (152)
854 #define YY_SHIFT_MIN (0)
855 #define YY_SHIFT_MAX (744)
856 static const unsigned short int yy_shift_ofst[] = {
857 /* 0 */ 282, 52, 179, 133, 133, 133, 212, 212, 212, 212,
858 /* 10 */ 212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
859 /* 20 */ 212, 260, 282, 0, 260, 282, 343, 313, 366, 366,
860 /* 30 */ 297, 65, 343, 343, 343, 390, 343, 343, 420, 343,
861 /* 40 */ 343, 343, 343, 343, 343, 343, 343, 343, 343, 343,
862 /* 50 */ 343, 513, 128, 128, 128, 128, 128, 128, 128, 128,
863 /* 60 */ 128, 128, 128, 513, 98, 163, 170, 170, 170, 41,
864 /* 70 */ 866, 866, 866, 29, 29, 640, 716, 502, 322, 720,
865 /* 80 */ 568, 576, 225, 352, 392, 621, 736, 740, 744, 596,
866 /* 90 */ 628, 628, 628, 628, 598, 628, 185, 242, 196, 50,
867 /* 100 */ 79, 8, 57, 237, 69, 69, 114, 201, 264, 243,
868 /* 110 */ 269, 104, 110, 121, 125, 138, 140, 152, 162, 153,
869 /* 120 */ 158, 175, 169, 206, 287, 288, 292, 234, 306, 307,
870 /* 130 */ 316, 317, 265, 318, 271, 369, 283, 346, 284, 377,
871 /* 140 */ 311, 374, 265, 308, 324, 234, 383, 370, 371, 379,
872 /* 150 */ 391, 334, 397,
873 };
874 #define YY_REDUCE_COUNT (72)
875 #define YY_REDUCE_MIN (-111)
876 #define YY_REDUCE_MAX (768)
877 static const short yy_reduce_ofst[] = {
878 /* 0 */ 279, -86, -23, 319, 362, 382, 148, 405, 417, 433,
879 /* 10 */ 449, 461, 473, 491, 503, 515, 527, 543, 555, 567,
880 /* 20 */ 580, 585, 609, -52, 600, 630, 455, 55, 171, 389,
881 /* 30 */ -70, -70, 342, 349, 437, 667, 672, 675, 687, 690,
882 /* 40 */ 693, 713, 721, 725, 728, 741, 745, 748, 762, 765,
883 /* 50 */ 768, 2, 62, 90, 227, 257, 421, 509, 611, 641,
884 /* 60 */ 696, 699, 708, 3, -111, -111, -69, -48, -33, -14,
885 /* 70 */ -9, 20, 27,
886 };
887 static const YYACTIONTYPE yy_default[] = {
888 /* 0 */ 420, 414, 414, 414, 414, 414, 414, 414, 414, 414,
889 /* 10 */ 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
890 /* 20 */ 414, 414, 420, 539, 414, 420, 540, 448, 414, 414,
891 /* 30 */ 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
892 /* 40 */ 444, 414, 414, 414, 414, 414, 414, 414, 414, 414,
893 /* 50 */ 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
894 /* 60 */ 414, 414, 414, 414, 414, 414, 414, 414, 414, 426,
895 /* 70 */ 438, 469, 469, 436, 458, 414, 414, 414, 414, 414,
896 /* 80 */ 414, 414, 447, 442, 439, 414, 414, 414, 414, 414,
897 /* 90 */ 473, 472, 471, 443, 414, 531, 427, 414, 414, 414,
898 /* 100 */ 485, 552, 414, 414, 505, 504, 414, 500, 414, 493,
899 /* 110 */ 414, 456, 414, 414, 543, 414, 414, 414, 414, 414,
900 /* 120 */ 414, 414, 414, 414, 414, 414, 414, 492, 414, 414,
901 /* 130 */ 414, 414, 486, 414, 414, 414, 414, 414, 414, 414,
902 /* 140 */ 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
903 /* 150 */ 414, 556, 414,
904 };
905 /********** End of lemon-generated parsing tables *****************************/
906
907 /* The next table maps tokens (terminal symbols) into fallback tokens.
908 ** If a construct like the following:
@@ -915,16 +921,24 @@
921 #ifdef YYFALLBACK
922 static const YYCODETYPE yyFallback[] = {
923 0, /* $ => nothing */
924 0, /* ID => nothing */
925 1, /* EDGEPT => ID */
926 0, /* OF => nothing */
927 0, /* PLUS => nothing */
928 0, /* MINUS => nothing */
929 0, /* STAR => nothing */
930 0, /* SLASH => nothing */
931 0, /* PERCENT => nothing */
932 0, /* UMINUS => nothing */
933 0, /* EOL => nothing */
934 0, /* ASSIGN => nothing */
935 0, /* PLACENAME => nothing */
936 0, /* COLON => nothing */
937 0, /* FILL => nothing */
938 0, /* COLOR => nothing */
939 0, /* THICKNESS => nothing */
940 0, /* PRINT => nothing */
941 0, /* STRING => nothing */
942 0, /* COMMA => nothing */
943 0, /* CLASSNAME => nothing */
944 0, /* LB => nothing */
@@ -931,11 +945,10 @@
945 0, /* RB => nothing */
946 0, /* UP => nothing */
947 0, /* DOWN => nothing */
948 0, /* LEFT => nothing */
949 0, /* RIGHT => nothing */
 
950 0, /* CLOSE => nothing */
951 0, /* CHOP => nothing */
952 0, /* FROM => nothing */
953 0, /* TO => nothing */
954 0, /* THEN => nothing */
@@ -950,11 +963,10 @@
963 0, /* DOT_E => nothing */
964 0, /* HEIGHT => nothing */
965 0, /* WIDTH => nothing */
966 0, /* RADIUS => nothing */
967 0, /* DIAMETER => nothing */
 
968 0, /* DOTTED => nothing */
969 0, /* DASHED => nothing */
970 0, /* CW => nothing */
971 0, /* CCW => nothing */
972 0, /* LARROW => nothing */
@@ -967,15 +979,12 @@
979 0, /* ABOVE => nothing */
980 0, /* BELOW => nothing */
981 0, /* ITALIC => nothing */
982 0, /* BOLD => nothing */
983 0, /* ALIGNED => nothing */
 
 
984 0, /* LP => nothing */
985 0, /* RP => nothing */
 
986 0, /* HEADING => nothing */
987 0, /* WAY => nothing */
988 0, /* BETWEEN => nothing */
989 0, /* THE => nothing */
990 0, /* DOT_L => nothing */
@@ -984,13 +993,10 @@
993 0, /* NTH => nothing */
994 0, /* VERTEX => nothing */
995 0, /* IN => nothing */
996 0, /* DOT_U => nothing */
997 0, /* LAST => nothing */
 
 
 
998 0, /* NUMBER => nothing */
999 0, /* FUNC1 => nothing */
1000 0, /* FUNC2 => nothing */
1001 0, /* X => nothing */
1002 0, /* Y => nothing */
@@ -1085,82 +1091,82 @@
1091 ** are required. The following table supplies these names */
1092 static const char *const yyTokenName[] = {
1093 /* 0 */ "$",
1094 /* 1 */ "ID",
1095 /* 2 */ "EDGEPT",
1096 /* 3 */ "OF",
1097 /* 4 */ "PLUS",
1098 /* 5 */ "MINUS",
1099 /* 6 */ "STAR",
1100 /* 7 */ "SLASH",
1101 /* 8 */ "PERCENT",
1102 /* 9 */ "UMINUS",
1103 /* 10 */ "EOL",
1104 /* 11 */ "ASSIGN",
1105 /* 12 */ "PLACENAME",
1106 /* 13 */ "COLON",
1107 /* 14 */ "FILL",
1108 /* 15 */ "COLOR",
1109 /* 16 */ "THICKNESS",
1110 /* 17 */ "PRINT",
1111 /* 18 */ "STRING",
1112 /* 19 */ "COMMA",
1113 /* 20 */ "CLASSNAME",
1114 /* 21 */ "LB",
1115 /* 22 */ "RB",
1116 /* 23 */ "UP",
1117 /* 24 */ "DOWN",
1118 /* 25 */ "LEFT",
1119 /* 26 */ "RIGHT",
1120 /* 27 */ "CLOSE",
1121 /* 28 */ "CHOP",
1122 /* 29 */ "FROM",
1123 /* 30 */ "TO",
1124 /* 31 */ "THEN",
1125 /* 32 */ "AT",
1126 /* 33 */ "WITH",
1127 /* 34 */ "SAME",
1128 /* 35 */ "AS",
1129 /* 36 */ "FIT",
1130 /* 37 */ "UNTIL",
1131 /* 38 */ "EVEN",
1132 /* 39 */ "AND",
1133 /* 40 */ "DOT_E",
1134 /* 41 */ "HEIGHT",
1135 /* 42 */ "WIDTH",
1136 /* 43 */ "RADIUS",
1137 /* 44 */ "DIAMETER",
1138 /* 45 */ "DOTTED",
1139 /* 46 */ "DASHED",
1140 /* 47 */ "CW",
1141 /* 48 */ "CCW",
1142 /* 49 */ "LARROW",
1143 /* 50 */ "RARROW",
1144 /* 51 */ "LRARROW",
1145 /* 52 */ "INVIS",
1146 /* 53 */ "CENTER",
1147 /* 54 */ "LJUST",
1148 /* 55 */ "RJUST",
1149 /* 56 */ "ABOVE",
1150 /* 57 */ "BELOW",
1151 /* 58 */ "ITALIC",
1152 /* 59 */ "BOLD",
1153 /* 60 */ "ALIGNED",
1154 /* 61 */ "LP",
1155 /* 62 */ "RP",
1156 /* 63 */ "HEADING",
1157 /* 64 */ "WAY",
1158 /* 65 */ "BETWEEN",
1159 /* 66 */ "THE",
1160 /* 67 */ "DOT_L",
1161 /* 68 */ "START",
1162 /* 69 */ "END",
1163 /* 70 */ "NTH",
1164 /* 71 */ "VERTEX",
1165 /* 72 */ "IN",
1166 /* 73 */ "DOT_U",
1167 /* 74 */ "LAST",
1168 /* 75 */ "NUMBER",
1169 /* 76 */ "FUNC1",
1170 /* 77 */ "FUNC2",
1171 /* 78 */ "X",
1172 /* 79 */ "Y",
@@ -1215,141 +1221,145 @@
1221 /* 6 */ "element ::= PLACENAME COLON unnamed_element",
1222 /* 7 */ "element ::= PLACENAME COLON position",
1223 /* 8 */ "element ::= unnamed_element",
1224 /* 9 */ "element ::= print prlist",
1225 /* 10 */ "rvalue ::= PLACENAME",
1226 /* 11 */ "pritem ::= FILL",
1227 /* 12 */ "pritem ::= COLOR",
1228 /* 13 */ "pritem ::= THICKNESS",
1229 /* 14 */ "pritem ::= rvalue",
1230 /* 15 */ "pritem ::= STRING",
1231 /* 16 */ "prsep ::= COMMA",
1232 /* 17 */ "unnamed_element ::= basetype attribute_list",
1233 /* 18 */ "basetype ::= CLASSNAME",
1234 /* 19 */ "basetype ::= STRING textposition",
1235 /* 20 */ "basetype ::= LB savelist element_list RB",
1236 /* 21 */ "savelist ::=",
1237 /* 22 */ "attribute_list ::= expr",
1238 /* 23 */ "attribute_list ::= expr PERCENT",
1239 /* 24 */ "attribute ::= numproperty expr PERCENT",
1240 /* 25 */ "attribute ::= numproperty expr",
1241 /* 26 */ "attribute ::= dashproperty expr",
1242 /* 27 */ "attribute ::= dashproperty",
1243 /* 28 */ "attribute ::= colorproperty rvalue",
1244 /* 29 */ "attribute ::= direction expr PERCENT",
1245 /* 30 */ "attribute ::= direction expr",
1246 /* 31 */ "attribute ::= direction",
1247 /* 32 */ "attribute ::= direction even position",
1248 /* 33 */ "attribute ::= CLOSE",
1249 /* 34 */ "attribute ::= CHOP",
1250 /* 35 */ "attribute ::= FROM position",
1251 /* 36 */ "attribute ::= TO position",
1252 /* 37 */ "attribute ::= THEN",
1253 /* 38 */ "attribute ::= AT position",
1254 /* 39 */ "attribute ::= SAME",
1255 /* 40 */ "attribute ::= SAME AS object",
1256 /* 41 */ "attribute ::= STRING textposition",
1257 /* 42 */ "attribute ::= FIT",
1258 /* 43 */ "with ::= DOT_E edge AT position",
1259 /* 44 */ "with ::= edge AT position",
1260 /* 45 */ "numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS",
1261 /* 46 */ "boolproperty ::= CW",
1262 /* 47 */ "boolproperty ::= CCW",
1263 /* 48 */ "boolproperty ::= LARROW",
1264 /* 49 */ "boolproperty ::= RARROW",
1265 /* 50 */ "boolproperty ::= LRARROW",
1266 /* 51 */ "boolproperty ::= INVIS",
1267 /* 52 */ "textposition ::=",
1268 /* 53 */ "textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED",
1269 /* 54 */ "position ::= expr COMMA expr",
1270 /* 55 */ "position ::= place PLUS expr COMMA expr",
1271 /* 56 */ "position ::= place MINUS expr COMMA expr",
1272 /* 57 */ "position ::= place PLUS LP expr COMMA expr RP",
1273 /* 58 */ "position ::= place MINUS LP expr COMMA expr RP",
1274 /* 59 */ "position ::= LP position COMMA position RP",
1275 /* 60 */ "position ::= LP position RP",
1276 /* 61 */ "position ::= expr between position AND position",
1277 /* 62 */ "position ::= expr ABOVE position",
1278 /* 63 */ "position ::= expr BELOW position",
1279 /* 64 */ "position ::= expr LEFT OF position",
1280 /* 65 */ "position ::= expr RIGHT OF position",
1281 /* 66 */ "position ::= expr EDGEPT OF position",
1282 /* 67 */ "position ::= expr HEADING expr FROM position",
1283 /* 68 */ "place ::= object",
1284 /* 69 */ "place ::= object DOT_E edge",
1285 /* 70 */ "place ::= object DOT_L START",
1286 /* 71 */ "place ::= object DOT_L END",
1287 /* 72 */ "place ::= START OF object",
1288 /* 73 */ "place ::= END OF object",
1289 /* 74 */ "place ::= edge OF object",
1290 /* 75 */ "place ::= NTH VERTEX OF object",
1291 /* 76 */ "object ::= nth",
1292 /* 77 */ "object ::= nth OF|IN object",
1293 /* 78 */ "objectname ::= PLACENAME",
1294 /* 79 */ "objectname ::= objectname DOT_U PLACENAME",
1295 /* 80 */ "nth ::= NTH CLASSNAME",
1296 /* 81 */ "nth ::= NTH LAST CLASSNAME",
1297 /* 82 */ "nth ::= LAST CLASSNAME",
1298 /* 83 */ "nth ::= LAST",
1299 /* 84 */ "nth ::= NTH LB RB",
1300 /* 85 */ "nth ::= NTH LAST LB RB",
1301 /* 86 */ "nth ::= LAST LB RB",
1302 /* 87 */ "expr ::= expr PLUS expr",
1303 /* 88 */ "expr ::= expr MINUS expr",
1304 /* 89 */ "expr ::= expr STAR expr",
1305 /* 90 */ "expr ::= expr SLASH expr",
1306 /* 91 */ "expr ::= MINUS expr",
1307 /* 92 */ "expr ::= PLUS expr",
1308 /* 93 */ "expr ::= LP expr RP",
1309 /* 94 */ "expr ::= NUMBER",
1310 /* 95 */ "expr ::= ID",
1311 /* 96 */ "expr ::= FUNC1 LP expr RP",
1312 /* 97 */ "expr ::= FUNC2 LP expr COMMA expr RP",
1313 /* 98 */ "expr ::= object DOT_L locproperty",
1314 /* 99 */ "expr ::= object DOT_L numproperty",
1315 /* 100 */ "expr ::= object DOT_L dashproperty",
1316 /* 101 */ "expr ::= object DOT_L colorproperty",
1317 /* 102 */ "expr ::= object DOT_E edge DOT_L X",
1318 /* 103 */ "expr ::= object DOT_E edge DOT_L Y",
1319 /* 104 */ "expr ::= LP locproperty OF object RP",
1320 /* 105 */ "expr ::= LP dashproperty OF object RP",
1321 /* 106 */ "expr ::= LP numproperty OF object RP",
1322 /* 107 */ "expr ::= LP colorproperty OF object RP",
1323 /* 108 */ "expr ::= NTH VERTEX OF object DOT_L X",
1324 /* 109 */ "expr ::= NTH VERTEX OF object DOT_L Y",
1325 /* 110 */ "lvalue ::= ID",
1326 /* 111 */ "lvalue ::= FILL",
1327 /* 112 */ "lvalue ::= COLOR",
1328 /* 113 */ "lvalue ::= THICKNESS",
1329 /* 114 */ "rvalue ::= expr",
1330 /* 115 */ "print ::= PRINT",
1331 /* 116 */ "prlist ::= pritem",
1332 /* 117 */ "prlist ::= prlist prsep pritem",
1333 /* 118 */ "direction ::= UP",
1334 /* 119 */ "direction ::= DOWN",
1335 /* 120 */ "direction ::= LEFT",
1336 /* 121 */ "direction ::= RIGHT",
1337 /* 122 */ "attribute_list ::= alist",
1338 /* 123 */ "alist ::=",
1339 /* 124 */ "alist ::= alist attribute",
1340 /* 125 */ "attribute ::= boolproperty",
1341 /* 126 */ "attribute ::= WITH withclause",
1342 /* 127 */ "even ::= UNTIL EVEN WITH",
1343 /* 128 */ "even ::= EVEN WITH",
1344 /* 129 */ "withclause ::= with",
1345 /* 130 */ "withclause ::= withclause AND with",
1346 /* 131 */ "dashproperty ::= DOTTED",
1347 /* 132 */ "dashproperty ::= DASHED",
1348 /* 133 */ "colorproperty ::= FILL",
1349 /* 134 */ "colorproperty ::= COLOR",
1350 /* 135 */ "position ::= place",
1351 /* 136 */ "between ::= WAY BETWEEN",
1352 /* 137 */ "between ::= BETWEEN",
1353 /* 138 */ "between ::= OF THE WAY BETWEEN",
1354 /* 139 */ "object ::= objectname",
1355 /* 140 */ "locproperty ::= X|Y",
1356 /* 141 */ "edge ::= EDGEPT",
1357 /* 142 */ "edge ::= TOP",
1358 /* 143 */ "edge ::= BOTTOM",
1359 /* 144 */ "edge ::= LEFT",
1360 /* 145 */ "edge ::= RIGHT",
1361 };
1362 #endif /* NDEBUG */
1363
1364
1365 #if YYSTACKDEPTH<=0
@@ -1473,22 +1483,22 @@
1483 ** inside the C code.
1484 */
1485 /********* Begin destructor definitions ***************************************/
1486 case 82: /* element_list */
1487 {
1488 #line 432 "pikchr.y"
1489 pik_elist_free(p,(yypminor->yy42));
1490 #line 1515 "pikchr.c"
1491 }
1492 break;
1493 case 83: /* element */
1494 case 84: /* unnamed_element */
1495 case 85: /* basetype */
1496 {
1497 #line 434 "pikchr.y"
1498 pik_elem_free(p,(yypminor->yy24));
1499 #line 1524 "pikchr.c"
1500 }
1501 break;
1502 /********* End destructor definitions *****************************************/
1503 default: break; /* If no destructor action specified: do nothing */
1504 }
@@ -1702,14 +1712,14 @@
1712 #endif
1713 while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
1714 /* Here code is inserted which will execute if the parser
1715 ** stack every overflows */
1716 /******** Begin %stack_overflow code ******************************************/
1717 #line 463 "pikchr.y"
1718
1719 pik_error(p, 0, "parser stack overflow");
1720 #line 1745 "pikchr.c"
1721 /******** End %stack_overflow code ********************************************/
1722 pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */
1723 pik_parserCTX_STORE
1724 }
1725
@@ -1788,141 +1798,145 @@
1798 83, /* (6) element ::= PLACENAME COLON unnamed_element */
1799 83, /* (7) element ::= PLACENAME COLON position */
1800 83, /* (8) element ::= unnamed_element */
1801 83, /* (9) element ::= print prlist */
1802 99, /* (10) rvalue ::= PLACENAME */
1803 105, /* (11) pritem ::= FILL */
1804 105, /* (12) pritem ::= COLOR */
1805 105, /* (13) pritem ::= THICKNESS */
1806 105, /* (14) pritem ::= rvalue */
1807 105, /* (15) pritem ::= STRING */
1808 106, /* (16) prsep ::= COMMA */
1809 84, /* (17) unnamed_element ::= basetype attribute_list */
1810 85, /* (18) basetype ::= CLASSNAME */
1811 85, /* (19) basetype ::= STRING textposition */
1812 85, /* (20) basetype ::= LB savelist element_list RB */
1813 108, /* (21) savelist ::= */
1814 107, /* (22) attribute_list ::= expr */
1815 107, /* (23) attribute_list ::= expr PERCENT */
1816 110, /* (24) attribute ::= numproperty expr PERCENT */
1817 110, /* (25) attribute ::= numproperty expr */
1818 110, /* (26) attribute ::= dashproperty expr */
1819 110, /* (27) attribute ::= dashproperty */
1820 110, /* (28) attribute ::= colorproperty rvalue */
1821 110, /* (29) attribute ::= direction expr PERCENT */
1822 110, /* (30) attribute ::= direction expr */
1823 110, /* (31) attribute ::= direction */
1824 110, /* (32) attribute ::= direction even position */
1825 110, /* (33) attribute ::= CLOSE */
1826 110, /* (34) attribute ::= CHOP */
1827 110, /* (35) attribute ::= FROM position */
1828 110, /* (36) attribute ::= TO position */
1829 110, /* (37) attribute ::= THEN */
1830 110, /* (38) attribute ::= AT position */
1831 110, /* (39) attribute ::= SAME */
1832 110, /* (40) attribute ::= SAME AS object */
1833 110, /* (41) attribute ::= STRING textposition */
1834 110, /* (42) attribute ::= FIT */
1835 113, /* (43) with ::= DOT_E edge AT position */
1836 113, /* (44) with ::= edge AT position */
1837 87, /* (45) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
1838 111, /* (46) boolproperty ::= CW */
1839 111, /* (47) boolproperty ::= CCW */
1840 111, /* (48) boolproperty ::= LARROW */
1841 111, /* (49) boolproperty ::= RARROW */
1842 111, /* (50) boolproperty ::= LRARROW */
1843 111, /* (51) boolproperty ::= INVIS */
1844 98, /* (52) textposition ::= */
1845 98, /* (53) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED */
1846 93, /* (54) position ::= expr COMMA expr */
1847 93, /* (55) position ::= place PLUS expr COMMA expr */
1848 93, /* (56) position ::= place MINUS expr COMMA expr */
1849 93, /* (57) position ::= place PLUS LP expr COMMA expr RP */
1850 93, /* (58) position ::= place MINUS LP expr COMMA expr RP */
1851 93, /* (59) position ::= LP position COMMA position RP */
1852 93, /* (60) position ::= LP position RP */
1853 93, /* (61) position ::= expr between position AND position */
1854 93, /* (62) position ::= expr ABOVE position */
1855 93, /* (63) position ::= expr BELOW position */
1856 93, /* (64) position ::= expr LEFT OF position */
1857 93, /* (65) position ::= expr RIGHT OF position */
1858 93, /* (66) position ::= expr EDGEPT OF position */
1859 93, /* (67) position ::= expr HEADING expr FROM position */
1860 94, /* (68) place ::= object */
1861 94, /* (69) place ::= object DOT_E edge */
1862 94, /* (70) place ::= object DOT_L START */
1863 94, /* (71) place ::= object DOT_L END */
1864 94, /* (72) place ::= START OF object */
1865 94, /* (73) place ::= END OF object */
1866 94, /* (74) place ::= edge OF object */
1867 94, /* (75) place ::= NTH VERTEX OF object */
1868 95, /* (76) object ::= nth */
1869 95, /* (77) object ::= nth OF|IN object */
1870 96, /* (78) objectname ::= PLACENAME */
1871 96, /* (79) objectname ::= objectname DOT_U PLACENAME */
1872 97, /* (80) nth ::= NTH CLASSNAME */
1873 97, /* (81) nth ::= NTH LAST CLASSNAME */
1874 97, /* (82) nth ::= LAST CLASSNAME */
1875 97, /* (83) nth ::= LAST */
1876 97, /* (84) nth ::= NTH LB RB */
1877 97, /* (85) nth ::= NTH LAST LB RB */
1878 97, /* (86) nth ::= LAST LB RB */
1879 86, /* (87) expr ::= expr PLUS expr */
1880 86, /* (88) expr ::= expr MINUS expr */
1881 86, /* (89) expr ::= expr STAR expr */
1882 86, /* (90) expr ::= expr SLASH expr */
1883 86, /* (91) expr ::= MINUS expr */
1884 86, /* (92) expr ::= PLUS expr */
1885 86, /* (93) expr ::= LP expr RP */
1886 86, /* (94) expr ::= NUMBER */
1887 86, /* (95) expr ::= ID */
1888 86, /* (96) expr ::= FUNC1 LP expr RP */
1889 86, /* (97) expr ::= FUNC2 LP expr COMMA expr RP */
1890 86, /* (98) expr ::= object DOT_L locproperty */
1891 86, /* (99) expr ::= object DOT_L numproperty */
1892 86, /* (100) expr ::= object DOT_L dashproperty */
1893 86, /* (101) expr ::= object DOT_L colorproperty */
1894 86, /* (102) expr ::= object DOT_E edge DOT_L X */
1895 86, /* (103) expr ::= object DOT_E edge DOT_L Y */
1896 86, /* (104) expr ::= LP locproperty OF object RP */
1897 86, /* (105) expr ::= LP dashproperty OF object RP */
1898 86, /* (106) expr ::= LP numproperty OF object RP */
1899 86, /* (107) expr ::= LP colorproperty OF object RP */
1900 86, /* (108) expr ::= NTH VERTEX OF object DOT_L X */
1901 86, /* (109) expr ::= NTH VERTEX OF object DOT_L Y */
1902 100, /* (110) lvalue ::= ID */
1903 100, /* (111) lvalue ::= FILL */
1904 100, /* (112) lvalue ::= COLOR */
1905 100, /* (113) lvalue ::= THICKNESS */
1906 99, /* (114) rvalue ::= expr */
1907 103, /* (115) print ::= PRINT */
1908 104, /* (116) prlist ::= pritem */
1909 104, /* (117) prlist ::= prlist prsep pritem */
1910 89, /* (118) direction ::= UP */
1911 89, /* (119) direction ::= DOWN */
1912 89, /* (120) direction ::= LEFT */
1913 89, /* (121) direction ::= RIGHT */
1914 107, /* (122) attribute_list ::= alist */
1915 109, /* (123) alist ::= */
1916 109, /* (124) alist ::= alist attribute */
1917 110, /* (125) attribute ::= boolproperty */
1918 110, /* (126) attribute ::= WITH withclause */
1919 101, /* (127) even ::= UNTIL EVEN WITH */
1920 101, /* (128) even ::= EVEN WITH */
1921 112, /* (129) withclause ::= with */
1922 112, /* (130) withclause ::= withclause AND with */
1923 90, /* (131) dashproperty ::= DOTTED */
1924 90, /* (132) dashproperty ::= DASHED */
1925 91, /* (133) colorproperty ::= FILL */
1926 91, /* (134) colorproperty ::= COLOR */
1927 93, /* (135) position ::= place */
1928 114, /* (136) between ::= WAY BETWEEN */
1929 114, /* (137) between ::= BETWEEN */
1930 114, /* (138) between ::= OF THE WAY BETWEEN */
1931 95, /* (139) object ::= objectname */
1932 92, /* (140) locproperty ::= X|Y */
1933 88, /* (141) edge ::= EDGEPT */
1934 88, /* (142) edge ::= TOP */
1935 88, /* (143) edge ::= BOTTOM */
1936 88, /* (144) edge ::= LEFT */
1937 88, /* (145) edge ::= RIGHT */
1938 };
1939
1940 /* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
1941 ** of symbols on the right-hand side of that rule. */
1942 static const signed char yyRuleInfoNRhs[] = {
@@ -1935,141 +1949,145 @@
1949 -3, /* (6) element ::= PLACENAME COLON unnamed_element */
1950 -3, /* (7) element ::= PLACENAME COLON position */
1951 -1, /* (8) element ::= unnamed_element */
1952 -2, /* (9) element ::= print prlist */
1953 -1, /* (10) rvalue ::= PLACENAME */
1954 -1, /* (11) pritem ::= FILL */
1955 -1, /* (12) pritem ::= COLOR */
1956 -1, /* (13) pritem ::= THICKNESS */
1957 -1, /* (14) pritem ::= rvalue */
1958 -1, /* (15) pritem ::= STRING */
1959 -1, /* (16) prsep ::= COMMA */
1960 -2, /* (17) unnamed_element ::= basetype attribute_list */
1961 -1, /* (18) basetype ::= CLASSNAME */
1962 -2, /* (19) basetype ::= STRING textposition */
1963 -4, /* (20) basetype ::= LB savelist element_list RB */
1964 0, /* (21) savelist ::= */
1965 -1, /* (22) attribute_list ::= expr */
1966 -2, /* (23) attribute_list ::= expr PERCENT */
1967 -3, /* (24) attribute ::= numproperty expr PERCENT */
1968 -2, /* (25) attribute ::= numproperty expr */
1969 -2, /* (26) attribute ::= dashproperty expr */
1970 -1, /* (27) attribute ::= dashproperty */
1971 -2, /* (28) attribute ::= colorproperty rvalue */
1972 -3, /* (29) attribute ::= direction expr PERCENT */
1973 -2, /* (30) attribute ::= direction expr */
1974 -1, /* (31) attribute ::= direction */
1975 -3, /* (32) attribute ::= direction even position */
1976 -1, /* (33) attribute ::= CLOSE */
1977 -1, /* (34) attribute ::= CHOP */
1978 -2, /* (35) attribute ::= FROM position */
1979 -2, /* (36) attribute ::= TO position */
1980 -1, /* (37) attribute ::= THEN */
1981 -2, /* (38) attribute ::= AT position */
1982 -1, /* (39) attribute ::= SAME */
1983 -3, /* (40) attribute ::= SAME AS object */
1984 -2, /* (41) attribute ::= STRING textposition */
1985 -1, /* (42) attribute ::= FIT */
1986 -4, /* (43) with ::= DOT_E edge AT position */
1987 -3, /* (44) with ::= edge AT position */
1988 -1, /* (45) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
1989 -1, /* (46) boolproperty ::= CW */
1990 -1, /* (47) boolproperty ::= CCW */
1991 -1, /* (48) boolproperty ::= LARROW */
1992 -1, /* (49) boolproperty ::= RARROW */
1993 -1, /* (50) boolproperty ::= LRARROW */
1994 -1, /* (51) boolproperty ::= INVIS */
1995 0, /* (52) textposition ::= */
1996 -2, /* (53) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED */
1997 -3, /* (54) position ::= expr COMMA expr */
1998 -5, /* (55) position ::= place PLUS expr COMMA expr */
1999 -5, /* (56) position ::= place MINUS expr COMMA expr */
2000 -7, /* (57) position ::= place PLUS LP expr COMMA expr RP */
2001 -7, /* (58) position ::= place MINUS LP expr COMMA expr RP */
2002 -5, /* (59) position ::= LP position COMMA position RP */
2003 -3, /* (60) position ::= LP position RP */
2004 -5, /* (61) position ::= expr between position AND position */
2005 -3, /* (62) position ::= expr ABOVE position */
2006 -3, /* (63) position ::= expr BELOW position */
2007 -4, /* (64) position ::= expr LEFT OF position */
2008 -4, /* (65) position ::= expr RIGHT OF position */
2009 -4, /* (66) position ::= expr EDGEPT OF position */
2010 -5, /* (67) position ::= expr HEADING expr FROM position */
2011 -1, /* (68) place ::= object */
2012 -3, /* (69) place ::= object DOT_E edge */
2013 -3, /* (70) place ::= object DOT_L START */
2014 -3, /* (71) place ::= object DOT_L END */
2015 -3, /* (72) place ::= START OF object */
2016 -3, /* (73) place ::= END OF object */
2017 -3, /* (74) place ::= edge OF object */
2018 -4, /* (75) place ::= NTH VERTEX OF object */
2019 -1, /* (76) object ::= nth */
2020 -3, /* (77) object ::= nth OF|IN object */
2021 -1, /* (78) objectname ::= PLACENAME */
2022 -3, /* (79) objectname ::= objectname DOT_U PLACENAME */
2023 -2, /* (80) nth ::= NTH CLASSNAME */
2024 -3, /* (81) nth ::= NTH LAST CLASSNAME */
2025 -2, /* (82) nth ::= LAST CLASSNAME */
2026 -1, /* (83) nth ::= LAST */
2027 -3, /* (84) nth ::= NTH LB RB */
2028 -4, /* (85) nth ::= NTH LAST LB RB */
2029 -3, /* (86) nth ::= LAST LB RB */
2030 -3, /* (87) expr ::= expr PLUS expr */
2031 -3, /* (88) expr ::= expr MINUS expr */
2032 -3, /* (89) expr ::= expr STAR expr */
2033 -3, /* (90) expr ::= expr SLASH expr */
2034 -2, /* (91) expr ::= MINUS expr */
2035 -2, /* (92) expr ::= PLUS expr */
2036 -3, /* (93) expr ::= LP expr RP */
2037 -1, /* (94) expr ::= NUMBER */
2038 -1, /* (95) expr ::= ID */
2039 -4, /* (96) expr ::= FUNC1 LP expr RP */
2040 -6, /* (97) expr ::= FUNC2 LP expr COMMA expr RP */
2041 -3, /* (98) expr ::= object DOT_L locproperty */
2042 -3, /* (99) expr ::= object DOT_L numproperty */
2043 -3, /* (100) expr ::= object DOT_L dashproperty */
2044 -3, /* (101) expr ::= object DOT_L colorproperty */
2045 -5, /* (102) expr ::= object DOT_E edge DOT_L X */
2046 -5, /* (103) expr ::= object DOT_E edge DOT_L Y */
2047 -5, /* (104) expr ::= LP locproperty OF object RP */
2048 -5, /* (105) expr ::= LP dashproperty OF object RP */
2049 -5, /* (106) expr ::= LP numproperty OF object RP */
2050 -5, /* (107) expr ::= LP colorproperty OF object RP */
2051 -6, /* (108) expr ::= NTH VERTEX OF object DOT_L X */
2052 -6, /* (109) expr ::= NTH VERTEX OF object DOT_L Y */
2053 -1, /* (110) lvalue ::= ID */
2054 -1, /* (111) lvalue ::= FILL */
2055 -1, /* (112) lvalue ::= COLOR */
2056 -1, /* (113) lvalue ::= THICKNESS */
2057 -1, /* (114) rvalue ::= expr */
2058 -1, /* (115) print ::= PRINT */
2059 -1, /* (116) prlist ::= pritem */
2060 -3, /* (117) prlist ::= prlist prsep pritem */
2061 -1, /* (118) direction ::= UP */
2062 -1, /* (119) direction ::= DOWN */
2063 -1, /* (120) direction ::= LEFT */
2064 -1, /* (121) direction ::= RIGHT */
2065 -1, /* (122) attribute_list ::= alist */
2066 0, /* (123) alist ::= */
2067 -2, /* (124) alist ::= alist attribute */
2068 -1, /* (125) attribute ::= boolproperty */
2069 -2, /* (126) attribute ::= WITH withclause */
2070 -3, /* (127) even ::= UNTIL EVEN WITH */
2071 -2, /* (128) even ::= EVEN WITH */
2072 -1, /* (129) withclause ::= with */
2073 -3, /* (130) withclause ::= withclause AND with */
2074 -1, /* (131) dashproperty ::= DOTTED */
2075 -1, /* (132) dashproperty ::= DASHED */
2076 -1, /* (133) colorproperty ::= FILL */
2077 -1, /* (134) colorproperty ::= COLOR */
2078 -1, /* (135) position ::= place */
2079 -2, /* (136) between ::= WAY BETWEEN */
2080 -1, /* (137) between ::= BETWEEN */
2081 -4, /* (138) between ::= OF THE WAY BETWEEN */
2082 -1, /* (139) object ::= objectname */
2083 -1, /* (140) locproperty ::= X|Y */
2084 -1, /* (141) edge ::= EDGEPT */
2085 -1, /* (142) edge ::= TOP */
2086 -1, /* (143) edge ::= BOTTOM */
2087 -1, /* (144) edge ::= LEFT */
2088 -1, /* (145) edge ::= RIGHT */
2089 };
2090
2091 static void yy_accept(yyParser*); /* Forward Declaration */
2092
2093 /*
@@ -2156,587 +2174,595 @@
2174 ** break;
2175 */
2176 /********** Begin reduce actions **********************************************/
2177 YYMINORTYPE yylhsminor;
2178 case 0: /* document ::= element_list */
2179 #line 467 "pikchr.y"
2180 {pik_render(p,yymsp[0].minor.yy42);}
2181 #line 2206 "pikchr.c"
2182 break;
2183 case 1: /* element_list ::= element */
2184 #line 470 "pikchr.y"
2185 { yylhsminor.yy42 = pik_elist_append(p,0,yymsp[0].minor.yy24); }
2186 #line 2211 "pikchr.c"
2187 yymsp[0].minor.yy42 = yylhsminor.yy42;
2188 break;
2189 case 2: /* element_list ::= element_list EOL element */
2190 #line 472 "pikchr.y"
2191 { yylhsminor.yy42 = pik_elist_append(p,yymsp[-2].minor.yy42,yymsp[0].minor.yy24); }
2192 #line 2217 "pikchr.c"
2193 yymsp[-2].minor.yy42 = yylhsminor.yy42;
2194 break;
2195 case 3: /* element ::= */
2196 #line 475 "pikchr.y"
2197 { yymsp[1].minor.yy24 = 0; }
2198 #line 2223 "pikchr.c"
2199 break;
2200 case 4: /* element ::= direction */
2201 #line 476 "pikchr.y"
2202 { pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy24=0; }
2203 #line 2228 "pikchr.c"
2204 yymsp[0].minor.yy24 = yylhsminor.yy24;
2205 break;
2206 case 5: /* element ::= lvalue ASSIGN rvalue */
2207 #line 477 "pikchr.y"
2208 {pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy83,&yymsp[-1].minor.yy0); yylhsminor.yy24=0;}
2209 #line 2234 "pikchr.c"
2210 yymsp[-2].minor.yy24 = yylhsminor.yy24;
2211 break;
2212 case 6: /* element ::= PLACENAME COLON unnamed_element */
2213 #line 479 "pikchr.y"
2214 { yylhsminor.yy24 = yymsp[0].minor.yy24; pik_elem_setname(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0); }
2215 #line 2240 "pikchr.c"
2216 yymsp[-2].minor.yy24 = yylhsminor.yy24;
2217 break;
2218 case 7: /* element ::= PLACENAME COLON position */
2219 #line 481 "pikchr.y"
2220 { yylhsminor.yy24 = pik_elem_new(p,0,0,0);
2221 if(yylhsminor.yy24){ yylhsminor.yy24->ptAt = yymsp[0].minor.yy49; pik_elem_setname(p,yylhsminor.yy24,&yymsp[-2].minor.yy0); }}
2222 #line 2247 "pikchr.c"
2223 yymsp[-2].minor.yy24 = yylhsminor.yy24;
2224 break;
2225 case 8: /* element ::= unnamed_element */
2226 #line 483 "pikchr.y"
2227 {yylhsminor.yy24 = yymsp[0].minor.yy24;}
2228 #line 2253 "pikchr.c"
2229 yymsp[0].minor.yy24 = yylhsminor.yy24;
2230 break;
2231 case 9: /* element ::= print prlist */
2232 #line 484 "pikchr.y"
2233 {pik_append(p,"<br>\n",5); yymsp[-1].minor.yy24=0;}
2234 #line 2259 "pikchr.c"
2235 break;
2236 case 10: /* rvalue ::= PLACENAME */
2237 #line 495 "pikchr.y"
2238 {yylhsminor.yy83 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2239 #line 2264 "pikchr.c"
2240 yymsp[0].minor.yy83 = yylhsminor.yy83;
2241 break;
2242 case 11: /* pritem ::= FILL */
2243 case 12: /* pritem ::= COLOR */ yytestcase(yyruleno==12);
2244 case 13: /* pritem ::= THICKNESS */ yytestcase(yyruleno==13);
2245 #line 500 "pikchr.y"
2246 {pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));}
2247 #line 2272 "pikchr.c"
2248 break;
2249 case 14: /* pritem ::= rvalue */
2250 #line 503 "pikchr.y"
2251 {pik_append_num(p,"",yymsp[0].minor.yy83);}
2252 #line 2277 "pikchr.c"
2253 break;
2254 case 15: /* pritem ::= STRING */
2255 #line 504 "pikchr.y"
2256 {pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2257 #line 2282 "pikchr.c"
2258 break;
2259 case 16: /* prsep ::= COMMA */
2260 #line 505 "pikchr.y"
2261 {pik_append(p, " ", 1);}
2262 #line 2287 "pikchr.c"
2263 break;
2264 case 17: /* unnamed_element ::= basetype attribute_list */
2265 #line 508 "pikchr.y"
2266 {yylhsminor.yy24 = yymsp[-1].minor.yy24; pik_after_adding_attributes(p,yylhsminor.yy24);}
2267 #line 2292 "pikchr.c"
2268 yymsp[-1].minor.yy24 = yylhsminor.yy24;
2269 break;
2270 case 18: /* basetype ::= CLASSNAME */
2271 #line 510 "pikchr.y"
2272 {yylhsminor.yy24 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2273 #line 2298 "pikchr.c"
2274 yymsp[0].minor.yy24 = yylhsminor.yy24;
2275 break;
2276 case 19: /* basetype ::= STRING textposition */
2277 #line 512 "pikchr.y"
2278 {yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy52; yylhsminor.yy24 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2279 #line 2304 "pikchr.c"
2280 yymsp[-1].minor.yy24 = yylhsminor.yy24;
2281 break;
2282 case 20: /* basetype ::= LB savelist element_list RB */
2283 #line 514 "pikchr.y"
2284 { p->list = yymsp[-2].minor.yy42; yymsp[-3].minor.yy24 = pik_elem_new(p,0,0,yymsp[-1].minor.yy42); if(yymsp[-3].minor.yy24) yymsp[-3].minor.yy24->errTok = yymsp[0].minor.yy0; }
2285 #line 2310 "pikchr.c"
2286 break;
2287 case 21: /* savelist ::= */
2288 #line 519 "pikchr.y"
2289 {yymsp[1].minor.yy42 = p->list; p->list = 0;}
2290 #line 2315 "pikchr.c"
2291 break;
2292 case 22: /* attribute_list ::= expr */
2293 #line 526 "pikchr.y"
2294 { pik_add_direction(p,0,&yymsp[0].minor.yy83,0);}
2295 #line 2320 "pikchr.c"
2296 break;
2297 case 23: /* attribute_list ::= expr PERCENT */
2298 #line 527 "pikchr.y"
2299 { pik_add_direction(p,0,&yymsp[-1].minor.yy83,1);}
2300 #line 2325 "pikchr.c"
2301 break;
2302 case 24: /* attribute ::= numproperty expr PERCENT */
2303 #line 532 "pikchr.y"
2304 { pik_set_numprop(p,&yymsp[-2].minor.yy0,0.0,yymsp[-1].minor.yy83/100.0); }
2305 #line 2330 "pikchr.c"
2306 break;
2307 case 25: /* attribute ::= numproperty expr */
2308 case 28: /* attribute ::= colorproperty rvalue */ yytestcase(yyruleno==28);
2309 #line 533 "pikchr.y"
2310 { pik_set_numprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy83,0.0); }
2311 #line 2336 "pikchr.c"
2312 break;
2313 case 26: /* attribute ::= dashproperty expr */
2314 #line 534 "pikchr.y"
2315 { pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy83); }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2316 #line 2341 "pikchr.c"
2317 break;
2318 case 27: /* attribute ::= dashproperty */
2319 #line 535 "pikchr.y"
2320 { pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2321 #line 2346 "pikchr.c"
2322 break;
2323 case 29: /* attribute ::= direction expr PERCENT */
2324 #line 538 "pikchr.y"
2325 { pik_add_direction(p,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy83,1);}
2326 #line 2351 "pikchr.c"
2327 break;
2328 case 30: /* attribute ::= direction expr */
2329 #line 539 "pikchr.y"
2330 { pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy83,0);}
2331 #line 2356 "pikchr.c"
2332 break;
2333 case 31: /* attribute ::= direction */
2334 #line 540 "pikchr.y"
2335 { pik_add_direction(p,&yymsp[0].minor.yy0,0,0); }
2336 #line 2361 "pikchr.c"
2337 break;
2338 case 32: /* attribute ::= direction even position */
2339 #line 541 "pikchr.y"
2340 {pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy49);}
2341 #line 2366 "pikchr.c"
2342 break;
2343 case 33: /* attribute ::= CLOSE */
2344 #line 542 "pikchr.y"
2345 { pik_close_path(p,&yymsp[0].minor.yy0); }
2346 #line 2371 "pikchr.c"
2347 break;
2348 case 34: /* attribute ::= CHOP */
2349 #line 543 "pikchr.y"
2350 { p->cur->bChop = 1; }
2351 #line 2376 "pikchr.c"
2352 break;
2353 case 35: /* attribute ::= FROM position */
2354 #line 544 "pikchr.y"
2355 { pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy49); }
2356 #line 2381 "pikchr.c"
2357 break;
2358 case 36: /* attribute ::= TO position */
2359 #line 545 "pikchr.y"
2360 { pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy49); }
2361 #line 2386 "pikchr.c"
2362 break;
2363 case 37: /* attribute ::= THEN */
2364 #line 546 "pikchr.y"
2365 { pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2366 #line 2391 "pikchr.c"
2367 break;
2368 case 38: /* attribute ::= AT position */
2369 #line 548 "pikchr.y"
2370 { pik_set_at(p,0,&yymsp[0].minor.yy49,&yymsp[-1].minor.yy0); }
2371 #line 2396 "pikchr.c"
 
2372 break;
2373 case 39: /* attribute ::= SAME */
2374 #line 550 "pikchr.y"
2375 {pik_same(p,0,&yymsp[0].minor.yy0);}
2376 #line 2401 "pikchr.c"
2377 break;
2378 case 40: /* attribute ::= SAME AS object */
2379 #line 551 "pikchr.y"
2380 {pik_same(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0);}
2381 #line 2406 "pikchr.c"
2382 break;
2383 case 41: /* attribute ::= STRING textposition */
2384 #line 552 "pikchr.y"
2385 {pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy52);}
2386 #line 2411 "pikchr.c"
2387 break;
2388 case 42: /* attribute ::= FIT */
2389 #line 553 "pikchr.y"
2390 {pik_size_to_fit(p,&yymsp[0].minor.yy0); }
2391 #line 2416 "pikchr.c"
2392 break;
2393 case 43: /* with ::= DOT_E edge AT position */
2394 case 44: /* with ::= edge AT position */ yytestcase(yyruleno==44);
2395 #line 560 "pikchr.y"
2396 { pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy49,&yymsp[-1].minor.yy0); }
2397 #line 2422 "pikchr.c"
2398 break;
2399 case 45: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2400 #line 564 "pikchr.y"
2401 {yylhsminor.yy0 = yymsp[0].minor.yy0;}
2402 #line 2427 "pikchr.c"
2403 yymsp[0].minor.yy0 = yylhsminor.yy0;
2404 break;
2405 case 46: /* boolproperty ::= CW */
2406 #line 575 "pikchr.y"
2407 {p->cur->cw = 1;}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2408 #line 2433 "pikchr.c"
2409 break;
2410 case 47: /* boolproperty ::= CCW */
2411 #line 576 "pikchr.y"
2412 {p->cur->cw = 0;}
2413 #line 2438 "pikchr.c"
2414 break;
2415 case 48: /* boolproperty ::= LARROW */
2416 #line 577 "pikchr.y"
2417 {p->cur->larrow=1; p->cur->rarrow=0; }
2418 #line 2443 "pikchr.c"
2419 break;
2420 case 49: /* boolproperty ::= RARROW */
2421 #line 578 "pikchr.y"
2422 {p->cur->larrow=0; p->cur->rarrow=1; }
2423 #line 2448 "pikchr.c"
2424 break;
2425 case 50: /* boolproperty ::= LRARROW */
2426 #line 579 "pikchr.y"
2427 {p->cur->larrow=1; p->cur->rarrow=1; }
2428 #line 2453 "pikchr.c"
2429 break;
2430 case 51: /* boolproperty ::= INVIS */
2431 #line 580 "pikchr.y"
2432 {p->cur->sw = 0.0;}
2433 #line 2458 "pikchr.c"
2434 break;
2435 case 52: /* textposition ::= */
2436 #line 582 "pikchr.y"
2437 {yymsp[1].minor.yy52 = 0;}
2438 #line 2463 "pikchr.c"
2439 break;
2440 case 53: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED */
2441 #line 585 "pikchr.y"
2442 {yylhsminor.yy52 = pik_text_position(p,yymsp[-1].minor.yy52,&yymsp[0].minor.yy0);}
2443 #line 2468 "pikchr.c"
2444 yymsp[-1].minor.yy52 = yylhsminor.yy52;
2445 break;
2446 case 54: /* position ::= expr COMMA expr */
2447 #line 588 "pikchr.y"
2448 {yylhsminor.yy49.x=yymsp[-2].minor.yy83; yylhsminor.yy49.y=yymsp[0].minor.yy83;}
2449 #line 2474 "pikchr.c"
2450 yymsp[-2].minor.yy49 = yylhsminor.yy49;
2451 break;
2452 case 55: /* position ::= place PLUS expr COMMA expr */
2453 #line 590 "pikchr.y"
2454 {yylhsminor.yy49.x=yymsp[-4].minor.yy49.x+yymsp[-2].minor.yy83; yylhsminor.yy49.y=yymsp[-4].minor.yy49.y+yymsp[0].minor.yy83;}
2455 #line 2480 "pikchr.c"
2456 yymsp[-4].minor.yy49 = yylhsminor.yy49;
2457 break;
2458 case 56: /* position ::= place MINUS expr COMMA expr */
2459 #line 591 "pikchr.y"
2460 {yylhsminor.yy49.x=yymsp[-4].minor.yy49.x-yymsp[-2].minor.yy83; yylhsminor.yy49.y=yymsp[-4].minor.yy49.y-yymsp[0].minor.yy83;}
2461 #line 2486 "pikchr.c"
2462 yymsp[-4].minor.yy49 = yylhsminor.yy49;
2463 break;
2464 case 57: /* position ::= place PLUS LP expr COMMA expr RP */
2465 #line 593 "pikchr.y"
2466 {yylhsminor.yy49.x=yymsp[-6].minor.yy49.x+yymsp[-3].minor.yy83; yylhsminor.yy49.y=yymsp[-6].minor.yy49.y+yymsp[-1].minor.yy83;}
2467 #line 2492 "pikchr.c"
2468 yymsp[-6].minor.yy49 = yylhsminor.yy49;
2469 break;
2470 case 58: /* position ::= place MINUS LP expr COMMA expr RP */
2471 #line 595 "pikchr.y"
2472 {yylhsminor.yy49.x=yymsp[-6].minor.yy49.x-yymsp[-3].minor.yy83; yylhsminor.yy49.y=yymsp[-6].minor.yy49.y-yymsp[-1].minor.yy83;}
2473 #line 2498 "pikchr.c"
2474 yymsp[-6].minor.yy49 = yylhsminor.yy49;
2475 break;
2476 case 59: /* position ::= LP position COMMA position RP */
2477 #line 596 "pikchr.y"
2478 {yymsp[-4].minor.yy49.x=yymsp[-3].minor.yy49.x; yymsp[-4].minor.yy49.y=yymsp[-1].minor.yy49.y;}
2479 #line 2504 "pikchr.c"
2480 break;
2481 case 60: /* position ::= LP position RP */
2482 #line 597 "pikchr.y"
2483 {yymsp[-2].minor.yy49=yymsp[-1].minor.yy49;}
2484 #line 2509 "pikchr.c"
2485 break;
2486 case 61: /* position ::= expr between position AND position */
2487 #line 599 "pikchr.y"
2488 {yylhsminor.yy49 = pik_position_between(p,yymsp[-4].minor.yy83,yymsp[-2].minor.yy49,yymsp[0].minor.yy49);}
2489 #line 2514 "pikchr.c"
2490 yymsp[-4].minor.yy49 = yylhsminor.yy49;
2491 break;
2492 case 62: /* position ::= expr ABOVE position */
2493 #line 600 "pikchr.y"
2494 {yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.y += yymsp[-2].minor.yy83;}
2495 #line 2520 "pikchr.c"
2496 yymsp[-2].minor.yy49 = yylhsminor.yy49;
2497 break;
2498 case 63: /* position ::= expr BELOW position */
2499 #line 601 "pikchr.y"
2500 {yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.y -= yymsp[-2].minor.yy83;}
2501 #line 2526 "pikchr.c"
2502 yymsp[-2].minor.yy49 = yylhsminor.yy49;
2503 break;
2504 case 64: /* position ::= expr LEFT OF position */
2505 #line 602 "pikchr.y"
2506 {yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.x -= yymsp[-3].minor.yy83;}
2507 #line 2532 "pikchr.c"
2508 yymsp[-3].minor.yy49 = yylhsminor.yy49;
2509 break;
2510 case 65: /* position ::= expr RIGHT OF position */
2511 #line 603 "pikchr.y"
2512 {yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.x += yymsp[-3].minor.yy83;}
2513 #line 2538 "pikchr.c"
2514 yymsp[-3].minor.yy49 = yylhsminor.yy49;
2515 break;
2516 case 66: /* position ::= expr EDGEPT OF position */
2517 #line 605 "pikchr.y"
2518 {yylhsminor.yy49 = pik_position_at_hdg(p,yymsp[-3].minor.yy83,&yymsp[-2].minor.yy0,yymsp[0].minor.yy49);}
2519 #line 2544 "pikchr.c"
2520 yymsp[-3].minor.yy49 = yylhsminor.yy49;
2521 break;
2522 case 67: /* position ::= expr HEADING expr FROM position */
2523 #line 607 "pikchr.y"
2524 {yylhsminor.yy49 = pik_position_at_angle(p,yymsp[-4].minor.yy83,yymsp[-2].minor.yy83,yymsp[0].minor.yy49);}
2525 #line 2550 "pikchr.c"
2526 yymsp[-4].minor.yy49 = yylhsminor.yy49;
2527 break;
2528 case 68: /* place ::= object */
2529 #line 613 "pikchr.y"
2530 {yylhsminor.yy49 = pik_place_of_elem(p,yymsp[0].minor.yy24,0);}
2531 #line 2556 "pikchr.c"
2532 yymsp[0].minor.yy49 = yylhsminor.yy49;
2533 break;
2534 case 69: /* place ::= object DOT_E edge */
2535 case 70: /* place ::= object DOT_L START */ yytestcase(yyruleno==70);
2536 case 71: /* place ::= object DOT_L END */ yytestcase(yyruleno==71);
2537 #line 614 "pikchr.y"
2538 {yylhsminor.yy49 = pik_place_of_elem(p,yymsp[-2].minor.yy24,&yymsp[0].minor.yy0);}
2539 #line 2564 "pikchr.c"
2540 yymsp[-2].minor.yy49 = yylhsminor.yy49;
2541 break;
2542 case 72: /* place ::= START OF object */
2543 case 73: /* place ::= END OF object */ yytestcase(yyruleno==73);
2544 case 74: /* place ::= edge OF object */ yytestcase(yyruleno==74);
2545 #line 617 "pikchr.y"
2546 {yylhsminor.yy49 = pik_place_of_elem(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0);}
2547 #line 2572 "pikchr.c"
2548 yymsp[-2].minor.yy49 = yylhsminor.yy49;
2549 break;
2550 case 75: /* place ::= NTH VERTEX OF object */
2551 #line 620 "pikchr.y"
2552 {yylhsminor.yy49 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy24);}
2553 #line 2578 "pikchr.c"
2554 yymsp[-3].minor.yy49 = yylhsminor.yy49;
2555 break;
2556 case 76: /* object ::= nth */
2557 #line 623 "pikchr.y"
2558 {yylhsminor.yy24 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2559 #line 2584 "pikchr.c"
2560 yymsp[0].minor.yy24 = yylhsminor.yy24;
2561 break;
2562 case 77: /* object ::= nth OF|IN object */
2563 #line 624 "pikchr.y"
2564 {yylhsminor.yy24 = pik_find_nth(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0);}
2565 #line 2590 "pikchr.c"
2566 yymsp[-2].minor.yy24 = yylhsminor.yy24;
2567 break;
2568 case 78: /* objectname ::= PLACENAME */
2569 #line 626 "pikchr.y"
2570 {yylhsminor.yy24 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2571 #line 2596 "pikchr.c"
2572 yymsp[0].minor.yy24 = yylhsminor.yy24;
2573 break;
2574 case 79: /* objectname ::= objectname DOT_U PLACENAME */
2575 #line 628 "pikchr.y"
2576 {yylhsminor.yy24 = pik_find_byname(p,yymsp[-2].minor.yy24,&yymsp[0].minor.yy0);}
2577 #line 2602 "pikchr.c"
2578 yymsp[-2].minor.yy24 = yylhsminor.yy24;
2579 break;
2580 case 80: /* nth ::= NTH CLASSNAME */
2581 #line 630 "pikchr.y"
2582 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2583 #line 2608 "pikchr.c"
2584 yymsp[-1].minor.yy0 = yylhsminor.yy0;
2585 break;
2586 case 81: /* nth ::= NTH LAST CLASSNAME */
2587 #line 631 "pikchr.y"
2588 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2589 #line 2614 "pikchr.c"
2590 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2591 break;
2592 case 82: /* nth ::= LAST CLASSNAME */
2593 #line 632 "pikchr.y"
2594 {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2595 #line 2620 "pikchr.c"
2596 break;
2597 case 83: /* nth ::= LAST */
2598 #line 633 "pikchr.y"
2599 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2600 #line 2625 "pikchr.c"
2601 yymsp[0].minor.yy0 = yylhsminor.yy0;
2602 break;
2603 case 84: /* nth ::= NTH LB RB */
2604 #line 634 "pikchr.y"
2605 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2606 #line 2631 "pikchr.c"
2607 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2608 break;
2609 case 85: /* nth ::= NTH LAST LB RB */
2610 #line 635 "pikchr.y"
2611 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2612 #line 2637 "pikchr.c"
2613 yymsp[-3].minor.yy0 = yylhsminor.yy0;
2614 break;
2615 case 86: /* nth ::= LAST LB RB */
2616 #line 636 "pikchr.y"
2617 {yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2618 #line 2643 "pikchr.c"
2619 break;
2620 case 87: /* expr ::= expr PLUS expr */
2621 #line 638 "pikchr.y"
2622 {yylhsminor.yy83=yymsp[-2].minor.yy83+yymsp[0].minor.yy83;}
2623 #line 2648 "pikchr.c"
2624 yymsp[-2].minor.yy83 = yylhsminor.yy83;
2625 break;
2626 case 88: /* expr ::= expr MINUS expr */
2627 #line 639 "pikchr.y"
2628 {yylhsminor.yy83=yymsp[-2].minor.yy83-yymsp[0].minor.yy83;}
2629 #line 2654 "pikchr.c"
2630 yymsp[-2].minor.yy83 = yylhsminor.yy83;
2631 break;
2632 case 89: /* expr ::= expr STAR expr */
2633 #line 640 "pikchr.y"
2634 {yylhsminor.yy83=yymsp[-2].minor.yy83*yymsp[0].minor.yy83;}
2635 #line 2660 "pikchr.c"
2636 yymsp[-2].minor.yy83 = yylhsminor.yy83;
2637 break;
2638 case 90: /* expr ::= expr SLASH expr */
2639 #line 641 "pikchr.y"
2640 {
2641 if( yymsp[0].minor.yy83==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy83 = 0.0; }
2642 else{ yylhsminor.yy83 = yymsp[-2].minor.yy83/yymsp[0].minor.yy83; }
2643 }
2644 #line 2669 "pikchr.c"
2645 yymsp[-2].minor.yy83 = yylhsminor.yy83;
2646 break;
2647 case 91: /* expr ::= MINUS expr */
2648 #line 645 "pikchr.y"
2649 {yymsp[-1].minor.yy83=-yymsp[0].minor.yy83;}
2650 #line 2675 "pikchr.c"
2651 break;
2652 case 92: /* expr ::= PLUS expr */
2653 #line 646 "pikchr.y"
2654 {yymsp[-1].minor.yy83=yymsp[0].minor.yy83;}
2655 #line 2680 "pikchr.c"
2656 break;
2657 case 93: /* expr ::= LP expr RP */
2658 #line 647 "pikchr.y"
2659 {yymsp[-2].minor.yy83=yymsp[-1].minor.yy83;}
2660 #line 2685 "pikchr.c"
2661 break;
2662 case 94: /* expr ::= NUMBER */
2663 #line 648 "pikchr.y"
2664 {yylhsminor.yy83=pik_atof(p,&yymsp[0].minor.yy0);}
2665 #line 2690 "pikchr.c"
2666 yymsp[0].minor.yy83 = yylhsminor.yy83;
2667 break;
2668 case 95: /* expr ::= ID */
2669 #line 649 "pikchr.y"
2670 {yylhsminor.yy83=pik_get_var(p,&yymsp[0].minor.yy0);}
2671 #line 2696 "pikchr.c"
2672 yymsp[0].minor.yy83 = yylhsminor.yy83;
2673 break;
2674 case 96: /* expr ::= FUNC1 LP expr RP */
2675 #line 650 "pikchr.y"
2676 {yylhsminor.yy83 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy83,0.0);}
2677 #line 2702 "pikchr.c"
2678 yymsp[-3].minor.yy83 = yylhsminor.yy83;
2679 break;
2680 case 97: /* expr ::= FUNC2 LP expr COMMA expr RP */
2681 #line 651 "pikchr.y"
2682 {yylhsminor.yy83 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy83,yymsp[-1].minor.yy83);}
2683 #line 2708 "pikchr.c"
2684 yymsp[-5].minor.yy83 = yylhsminor.yy83;
2685 break;
2686 case 98: /* expr ::= object DOT_L locproperty */
2687 case 99: /* expr ::= object DOT_L numproperty */ yytestcase(yyruleno==99);
2688 case 100: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==100);
2689 case 101: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==101);
2690 #line 653 "pikchr.y"
2691 {yylhsminor.yy83=pik_property_of(p,yymsp[-2].minor.yy24,&yymsp[0].minor.yy0);}
2692 #line 2717 "pikchr.c"
2693 yymsp[-2].minor.yy83 = yylhsminor.yy83;
2694 break;
2695 case 102: /* expr ::= object DOT_E edge DOT_L X */
2696 #line 657 "pikchr.y"
2697 {yylhsminor.yy83=pik_place_of_elem(p,yymsp[-4].minor.yy24,&yymsp[-2].minor.yy0).x;}
2698 #line 2723 "pikchr.c"
2699 yymsp[-4].minor.yy83 = yylhsminor.yy83;
2700 break;
2701 case 103: /* expr ::= object DOT_E edge DOT_L Y */
2702 #line 658 "pikchr.y"
2703 {yylhsminor.yy83=pik_place_of_elem(p,yymsp[-4].minor.yy24,&yymsp[-2].minor.yy0).y;}
2704 #line 2729 "pikchr.c"
2705 yymsp[-4].minor.yy83 = yylhsminor.yy83;
2706 break;
2707 case 104: /* expr ::= LP locproperty OF object RP */
2708 case 105: /* expr ::= LP dashproperty OF object RP */ yytestcase(yyruleno==105);
2709 case 106: /* expr ::= LP numproperty OF object RP */ yytestcase(yyruleno==106);
2710 case 107: /* expr ::= LP colorproperty OF object RP */ yytestcase(yyruleno==107);
2711 #line 659 "pikchr.y"
2712 {yymsp[-4].minor.yy83=pik_property_of(p,yymsp[-1].minor.yy24,&yymsp[-3].minor.yy0);}
2713 #line 2738 "pikchr.c"
2714 break;
2715 case 108: /* expr ::= NTH VERTEX OF object DOT_L X */
2716 #line 665 "pikchr.y"
2717 {yylhsminor.yy83 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy24).x;}
2718 #line 2743 "pikchr.c"
2719 yymsp[-5].minor.yy83 = yylhsminor.yy83;
2720 break;
2721 case 109: /* expr ::= NTH VERTEX OF object DOT_L Y */
2722 #line 667 "pikchr.y"
2723 {yylhsminor.yy83 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy24).y;}
2724 #line 2749 "pikchr.c"
2725 yymsp[-5].minor.yy83 = yylhsminor.yy83;
2726 break;
2727 default:
2728 /* (110) lvalue ::= ID */ yytestcase(yyruleno==110);
2729 /* (111) lvalue ::= FILL */ yytestcase(yyruleno==111);
2730 /* (112) lvalue ::= COLOR */ yytestcase(yyruleno==112);
2731 /* (113) lvalue ::= THICKNESS */ yytestcase(yyruleno==113);
2732 /* (114) rvalue ::= expr */ yytestcase(yyruleno==114);
2733 /* (115) print ::= PRINT */ yytestcase(yyruleno==115);
2734 /* (116) prlist ::= pritem (OPTIMIZED OUT) */ assert(yyruleno!=116);
2735 /* (117) prlist ::= prlist prsep pritem */ yytestcase(yyruleno==117);
2736 /* (118) direction ::= UP */ yytestcase(yyruleno==118);
2737 /* (119) direction ::= DOWN */ yytestcase(yyruleno==119);
2738 /* (120) direction ::= LEFT */ yytestcase(yyruleno==120);
2739 /* (121) direction ::= RIGHT */ yytestcase(yyruleno==121);
2740 /* (122) attribute_list ::= alist */ yytestcase(yyruleno==122);
2741 /* (123) alist ::= */ yytestcase(yyruleno==123);
2742 /* (124) alist ::= alist attribute */ yytestcase(yyruleno==124);
2743 /* (125) attribute ::= boolproperty (OPTIMIZED OUT) */ assert(yyruleno!=125);
2744 /* (126) attribute ::= WITH withclause */ yytestcase(yyruleno==126);
2745 /* (127) even ::= UNTIL EVEN WITH */ yytestcase(yyruleno==127);
2746 /* (128) even ::= EVEN WITH */ yytestcase(yyruleno==128);
2747 /* (129) withclause ::= with (OPTIMIZED OUT) */ assert(yyruleno!=129);
2748 /* (130) withclause ::= withclause AND with */ yytestcase(yyruleno==130);
2749 /* (131) dashproperty ::= DOTTED */ yytestcase(yyruleno==131);
2750 /* (132) dashproperty ::= DASHED */ yytestcase(yyruleno==132);
2751 /* (133) colorproperty ::= FILL */ yytestcase(yyruleno==133);
2752 /* (134) colorproperty ::= COLOR */ yytestcase(yyruleno==134);
2753 /* (135) position ::= place */ yytestcase(yyruleno==135);
2754 /* (136) between ::= WAY BETWEEN */ yytestcase(yyruleno==136);
2755 /* (137) between ::= BETWEEN */ yytestcase(yyruleno==137);
2756 /* (138) between ::= OF THE WAY BETWEEN */ yytestcase(yyruleno==138);
2757 /* (139) object ::= objectname */ yytestcase(yyruleno==139);
2758 /* (140) locproperty ::= X|Y */ yytestcase(yyruleno==140);
2759 /* (141) edge ::= EDGEPT */ yytestcase(yyruleno==141);
2760 /* (142) edge ::= TOP */ yytestcase(yyruleno==142);
2761 /* (143) edge ::= BOTTOM */ yytestcase(yyruleno==143);
2762 /* (144) edge ::= LEFT */ yytestcase(yyruleno==144);
2763 /* (145) edge ::= RIGHT */ yytestcase(yyruleno==145);
2764 break;
2765 /********** End reduce actions ************************************************/
2766 };
2767 assert( yyruleno<sizeof(yyRuleInfoLhs)/sizeof(yyRuleInfoLhs[0]) );
2768 yygoto = yyRuleInfoLhs[yyruleno];
@@ -2792,18 +2818,18 @@
2818 ){
2819 pik_parserARG_FETCH
2820 pik_parserCTX_FETCH
2821 #define TOKEN yyminor
2822 /************ Begin %syntax_error code ****************************************/
2823 #line 456 "pikchr.y"
2824
2825 if( TOKEN.z && TOKEN.z[0] ){
2826 pik_error(p, &TOKEN, "syntax error");
2827 }else{
2828 pik_error(p, 0, "syntax error");
2829 }
2830 #line 2855 "pikchr.c"
2831 /************ End %syntax_error code ******************************************/
2832 pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
2833 pik_parserCTX_STORE
2834 }
2835
@@ -3032,11 +3058,11 @@
3058 #else
3059 (void)iToken;
3060 return 0;
3061 #endif
3062 }
3063 #line 677 "pikchr.y"
3064
3065
3066
3067 /* Chart of the 140 official HTML color names with their
3068 ** corresponding RGB value.
@@ -3210,12 +3236,12 @@
3236 { "arrowht", 0.1 },
3237 { "arrowwid", 0.05 },
3238 { "boxht", 0.5 },
3239 { "boxrad", 0.0 },
3240 { "boxwid", 0.75 },
3241 { "charht", 0.14 },
3242 { "charwid", 0.08 },
3243 { "circlerad", 0.25 },
3244 { "color", 0.0 },
3245 { "cylht", 0.5 },
3246 { "cylrad", 0.075 },
3247 { "cylwid", 0.75 },
@@ -3230,11 +3256,11 @@
3256 { "ovalht", 0.5 },
3257 { "ovalwid", 1.0 },
3258 { "scale", 1.0 },
3259 { "textht", 0.5 },
3260 { "textwid", 0.75 },
3261 { "thickness", 0.015 },
3262 };
3263
3264
3265 /* Methods for the "arc" class */
3266 static void arcInit(Pik *p, PElem *pElem){
@@ -4149,41 +4175,108 @@
4175 pik_append_dis(p,"stroke-dasharray:",v,"");
4176 pik_append_dis(p,",",v,";");
4177 }
4178 }
4179 }
4180
4181 /*
4182 ** Compute the vertical locations for all text items in the
4183 ** element pElem. In other words, set every pElem->aTxt[*].eCode
4184 ** value to contain exactly one of: TP_ABOVE2, TP_ABOVE, TP_CENTER,
4185 ** TP_BELOW, or TP_BELOW2 is set.
4186 */
4187 static void pik_txt_vertical_layout(Pik *p, PElem *pElem){
4188 int n, i;
4189 PToken *aTxt;
4190 n = pElem->nTxt;
4191 if( n==0 ) return;
4192 aTxt = pElem->aTxt;
4193 if( n==1 ){
4194 if( (aTxt[0].eCode & TP_VMASK)==0 ){
4195 aTxt[0].eCode |= TP_CENTER;
4196 }
4197 }else{
4198 int allSlots = 0;
4199 int aFree[5];
4200 int iSlot;
4201 int j;
4202 /* If there is more than one TP_ABOVE, change the first to TP_ABOVE2. */
4203 for(j=0, i=n-1; i>=0; i--){
4204 if( aTxt[i].eCode & TP_ABOVE ){
4205 if( j==0 ){
4206 j++;
4207 }else{
4208 aTxt[i].eCode = (aTxt[i].eCode & ~TP_VMASK) | TP_ABOVE2;
4209 break;
4210 }
4211 }
4212 }
4213 /* If more than one TP_BELOW, change the last to TP_BELOW2 */
4214 for(j=0, i=0; i<n; i++){
4215 if( aTxt[i].eCode & TP_BELOW ){
4216 if( j==0 ){
4217 j++;
4218 }else{
4219 aTxt[i].eCode = (aTxt[i].eCode & ~TP_VMASK) | TP_BELOW2;
4220 break;
4221 }
4222 }
4223 }
4224 /* Compute a mask of all slots used */
4225 for(i=0; i<n; i++) allSlots |= aTxt[i].eCode & TP_VMASK;
4226 /* Set of an array of available slots */
4227 iSlot = 0;
4228 if( n>=4 && (allSlots & TP_ABOVE2)==0 ) aFree[iSlot++] = TP_ABOVE2;
4229 if( (allSlots & TP_ABOVE)==0 ) aFree[iSlot++] = TP_ABOVE;
4230 if( (n&1)!=0 ) aFree[iSlot++] = TP_CENTER;
4231 if( (allSlots & TP_BELOW)==0 ) aFree[iSlot++] = TP_BELOW;
4232 if( n>=4 && (allSlots & TP_BELOW2)==0 ) aFree[iSlot++] = TP_BELOW2;
4233 /* Set the VMASK for all unassigned texts */
4234 for(i=iSlot=0; i<n; i++){
4235 if( (aTxt[i].eCode & TP_VMASK)==0 ){
4236 aTxt[i].eCode = aFree[iSlot++];
4237 }
4238 }
4239 }
4240 }
4241
4242 /* Append multiple <text> SGV element for the text fields of the PElem
4243 */
4244 static void pik_append_txt(Pik *p, PElem *pElem){
4245 PNum dy; /* Half the height of a single line of text */
4246 PNum dy2; /* Extra vertical space around the center */
4247 int n, i, nz;
4248 PNum x, y, orig_y;
4249 const char *z;
4250 PToken *aTxt;
4251 int hasCenter = 0;
4252
4253 if( p->nErr ) return;
4254 if( pElem->nTxt==0 ) return;
4255 aTxt = pElem->aTxt;
4256 dy = 0.5*pik_value(p,"charht",6,0);
4257 n = pElem->nTxt;
4258 pik_txt_vertical_layout(p, pElem);
 
 
 
 
 
 
 
 
 
 
 
 
4259 x = pElem->ptAt.x;
4260 for(i=0; i<n; i++){
4261 if( (pElem->aTxt[i].eCode & TP_CENTER)!=0 ) hasCenter = 1;
4262 }
4263 if( hasCenter ){
4264 dy2 = dy;
4265 }else if( pElem->type->isLine ){
4266 dy2 = pElem->sw;
4267 }else{
4268 dy2 = 0.0;
4269 }
4270 for(i=0; i<n; i++){
4271 PToken *t = &aTxt[i];
4272 orig_y = y = pElem->ptAt.y;
4273 if( t->eCode & TP_ABOVE2 ) y += dy2 + 3*dy;
4274 if( t->eCode & TP_ABOVE ) y += dy2 + dy;
4275 if( t->eCode & TP_BELOW ) y -= dy2 + dy;
4276 if( t->eCode & TP_BELOW2 ) y -= dy2 + 3*dy;
4277
4278 pik_append_x(p, "<text x=\"", x, "\"");
4279 pik_append_y(p, " y=\"", y, "\"");
4280 if( t->eCode & TP_RJUST ){
4281 pik_append(p, " text-anchor=\"end\"", -1);
4282 }else if( t->eCode & TP_LJUST ){
@@ -4988,17 +5081,24 @@
5081 pik_error(0, pFit, "no text to fit to");
5082 return;
5083 }
5084 if( pElem->type->xFit==0 ) return;
5085 if( (pElem->mProp & A_HEIGHT)==0 ){
5086 int hasCenter = 0;
5087 int hasSingleStack = 0;
5088 int hasDoubleStack = 0;
5089 pik_txt_vertical_layout(p, pElem);
5090 for(i=0; i<pElem->nTxt; i++){
5091 if( pElem->aTxt[i].eCode & TP_CENTER ){
5092 hasCenter = 1;
5093 }else if( pElem->aTxt[i].eCode & (TP_ABOVE2|TP_BELOW2) ){
5094 hasDoubleStack = 1;
5095 }else if( pElem->aTxt[i].eCode & (TP_ABOVE|TP_BELOW) ){
5096 hasSingleStack = 1;
5097 }
5098 }
5099 h = hasCenter + hasSingleStack*2 + hasDoubleStack*2;
5100 }
5101 if( (pElem->mProp & A_WIDTH)==0 ){
5102 for(i=0; i<pElem->nTxt; i++){
5103 int j, cnt;
5104 const char *z = pElem->aTxt[i].z;
@@ -5046,11 +5146,11 @@
5146 }
5147 pVar->zName = z = (char*)&pVar[1];
5148 memcpy(z, pId->z, pId->n);
5149 z[pId->n] = 0;
5150 pVar->pNext = p->pVar;
5151 pVar->val = pik_value(p, pId->z, pId->n, 0);
5152 p->pVar = pVar;
5153 }
5154 switch( pOp->eCode ){
5155 case T_PLUS: pVar->val += val; break;
5156 case T_STAR: pVar->val *= val; break;
@@ -6331,6 +6431,6 @@
6431 printf("</body></html>\n");
6432 return 0;
6433 }
6434 #endif /* PIKCHR_SHELL */
6435
6436 #line 6461 "pikchr.c"
6437

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button