Fossil SCM

Import the latest pikchr.c code with boundary-point updates.

drh 2020-09-13 22:45 trunk
Commit fbe96ea9e87e77fa713203622c0117a34a6855811c95b377155cba79e3917d2e
1 file changed +1208 -1135
+1208 -1135
--- src/pikchr.c
+++ src/pikchr.c
@@ -136,31 +136,32 @@
136136
typedef struct PPoint PPoint; /* A position in 2-D space */
137137
typedef struct PVar PVar; /* script-defined variable */
138138
typedef struct PBox PBox; /* A bounding box */
139139
140140
/* Compass points */
141
-#define CP_C 0 /* Center of the object. (Always PElem.ptAt) */
142141
#define CP_N 1
143142
#define CP_NE 2
144143
#define CP_E 3
145144
#define CP_SE 4
146145
#define CP_S 5
147146
#define CP_SW 6
148147
#define CP_W 7
149148
#define CP_NW 8
149
+#define CP_C 9 /* .center or .c */
150150
151151
/* Heading angles corresponding to compass points */
152152
static const PNum pik_hdg_angle[] = {
153
- /* C */ 0.0,
153
+/* none */ 0.0,
154154
/* N */ 0.0,
155155
/* NE */ 45.0,
156156
/* E */ 90.0,
157157
/* SE */ 135.0,
158158
/* S */ 180.0,
159159
/* SW */ 225.0,
160160
/* W */ 270.0,
161161
/* NW */ 315.0,
162
+ /* C */ 0.0,
162163
};
163164
164165
/* Built-in functions */
165166
#define FN_ABS 0
166167
#define FN_COS 1
@@ -427,11 +428,11 @@
427428
static void pik_behind(Pik*,PElem*);
428429
static PElem *pik_assert(Pik*,PNum,PToken*,PNum);
429430
static PElem *pik_place_assert(Pik*,PPoint*,PToken*,PPoint*);
430431
431432
432
-#line 458 "pikchr.c"
433
+#line 459 "pikchr.c"
433434
/**************** End of %include directives **********************************/
434435
/* These constants specify the various numeric values for terminal symbols.
435436
***************** Begin token definitions *************************************/
436437
#ifndef T_ID
437438
#define T_ID 1
@@ -505,29 +506,30 @@
505506
#define T_BIG 69
506507
#define T_SMALL 70
507508
#define T_AND 71
508509
#define T_LT 72
509510
#define T_GT 73
510
-#define T_WAY 74
511
-#define T_BETWEEN 75
512
-#define T_THE 76
513
-#define T_NTH 77
514
-#define T_VERTEX 78
515
-#define T_TOP 79
516
-#define T_BOTTOM 80
517
-#define T_START 81
518
-#define T_END 82
519
-#define T_IN 83
520
-#define T_DOT_U 84
521
-#define T_LAST 85
522
-#define T_NUMBER 86
523
-#define T_FUNC1 87
524
-#define T_FUNC2 88
525
-#define T_DOT_XY 89
526
-#define T_X 90
527
-#define T_Y 91
528
-#define T_DOT_L 92
511
+#define T_ON 74
512
+#define T_WAY 75
513
+#define T_BETWEEN 76
514
+#define T_THE 77
515
+#define T_NTH 78
516
+#define T_VERTEX 79
517
+#define T_TOP 80
518
+#define T_BOTTOM 81
519
+#define T_START 82
520
+#define T_END 83
521
+#define T_IN 84
522
+#define T_DOT_U 85
523
+#define T_LAST 86
524
+#define T_NUMBER 87
525
+#define T_FUNC1 88
526
+#define T_FUNC2 89
527
+#define T_DOT_XY 90
528
+#define T_X 91
529
+#define T_Y 92
530
+#define T_DOT_L 93
529531
#endif
530532
/**************** End token definitions ***************************************/
531533
532534
/* The next sections is a series of control #defines.
533535
** various aspects of the generated parser.
@@ -583,21 +585,21 @@
583585
#ifndef INTERFACE
584586
# define INTERFACE 1
585587
#endif
586588
/************* Begin control #defines *****************************************/
587589
#define YYCODETYPE unsigned char
588
-#define YYNOCODE 127
590
+#define YYNOCODE 128
589591
#define YYACTIONTYPE unsigned short int
590592
#define pik_parserTOKENTYPE PToken
591593
typedef union {
592594
int yyinit;
593595
pik_parserTOKENTYPE yy0;
594
- PEList* yy42;
595
- PPoint yy85;
596
- PElem* yy118;
597
- int yy156;
598
- PNum yy215;
596
+ PEList* yy52;
597
+ PElem* yy58;
598
+ int yy92;
599
+ PPoint yy95;
600
+ PNum yy149;
599601
} YYMINORTYPE;
600602
#ifndef YYSTACKDEPTH
601603
#define YYSTACKDEPTH 100
602604
#endif
603605
#define pik_parserARG_SDECL
@@ -609,22 +611,22 @@
609611
#define pik_parserCTX_PDECL ,Pik *p
610612
#define pik_parserCTX_PARAM ,p
611613
#define pik_parserCTX_FETCH Pik *p=yypParser->p;
612614
#define pik_parserCTX_STORE yypParser->p=p;
613615
#define YYFALLBACK 1
614
-#define YYNSTATE 156
615
-#define YYNRULE 151
616
-#define YYNRULE_WITH_ACTION 113
617
-#define YYNTOKEN 93
618
-#define YY_MAX_SHIFT 155
619
-#define YY_MIN_SHIFTREDUCE 271
620
-#define YY_MAX_SHIFTREDUCE 421
621
-#define YY_ERROR_ACTION 422
622
-#define YY_ACCEPT_ACTION 423
623
-#define YY_NO_ACTION 424
624
-#define YY_MIN_REDUCE 425
625
-#define YY_MAX_REDUCE 575
616
+#define YYNSTATE 164
617
+#define YYNRULE 155
618
+#define YYNRULE_WITH_ACTION 116
619
+#define YYNTOKEN 94
620
+#define YY_MAX_SHIFT 163
621
+#define YY_MIN_SHIFTREDUCE 283
622
+#define YY_MAX_SHIFTREDUCE 437
623
+#define YY_ERROR_ACTION 438
624
+#define YY_ACCEPT_ACTION 439
625
+#define YY_NO_ACTION 440
626
+#define YY_MIN_REDUCE 441
627
+#define YY_MAX_REDUCE 595
626628
/************* End control #defines *******************************************/
627629
#define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
628630
629631
/* Define the yytestcase() macro to be a no-op if is not already defined
630632
** otherwise.
@@ -687,312 +689,333 @@
687689
** yy_reduce_ofst[] For each state, the offset into yy_action for
688690
** shifting non-terminals after a reduce.
689691
** yy_default[] Default action for each state.
690692
**
691693
*********** Begin parsing tables **********************************************/
692
-#define YY_ACTTAB_COUNT (1178)
694
+#define YY_ACTTAB_COUNT (1270)
693695
static const YYACTIONTYPE yy_action[] = {
694
- /* 0 */ 550, 535, 425, 18, 536, 537, 111, 426, 433, 24,
695
- /* 10 */ 550, 127, 28, 429, 61, 60, 59, 58, 407, 408,
696
- /* 20 */ 327, 27, 79, 128, 155, 509, 550, 20, 478, 153,
697
- /* 30 */ 119, 306, 307, 6, 5, 34, 554, 33, 4, 68,
698
- /* 40 */ 126, 51, 323, 63, 50, 31, 414, 327, 327, 327,
699
- /* 50 */ 327, 405, 406, 328, 329, 330, 331, 332, 333, 334,
700
- /* 60 */ 335, 450, 28, 359, 552, 74, 552, 392, 393, 394,
701
- /* 70 */ 395, 450, 29, 420, 419, 475, 153, 119, 293, 407,
702
- /* 80 */ 408, 327, 344, 79, 361, 150, 289, 450, 8, 23,
703
- /* 90 */ 71, 22, 306, 307, 6, 5, 34, 80, 33, 4,
704
- /* 100 */ 68, 126, 26, 323, 63, 507, 153, 119, 327, 327,
705
- /* 110 */ 327, 327, 405, 406, 328, 329, 330, 331, 332, 333,
706
- /* 120 */ 334, 335, 449, 415, 416, 417, 418, 81, 110, 427,
707
- /* 130 */ 433, 24, 449, 48, 44, 429, 117, 66, 154, 72,
708
- /* 140 */ 407, 408, 327, 72, 79, 118, 155, 282, 449, 20,
709
- /* 150 */ 21, 59, 58, 306, 307, 6, 5, 34, 30, 33,
710
- /* 160 */ 4, 68, 126, 2, 323, 63, 379, 380, 414, 327,
711
- /* 170 */ 327, 327, 327, 405, 406, 328, 329, 330, 331, 332,
712
- /* 180 */ 333, 334, 335, 376, 414, 62, 56, 57, 512, 153,
713
- /* 190 */ 119, 407, 408, 327, 359, 420, 419, 17, 64, 376,
714
- /* 200 */ 414, 3, 56, 57, 77, 343, 291, 76, 363, 149,
715
- /* 210 */ 359, 420, 419, 17, 404, 376, 414, 66, 56, 57,
716
- /* 220 */ 327, 327, 327, 327, 405, 406, 359, 420, 419, 55,
717
- /* 230 */ 403, 337, 337, 337, 337, 337, 337, 337, 337, 337,
718
- /* 240 */ 337, 362, 151, 420, 419, 415, 416, 417, 418, 510,
719
- /* 250 */ 153, 119, 130, 121, 426, 433, 24, 7, 412, 108,
720
- /* 260 */ 429, 415, 416, 417, 418, 361, 150, 117, 375, 148,
721
- /* 270 */ 147, 155, 135, 423, 20, 108, 134, 415, 416, 417,
722
- /* 280 */ 418, 410, 10, 117, 375, 148, 147, 11, 12, 65,
723
- /* 290 */ 114, 108, 346, 415, 416, 417, 418, 15, 53, 117,
724
- /* 300 */ 375, 148, 147, 138, 136, 61, 60, 59, 58, 1,
725
- /* 310 */ 109, 61, 60, 59, 58, 78, 367, 54, 374, 120,
726
- /* 320 */ 153, 119, 360, 441, 49, 70, 118, 141, 75, 75,
727
- /* 330 */ 140, 139, 480, 113, 120, 153, 119, 40, 365, 146,
728
- /* 340 */ 138, 136, 61, 60, 59, 58, 366, 317, 152, 61,
729
- /* 350 */ 60, 59, 58, 67, 142, 32, 424, 61, 60, 59,
730
- /* 360 */ 58, 49, 424, 424, 424, 14, 13, 140, 139, 384,
731
- /* 370 */ 281, 513, 424, 16, 40, 137, 411, 424, 424, 424,
732
- /* 380 */ 145, 37, 125, 424, 424, 424, 385, 386, 387, 389,
733
- /* 390 */ 77, 424, 291, 76, 424, 392, 393, 394, 395, 424,
734
- /* 400 */ 424, 424, 14, 13, 376, 424, 424, 56, 57, 513,
735
- /* 410 */ 16, 424, 137, 411, 513, 107, 424, 513, 55, 424,
736
- /* 420 */ 424, 284, 285, 286, 376, 288, 424, 56, 57, 376,
737
- /* 430 */ 318, 424, 56, 57, 424, 359, 424, 424, 55, 424,
738
- /* 440 */ 359, 424, 376, 55, 424, 56, 57, 424, 424, 82,
739
- /* 450 */ 424, 424, 424, 359, 424, 424, 55, 424, 120, 153,
740
- /* 460 */ 119, 431, 24, 70, 36, 141, 93, 131, 129, 424,
741
- /* 470 */ 432, 113, 120, 153, 119, 120, 153, 119, 146, 424,
742
- /* 480 */ 108, 19, 376, 314, 424, 56, 57, 424, 117, 375,
743
- /* 490 */ 148, 147, 142, 359, 424, 146, 55, 424, 424, 424,
744
- /* 500 */ 108, 61, 60, 59, 58, 108, 424, 424, 117, 375,
745
- /* 510 */ 148, 147, 414, 117, 375, 148, 147, 38, 108, 424,
746
- /* 520 */ 376, 424, 359, 56, 57, 424, 117, 375, 148, 147,
747
- /* 530 */ 9, 107, 424, 376, 55, 424, 56, 57, 376, 420,
748
- /* 540 */ 419, 56, 57, 424, 359, 424, 424, 42, 424, 359,
749
- /* 550 */ 424, 424, 46, 424, 70, 424, 141, 424, 108, 424,
750
- /* 560 */ 424, 479, 113, 120, 153, 119, 117, 375, 148, 147,
751
- /* 570 */ 70, 424, 141, 61, 60, 59, 58, 473, 113, 120,
752
- /* 580 */ 153, 119, 424, 142, 424, 35, 424, 108, 424, 415,
753
- /* 590 */ 416, 417, 418, 424, 424, 117, 108, 424, 313, 142,
754
- /* 600 */ 61, 60, 59, 58, 117, 375, 148, 147, 424, 108,
755
- /* 610 */ 424, 424, 424, 424, 108, 424, 424, 117, 375, 148,
756
- /* 620 */ 147, 424, 117, 375, 148, 147, 70, 424, 141, 424,
757
- /* 630 */ 424, 424, 39, 463, 113, 120, 153, 119, 70, 424,
758
- /* 640 */ 141, 61, 60, 59, 58, 462, 113, 120, 153, 119,
759
- /* 650 */ 70, 424, 141, 424, 342, 142, 424, 499, 113, 120,
760
- /* 660 */ 153, 119, 70, 424, 141, 424, 424, 142, 424, 133,
761
- /* 670 */ 113, 120, 153, 119, 424, 70, 424, 141, 424, 142,
762
- /* 680 */ 424, 424, 506, 113, 120, 153, 119, 70, 424, 141,
763
- /* 690 */ 83, 142, 424, 424, 505, 113, 120, 153, 119, 120,
764
- /* 700 */ 153, 119, 424, 70, 142, 141, 424, 424, 424, 424,
765
- /* 710 */ 504, 113, 120, 153, 119, 70, 142, 141, 86, 146,
766
- /* 720 */ 424, 424, 503, 113, 120, 153, 119, 120, 153, 119,
767
- /* 730 */ 424, 70, 142, 141, 424, 424, 424, 424, 502, 113,
768
- /* 740 */ 120, 153, 119, 70, 142, 141, 424, 146, 424, 424,
769
- /* 750 */ 501, 113, 120, 153, 119, 70, 424, 141, 424, 424,
770
- /* 760 */ 142, 424, 143, 113, 120, 153, 119, 70, 424, 141,
771
- /* 770 */ 424, 424, 142, 424, 144, 113, 120, 153, 119, 424,
772
- /* 780 */ 69, 424, 141, 424, 142, 424, 424, 112, 113, 120,
773
- /* 790 */ 153, 119, 70, 424, 141, 424, 142, 424, 424, 132,
774
- /* 800 */ 113, 120, 153, 119, 424, 424, 424, 424, 70, 142,
775
- /* 810 */ 141, 424, 424, 424, 109, 459, 113, 120, 153, 119,
776
- /* 820 */ 87, 142, 141, 120, 153, 119, 424, 441, 124, 120,
777
- /* 830 */ 153, 119, 424, 545, 424, 424, 73, 142, 61, 60,
778
- /* 840 */ 59, 58, 302, 146, 141, 120, 153, 119, 424, 142,
779
- /* 850 */ 123, 122, 153, 119, 424, 424, 424, 444, 424, 25,
780
- /* 860 */ 424, 424, 424, 109, 424, 146, 424, 424, 424, 424,
781
- /* 870 */ 109, 123, 120, 153, 119, 424, 455, 424, 424, 120,
782
- /* 880 */ 153, 119, 424, 430, 61, 60, 59, 58, 61, 60,
783
- /* 890 */ 59, 58, 146, 424, 424, 424, 424, 374, 424, 146,
784
- /* 900 */ 99, 374, 424, 41, 424, 424, 100, 45, 424, 120,
785
- /* 910 */ 153, 119, 101, 424, 424, 120, 153, 119, 424, 424,
786
- /* 920 */ 424, 120, 153, 119, 424, 424, 424, 102, 424, 146,
787
- /* 930 */ 424, 424, 424, 424, 88, 146, 120, 153, 119, 424,
788
- /* 940 */ 424, 146, 89, 120, 153, 119, 424, 424, 84, 424,
789
- /* 950 */ 424, 120, 153, 119, 424, 103, 146, 120, 153, 119,
790
- /* 960 */ 424, 424, 424, 146, 120, 153, 119, 424, 424, 90,
791
- /* 970 */ 424, 146, 91, 424, 424, 424, 424, 146, 120, 153,
792
- /* 980 */ 119, 120, 153, 119, 146, 85, 61, 60, 59, 58,
793
- /* 990 */ 424, 424, 424, 424, 120, 153, 119, 104, 146, 424,
794
- /* 1000 */ 424, 146, 424, 424, 424, 43, 120, 153, 119, 92,
795
- /* 1010 */ 424, 424, 424, 105, 146, 424, 424, 424, 120, 153,
796
- /* 1020 */ 119, 106, 120, 153, 119, 94, 146, 424, 424, 424,
797
- /* 1030 */ 120, 153, 119, 424, 120, 153, 119, 424, 146, 424,
798
- /* 1040 */ 424, 424, 146, 424, 424, 424, 95, 424, 424, 96,
799
- /* 1050 */ 146, 424, 424, 97, 146, 120, 153, 119, 120, 153,
800
- /* 1060 */ 119, 98, 120, 153, 119, 424, 61, 60, 59, 58,
801
- /* 1070 */ 120, 153, 119, 424, 424, 146, 527, 424, 146, 341,
802
- /* 1080 */ 424, 424, 146, 526, 424, 120, 153, 119, 424, 424,
803
- /* 1090 */ 146, 424, 120, 153, 119, 424, 424, 424, 424, 525,
804
- /* 1100 */ 424, 424, 424, 424, 524, 146, 424, 115, 120, 153,
805
- /* 1110 */ 119, 116, 146, 120, 153, 119, 120, 153, 119, 424,
806
- /* 1120 */ 120, 153, 119, 61, 60, 59, 58, 424, 146, 424,
807
- /* 1130 */ 424, 424, 424, 146, 424, 424, 146, 424, 424, 424,
808
- /* 1140 */ 146, 424, 47, 424, 424, 61, 60, 59, 58, 297,
809
- /* 1150 */ 61, 60, 59, 58, 61, 60, 59, 58, 61, 60,
810
- /* 1160 */ 59, 58, 424, 378, 61, 60, 59, 58, 424, 424,
811
- /* 1170 */ 424, 377, 424, 52, 424, 424, 424, 374,
696
+ /* 0 */ 569, 554, 441, 21, 555, 556, 116, 442, 449, 27,
697
+ /* 10 */ 569, 132, 31, 445, 65, 64, 63, 62, 422, 423,
698
+ /* 20 */ 339, 70, 83, 374, 163, 133, 569, 23, 494, 161,
699
+ /* 30 */ 124, 318, 319, 6, 5, 37, 573, 36, 4, 72,
700
+ /* 40 */ 131, 55, 335, 67, 54, 34, 430, 339, 339, 339,
701
+ /* 50 */ 339, 420, 421, 340, 341, 342, 343, 344, 345, 346,
702
+ /* 60 */ 347, 466, 31, 528, 571, 78, 571, 407, 408, 409,
703
+ /* 70 */ 410, 466, 30, 436, 435, 491, 161, 124, 305, 422,
704
+ /* 80 */ 423, 339, 356, 83, 526, 161, 124, 466, 8, 115,
705
+ /* 90 */ 75, 32, 318, 319, 6, 5, 37, 122, 36, 4,
706
+ /* 100 */ 72, 131, 70, 335, 67, 429, 52, 48, 339, 339,
707
+ /* 110 */ 339, 339, 420, 421, 340, 341, 342, 343, 344, 345,
708
+ /* 120 */ 346, 347, 465, 301, 431, 432, 433, 434, 26, 443,
709
+ /* 130 */ 449, 27, 465, 25, 329, 445, 65, 64, 63, 62,
710
+ /* 140 */ 422, 423, 339, 84, 83, 29, 163, 85, 465, 23,
711
+ /* 150 */ 531, 161, 124, 318, 319, 6, 5, 37, 76, 36,
712
+ /* 160 */ 4, 72, 131, 76, 335, 67, 394, 395, 42, 339,
713
+ /* 170 */ 339, 339, 339, 420, 421, 340, 341, 342, 343, 344,
714
+ /* 180 */ 345, 346, 347, 391, 430, 294, 60, 61, 65, 64,
715
+ /* 190 */ 63, 62, 82, 33, 374, 63, 62, 20, 24, 391,
716
+ /* 200 */ 430, 68, 60, 61, 81, 66, 303, 80, 2, 3,
717
+ /* 210 */ 374, 436, 435, 20, 419, 349, 349, 349, 349, 349,
718
+ /* 220 */ 349, 349, 349, 349, 349, 114, 418, 436, 435, 399,
719
+ /* 230 */ 529, 161, 124, 135, 125, 161, 124, 355, 457, 427,
720
+ /* 240 */ 153, 140, 130, 429, 564, 7, 400, 401, 402, 404,
721
+ /* 250 */ 81, 139, 303, 80, 154, 407, 408, 409, 410, 429,
722
+ /* 260 */ 113, 425, 431, 432, 433, 434, 149, 9, 122, 390,
723
+ /* 270 */ 156, 155, 128, 127, 161, 124, 113, 11, 431, 432,
724
+ /* 280 */ 433, 434, 378, 157, 122, 390, 156, 155, 391, 430,
725
+ /* 290 */ 39, 60, 61, 128, 377, 159, 447, 27, 74, 374,
726
+ /* 300 */ 149, 13, 59, 14, 119, 448, 118, 125, 161, 124,
727
+ /* 310 */ 15, 126, 442, 449, 27, 69, 436, 435, 445, 143,
728
+ /* 320 */ 141, 65, 64, 63, 62, 376, 158, 150, 358, 163,
729
+ /* 330 */ 57, 439, 23, 86, 389, 1, 65, 64, 63, 62,
730
+ /* 340 */ 53, 18, 125, 161, 124, 58, 148, 147, 429, 389,
731
+ /* 350 */ 382, 380, 381, 38, 375, 45, 143, 141, 65, 64,
732
+ /* 360 */ 63, 62, 154, 376, 158, 113, 160, 431, 432, 433,
733
+ /* 370 */ 434, 440, 71, 122, 390, 156, 155, 53, 35, 440,
734
+ /* 380 */ 162, 17, 16, 148, 147, 440, 440, 123, 440, 19,
735
+ /* 390 */ 38, 146, 142, 426, 391, 440, 440, 60, 61, 65,
736
+ /* 400 */ 64, 63, 62, 314, 440, 112, 532, 440, 59, 440,
737
+ /* 410 */ 440, 296, 297, 298, 440, 300, 440, 440, 17, 16,
738
+ /* 420 */ 391, 440, 440, 60, 61, 123, 19, 440, 146, 142,
739
+ /* 430 */ 426, 374, 391, 330, 59, 60, 61, 391, 326, 440,
740
+ /* 440 */ 60, 61, 440, 374, 440, 532, 59, 440, 374, 440,
741
+ /* 450 */ 532, 59, 440, 532, 440, 440, 422, 423, 339, 440,
742
+ /* 460 */ 440, 440, 440, 136, 134, 440, 87, 41, 440, 440,
743
+ /* 470 */ 440, 113, 43, 440, 430, 125, 161, 124, 440, 122,
744
+ /* 480 */ 390, 156, 155, 98, 374, 339, 339, 339, 339, 420,
745
+ /* 490 */ 421, 440, 125, 161, 124, 154, 440, 113, 22, 440,
746
+ /* 500 */ 440, 436, 435, 440, 440, 122, 390, 156, 155, 113,
747
+ /* 510 */ 440, 440, 154, 440, 113, 440, 440, 122, 390, 156,
748
+ /* 520 */ 155, 440, 122, 390, 156, 155, 391, 144, 440, 60,
749
+ /* 530 */ 61, 391, 145, 429, 60, 61, 440, 374, 440, 440,
750
+ /* 540 */ 59, 440, 374, 440, 440, 59, 440, 440, 440, 440,
751
+ /* 550 */ 113, 440, 431, 432, 433, 434, 391, 440, 122, 60,
752
+ /* 560 */ 61, 391, 440, 440, 60, 61, 440, 374, 440, 440,
753
+ /* 570 */ 59, 440, 112, 440, 391, 59, 440, 60, 61, 391,
754
+ /* 580 */ 440, 440, 60, 61, 440, 374, 114, 440, 46, 440,
755
+ /* 590 */ 374, 92, 440, 50, 440, 125, 161, 124, 440, 457,
756
+ /* 600 */ 125, 161, 124, 113, 79, 79, 440, 440, 113, 440,
757
+ /* 610 */ 440, 122, 390, 156, 155, 154, 122, 390, 156, 155,
758
+ /* 620 */ 154, 74, 440, 149, 440, 440, 114, 440, 496, 118,
759
+ /* 630 */ 125, 161, 124, 113, 440, 125, 161, 124, 113, 471,
760
+ /* 640 */ 440, 122, 390, 156, 155, 430, 122, 390, 156, 155,
761
+ /* 650 */ 150, 113, 440, 440, 440, 154, 113, 440, 440, 122,
762
+ /* 660 */ 390, 156, 155, 440, 122, 390, 156, 155, 440, 74,
763
+ /* 670 */ 440, 149, 436, 435, 440, 440, 495, 118, 125, 161,
764
+ /* 680 */ 124, 74, 440, 149, 114, 440, 440, 440, 489, 118,
765
+ /* 690 */ 125, 161, 124, 125, 161, 124, 440, 446, 150, 65,
766
+ /* 700 */ 64, 63, 62, 440, 429, 440, 440, 74, 440, 149,
767
+ /* 710 */ 150, 440, 293, 154, 479, 118, 125, 161, 124, 440,
768
+ /* 720 */ 74, 440, 149, 431, 432, 433, 434, 478, 118, 125,
769
+ /* 730 */ 161, 124, 74, 440, 149, 440, 150, 440, 440, 515,
770
+ /* 740 */ 118, 125, 161, 124, 440, 74, 440, 149, 440, 150,
771
+ /* 750 */ 440, 440, 138, 118, 125, 161, 124, 440, 74, 440,
772
+ /* 760 */ 149, 150, 440, 440, 440, 523, 118, 125, 161, 124,
773
+ /* 770 */ 74, 440, 149, 440, 150, 440, 440, 525, 118, 125,
774
+ /* 780 */ 161, 124, 74, 440, 149, 440, 440, 150, 440, 522,
775
+ /* 790 */ 118, 125, 161, 124, 93, 65, 64, 63, 62, 150,
776
+ /* 800 */ 440, 440, 440, 125, 161, 124, 74, 40, 149, 440,
777
+ /* 810 */ 440, 150, 440, 524, 118, 125, 161, 124, 440, 74,
778
+ /* 820 */ 440, 149, 440, 154, 440, 440, 521, 118, 125, 161,
779
+ /* 830 */ 124, 74, 440, 149, 440, 150, 440, 440, 520, 118,
780
+ /* 840 */ 125, 161, 124, 440, 74, 440, 149, 440, 150, 440,
781
+ /* 850 */ 440, 519, 118, 125, 161, 124, 440, 74, 440, 149,
782
+ /* 860 */ 150, 440, 440, 440, 518, 118, 125, 161, 124, 74,
783
+ /* 870 */ 440, 149, 440, 150, 440, 440, 517, 118, 125, 161,
784
+ /* 880 */ 124, 74, 440, 149, 440, 440, 150, 440, 151, 118,
785
+ /* 890 */ 125, 161, 124, 90, 65, 64, 63, 62, 150, 440,
786
+ /* 900 */ 440, 440, 125, 161, 124, 74, 440, 149, 440, 440,
787
+ /* 910 */ 150, 440, 152, 118, 125, 161, 124, 440, 73, 440,
788
+ /* 920 */ 149, 440, 154, 10, 440, 117, 118, 125, 161, 124,
789
+ /* 930 */ 74, 440, 149, 440, 150, 440, 440, 137, 118, 125,
790
+ /* 940 */ 161, 124, 440, 74, 440, 149, 440, 150, 440, 440,
791
+ /* 950 */ 475, 118, 125, 161, 124, 440, 91, 440, 149, 150,
792
+ /* 960 */ 440, 440, 440, 440, 129, 125, 161, 124, 77, 440,
793
+ /* 970 */ 440, 325, 150, 65, 64, 63, 62, 125, 161, 124,
794
+ /* 980 */ 65, 64, 63, 62, 440, 150, 440, 440, 440, 460,
795
+ /* 990 */ 440, 28, 104, 389, 440, 440, 440, 154, 440, 49,
796
+ /* 1000 */ 440, 125, 161, 124, 105, 44, 440, 440, 440, 106,
797
+ /* 1010 */ 440, 440, 440, 125, 161, 124, 440, 107, 125, 161,
798
+ /* 1020 */ 124, 154, 440, 440, 440, 94, 125, 161, 124, 440,
799
+ /* 1030 */ 440, 88, 440, 154, 125, 161, 124, 440, 154, 108,
800
+ /* 1040 */ 125, 161, 124, 440, 440, 440, 154, 440, 125, 161,
801
+ /* 1050 */ 124, 440, 95, 440, 154, 96, 440, 440, 440, 440,
802
+ /* 1060 */ 154, 125, 161, 124, 125, 161, 124, 440, 154, 65,
803
+ /* 1070 */ 64, 63, 62, 440, 440, 440, 89, 440, 440, 109,
804
+ /* 1080 */ 440, 154, 97, 440, 154, 125, 161, 124, 125, 161,
805
+ /* 1090 */ 124, 125, 161, 124, 65, 64, 63, 62, 12, 65,
806
+ /* 1100 */ 64, 63, 62, 110, 440, 154, 440, 354, 154, 440,
807
+ /* 1110 */ 440, 154, 125, 161, 124, 440, 111, 440, 47, 99,
808
+ /* 1120 */ 440, 440, 440, 440, 100, 125, 161, 124, 125, 161,
809
+ /* 1130 */ 124, 440, 154, 125, 161, 124, 440, 440, 440, 440,
810
+ /* 1140 */ 101, 440, 440, 440, 440, 154, 440, 102, 154, 125,
811
+ /* 1150 */ 161, 124, 440, 154, 103, 440, 125, 161, 124, 440,
812
+ /* 1160 */ 440, 546, 440, 125, 161, 124, 440, 440, 440, 154,
813
+ /* 1170 */ 125, 161, 124, 440, 440, 545, 154, 440, 544, 440,
814
+ /* 1180 */ 440, 440, 440, 154, 125, 161, 124, 125, 161, 124,
815
+ /* 1190 */ 154, 543, 65, 64, 63, 62, 65, 64, 63, 62,
816
+ /* 1200 */ 125, 161, 124, 440, 154, 353, 440, 154, 440, 393,
817
+ /* 1210 */ 440, 440, 120, 440, 440, 121, 440, 440, 440, 440,
818
+ /* 1220 */ 154, 125, 161, 124, 125, 161, 124, 65, 64, 63,
819
+ /* 1230 */ 62, 65, 64, 63, 62, 309, 65, 64, 63, 62,
820
+ /* 1240 */ 440, 154, 440, 440, 154, 440, 51, 440, 440, 65,
821
+ /* 1250 */ 64, 63, 62, 440, 440, 56, 65, 64, 63, 62,
822
+ /* 1260 */ 440, 440, 392, 440, 440, 440, 440, 440, 440, 389,
812823
};
813824
static const YYCODETYPE yy_lookahead[] = {
814
- /* 0 */ 0, 98, 0, 125, 101, 102, 93, 94, 95, 96,
815
- /* 10 */ 10, 99, 10, 100, 4, 5, 6, 7, 18, 19,
816
- /* 20 */ 20, 120, 22, 99, 111, 99, 26, 114, 106, 107,
817
- /* 30 */ 108, 31, 32, 33, 34, 35, 124, 37, 38, 39,
818
- /* 40 */ 40, 98, 42, 43, 101, 102, 2, 47, 48, 49,
825
+ /* 0 */ 0, 99, 0, 126, 102, 103, 94, 95, 96, 97,
826
+ /* 10 */ 10, 100, 10, 101, 4, 5, 6, 7, 18, 19,
827
+ /* 20 */ 20, 3, 22, 12, 112, 100, 26, 115, 107, 108,
828
+ /* 30 */ 109, 31, 32, 33, 34, 35, 125, 37, 38, 39,
829
+ /* 40 */ 40, 99, 42, 43, 102, 103, 2, 47, 48, 49,
819830
/* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
820
- /* 60 */ 60, 0, 10, 12, 121, 122, 123, 27, 28, 29,
821
- /* 70 */ 30, 10, 100, 29, 30, 106, 107, 108, 26, 18,
822
- /* 80 */ 19, 20, 17, 22, 24, 25, 23, 26, 23, 119,
823
- /* 90 */ 46, 117, 31, 32, 33, 34, 35, 109, 37, 38,
824
- /* 100 */ 39, 40, 120, 42, 43, 106, 107, 108, 47, 48,
831
+ /* 60 */ 60, 0, 10, 100, 122, 123, 124, 27, 28, 29,
832
+ /* 70 */ 30, 10, 121, 29, 30, 107, 108, 109, 26, 18,
833
+ /* 80 */ 19, 20, 17, 22, 107, 108, 109, 26, 23, 78,
834
+ /* 90 */ 46, 101, 31, 32, 33, 34, 35, 86, 37, 38,
835
+ /* 100 */ 39, 40, 84, 42, 43, 61, 4, 5, 47, 48,
825836
/* 110 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
826
- /* 120 */ 59, 60, 0, 79, 80, 81, 82, 109, 77, 94,
827
- /* 130 */ 95, 96, 10, 4, 5, 100, 85, 3, 78, 46,
828
- /* 140 */ 18, 19, 20, 46, 22, 85, 111, 17, 26, 114,
829
- /* 150 */ 15, 6, 7, 31, 32, 33, 34, 35, 16, 37,
830
- /* 160 */ 38, 39, 40, 38, 42, 43, 90, 91, 2, 47,
837
+ /* 120 */ 59, 60, 0, 23, 80, 81, 82, 83, 120, 95,
838
+ /* 130 */ 96, 97, 10, 118, 2, 101, 4, 5, 6, 7,
839
+ /* 140 */ 18, 19, 20, 110, 22, 121, 112, 110, 26, 115,
840
+ /* 150 */ 107, 108, 109, 31, 32, 33, 34, 35, 46, 37,
841
+ /* 160 */ 38, 39, 40, 46, 42, 43, 91, 92, 36, 47,
831842
/* 170 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
832
- /* 180 */ 58, 59, 60, 1, 2, 92, 4, 5, 106, 107,
833
- /* 190 */ 108, 18, 19, 20, 12, 29, 30, 15, 41, 1,
834
- /* 200 */ 2, 38, 4, 5, 22, 17, 24, 25, 24, 25,
835
- /* 210 */ 12, 29, 30, 15, 39, 1, 2, 83, 4, 5,
836
- /* 220 */ 47, 48, 49, 50, 51, 52, 12, 29, 30, 15,
837
- /* 230 */ 39, 61, 62, 63, 64, 65, 66, 67, 68, 69,
838
- /* 240 */ 70, 24, 25, 29, 30, 79, 80, 81, 82, 106,
839
- /* 250 */ 107, 108, 45, 93, 94, 95, 96, 71, 75, 77,
840
- /* 260 */ 100, 79, 80, 81, 82, 24, 25, 85, 86, 87,
841
- /* 270 */ 88, 111, 76, 113, 114, 77, 74, 79, 80, 81,
842
- /* 280 */ 82, 75, 3, 85, 86, 87, 88, 3, 3, 3,
843
- /* 290 */ 89, 77, 73, 79, 80, 81, 82, 23, 15, 85,
844
- /* 300 */ 86, 87, 88, 2, 3, 4, 5, 6, 7, 13,
845
- /* 310 */ 97, 4, 5, 6, 7, 8, 26, 15, 17, 106,
846
- /* 320 */ 107, 108, 12, 110, 23, 97, 85, 99, 115, 116,
847
- /* 330 */ 29, 30, 104, 105, 106, 107, 108, 36, 26, 126,
848
- /* 340 */ 2, 3, 4, 5, 6, 7, 26, 2, 84, 4,
849
- /* 350 */ 5, 6, 7, 3, 126, 11, 127, 4, 5, 6,
850
- /* 360 */ 7, 23, 127, 127, 127, 64, 65, 29, 30, 1,
851
- /* 370 */ 17, 46, 127, 72, 36, 74, 75, 127, 127, 127,
852
- /* 380 */ 12, 36, 14, 127, 127, 127, 18, 19, 20, 21,
853
- /* 390 */ 22, 127, 24, 25, 127, 27, 28, 29, 30, 127,
854
- /* 400 */ 127, 127, 64, 65, 1, 127, 127, 4, 5, 84,
855
- /* 410 */ 72, 127, 74, 75, 89, 12, 127, 92, 15, 127,
856
- /* 420 */ 127, 18, 19, 20, 1, 22, 127, 4, 5, 1,
857
- /* 430 */ 2, 127, 4, 5, 127, 12, 127, 127, 15, 127,
858
- /* 440 */ 12, 127, 1, 15, 127, 4, 5, 127, 127, 97,
859
- /* 450 */ 127, 127, 127, 12, 127, 127, 15, 127, 106, 107,
860
- /* 460 */ 108, 95, 96, 97, 36, 99, 97, 44, 45, 127,
861
- /* 470 */ 104, 105, 106, 107, 108, 106, 107, 108, 126, 127,
862
- /* 480 */ 77, 112, 1, 2, 127, 4, 5, 127, 85, 86,
863
- /* 490 */ 87, 88, 126, 12, 127, 126, 15, 127, 127, 127,
864
- /* 500 */ 77, 4, 5, 6, 7, 77, 127, 127, 85, 86,
865
- /* 510 */ 87, 88, 2, 85, 86, 87, 88, 36, 77, 127,
866
- /* 520 */ 1, 127, 12, 4, 5, 127, 85, 86, 87, 88,
867
- /* 530 */ 33, 12, 127, 1, 15, 127, 4, 5, 1, 29,
868
- /* 540 */ 30, 4, 5, 127, 12, 127, 127, 15, 127, 12,
869
- /* 550 */ 127, 127, 15, 127, 97, 127, 99, 127, 77, 127,
870
- /* 560 */ 127, 104, 105, 106, 107, 108, 85, 86, 87, 88,
871
- /* 570 */ 97, 127, 99, 4, 5, 6, 7, 104, 105, 106,
872
- /* 580 */ 107, 108, 127, 126, 127, 16, 127, 77, 127, 79,
873
- /* 590 */ 80, 81, 82, 127, 127, 85, 77, 127, 2, 126,
874
- /* 600 */ 4, 5, 6, 7, 85, 86, 87, 88, 127, 77,
875
- /* 610 */ 127, 127, 127, 127, 77, 127, 127, 85, 86, 87,
876
- /* 620 */ 88, 127, 85, 86, 87, 88, 97, 127, 99, 127,
877
- /* 630 */ 127, 127, 36, 104, 105, 106, 107, 108, 97, 127,
878
- /* 640 */ 99, 4, 5, 6, 7, 104, 105, 106, 107, 108,
879
- /* 650 */ 97, 127, 99, 127, 17, 126, 127, 104, 105, 106,
880
- /* 660 */ 107, 108, 97, 127, 99, 127, 127, 126, 127, 104,
881
- /* 670 */ 105, 106, 107, 108, 127, 97, 127, 99, 127, 126,
882
- /* 680 */ 127, 127, 104, 105, 106, 107, 108, 97, 127, 99,
883
- /* 690 */ 97, 126, 127, 127, 104, 105, 106, 107, 108, 106,
884
- /* 700 */ 107, 108, 127, 97, 126, 99, 127, 127, 127, 127,
885
- /* 710 */ 104, 105, 106, 107, 108, 97, 126, 99, 97, 126,
886
- /* 720 */ 127, 127, 104, 105, 106, 107, 108, 106, 107, 108,
887
- /* 730 */ 127, 97, 126, 99, 127, 127, 127, 127, 104, 105,
888
- /* 740 */ 106, 107, 108, 97, 126, 99, 127, 126, 127, 127,
889
- /* 750 */ 104, 105, 106, 107, 108, 97, 127, 99, 127, 127,
890
- /* 760 */ 126, 127, 104, 105, 106, 107, 108, 97, 127, 99,
891
- /* 770 */ 127, 127, 126, 127, 104, 105, 106, 107, 108, 127,
892
- /* 780 */ 97, 127, 99, 127, 126, 127, 127, 104, 105, 106,
893
- /* 790 */ 107, 108, 97, 127, 99, 127, 126, 127, 127, 104,
894
- /* 800 */ 105, 106, 107, 108, 127, 127, 127, 127, 97, 126,
895
- /* 810 */ 99, 127, 127, 127, 97, 104, 105, 106, 107, 108,
896
- /* 820 */ 97, 126, 99, 106, 107, 108, 127, 110, 105, 106,
897
- /* 830 */ 107, 108, 127, 116, 127, 127, 97, 126, 4, 5,
898
- /* 840 */ 6, 7, 8, 126, 99, 106, 107, 108, 127, 126,
899
- /* 850 */ 105, 106, 107, 108, 127, 127, 127, 118, 127, 120,
900
- /* 860 */ 127, 127, 127, 97, 127, 126, 127, 127, 127, 127,
901
- /* 870 */ 97, 126, 106, 107, 108, 127, 110, 127, 127, 106,
902
- /* 880 */ 107, 108, 127, 110, 4, 5, 6, 7, 4, 5,
903
- /* 890 */ 6, 7, 126, 127, 127, 127, 127, 17, 127, 126,
904
- /* 900 */ 97, 17, 127, 23, 127, 127, 97, 23, 127, 106,
905
- /* 910 */ 107, 108, 97, 127, 127, 106, 107, 108, 127, 127,
906
- /* 920 */ 127, 106, 107, 108, 127, 127, 127, 97, 127, 126,
907
- /* 930 */ 127, 127, 127, 127, 97, 126, 106, 107, 108, 127,
908
- /* 940 */ 127, 126, 97, 106, 107, 108, 127, 127, 97, 127,
909
- /* 950 */ 127, 106, 107, 108, 127, 97, 126, 106, 107, 108,
910
- /* 960 */ 127, 127, 127, 126, 106, 107, 108, 127, 127, 97,
911
- /* 970 */ 127, 126, 97, 127, 127, 127, 127, 126, 106, 107,
912
- /* 980 */ 108, 106, 107, 108, 126, 97, 4, 5, 6, 7,
913
- /* 990 */ 127, 127, 127, 127, 106, 107, 108, 97, 126, 127,
914
- /* 1000 */ 127, 126, 127, 127, 127, 23, 106, 107, 108, 97,
915
- /* 1010 */ 127, 127, 127, 97, 126, 127, 127, 127, 106, 107,
916
- /* 1020 */ 108, 97, 106, 107, 108, 97, 126, 127, 127, 127,
917
- /* 1030 */ 106, 107, 108, 127, 106, 107, 108, 127, 126, 127,
918
- /* 1040 */ 127, 127, 126, 127, 127, 127, 97, 127, 127, 97,
919
- /* 1050 */ 126, 127, 127, 97, 126, 106, 107, 108, 106, 107,
920
- /* 1060 */ 108, 97, 106, 107, 108, 127, 4, 5, 6, 7,
921
- /* 1070 */ 106, 107, 108, 127, 127, 126, 97, 127, 126, 17,
922
- /* 1080 */ 127, 127, 126, 97, 127, 106, 107, 108, 127, 127,
923
- /* 1090 */ 126, 127, 106, 107, 108, 127, 127, 127, 127, 97,
924
- /* 1100 */ 127, 127, 127, 127, 97, 126, 127, 97, 106, 107,
925
- /* 1110 */ 108, 97, 126, 106, 107, 108, 106, 107, 108, 127,
926
- /* 1120 */ 106, 107, 108, 4, 5, 6, 7, 127, 126, 127,
927
- /* 1130 */ 127, 127, 127, 126, 127, 127, 126, 127, 127, 127,
928
- /* 1140 */ 126, 127, 23, 127, 127, 4, 5, 6, 7, 8,
929
- /* 1150 */ 4, 5, 6, 7, 4, 5, 6, 7, 4, 5,
930
- /* 1160 */ 6, 7, 127, 17, 4, 5, 6, 7, 127, 127,
931
- /* 1170 */ 127, 17, 127, 23, 127, 127, 127, 17, 127, 127,
932
- /* 1180 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
933
- /* 1190 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
934
- /* 1200 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
935
- /* 1210 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
936
- /* 1220 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
937
- /* 1230 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
938
- /* 1240 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
939
- /* 1250 */ 127, 127, 127, 127, 127, 127, 127, 127, 93, 93,
940
- /* 1260 */ 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
941
- /* 1270 */ 93,
843
+ /* 180 */ 58, 59, 60, 1, 2, 17, 4, 5, 4, 5,
844
+ /* 190 */ 6, 7, 8, 16, 12, 6, 7, 15, 15, 1,
845
+ /* 200 */ 2, 41, 4, 5, 22, 93, 24, 25, 38, 38,
846
+ /* 210 */ 12, 29, 30, 15, 39, 61, 62, 63, 64, 65,
847
+ /* 220 */ 66, 67, 68, 69, 70, 98, 39, 29, 30, 1,
848
+ /* 230 */ 107, 108, 109, 45, 107, 108, 109, 17, 111, 76,
849
+ /* 240 */ 12, 77, 14, 61, 117, 71, 18, 19, 20, 21,
850
+ /* 250 */ 22, 75, 24, 25, 127, 27, 28, 29, 30, 61,
851
+ /* 260 */ 78, 76, 80, 81, 82, 83, 100, 3, 86, 87,
852
+ /* 270 */ 88, 89, 106, 107, 108, 109, 78, 3, 80, 81,
853
+ /* 280 */ 82, 83, 24, 25, 86, 87, 88, 89, 1, 2,
854
+ /* 290 */ 36, 4, 5, 127, 24, 25, 96, 97, 98, 12,
855
+ /* 300 */ 100, 3, 15, 3, 90, 105, 106, 107, 108, 109,
856
+ /* 310 */ 3, 94, 95, 96, 97, 3, 29, 30, 101, 2,
857
+ /* 320 */ 3, 4, 5, 6, 7, 24, 25, 127, 73, 112,
858
+ /* 330 */ 15, 114, 115, 98, 17, 13, 4, 5, 6, 7,
859
+ /* 340 */ 23, 23, 107, 108, 109, 15, 29, 30, 61, 17,
860
+ /* 350 */ 26, 26, 26, 36, 12, 23, 2, 3, 4, 5,
861
+ /* 360 */ 6, 7, 127, 24, 25, 78, 85, 80, 81, 82,
862
+ /* 370 */ 83, 128, 3, 86, 87, 88, 89, 23, 11, 128,
863
+ /* 380 */ 79, 64, 65, 29, 30, 128, 128, 86, 128, 72,
864
+ /* 390 */ 36, 74, 75, 76, 1, 128, 128, 4, 5, 4,
865
+ /* 400 */ 5, 6, 7, 8, 128, 12, 46, 128, 15, 128,
866
+ /* 410 */ 128, 18, 19, 20, 128, 22, 128, 128, 64, 65,
867
+ /* 420 */ 1, 128, 128, 4, 5, 86, 72, 128, 74, 75,
868
+ /* 430 */ 76, 12, 1, 2, 15, 4, 5, 1, 2, 128,
869
+ /* 440 */ 4, 5, 128, 12, 128, 85, 15, 128, 12, 128,
870
+ /* 450 */ 90, 15, 128, 93, 128, 128, 18, 19, 20, 128,
871
+ /* 460 */ 128, 128, 128, 44, 45, 128, 98, 36, 128, 128,
872
+ /* 470 */ 128, 78, 36, 128, 2, 107, 108, 109, 128, 86,
873
+ /* 480 */ 87, 88, 89, 98, 12, 47, 48, 49, 50, 51,
874
+ /* 490 */ 52, 128, 107, 108, 109, 127, 128, 78, 113, 128,
875
+ /* 500 */ 128, 29, 30, 128, 128, 86, 87, 88, 89, 78,
876
+ /* 510 */ 128, 128, 127, 128, 78, 128, 128, 86, 87, 88,
877
+ /* 520 */ 89, 128, 86, 87, 88, 89, 1, 2, 128, 4,
878
+ /* 530 */ 5, 1, 2, 61, 4, 5, 128, 12, 128, 128,
879
+ /* 540 */ 15, 128, 12, 128, 128, 15, 128, 128, 128, 128,
880
+ /* 550 */ 78, 128, 80, 81, 82, 83, 1, 128, 86, 4,
881
+ /* 560 */ 5, 1, 128, 128, 4, 5, 128, 12, 128, 128,
882
+ /* 570 */ 15, 128, 12, 128, 1, 15, 128, 4, 5, 1,
883
+ /* 580 */ 128, 128, 4, 5, 128, 12, 98, 128, 15, 128,
884
+ /* 590 */ 12, 98, 128, 15, 128, 107, 108, 109, 128, 111,
885
+ /* 600 */ 107, 108, 109, 78, 116, 117, 128, 128, 78, 128,
886
+ /* 610 */ 128, 86, 87, 88, 89, 127, 86, 87, 88, 89,
887
+ /* 620 */ 127, 98, 128, 100, 128, 128, 98, 128, 105, 106,
888
+ /* 630 */ 107, 108, 109, 78, 128, 107, 108, 109, 78, 111,
889
+ /* 640 */ 128, 86, 87, 88, 89, 2, 86, 87, 88, 89,
890
+ /* 650 */ 127, 78, 128, 128, 128, 127, 78, 128, 128, 86,
891
+ /* 660 */ 87, 88, 89, 128, 86, 87, 88, 89, 128, 98,
892
+ /* 670 */ 128, 100, 29, 30, 128, 128, 105, 106, 107, 108,
893
+ /* 680 */ 109, 98, 128, 100, 98, 128, 128, 128, 105, 106,
894
+ /* 690 */ 107, 108, 109, 107, 108, 109, 128, 111, 127, 4,
895
+ /* 700 */ 5, 6, 7, 128, 61, 128, 128, 98, 128, 100,
896
+ /* 710 */ 127, 128, 17, 127, 105, 106, 107, 108, 109, 128,
897
+ /* 720 */ 98, 128, 100, 80, 81, 82, 83, 105, 106, 107,
898
+ /* 730 */ 108, 109, 98, 128, 100, 128, 127, 128, 128, 105,
899
+ /* 740 */ 106, 107, 108, 109, 128, 98, 128, 100, 128, 127,
900
+ /* 750 */ 128, 128, 105, 106, 107, 108, 109, 128, 98, 128,
901
+ /* 760 */ 100, 127, 128, 128, 128, 105, 106, 107, 108, 109,
902
+ /* 770 */ 98, 128, 100, 128, 127, 128, 128, 105, 106, 107,
903
+ /* 780 */ 108, 109, 98, 128, 100, 128, 128, 127, 128, 105,
904
+ /* 790 */ 106, 107, 108, 109, 98, 4, 5, 6, 7, 127,
905
+ /* 800 */ 128, 128, 128, 107, 108, 109, 98, 16, 100, 128,
906
+ /* 810 */ 128, 127, 128, 105, 106, 107, 108, 109, 128, 98,
907
+ /* 820 */ 128, 100, 128, 127, 128, 128, 105, 106, 107, 108,
908
+ /* 830 */ 109, 98, 128, 100, 128, 127, 128, 128, 105, 106,
909
+ /* 840 */ 107, 108, 109, 128, 98, 128, 100, 128, 127, 128,
910
+ /* 850 */ 128, 105, 106, 107, 108, 109, 128, 98, 128, 100,
911
+ /* 860 */ 127, 128, 128, 128, 105, 106, 107, 108, 109, 98,
912
+ /* 870 */ 128, 100, 128, 127, 128, 128, 105, 106, 107, 108,
913
+ /* 880 */ 109, 98, 128, 100, 128, 128, 127, 128, 105, 106,
914
+ /* 890 */ 107, 108, 109, 98, 4, 5, 6, 7, 127, 128,
915
+ /* 900 */ 128, 128, 107, 108, 109, 98, 128, 100, 128, 128,
916
+ /* 910 */ 127, 128, 105, 106, 107, 108, 109, 128, 98, 128,
917
+ /* 920 */ 100, 128, 127, 33, 128, 105, 106, 107, 108, 109,
918
+ /* 930 */ 98, 128, 100, 128, 127, 128, 128, 105, 106, 107,
919
+ /* 940 */ 108, 109, 128, 98, 128, 100, 128, 127, 128, 128,
920
+ /* 950 */ 105, 106, 107, 108, 109, 128, 98, 128, 100, 127,
921
+ /* 960 */ 128, 128, 128, 128, 106, 107, 108, 109, 98, 128,
922
+ /* 970 */ 128, 2, 127, 4, 5, 6, 7, 107, 108, 109,
923
+ /* 980 */ 4, 5, 6, 7, 128, 127, 128, 128, 128, 119,
924
+ /* 990 */ 128, 121, 98, 17, 128, 128, 128, 127, 128, 23,
925
+ /* 1000 */ 128, 107, 108, 109, 98, 36, 128, 128, 128, 98,
926
+ /* 1010 */ 128, 128, 128, 107, 108, 109, 128, 98, 107, 108,
927
+ /* 1020 */ 109, 127, 128, 128, 128, 98, 107, 108, 109, 128,
928
+ /* 1030 */ 128, 98, 128, 127, 107, 108, 109, 128, 127, 98,
929
+ /* 1040 */ 107, 108, 109, 128, 128, 128, 127, 128, 107, 108,
930
+ /* 1050 */ 109, 128, 98, 128, 127, 98, 128, 128, 128, 128,
931
+ /* 1060 */ 127, 107, 108, 109, 107, 108, 109, 128, 127, 4,
932
+ /* 1070 */ 5, 6, 7, 128, 128, 128, 98, 128, 128, 98,
933
+ /* 1080 */ 128, 127, 98, 128, 127, 107, 108, 109, 107, 108,
934
+ /* 1090 */ 109, 107, 108, 109, 4, 5, 6, 7, 33, 4,
935
+ /* 1100 */ 5, 6, 7, 98, 128, 127, 128, 17, 127, 128,
936
+ /* 1110 */ 128, 127, 107, 108, 109, 128, 98, 128, 23, 98,
937
+ /* 1120 */ 128, 128, 128, 128, 98, 107, 108, 109, 107, 108,
938
+ /* 1130 */ 109, 128, 127, 107, 108, 109, 128, 128, 128, 128,
939
+ /* 1140 */ 98, 128, 128, 128, 128, 127, 128, 98, 127, 107,
940
+ /* 1150 */ 108, 109, 128, 127, 98, 128, 107, 108, 109, 128,
941
+ /* 1160 */ 128, 98, 128, 107, 108, 109, 128, 128, 128, 127,
942
+ /* 1170 */ 107, 108, 109, 128, 128, 98, 127, 128, 98, 128,
943
+ /* 1180 */ 128, 128, 128, 127, 107, 108, 109, 107, 108, 109,
944
+ /* 1190 */ 127, 98, 4, 5, 6, 7, 4, 5, 6, 7,
945
+ /* 1200 */ 107, 108, 109, 128, 127, 17, 128, 127, 128, 17,
946
+ /* 1210 */ 128, 128, 98, 128, 128, 98, 128, 128, 128, 128,
947
+ /* 1220 */ 127, 107, 108, 109, 107, 108, 109, 4, 5, 6,
948
+ /* 1230 */ 7, 4, 5, 6, 7, 8, 4, 5, 6, 7,
949
+ /* 1240 */ 128, 127, 128, 128, 127, 128, 23, 128, 128, 4,
950
+ /* 1250 */ 5, 6, 7, 128, 128, 23, 4, 5, 6, 7,
951
+ /* 1260 */ 128, 128, 17, 128, 128, 128, 128, 128, 128, 17,
952
+ /* 1270 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
953
+ /* 1280 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
954
+ /* 1290 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
955
+ /* 1300 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
956
+ /* 1310 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
957
+ /* 1320 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
958
+ /* 1330 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
959
+ /* 1340 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
960
+ /* 1350 */ 128, 94, 94, 94, 94, 94, 94, 94, 94, 94,
961
+ /* 1360 */ 94, 94, 94, 94,
942962
};
943
-#define YY_SHIFT_COUNT (155)
963
+#define YY_SHIFT_COUNT (163)
944964
#define YY_SHIFT_MIN (0)
945
-#define YY_SHIFT_MAX (1160)
965
+#define YY_SHIFT_MAX (1252)
946966
static const unsigned short int yy_shift_ofst[] = {
947
- /* 0 */ 368, 182, 198, 198, 198, 198, 198, 198, 198, 198,
967
+ /* 0 */ 228, 182, 198, 198, 198, 198, 198, 198, 198, 198,
948968
/* 10 */ 198, 198, 198, 198, 198, 198, 198, 198, 198, 198,
949
- /* 20 */ 403, 214, 403, 368, 441, 0, 61, 122, 368, 423,
950
- /* 30 */ 510, 519, 519, 428, 481, 441, 441, 441, 441, 441,
951
- /* 40 */ 441, 441, 441, 441, 532, 441, 441, 441, 537, 441,
952
- /* 50 */ 441, 441, 441, 441, 441, 441, 441, 441, 441, 441,
953
- /* 60 */ 441, 441, 173, 51, 51, 51, 51, 51, 44, 301,
954
- /* 70 */ 338, 166, 166, 307, 40, 63, 1178, 1178, 1178, 1178,
955
- /* 80 */ 170, 170, 345, 596, 880, 884, 353, 569, 497, 637,
956
- /* 90 */ 982, 1062, 1119, 834, 1141, 1146, 1150, 1154, 1160, 10,
957
- /* 100 */ 10, 10, 10, 10, 10, 10, 10, 325, 60, 10,
958
- /* 110 */ 241, 52, 65, 129, 76, 145, 145, 184, 217, 134,
959
- /* 120 */ 93, 2, 97, 130, 142, 135, 157, 125, 163, 175,
960
- /* 130 */ 191, 207, 186, 188, 183, 202, 196, 206, 279, 284,
961
- /* 140 */ 285, 286, 201, 219, 274, 296, 201, 283, 302, 290,
962
- /* 150 */ 312, 320, 310, 264, 350, 344,
969
+ /* 20 */ 198, 198, 198, 393, 287, 393, 228, 555, 0, 61,
970
+ /* 30 */ 122, 228, 419, 472, 560, 560, 431, 436, 525, 530,
971
+ /* 40 */ 555, 555, 555, 555, 555, 555, 555, 555, 573, 555,
972
+ /* 50 */ 555, 555, 578, 555, 555, 555, 555, 555, 555, 555,
973
+ /* 60 */ 555, 555, 555, 555, 555, 555, 438, 11, 11, 11,
974
+ /* 70 */ 11, 11, 44, 317, 354, 643, 643, 184, 40, 100,
975
+ /* 80 */ 1270, 1270, 1270, 1270, 154, 154, 132, 969, 332, 976,
976
+ /* 90 */ 695, 791, 890, 1065, 1090, 1095, 1188, 1223, 395, 1227,
977
+ /* 100 */ 1192, 1232, 1245, 1252, 10, 10, 10, 10, 10, 10,
978
+ /* 110 */ 10, 10, 360, 301, 10, 339, 52, 65, 102, 75,
979
+ /* 120 */ 189, 189, 258, 270, 18, 112, 2, 117, 168, 177,
980
+ /* 130 */ 183, 160, 170, 171, 175, 187, 188, 174, 220, 163,
981
+ /* 140 */ 176, 164, 185, 264, 274, 298, 254, 300, 307, 312,
982
+ /* 150 */ 214, 255, 318, 322, 214, 315, 330, 324, 325, 326,
983
+ /* 160 */ 342, 281, 369, 367,
963984
};
964
-#define YY_REDUCE_COUNT (79)
965
-#define YY_REDUCE_MIN (-122)
966
-#define YY_REDUCE_MAX (1014)
985
+#define YY_REDUCE_COUNT (83)
986
+#define YY_REDUCE_MIN (-123)
987
+#define YY_REDUCE_MAX (1117)
967988
static const short yy_reduce_ofst[] = {
968
- /* 0 */ 160, 366, 228, 457, 473, 529, 541, 553, 565, 578,
969
- /* 10 */ 590, 606, 618, 634, 646, 658, 670, 683, 695, 711,
970
- /* 20 */ 213, 723, 717, -87, 739, -57, -57, -57, 35, 369,
971
- /* 30 */ 745, 766, 773, 352, 593, 621, 803, 809, 815, 830,
972
- /* 40 */ 837, 845, 851, 858, 872, 875, 888, 900, 912, 916,
973
- /* 50 */ 924, 928, 949, 952, 956, 964, 979, 986, 1002, 1007,
974
- /* 60 */ 1010, 1014, -97, -78, -31, -1, 82, 143, -88, -122,
975
- /* 70 */ -122, -76, -74, -99, -28, -26, -30, -12, -18, 18,
989
+ /* 0 */ 217, 200, 523, 571, 583, 609, 622, 634, 647, 660,
990
+ /* 10 */ 672, 684, 708, 721, 733, 746, 759, 771, 783, 807,
991
+ /* 20 */ 820, 832, 845, 488, 858, 127, -88, 870, -58, -58,
992
+ /* 30 */ -58, 34, 385, 166, 528, 586, 235, 368, 493, 696,
993
+ /* 40 */ 795, 894, 906, 911, 919, 927, 933, 941, 954, 957,
994
+ /* 50 */ 978, 981, 984, 1005, 1018, 1021, 1026, 1042, 1049, 1056,
995
+ /* 60 */ 1063, 1077, 1080, 1093, 1114, 1117, -98, -79, -32, -23,
996
+ /* 70 */ 43, 123, -89, -123, -123, -75, -37, -49, -10, 15,
997
+ /* 80 */ 8, 33, 24, 37,
976998
};
977999
static const YYACTIONTYPE yy_default[] = {
978
- /* 0 */ 428, 422, 422, 422, 422, 422, 422, 422, 422, 422,
979
- /* 10 */ 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
980
- /* 20 */ 422, 422, 422, 428, 551, 556, 556, 556, 428, 458,
981
- /* 30 */ 422, 422, 422, 555, 464, 422, 422, 422, 422, 422,
982
- /* 40 */ 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
983
- /* 50 */ 454, 422, 422, 422, 422, 422, 422, 422, 422, 422,
984
- /* 60 */ 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
985
- /* 70 */ 422, 422, 422, 551, 422, 434, 448, 490, 551, 490,
986
- /* 80 */ 446, 476, 422, 422, 422, 422, 422, 422, 422, 422,
987
- /* 90 */ 422, 422, 422, 457, 452, 422, 422, 422, 422, 470,
988
- /* 100 */ 469, 466, 465, 494, 493, 492, 453, 437, 422, 542,
989
- /* 110 */ 422, 422, 422, 563, 422, 523, 522, 518, 422, 511,
990
- /* 120 */ 508, 422, 508, 422, 422, 422, 474, 422, 422, 422,
991
- /* 130 */ 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
992
- /* 140 */ 422, 422, 567, 422, 422, 422, 422, 422, 422, 422,
993
- /* 150 */ 422, 422, 422, 575, 422, 422,
1000
+ /* 0 */ 444, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1001
+ /* 10 */ 438, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1002
+ /* 20 */ 438, 438, 438, 438, 438, 438, 444, 570, 575, 575,
1003
+ /* 30 */ 575, 444, 474, 438, 438, 438, 574, 480, 438, 438,
1004
+ /* 40 */ 438, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1005
+ /* 50 */ 438, 438, 438, 438, 470, 438, 438, 438, 438, 438,
1006
+ /* 60 */ 438, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1007
+ /* 70 */ 438, 438, 438, 438, 438, 438, 438, 570, 438, 450,
1008
+ /* 80 */ 464, 506, 570, 506, 462, 492, 438, 438, 438, 438,
1009
+ /* 90 */ 438, 438, 438, 438, 438, 438, 438, 438, 473, 468,
1010
+ /* 100 */ 438, 438, 438, 438, 486, 485, 482, 481, 510, 509,
1011
+ /* 110 */ 508, 469, 453, 438, 561, 438, 438, 438, 582, 438,
1012
+ /* 120 */ 542, 541, 537, 438, 530, 527, 438, 527, 438, 438,
1013
+ /* 130 */ 438, 490, 438, 438, 438, 438, 438, 438, 438, 438,
1014
+ /* 140 */ 438, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1015
+ /* 150 */ 586, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1016
+ /* 160 */ 438, 595, 438, 438,
9941017
};
9951018
/********** End of lemon-generated parsing tables *****************************/
9961019
9971020
/* The next table maps tokens (terminal symbols) into fallback tokens.
9981021
** If a construct like the following:
@@ -1082,10 +1105,11 @@
10821105
0, /* BIG => nothing */
10831106
0, /* SMALL => nothing */
10841107
0, /* AND => nothing */
10851108
0, /* LT => nothing */
10861109
0, /* GT => nothing */
1110
+ 0, /* ON => nothing */
10871111
0, /* WAY => nothing */
10881112
0, /* BETWEEN => nothing */
10891113
0, /* THE => nothing */
10901114
0, /* NTH => nothing */
10911115
0, /* VERTEX => nothing */
@@ -1263,63 +1287,64 @@
12631287
/* 69 */ "BIG",
12641288
/* 70 */ "SMALL",
12651289
/* 71 */ "AND",
12661290
/* 72 */ "LT",
12671291
/* 73 */ "GT",
1268
- /* 74 */ "WAY",
1269
- /* 75 */ "BETWEEN",
1270
- /* 76 */ "THE",
1271
- /* 77 */ "NTH",
1272
- /* 78 */ "VERTEX",
1273
- /* 79 */ "TOP",
1274
- /* 80 */ "BOTTOM",
1275
- /* 81 */ "START",
1276
- /* 82 */ "END",
1277
- /* 83 */ "IN",
1278
- /* 84 */ "DOT_U",
1279
- /* 85 */ "LAST",
1280
- /* 86 */ "NUMBER",
1281
- /* 87 */ "FUNC1",
1282
- /* 88 */ "FUNC2",
1283
- /* 89 */ "DOT_XY",
1284
- /* 90 */ "X",
1285
- /* 91 */ "Y",
1286
- /* 92 */ "DOT_L",
1287
- /* 93 */ "element_list",
1288
- /* 94 */ "element",
1289
- /* 95 */ "unnamed_element",
1290
- /* 96 */ "basetype",
1291
- /* 97 */ "expr",
1292
- /* 98 */ "numproperty",
1293
- /* 99 */ "edge",
1294
- /* 100 */ "direction",
1295
- /* 101 */ "dashproperty",
1296
- /* 102 */ "colorproperty",
1297
- /* 103 */ "locproperty",
1298
- /* 104 */ "position",
1299
- /* 105 */ "place",
1300
- /* 106 */ "object",
1301
- /* 107 */ "objectname",
1302
- /* 108 */ "nth",
1303
- /* 109 */ "textposition",
1304
- /* 110 */ "rvalue",
1305
- /* 111 */ "lvalue",
1306
- /* 112 */ "even",
1307
- /* 113 */ "document",
1308
- /* 114 */ "print",
1309
- /* 115 */ "prlist",
1310
- /* 116 */ "pritem",
1311
- /* 117 */ "prsep",
1312
- /* 118 */ "attribute_list",
1313
- /* 119 */ "savelist",
1314
- /* 120 */ "alist",
1315
- /* 121 */ "attribute",
1316
- /* 122 */ "go",
1317
- /* 123 */ "boolproperty",
1318
- /* 124 */ "withclause",
1319
- /* 125 */ "between",
1320
- /* 126 */ "place2",
1292
+ /* 74 */ "ON",
1293
+ /* 75 */ "WAY",
1294
+ /* 76 */ "BETWEEN",
1295
+ /* 77 */ "THE",
1296
+ /* 78 */ "NTH",
1297
+ /* 79 */ "VERTEX",
1298
+ /* 80 */ "TOP",
1299
+ /* 81 */ "BOTTOM",
1300
+ /* 82 */ "START",
1301
+ /* 83 */ "END",
1302
+ /* 84 */ "IN",
1303
+ /* 85 */ "DOT_U",
1304
+ /* 86 */ "LAST",
1305
+ /* 87 */ "NUMBER",
1306
+ /* 88 */ "FUNC1",
1307
+ /* 89 */ "FUNC2",
1308
+ /* 90 */ "DOT_XY",
1309
+ /* 91 */ "X",
1310
+ /* 92 */ "Y",
1311
+ /* 93 */ "DOT_L",
1312
+ /* 94 */ "element_list",
1313
+ /* 95 */ "element",
1314
+ /* 96 */ "unnamed_element",
1315
+ /* 97 */ "basetype",
1316
+ /* 98 */ "expr",
1317
+ /* 99 */ "numproperty",
1318
+ /* 100 */ "edge",
1319
+ /* 101 */ "direction",
1320
+ /* 102 */ "dashproperty",
1321
+ /* 103 */ "colorproperty",
1322
+ /* 104 */ "locproperty",
1323
+ /* 105 */ "position",
1324
+ /* 106 */ "place",
1325
+ /* 107 */ "object",
1326
+ /* 108 */ "objectname",
1327
+ /* 109 */ "nth",
1328
+ /* 110 */ "textposition",
1329
+ /* 111 */ "rvalue",
1330
+ /* 112 */ "lvalue",
1331
+ /* 113 */ "even",
1332
+ /* 114 */ "document",
1333
+ /* 115 */ "print",
1334
+ /* 116 */ "prlist",
1335
+ /* 117 */ "pritem",
1336
+ /* 118 */ "prsep",
1337
+ /* 119 */ "attribute_list",
1338
+ /* 120 */ "savelist",
1339
+ /* 121 */ "alist",
1340
+ /* 122 */ "attribute",
1341
+ /* 123 */ "go",
1342
+ /* 124 */ "boolproperty",
1343
+ /* 125 */ "withclause",
1344
+ /* 126 */ "between",
1345
+ /* 127 */ "place2",
13211346
};
13221347
#endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
13231348
13241349
#ifndef NDEBUG
13251350
/* For tracing reduce actions, the names of all rules are required.
@@ -1403,81 +1428,85 @@
14031428
/* 75 */ "position ::= expr LT position COMMA position GT",
14041429
/* 76 */ "position ::= expr ABOVE position",
14051430
/* 77 */ "position ::= expr BELOW position",
14061431
/* 78 */ "position ::= expr LEFT OF position",
14071432
/* 79 */ "position ::= expr RIGHT OF position",
1408
- /* 80 */ "position ::= expr EDGEPT OF position",
1409
- /* 81 */ "position ::= expr HEADING expr FROM position",
1410
- /* 82 */ "place ::= edge OF object",
1411
- /* 83 */ "place2 ::= object",
1412
- /* 84 */ "place2 ::= object DOT_E edge",
1413
- /* 85 */ "place2 ::= NTH VERTEX OF object",
1414
- /* 86 */ "object ::= nth",
1415
- /* 87 */ "object ::= nth OF|IN object",
1416
- /* 88 */ "objectname ::= PLACENAME",
1417
- /* 89 */ "objectname ::= objectname DOT_U PLACENAME",
1418
- /* 90 */ "nth ::= NTH CLASSNAME",
1419
- /* 91 */ "nth ::= NTH LAST CLASSNAME",
1420
- /* 92 */ "nth ::= LAST CLASSNAME",
1421
- /* 93 */ "nth ::= LAST",
1422
- /* 94 */ "nth ::= NTH LB RB",
1423
- /* 95 */ "nth ::= NTH LAST LB RB",
1424
- /* 96 */ "nth ::= LAST LB RB",
1425
- /* 97 */ "expr ::= expr PLUS expr",
1426
- /* 98 */ "expr ::= expr MINUS expr",
1427
- /* 99 */ "expr ::= expr STAR expr",
1428
- /* 100 */ "expr ::= expr SLASH expr",
1429
- /* 101 */ "expr ::= MINUS expr",
1430
- /* 102 */ "expr ::= PLUS expr",
1431
- /* 103 */ "expr ::= LP expr RP",
1432
- /* 104 */ "expr ::= NUMBER",
1433
- /* 105 */ "expr ::= ID",
1434
- /* 106 */ "expr ::= FUNC1 LP expr RP",
1435
- /* 107 */ "expr ::= FUNC2 LP expr COMMA expr RP",
1436
- /* 108 */ "expr ::= place2 DOT_XY X",
1437
- /* 109 */ "expr ::= place2 DOT_XY Y",
1438
- /* 110 */ "expr ::= object DOT_L numproperty",
1439
- /* 111 */ "expr ::= object DOT_L dashproperty",
1440
- /* 112 */ "expr ::= object DOT_L colorproperty",
1441
- /* 113 */ "lvalue ::= ID",
1442
- /* 114 */ "lvalue ::= FILL",
1443
- /* 115 */ "lvalue ::= COLOR",
1444
- /* 116 */ "lvalue ::= THICKNESS",
1445
- /* 117 */ "rvalue ::= expr",
1446
- /* 118 */ "print ::= PRINT",
1447
- /* 119 */ "prlist ::= pritem",
1448
- /* 120 */ "prlist ::= prlist prsep pritem",
1449
- /* 121 */ "direction ::= UP",
1450
- /* 122 */ "direction ::= DOWN",
1451
- /* 123 */ "direction ::= LEFT",
1452
- /* 124 */ "direction ::= RIGHT",
1453
- /* 125 */ "attribute_list ::= alist",
1454
- /* 126 */ "alist ::=",
1455
- /* 127 */ "alist ::= alist attribute",
1456
- /* 128 */ "attribute ::= boolproperty",
1457
- /* 129 */ "attribute ::= WITH withclause",
1458
- /* 130 */ "go ::= GO",
1459
- /* 131 */ "go ::=",
1460
- /* 132 */ "even ::= UNTIL EVEN WITH",
1461
- /* 133 */ "even ::= EVEN WITH",
1462
- /* 134 */ "dashproperty ::= DOTTED",
1463
- /* 135 */ "dashproperty ::= DASHED",
1464
- /* 136 */ "colorproperty ::= FILL",
1465
- /* 137 */ "colorproperty ::= COLOR",
1466
- /* 138 */ "position ::= place",
1467
- /* 139 */ "between ::= WAY BETWEEN",
1468
- /* 140 */ "between ::= BETWEEN",
1469
- /* 141 */ "between ::= OF THE WAY BETWEEN",
1470
- /* 142 */ "place ::= place2",
1471
- /* 143 */ "edge ::= EDGEPT",
1472
- /* 144 */ "edge ::= TOP",
1473
- /* 145 */ "edge ::= BOTTOM",
1474
- /* 146 */ "edge ::= START",
1475
- /* 147 */ "edge ::= END",
1476
- /* 148 */ "edge ::= RIGHT",
1477
- /* 149 */ "edge ::= LEFT",
1478
- /* 150 */ "object ::= objectname",
1433
+ /* 80 */ "position ::= expr ON HEADING EDGEPT OF position",
1434
+ /* 81 */ "position ::= expr HEADING EDGEPT OF position",
1435
+ /* 82 */ "position ::= expr EDGEPT OF position",
1436
+ /* 83 */ "position ::= expr ON HEADING expr FROM position",
1437
+ /* 84 */ "position ::= expr HEADING expr FROM position",
1438
+ /* 85 */ "place ::= edge OF object",
1439
+ /* 86 */ "place2 ::= object",
1440
+ /* 87 */ "place2 ::= object DOT_E edge",
1441
+ /* 88 */ "place2 ::= NTH VERTEX OF object",
1442
+ /* 89 */ "object ::= nth",
1443
+ /* 90 */ "object ::= nth OF|IN object",
1444
+ /* 91 */ "objectname ::= PLACENAME",
1445
+ /* 92 */ "objectname ::= objectname DOT_U PLACENAME",
1446
+ /* 93 */ "nth ::= NTH CLASSNAME",
1447
+ /* 94 */ "nth ::= NTH LAST CLASSNAME",
1448
+ /* 95 */ "nth ::= LAST CLASSNAME",
1449
+ /* 96 */ "nth ::= LAST",
1450
+ /* 97 */ "nth ::= NTH LB RB",
1451
+ /* 98 */ "nth ::= NTH LAST LB RB",
1452
+ /* 99 */ "nth ::= LAST LB RB",
1453
+ /* 100 */ "expr ::= expr PLUS expr",
1454
+ /* 101 */ "expr ::= expr MINUS expr",
1455
+ /* 102 */ "expr ::= expr STAR expr",
1456
+ /* 103 */ "expr ::= expr SLASH expr",
1457
+ /* 104 */ "expr ::= MINUS expr",
1458
+ /* 105 */ "expr ::= PLUS expr",
1459
+ /* 106 */ "expr ::= LP expr RP",
1460
+ /* 107 */ "expr ::= NUMBER",
1461
+ /* 108 */ "expr ::= ID",
1462
+ /* 109 */ "expr ::= FUNC1 LP expr RP",
1463
+ /* 110 */ "expr ::= FUNC2 LP expr COMMA expr RP",
1464
+ /* 111 */ "expr ::= place2 DOT_XY X",
1465
+ /* 112 */ "expr ::= place2 DOT_XY Y",
1466
+ /* 113 */ "expr ::= object DOT_L numproperty",
1467
+ /* 114 */ "expr ::= object DOT_L dashproperty",
1468
+ /* 115 */ "expr ::= object DOT_L colorproperty",
1469
+ /* 116 */ "lvalue ::= ID",
1470
+ /* 117 */ "lvalue ::= FILL",
1471
+ /* 118 */ "lvalue ::= COLOR",
1472
+ /* 119 */ "lvalue ::= THICKNESS",
1473
+ /* 120 */ "rvalue ::= expr",
1474
+ /* 121 */ "print ::= PRINT",
1475
+ /* 122 */ "prlist ::= pritem",
1476
+ /* 123 */ "prlist ::= prlist prsep pritem",
1477
+ /* 124 */ "direction ::= UP",
1478
+ /* 125 */ "direction ::= DOWN",
1479
+ /* 126 */ "direction ::= LEFT",
1480
+ /* 127 */ "direction ::= RIGHT",
1481
+ /* 128 */ "attribute_list ::= alist",
1482
+ /* 129 */ "alist ::=",
1483
+ /* 130 */ "alist ::= alist attribute",
1484
+ /* 131 */ "attribute ::= boolproperty",
1485
+ /* 132 */ "attribute ::= WITH withclause",
1486
+ /* 133 */ "go ::= GO",
1487
+ /* 134 */ "go ::=",
1488
+ /* 135 */ "even ::= UNTIL EVEN WITH",
1489
+ /* 136 */ "even ::= EVEN WITH",
1490
+ /* 137 */ "dashproperty ::= DOTTED",
1491
+ /* 138 */ "dashproperty ::= DASHED",
1492
+ /* 139 */ "colorproperty ::= FILL",
1493
+ /* 140 */ "colorproperty ::= COLOR",
1494
+ /* 141 */ "position ::= place",
1495
+ /* 142 */ "between ::= WAY BETWEEN",
1496
+ /* 143 */ "between ::= BETWEEN",
1497
+ /* 144 */ "between ::= OF THE WAY BETWEEN",
1498
+ /* 145 */ "place ::= place2",
1499
+ /* 146 */ "edge ::= CENTER",
1500
+ /* 147 */ "edge ::= EDGEPT",
1501
+ /* 148 */ "edge ::= TOP",
1502
+ /* 149 */ "edge ::= BOTTOM",
1503
+ /* 150 */ "edge ::= START",
1504
+ /* 151 */ "edge ::= END",
1505
+ /* 152 */ "edge ::= RIGHT",
1506
+ /* 153 */ "edge ::= LEFT",
1507
+ /* 154 */ "object ::= objectname",
14791508
};
14801509
#endif /* NDEBUG */
14811510
14821511
14831512
#if YYSTACKDEPTH<=0
@@ -1599,24 +1628,24 @@
15991628
** Note: during a reduce, the only symbols destroyed are those
16001629
** which appear on the RHS of the rule, but which are *not* used
16011630
** inside the C code.
16021631
*/
16031632
/********* Begin destructor definitions ***************************************/
1604
- case 93: /* element_list */
1605
-{
1606
-#line 447 "pikchr.y"
1607
-pik_elist_free(p,(yypminor->yy42));
1608
-#line 1633 "pikchr.c"
1609
-}
1610
- break;
1611
- case 94: /* element */
1612
- case 95: /* unnamed_element */
1613
- case 96: /* basetype */
1614
-{
1615
-#line 449 "pikchr.y"
1616
-pik_elem_free(p,(yypminor->yy118));
1617
-#line 1642 "pikchr.c"
1633
+ case 94: /* element_list */
1634
+{
1635
+#line 448 "pikchr.y"
1636
+pik_elist_free(p,(yypminor->yy52));
1637
+#line 1662 "pikchr.c"
1638
+}
1639
+ break;
1640
+ case 95: /* element */
1641
+ case 96: /* unnamed_element */
1642
+ case 97: /* basetype */
1643
+{
1644
+#line 450 "pikchr.y"
1645
+pik_elem_free(p,(yypminor->yy58));
1646
+#line 1671 "pikchr.c"
16181647
}
16191648
break;
16201649
/********* End destructor definitions *****************************************/
16211650
default: break; /* If no destructor action specified: do nothing */
16221651
}
@@ -1830,14 +1859,14 @@
18301859
#endif
18311860
while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
18321861
/* Here code is inserted which will execute if the parser
18331862
** stack every overflows */
18341863
/******** Begin %stack_overflow code ******************************************/
1835
-#line 478 "pikchr.y"
1864
+#line 479 "pikchr.y"
18361865
18371866
pik_error(p, 0, "parser stack overflow");
1838
-#line 1863 "pikchr.c"
1867
+#line 1892 "pikchr.c"
18391868
/******** End %stack_overflow code ********************************************/
18401869
pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */
18411870
pik_parserCTX_STORE
18421871
}
18431872
@@ -1905,161 +1934,165 @@
19051934
}
19061935
19071936
/* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side
19081937
** of that rule */
19091938
static const YYCODETYPE yyRuleInfoLhs[] = {
1910
- 113, /* (0) document ::= element_list */
1911
- 93, /* (1) element_list ::= element */
1912
- 93, /* (2) element_list ::= element_list EOL element */
1913
- 94, /* (3) element ::= */
1914
- 94, /* (4) element ::= direction */
1915
- 94, /* (5) element ::= lvalue ASSIGN rvalue */
1916
- 94, /* (6) element ::= PLACENAME COLON unnamed_element */
1917
- 94, /* (7) element ::= PLACENAME COLON position */
1918
- 94, /* (8) element ::= unnamed_element */
1919
- 94, /* (9) element ::= print prlist */
1920
- 94, /* (10) element ::= ASSERT LP expr EQ expr RP */
1921
- 94, /* (11) element ::= ASSERT LP place EQ place RP */
1922
- 110, /* (12) rvalue ::= PLACENAME */
1923
- 116, /* (13) pritem ::= FILL */
1924
- 116, /* (14) pritem ::= COLOR */
1925
- 116, /* (15) pritem ::= THICKNESS */
1926
- 116, /* (16) pritem ::= rvalue */
1927
- 116, /* (17) pritem ::= STRING */
1928
- 117, /* (18) prsep ::= COMMA */
1929
- 95, /* (19) unnamed_element ::= basetype attribute_list */
1930
- 96, /* (20) basetype ::= CLASSNAME */
1931
- 96, /* (21) basetype ::= STRING textposition */
1932
- 96, /* (22) basetype ::= LB savelist element_list RB */
1933
- 119, /* (23) savelist ::= */
1934
- 118, /* (24) attribute_list ::= expr alist */
1935
- 118, /* (25) attribute_list ::= expr PERCENT alist */
1936
- 121, /* (26) attribute ::= numproperty expr PERCENT */
1937
- 121, /* (27) attribute ::= numproperty expr */
1938
- 121, /* (28) attribute ::= dashproperty expr */
1939
- 121, /* (29) attribute ::= dashproperty */
1940
- 121, /* (30) attribute ::= colorproperty rvalue */
1941
- 121, /* (31) attribute ::= go direction expr PERCENT */
1942
- 121, /* (32) attribute ::= go direction expr */
1943
- 121, /* (33) attribute ::= go direction */
1944
- 121, /* (34) attribute ::= go direction even position */
1945
- 121, /* (35) attribute ::= CLOSE */
1946
- 121, /* (36) attribute ::= CHOP */
1947
- 121, /* (37) attribute ::= FROM position */
1948
- 121, /* (38) attribute ::= TO position */
1949
- 121, /* (39) attribute ::= THEN */
1950
- 121, /* (40) attribute ::= THEN expr HEADING expr */
1951
- 121, /* (41) attribute ::= THEN HEADING expr */
1952
- 121, /* (42) attribute ::= THEN expr EDGEPT */
1953
- 121, /* (43) attribute ::= THEN EDGEPT */
1954
- 121, /* (44) attribute ::= GO expr HEADING expr */
1955
- 121, /* (45) attribute ::= GO HEADING expr */
1956
- 121, /* (46) attribute ::= GO expr EDGEPT */
1957
- 121, /* (47) attribute ::= GO EDGEPT */
1958
- 121, /* (48) attribute ::= AT position */
1959
- 121, /* (49) attribute ::= SAME */
1960
- 121, /* (50) attribute ::= SAME AS object */
1961
- 121, /* (51) attribute ::= STRING textposition */
1962
- 121, /* (52) attribute ::= FIT */
1963
- 121, /* (53) attribute ::= BEHIND object */
1964
- 124, /* (54) withclause ::= DOT_E edge AT position */
1965
- 124, /* (55) withclause ::= edge AT position */
1966
- 98, /* (56) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
1967
- 123, /* (57) boolproperty ::= CW */
1968
- 123, /* (58) boolproperty ::= CCW */
1969
- 123, /* (59) boolproperty ::= LARROW */
1970
- 123, /* (60) boolproperty ::= RARROW */
1971
- 123, /* (61) boolproperty ::= LRARROW */
1972
- 123, /* (62) boolproperty ::= INVIS */
1973
- 123, /* (63) boolproperty ::= THICK */
1974
- 123, /* (64) boolproperty ::= THIN */
1975
- 109, /* (65) textposition ::= */
1976
- 109, /* (66) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
1977
- 104, /* (67) position ::= expr COMMA expr */
1978
- 104, /* (68) position ::= place PLUS expr COMMA expr */
1979
- 104, /* (69) position ::= place MINUS expr COMMA expr */
1980
- 104, /* (70) position ::= place PLUS LP expr COMMA expr RP */
1981
- 104, /* (71) position ::= place MINUS LP expr COMMA expr RP */
1982
- 104, /* (72) position ::= LP position COMMA position RP */
1983
- 104, /* (73) position ::= LP position RP */
1984
- 104, /* (74) position ::= expr between position AND position */
1985
- 104, /* (75) position ::= expr LT position COMMA position GT */
1986
- 104, /* (76) position ::= expr ABOVE position */
1987
- 104, /* (77) position ::= expr BELOW position */
1988
- 104, /* (78) position ::= expr LEFT OF position */
1989
- 104, /* (79) position ::= expr RIGHT OF position */
1990
- 104, /* (80) position ::= expr EDGEPT OF position */
1991
- 104, /* (81) position ::= expr HEADING expr FROM position */
1992
- 105, /* (82) place ::= edge OF object */
1993
- 126, /* (83) place2 ::= object */
1994
- 126, /* (84) place2 ::= object DOT_E edge */
1995
- 126, /* (85) place2 ::= NTH VERTEX OF object */
1996
- 106, /* (86) object ::= nth */
1997
- 106, /* (87) object ::= nth OF|IN object */
1998
- 107, /* (88) objectname ::= PLACENAME */
1999
- 107, /* (89) objectname ::= objectname DOT_U PLACENAME */
2000
- 108, /* (90) nth ::= NTH CLASSNAME */
2001
- 108, /* (91) nth ::= NTH LAST CLASSNAME */
2002
- 108, /* (92) nth ::= LAST CLASSNAME */
2003
- 108, /* (93) nth ::= LAST */
2004
- 108, /* (94) nth ::= NTH LB RB */
2005
- 108, /* (95) nth ::= NTH LAST LB RB */
2006
- 108, /* (96) nth ::= LAST LB RB */
2007
- 97, /* (97) expr ::= expr PLUS expr */
2008
- 97, /* (98) expr ::= expr MINUS expr */
2009
- 97, /* (99) expr ::= expr STAR expr */
2010
- 97, /* (100) expr ::= expr SLASH expr */
2011
- 97, /* (101) expr ::= MINUS expr */
2012
- 97, /* (102) expr ::= PLUS expr */
2013
- 97, /* (103) expr ::= LP expr RP */
2014
- 97, /* (104) expr ::= NUMBER */
2015
- 97, /* (105) expr ::= ID */
2016
- 97, /* (106) expr ::= FUNC1 LP expr RP */
2017
- 97, /* (107) expr ::= FUNC2 LP expr COMMA expr RP */
2018
- 97, /* (108) expr ::= place2 DOT_XY X */
2019
- 97, /* (109) expr ::= place2 DOT_XY Y */
2020
- 97, /* (110) expr ::= object DOT_L numproperty */
2021
- 97, /* (111) expr ::= object DOT_L dashproperty */
2022
- 97, /* (112) expr ::= object DOT_L colorproperty */
2023
- 111, /* (113) lvalue ::= ID */
2024
- 111, /* (114) lvalue ::= FILL */
2025
- 111, /* (115) lvalue ::= COLOR */
2026
- 111, /* (116) lvalue ::= THICKNESS */
2027
- 110, /* (117) rvalue ::= expr */
2028
- 114, /* (118) print ::= PRINT */
2029
- 115, /* (119) prlist ::= pritem */
2030
- 115, /* (120) prlist ::= prlist prsep pritem */
2031
- 100, /* (121) direction ::= UP */
2032
- 100, /* (122) direction ::= DOWN */
2033
- 100, /* (123) direction ::= LEFT */
2034
- 100, /* (124) direction ::= RIGHT */
2035
- 118, /* (125) attribute_list ::= alist */
2036
- 120, /* (126) alist ::= */
2037
- 120, /* (127) alist ::= alist attribute */
2038
- 121, /* (128) attribute ::= boolproperty */
2039
- 121, /* (129) attribute ::= WITH withclause */
2040
- 122, /* (130) go ::= GO */
2041
- 122, /* (131) go ::= */
2042
- 112, /* (132) even ::= UNTIL EVEN WITH */
2043
- 112, /* (133) even ::= EVEN WITH */
2044
- 101, /* (134) dashproperty ::= DOTTED */
2045
- 101, /* (135) dashproperty ::= DASHED */
2046
- 102, /* (136) colorproperty ::= FILL */
2047
- 102, /* (137) colorproperty ::= COLOR */
2048
- 104, /* (138) position ::= place */
2049
- 125, /* (139) between ::= WAY BETWEEN */
2050
- 125, /* (140) between ::= BETWEEN */
2051
- 125, /* (141) between ::= OF THE WAY BETWEEN */
2052
- 105, /* (142) place ::= place2 */
2053
- 99, /* (143) edge ::= EDGEPT */
2054
- 99, /* (144) edge ::= TOP */
2055
- 99, /* (145) edge ::= BOTTOM */
2056
- 99, /* (146) edge ::= START */
2057
- 99, /* (147) edge ::= END */
2058
- 99, /* (148) edge ::= RIGHT */
2059
- 99, /* (149) edge ::= LEFT */
2060
- 106, /* (150) object ::= objectname */
1939
+ 114, /* (0) document ::= element_list */
1940
+ 94, /* (1) element_list ::= element */
1941
+ 94, /* (2) element_list ::= element_list EOL element */
1942
+ 95, /* (3) element ::= */
1943
+ 95, /* (4) element ::= direction */
1944
+ 95, /* (5) element ::= lvalue ASSIGN rvalue */
1945
+ 95, /* (6) element ::= PLACENAME COLON unnamed_element */
1946
+ 95, /* (7) element ::= PLACENAME COLON position */
1947
+ 95, /* (8) element ::= unnamed_element */
1948
+ 95, /* (9) element ::= print prlist */
1949
+ 95, /* (10) element ::= ASSERT LP expr EQ expr RP */
1950
+ 95, /* (11) element ::= ASSERT LP place EQ place RP */
1951
+ 111, /* (12) rvalue ::= PLACENAME */
1952
+ 117, /* (13) pritem ::= FILL */
1953
+ 117, /* (14) pritem ::= COLOR */
1954
+ 117, /* (15) pritem ::= THICKNESS */
1955
+ 117, /* (16) pritem ::= rvalue */
1956
+ 117, /* (17) pritem ::= STRING */
1957
+ 118, /* (18) prsep ::= COMMA */
1958
+ 96, /* (19) unnamed_element ::= basetype attribute_list */
1959
+ 97, /* (20) basetype ::= CLASSNAME */
1960
+ 97, /* (21) basetype ::= STRING textposition */
1961
+ 97, /* (22) basetype ::= LB savelist element_list RB */
1962
+ 120, /* (23) savelist ::= */
1963
+ 119, /* (24) attribute_list ::= expr alist */
1964
+ 119, /* (25) attribute_list ::= expr PERCENT alist */
1965
+ 122, /* (26) attribute ::= numproperty expr PERCENT */
1966
+ 122, /* (27) attribute ::= numproperty expr */
1967
+ 122, /* (28) attribute ::= dashproperty expr */
1968
+ 122, /* (29) attribute ::= dashproperty */
1969
+ 122, /* (30) attribute ::= colorproperty rvalue */
1970
+ 122, /* (31) attribute ::= go direction expr PERCENT */
1971
+ 122, /* (32) attribute ::= go direction expr */
1972
+ 122, /* (33) attribute ::= go direction */
1973
+ 122, /* (34) attribute ::= go direction even position */
1974
+ 122, /* (35) attribute ::= CLOSE */
1975
+ 122, /* (36) attribute ::= CHOP */
1976
+ 122, /* (37) attribute ::= FROM position */
1977
+ 122, /* (38) attribute ::= TO position */
1978
+ 122, /* (39) attribute ::= THEN */
1979
+ 122, /* (40) attribute ::= THEN expr HEADING expr */
1980
+ 122, /* (41) attribute ::= THEN HEADING expr */
1981
+ 122, /* (42) attribute ::= THEN expr EDGEPT */
1982
+ 122, /* (43) attribute ::= THEN EDGEPT */
1983
+ 122, /* (44) attribute ::= GO expr HEADING expr */
1984
+ 122, /* (45) attribute ::= GO HEADING expr */
1985
+ 122, /* (46) attribute ::= GO expr EDGEPT */
1986
+ 122, /* (47) attribute ::= GO EDGEPT */
1987
+ 122, /* (48) attribute ::= AT position */
1988
+ 122, /* (49) attribute ::= SAME */
1989
+ 122, /* (50) attribute ::= SAME AS object */
1990
+ 122, /* (51) attribute ::= STRING textposition */
1991
+ 122, /* (52) attribute ::= FIT */
1992
+ 122, /* (53) attribute ::= BEHIND object */
1993
+ 125, /* (54) withclause ::= DOT_E edge AT position */
1994
+ 125, /* (55) withclause ::= edge AT position */
1995
+ 99, /* (56) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
1996
+ 124, /* (57) boolproperty ::= CW */
1997
+ 124, /* (58) boolproperty ::= CCW */
1998
+ 124, /* (59) boolproperty ::= LARROW */
1999
+ 124, /* (60) boolproperty ::= RARROW */
2000
+ 124, /* (61) boolproperty ::= LRARROW */
2001
+ 124, /* (62) boolproperty ::= INVIS */
2002
+ 124, /* (63) boolproperty ::= THICK */
2003
+ 124, /* (64) boolproperty ::= THIN */
2004
+ 110, /* (65) textposition ::= */
2005
+ 110, /* (66) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2006
+ 105, /* (67) position ::= expr COMMA expr */
2007
+ 105, /* (68) position ::= place PLUS expr COMMA expr */
2008
+ 105, /* (69) position ::= place MINUS expr COMMA expr */
2009
+ 105, /* (70) position ::= place PLUS LP expr COMMA expr RP */
2010
+ 105, /* (71) position ::= place MINUS LP expr COMMA expr RP */
2011
+ 105, /* (72) position ::= LP position COMMA position RP */
2012
+ 105, /* (73) position ::= LP position RP */
2013
+ 105, /* (74) position ::= expr between position AND position */
2014
+ 105, /* (75) position ::= expr LT position COMMA position GT */
2015
+ 105, /* (76) position ::= expr ABOVE position */
2016
+ 105, /* (77) position ::= expr BELOW position */
2017
+ 105, /* (78) position ::= expr LEFT OF position */
2018
+ 105, /* (79) position ::= expr RIGHT OF position */
2019
+ 105, /* (80) position ::= expr ON HEADING EDGEPT OF position */
2020
+ 105, /* (81) position ::= expr HEADING EDGEPT OF position */
2021
+ 105, /* (82) position ::= expr EDGEPT OF position */
2022
+ 105, /* (83) position ::= expr ON HEADING expr FROM position */
2023
+ 105, /* (84) position ::= expr HEADING expr FROM position */
2024
+ 106, /* (85) place ::= edge OF object */
2025
+ 127, /* (86) place2 ::= object */
2026
+ 127, /* (87) place2 ::= object DOT_E edge */
2027
+ 127, /* (88) place2 ::= NTH VERTEX OF object */
2028
+ 107, /* (89) object ::= nth */
2029
+ 107, /* (90) object ::= nth OF|IN object */
2030
+ 108, /* (91) objectname ::= PLACENAME */
2031
+ 108, /* (92) objectname ::= objectname DOT_U PLACENAME */
2032
+ 109, /* (93) nth ::= NTH CLASSNAME */
2033
+ 109, /* (94) nth ::= NTH LAST CLASSNAME */
2034
+ 109, /* (95) nth ::= LAST CLASSNAME */
2035
+ 109, /* (96) nth ::= LAST */
2036
+ 109, /* (97) nth ::= NTH LB RB */
2037
+ 109, /* (98) nth ::= NTH LAST LB RB */
2038
+ 109, /* (99) nth ::= LAST LB RB */
2039
+ 98, /* (100) expr ::= expr PLUS expr */
2040
+ 98, /* (101) expr ::= expr MINUS expr */
2041
+ 98, /* (102) expr ::= expr STAR expr */
2042
+ 98, /* (103) expr ::= expr SLASH expr */
2043
+ 98, /* (104) expr ::= MINUS expr */
2044
+ 98, /* (105) expr ::= PLUS expr */
2045
+ 98, /* (106) expr ::= LP expr RP */
2046
+ 98, /* (107) expr ::= NUMBER */
2047
+ 98, /* (108) expr ::= ID */
2048
+ 98, /* (109) expr ::= FUNC1 LP expr RP */
2049
+ 98, /* (110) expr ::= FUNC2 LP expr COMMA expr RP */
2050
+ 98, /* (111) expr ::= place2 DOT_XY X */
2051
+ 98, /* (112) expr ::= place2 DOT_XY Y */
2052
+ 98, /* (113) expr ::= object DOT_L numproperty */
2053
+ 98, /* (114) expr ::= object DOT_L dashproperty */
2054
+ 98, /* (115) expr ::= object DOT_L colorproperty */
2055
+ 112, /* (116) lvalue ::= ID */
2056
+ 112, /* (117) lvalue ::= FILL */
2057
+ 112, /* (118) lvalue ::= COLOR */
2058
+ 112, /* (119) lvalue ::= THICKNESS */
2059
+ 111, /* (120) rvalue ::= expr */
2060
+ 115, /* (121) print ::= PRINT */
2061
+ 116, /* (122) prlist ::= pritem */
2062
+ 116, /* (123) prlist ::= prlist prsep pritem */
2063
+ 101, /* (124) direction ::= UP */
2064
+ 101, /* (125) direction ::= DOWN */
2065
+ 101, /* (126) direction ::= LEFT */
2066
+ 101, /* (127) direction ::= RIGHT */
2067
+ 119, /* (128) attribute_list ::= alist */
2068
+ 121, /* (129) alist ::= */
2069
+ 121, /* (130) alist ::= alist attribute */
2070
+ 122, /* (131) attribute ::= boolproperty */
2071
+ 122, /* (132) attribute ::= WITH withclause */
2072
+ 123, /* (133) go ::= GO */
2073
+ 123, /* (134) go ::= */
2074
+ 113, /* (135) even ::= UNTIL EVEN WITH */
2075
+ 113, /* (136) even ::= EVEN WITH */
2076
+ 102, /* (137) dashproperty ::= DOTTED */
2077
+ 102, /* (138) dashproperty ::= DASHED */
2078
+ 103, /* (139) colorproperty ::= FILL */
2079
+ 103, /* (140) colorproperty ::= COLOR */
2080
+ 105, /* (141) position ::= place */
2081
+ 126, /* (142) between ::= WAY BETWEEN */
2082
+ 126, /* (143) between ::= BETWEEN */
2083
+ 126, /* (144) between ::= OF THE WAY BETWEEN */
2084
+ 106, /* (145) place ::= place2 */
2085
+ 100, /* (146) edge ::= CENTER */
2086
+ 100, /* (147) edge ::= EDGEPT */
2087
+ 100, /* (148) edge ::= TOP */
2088
+ 100, /* (149) edge ::= BOTTOM */
2089
+ 100, /* (150) edge ::= START */
2090
+ 100, /* (151) edge ::= END */
2091
+ 100, /* (152) edge ::= RIGHT */
2092
+ 100, /* (153) edge ::= LEFT */
2093
+ 107, /* (154) object ::= objectname */
20612094
};
20622095
20632096
/* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
20642097
** of symbols on the right-hand side of that rule. */
20652098
static const signed char yyRuleInfoNRhs[] = {
@@ -2141,81 +2174,85 @@
21412174
-6, /* (75) position ::= expr LT position COMMA position GT */
21422175
-3, /* (76) position ::= expr ABOVE position */
21432176
-3, /* (77) position ::= expr BELOW position */
21442177
-4, /* (78) position ::= expr LEFT OF position */
21452178
-4, /* (79) position ::= expr RIGHT OF position */
2146
- -4, /* (80) position ::= expr EDGEPT OF position */
2147
- -5, /* (81) position ::= expr HEADING expr FROM position */
2148
- -3, /* (82) place ::= edge OF object */
2149
- -1, /* (83) place2 ::= object */
2150
- -3, /* (84) place2 ::= object DOT_E edge */
2151
- -4, /* (85) place2 ::= NTH VERTEX OF object */
2152
- -1, /* (86) object ::= nth */
2153
- -3, /* (87) object ::= nth OF|IN object */
2154
- -1, /* (88) objectname ::= PLACENAME */
2155
- -3, /* (89) objectname ::= objectname DOT_U PLACENAME */
2156
- -2, /* (90) nth ::= NTH CLASSNAME */
2157
- -3, /* (91) nth ::= NTH LAST CLASSNAME */
2158
- -2, /* (92) nth ::= LAST CLASSNAME */
2159
- -1, /* (93) nth ::= LAST */
2160
- -3, /* (94) nth ::= NTH LB RB */
2161
- -4, /* (95) nth ::= NTH LAST LB RB */
2162
- -3, /* (96) nth ::= LAST LB RB */
2163
- -3, /* (97) expr ::= expr PLUS expr */
2164
- -3, /* (98) expr ::= expr MINUS expr */
2165
- -3, /* (99) expr ::= expr STAR expr */
2166
- -3, /* (100) expr ::= expr SLASH expr */
2167
- -2, /* (101) expr ::= MINUS expr */
2168
- -2, /* (102) expr ::= PLUS expr */
2169
- -3, /* (103) expr ::= LP expr RP */
2170
- -1, /* (104) expr ::= NUMBER */
2171
- -1, /* (105) expr ::= ID */
2172
- -4, /* (106) expr ::= FUNC1 LP expr RP */
2173
- -6, /* (107) expr ::= FUNC2 LP expr COMMA expr RP */
2174
- -3, /* (108) expr ::= place2 DOT_XY X */
2175
- -3, /* (109) expr ::= place2 DOT_XY Y */
2176
- -3, /* (110) expr ::= object DOT_L numproperty */
2177
- -3, /* (111) expr ::= object DOT_L dashproperty */
2178
- -3, /* (112) expr ::= object DOT_L colorproperty */
2179
- -1, /* (113) lvalue ::= ID */
2180
- -1, /* (114) lvalue ::= FILL */
2181
- -1, /* (115) lvalue ::= COLOR */
2182
- -1, /* (116) lvalue ::= THICKNESS */
2183
- -1, /* (117) rvalue ::= expr */
2184
- -1, /* (118) print ::= PRINT */
2185
- -1, /* (119) prlist ::= pritem */
2186
- -3, /* (120) prlist ::= prlist prsep pritem */
2187
- -1, /* (121) direction ::= UP */
2188
- -1, /* (122) direction ::= DOWN */
2189
- -1, /* (123) direction ::= LEFT */
2190
- -1, /* (124) direction ::= RIGHT */
2191
- -1, /* (125) attribute_list ::= alist */
2192
- 0, /* (126) alist ::= */
2193
- -2, /* (127) alist ::= alist attribute */
2194
- -1, /* (128) attribute ::= boolproperty */
2195
- -2, /* (129) attribute ::= WITH withclause */
2196
- -1, /* (130) go ::= GO */
2197
- 0, /* (131) go ::= */
2198
- -3, /* (132) even ::= UNTIL EVEN WITH */
2199
- -2, /* (133) even ::= EVEN WITH */
2200
- -1, /* (134) dashproperty ::= DOTTED */
2201
- -1, /* (135) dashproperty ::= DASHED */
2202
- -1, /* (136) colorproperty ::= FILL */
2203
- -1, /* (137) colorproperty ::= COLOR */
2204
- -1, /* (138) position ::= place */
2205
- -2, /* (139) between ::= WAY BETWEEN */
2206
- -1, /* (140) between ::= BETWEEN */
2207
- -4, /* (141) between ::= OF THE WAY BETWEEN */
2208
- -1, /* (142) place ::= place2 */
2209
- -1, /* (143) edge ::= EDGEPT */
2210
- -1, /* (144) edge ::= TOP */
2211
- -1, /* (145) edge ::= BOTTOM */
2212
- -1, /* (146) edge ::= START */
2213
- -1, /* (147) edge ::= END */
2214
- -1, /* (148) edge ::= RIGHT */
2215
- -1, /* (149) edge ::= LEFT */
2216
- -1, /* (150) object ::= objectname */
2179
+ -6, /* (80) position ::= expr ON HEADING EDGEPT OF position */
2180
+ -5, /* (81) position ::= expr HEADING EDGEPT OF position */
2181
+ -4, /* (82) position ::= expr EDGEPT OF position */
2182
+ -6, /* (83) position ::= expr ON HEADING expr FROM position */
2183
+ -5, /* (84) position ::= expr HEADING expr FROM position */
2184
+ -3, /* (85) place ::= edge OF object */
2185
+ -1, /* (86) place2 ::= object */
2186
+ -3, /* (87) place2 ::= object DOT_E edge */
2187
+ -4, /* (88) place2 ::= NTH VERTEX OF object */
2188
+ -1, /* (89) object ::= nth */
2189
+ -3, /* (90) object ::= nth OF|IN object */
2190
+ -1, /* (91) objectname ::= PLACENAME */
2191
+ -3, /* (92) objectname ::= objectname DOT_U PLACENAME */
2192
+ -2, /* (93) nth ::= NTH CLASSNAME */
2193
+ -3, /* (94) nth ::= NTH LAST CLASSNAME */
2194
+ -2, /* (95) nth ::= LAST CLASSNAME */
2195
+ -1, /* (96) nth ::= LAST */
2196
+ -3, /* (97) nth ::= NTH LB RB */
2197
+ -4, /* (98) nth ::= NTH LAST LB RB */
2198
+ -3, /* (99) nth ::= LAST LB RB */
2199
+ -3, /* (100) expr ::= expr PLUS expr */
2200
+ -3, /* (101) expr ::= expr MINUS expr */
2201
+ -3, /* (102) expr ::= expr STAR expr */
2202
+ -3, /* (103) expr ::= expr SLASH expr */
2203
+ -2, /* (104) expr ::= MINUS expr */
2204
+ -2, /* (105) expr ::= PLUS expr */
2205
+ -3, /* (106) expr ::= LP expr RP */
2206
+ -1, /* (107) expr ::= NUMBER */
2207
+ -1, /* (108) expr ::= ID */
2208
+ -4, /* (109) expr ::= FUNC1 LP expr RP */
2209
+ -6, /* (110) expr ::= FUNC2 LP expr COMMA expr RP */
2210
+ -3, /* (111) expr ::= place2 DOT_XY X */
2211
+ -3, /* (112) expr ::= place2 DOT_XY Y */
2212
+ -3, /* (113) expr ::= object DOT_L numproperty */
2213
+ -3, /* (114) expr ::= object DOT_L dashproperty */
2214
+ -3, /* (115) expr ::= object DOT_L colorproperty */
2215
+ -1, /* (116) lvalue ::= ID */
2216
+ -1, /* (117) lvalue ::= FILL */
2217
+ -1, /* (118) lvalue ::= COLOR */
2218
+ -1, /* (119) lvalue ::= THICKNESS */
2219
+ -1, /* (120) rvalue ::= expr */
2220
+ -1, /* (121) print ::= PRINT */
2221
+ -1, /* (122) prlist ::= pritem */
2222
+ -3, /* (123) prlist ::= prlist prsep pritem */
2223
+ -1, /* (124) direction ::= UP */
2224
+ -1, /* (125) direction ::= DOWN */
2225
+ -1, /* (126) direction ::= LEFT */
2226
+ -1, /* (127) direction ::= RIGHT */
2227
+ -1, /* (128) attribute_list ::= alist */
2228
+ 0, /* (129) alist ::= */
2229
+ -2, /* (130) alist ::= alist attribute */
2230
+ -1, /* (131) attribute ::= boolproperty */
2231
+ -2, /* (132) attribute ::= WITH withclause */
2232
+ -1, /* (133) go ::= GO */
2233
+ 0, /* (134) go ::= */
2234
+ -3, /* (135) even ::= UNTIL EVEN WITH */
2235
+ -2, /* (136) even ::= EVEN WITH */
2236
+ -1, /* (137) dashproperty ::= DOTTED */
2237
+ -1, /* (138) dashproperty ::= DASHED */
2238
+ -1, /* (139) colorproperty ::= FILL */
2239
+ -1, /* (140) colorproperty ::= COLOR */
2240
+ -1, /* (141) position ::= place */
2241
+ -2, /* (142) between ::= WAY BETWEEN */
2242
+ -1, /* (143) between ::= BETWEEN */
2243
+ -4, /* (144) between ::= OF THE WAY BETWEEN */
2244
+ -1, /* (145) place ::= place2 */
2245
+ -1, /* (146) edge ::= CENTER */
2246
+ -1, /* (147) edge ::= EDGEPT */
2247
+ -1, /* (148) edge ::= TOP */
2248
+ -1, /* (149) edge ::= BOTTOM */
2249
+ -1, /* (150) edge ::= START */
2250
+ -1, /* (151) edge ::= END */
2251
+ -1, /* (152) edge ::= RIGHT */
2252
+ -1, /* (153) edge ::= LEFT */
2253
+ -1, /* (154) object ::= objectname */
22172254
};
22182255
22192256
static void yy_accept(yyParser*); /* Forward Declaration */
22202257
22212258
/*
@@ -2302,627 +2339,646 @@
23022339
** break;
23032340
*/
23042341
/********** Begin reduce actions **********************************************/
23052342
YYMINORTYPE yylhsminor;
23062343
case 0: /* document ::= element_list */
2307
-#line 482 "pikchr.y"
2308
-{pik_render(p,yymsp[0].minor.yy42);}
2309
-#line 2334 "pikchr.c"
2344
+#line 483 "pikchr.y"
2345
+{pik_render(p,yymsp[0].minor.yy52);}
2346
+#line 2371 "pikchr.c"
23102347
break;
23112348
case 1: /* element_list ::= element */
2312
-#line 485 "pikchr.y"
2313
-{ yylhsminor.yy42 = pik_elist_append(p,0,yymsp[0].minor.yy118); }
2314
-#line 2339 "pikchr.c"
2315
- yymsp[0].minor.yy42 = yylhsminor.yy42;
2349
+#line 486 "pikchr.y"
2350
+{ yylhsminor.yy52 = pik_elist_append(p,0,yymsp[0].minor.yy58); }
2351
+#line 2376 "pikchr.c"
2352
+ yymsp[0].minor.yy52 = yylhsminor.yy52;
23162353
break;
23172354
case 2: /* element_list ::= element_list EOL element */
2318
-#line 487 "pikchr.y"
2319
-{ yylhsminor.yy42 = pik_elist_append(p,yymsp[-2].minor.yy42,yymsp[0].minor.yy118); }
2320
-#line 2345 "pikchr.c"
2321
- yymsp[-2].minor.yy42 = yylhsminor.yy42;
2355
+#line 488 "pikchr.y"
2356
+{ yylhsminor.yy52 = pik_elist_append(p,yymsp[-2].minor.yy52,yymsp[0].minor.yy58); }
2357
+#line 2382 "pikchr.c"
2358
+ yymsp[-2].minor.yy52 = yylhsminor.yy52;
23222359
break;
23232360
case 3: /* element ::= */
2324
-#line 490 "pikchr.y"
2325
-{ yymsp[1].minor.yy118 = 0; }
2326
-#line 2351 "pikchr.c"
2361
+#line 491 "pikchr.y"
2362
+{ yymsp[1].minor.yy58 = 0; }
2363
+#line 2388 "pikchr.c"
23272364
break;
23282365
case 4: /* element ::= direction */
2329
-#line 491 "pikchr.y"
2330
-{ pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy118=0; }
2331
-#line 2356 "pikchr.c"
2332
- yymsp[0].minor.yy118 = yylhsminor.yy118;
2366
+#line 492 "pikchr.y"
2367
+{ pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy58=0; }
2368
+#line 2393 "pikchr.c"
2369
+ yymsp[0].minor.yy58 = yylhsminor.yy58;
23332370
break;
23342371
case 5: /* element ::= lvalue ASSIGN rvalue */
2335
-#line 492 "pikchr.y"
2336
-{pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy215,&yymsp[-1].minor.yy0); yylhsminor.yy118=0;}
2337
-#line 2362 "pikchr.c"
2338
- yymsp[-2].minor.yy118 = yylhsminor.yy118;
2372
+#line 493 "pikchr.y"
2373
+{pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy149,&yymsp[-1].minor.yy0); yylhsminor.yy58=0;}
2374
+#line 2399 "pikchr.c"
2375
+ yymsp[-2].minor.yy58 = yylhsminor.yy58;
23392376
break;
23402377
case 6: /* element ::= PLACENAME COLON unnamed_element */
2341
-#line 494 "pikchr.y"
2342
-{ yylhsminor.yy118 = yymsp[0].minor.yy118; pik_elem_setname(p,yymsp[0].minor.yy118,&yymsp[-2].minor.yy0); }
2343
-#line 2368 "pikchr.c"
2344
- yymsp[-2].minor.yy118 = yylhsminor.yy118;
2378
+#line 495 "pikchr.y"
2379
+{ yylhsminor.yy58 = yymsp[0].minor.yy58; pik_elem_setname(p,yymsp[0].minor.yy58,&yymsp[-2].minor.yy0); }
2380
+#line 2405 "pikchr.c"
2381
+ yymsp[-2].minor.yy58 = yylhsminor.yy58;
23452382
break;
23462383
case 7: /* element ::= PLACENAME COLON position */
2347
-#line 496 "pikchr.y"
2348
-{ yylhsminor.yy118 = pik_elem_new(p,0,0,0);
2349
- if(yylhsminor.yy118){ yylhsminor.yy118->ptAt = yymsp[0].minor.yy85; pik_elem_setname(p,yylhsminor.yy118,&yymsp[-2].minor.yy0); }}
2350
-#line 2375 "pikchr.c"
2351
- yymsp[-2].minor.yy118 = yylhsminor.yy118;
2384
+#line 497 "pikchr.y"
2385
+{ yylhsminor.yy58 = pik_elem_new(p,0,0,0);
2386
+ if(yylhsminor.yy58){ yylhsminor.yy58->ptAt = yymsp[0].minor.yy95; pik_elem_setname(p,yylhsminor.yy58,&yymsp[-2].minor.yy0); }}
2387
+#line 2412 "pikchr.c"
2388
+ yymsp[-2].minor.yy58 = yylhsminor.yy58;
23522389
break;
23532390
case 8: /* element ::= unnamed_element */
2354
-#line 498 "pikchr.y"
2355
-{yylhsminor.yy118 = yymsp[0].minor.yy118;}
2356
-#line 2381 "pikchr.c"
2357
- yymsp[0].minor.yy118 = yylhsminor.yy118;
2391
+#line 499 "pikchr.y"
2392
+{yylhsminor.yy58 = yymsp[0].minor.yy58;}
2393
+#line 2418 "pikchr.c"
2394
+ yymsp[0].minor.yy58 = yylhsminor.yy58;
23582395
break;
23592396
case 9: /* element ::= print prlist */
2360
-#line 499 "pikchr.y"
2361
-{pik_append(p,"<br>\n",5); yymsp[-1].minor.yy118=0;}
2362
-#line 2387 "pikchr.c"
2397
+#line 500 "pikchr.y"
2398
+{pik_append(p,"<br>\n",5); yymsp[-1].minor.yy58=0;}
2399
+#line 2424 "pikchr.c"
23632400
break;
23642401
case 10: /* element ::= ASSERT LP expr EQ expr RP */
2365
-#line 504 "pikchr.y"
2366
-{yymsp[-5].minor.yy118=pik_assert(p,yymsp[-3].minor.yy215,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy215);}
2367
-#line 2392 "pikchr.c"
2402
+#line 505 "pikchr.y"
2403
+{yymsp[-5].minor.yy58=pik_assert(p,yymsp[-3].minor.yy149,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy149);}
2404
+#line 2429 "pikchr.c"
23682405
break;
23692406
case 11: /* element ::= ASSERT LP place EQ place RP */
2370
-#line 506 "pikchr.y"
2371
-{yymsp[-5].minor.yy118=pik_place_assert(p,&yymsp[-3].minor.yy85,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy85);}
2372
-#line 2397 "pikchr.c"
2407
+#line 507 "pikchr.y"
2408
+{yymsp[-5].minor.yy58=pik_place_assert(p,&yymsp[-3].minor.yy95,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy95);}
2409
+#line 2434 "pikchr.c"
23732410
break;
23742411
case 12: /* rvalue ::= PLACENAME */
2375
-#line 517 "pikchr.y"
2376
-{yylhsminor.yy215 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2377
-#line 2402 "pikchr.c"
2378
- yymsp[0].minor.yy215 = yylhsminor.yy215;
2412
+#line 518 "pikchr.y"
2413
+{yylhsminor.yy149 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2414
+#line 2439 "pikchr.c"
2415
+ yymsp[0].minor.yy149 = yylhsminor.yy149;
23792416
break;
23802417
case 13: /* pritem ::= FILL */
23812418
case 14: /* pritem ::= COLOR */ yytestcase(yyruleno==14);
23822419
case 15: /* pritem ::= THICKNESS */ yytestcase(yyruleno==15);
2383
-#line 522 "pikchr.y"
2420
+#line 523 "pikchr.y"
23842421
{pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));}
2385
-#line 2410 "pikchr.c"
2422
+#line 2447 "pikchr.c"
23862423
break;
23872424
case 16: /* pritem ::= rvalue */
2388
-#line 525 "pikchr.y"
2389
-{pik_append_num(p,"",yymsp[0].minor.yy215);}
2390
-#line 2415 "pikchr.c"
2425
+#line 526 "pikchr.y"
2426
+{pik_append_num(p,"",yymsp[0].minor.yy149);}
2427
+#line 2452 "pikchr.c"
23912428
break;
23922429
case 17: /* pritem ::= STRING */
2393
-#line 526 "pikchr.y"
2430
+#line 527 "pikchr.y"
23942431
{pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2395
-#line 2420 "pikchr.c"
2432
+#line 2457 "pikchr.c"
23962433
break;
23972434
case 18: /* prsep ::= COMMA */
2398
-#line 527 "pikchr.y"
2435
+#line 528 "pikchr.y"
23992436
{pik_append(p, " ", 1);}
2400
-#line 2425 "pikchr.c"
2437
+#line 2462 "pikchr.c"
24012438
break;
24022439
case 19: /* unnamed_element ::= basetype attribute_list */
2403
-#line 530 "pikchr.y"
2404
-{yylhsminor.yy118 = yymsp[-1].minor.yy118; pik_after_adding_attributes(p,yylhsminor.yy118);}
2405
-#line 2430 "pikchr.c"
2406
- yymsp[-1].minor.yy118 = yylhsminor.yy118;
2440
+#line 531 "pikchr.y"
2441
+{yylhsminor.yy58 = yymsp[-1].minor.yy58; pik_after_adding_attributes(p,yylhsminor.yy58);}
2442
+#line 2467 "pikchr.c"
2443
+ yymsp[-1].minor.yy58 = yylhsminor.yy58;
24072444
break;
24082445
case 20: /* basetype ::= CLASSNAME */
2409
-#line 532 "pikchr.y"
2410
-{yylhsminor.yy118 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2411
-#line 2436 "pikchr.c"
2412
- yymsp[0].minor.yy118 = yylhsminor.yy118;
2446
+#line 533 "pikchr.y"
2447
+{yylhsminor.yy58 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2448
+#line 2473 "pikchr.c"
2449
+ yymsp[0].minor.yy58 = yylhsminor.yy58;
24132450
break;
24142451
case 21: /* basetype ::= STRING textposition */
2415
-#line 534 "pikchr.y"
2416
-{yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy156; yylhsminor.yy118 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2417
-#line 2442 "pikchr.c"
2418
- yymsp[-1].minor.yy118 = yylhsminor.yy118;
2452
+#line 535 "pikchr.y"
2453
+{yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy92; yylhsminor.yy58 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2454
+#line 2479 "pikchr.c"
2455
+ yymsp[-1].minor.yy58 = yylhsminor.yy58;
24192456
break;
24202457
case 22: /* basetype ::= LB savelist element_list RB */
2421
-#line 536 "pikchr.y"
2422
-{ p->list = yymsp[-2].minor.yy42; yymsp[-3].minor.yy118 = pik_elem_new(p,0,0,yymsp[-1].minor.yy42); if(yymsp[-3].minor.yy118) yymsp[-3].minor.yy118->errTok = yymsp[0].minor.yy0; }
2423
-#line 2448 "pikchr.c"
2458
+#line 537 "pikchr.y"
2459
+{ p->list = yymsp[-2].minor.yy52; yymsp[-3].minor.yy58 = pik_elem_new(p,0,0,yymsp[-1].minor.yy52); if(yymsp[-3].minor.yy58) yymsp[-3].minor.yy58->errTok = yymsp[0].minor.yy0; }
2460
+#line 2485 "pikchr.c"
24242461
break;
24252462
case 23: /* savelist ::= */
2426
-#line 541 "pikchr.y"
2427
-{yymsp[1].minor.yy42 = p->list; p->list = 0;}
2428
-#line 2453 "pikchr.c"
2463
+#line 542 "pikchr.y"
2464
+{yymsp[1].minor.yy52 = p->list; p->list = 0;}
2465
+#line 2490 "pikchr.c"
24292466
break;
24302467
case 24: /* attribute_list ::= expr alist */
2431
-#line 548 "pikchr.y"
2432
-{ pik_add_direction(p,0,&yymsp[-1].minor.yy215,0);}
2433
-#line 2458 "pikchr.c"
2468
+#line 549 "pikchr.y"
2469
+{ pik_add_direction(p,0,&yymsp[-1].minor.yy149,0);}
2470
+#line 2495 "pikchr.c"
24342471
break;
24352472
case 25: /* attribute_list ::= expr PERCENT alist */
2436
-#line 549 "pikchr.y"
2437
-{ pik_add_direction(p,0,&yymsp[-2].minor.yy215,1);}
2438
-#line 2463 "pikchr.c"
2473
+#line 550 "pikchr.y"
2474
+{ pik_add_direction(p,0,&yymsp[-2].minor.yy149,1);}
2475
+#line 2500 "pikchr.c"
24392476
break;
24402477
case 26: /* attribute ::= numproperty expr PERCENT */
2441
-#line 554 "pikchr.y"
2442
-{ pik_set_numprop(p,&yymsp[-2].minor.yy0,0.0,yymsp[-1].minor.yy215/100.0); }
2443
-#line 2468 "pikchr.c"
2478
+#line 555 "pikchr.y"
2479
+{ pik_set_numprop(p,&yymsp[-2].minor.yy0,0.0,yymsp[-1].minor.yy149/100.0); }
2480
+#line 2505 "pikchr.c"
24442481
break;
24452482
case 27: /* attribute ::= numproperty expr */
24462483
case 30: /* attribute ::= colorproperty rvalue */ yytestcase(yyruleno==30);
2447
-#line 555 "pikchr.y"
2448
-{ pik_set_numprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy215,0.0); }
2449
-#line 2474 "pikchr.c"
2484
+#line 556 "pikchr.y"
2485
+{ pik_set_numprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy149,0.0); }
2486
+#line 2511 "pikchr.c"
24502487
break;
24512488
case 28: /* attribute ::= dashproperty expr */
2452
-#line 556 "pikchr.y"
2453
-{ pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy215); }
2454
-#line 2479 "pikchr.c"
2489
+#line 557 "pikchr.y"
2490
+{ pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy149); }
2491
+#line 2516 "pikchr.c"
24552492
break;
24562493
case 29: /* attribute ::= dashproperty */
2457
-#line 557 "pikchr.y"
2494
+#line 558 "pikchr.y"
24582495
{ pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2459
-#line 2484 "pikchr.c"
2496
+#line 2521 "pikchr.c"
24602497
break;
24612498
case 31: /* attribute ::= go direction expr PERCENT */
2462
-#line 560 "pikchr.y"
2463
-{ pik_add_direction(p,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy215,1);}
2464
-#line 2489 "pikchr.c"
2499
+#line 561 "pikchr.y"
2500
+{ pik_add_direction(p,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy149,1);}
2501
+#line 2526 "pikchr.c"
24652502
break;
24662503
case 32: /* attribute ::= go direction expr */
2467
-#line 561 "pikchr.y"
2468
-{ pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy215,0);}
2469
-#line 2494 "pikchr.c"
2504
+#line 562 "pikchr.y"
2505
+{ pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy149,0);}
2506
+#line 2531 "pikchr.c"
24702507
break;
24712508
case 33: /* attribute ::= go direction */
2472
-#line 562 "pikchr.y"
2509
+#line 563 "pikchr.y"
24732510
{ pik_add_direction(p,&yymsp[0].minor.yy0,0,0); }
2474
-#line 2499 "pikchr.c"
2511
+#line 2536 "pikchr.c"
24752512
break;
24762513
case 34: /* attribute ::= go direction even position */
2477
-#line 563 "pikchr.y"
2478
-{pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy85);}
2479
-#line 2504 "pikchr.c"
2514
+#line 564 "pikchr.y"
2515
+{pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy95);}
2516
+#line 2541 "pikchr.c"
24802517
break;
24812518
case 35: /* attribute ::= CLOSE */
2482
-#line 564 "pikchr.y"
2519
+#line 565 "pikchr.y"
24832520
{ pik_close_path(p,&yymsp[0].minor.yy0); }
2484
-#line 2509 "pikchr.c"
2521
+#line 2546 "pikchr.c"
24852522
break;
24862523
case 36: /* attribute ::= CHOP */
2487
-#line 565 "pikchr.y"
2524
+#line 566 "pikchr.y"
24882525
{ p->cur->bChop = 1; }
2489
-#line 2514 "pikchr.c"
2526
+#line 2551 "pikchr.c"
24902527
break;
24912528
case 37: /* attribute ::= FROM position */
2492
-#line 566 "pikchr.y"
2493
-{ pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy85); }
2494
-#line 2519 "pikchr.c"
2529
+#line 567 "pikchr.y"
2530
+{ pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy95); }
2531
+#line 2556 "pikchr.c"
24952532
break;
24962533
case 38: /* attribute ::= TO position */
2497
-#line 567 "pikchr.y"
2498
-{ pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy85); }
2499
-#line 2524 "pikchr.c"
2534
+#line 568 "pikchr.y"
2535
+{ pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy95); }
2536
+#line 2561 "pikchr.c"
25002537
break;
25012538
case 39: /* attribute ::= THEN */
2502
-#line 568 "pikchr.y"
2539
+#line 569 "pikchr.y"
25032540
{ pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2504
-#line 2529 "pikchr.c"
2541
+#line 2566 "pikchr.c"
25052542
break;
25062543
case 40: /* attribute ::= THEN expr HEADING expr */
25072544
case 44: /* attribute ::= GO expr HEADING expr */ yytestcase(yyruleno==44);
2508
-#line 570 "pikchr.y"
2509
-{pik_move_hdg(p,&yymsp[-2].minor.yy215,&yymsp[-1].minor.yy0,yymsp[0].minor.yy215,0,&yymsp[-3].minor.yy0);}
2510
-#line 2535 "pikchr.c"
2545
+#line 571 "pikchr.y"
2546
+{pik_move_hdg(p,&yymsp[-2].minor.yy149,&yymsp[-1].minor.yy0,yymsp[0].minor.yy149,0,&yymsp[-3].minor.yy0);}
2547
+#line 2572 "pikchr.c"
25112548
break;
25122549
case 41: /* attribute ::= THEN HEADING expr */
25132550
case 45: /* attribute ::= GO HEADING expr */ yytestcase(yyruleno==45);
2514
-#line 571 "pikchr.y"
2515
-{pik_move_hdg(p,0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy215,0,&yymsp[-2].minor.yy0);}
2516
-#line 2541 "pikchr.c"
2551
+#line 572 "pikchr.y"
2552
+{pik_move_hdg(p,0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy149,0,&yymsp[-2].minor.yy0);}
2553
+#line 2578 "pikchr.c"
25172554
break;
25182555
case 42: /* attribute ::= THEN expr EDGEPT */
25192556
case 46: /* attribute ::= GO expr EDGEPT */ yytestcase(yyruleno==46);
2520
-#line 572 "pikchr.y"
2521
-{pik_move_hdg(p,&yymsp[-1].minor.yy215,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);}
2522
-#line 2547 "pikchr.c"
2557
+#line 573 "pikchr.y"
2558
+{pik_move_hdg(p,&yymsp[-1].minor.yy149,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);}
2559
+#line 2584 "pikchr.c"
25232560
break;
25242561
case 43: /* attribute ::= THEN EDGEPT */
25252562
case 47: /* attribute ::= GO EDGEPT */ yytestcase(yyruleno==47);
2526
-#line 573 "pikchr.y"
2563
+#line 574 "pikchr.y"
25272564
{pik_move_hdg(p,0,0,0,&yymsp[0].minor.yy0,&yymsp[-1].minor.yy0);}
2528
-#line 2553 "pikchr.c"
2565
+#line 2590 "pikchr.c"
25292566
break;
25302567
case 48: /* attribute ::= AT position */
2531
-#line 579 "pikchr.y"
2532
-{ pik_set_at(p,0,&yymsp[0].minor.yy85,&yymsp[-1].minor.yy0); }
2533
-#line 2558 "pikchr.c"
2568
+#line 580 "pikchr.y"
2569
+{ pik_set_at(p,0,&yymsp[0].minor.yy95,&yymsp[-1].minor.yy0); }
2570
+#line 2595 "pikchr.c"
25342571
break;
25352572
case 49: /* attribute ::= SAME */
2536
-#line 581 "pikchr.y"
2573
+#line 582 "pikchr.y"
25372574
{pik_same(p,0,&yymsp[0].minor.yy0);}
2538
-#line 2563 "pikchr.c"
2575
+#line 2600 "pikchr.c"
25392576
break;
25402577
case 50: /* attribute ::= SAME AS object */
2541
-#line 582 "pikchr.y"
2542
-{pik_same(p,yymsp[0].minor.yy118,&yymsp[-2].minor.yy0);}
2543
-#line 2568 "pikchr.c"
2578
+#line 583 "pikchr.y"
2579
+{pik_same(p,yymsp[0].minor.yy58,&yymsp[-2].minor.yy0);}
2580
+#line 2605 "pikchr.c"
25442581
break;
25452582
case 51: /* attribute ::= STRING textposition */
2546
-#line 583 "pikchr.y"
2547
-{pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy156);}
2548
-#line 2573 "pikchr.c"
2583
+#line 584 "pikchr.y"
2584
+{pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy92);}
2585
+#line 2610 "pikchr.c"
25492586
break;
25502587
case 52: /* attribute ::= FIT */
2551
-#line 584 "pikchr.y"
2588
+#line 585 "pikchr.y"
25522589
{pik_size_to_fit(p,&yymsp[0].minor.yy0); }
2553
-#line 2578 "pikchr.c"
2590
+#line 2615 "pikchr.c"
25542591
break;
25552592
case 53: /* attribute ::= BEHIND object */
2556
-#line 585 "pikchr.y"
2557
-{pik_behind(p,yymsp[0].minor.yy118);}
2558
-#line 2583 "pikchr.c"
2593
+#line 586 "pikchr.y"
2594
+{pik_behind(p,yymsp[0].minor.yy58);}
2595
+#line 2620 "pikchr.c"
25592596
break;
25602597
case 54: /* withclause ::= DOT_E edge AT position */
25612598
case 55: /* withclause ::= edge AT position */ yytestcase(yyruleno==55);
2562
-#line 593 "pikchr.y"
2563
-{ pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy85,&yymsp[-1].minor.yy0); }
2564
-#line 2589 "pikchr.c"
2599
+#line 594 "pikchr.y"
2600
+{ pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy95,&yymsp[-1].minor.yy0); }
2601
+#line 2626 "pikchr.c"
25652602
break;
25662603
case 56: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2567
-#line 597 "pikchr.y"
2604
+#line 598 "pikchr.y"
25682605
{yylhsminor.yy0 = yymsp[0].minor.yy0;}
2569
-#line 2594 "pikchr.c"
2606
+#line 2631 "pikchr.c"
25702607
yymsp[0].minor.yy0 = yylhsminor.yy0;
25712608
break;
25722609
case 57: /* boolproperty ::= CW */
2573
-#line 608 "pikchr.y"
2610
+#line 609 "pikchr.y"
25742611
{p->cur->cw = 1;}
2575
-#line 2600 "pikchr.c"
2612
+#line 2637 "pikchr.c"
25762613
break;
25772614
case 58: /* boolproperty ::= CCW */
2578
-#line 609 "pikchr.y"
2615
+#line 610 "pikchr.y"
25792616
{p->cur->cw = 0;}
2580
-#line 2605 "pikchr.c"
2617
+#line 2642 "pikchr.c"
25812618
break;
25822619
case 59: /* boolproperty ::= LARROW */
2583
-#line 610 "pikchr.y"
2620
+#line 611 "pikchr.y"
25842621
{p->cur->larrow=1; p->cur->rarrow=0; }
2585
-#line 2610 "pikchr.c"
2622
+#line 2647 "pikchr.c"
25862623
break;
25872624
case 60: /* boolproperty ::= RARROW */
2588
-#line 611 "pikchr.y"
2625
+#line 612 "pikchr.y"
25892626
{p->cur->larrow=0; p->cur->rarrow=1; }
2590
-#line 2615 "pikchr.c"
2627
+#line 2652 "pikchr.c"
25912628
break;
25922629
case 61: /* boolproperty ::= LRARROW */
2593
-#line 612 "pikchr.y"
2630
+#line 613 "pikchr.y"
25942631
{p->cur->larrow=1; p->cur->rarrow=1; }
2595
-#line 2620 "pikchr.c"
2632
+#line 2657 "pikchr.c"
25962633
break;
25972634
case 62: /* boolproperty ::= INVIS */
2598
-#line 613 "pikchr.y"
2635
+#line 614 "pikchr.y"
25992636
{p->cur->sw = 0.0;}
2600
-#line 2625 "pikchr.c"
2637
+#line 2662 "pikchr.c"
26012638
break;
26022639
case 63: /* boolproperty ::= THICK */
2603
-#line 614 "pikchr.y"
2640
+#line 615 "pikchr.y"
26042641
{p->cur->sw *= 1.5;}
2605
-#line 2630 "pikchr.c"
2642
+#line 2667 "pikchr.c"
26062643
break;
26072644
case 64: /* boolproperty ::= THIN */
2608
-#line 615 "pikchr.y"
2645
+#line 616 "pikchr.y"
26092646
{p->cur->sw *= 0.67;}
2610
-#line 2635 "pikchr.c"
2647
+#line 2672 "pikchr.c"
26112648
break;
26122649
case 65: /* textposition ::= */
2613
-#line 617 "pikchr.y"
2614
-{yymsp[1].minor.yy156 = 0;}
2615
-#line 2640 "pikchr.c"
2650
+#line 618 "pikchr.y"
2651
+{yymsp[1].minor.yy92 = 0;}
2652
+#line 2677 "pikchr.c"
26162653
break;
26172654
case 66: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2618
-#line 620 "pikchr.y"
2619
-{yylhsminor.yy156 = pik_text_position(p,yymsp[-1].minor.yy156,&yymsp[0].minor.yy0);}
2620
-#line 2645 "pikchr.c"
2621
- yymsp[-1].minor.yy156 = yylhsminor.yy156;
2655
+#line 621 "pikchr.y"
2656
+{yylhsminor.yy92 = pik_text_position(p,yymsp[-1].minor.yy92,&yymsp[0].minor.yy0);}
2657
+#line 2682 "pikchr.c"
2658
+ yymsp[-1].minor.yy92 = yylhsminor.yy92;
26222659
break;
26232660
case 67: /* position ::= expr COMMA expr */
2624
-#line 623 "pikchr.y"
2625
-{yylhsminor.yy85.x=yymsp[-2].minor.yy215; yylhsminor.yy85.y=yymsp[0].minor.yy215;}
2626
-#line 2651 "pikchr.c"
2627
- yymsp[-2].minor.yy85 = yylhsminor.yy85;
2661
+#line 624 "pikchr.y"
2662
+{yylhsminor.yy95.x=yymsp[-2].minor.yy149; yylhsminor.yy95.y=yymsp[0].minor.yy149;}
2663
+#line 2688 "pikchr.c"
2664
+ yymsp[-2].minor.yy95 = yylhsminor.yy95;
26282665
break;
26292666
case 68: /* position ::= place PLUS expr COMMA expr */
2630
-#line 625 "pikchr.y"
2631
-{yylhsminor.yy85.x=yymsp[-4].minor.yy85.x+yymsp[-2].minor.yy215; yylhsminor.yy85.y=yymsp[-4].minor.yy85.y+yymsp[0].minor.yy215;}
2632
-#line 2657 "pikchr.c"
2633
- yymsp[-4].minor.yy85 = yylhsminor.yy85;
2667
+#line 626 "pikchr.y"
2668
+{yylhsminor.yy95.x=yymsp[-4].minor.yy95.x+yymsp[-2].minor.yy149; yylhsminor.yy95.y=yymsp[-4].minor.yy95.y+yymsp[0].minor.yy149;}
2669
+#line 2694 "pikchr.c"
2670
+ yymsp[-4].minor.yy95 = yylhsminor.yy95;
26342671
break;
26352672
case 69: /* position ::= place MINUS expr COMMA expr */
2636
-#line 626 "pikchr.y"
2637
-{yylhsminor.yy85.x=yymsp[-4].minor.yy85.x-yymsp[-2].minor.yy215; yylhsminor.yy85.y=yymsp[-4].minor.yy85.y-yymsp[0].minor.yy215;}
2638
-#line 2663 "pikchr.c"
2639
- yymsp[-4].minor.yy85 = yylhsminor.yy85;
2673
+#line 627 "pikchr.y"
2674
+{yylhsminor.yy95.x=yymsp[-4].minor.yy95.x-yymsp[-2].minor.yy149; yylhsminor.yy95.y=yymsp[-4].minor.yy95.y-yymsp[0].minor.yy149;}
2675
+#line 2700 "pikchr.c"
2676
+ yymsp[-4].minor.yy95 = yylhsminor.yy95;
26402677
break;
26412678
case 70: /* position ::= place PLUS LP expr COMMA expr RP */
2642
-#line 628 "pikchr.y"
2643
-{yylhsminor.yy85.x=yymsp[-6].minor.yy85.x+yymsp[-3].minor.yy215; yylhsminor.yy85.y=yymsp[-6].minor.yy85.y+yymsp[-1].minor.yy215;}
2644
-#line 2669 "pikchr.c"
2645
- yymsp[-6].minor.yy85 = yylhsminor.yy85;
2679
+#line 629 "pikchr.y"
2680
+{yylhsminor.yy95.x=yymsp[-6].minor.yy95.x+yymsp[-3].minor.yy149; yylhsminor.yy95.y=yymsp[-6].minor.yy95.y+yymsp[-1].minor.yy149;}
2681
+#line 2706 "pikchr.c"
2682
+ yymsp[-6].minor.yy95 = yylhsminor.yy95;
26462683
break;
26472684
case 71: /* position ::= place MINUS LP expr COMMA expr RP */
2648
-#line 630 "pikchr.y"
2649
-{yylhsminor.yy85.x=yymsp[-6].minor.yy85.x-yymsp[-3].minor.yy215; yylhsminor.yy85.y=yymsp[-6].minor.yy85.y-yymsp[-1].minor.yy215;}
2650
-#line 2675 "pikchr.c"
2651
- yymsp[-6].minor.yy85 = yylhsminor.yy85;
2685
+#line 631 "pikchr.y"
2686
+{yylhsminor.yy95.x=yymsp[-6].minor.yy95.x-yymsp[-3].minor.yy149; yylhsminor.yy95.y=yymsp[-6].minor.yy95.y-yymsp[-1].minor.yy149;}
2687
+#line 2712 "pikchr.c"
2688
+ yymsp[-6].minor.yy95 = yylhsminor.yy95;
26522689
break;
26532690
case 72: /* position ::= LP position COMMA position RP */
2654
-#line 631 "pikchr.y"
2655
-{yymsp[-4].minor.yy85.x=yymsp[-3].minor.yy85.x; yymsp[-4].minor.yy85.y=yymsp[-1].minor.yy85.y;}
2656
-#line 2681 "pikchr.c"
2691
+#line 632 "pikchr.y"
2692
+{yymsp[-4].minor.yy95.x=yymsp[-3].minor.yy95.x; yymsp[-4].minor.yy95.y=yymsp[-1].minor.yy95.y;}
2693
+#line 2718 "pikchr.c"
26572694
break;
26582695
case 73: /* position ::= LP position RP */
2659
-#line 632 "pikchr.y"
2660
-{yymsp[-2].minor.yy85=yymsp[-1].minor.yy85;}
2661
-#line 2686 "pikchr.c"
2696
+#line 633 "pikchr.y"
2697
+{yymsp[-2].minor.yy95=yymsp[-1].minor.yy95;}
2698
+#line 2723 "pikchr.c"
26622699
break;
26632700
case 74: /* position ::= expr between position AND position */
2664
-#line 634 "pikchr.y"
2665
-{yylhsminor.yy85 = pik_position_between(p,yymsp[-4].minor.yy215,yymsp[-2].minor.yy85,yymsp[0].minor.yy85);}
2666
-#line 2691 "pikchr.c"
2667
- yymsp[-4].minor.yy85 = yylhsminor.yy85;
2701
+#line 635 "pikchr.y"
2702
+{yylhsminor.yy95 = pik_position_between(p,yymsp[-4].minor.yy149,yymsp[-2].minor.yy95,yymsp[0].minor.yy95);}
2703
+#line 2728 "pikchr.c"
2704
+ yymsp[-4].minor.yy95 = yylhsminor.yy95;
26682705
break;
26692706
case 75: /* position ::= expr LT position COMMA position GT */
2670
-#line 636 "pikchr.y"
2671
-{yylhsminor.yy85 = pik_position_between(p,yymsp[-5].minor.yy215,yymsp[-3].minor.yy85,yymsp[-1].minor.yy85);}
2672
-#line 2697 "pikchr.c"
2673
- yymsp[-5].minor.yy85 = yylhsminor.yy85;
2707
+#line 637 "pikchr.y"
2708
+{yylhsminor.yy95 = pik_position_between(p,yymsp[-5].minor.yy149,yymsp[-3].minor.yy95,yymsp[-1].minor.yy95);}
2709
+#line 2734 "pikchr.c"
2710
+ yymsp[-5].minor.yy95 = yylhsminor.yy95;
26742711
break;
26752712
case 76: /* position ::= expr ABOVE position */
2676
-#line 637 "pikchr.y"
2677
-{yylhsminor.yy85=yymsp[0].minor.yy85; yylhsminor.yy85.y += yymsp[-2].minor.yy215;}
2678
-#line 2703 "pikchr.c"
2679
- yymsp[-2].minor.yy85 = yylhsminor.yy85;
2713
+#line 638 "pikchr.y"
2714
+{yylhsminor.yy95=yymsp[0].minor.yy95; yylhsminor.yy95.y += yymsp[-2].minor.yy149;}
2715
+#line 2740 "pikchr.c"
2716
+ yymsp[-2].minor.yy95 = yylhsminor.yy95;
26802717
break;
26812718
case 77: /* position ::= expr BELOW position */
2682
-#line 638 "pikchr.y"
2683
-{yylhsminor.yy85=yymsp[0].minor.yy85; yylhsminor.yy85.y -= yymsp[-2].minor.yy215;}
2684
-#line 2709 "pikchr.c"
2685
- yymsp[-2].minor.yy85 = yylhsminor.yy85;
2719
+#line 639 "pikchr.y"
2720
+{yylhsminor.yy95=yymsp[0].minor.yy95; yylhsminor.yy95.y -= yymsp[-2].minor.yy149;}
2721
+#line 2746 "pikchr.c"
2722
+ yymsp[-2].minor.yy95 = yylhsminor.yy95;
26862723
break;
26872724
case 78: /* position ::= expr LEFT OF position */
2688
-#line 639 "pikchr.y"
2689
-{yylhsminor.yy85=yymsp[0].minor.yy85; yylhsminor.yy85.x -= yymsp[-3].minor.yy215;}
2690
-#line 2715 "pikchr.c"
2691
- yymsp[-3].minor.yy85 = yylhsminor.yy85;
2725
+#line 640 "pikchr.y"
2726
+{yylhsminor.yy95=yymsp[0].minor.yy95; yylhsminor.yy95.x -= yymsp[-3].minor.yy149;}
2727
+#line 2752 "pikchr.c"
2728
+ yymsp[-3].minor.yy95 = yylhsminor.yy95;
26922729
break;
26932730
case 79: /* position ::= expr RIGHT OF position */
2694
-#line 640 "pikchr.y"
2695
-{yylhsminor.yy85=yymsp[0].minor.yy85; yylhsminor.yy85.x += yymsp[-3].minor.yy215;}
2696
-#line 2721 "pikchr.c"
2697
- yymsp[-3].minor.yy85 = yylhsminor.yy85;
2698
- break;
2699
- case 80: /* position ::= expr EDGEPT OF position */
2700
-#line 642 "pikchr.y"
2701
-{yylhsminor.yy85 = pik_position_at_hdg(p,yymsp[-3].minor.yy215,&yymsp[-2].minor.yy0,yymsp[0].minor.yy85);}
2702
-#line 2727 "pikchr.c"
2703
- yymsp[-3].minor.yy85 = yylhsminor.yy85;
2704
- break;
2705
- case 81: /* position ::= expr HEADING expr FROM position */
2706
-#line 644 "pikchr.y"
2707
-{yylhsminor.yy85 = pik_position_at_angle(p,yymsp[-4].minor.yy215,yymsp[-2].minor.yy215,yymsp[0].minor.yy85);}
2708
-#line 2733 "pikchr.c"
2709
- yymsp[-4].minor.yy85 = yylhsminor.yy85;
2710
- break;
2711
- case 82: /* place ::= edge OF object */
2712
-#line 656 "pikchr.y"
2713
-{yylhsminor.yy85 = pik_place_of_elem(p,yymsp[0].minor.yy118,&yymsp[-2].minor.yy0);}
2714
-#line 2739 "pikchr.c"
2715
- yymsp[-2].minor.yy85 = yylhsminor.yy85;
2716
- break;
2717
- case 83: /* place2 ::= object */
2718
-#line 657 "pikchr.y"
2719
-{yylhsminor.yy85 = pik_place_of_elem(p,yymsp[0].minor.yy118,0);}
2720
-#line 2745 "pikchr.c"
2721
- yymsp[0].minor.yy85 = yylhsminor.yy85;
2722
- break;
2723
- case 84: /* place2 ::= object DOT_E edge */
2724
-#line 658 "pikchr.y"
2725
-{yylhsminor.yy85 = pik_place_of_elem(p,yymsp[-2].minor.yy118,&yymsp[0].minor.yy0);}
2726
-#line 2751 "pikchr.c"
2727
- yymsp[-2].minor.yy85 = yylhsminor.yy85;
2728
- break;
2729
- case 85: /* place2 ::= NTH VERTEX OF object */
2730
-#line 659 "pikchr.y"
2731
-{yylhsminor.yy85 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy118);}
2732
-#line 2757 "pikchr.c"
2733
- yymsp[-3].minor.yy85 = yylhsminor.yy85;
2734
- break;
2735
- case 86: /* object ::= nth */
2736
-#line 670 "pikchr.y"
2737
-{yylhsminor.yy118 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2738
-#line 2763 "pikchr.c"
2739
- yymsp[0].minor.yy118 = yylhsminor.yy118;
2740
- break;
2741
- case 87: /* object ::= nth OF|IN object */
2742
-#line 671 "pikchr.y"
2743
-{yylhsminor.yy118 = pik_find_nth(p,yymsp[0].minor.yy118,&yymsp[-2].minor.yy0);}
2744
-#line 2769 "pikchr.c"
2745
- yymsp[-2].minor.yy118 = yylhsminor.yy118;
2746
- break;
2747
- case 88: /* objectname ::= PLACENAME */
2748
-#line 673 "pikchr.y"
2749
-{yylhsminor.yy118 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2750
-#line 2775 "pikchr.c"
2751
- yymsp[0].minor.yy118 = yylhsminor.yy118;
2752
- break;
2753
- case 89: /* objectname ::= objectname DOT_U PLACENAME */
2754
-#line 675 "pikchr.y"
2755
-{yylhsminor.yy118 = pik_find_byname(p,yymsp[-2].minor.yy118,&yymsp[0].minor.yy0);}
2756
-#line 2781 "pikchr.c"
2757
- yymsp[-2].minor.yy118 = yylhsminor.yy118;
2758
- break;
2759
- case 90: /* nth ::= NTH CLASSNAME */
2760
-#line 677 "pikchr.y"
2731
+#line 641 "pikchr.y"
2732
+{yylhsminor.yy95=yymsp[0].minor.yy95; yylhsminor.yy95.x += yymsp[-3].minor.yy149;}
2733
+#line 2758 "pikchr.c"
2734
+ yymsp[-3].minor.yy95 = yylhsminor.yy95;
2735
+ break;
2736
+ case 80: /* position ::= expr ON HEADING EDGEPT OF position */
2737
+#line 643 "pikchr.y"
2738
+{yylhsminor.yy95 = pik_position_at_hdg(p,yymsp[-5].minor.yy149,&yymsp[-2].minor.yy0,yymsp[0].minor.yy95);}
2739
+#line 2764 "pikchr.c"
2740
+ yymsp[-5].minor.yy95 = yylhsminor.yy95;
2741
+ break;
2742
+ case 81: /* position ::= expr HEADING EDGEPT OF position */
2743
+#line 645 "pikchr.y"
2744
+{yylhsminor.yy95 = pik_position_at_hdg(p,yymsp[-4].minor.yy149,&yymsp[-2].minor.yy0,yymsp[0].minor.yy95);}
2745
+#line 2770 "pikchr.c"
2746
+ yymsp[-4].minor.yy95 = yylhsminor.yy95;
2747
+ break;
2748
+ case 82: /* position ::= expr EDGEPT OF position */
2749
+#line 647 "pikchr.y"
2750
+{yylhsminor.yy95 = pik_position_at_hdg(p,yymsp[-3].minor.yy149,&yymsp[-2].minor.yy0,yymsp[0].minor.yy95);}
2751
+#line 2776 "pikchr.c"
2752
+ yymsp[-3].minor.yy95 = yylhsminor.yy95;
2753
+ break;
2754
+ case 83: /* position ::= expr ON HEADING expr FROM position */
2755
+#line 649 "pikchr.y"
2756
+{yylhsminor.yy95 = pik_position_at_angle(p,yymsp[-5].minor.yy149,yymsp[-2].minor.yy149,yymsp[0].minor.yy95);}
2757
+#line 2782 "pikchr.c"
2758
+ yymsp[-5].minor.yy95 = yylhsminor.yy95;
2759
+ break;
2760
+ case 84: /* position ::= expr HEADING expr FROM position */
2761
+#line 651 "pikchr.y"
2762
+{yylhsminor.yy95 = pik_position_at_angle(p,yymsp[-4].minor.yy149,yymsp[-2].minor.yy149,yymsp[0].minor.yy95);}
2763
+#line 2788 "pikchr.c"
2764
+ yymsp[-4].minor.yy95 = yylhsminor.yy95;
2765
+ break;
2766
+ case 85: /* place ::= edge OF object */
2767
+#line 663 "pikchr.y"
2768
+{yylhsminor.yy95 = pik_place_of_elem(p,yymsp[0].minor.yy58,&yymsp[-2].minor.yy0);}
2769
+#line 2794 "pikchr.c"
2770
+ yymsp[-2].minor.yy95 = yylhsminor.yy95;
2771
+ break;
2772
+ case 86: /* place2 ::= object */
2773
+#line 664 "pikchr.y"
2774
+{yylhsminor.yy95 = pik_place_of_elem(p,yymsp[0].minor.yy58,0);}
2775
+#line 2800 "pikchr.c"
2776
+ yymsp[0].minor.yy95 = yylhsminor.yy95;
2777
+ break;
2778
+ case 87: /* place2 ::= object DOT_E edge */
2779
+#line 665 "pikchr.y"
2780
+{yylhsminor.yy95 = pik_place_of_elem(p,yymsp[-2].minor.yy58,&yymsp[0].minor.yy0);}
2781
+#line 2806 "pikchr.c"
2782
+ yymsp[-2].minor.yy95 = yylhsminor.yy95;
2783
+ break;
2784
+ case 88: /* place2 ::= NTH VERTEX OF object */
2785
+#line 666 "pikchr.y"
2786
+{yylhsminor.yy95 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy58);}
2787
+#line 2812 "pikchr.c"
2788
+ yymsp[-3].minor.yy95 = yylhsminor.yy95;
2789
+ break;
2790
+ case 89: /* object ::= nth */
2791
+#line 678 "pikchr.y"
2792
+{yylhsminor.yy58 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2793
+#line 2818 "pikchr.c"
2794
+ yymsp[0].minor.yy58 = yylhsminor.yy58;
2795
+ break;
2796
+ case 90: /* object ::= nth OF|IN object */
2797
+#line 679 "pikchr.y"
2798
+{yylhsminor.yy58 = pik_find_nth(p,yymsp[0].minor.yy58,&yymsp[-2].minor.yy0);}
2799
+#line 2824 "pikchr.c"
2800
+ yymsp[-2].minor.yy58 = yylhsminor.yy58;
2801
+ break;
2802
+ case 91: /* objectname ::= PLACENAME */
2803
+#line 681 "pikchr.y"
2804
+{yylhsminor.yy58 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2805
+#line 2830 "pikchr.c"
2806
+ yymsp[0].minor.yy58 = yylhsminor.yy58;
2807
+ break;
2808
+ case 92: /* objectname ::= objectname DOT_U PLACENAME */
2809
+#line 683 "pikchr.y"
2810
+{yylhsminor.yy58 = pik_find_byname(p,yymsp[-2].minor.yy58,&yymsp[0].minor.yy0);}
2811
+#line 2836 "pikchr.c"
2812
+ yymsp[-2].minor.yy58 = yylhsminor.yy58;
2813
+ break;
2814
+ case 93: /* nth ::= NTH CLASSNAME */
2815
+#line 685 "pikchr.y"
27612816
{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2762
-#line 2787 "pikchr.c"
2817
+#line 2842 "pikchr.c"
27632818
yymsp[-1].minor.yy0 = yylhsminor.yy0;
27642819
break;
2765
- case 91: /* nth ::= NTH LAST CLASSNAME */
2766
-#line 678 "pikchr.y"
2820
+ case 94: /* nth ::= NTH LAST CLASSNAME */
2821
+#line 686 "pikchr.y"
27672822
{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2768
-#line 2793 "pikchr.c"
2823
+#line 2848 "pikchr.c"
27692824
yymsp[-2].minor.yy0 = yylhsminor.yy0;
27702825
break;
2771
- case 92: /* nth ::= LAST CLASSNAME */
2772
-#line 679 "pikchr.y"
2826
+ case 95: /* nth ::= LAST CLASSNAME */
2827
+#line 687 "pikchr.y"
27732828
{yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2774
-#line 2799 "pikchr.c"
2829
+#line 2854 "pikchr.c"
27752830
break;
2776
- case 93: /* nth ::= LAST */
2777
-#line 680 "pikchr.y"
2831
+ case 96: /* nth ::= LAST */
2832
+#line 688 "pikchr.y"
27782833
{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2779
-#line 2804 "pikchr.c"
2834
+#line 2859 "pikchr.c"
27802835
yymsp[0].minor.yy0 = yylhsminor.yy0;
27812836
break;
2782
- case 94: /* nth ::= NTH LB RB */
2783
-#line 681 "pikchr.y"
2837
+ case 97: /* nth ::= NTH LB RB */
2838
+#line 689 "pikchr.y"
27842839
{yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2785
-#line 2810 "pikchr.c"
2840
+#line 2865 "pikchr.c"
27862841
yymsp[-2].minor.yy0 = yylhsminor.yy0;
27872842
break;
2788
- case 95: /* nth ::= NTH LAST LB RB */
2789
-#line 682 "pikchr.y"
2843
+ case 98: /* nth ::= NTH LAST LB RB */
2844
+#line 690 "pikchr.y"
27902845
{yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2791
-#line 2816 "pikchr.c"
2846
+#line 2871 "pikchr.c"
27922847
yymsp[-3].minor.yy0 = yylhsminor.yy0;
27932848
break;
2794
- case 96: /* nth ::= LAST LB RB */
2795
-#line 683 "pikchr.y"
2796
-{yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2797
-#line 2822 "pikchr.c"
2798
- break;
2799
- case 97: /* expr ::= expr PLUS expr */
2800
-#line 685 "pikchr.y"
2801
-{yylhsminor.yy215=yymsp[-2].minor.yy215+yymsp[0].minor.yy215;}
2802
-#line 2827 "pikchr.c"
2803
- yymsp[-2].minor.yy215 = yylhsminor.yy215;
2804
- break;
2805
- case 98: /* expr ::= expr MINUS expr */
2806
-#line 686 "pikchr.y"
2807
-{yylhsminor.yy215=yymsp[-2].minor.yy215-yymsp[0].minor.yy215;}
2808
-#line 2833 "pikchr.c"
2809
- yymsp[-2].minor.yy215 = yylhsminor.yy215;
2810
- break;
2811
- case 99: /* expr ::= expr STAR expr */
2812
-#line 687 "pikchr.y"
2813
-{yylhsminor.yy215=yymsp[-2].minor.yy215*yymsp[0].minor.yy215;}
2814
-#line 2839 "pikchr.c"
2815
- yymsp[-2].minor.yy215 = yylhsminor.yy215;
2816
- break;
2817
- case 100: /* expr ::= expr SLASH expr */
2818
-#line 688 "pikchr.y"
2819
-{
2820
- if( yymsp[0].minor.yy215==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy215 = 0.0; }
2821
- else{ yylhsminor.yy215 = yymsp[-2].minor.yy215/yymsp[0].minor.yy215; }
2822
-}
2823
-#line 2848 "pikchr.c"
2824
- yymsp[-2].minor.yy215 = yylhsminor.yy215;
2825
- break;
2826
- case 101: /* expr ::= MINUS expr */
2827
-#line 692 "pikchr.y"
2828
-{yymsp[-1].minor.yy215=-yymsp[0].minor.yy215;}
2829
-#line 2854 "pikchr.c"
2830
- break;
2831
- case 102: /* expr ::= PLUS expr */
2832
-#line 693 "pikchr.y"
2833
-{yymsp[-1].minor.yy215=yymsp[0].minor.yy215;}
2834
-#line 2859 "pikchr.c"
2835
- break;
2836
- case 103: /* expr ::= LP expr RP */
2837
-#line 694 "pikchr.y"
2838
-{yymsp[-2].minor.yy215=yymsp[-1].minor.yy215;}
2839
-#line 2864 "pikchr.c"
2840
- break;
2841
- case 104: /* expr ::= NUMBER */
2842
-#line 695 "pikchr.y"
2843
-{yylhsminor.yy215=pik_atof(p,&yymsp[0].minor.yy0);}
2844
-#line 2869 "pikchr.c"
2845
- yymsp[0].minor.yy215 = yylhsminor.yy215;
2846
- break;
2847
- case 105: /* expr ::= ID */
2848
-#line 696 "pikchr.y"
2849
-{yylhsminor.yy215=pik_get_var(p,&yymsp[0].minor.yy0);}
2850
-#line 2875 "pikchr.c"
2851
- yymsp[0].minor.yy215 = yylhsminor.yy215;
2852
- break;
2853
- case 106: /* expr ::= FUNC1 LP expr RP */
2854
-#line 697 "pikchr.y"
2855
-{yylhsminor.yy215 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy215,0.0);}
2856
-#line 2881 "pikchr.c"
2857
- yymsp[-3].minor.yy215 = yylhsminor.yy215;
2858
- break;
2859
- case 107: /* expr ::= FUNC2 LP expr COMMA expr RP */
2860
-#line 698 "pikchr.y"
2861
-{yylhsminor.yy215 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy215,yymsp[-1].minor.yy215);}
2862
-#line 2887 "pikchr.c"
2863
- yymsp[-5].minor.yy215 = yylhsminor.yy215;
2864
- break;
2865
- case 108: /* expr ::= place2 DOT_XY X */
2866
-#line 699 "pikchr.y"
2867
-{yylhsminor.yy215 = yymsp[-2].minor.yy85.x;}
2868
-#line 2893 "pikchr.c"
2869
- yymsp[-2].minor.yy215 = yylhsminor.yy215;
2870
- break;
2871
- case 109: /* expr ::= place2 DOT_XY Y */
2872
-#line 700 "pikchr.y"
2873
-{yylhsminor.yy215 = yymsp[-2].minor.yy85.y;}
2874
-#line 2899 "pikchr.c"
2875
- yymsp[-2].minor.yy215 = yylhsminor.yy215;
2876
- break;
2877
- case 110: /* expr ::= object DOT_L numproperty */
2878
- case 111: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==111);
2879
- case 112: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==112);
2880
-#line 701 "pikchr.y"
2881
-{yylhsminor.yy215=pik_property_of(p,yymsp[-2].minor.yy118,&yymsp[0].minor.yy0);}
2882
-#line 2907 "pikchr.c"
2883
- yymsp[-2].minor.yy215 = yylhsminor.yy215;
2849
+ case 99: /* nth ::= LAST LB RB */
2850
+#line 691 "pikchr.y"
2851
+{yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2852
+#line 2877 "pikchr.c"
2853
+ break;
2854
+ case 100: /* expr ::= expr PLUS expr */
2855
+#line 693 "pikchr.y"
2856
+{yylhsminor.yy149=yymsp[-2].minor.yy149+yymsp[0].minor.yy149;}
2857
+#line 2882 "pikchr.c"
2858
+ yymsp[-2].minor.yy149 = yylhsminor.yy149;
2859
+ break;
2860
+ case 101: /* expr ::= expr MINUS expr */
2861
+#line 694 "pikchr.y"
2862
+{yylhsminor.yy149=yymsp[-2].minor.yy149-yymsp[0].minor.yy149;}
2863
+#line 2888 "pikchr.c"
2864
+ yymsp[-2].minor.yy149 = yylhsminor.yy149;
2865
+ break;
2866
+ case 102: /* expr ::= expr STAR expr */
2867
+#line 695 "pikchr.y"
2868
+{yylhsminor.yy149=yymsp[-2].minor.yy149*yymsp[0].minor.yy149;}
2869
+#line 2894 "pikchr.c"
2870
+ yymsp[-2].minor.yy149 = yylhsminor.yy149;
2871
+ break;
2872
+ case 103: /* expr ::= expr SLASH expr */
2873
+#line 696 "pikchr.y"
2874
+{
2875
+ if( yymsp[0].minor.yy149==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy149 = 0.0; }
2876
+ else{ yylhsminor.yy149 = yymsp[-2].minor.yy149/yymsp[0].minor.yy149; }
2877
+}
2878
+#line 2903 "pikchr.c"
2879
+ yymsp[-2].minor.yy149 = yylhsminor.yy149;
2880
+ break;
2881
+ case 104: /* expr ::= MINUS expr */
2882
+#line 700 "pikchr.y"
2883
+{yymsp[-1].minor.yy149=-yymsp[0].minor.yy149;}
2884
+#line 2909 "pikchr.c"
2885
+ break;
2886
+ case 105: /* expr ::= PLUS expr */
2887
+#line 701 "pikchr.y"
2888
+{yymsp[-1].minor.yy149=yymsp[0].minor.yy149;}
2889
+#line 2914 "pikchr.c"
2890
+ break;
2891
+ case 106: /* expr ::= LP expr RP */
2892
+#line 702 "pikchr.y"
2893
+{yymsp[-2].minor.yy149=yymsp[-1].minor.yy149;}
2894
+#line 2919 "pikchr.c"
2895
+ break;
2896
+ case 107: /* expr ::= NUMBER */
2897
+#line 703 "pikchr.y"
2898
+{yylhsminor.yy149=pik_atof(p,&yymsp[0].minor.yy0);}
2899
+#line 2924 "pikchr.c"
2900
+ yymsp[0].minor.yy149 = yylhsminor.yy149;
2901
+ break;
2902
+ case 108: /* expr ::= ID */
2903
+#line 704 "pikchr.y"
2904
+{yylhsminor.yy149=pik_get_var(p,&yymsp[0].minor.yy0);}
2905
+#line 2930 "pikchr.c"
2906
+ yymsp[0].minor.yy149 = yylhsminor.yy149;
2907
+ break;
2908
+ case 109: /* expr ::= FUNC1 LP expr RP */
2909
+#line 705 "pikchr.y"
2910
+{yylhsminor.yy149 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy149,0.0);}
2911
+#line 2936 "pikchr.c"
2912
+ yymsp[-3].minor.yy149 = yylhsminor.yy149;
2913
+ break;
2914
+ case 110: /* expr ::= FUNC2 LP expr COMMA expr RP */
2915
+#line 706 "pikchr.y"
2916
+{yylhsminor.yy149 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy149,yymsp[-1].minor.yy149);}
2917
+#line 2942 "pikchr.c"
2918
+ yymsp[-5].minor.yy149 = yylhsminor.yy149;
2919
+ break;
2920
+ case 111: /* expr ::= place2 DOT_XY X */
2921
+#line 707 "pikchr.y"
2922
+{yylhsminor.yy149 = yymsp[-2].minor.yy95.x;}
2923
+#line 2948 "pikchr.c"
2924
+ yymsp[-2].minor.yy149 = yylhsminor.yy149;
2925
+ break;
2926
+ case 112: /* expr ::= place2 DOT_XY Y */
2927
+#line 708 "pikchr.y"
2928
+{yylhsminor.yy149 = yymsp[-2].minor.yy95.y;}
2929
+#line 2954 "pikchr.c"
2930
+ yymsp[-2].minor.yy149 = yylhsminor.yy149;
2931
+ break;
2932
+ case 113: /* expr ::= object DOT_L numproperty */
2933
+ case 114: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==114);
2934
+ case 115: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==115);
2935
+#line 709 "pikchr.y"
2936
+{yylhsminor.yy149=pik_property_of(p,yymsp[-2].minor.yy58,&yymsp[0].minor.yy0);}
2937
+#line 2962 "pikchr.c"
2938
+ yymsp[-2].minor.yy149 = yylhsminor.yy149;
28842939
break;
28852940
default:
2886
- /* (113) lvalue ::= ID */ yytestcase(yyruleno==113);
2887
- /* (114) lvalue ::= FILL */ yytestcase(yyruleno==114);
2888
- /* (115) lvalue ::= COLOR */ yytestcase(yyruleno==115);
2889
- /* (116) lvalue ::= THICKNESS */ yytestcase(yyruleno==116);
2890
- /* (117) rvalue ::= expr */ yytestcase(yyruleno==117);
2891
- /* (118) print ::= PRINT */ yytestcase(yyruleno==118);
2892
- /* (119) prlist ::= pritem (OPTIMIZED OUT) */ assert(yyruleno!=119);
2893
- /* (120) prlist ::= prlist prsep pritem */ yytestcase(yyruleno==120);
2894
- /* (121) direction ::= UP */ yytestcase(yyruleno==121);
2895
- /* (122) direction ::= DOWN */ yytestcase(yyruleno==122);
2896
- /* (123) direction ::= LEFT */ yytestcase(yyruleno==123);
2897
- /* (124) direction ::= RIGHT */ yytestcase(yyruleno==124);
2898
- /* (125) attribute_list ::= alist */ yytestcase(yyruleno==125);
2899
- /* (126) alist ::= */ yytestcase(yyruleno==126);
2900
- /* (127) alist ::= alist attribute */ yytestcase(yyruleno==127);
2901
- /* (128) attribute ::= boolproperty (OPTIMIZED OUT) */ assert(yyruleno!=128);
2902
- /* (129) attribute ::= WITH withclause */ yytestcase(yyruleno==129);
2903
- /* (130) go ::= GO */ yytestcase(yyruleno==130);
2904
- /* (131) go ::= */ yytestcase(yyruleno==131);
2905
- /* (132) even ::= UNTIL EVEN WITH */ yytestcase(yyruleno==132);
2906
- /* (133) even ::= EVEN WITH */ yytestcase(yyruleno==133);
2907
- /* (134) dashproperty ::= DOTTED */ yytestcase(yyruleno==134);
2908
- /* (135) dashproperty ::= DASHED */ yytestcase(yyruleno==135);
2909
- /* (136) colorproperty ::= FILL */ yytestcase(yyruleno==136);
2910
- /* (137) colorproperty ::= COLOR */ yytestcase(yyruleno==137);
2911
- /* (138) position ::= place */ yytestcase(yyruleno==138);
2912
- /* (139) between ::= WAY BETWEEN */ yytestcase(yyruleno==139);
2913
- /* (140) between ::= BETWEEN */ yytestcase(yyruleno==140);
2914
- /* (141) between ::= OF THE WAY BETWEEN */ yytestcase(yyruleno==141);
2915
- /* (142) place ::= place2 */ yytestcase(yyruleno==142);
2916
- /* (143) edge ::= EDGEPT */ yytestcase(yyruleno==143);
2917
- /* (144) edge ::= TOP */ yytestcase(yyruleno==144);
2918
- /* (145) edge ::= BOTTOM */ yytestcase(yyruleno==145);
2919
- /* (146) edge ::= START */ yytestcase(yyruleno==146);
2920
- /* (147) edge ::= END */ yytestcase(yyruleno==147);
2921
- /* (148) edge ::= RIGHT */ yytestcase(yyruleno==148);
2922
- /* (149) edge ::= LEFT */ yytestcase(yyruleno==149);
2923
- /* (150) object ::= objectname */ yytestcase(yyruleno==150);
2941
+ /* (116) lvalue ::= ID */ yytestcase(yyruleno==116);
2942
+ /* (117) lvalue ::= FILL */ yytestcase(yyruleno==117);
2943
+ /* (118) lvalue ::= COLOR */ yytestcase(yyruleno==118);
2944
+ /* (119) lvalue ::= THICKNESS */ yytestcase(yyruleno==119);
2945
+ /* (120) rvalue ::= expr */ yytestcase(yyruleno==120);
2946
+ /* (121) print ::= PRINT */ yytestcase(yyruleno==121);
2947
+ /* (122) prlist ::= pritem (OPTIMIZED OUT) */ assert(yyruleno!=122);
2948
+ /* (123) prlist ::= prlist prsep pritem */ yytestcase(yyruleno==123);
2949
+ /* (124) direction ::= UP */ yytestcase(yyruleno==124);
2950
+ /* (125) direction ::= DOWN */ yytestcase(yyruleno==125);
2951
+ /* (126) direction ::= LEFT */ yytestcase(yyruleno==126);
2952
+ /* (127) direction ::= RIGHT */ yytestcase(yyruleno==127);
2953
+ /* (128) attribute_list ::= alist */ yytestcase(yyruleno==128);
2954
+ /* (129) alist ::= */ yytestcase(yyruleno==129);
2955
+ /* (130) alist ::= alist attribute */ yytestcase(yyruleno==130);
2956
+ /* (131) attribute ::= boolproperty (OPTIMIZED OUT) */ assert(yyruleno!=131);
2957
+ /* (132) attribute ::= WITH withclause */ yytestcase(yyruleno==132);
2958
+ /* (133) go ::= GO */ yytestcase(yyruleno==133);
2959
+ /* (134) go ::= */ yytestcase(yyruleno==134);
2960
+ /* (135) even ::= UNTIL EVEN WITH */ yytestcase(yyruleno==135);
2961
+ /* (136) even ::= EVEN WITH */ yytestcase(yyruleno==136);
2962
+ /* (137) dashproperty ::= DOTTED */ yytestcase(yyruleno==137);
2963
+ /* (138) dashproperty ::= DASHED */ yytestcase(yyruleno==138);
2964
+ /* (139) colorproperty ::= FILL */ yytestcase(yyruleno==139);
2965
+ /* (140) colorproperty ::= COLOR */ yytestcase(yyruleno==140);
2966
+ /* (141) position ::= place */ yytestcase(yyruleno==141);
2967
+ /* (142) between ::= WAY BETWEEN */ yytestcase(yyruleno==142);
2968
+ /* (143) between ::= BETWEEN */ yytestcase(yyruleno==143);
2969
+ /* (144) between ::= OF THE WAY BETWEEN */ yytestcase(yyruleno==144);
2970
+ /* (145) place ::= place2 */ yytestcase(yyruleno==145);
2971
+ /* (146) edge ::= CENTER */ yytestcase(yyruleno==146);
2972
+ /* (147) edge ::= EDGEPT */ yytestcase(yyruleno==147);
2973
+ /* (148) edge ::= TOP */ yytestcase(yyruleno==148);
2974
+ /* (149) edge ::= BOTTOM */ yytestcase(yyruleno==149);
2975
+ /* (150) edge ::= START */ yytestcase(yyruleno==150);
2976
+ /* (151) edge ::= END */ yytestcase(yyruleno==151);
2977
+ /* (152) edge ::= RIGHT */ yytestcase(yyruleno==152);
2978
+ /* (153) edge ::= LEFT */ yytestcase(yyruleno==153);
2979
+ /* (154) object ::= objectname */ yytestcase(yyruleno==154);
29242980
break;
29252981
/********** End reduce actions ************************************************/
29262982
};
29272983
assert( yyruleno<sizeof(yyRuleInfoLhs)/sizeof(yyRuleInfoLhs[0]) );
29282984
yygoto = yyRuleInfoLhs[yyruleno];
@@ -2978,18 +3034,18 @@
29783034
){
29793035
pik_parserARG_FETCH
29803036
pik_parserCTX_FETCH
29813037
#define TOKEN yyminor
29823038
/************ Begin %syntax_error code ****************************************/
2983
-#line 471 "pikchr.y"
3039
+#line 472 "pikchr.y"
29843040
29853041
if( TOKEN.z && TOKEN.z[0] ){
29863042
pik_error(p, &TOKEN, "syntax error");
29873043
}else{
29883044
pik_error(p, 0, "syntax error");
29893045
}
2990
-#line 3015 "pikchr.c"
3046
+#line 3071 "pikchr.c"
29913047
/************ End %syntax_error code ******************************************/
29923048
pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
29933049
pik_parserCTX_STORE
29943050
}
29953051
@@ -3218,11 +3274,11 @@
32183274
#else
32193275
(void)iToken;
32203276
return 0;
32213277
#endif
32223278
}
3223
-#line 706 "pikchr.y"
3279
+#line 714 "pikchr.y"
32243280
32253281
32263282
32273283
/* Chart of the 140 official HTML color names with their
32283284
** corresponding RGB value.
@@ -3865,10 +3921,29 @@
38653921
static void lineInit(Pik *p, PElem *pElem){
38663922
pElem->w = pik_value(p, "linewid",7,0);
38673923
pElem->h = pik_value(p, "lineht",6,0);
38683924
pElem->rad = pik_value(p, "linerad",7,0);
38693925
pElem->fill = -1.0;
3926
+}
3927
+static PPoint lineOffset(Pik *p, PElem *pElem, int cp){
3928
+
3929
+#if 0 /* No. Just make .center the geometic center of the line.
3930
+ ** This is different from legacy-PIC and Gnu-PIC, but it seems
3931
+ ** to work better. And the two points are the same in most
3932
+ ** cases anyhow. */
3933
+ /* The .center of an unclosed line is half way between
3934
+ ** its .start and .end. For everything else, the offset
3935
+ ** is the same as for box */
3936
+ if( cp==CP_C && !pElem->bClose ){
3937
+ PPoint out;
3938
+ out.x = 0.5*(pElem->ptEnter.x + pElem->ptExit.x) - pElem->ptAt.x;
3939
+ out.y = 0.5*(pElem->ptEnter.x + pElem->ptExit.y) - pElem->ptAt.y;
3940
+ return out;
3941
+ }
3942
+#endif
3943
+
3944
+ return boxOffset(p,pElem,cp);
38703945
}
38713946
static void lineRender(Pik *p, PElem *pElem){
38723947
int i;
38733948
if( pElem->sw>0.0 ){
38743949
const char *z = "<path d=\"M";
@@ -4041,11 +4116,11 @@
40414116
/* isline */ 1,
40424117
/* eJust */ 0,
40434118
/* xInit */ arrowInit,
40444119
/* xNumProp */ 0,
40454120
/* xChop */ 0,
4046
- /* xOffset */ 0,
4121
+ /* xOffset */ lineOffset,
40474122
/* xFit */ 0,
40484123
/* xRender */ splineRender
40494124
},
40504125
{ /* name */ "box",
40514126
/* isline */ 0,
@@ -4111,11 +4186,11 @@
41114186
/* isline */ 1,
41124187
/* eJust */ 0,
41134188
/* xInit */ lineInit,
41144189
/* xNumProp */ 0,
41154190
/* xChop */ 0,
4116
- /* xOffset */ 0,
4191
+ /* xOffset */ lineOffset,
41174192
/* xFit */ 0,
41184193
/* xRender */ splineRender
41194194
},
41204195
{ /* name */ "move",
41214196
/* isline */ 1,
@@ -4141,11 +4216,11 @@
41414216
/* isline */ 1,
41424217
/* eJust */ 0,
41434218
/* xInit */ splineInit,
41444219
/* xNumProp */ 0,
41454220
/* xChop */ 0,
4146
- /* xOffset */ 0,
4221
+ /* xOffset */ lineOffset,
41474222
/* xFit */ 0,
41484223
/* xRender */ splineRender
41494224
},
41504225
{ /* name */ "text",
41514226
/* isline */ 0,
@@ -4659,18 +4734,18 @@
46594734
46604735
/*
46614736
** Process an "assert( e1 == e2 )" statement. Always return NULL.
46624737
*/
46634738
static PElem *pik_assert(Pik *p, PNum e1, PToken *pEq, PNum e2){
4664
- char zE1[50], zE2[50], zMsg[200];
4739
+ char zE1[100], zE2[100], zMsg[300];
46654740
46664741
/* Convert the numbers to strings using %g for comparison. This
46674742
** limits the precision of the comparison to account for rounding error. */
46684743
snprintf(zE1, sizeof(zE1), "%g", e1); zE1[sizeof(zE1)-1] = 0;
46694744
snprintf(zE2, sizeof(zE2), "%g", e2); zE1[sizeof(zE2)-1] = 0;
46704745
if( strcmp(zE1,zE2)!=0 ){
4671
- snprintf(zMsg, sizeof(zMsg), "%s != %s", zE1, zE2);
4746
+ snprintf(zMsg, sizeof(zMsg), "%.50s != %.50s", zE1, zE2);
46724747
pik_error(p, pEq, zMsg);
46734748
}
46744749
return 0;
46754750
}
46764751
@@ -5858,15 +5933,10 @@
58585933
if( pEdge==0 ){
58595934
return pElem->ptAt;
58605935
}
58615936
pClass = pElem->type;
58625937
if( pEdge->eType==T_EDGEPT || pEdge->eEdge>0 ){
5863
- if( pClass->isLine ){
5864
- pik_error(0, pEdge,
5865
- "line objects have only \"start\" and \"end\" points");
5866
- return pt;
5867
- }
58685938
if( pClass->xOffset==0 ){
58695939
pt = boxOffset(p, pElem, pEdge->eEdge);
58705940
}else{
58715941
pt = pClass->xOffset(p, pElem, pEdge->eEdge);
58725942
}
@@ -6113,11 +6183,15 @@
61136183
pElem->h = pElem->bbox.ne.y - pElem->bbox.sw.y;
61146184
61156185
/* If this is a polygon (if it has the "close" attribute), then
61166186
** adjust the exit point */
61176187
if( pElem->bClose ){
6188
+ /* "closed" lines work like block objects */
61186189
pik_elem_set_exit(p, pElem, pElem->inDir);
6190
+ }else{
6191
+ /* For an open line, the "center" is half way between
6192
+ ** the .start and the .end */
61196193
}
61206194
}else{
61216195
PNum w2 = pElem->w/2.0;
61226196
PNum h2 = pElem->h/2.0;
61236197
pElem->ptEnter = pElem->ptAt;
@@ -6344,11 +6418,11 @@
63446418
{ "bold", 4, T_BOLD, 0, 0 },
63456419
{ "bot", 3, T_EDGEPT, 0, CP_S },
63466420
{ "bottom", 6, T_BOTTOM, 0, CP_S },
63476421
{ "c", 1, T_EDGEPT, 0, CP_C },
63486422
{ "ccw", 3, T_CCW, 0, 0 },
6349
- { "center", 6, T_CENTER, 0, 0 },
6423
+ { "center", 6, T_CENTER, 0, CP_C },
63506424
{ "chop", 4, T_CHOP, 0, 0 },
63516425
{ "close", 5, T_CLOSE, 0, 0 },
63526426
{ "color", 5, T_COLOR, 0, 0 },
63536427
{ "cos", 3, T_FUNC1, FN_COS, 0 },
63546428
{ "cw", 2, T_CW, 0, 0 },
@@ -6505,11 +6579,10 @@
65056579
pToken->eType = T_ERROR;
65066580
return i;
65076581
}
65086582
}else if( z[1]=='/' ){
65096583
for(i=2; z[i]!=0 && z[i]!='\n'; i++){}
6510
- if( z[i]!=0 ) i++;
65116584
pToken->eType = T_WHITESPACE;
65126585
return i;
65136586
}else if( z[1]=='=' ){
65146587
pToken->eType = T_ASSIGN;
65156588
pToken->eCode = T_SLASH;
@@ -6591,11 +6664,11 @@
65916664
pFound = pik_find_word((const char*)z+1, i-1,
65926665
pik_keywords, count(pik_keywords));
65936666
if( pFound && (pFound->eEdge>0 ||
65946667
pFound->eType==T_EDGEPT ||
65956668
pFound->eType==T_START ||
6596
- pFound->eType==T_END)
6669
+ pFound->eType==T_END )
65976670
){
65986671
/* Dot followed by something that is a 2-D place value */
65996672
pToken->eType = T_DOT_E;
66006673
}else if( pFound->eType==T_X || pFound->eType==T_Y ){
66016674
/* Dot followed by "x" or "y" */
@@ -6909,11 +6982,11 @@
69096982
zOut = pikchr(zIn, "pikchr", 0, &w, &h);
69106983
free(zIn);
69116984
if( zOut ){
69126985
if( w<0 ){
69136986
printf("<p>ERROR:</p>\n");
6914
- }else{
6987
+ }else if( bNoEcho==0 ){
69156988
printf("<p>Output size: %d by %d</p>\n", w, h);
69166989
}
69176990
printf("<div style='border:3px solid lightgray;max-width:%dpx'>\n"
69186991
"%s</div>\n",
69196992
w, zOut);
@@ -6923,6 +6996,6 @@
69236996
printf("</body></html>\n");
69246997
return 0;
69256998
}
69266999
#endif /* PIKCHR_SHELL */
69277000
6928
-#line 6953 "pikchr.c"
7001
+#line 7026 "pikchr.c"
69297002
--- src/pikchr.c
+++ src/pikchr.c
@@ -136,31 +136,32 @@
136 typedef struct PPoint PPoint; /* A position in 2-D space */
137 typedef struct PVar PVar; /* script-defined variable */
138 typedef struct PBox PBox; /* A bounding box */
139
140 /* Compass points */
141 #define CP_C 0 /* Center of the object. (Always PElem.ptAt) */
142 #define CP_N 1
143 #define CP_NE 2
144 #define CP_E 3
145 #define CP_SE 4
146 #define CP_S 5
147 #define CP_SW 6
148 #define CP_W 7
149 #define CP_NW 8
 
150
151 /* Heading angles corresponding to compass points */
152 static const PNum pik_hdg_angle[] = {
153 /* C */ 0.0,
154 /* N */ 0.0,
155 /* NE */ 45.0,
156 /* E */ 90.0,
157 /* SE */ 135.0,
158 /* S */ 180.0,
159 /* SW */ 225.0,
160 /* W */ 270.0,
161 /* NW */ 315.0,
 
162 };
163
164 /* Built-in functions */
165 #define FN_ABS 0
166 #define FN_COS 1
@@ -427,11 +428,11 @@
427 static void pik_behind(Pik*,PElem*);
428 static PElem *pik_assert(Pik*,PNum,PToken*,PNum);
429 static PElem *pik_place_assert(Pik*,PPoint*,PToken*,PPoint*);
430
431
432 #line 458 "pikchr.c"
433 /**************** End of %include directives **********************************/
434 /* These constants specify the various numeric values for terminal symbols.
435 ***************** Begin token definitions *************************************/
436 #ifndef T_ID
437 #define T_ID 1
@@ -505,29 +506,30 @@
505 #define T_BIG 69
506 #define T_SMALL 70
507 #define T_AND 71
508 #define T_LT 72
509 #define T_GT 73
510 #define T_WAY 74
511 #define T_BETWEEN 75
512 #define T_THE 76
513 #define T_NTH 77
514 #define T_VERTEX 78
515 #define T_TOP 79
516 #define T_BOTTOM 80
517 #define T_START 81
518 #define T_END 82
519 #define T_IN 83
520 #define T_DOT_U 84
521 #define T_LAST 85
522 #define T_NUMBER 86
523 #define T_FUNC1 87
524 #define T_FUNC2 88
525 #define T_DOT_XY 89
526 #define T_X 90
527 #define T_Y 91
528 #define T_DOT_L 92
 
529 #endif
530 /**************** End token definitions ***************************************/
531
532 /* The next sections is a series of control #defines.
533 ** various aspects of the generated parser.
@@ -583,21 +585,21 @@
583 #ifndef INTERFACE
584 # define INTERFACE 1
585 #endif
586 /************* Begin control #defines *****************************************/
587 #define YYCODETYPE unsigned char
588 #define YYNOCODE 127
589 #define YYACTIONTYPE unsigned short int
590 #define pik_parserTOKENTYPE PToken
591 typedef union {
592 int yyinit;
593 pik_parserTOKENTYPE yy0;
594 PEList* yy42;
595 PPoint yy85;
596 PElem* yy118;
597 int yy156;
598 PNum yy215;
599 } YYMINORTYPE;
600 #ifndef YYSTACKDEPTH
601 #define YYSTACKDEPTH 100
602 #endif
603 #define pik_parserARG_SDECL
@@ -609,22 +611,22 @@
609 #define pik_parserCTX_PDECL ,Pik *p
610 #define pik_parserCTX_PARAM ,p
611 #define pik_parserCTX_FETCH Pik *p=yypParser->p;
612 #define pik_parserCTX_STORE yypParser->p=p;
613 #define YYFALLBACK 1
614 #define YYNSTATE 156
615 #define YYNRULE 151
616 #define YYNRULE_WITH_ACTION 113
617 #define YYNTOKEN 93
618 #define YY_MAX_SHIFT 155
619 #define YY_MIN_SHIFTREDUCE 271
620 #define YY_MAX_SHIFTREDUCE 421
621 #define YY_ERROR_ACTION 422
622 #define YY_ACCEPT_ACTION 423
623 #define YY_NO_ACTION 424
624 #define YY_MIN_REDUCE 425
625 #define YY_MAX_REDUCE 575
626 /************* End control #defines *******************************************/
627 #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
628
629 /* Define the yytestcase() macro to be a no-op if is not already defined
630 ** otherwise.
@@ -687,312 +689,333 @@
687 ** yy_reduce_ofst[] For each state, the offset into yy_action for
688 ** shifting non-terminals after a reduce.
689 ** yy_default[] Default action for each state.
690 **
691 *********** Begin parsing tables **********************************************/
692 #define YY_ACTTAB_COUNT (1178)
693 static const YYACTIONTYPE yy_action[] = {
694 /* 0 */ 550, 535, 425, 18, 536, 537, 111, 426, 433, 24,
695 /* 10 */ 550, 127, 28, 429, 61, 60, 59, 58, 407, 408,
696 /* 20 */ 327, 27, 79, 128, 155, 509, 550, 20, 478, 153,
697 /* 30 */ 119, 306, 307, 6, 5, 34, 554, 33, 4, 68,
698 /* 40 */ 126, 51, 323, 63, 50, 31, 414, 327, 327, 327,
699 /* 50 */ 327, 405, 406, 328, 329, 330, 331, 332, 333, 334,
700 /* 60 */ 335, 450, 28, 359, 552, 74, 552, 392, 393, 394,
701 /* 70 */ 395, 450, 29, 420, 419, 475, 153, 119, 293, 407,
702 /* 80 */ 408, 327, 344, 79, 361, 150, 289, 450, 8, 23,
703 /* 90 */ 71, 22, 306, 307, 6, 5, 34, 80, 33, 4,
704 /* 100 */ 68, 126, 26, 323, 63, 507, 153, 119, 327, 327,
705 /* 110 */ 327, 327, 405, 406, 328, 329, 330, 331, 332, 333,
706 /* 120 */ 334, 335, 449, 415, 416, 417, 418, 81, 110, 427,
707 /* 130 */ 433, 24, 449, 48, 44, 429, 117, 66, 154, 72,
708 /* 140 */ 407, 408, 327, 72, 79, 118, 155, 282, 449, 20,
709 /* 150 */ 21, 59, 58, 306, 307, 6, 5, 34, 30, 33,
710 /* 160 */ 4, 68, 126, 2, 323, 63, 379, 380, 414, 327,
711 /* 170 */ 327, 327, 327, 405, 406, 328, 329, 330, 331, 332,
712 /* 180 */ 333, 334, 335, 376, 414, 62, 56, 57, 512, 153,
713 /* 190 */ 119, 407, 408, 327, 359, 420, 419, 17, 64, 376,
714 /* 200 */ 414, 3, 56, 57, 77, 343, 291, 76, 363, 149,
715 /* 210 */ 359, 420, 419, 17, 404, 376, 414, 66, 56, 57,
716 /* 220 */ 327, 327, 327, 327, 405, 406, 359, 420, 419, 55,
717 /* 230 */ 403, 337, 337, 337, 337, 337, 337, 337, 337, 337,
718 /* 240 */ 337, 362, 151, 420, 419, 415, 416, 417, 418, 510,
719 /* 250 */ 153, 119, 130, 121, 426, 433, 24, 7, 412, 108,
720 /* 260 */ 429, 415, 416, 417, 418, 361, 150, 117, 375, 148,
721 /* 270 */ 147, 155, 135, 423, 20, 108, 134, 415, 416, 417,
722 /* 280 */ 418, 410, 10, 117, 375, 148, 147, 11, 12, 65,
723 /* 290 */ 114, 108, 346, 415, 416, 417, 418, 15, 53, 117,
724 /* 300 */ 375, 148, 147, 138, 136, 61, 60, 59, 58, 1,
725 /* 310 */ 109, 61, 60, 59, 58, 78, 367, 54, 374, 120,
726 /* 320 */ 153, 119, 360, 441, 49, 70, 118, 141, 75, 75,
727 /* 330 */ 140, 139, 480, 113, 120, 153, 119, 40, 365, 146,
728 /* 340 */ 138, 136, 61, 60, 59, 58, 366, 317, 152, 61,
729 /* 350 */ 60, 59, 58, 67, 142, 32, 424, 61, 60, 59,
730 /* 360 */ 58, 49, 424, 424, 424, 14, 13, 140, 139, 384,
731 /* 370 */ 281, 513, 424, 16, 40, 137, 411, 424, 424, 424,
732 /* 380 */ 145, 37, 125, 424, 424, 424, 385, 386, 387, 389,
733 /* 390 */ 77, 424, 291, 76, 424, 392, 393, 394, 395, 424,
734 /* 400 */ 424, 424, 14, 13, 376, 424, 424, 56, 57, 513,
735 /* 410 */ 16, 424, 137, 411, 513, 107, 424, 513, 55, 424,
736 /* 420 */ 424, 284, 285, 286, 376, 288, 424, 56, 57, 376,
737 /* 430 */ 318, 424, 56, 57, 424, 359, 424, 424, 55, 424,
738 /* 440 */ 359, 424, 376, 55, 424, 56, 57, 424, 424, 82,
739 /* 450 */ 424, 424, 424, 359, 424, 424, 55, 424, 120, 153,
740 /* 460 */ 119, 431, 24, 70, 36, 141, 93, 131, 129, 424,
741 /* 470 */ 432, 113, 120, 153, 119, 120, 153, 119, 146, 424,
742 /* 480 */ 108, 19, 376, 314, 424, 56, 57, 424, 117, 375,
743 /* 490 */ 148, 147, 142, 359, 424, 146, 55, 424, 424, 424,
744 /* 500 */ 108, 61, 60, 59, 58, 108, 424, 424, 117, 375,
745 /* 510 */ 148, 147, 414, 117, 375, 148, 147, 38, 108, 424,
746 /* 520 */ 376, 424, 359, 56, 57, 424, 117, 375, 148, 147,
747 /* 530 */ 9, 107, 424, 376, 55, 424, 56, 57, 376, 420,
748 /* 540 */ 419, 56, 57, 424, 359, 424, 424, 42, 424, 359,
749 /* 550 */ 424, 424, 46, 424, 70, 424, 141, 424, 108, 424,
750 /* 560 */ 424, 479, 113, 120, 153, 119, 117, 375, 148, 147,
751 /* 570 */ 70, 424, 141, 61, 60, 59, 58, 473, 113, 120,
752 /* 580 */ 153, 119, 424, 142, 424, 35, 424, 108, 424, 415,
753 /* 590 */ 416, 417, 418, 424, 424, 117, 108, 424, 313, 142,
754 /* 600 */ 61, 60, 59, 58, 117, 375, 148, 147, 424, 108,
755 /* 610 */ 424, 424, 424, 424, 108, 424, 424, 117, 375, 148,
756 /* 620 */ 147, 424, 117, 375, 148, 147, 70, 424, 141, 424,
757 /* 630 */ 424, 424, 39, 463, 113, 120, 153, 119, 70, 424,
758 /* 640 */ 141, 61, 60, 59, 58, 462, 113, 120, 153, 119,
759 /* 650 */ 70, 424, 141, 424, 342, 142, 424, 499, 113, 120,
760 /* 660 */ 153, 119, 70, 424, 141, 424, 424, 142, 424, 133,
761 /* 670 */ 113, 120, 153, 119, 424, 70, 424, 141, 424, 142,
762 /* 680 */ 424, 424, 506, 113, 120, 153, 119, 70, 424, 141,
763 /* 690 */ 83, 142, 424, 424, 505, 113, 120, 153, 119, 120,
764 /* 700 */ 153, 119, 424, 70, 142, 141, 424, 424, 424, 424,
765 /* 710 */ 504, 113, 120, 153, 119, 70, 142, 141, 86, 146,
766 /* 720 */ 424, 424, 503, 113, 120, 153, 119, 120, 153, 119,
767 /* 730 */ 424, 70, 142, 141, 424, 424, 424, 424, 502, 113,
768 /* 740 */ 120, 153, 119, 70, 142, 141, 424, 146, 424, 424,
769 /* 750 */ 501, 113, 120, 153, 119, 70, 424, 141, 424, 424,
770 /* 760 */ 142, 424, 143, 113, 120, 153, 119, 70, 424, 141,
771 /* 770 */ 424, 424, 142, 424, 144, 113, 120, 153, 119, 424,
772 /* 780 */ 69, 424, 141, 424, 142, 424, 424, 112, 113, 120,
773 /* 790 */ 153, 119, 70, 424, 141, 424, 142, 424, 424, 132,
774 /* 800 */ 113, 120, 153, 119, 424, 424, 424, 424, 70, 142,
775 /* 810 */ 141, 424, 424, 424, 109, 459, 113, 120, 153, 119,
776 /* 820 */ 87, 142, 141, 120, 153, 119, 424, 441, 124, 120,
777 /* 830 */ 153, 119, 424, 545, 424, 424, 73, 142, 61, 60,
778 /* 840 */ 59, 58, 302, 146, 141, 120, 153, 119, 424, 142,
779 /* 850 */ 123, 122, 153, 119, 424, 424, 424, 444, 424, 25,
780 /* 860 */ 424, 424, 424, 109, 424, 146, 424, 424, 424, 424,
781 /* 870 */ 109, 123, 120, 153, 119, 424, 455, 424, 424, 120,
782 /* 880 */ 153, 119, 424, 430, 61, 60, 59, 58, 61, 60,
783 /* 890 */ 59, 58, 146, 424, 424, 424, 424, 374, 424, 146,
784 /* 900 */ 99, 374, 424, 41, 424, 424, 100, 45, 424, 120,
785 /* 910 */ 153, 119, 101, 424, 424, 120, 153, 119, 424, 424,
786 /* 920 */ 424, 120, 153, 119, 424, 424, 424, 102, 424, 146,
787 /* 930 */ 424, 424, 424, 424, 88, 146, 120, 153, 119, 424,
788 /* 940 */ 424, 146, 89, 120, 153, 119, 424, 424, 84, 424,
789 /* 950 */ 424, 120, 153, 119, 424, 103, 146, 120, 153, 119,
790 /* 960 */ 424, 424, 424, 146, 120, 153, 119, 424, 424, 90,
791 /* 970 */ 424, 146, 91, 424, 424, 424, 424, 146, 120, 153,
792 /* 980 */ 119, 120, 153, 119, 146, 85, 61, 60, 59, 58,
793 /* 990 */ 424, 424, 424, 424, 120, 153, 119, 104, 146, 424,
794 /* 1000 */ 424, 146, 424, 424, 424, 43, 120, 153, 119, 92,
795 /* 1010 */ 424, 424, 424, 105, 146, 424, 424, 424, 120, 153,
796 /* 1020 */ 119, 106, 120, 153, 119, 94, 146, 424, 424, 424,
797 /* 1030 */ 120, 153, 119, 424, 120, 153, 119, 424, 146, 424,
798 /* 1040 */ 424, 424, 146, 424, 424, 424, 95, 424, 424, 96,
799 /* 1050 */ 146, 424, 424, 97, 146, 120, 153, 119, 120, 153,
800 /* 1060 */ 119, 98, 120, 153, 119, 424, 61, 60, 59, 58,
801 /* 1070 */ 120, 153, 119, 424, 424, 146, 527, 424, 146, 341,
802 /* 1080 */ 424, 424, 146, 526, 424, 120, 153, 119, 424, 424,
803 /* 1090 */ 146, 424, 120, 153, 119, 424, 424, 424, 424, 525,
804 /* 1100 */ 424, 424, 424, 424, 524, 146, 424, 115, 120, 153,
805 /* 1110 */ 119, 116, 146, 120, 153, 119, 120, 153, 119, 424,
806 /* 1120 */ 120, 153, 119, 61, 60, 59, 58, 424, 146, 424,
807 /* 1130 */ 424, 424, 424, 146, 424, 424, 146, 424, 424, 424,
808 /* 1140 */ 146, 424, 47, 424, 424, 61, 60, 59, 58, 297,
809 /* 1150 */ 61, 60, 59, 58, 61, 60, 59, 58, 61, 60,
810 /* 1160 */ 59, 58, 424, 378, 61, 60, 59, 58, 424, 424,
811 /* 1170 */ 424, 377, 424, 52, 424, 424, 424, 374,
 
 
 
 
 
 
 
 
 
812 };
813 static const YYCODETYPE yy_lookahead[] = {
814 /* 0 */ 0, 98, 0, 125, 101, 102, 93, 94, 95, 96,
815 /* 10 */ 10, 99, 10, 100, 4, 5, 6, 7, 18, 19,
816 /* 20 */ 20, 120, 22, 99, 111, 99, 26, 114, 106, 107,
817 /* 30 */ 108, 31, 32, 33, 34, 35, 124, 37, 38, 39,
818 /* 40 */ 40, 98, 42, 43, 101, 102, 2, 47, 48, 49,
819 /* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
820 /* 60 */ 60, 0, 10, 12, 121, 122, 123, 27, 28, 29,
821 /* 70 */ 30, 10, 100, 29, 30, 106, 107, 108, 26, 18,
822 /* 80 */ 19, 20, 17, 22, 24, 25, 23, 26, 23, 119,
823 /* 90 */ 46, 117, 31, 32, 33, 34, 35, 109, 37, 38,
824 /* 100 */ 39, 40, 120, 42, 43, 106, 107, 108, 47, 48,
825 /* 110 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
826 /* 120 */ 59, 60, 0, 79, 80, 81, 82, 109, 77, 94,
827 /* 130 */ 95, 96, 10, 4, 5, 100, 85, 3, 78, 46,
828 /* 140 */ 18, 19, 20, 46, 22, 85, 111, 17, 26, 114,
829 /* 150 */ 15, 6, 7, 31, 32, 33, 34, 35, 16, 37,
830 /* 160 */ 38, 39, 40, 38, 42, 43, 90, 91, 2, 47,
831 /* 170 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
832 /* 180 */ 58, 59, 60, 1, 2, 92, 4, 5, 106, 107,
833 /* 190 */ 108, 18, 19, 20, 12, 29, 30, 15, 41, 1,
834 /* 200 */ 2, 38, 4, 5, 22, 17, 24, 25, 24, 25,
835 /* 210 */ 12, 29, 30, 15, 39, 1, 2, 83, 4, 5,
836 /* 220 */ 47, 48, 49, 50, 51, 52, 12, 29, 30, 15,
837 /* 230 */ 39, 61, 62, 63, 64, 65, 66, 67, 68, 69,
838 /* 240 */ 70, 24, 25, 29, 30, 79, 80, 81, 82, 106,
839 /* 250 */ 107, 108, 45, 93, 94, 95, 96, 71, 75, 77,
840 /* 260 */ 100, 79, 80, 81, 82, 24, 25, 85, 86, 87,
841 /* 270 */ 88, 111, 76, 113, 114, 77, 74, 79, 80, 81,
842 /* 280 */ 82, 75, 3, 85, 86, 87, 88, 3, 3, 3,
843 /* 290 */ 89, 77, 73, 79, 80, 81, 82, 23, 15, 85,
844 /* 300 */ 86, 87, 88, 2, 3, 4, 5, 6, 7, 13,
845 /* 310 */ 97, 4, 5, 6, 7, 8, 26, 15, 17, 106,
846 /* 320 */ 107, 108, 12, 110, 23, 97, 85, 99, 115, 116,
847 /* 330 */ 29, 30, 104, 105, 106, 107, 108, 36, 26, 126,
848 /* 340 */ 2, 3, 4, 5, 6, 7, 26, 2, 84, 4,
849 /* 350 */ 5, 6, 7, 3, 126, 11, 127, 4, 5, 6,
850 /* 360 */ 7, 23, 127, 127, 127, 64, 65, 29, 30, 1,
851 /* 370 */ 17, 46, 127, 72, 36, 74, 75, 127, 127, 127,
852 /* 380 */ 12, 36, 14, 127, 127, 127, 18, 19, 20, 21,
853 /* 390 */ 22, 127, 24, 25, 127, 27, 28, 29, 30, 127,
854 /* 400 */ 127, 127, 64, 65, 1, 127, 127, 4, 5, 84,
855 /* 410 */ 72, 127, 74, 75, 89, 12, 127, 92, 15, 127,
856 /* 420 */ 127, 18, 19, 20, 1, 22, 127, 4, 5, 1,
857 /* 430 */ 2, 127, 4, 5, 127, 12, 127, 127, 15, 127,
858 /* 440 */ 12, 127, 1, 15, 127, 4, 5, 127, 127, 97,
859 /* 450 */ 127, 127, 127, 12, 127, 127, 15, 127, 106, 107,
860 /* 460 */ 108, 95, 96, 97, 36, 99, 97, 44, 45, 127,
861 /* 470 */ 104, 105, 106, 107, 108, 106, 107, 108, 126, 127,
862 /* 480 */ 77, 112, 1, 2, 127, 4, 5, 127, 85, 86,
863 /* 490 */ 87, 88, 126, 12, 127, 126, 15, 127, 127, 127,
864 /* 500 */ 77, 4, 5, 6, 7, 77, 127, 127, 85, 86,
865 /* 510 */ 87, 88, 2, 85, 86, 87, 88, 36, 77, 127,
866 /* 520 */ 1, 127, 12, 4, 5, 127, 85, 86, 87, 88,
867 /* 530 */ 33, 12, 127, 1, 15, 127, 4, 5, 1, 29,
868 /* 540 */ 30, 4, 5, 127, 12, 127, 127, 15, 127, 12,
869 /* 550 */ 127, 127, 15, 127, 97, 127, 99, 127, 77, 127,
870 /* 560 */ 127, 104, 105, 106, 107, 108, 85, 86, 87, 88,
871 /* 570 */ 97, 127, 99, 4, 5, 6, 7, 104, 105, 106,
872 /* 580 */ 107, 108, 127, 126, 127, 16, 127, 77, 127, 79,
873 /* 590 */ 80, 81, 82, 127, 127, 85, 77, 127, 2, 126,
874 /* 600 */ 4, 5, 6, 7, 85, 86, 87, 88, 127, 77,
875 /* 610 */ 127, 127, 127, 127, 77, 127, 127, 85, 86, 87,
876 /* 620 */ 88, 127, 85, 86, 87, 88, 97, 127, 99, 127,
877 /* 630 */ 127, 127, 36, 104, 105, 106, 107, 108, 97, 127,
878 /* 640 */ 99, 4, 5, 6, 7, 104, 105, 106, 107, 108,
879 /* 650 */ 97, 127, 99, 127, 17, 126, 127, 104, 105, 106,
880 /* 660 */ 107, 108, 97, 127, 99, 127, 127, 126, 127, 104,
881 /* 670 */ 105, 106, 107, 108, 127, 97, 127, 99, 127, 126,
882 /* 680 */ 127, 127, 104, 105, 106, 107, 108, 97, 127, 99,
883 /* 690 */ 97, 126, 127, 127, 104, 105, 106, 107, 108, 106,
884 /* 700 */ 107, 108, 127, 97, 126, 99, 127, 127, 127, 127,
885 /* 710 */ 104, 105, 106, 107, 108, 97, 126, 99, 97, 126,
886 /* 720 */ 127, 127, 104, 105, 106, 107, 108, 106, 107, 108,
887 /* 730 */ 127, 97, 126, 99, 127, 127, 127, 127, 104, 105,
888 /* 740 */ 106, 107, 108, 97, 126, 99, 127, 126, 127, 127,
889 /* 750 */ 104, 105, 106, 107, 108, 97, 127, 99, 127, 127,
890 /* 760 */ 126, 127, 104, 105, 106, 107, 108, 97, 127, 99,
891 /* 770 */ 127, 127, 126, 127, 104, 105, 106, 107, 108, 127,
892 /* 780 */ 97, 127, 99, 127, 126, 127, 127, 104, 105, 106,
893 /* 790 */ 107, 108, 97, 127, 99, 127, 126, 127, 127, 104,
894 /* 800 */ 105, 106, 107, 108, 127, 127, 127, 127, 97, 126,
895 /* 810 */ 99, 127, 127, 127, 97, 104, 105, 106, 107, 108,
896 /* 820 */ 97, 126, 99, 106, 107, 108, 127, 110, 105, 106,
897 /* 830 */ 107, 108, 127, 116, 127, 127, 97, 126, 4, 5,
898 /* 840 */ 6, 7, 8, 126, 99, 106, 107, 108, 127, 126,
899 /* 850 */ 105, 106, 107, 108, 127, 127, 127, 118, 127, 120,
900 /* 860 */ 127, 127, 127, 97, 127, 126, 127, 127, 127, 127,
901 /* 870 */ 97, 126, 106, 107, 108, 127, 110, 127, 127, 106,
902 /* 880 */ 107, 108, 127, 110, 4, 5, 6, 7, 4, 5,
903 /* 890 */ 6, 7, 126, 127, 127, 127, 127, 17, 127, 126,
904 /* 900 */ 97, 17, 127, 23, 127, 127, 97, 23, 127, 106,
905 /* 910 */ 107, 108, 97, 127, 127, 106, 107, 108, 127, 127,
906 /* 920 */ 127, 106, 107, 108, 127, 127, 127, 97, 127, 126,
907 /* 930 */ 127, 127, 127, 127, 97, 126, 106, 107, 108, 127,
908 /* 940 */ 127, 126, 97, 106, 107, 108, 127, 127, 97, 127,
909 /* 950 */ 127, 106, 107, 108, 127, 97, 126, 106, 107, 108,
910 /* 960 */ 127, 127, 127, 126, 106, 107, 108, 127, 127, 97,
911 /* 970 */ 127, 126, 97, 127, 127, 127, 127, 126, 106, 107,
912 /* 980 */ 108, 106, 107, 108, 126, 97, 4, 5, 6, 7,
913 /* 990 */ 127, 127, 127, 127, 106, 107, 108, 97, 126, 127,
914 /* 1000 */ 127, 126, 127, 127, 127, 23, 106, 107, 108, 97,
915 /* 1010 */ 127, 127, 127, 97, 126, 127, 127, 127, 106, 107,
916 /* 1020 */ 108, 97, 106, 107, 108, 97, 126, 127, 127, 127,
917 /* 1030 */ 106, 107, 108, 127, 106, 107, 108, 127, 126, 127,
918 /* 1040 */ 127, 127, 126, 127, 127, 127, 97, 127, 127, 97,
919 /* 1050 */ 126, 127, 127, 97, 126, 106, 107, 108, 106, 107,
920 /* 1060 */ 108, 97, 106, 107, 108, 127, 4, 5, 6, 7,
921 /* 1070 */ 106, 107, 108, 127, 127, 126, 97, 127, 126, 17,
922 /* 1080 */ 127, 127, 126, 97, 127, 106, 107, 108, 127, 127,
923 /* 1090 */ 126, 127, 106, 107, 108, 127, 127, 127, 127, 97,
924 /* 1100 */ 127, 127, 127, 127, 97, 126, 127, 97, 106, 107,
925 /* 1110 */ 108, 97, 126, 106, 107, 108, 106, 107, 108, 127,
926 /* 1120 */ 106, 107, 108, 4, 5, 6, 7, 127, 126, 127,
927 /* 1130 */ 127, 127, 127, 126, 127, 127, 126, 127, 127, 127,
928 /* 1140 */ 126, 127, 23, 127, 127, 4, 5, 6, 7, 8,
929 /* 1150 */ 4, 5, 6, 7, 4, 5, 6, 7, 4, 5,
930 /* 1160 */ 6, 7, 127, 17, 4, 5, 6, 7, 127, 127,
931 /* 1170 */ 127, 17, 127, 23, 127, 127, 127, 17, 127, 127,
932 /* 1180 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
933 /* 1190 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
934 /* 1200 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
935 /* 1210 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
936 /* 1220 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
937 /* 1230 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
938 /* 1240 */ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
939 /* 1250 */ 127, 127, 127, 127, 127, 127, 127, 127, 93, 93,
940 /* 1260 */ 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
941 /* 1270 */ 93,
 
 
 
 
 
 
 
 
 
942 };
943 #define YY_SHIFT_COUNT (155)
944 #define YY_SHIFT_MIN (0)
945 #define YY_SHIFT_MAX (1160)
946 static const unsigned short int yy_shift_ofst[] = {
947 /* 0 */ 368, 182, 198, 198, 198, 198, 198, 198, 198, 198,
948 /* 10 */ 198, 198, 198, 198, 198, 198, 198, 198, 198, 198,
949 /* 20 */ 403, 214, 403, 368, 441, 0, 61, 122, 368, 423,
950 /* 30 */ 510, 519, 519, 428, 481, 441, 441, 441, 441, 441,
951 /* 40 */ 441, 441, 441, 441, 532, 441, 441, 441, 537, 441,
952 /* 50 */ 441, 441, 441, 441, 441, 441, 441, 441, 441, 441,
953 /* 60 */ 441, 441, 173, 51, 51, 51, 51, 51, 44, 301,
954 /* 70 */ 338, 166, 166, 307, 40, 63, 1178, 1178, 1178, 1178,
955 /* 80 */ 170, 170, 345, 596, 880, 884, 353, 569, 497, 637,
956 /* 90 */ 982, 1062, 1119, 834, 1141, 1146, 1150, 1154, 1160, 10,
957 /* 100 */ 10, 10, 10, 10, 10, 10, 10, 325, 60, 10,
958 /* 110 */ 241, 52, 65, 129, 76, 145, 145, 184, 217, 134,
959 /* 120 */ 93, 2, 97, 130, 142, 135, 157, 125, 163, 175,
960 /* 130 */ 191, 207, 186, 188, 183, 202, 196, 206, 279, 284,
961 /* 140 */ 285, 286, 201, 219, 274, 296, 201, 283, 302, 290,
962 /* 150 */ 312, 320, 310, 264, 350, 344,
 
963 };
964 #define YY_REDUCE_COUNT (79)
965 #define YY_REDUCE_MIN (-122)
966 #define YY_REDUCE_MAX (1014)
967 static const short yy_reduce_ofst[] = {
968 /* 0 */ 160, 366, 228, 457, 473, 529, 541, 553, 565, 578,
969 /* 10 */ 590, 606, 618, 634, 646, 658, 670, 683, 695, 711,
970 /* 20 */ 213, 723, 717, -87, 739, -57, -57, -57, 35, 369,
971 /* 30 */ 745, 766, 773, 352, 593, 621, 803, 809, 815, 830,
972 /* 40 */ 837, 845, 851, 858, 872, 875, 888, 900, 912, 916,
973 /* 50 */ 924, 928, 949, 952, 956, 964, 979, 986, 1002, 1007,
974 /* 60 */ 1010, 1014, -97, -78, -31, -1, 82, 143, -88, -122,
975 /* 70 */ -122, -76, -74, -99, -28, -26, -30, -12, -18, 18,
 
976 };
977 static const YYACTIONTYPE yy_default[] = {
978 /* 0 */ 428, 422, 422, 422, 422, 422, 422, 422, 422, 422,
979 /* 10 */ 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
980 /* 20 */ 422, 422, 422, 428, 551, 556, 556, 556, 428, 458,
981 /* 30 */ 422, 422, 422, 555, 464, 422, 422, 422, 422, 422,
982 /* 40 */ 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
983 /* 50 */ 454, 422, 422, 422, 422, 422, 422, 422, 422, 422,
984 /* 60 */ 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
985 /* 70 */ 422, 422, 422, 551, 422, 434, 448, 490, 551, 490,
986 /* 80 */ 446, 476, 422, 422, 422, 422, 422, 422, 422, 422,
987 /* 90 */ 422, 422, 422, 457, 452, 422, 422, 422, 422, 470,
988 /* 100 */ 469, 466, 465, 494, 493, 492, 453, 437, 422, 542,
989 /* 110 */ 422, 422, 422, 563, 422, 523, 522, 518, 422, 511,
990 /* 120 */ 508, 422, 508, 422, 422, 422, 474, 422, 422, 422,
991 /* 130 */ 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
992 /* 140 */ 422, 422, 567, 422, 422, 422, 422, 422, 422, 422,
993 /* 150 */ 422, 422, 422, 575, 422, 422,
 
994 };
995 /********** End of lemon-generated parsing tables *****************************/
996
997 /* The next table maps tokens (terminal symbols) into fallback tokens.
998 ** If a construct like the following:
@@ -1082,10 +1105,11 @@
1082 0, /* BIG => nothing */
1083 0, /* SMALL => nothing */
1084 0, /* AND => nothing */
1085 0, /* LT => nothing */
1086 0, /* GT => nothing */
 
1087 0, /* WAY => nothing */
1088 0, /* BETWEEN => nothing */
1089 0, /* THE => nothing */
1090 0, /* NTH => nothing */
1091 0, /* VERTEX => nothing */
@@ -1263,63 +1287,64 @@
1263 /* 69 */ "BIG",
1264 /* 70 */ "SMALL",
1265 /* 71 */ "AND",
1266 /* 72 */ "LT",
1267 /* 73 */ "GT",
1268 /* 74 */ "WAY",
1269 /* 75 */ "BETWEEN",
1270 /* 76 */ "THE",
1271 /* 77 */ "NTH",
1272 /* 78 */ "VERTEX",
1273 /* 79 */ "TOP",
1274 /* 80 */ "BOTTOM",
1275 /* 81 */ "START",
1276 /* 82 */ "END",
1277 /* 83 */ "IN",
1278 /* 84 */ "DOT_U",
1279 /* 85 */ "LAST",
1280 /* 86 */ "NUMBER",
1281 /* 87 */ "FUNC1",
1282 /* 88 */ "FUNC2",
1283 /* 89 */ "DOT_XY",
1284 /* 90 */ "X",
1285 /* 91 */ "Y",
1286 /* 92 */ "DOT_L",
1287 /* 93 */ "element_list",
1288 /* 94 */ "element",
1289 /* 95 */ "unnamed_element",
1290 /* 96 */ "basetype",
1291 /* 97 */ "expr",
1292 /* 98 */ "numproperty",
1293 /* 99 */ "edge",
1294 /* 100 */ "direction",
1295 /* 101 */ "dashproperty",
1296 /* 102 */ "colorproperty",
1297 /* 103 */ "locproperty",
1298 /* 104 */ "position",
1299 /* 105 */ "place",
1300 /* 106 */ "object",
1301 /* 107 */ "objectname",
1302 /* 108 */ "nth",
1303 /* 109 */ "textposition",
1304 /* 110 */ "rvalue",
1305 /* 111 */ "lvalue",
1306 /* 112 */ "even",
1307 /* 113 */ "document",
1308 /* 114 */ "print",
1309 /* 115 */ "prlist",
1310 /* 116 */ "pritem",
1311 /* 117 */ "prsep",
1312 /* 118 */ "attribute_list",
1313 /* 119 */ "savelist",
1314 /* 120 */ "alist",
1315 /* 121 */ "attribute",
1316 /* 122 */ "go",
1317 /* 123 */ "boolproperty",
1318 /* 124 */ "withclause",
1319 /* 125 */ "between",
1320 /* 126 */ "place2",
 
1321 };
1322 #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
1323
1324 #ifndef NDEBUG
1325 /* For tracing reduce actions, the names of all rules are required.
@@ -1403,81 +1428,85 @@
1403 /* 75 */ "position ::= expr LT position COMMA position GT",
1404 /* 76 */ "position ::= expr ABOVE position",
1405 /* 77 */ "position ::= expr BELOW position",
1406 /* 78 */ "position ::= expr LEFT OF position",
1407 /* 79 */ "position ::= expr RIGHT OF position",
1408 /* 80 */ "position ::= expr EDGEPT OF position",
1409 /* 81 */ "position ::= expr HEADING expr FROM position",
1410 /* 82 */ "place ::= edge OF object",
1411 /* 83 */ "place2 ::= object",
1412 /* 84 */ "place2 ::= object DOT_E edge",
1413 /* 85 */ "place2 ::= NTH VERTEX OF object",
1414 /* 86 */ "object ::= nth",
1415 /* 87 */ "object ::= nth OF|IN object",
1416 /* 88 */ "objectname ::= PLACENAME",
1417 /* 89 */ "objectname ::= objectname DOT_U PLACENAME",
1418 /* 90 */ "nth ::= NTH CLASSNAME",
1419 /* 91 */ "nth ::= NTH LAST CLASSNAME",
1420 /* 92 */ "nth ::= LAST CLASSNAME",
1421 /* 93 */ "nth ::= LAST",
1422 /* 94 */ "nth ::= NTH LB RB",
1423 /* 95 */ "nth ::= NTH LAST LB RB",
1424 /* 96 */ "nth ::= LAST LB RB",
1425 /* 97 */ "expr ::= expr PLUS expr",
1426 /* 98 */ "expr ::= expr MINUS expr",
1427 /* 99 */ "expr ::= expr STAR expr",
1428 /* 100 */ "expr ::= expr SLASH expr",
1429 /* 101 */ "expr ::= MINUS expr",
1430 /* 102 */ "expr ::= PLUS expr",
1431 /* 103 */ "expr ::= LP expr RP",
1432 /* 104 */ "expr ::= NUMBER",
1433 /* 105 */ "expr ::= ID",
1434 /* 106 */ "expr ::= FUNC1 LP expr RP",
1435 /* 107 */ "expr ::= FUNC2 LP expr COMMA expr RP",
1436 /* 108 */ "expr ::= place2 DOT_XY X",
1437 /* 109 */ "expr ::= place2 DOT_XY Y",
1438 /* 110 */ "expr ::= object DOT_L numproperty",
1439 /* 111 */ "expr ::= object DOT_L dashproperty",
1440 /* 112 */ "expr ::= object DOT_L colorproperty",
1441 /* 113 */ "lvalue ::= ID",
1442 /* 114 */ "lvalue ::= FILL",
1443 /* 115 */ "lvalue ::= COLOR",
1444 /* 116 */ "lvalue ::= THICKNESS",
1445 /* 117 */ "rvalue ::= expr",
1446 /* 118 */ "print ::= PRINT",
1447 /* 119 */ "prlist ::= pritem",
1448 /* 120 */ "prlist ::= prlist prsep pritem",
1449 /* 121 */ "direction ::= UP",
1450 /* 122 */ "direction ::= DOWN",
1451 /* 123 */ "direction ::= LEFT",
1452 /* 124 */ "direction ::= RIGHT",
1453 /* 125 */ "attribute_list ::= alist",
1454 /* 126 */ "alist ::=",
1455 /* 127 */ "alist ::= alist attribute",
1456 /* 128 */ "attribute ::= boolproperty",
1457 /* 129 */ "attribute ::= WITH withclause",
1458 /* 130 */ "go ::= GO",
1459 /* 131 */ "go ::=",
1460 /* 132 */ "even ::= UNTIL EVEN WITH",
1461 /* 133 */ "even ::= EVEN WITH",
1462 /* 134 */ "dashproperty ::= DOTTED",
1463 /* 135 */ "dashproperty ::= DASHED",
1464 /* 136 */ "colorproperty ::= FILL",
1465 /* 137 */ "colorproperty ::= COLOR",
1466 /* 138 */ "position ::= place",
1467 /* 139 */ "between ::= WAY BETWEEN",
1468 /* 140 */ "between ::= BETWEEN",
1469 /* 141 */ "between ::= OF THE WAY BETWEEN",
1470 /* 142 */ "place ::= place2",
1471 /* 143 */ "edge ::= EDGEPT",
1472 /* 144 */ "edge ::= TOP",
1473 /* 145 */ "edge ::= BOTTOM",
1474 /* 146 */ "edge ::= START",
1475 /* 147 */ "edge ::= END",
1476 /* 148 */ "edge ::= RIGHT",
1477 /* 149 */ "edge ::= LEFT",
1478 /* 150 */ "object ::= objectname",
 
 
 
 
1479 };
1480 #endif /* NDEBUG */
1481
1482
1483 #if YYSTACKDEPTH<=0
@@ -1599,24 +1628,24 @@
1599 ** Note: during a reduce, the only symbols destroyed are those
1600 ** which appear on the RHS of the rule, but which are *not* used
1601 ** inside the C code.
1602 */
1603 /********* Begin destructor definitions ***************************************/
1604 case 93: /* element_list */
1605 {
1606 #line 447 "pikchr.y"
1607 pik_elist_free(p,(yypminor->yy42));
1608 #line 1633 "pikchr.c"
1609 }
1610 break;
1611 case 94: /* element */
1612 case 95: /* unnamed_element */
1613 case 96: /* basetype */
1614 {
1615 #line 449 "pikchr.y"
1616 pik_elem_free(p,(yypminor->yy118));
1617 #line 1642 "pikchr.c"
1618 }
1619 break;
1620 /********* End destructor definitions *****************************************/
1621 default: break; /* If no destructor action specified: do nothing */
1622 }
@@ -1830,14 +1859,14 @@
1830 #endif
1831 while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
1832 /* Here code is inserted which will execute if the parser
1833 ** stack every overflows */
1834 /******** Begin %stack_overflow code ******************************************/
1835 #line 478 "pikchr.y"
1836
1837 pik_error(p, 0, "parser stack overflow");
1838 #line 1863 "pikchr.c"
1839 /******** End %stack_overflow code ********************************************/
1840 pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */
1841 pik_parserCTX_STORE
1842 }
1843
@@ -1905,161 +1934,165 @@
1905 }
1906
1907 /* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side
1908 ** of that rule */
1909 static const YYCODETYPE yyRuleInfoLhs[] = {
1910 113, /* (0) document ::= element_list */
1911 93, /* (1) element_list ::= element */
1912 93, /* (2) element_list ::= element_list EOL element */
1913 94, /* (3) element ::= */
1914 94, /* (4) element ::= direction */
1915 94, /* (5) element ::= lvalue ASSIGN rvalue */
1916 94, /* (6) element ::= PLACENAME COLON unnamed_element */
1917 94, /* (7) element ::= PLACENAME COLON position */
1918 94, /* (8) element ::= unnamed_element */
1919 94, /* (9) element ::= print prlist */
1920 94, /* (10) element ::= ASSERT LP expr EQ expr RP */
1921 94, /* (11) element ::= ASSERT LP place EQ place RP */
1922 110, /* (12) rvalue ::= PLACENAME */
1923 116, /* (13) pritem ::= FILL */
1924 116, /* (14) pritem ::= COLOR */
1925 116, /* (15) pritem ::= THICKNESS */
1926 116, /* (16) pritem ::= rvalue */
1927 116, /* (17) pritem ::= STRING */
1928 117, /* (18) prsep ::= COMMA */
1929 95, /* (19) unnamed_element ::= basetype attribute_list */
1930 96, /* (20) basetype ::= CLASSNAME */
1931 96, /* (21) basetype ::= STRING textposition */
1932 96, /* (22) basetype ::= LB savelist element_list RB */
1933 119, /* (23) savelist ::= */
1934 118, /* (24) attribute_list ::= expr alist */
1935 118, /* (25) attribute_list ::= expr PERCENT alist */
1936 121, /* (26) attribute ::= numproperty expr PERCENT */
1937 121, /* (27) attribute ::= numproperty expr */
1938 121, /* (28) attribute ::= dashproperty expr */
1939 121, /* (29) attribute ::= dashproperty */
1940 121, /* (30) attribute ::= colorproperty rvalue */
1941 121, /* (31) attribute ::= go direction expr PERCENT */
1942 121, /* (32) attribute ::= go direction expr */
1943 121, /* (33) attribute ::= go direction */
1944 121, /* (34) attribute ::= go direction even position */
1945 121, /* (35) attribute ::= CLOSE */
1946 121, /* (36) attribute ::= CHOP */
1947 121, /* (37) attribute ::= FROM position */
1948 121, /* (38) attribute ::= TO position */
1949 121, /* (39) attribute ::= THEN */
1950 121, /* (40) attribute ::= THEN expr HEADING expr */
1951 121, /* (41) attribute ::= THEN HEADING expr */
1952 121, /* (42) attribute ::= THEN expr EDGEPT */
1953 121, /* (43) attribute ::= THEN EDGEPT */
1954 121, /* (44) attribute ::= GO expr HEADING expr */
1955 121, /* (45) attribute ::= GO HEADING expr */
1956 121, /* (46) attribute ::= GO expr EDGEPT */
1957 121, /* (47) attribute ::= GO EDGEPT */
1958 121, /* (48) attribute ::= AT position */
1959 121, /* (49) attribute ::= SAME */
1960 121, /* (50) attribute ::= SAME AS object */
1961 121, /* (51) attribute ::= STRING textposition */
1962 121, /* (52) attribute ::= FIT */
1963 121, /* (53) attribute ::= BEHIND object */
1964 124, /* (54) withclause ::= DOT_E edge AT position */
1965 124, /* (55) withclause ::= edge AT position */
1966 98, /* (56) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
1967 123, /* (57) boolproperty ::= CW */
1968 123, /* (58) boolproperty ::= CCW */
1969 123, /* (59) boolproperty ::= LARROW */
1970 123, /* (60) boolproperty ::= RARROW */
1971 123, /* (61) boolproperty ::= LRARROW */
1972 123, /* (62) boolproperty ::= INVIS */
1973 123, /* (63) boolproperty ::= THICK */
1974 123, /* (64) boolproperty ::= THIN */
1975 109, /* (65) textposition ::= */
1976 109, /* (66) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
1977 104, /* (67) position ::= expr COMMA expr */
1978 104, /* (68) position ::= place PLUS expr COMMA expr */
1979 104, /* (69) position ::= place MINUS expr COMMA expr */
1980 104, /* (70) position ::= place PLUS LP expr COMMA expr RP */
1981 104, /* (71) position ::= place MINUS LP expr COMMA expr RP */
1982 104, /* (72) position ::= LP position COMMA position RP */
1983 104, /* (73) position ::= LP position RP */
1984 104, /* (74) position ::= expr between position AND position */
1985 104, /* (75) position ::= expr LT position COMMA position GT */
1986 104, /* (76) position ::= expr ABOVE position */
1987 104, /* (77) position ::= expr BELOW position */
1988 104, /* (78) position ::= expr LEFT OF position */
1989 104, /* (79) position ::= expr RIGHT OF position */
1990 104, /* (80) position ::= expr EDGEPT OF position */
1991 104, /* (81) position ::= expr HEADING expr FROM position */
1992 105, /* (82) place ::= edge OF object */
1993 126, /* (83) place2 ::= object */
1994 126, /* (84) place2 ::= object DOT_E edge */
1995 126, /* (85) place2 ::= NTH VERTEX OF object */
1996 106, /* (86) object ::= nth */
1997 106, /* (87) object ::= nth OF|IN object */
1998 107, /* (88) objectname ::= PLACENAME */
1999 107, /* (89) objectname ::= objectname DOT_U PLACENAME */
2000 108, /* (90) nth ::= NTH CLASSNAME */
2001 108, /* (91) nth ::= NTH LAST CLASSNAME */
2002 108, /* (92) nth ::= LAST CLASSNAME */
2003 108, /* (93) nth ::= LAST */
2004 108, /* (94) nth ::= NTH LB RB */
2005 108, /* (95) nth ::= NTH LAST LB RB */
2006 108, /* (96) nth ::= LAST LB RB */
2007 97, /* (97) expr ::= expr PLUS expr */
2008 97, /* (98) expr ::= expr MINUS expr */
2009 97, /* (99) expr ::= expr STAR expr */
2010 97, /* (100) expr ::= expr SLASH expr */
2011 97, /* (101) expr ::= MINUS expr */
2012 97, /* (102) expr ::= PLUS expr */
2013 97, /* (103) expr ::= LP expr RP */
2014 97, /* (104) expr ::= NUMBER */
2015 97, /* (105) expr ::= ID */
2016 97, /* (106) expr ::= FUNC1 LP expr RP */
2017 97, /* (107) expr ::= FUNC2 LP expr COMMA expr RP */
2018 97, /* (108) expr ::= place2 DOT_XY X */
2019 97, /* (109) expr ::= place2 DOT_XY Y */
2020 97, /* (110) expr ::= object DOT_L numproperty */
2021 97, /* (111) expr ::= object DOT_L dashproperty */
2022 97, /* (112) expr ::= object DOT_L colorproperty */
2023 111, /* (113) lvalue ::= ID */
2024 111, /* (114) lvalue ::= FILL */
2025 111, /* (115) lvalue ::= COLOR */
2026 111, /* (116) lvalue ::= THICKNESS */
2027 110, /* (117) rvalue ::= expr */
2028 114, /* (118) print ::= PRINT */
2029 115, /* (119) prlist ::= pritem */
2030 115, /* (120) prlist ::= prlist prsep pritem */
2031 100, /* (121) direction ::= UP */
2032 100, /* (122) direction ::= DOWN */
2033 100, /* (123) direction ::= LEFT */
2034 100, /* (124) direction ::= RIGHT */
2035 118, /* (125) attribute_list ::= alist */
2036 120, /* (126) alist ::= */
2037 120, /* (127) alist ::= alist attribute */
2038 121, /* (128) attribute ::= boolproperty */
2039 121, /* (129) attribute ::= WITH withclause */
2040 122, /* (130) go ::= GO */
2041 122, /* (131) go ::= */
2042 112, /* (132) even ::= UNTIL EVEN WITH */
2043 112, /* (133) even ::= EVEN WITH */
2044 101, /* (134) dashproperty ::= DOTTED */
2045 101, /* (135) dashproperty ::= DASHED */
2046 102, /* (136) colorproperty ::= FILL */
2047 102, /* (137) colorproperty ::= COLOR */
2048 104, /* (138) position ::= place */
2049 125, /* (139) between ::= WAY BETWEEN */
2050 125, /* (140) between ::= BETWEEN */
2051 125, /* (141) between ::= OF THE WAY BETWEEN */
2052 105, /* (142) place ::= place2 */
2053 99, /* (143) edge ::= EDGEPT */
2054 99, /* (144) edge ::= TOP */
2055 99, /* (145) edge ::= BOTTOM */
2056 99, /* (146) edge ::= START */
2057 99, /* (147) edge ::= END */
2058 99, /* (148) edge ::= RIGHT */
2059 99, /* (149) edge ::= LEFT */
2060 106, /* (150) object ::= objectname */
 
 
 
 
2061 };
2062
2063 /* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
2064 ** of symbols on the right-hand side of that rule. */
2065 static const signed char yyRuleInfoNRhs[] = {
@@ -2141,81 +2174,85 @@
2141 -6, /* (75) position ::= expr LT position COMMA position GT */
2142 -3, /* (76) position ::= expr ABOVE position */
2143 -3, /* (77) position ::= expr BELOW position */
2144 -4, /* (78) position ::= expr LEFT OF position */
2145 -4, /* (79) position ::= expr RIGHT OF position */
2146 -4, /* (80) position ::= expr EDGEPT OF position */
2147 -5, /* (81) position ::= expr HEADING expr FROM position */
2148 -3, /* (82) place ::= edge OF object */
2149 -1, /* (83) place2 ::= object */
2150 -3, /* (84) place2 ::= object DOT_E edge */
2151 -4, /* (85) place2 ::= NTH VERTEX OF object */
2152 -1, /* (86) object ::= nth */
2153 -3, /* (87) object ::= nth OF|IN object */
2154 -1, /* (88) objectname ::= PLACENAME */
2155 -3, /* (89) objectname ::= objectname DOT_U PLACENAME */
2156 -2, /* (90) nth ::= NTH CLASSNAME */
2157 -3, /* (91) nth ::= NTH LAST CLASSNAME */
2158 -2, /* (92) nth ::= LAST CLASSNAME */
2159 -1, /* (93) nth ::= LAST */
2160 -3, /* (94) nth ::= NTH LB RB */
2161 -4, /* (95) nth ::= NTH LAST LB RB */
2162 -3, /* (96) nth ::= LAST LB RB */
2163 -3, /* (97) expr ::= expr PLUS expr */
2164 -3, /* (98) expr ::= expr MINUS expr */
2165 -3, /* (99) expr ::= expr STAR expr */
2166 -3, /* (100) expr ::= expr SLASH expr */
2167 -2, /* (101) expr ::= MINUS expr */
2168 -2, /* (102) expr ::= PLUS expr */
2169 -3, /* (103) expr ::= LP expr RP */
2170 -1, /* (104) expr ::= NUMBER */
2171 -1, /* (105) expr ::= ID */
2172 -4, /* (106) expr ::= FUNC1 LP expr RP */
2173 -6, /* (107) expr ::= FUNC2 LP expr COMMA expr RP */
2174 -3, /* (108) expr ::= place2 DOT_XY X */
2175 -3, /* (109) expr ::= place2 DOT_XY Y */
2176 -3, /* (110) expr ::= object DOT_L numproperty */
2177 -3, /* (111) expr ::= object DOT_L dashproperty */
2178 -3, /* (112) expr ::= object DOT_L colorproperty */
2179 -1, /* (113) lvalue ::= ID */
2180 -1, /* (114) lvalue ::= FILL */
2181 -1, /* (115) lvalue ::= COLOR */
2182 -1, /* (116) lvalue ::= THICKNESS */
2183 -1, /* (117) rvalue ::= expr */
2184 -1, /* (118) print ::= PRINT */
2185 -1, /* (119) prlist ::= pritem */
2186 -3, /* (120) prlist ::= prlist prsep pritem */
2187 -1, /* (121) direction ::= UP */
2188 -1, /* (122) direction ::= DOWN */
2189 -1, /* (123) direction ::= LEFT */
2190 -1, /* (124) direction ::= RIGHT */
2191 -1, /* (125) attribute_list ::= alist */
2192 0, /* (126) alist ::= */
2193 -2, /* (127) alist ::= alist attribute */
2194 -1, /* (128) attribute ::= boolproperty */
2195 -2, /* (129) attribute ::= WITH withclause */
2196 -1, /* (130) go ::= GO */
2197 0, /* (131) go ::= */
2198 -3, /* (132) even ::= UNTIL EVEN WITH */
2199 -2, /* (133) even ::= EVEN WITH */
2200 -1, /* (134) dashproperty ::= DOTTED */
2201 -1, /* (135) dashproperty ::= DASHED */
2202 -1, /* (136) colorproperty ::= FILL */
2203 -1, /* (137) colorproperty ::= COLOR */
2204 -1, /* (138) position ::= place */
2205 -2, /* (139) between ::= WAY BETWEEN */
2206 -1, /* (140) between ::= BETWEEN */
2207 -4, /* (141) between ::= OF THE WAY BETWEEN */
2208 -1, /* (142) place ::= place2 */
2209 -1, /* (143) edge ::= EDGEPT */
2210 -1, /* (144) edge ::= TOP */
2211 -1, /* (145) edge ::= BOTTOM */
2212 -1, /* (146) edge ::= START */
2213 -1, /* (147) edge ::= END */
2214 -1, /* (148) edge ::= RIGHT */
2215 -1, /* (149) edge ::= LEFT */
2216 -1, /* (150) object ::= objectname */
 
 
 
 
2217 };
2218
2219 static void yy_accept(yyParser*); /* Forward Declaration */
2220
2221 /*
@@ -2302,627 +2339,646 @@
2302 ** break;
2303 */
2304 /********** Begin reduce actions **********************************************/
2305 YYMINORTYPE yylhsminor;
2306 case 0: /* document ::= element_list */
2307 #line 482 "pikchr.y"
2308 {pik_render(p,yymsp[0].minor.yy42);}
2309 #line 2334 "pikchr.c"
2310 break;
2311 case 1: /* element_list ::= element */
2312 #line 485 "pikchr.y"
2313 { yylhsminor.yy42 = pik_elist_append(p,0,yymsp[0].minor.yy118); }
2314 #line 2339 "pikchr.c"
2315 yymsp[0].minor.yy42 = yylhsminor.yy42;
2316 break;
2317 case 2: /* element_list ::= element_list EOL element */
2318 #line 487 "pikchr.y"
2319 { yylhsminor.yy42 = pik_elist_append(p,yymsp[-2].minor.yy42,yymsp[0].minor.yy118); }
2320 #line 2345 "pikchr.c"
2321 yymsp[-2].minor.yy42 = yylhsminor.yy42;
2322 break;
2323 case 3: /* element ::= */
2324 #line 490 "pikchr.y"
2325 { yymsp[1].minor.yy118 = 0; }
2326 #line 2351 "pikchr.c"
2327 break;
2328 case 4: /* element ::= direction */
2329 #line 491 "pikchr.y"
2330 { pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy118=0; }
2331 #line 2356 "pikchr.c"
2332 yymsp[0].minor.yy118 = yylhsminor.yy118;
2333 break;
2334 case 5: /* element ::= lvalue ASSIGN rvalue */
2335 #line 492 "pikchr.y"
2336 {pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy215,&yymsp[-1].minor.yy0); yylhsminor.yy118=0;}
2337 #line 2362 "pikchr.c"
2338 yymsp[-2].minor.yy118 = yylhsminor.yy118;
2339 break;
2340 case 6: /* element ::= PLACENAME COLON unnamed_element */
2341 #line 494 "pikchr.y"
2342 { yylhsminor.yy118 = yymsp[0].minor.yy118; pik_elem_setname(p,yymsp[0].minor.yy118,&yymsp[-2].minor.yy0); }
2343 #line 2368 "pikchr.c"
2344 yymsp[-2].minor.yy118 = yylhsminor.yy118;
2345 break;
2346 case 7: /* element ::= PLACENAME COLON position */
2347 #line 496 "pikchr.y"
2348 { yylhsminor.yy118 = pik_elem_new(p,0,0,0);
2349 if(yylhsminor.yy118){ yylhsminor.yy118->ptAt = yymsp[0].minor.yy85; pik_elem_setname(p,yylhsminor.yy118,&yymsp[-2].minor.yy0); }}
2350 #line 2375 "pikchr.c"
2351 yymsp[-2].minor.yy118 = yylhsminor.yy118;
2352 break;
2353 case 8: /* element ::= unnamed_element */
2354 #line 498 "pikchr.y"
2355 {yylhsminor.yy118 = yymsp[0].minor.yy118;}
2356 #line 2381 "pikchr.c"
2357 yymsp[0].minor.yy118 = yylhsminor.yy118;
2358 break;
2359 case 9: /* element ::= print prlist */
2360 #line 499 "pikchr.y"
2361 {pik_append(p,"<br>\n",5); yymsp[-1].minor.yy118=0;}
2362 #line 2387 "pikchr.c"
2363 break;
2364 case 10: /* element ::= ASSERT LP expr EQ expr RP */
2365 #line 504 "pikchr.y"
2366 {yymsp[-5].minor.yy118=pik_assert(p,yymsp[-3].minor.yy215,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy215);}
2367 #line 2392 "pikchr.c"
2368 break;
2369 case 11: /* element ::= ASSERT LP place EQ place RP */
2370 #line 506 "pikchr.y"
2371 {yymsp[-5].minor.yy118=pik_place_assert(p,&yymsp[-3].minor.yy85,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy85);}
2372 #line 2397 "pikchr.c"
2373 break;
2374 case 12: /* rvalue ::= PLACENAME */
2375 #line 517 "pikchr.y"
2376 {yylhsminor.yy215 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2377 #line 2402 "pikchr.c"
2378 yymsp[0].minor.yy215 = yylhsminor.yy215;
2379 break;
2380 case 13: /* pritem ::= FILL */
2381 case 14: /* pritem ::= COLOR */ yytestcase(yyruleno==14);
2382 case 15: /* pritem ::= THICKNESS */ yytestcase(yyruleno==15);
2383 #line 522 "pikchr.y"
2384 {pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));}
2385 #line 2410 "pikchr.c"
2386 break;
2387 case 16: /* pritem ::= rvalue */
2388 #line 525 "pikchr.y"
2389 {pik_append_num(p,"",yymsp[0].minor.yy215);}
2390 #line 2415 "pikchr.c"
2391 break;
2392 case 17: /* pritem ::= STRING */
2393 #line 526 "pikchr.y"
2394 {pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2395 #line 2420 "pikchr.c"
2396 break;
2397 case 18: /* prsep ::= COMMA */
2398 #line 527 "pikchr.y"
2399 {pik_append(p, " ", 1);}
2400 #line 2425 "pikchr.c"
2401 break;
2402 case 19: /* unnamed_element ::= basetype attribute_list */
2403 #line 530 "pikchr.y"
2404 {yylhsminor.yy118 = yymsp[-1].minor.yy118; pik_after_adding_attributes(p,yylhsminor.yy118);}
2405 #line 2430 "pikchr.c"
2406 yymsp[-1].minor.yy118 = yylhsminor.yy118;
2407 break;
2408 case 20: /* basetype ::= CLASSNAME */
2409 #line 532 "pikchr.y"
2410 {yylhsminor.yy118 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2411 #line 2436 "pikchr.c"
2412 yymsp[0].minor.yy118 = yylhsminor.yy118;
2413 break;
2414 case 21: /* basetype ::= STRING textposition */
2415 #line 534 "pikchr.y"
2416 {yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy156; yylhsminor.yy118 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2417 #line 2442 "pikchr.c"
2418 yymsp[-1].minor.yy118 = yylhsminor.yy118;
2419 break;
2420 case 22: /* basetype ::= LB savelist element_list RB */
2421 #line 536 "pikchr.y"
2422 { p->list = yymsp[-2].minor.yy42; yymsp[-3].minor.yy118 = pik_elem_new(p,0,0,yymsp[-1].minor.yy42); if(yymsp[-3].minor.yy118) yymsp[-3].minor.yy118->errTok = yymsp[0].minor.yy0; }
2423 #line 2448 "pikchr.c"
2424 break;
2425 case 23: /* savelist ::= */
2426 #line 541 "pikchr.y"
2427 {yymsp[1].minor.yy42 = p->list; p->list = 0;}
2428 #line 2453 "pikchr.c"
2429 break;
2430 case 24: /* attribute_list ::= expr alist */
2431 #line 548 "pikchr.y"
2432 { pik_add_direction(p,0,&yymsp[-1].minor.yy215,0);}
2433 #line 2458 "pikchr.c"
2434 break;
2435 case 25: /* attribute_list ::= expr PERCENT alist */
2436 #line 549 "pikchr.y"
2437 { pik_add_direction(p,0,&yymsp[-2].minor.yy215,1);}
2438 #line 2463 "pikchr.c"
2439 break;
2440 case 26: /* attribute ::= numproperty expr PERCENT */
2441 #line 554 "pikchr.y"
2442 { pik_set_numprop(p,&yymsp[-2].minor.yy0,0.0,yymsp[-1].minor.yy215/100.0); }
2443 #line 2468 "pikchr.c"
2444 break;
2445 case 27: /* attribute ::= numproperty expr */
2446 case 30: /* attribute ::= colorproperty rvalue */ yytestcase(yyruleno==30);
2447 #line 555 "pikchr.y"
2448 { pik_set_numprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy215,0.0); }
2449 #line 2474 "pikchr.c"
2450 break;
2451 case 28: /* attribute ::= dashproperty expr */
2452 #line 556 "pikchr.y"
2453 { pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy215); }
2454 #line 2479 "pikchr.c"
2455 break;
2456 case 29: /* attribute ::= dashproperty */
2457 #line 557 "pikchr.y"
2458 { pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2459 #line 2484 "pikchr.c"
2460 break;
2461 case 31: /* attribute ::= go direction expr PERCENT */
2462 #line 560 "pikchr.y"
2463 { pik_add_direction(p,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy215,1);}
2464 #line 2489 "pikchr.c"
2465 break;
2466 case 32: /* attribute ::= go direction expr */
2467 #line 561 "pikchr.y"
2468 { pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy215,0);}
2469 #line 2494 "pikchr.c"
2470 break;
2471 case 33: /* attribute ::= go direction */
2472 #line 562 "pikchr.y"
2473 { pik_add_direction(p,&yymsp[0].minor.yy0,0,0); }
2474 #line 2499 "pikchr.c"
2475 break;
2476 case 34: /* attribute ::= go direction even position */
2477 #line 563 "pikchr.y"
2478 {pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy85);}
2479 #line 2504 "pikchr.c"
2480 break;
2481 case 35: /* attribute ::= CLOSE */
2482 #line 564 "pikchr.y"
2483 { pik_close_path(p,&yymsp[0].minor.yy0); }
2484 #line 2509 "pikchr.c"
2485 break;
2486 case 36: /* attribute ::= CHOP */
2487 #line 565 "pikchr.y"
2488 { p->cur->bChop = 1; }
2489 #line 2514 "pikchr.c"
2490 break;
2491 case 37: /* attribute ::= FROM position */
2492 #line 566 "pikchr.y"
2493 { pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy85); }
2494 #line 2519 "pikchr.c"
2495 break;
2496 case 38: /* attribute ::= TO position */
2497 #line 567 "pikchr.y"
2498 { pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy85); }
2499 #line 2524 "pikchr.c"
2500 break;
2501 case 39: /* attribute ::= THEN */
2502 #line 568 "pikchr.y"
2503 { pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2504 #line 2529 "pikchr.c"
2505 break;
2506 case 40: /* attribute ::= THEN expr HEADING expr */
2507 case 44: /* attribute ::= GO expr HEADING expr */ yytestcase(yyruleno==44);
2508 #line 570 "pikchr.y"
2509 {pik_move_hdg(p,&yymsp[-2].minor.yy215,&yymsp[-1].minor.yy0,yymsp[0].minor.yy215,0,&yymsp[-3].minor.yy0);}
2510 #line 2535 "pikchr.c"
2511 break;
2512 case 41: /* attribute ::= THEN HEADING expr */
2513 case 45: /* attribute ::= GO HEADING expr */ yytestcase(yyruleno==45);
2514 #line 571 "pikchr.y"
2515 {pik_move_hdg(p,0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy215,0,&yymsp[-2].minor.yy0);}
2516 #line 2541 "pikchr.c"
2517 break;
2518 case 42: /* attribute ::= THEN expr EDGEPT */
2519 case 46: /* attribute ::= GO expr EDGEPT */ yytestcase(yyruleno==46);
2520 #line 572 "pikchr.y"
2521 {pik_move_hdg(p,&yymsp[-1].minor.yy215,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);}
2522 #line 2547 "pikchr.c"
2523 break;
2524 case 43: /* attribute ::= THEN EDGEPT */
2525 case 47: /* attribute ::= GO EDGEPT */ yytestcase(yyruleno==47);
2526 #line 573 "pikchr.y"
2527 {pik_move_hdg(p,0,0,0,&yymsp[0].minor.yy0,&yymsp[-1].minor.yy0);}
2528 #line 2553 "pikchr.c"
2529 break;
2530 case 48: /* attribute ::= AT position */
2531 #line 579 "pikchr.y"
2532 { pik_set_at(p,0,&yymsp[0].minor.yy85,&yymsp[-1].minor.yy0); }
2533 #line 2558 "pikchr.c"
2534 break;
2535 case 49: /* attribute ::= SAME */
2536 #line 581 "pikchr.y"
2537 {pik_same(p,0,&yymsp[0].minor.yy0);}
2538 #line 2563 "pikchr.c"
2539 break;
2540 case 50: /* attribute ::= SAME AS object */
2541 #line 582 "pikchr.y"
2542 {pik_same(p,yymsp[0].minor.yy118,&yymsp[-2].minor.yy0);}
2543 #line 2568 "pikchr.c"
2544 break;
2545 case 51: /* attribute ::= STRING textposition */
2546 #line 583 "pikchr.y"
2547 {pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy156);}
2548 #line 2573 "pikchr.c"
2549 break;
2550 case 52: /* attribute ::= FIT */
2551 #line 584 "pikchr.y"
2552 {pik_size_to_fit(p,&yymsp[0].minor.yy0); }
2553 #line 2578 "pikchr.c"
2554 break;
2555 case 53: /* attribute ::= BEHIND object */
2556 #line 585 "pikchr.y"
2557 {pik_behind(p,yymsp[0].minor.yy118);}
2558 #line 2583 "pikchr.c"
2559 break;
2560 case 54: /* withclause ::= DOT_E edge AT position */
2561 case 55: /* withclause ::= edge AT position */ yytestcase(yyruleno==55);
2562 #line 593 "pikchr.y"
2563 { pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy85,&yymsp[-1].minor.yy0); }
2564 #line 2589 "pikchr.c"
2565 break;
2566 case 56: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2567 #line 597 "pikchr.y"
2568 {yylhsminor.yy0 = yymsp[0].minor.yy0;}
2569 #line 2594 "pikchr.c"
2570 yymsp[0].minor.yy0 = yylhsminor.yy0;
2571 break;
2572 case 57: /* boolproperty ::= CW */
2573 #line 608 "pikchr.y"
2574 {p->cur->cw = 1;}
2575 #line 2600 "pikchr.c"
2576 break;
2577 case 58: /* boolproperty ::= CCW */
2578 #line 609 "pikchr.y"
2579 {p->cur->cw = 0;}
2580 #line 2605 "pikchr.c"
2581 break;
2582 case 59: /* boolproperty ::= LARROW */
2583 #line 610 "pikchr.y"
2584 {p->cur->larrow=1; p->cur->rarrow=0; }
2585 #line 2610 "pikchr.c"
2586 break;
2587 case 60: /* boolproperty ::= RARROW */
2588 #line 611 "pikchr.y"
2589 {p->cur->larrow=0; p->cur->rarrow=1; }
2590 #line 2615 "pikchr.c"
2591 break;
2592 case 61: /* boolproperty ::= LRARROW */
2593 #line 612 "pikchr.y"
2594 {p->cur->larrow=1; p->cur->rarrow=1; }
2595 #line 2620 "pikchr.c"
2596 break;
2597 case 62: /* boolproperty ::= INVIS */
2598 #line 613 "pikchr.y"
2599 {p->cur->sw = 0.0;}
2600 #line 2625 "pikchr.c"
2601 break;
2602 case 63: /* boolproperty ::= THICK */
2603 #line 614 "pikchr.y"
2604 {p->cur->sw *= 1.5;}
2605 #line 2630 "pikchr.c"
2606 break;
2607 case 64: /* boolproperty ::= THIN */
2608 #line 615 "pikchr.y"
2609 {p->cur->sw *= 0.67;}
2610 #line 2635 "pikchr.c"
2611 break;
2612 case 65: /* textposition ::= */
2613 #line 617 "pikchr.y"
2614 {yymsp[1].minor.yy156 = 0;}
2615 #line 2640 "pikchr.c"
2616 break;
2617 case 66: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2618 #line 620 "pikchr.y"
2619 {yylhsminor.yy156 = pik_text_position(p,yymsp[-1].minor.yy156,&yymsp[0].minor.yy0);}
2620 #line 2645 "pikchr.c"
2621 yymsp[-1].minor.yy156 = yylhsminor.yy156;
2622 break;
2623 case 67: /* position ::= expr COMMA expr */
2624 #line 623 "pikchr.y"
2625 {yylhsminor.yy85.x=yymsp[-2].minor.yy215; yylhsminor.yy85.y=yymsp[0].minor.yy215;}
2626 #line 2651 "pikchr.c"
2627 yymsp[-2].minor.yy85 = yylhsminor.yy85;
2628 break;
2629 case 68: /* position ::= place PLUS expr COMMA expr */
2630 #line 625 "pikchr.y"
2631 {yylhsminor.yy85.x=yymsp[-4].minor.yy85.x+yymsp[-2].minor.yy215; yylhsminor.yy85.y=yymsp[-4].minor.yy85.y+yymsp[0].minor.yy215;}
2632 #line 2657 "pikchr.c"
2633 yymsp[-4].minor.yy85 = yylhsminor.yy85;
2634 break;
2635 case 69: /* position ::= place MINUS expr COMMA expr */
2636 #line 626 "pikchr.y"
2637 {yylhsminor.yy85.x=yymsp[-4].minor.yy85.x-yymsp[-2].minor.yy215; yylhsminor.yy85.y=yymsp[-4].minor.yy85.y-yymsp[0].minor.yy215;}
2638 #line 2663 "pikchr.c"
2639 yymsp[-4].minor.yy85 = yylhsminor.yy85;
2640 break;
2641 case 70: /* position ::= place PLUS LP expr COMMA expr RP */
2642 #line 628 "pikchr.y"
2643 {yylhsminor.yy85.x=yymsp[-6].minor.yy85.x+yymsp[-3].minor.yy215; yylhsminor.yy85.y=yymsp[-6].minor.yy85.y+yymsp[-1].minor.yy215;}
2644 #line 2669 "pikchr.c"
2645 yymsp[-6].minor.yy85 = yylhsminor.yy85;
2646 break;
2647 case 71: /* position ::= place MINUS LP expr COMMA expr RP */
2648 #line 630 "pikchr.y"
2649 {yylhsminor.yy85.x=yymsp[-6].minor.yy85.x-yymsp[-3].minor.yy215; yylhsminor.yy85.y=yymsp[-6].minor.yy85.y-yymsp[-1].minor.yy215;}
2650 #line 2675 "pikchr.c"
2651 yymsp[-6].minor.yy85 = yylhsminor.yy85;
2652 break;
2653 case 72: /* position ::= LP position COMMA position RP */
2654 #line 631 "pikchr.y"
2655 {yymsp[-4].minor.yy85.x=yymsp[-3].minor.yy85.x; yymsp[-4].minor.yy85.y=yymsp[-1].minor.yy85.y;}
2656 #line 2681 "pikchr.c"
2657 break;
2658 case 73: /* position ::= LP position RP */
2659 #line 632 "pikchr.y"
2660 {yymsp[-2].minor.yy85=yymsp[-1].minor.yy85;}
2661 #line 2686 "pikchr.c"
2662 break;
2663 case 74: /* position ::= expr between position AND position */
2664 #line 634 "pikchr.y"
2665 {yylhsminor.yy85 = pik_position_between(p,yymsp[-4].minor.yy215,yymsp[-2].minor.yy85,yymsp[0].minor.yy85);}
2666 #line 2691 "pikchr.c"
2667 yymsp[-4].minor.yy85 = yylhsminor.yy85;
2668 break;
2669 case 75: /* position ::= expr LT position COMMA position GT */
2670 #line 636 "pikchr.y"
2671 {yylhsminor.yy85 = pik_position_between(p,yymsp[-5].minor.yy215,yymsp[-3].minor.yy85,yymsp[-1].minor.yy85);}
2672 #line 2697 "pikchr.c"
2673 yymsp[-5].minor.yy85 = yylhsminor.yy85;
2674 break;
2675 case 76: /* position ::= expr ABOVE position */
2676 #line 637 "pikchr.y"
2677 {yylhsminor.yy85=yymsp[0].minor.yy85; yylhsminor.yy85.y += yymsp[-2].minor.yy215;}
2678 #line 2703 "pikchr.c"
2679 yymsp[-2].minor.yy85 = yylhsminor.yy85;
2680 break;
2681 case 77: /* position ::= expr BELOW position */
2682 #line 638 "pikchr.y"
2683 {yylhsminor.yy85=yymsp[0].minor.yy85; yylhsminor.yy85.y -= yymsp[-2].minor.yy215;}
2684 #line 2709 "pikchr.c"
2685 yymsp[-2].minor.yy85 = yylhsminor.yy85;
2686 break;
2687 case 78: /* position ::= expr LEFT OF position */
2688 #line 639 "pikchr.y"
2689 {yylhsminor.yy85=yymsp[0].minor.yy85; yylhsminor.yy85.x -= yymsp[-3].minor.yy215;}
2690 #line 2715 "pikchr.c"
2691 yymsp[-3].minor.yy85 = yylhsminor.yy85;
2692 break;
2693 case 79: /* position ::= expr RIGHT OF position */
2694 #line 640 "pikchr.y"
2695 {yylhsminor.yy85=yymsp[0].minor.yy85; yylhsminor.yy85.x += yymsp[-3].minor.yy215;}
2696 #line 2721 "pikchr.c"
2697 yymsp[-3].minor.yy85 = yylhsminor.yy85;
2698 break;
2699 case 80: /* position ::= expr EDGEPT OF position */
2700 #line 642 "pikchr.y"
2701 {yylhsminor.yy85 = pik_position_at_hdg(p,yymsp[-3].minor.yy215,&yymsp[-2].minor.yy0,yymsp[0].minor.yy85);}
2702 #line 2727 "pikchr.c"
2703 yymsp[-3].minor.yy85 = yylhsminor.yy85;
2704 break;
2705 case 81: /* position ::= expr HEADING expr FROM position */
2706 #line 644 "pikchr.y"
2707 {yylhsminor.yy85 = pik_position_at_angle(p,yymsp[-4].minor.yy215,yymsp[-2].minor.yy215,yymsp[0].minor.yy85);}
2708 #line 2733 "pikchr.c"
2709 yymsp[-4].minor.yy85 = yylhsminor.yy85;
2710 break;
2711 case 82: /* place ::= edge OF object */
2712 #line 656 "pikchr.y"
2713 {yylhsminor.yy85 = pik_place_of_elem(p,yymsp[0].minor.yy118,&yymsp[-2].minor.yy0);}
2714 #line 2739 "pikchr.c"
2715 yymsp[-2].minor.yy85 = yylhsminor.yy85;
2716 break;
2717 case 83: /* place2 ::= object */
2718 #line 657 "pikchr.y"
2719 {yylhsminor.yy85 = pik_place_of_elem(p,yymsp[0].minor.yy118,0);}
2720 #line 2745 "pikchr.c"
2721 yymsp[0].minor.yy85 = yylhsminor.yy85;
2722 break;
2723 case 84: /* place2 ::= object DOT_E edge */
2724 #line 658 "pikchr.y"
2725 {yylhsminor.yy85 = pik_place_of_elem(p,yymsp[-2].minor.yy118,&yymsp[0].minor.yy0);}
2726 #line 2751 "pikchr.c"
2727 yymsp[-2].minor.yy85 = yylhsminor.yy85;
2728 break;
2729 case 85: /* place2 ::= NTH VERTEX OF object */
2730 #line 659 "pikchr.y"
2731 {yylhsminor.yy85 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy118);}
2732 #line 2757 "pikchr.c"
2733 yymsp[-3].minor.yy85 = yylhsminor.yy85;
2734 break;
2735 case 86: /* object ::= nth */
2736 #line 670 "pikchr.y"
2737 {yylhsminor.yy118 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2738 #line 2763 "pikchr.c"
2739 yymsp[0].minor.yy118 = yylhsminor.yy118;
2740 break;
2741 case 87: /* object ::= nth OF|IN object */
2742 #line 671 "pikchr.y"
2743 {yylhsminor.yy118 = pik_find_nth(p,yymsp[0].minor.yy118,&yymsp[-2].minor.yy0);}
2744 #line 2769 "pikchr.c"
2745 yymsp[-2].minor.yy118 = yylhsminor.yy118;
2746 break;
2747 case 88: /* objectname ::= PLACENAME */
2748 #line 673 "pikchr.y"
2749 {yylhsminor.yy118 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2750 #line 2775 "pikchr.c"
2751 yymsp[0].minor.yy118 = yylhsminor.yy118;
2752 break;
2753 case 89: /* objectname ::= objectname DOT_U PLACENAME */
2754 #line 675 "pikchr.y"
2755 {yylhsminor.yy118 = pik_find_byname(p,yymsp[-2].minor.yy118,&yymsp[0].minor.yy0);}
2756 #line 2781 "pikchr.c"
2757 yymsp[-2].minor.yy118 = yylhsminor.yy118;
2758 break;
2759 case 90: /* nth ::= NTH CLASSNAME */
2760 #line 677 "pikchr.y"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2761 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2762 #line 2787 "pikchr.c"
2763 yymsp[-1].minor.yy0 = yylhsminor.yy0;
2764 break;
2765 case 91: /* nth ::= NTH LAST CLASSNAME */
2766 #line 678 "pikchr.y"
2767 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2768 #line 2793 "pikchr.c"
2769 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2770 break;
2771 case 92: /* nth ::= LAST CLASSNAME */
2772 #line 679 "pikchr.y"
2773 {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2774 #line 2799 "pikchr.c"
2775 break;
2776 case 93: /* nth ::= LAST */
2777 #line 680 "pikchr.y"
2778 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2779 #line 2804 "pikchr.c"
2780 yymsp[0].minor.yy0 = yylhsminor.yy0;
2781 break;
2782 case 94: /* nth ::= NTH LB RB */
2783 #line 681 "pikchr.y"
2784 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2785 #line 2810 "pikchr.c"
2786 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2787 break;
2788 case 95: /* nth ::= NTH LAST LB RB */
2789 #line 682 "pikchr.y"
2790 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2791 #line 2816 "pikchr.c"
2792 yymsp[-3].minor.yy0 = yylhsminor.yy0;
2793 break;
2794 case 96: /* nth ::= LAST LB RB */
2795 #line 683 "pikchr.y"
2796 {yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2797 #line 2822 "pikchr.c"
2798 break;
2799 case 97: /* expr ::= expr PLUS expr */
2800 #line 685 "pikchr.y"
2801 {yylhsminor.yy215=yymsp[-2].minor.yy215+yymsp[0].minor.yy215;}
2802 #line 2827 "pikchr.c"
2803 yymsp[-2].minor.yy215 = yylhsminor.yy215;
2804 break;
2805 case 98: /* expr ::= expr MINUS expr */
2806 #line 686 "pikchr.y"
2807 {yylhsminor.yy215=yymsp[-2].minor.yy215-yymsp[0].minor.yy215;}
2808 #line 2833 "pikchr.c"
2809 yymsp[-2].minor.yy215 = yylhsminor.yy215;
2810 break;
2811 case 99: /* expr ::= expr STAR expr */
2812 #line 687 "pikchr.y"
2813 {yylhsminor.yy215=yymsp[-2].minor.yy215*yymsp[0].minor.yy215;}
2814 #line 2839 "pikchr.c"
2815 yymsp[-2].minor.yy215 = yylhsminor.yy215;
2816 break;
2817 case 100: /* expr ::= expr SLASH expr */
2818 #line 688 "pikchr.y"
2819 {
2820 if( yymsp[0].minor.yy215==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy215 = 0.0; }
2821 else{ yylhsminor.yy215 = yymsp[-2].minor.yy215/yymsp[0].minor.yy215; }
2822 }
2823 #line 2848 "pikchr.c"
2824 yymsp[-2].minor.yy215 = yylhsminor.yy215;
2825 break;
2826 case 101: /* expr ::= MINUS expr */
2827 #line 692 "pikchr.y"
2828 {yymsp[-1].minor.yy215=-yymsp[0].minor.yy215;}
2829 #line 2854 "pikchr.c"
2830 break;
2831 case 102: /* expr ::= PLUS expr */
2832 #line 693 "pikchr.y"
2833 {yymsp[-1].minor.yy215=yymsp[0].minor.yy215;}
2834 #line 2859 "pikchr.c"
2835 break;
2836 case 103: /* expr ::= LP expr RP */
2837 #line 694 "pikchr.y"
2838 {yymsp[-2].minor.yy215=yymsp[-1].minor.yy215;}
2839 #line 2864 "pikchr.c"
2840 break;
2841 case 104: /* expr ::= NUMBER */
2842 #line 695 "pikchr.y"
2843 {yylhsminor.yy215=pik_atof(p,&yymsp[0].minor.yy0);}
2844 #line 2869 "pikchr.c"
2845 yymsp[0].minor.yy215 = yylhsminor.yy215;
2846 break;
2847 case 105: /* expr ::= ID */
2848 #line 696 "pikchr.y"
2849 {yylhsminor.yy215=pik_get_var(p,&yymsp[0].minor.yy0);}
2850 #line 2875 "pikchr.c"
2851 yymsp[0].minor.yy215 = yylhsminor.yy215;
2852 break;
2853 case 106: /* expr ::= FUNC1 LP expr RP */
2854 #line 697 "pikchr.y"
2855 {yylhsminor.yy215 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy215,0.0);}
2856 #line 2881 "pikchr.c"
2857 yymsp[-3].minor.yy215 = yylhsminor.yy215;
2858 break;
2859 case 107: /* expr ::= FUNC2 LP expr COMMA expr RP */
2860 #line 698 "pikchr.y"
2861 {yylhsminor.yy215 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy215,yymsp[-1].minor.yy215);}
2862 #line 2887 "pikchr.c"
2863 yymsp[-5].minor.yy215 = yylhsminor.yy215;
2864 break;
2865 case 108: /* expr ::= place2 DOT_XY X */
2866 #line 699 "pikchr.y"
2867 {yylhsminor.yy215 = yymsp[-2].minor.yy85.x;}
2868 #line 2893 "pikchr.c"
2869 yymsp[-2].minor.yy215 = yylhsminor.yy215;
2870 break;
2871 case 109: /* expr ::= place2 DOT_XY Y */
2872 #line 700 "pikchr.y"
2873 {yylhsminor.yy215 = yymsp[-2].minor.yy85.y;}
2874 #line 2899 "pikchr.c"
2875 yymsp[-2].minor.yy215 = yylhsminor.yy215;
2876 break;
2877 case 110: /* expr ::= object DOT_L numproperty */
2878 case 111: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==111);
2879 case 112: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==112);
2880 #line 701 "pikchr.y"
2881 {yylhsminor.yy215=pik_property_of(p,yymsp[-2].minor.yy118,&yymsp[0].minor.yy0);}
2882 #line 2907 "pikchr.c"
2883 yymsp[-2].minor.yy215 = yylhsminor.yy215;
2884 break;
2885 default:
2886 /* (113) lvalue ::= ID */ yytestcase(yyruleno==113);
2887 /* (114) lvalue ::= FILL */ yytestcase(yyruleno==114);
2888 /* (115) lvalue ::= COLOR */ yytestcase(yyruleno==115);
2889 /* (116) lvalue ::= THICKNESS */ yytestcase(yyruleno==116);
2890 /* (117) rvalue ::= expr */ yytestcase(yyruleno==117);
2891 /* (118) print ::= PRINT */ yytestcase(yyruleno==118);
2892 /* (119) prlist ::= pritem (OPTIMIZED OUT) */ assert(yyruleno!=119);
2893 /* (120) prlist ::= prlist prsep pritem */ yytestcase(yyruleno==120);
2894 /* (121) direction ::= UP */ yytestcase(yyruleno==121);
2895 /* (122) direction ::= DOWN */ yytestcase(yyruleno==122);
2896 /* (123) direction ::= LEFT */ yytestcase(yyruleno==123);
2897 /* (124) direction ::= RIGHT */ yytestcase(yyruleno==124);
2898 /* (125) attribute_list ::= alist */ yytestcase(yyruleno==125);
2899 /* (126) alist ::= */ yytestcase(yyruleno==126);
2900 /* (127) alist ::= alist attribute */ yytestcase(yyruleno==127);
2901 /* (128) attribute ::= boolproperty (OPTIMIZED OUT) */ assert(yyruleno!=128);
2902 /* (129) attribute ::= WITH withclause */ yytestcase(yyruleno==129);
2903 /* (130) go ::= GO */ yytestcase(yyruleno==130);
2904 /* (131) go ::= */ yytestcase(yyruleno==131);
2905 /* (132) even ::= UNTIL EVEN WITH */ yytestcase(yyruleno==132);
2906 /* (133) even ::= EVEN WITH */ yytestcase(yyruleno==133);
2907 /* (134) dashproperty ::= DOTTED */ yytestcase(yyruleno==134);
2908 /* (135) dashproperty ::= DASHED */ yytestcase(yyruleno==135);
2909 /* (136) colorproperty ::= FILL */ yytestcase(yyruleno==136);
2910 /* (137) colorproperty ::= COLOR */ yytestcase(yyruleno==137);
2911 /* (138) position ::= place */ yytestcase(yyruleno==138);
2912 /* (139) between ::= WAY BETWEEN */ yytestcase(yyruleno==139);
2913 /* (140) between ::= BETWEEN */ yytestcase(yyruleno==140);
2914 /* (141) between ::= OF THE WAY BETWEEN */ yytestcase(yyruleno==141);
2915 /* (142) place ::= place2 */ yytestcase(yyruleno==142);
2916 /* (143) edge ::= EDGEPT */ yytestcase(yyruleno==143);
2917 /* (144) edge ::= TOP */ yytestcase(yyruleno==144);
2918 /* (145) edge ::= BOTTOM */ yytestcase(yyruleno==145);
2919 /* (146) edge ::= START */ yytestcase(yyruleno==146);
2920 /* (147) edge ::= END */ yytestcase(yyruleno==147);
2921 /* (148) edge ::= RIGHT */ yytestcase(yyruleno==148);
2922 /* (149) edge ::= LEFT */ yytestcase(yyruleno==149);
2923 /* (150) object ::= objectname */ yytestcase(yyruleno==150);
 
2924 break;
2925 /********** End reduce actions ************************************************/
2926 };
2927 assert( yyruleno<sizeof(yyRuleInfoLhs)/sizeof(yyRuleInfoLhs[0]) );
2928 yygoto = yyRuleInfoLhs[yyruleno];
@@ -2978,18 +3034,18 @@
2978 ){
2979 pik_parserARG_FETCH
2980 pik_parserCTX_FETCH
2981 #define TOKEN yyminor
2982 /************ Begin %syntax_error code ****************************************/
2983 #line 471 "pikchr.y"
2984
2985 if( TOKEN.z && TOKEN.z[0] ){
2986 pik_error(p, &TOKEN, "syntax error");
2987 }else{
2988 pik_error(p, 0, "syntax error");
2989 }
2990 #line 3015 "pikchr.c"
2991 /************ End %syntax_error code ******************************************/
2992 pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
2993 pik_parserCTX_STORE
2994 }
2995
@@ -3218,11 +3274,11 @@
3218 #else
3219 (void)iToken;
3220 return 0;
3221 #endif
3222 }
3223 #line 706 "pikchr.y"
3224
3225
3226
3227 /* Chart of the 140 official HTML color names with their
3228 ** corresponding RGB value.
@@ -3865,10 +3921,29 @@
3865 static void lineInit(Pik *p, PElem *pElem){
3866 pElem->w = pik_value(p, "linewid",7,0);
3867 pElem->h = pik_value(p, "lineht",6,0);
3868 pElem->rad = pik_value(p, "linerad",7,0);
3869 pElem->fill = -1.0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3870 }
3871 static void lineRender(Pik *p, PElem *pElem){
3872 int i;
3873 if( pElem->sw>0.0 ){
3874 const char *z = "<path d=\"M";
@@ -4041,11 +4116,11 @@
4041 /* isline */ 1,
4042 /* eJust */ 0,
4043 /* xInit */ arrowInit,
4044 /* xNumProp */ 0,
4045 /* xChop */ 0,
4046 /* xOffset */ 0,
4047 /* xFit */ 0,
4048 /* xRender */ splineRender
4049 },
4050 { /* name */ "box",
4051 /* isline */ 0,
@@ -4111,11 +4186,11 @@
4111 /* isline */ 1,
4112 /* eJust */ 0,
4113 /* xInit */ lineInit,
4114 /* xNumProp */ 0,
4115 /* xChop */ 0,
4116 /* xOffset */ 0,
4117 /* xFit */ 0,
4118 /* xRender */ splineRender
4119 },
4120 { /* name */ "move",
4121 /* isline */ 1,
@@ -4141,11 +4216,11 @@
4141 /* isline */ 1,
4142 /* eJust */ 0,
4143 /* xInit */ splineInit,
4144 /* xNumProp */ 0,
4145 /* xChop */ 0,
4146 /* xOffset */ 0,
4147 /* xFit */ 0,
4148 /* xRender */ splineRender
4149 },
4150 { /* name */ "text",
4151 /* isline */ 0,
@@ -4659,18 +4734,18 @@
4659
4660 /*
4661 ** Process an "assert( e1 == e2 )" statement. Always return NULL.
4662 */
4663 static PElem *pik_assert(Pik *p, PNum e1, PToken *pEq, PNum e2){
4664 char zE1[50], zE2[50], zMsg[200];
4665
4666 /* Convert the numbers to strings using %g for comparison. This
4667 ** limits the precision of the comparison to account for rounding error. */
4668 snprintf(zE1, sizeof(zE1), "%g", e1); zE1[sizeof(zE1)-1] = 0;
4669 snprintf(zE2, sizeof(zE2), "%g", e2); zE1[sizeof(zE2)-1] = 0;
4670 if( strcmp(zE1,zE2)!=0 ){
4671 snprintf(zMsg, sizeof(zMsg), "%s != %s", zE1, zE2);
4672 pik_error(p, pEq, zMsg);
4673 }
4674 return 0;
4675 }
4676
@@ -5858,15 +5933,10 @@
5858 if( pEdge==0 ){
5859 return pElem->ptAt;
5860 }
5861 pClass = pElem->type;
5862 if( pEdge->eType==T_EDGEPT || pEdge->eEdge>0 ){
5863 if( pClass->isLine ){
5864 pik_error(0, pEdge,
5865 "line objects have only \"start\" and \"end\" points");
5866 return pt;
5867 }
5868 if( pClass->xOffset==0 ){
5869 pt = boxOffset(p, pElem, pEdge->eEdge);
5870 }else{
5871 pt = pClass->xOffset(p, pElem, pEdge->eEdge);
5872 }
@@ -6113,11 +6183,15 @@
6113 pElem->h = pElem->bbox.ne.y - pElem->bbox.sw.y;
6114
6115 /* If this is a polygon (if it has the "close" attribute), then
6116 ** adjust the exit point */
6117 if( pElem->bClose ){
 
6118 pik_elem_set_exit(p, pElem, pElem->inDir);
 
 
 
6119 }
6120 }else{
6121 PNum w2 = pElem->w/2.0;
6122 PNum h2 = pElem->h/2.0;
6123 pElem->ptEnter = pElem->ptAt;
@@ -6344,11 +6418,11 @@
6344 { "bold", 4, T_BOLD, 0, 0 },
6345 { "bot", 3, T_EDGEPT, 0, CP_S },
6346 { "bottom", 6, T_BOTTOM, 0, CP_S },
6347 { "c", 1, T_EDGEPT, 0, CP_C },
6348 { "ccw", 3, T_CCW, 0, 0 },
6349 { "center", 6, T_CENTER, 0, 0 },
6350 { "chop", 4, T_CHOP, 0, 0 },
6351 { "close", 5, T_CLOSE, 0, 0 },
6352 { "color", 5, T_COLOR, 0, 0 },
6353 { "cos", 3, T_FUNC1, FN_COS, 0 },
6354 { "cw", 2, T_CW, 0, 0 },
@@ -6505,11 +6579,10 @@
6505 pToken->eType = T_ERROR;
6506 return i;
6507 }
6508 }else if( z[1]=='/' ){
6509 for(i=2; z[i]!=0 && z[i]!='\n'; i++){}
6510 if( z[i]!=0 ) i++;
6511 pToken->eType = T_WHITESPACE;
6512 return i;
6513 }else if( z[1]=='=' ){
6514 pToken->eType = T_ASSIGN;
6515 pToken->eCode = T_SLASH;
@@ -6591,11 +6664,11 @@
6591 pFound = pik_find_word((const char*)z+1, i-1,
6592 pik_keywords, count(pik_keywords));
6593 if( pFound && (pFound->eEdge>0 ||
6594 pFound->eType==T_EDGEPT ||
6595 pFound->eType==T_START ||
6596 pFound->eType==T_END)
6597 ){
6598 /* Dot followed by something that is a 2-D place value */
6599 pToken->eType = T_DOT_E;
6600 }else if( pFound->eType==T_X || pFound->eType==T_Y ){
6601 /* Dot followed by "x" or "y" */
@@ -6909,11 +6982,11 @@
6909 zOut = pikchr(zIn, "pikchr", 0, &w, &h);
6910 free(zIn);
6911 if( zOut ){
6912 if( w<0 ){
6913 printf("<p>ERROR:</p>\n");
6914 }else{
6915 printf("<p>Output size: %d by %d</p>\n", w, h);
6916 }
6917 printf("<div style='border:3px solid lightgray;max-width:%dpx'>\n"
6918 "%s</div>\n",
6919 w, zOut);
@@ -6923,6 +6996,6 @@
6923 printf("</body></html>\n");
6924 return 0;
6925 }
6926 #endif /* PIKCHR_SHELL */
6927
6928 #line 6953 "pikchr.c"
6929
--- src/pikchr.c
+++ src/pikchr.c
@@ -136,31 +136,32 @@
136 typedef struct PPoint PPoint; /* A position in 2-D space */
137 typedef struct PVar PVar; /* script-defined variable */
138 typedef struct PBox PBox; /* A bounding box */
139
140 /* Compass points */
 
141 #define CP_N 1
142 #define CP_NE 2
143 #define CP_E 3
144 #define CP_SE 4
145 #define CP_S 5
146 #define CP_SW 6
147 #define CP_W 7
148 #define CP_NW 8
149 #define CP_C 9 /* .center or .c */
150
151 /* Heading angles corresponding to compass points */
152 static const PNum pik_hdg_angle[] = {
153 /* none */ 0.0,
154 /* N */ 0.0,
155 /* NE */ 45.0,
156 /* E */ 90.0,
157 /* SE */ 135.0,
158 /* S */ 180.0,
159 /* SW */ 225.0,
160 /* W */ 270.0,
161 /* NW */ 315.0,
162 /* C */ 0.0,
163 };
164
165 /* Built-in functions */
166 #define FN_ABS 0
167 #define FN_COS 1
@@ -427,11 +428,11 @@
428 static void pik_behind(Pik*,PElem*);
429 static PElem *pik_assert(Pik*,PNum,PToken*,PNum);
430 static PElem *pik_place_assert(Pik*,PPoint*,PToken*,PPoint*);
431
432
433 #line 459 "pikchr.c"
434 /**************** End of %include directives **********************************/
435 /* These constants specify the various numeric values for terminal symbols.
436 ***************** Begin token definitions *************************************/
437 #ifndef T_ID
438 #define T_ID 1
@@ -505,29 +506,30 @@
506 #define T_BIG 69
507 #define T_SMALL 70
508 #define T_AND 71
509 #define T_LT 72
510 #define T_GT 73
511 #define T_ON 74
512 #define T_WAY 75
513 #define T_BETWEEN 76
514 #define T_THE 77
515 #define T_NTH 78
516 #define T_VERTEX 79
517 #define T_TOP 80
518 #define T_BOTTOM 81
519 #define T_START 82
520 #define T_END 83
521 #define T_IN 84
522 #define T_DOT_U 85
523 #define T_LAST 86
524 #define T_NUMBER 87
525 #define T_FUNC1 88
526 #define T_FUNC2 89
527 #define T_DOT_XY 90
528 #define T_X 91
529 #define T_Y 92
530 #define T_DOT_L 93
531 #endif
532 /**************** End token definitions ***************************************/
533
534 /* The next sections is a series of control #defines.
535 ** various aspects of the generated parser.
@@ -583,21 +585,21 @@
585 #ifndef INTERFACE
586 # define INTERFACE 1
587 #endif
588 /************* Begin control #defines *****************************************/
589 #define YYCODETYPE unsigned char
590 #define YYNOCODE 128
591 #define YYACTIONTYPE unsigned short int
592 #define pik_parserTOKENTYPE PToken
593 typedef union {
594 int yyinit;
595 pik_parserTOKENTYPE yy0;
596 PEList* yy52;
597 PElem* yy58;
598 int yy92;
599 PPoint yy95;
600 PNum yy149;
601 } YYMINORTYPE;
602 #ifndef YYSTACKDEPTH
603 #define YYSTACKDEPTH 100
604 #endif
605 #define pik_parserARG_SDECL
@@ -609,22 +611,22 @@
611 #define pik_parserCTX_PDECL ,Pik *p
612 #define pik_parserCTX_PARAM ,p
613 #define pik_parserCTX_FETCH Pik *p=yypParser->p;
614 #define pik_parserCTX_STORE yypParser->p=p;
615 #define YYFALLBACK 1
616 #define YYNSTATE 164
617 #define YYNRULE 155
618 #define YYNRULE_WITH_ACTION 116
619 #define YYNTOKEN 94
620 #define YY_MAX_SHIFT 163
621 #define YY_MIN_SHIFTREDUCE 283
622 #define YY_MAX_SHIFTREDUCE 437
623 #define YY_ERROR_ACTION 438
624 #define YY_ACCEPT_ACTION 439
625 #define YY_NO_ACTION 440
626 #define YY_MIN_REDUCE 441
627 #define YY_MAX_REDUCE 595
628 /************* End control #defines *******************************************/
629 #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
630
631 /* Define the yytestcase() macro to be a no-op if is not already defined
632 ** otherwise.
@@ -687,312 +689,333 @@
689 ** yy_reduce_ofst[] For each state, the offset into yy_action for
690 ** shifting non-terminals after a reduce.
691 ** yy_default[] Default action for each state.
692 **
693 *********** Begin parsing tables **********************************************/
694 #define YY_ACTTAB_COUNT (1270)
695 static const YYACTIONTYPE yy_action[] = {
696 /* 0 */ 569, 554, 441, 21, 555, 556, 116, 442, 449, 27,
697 /* 10 */ 569, 132, 31, 445, 65, 64, 63, 62, 422, 423,
698 /* 20 */ 339, 70, 83, 374, 163, 133, 569, 23, 494, 161,
699 /* 30 */ 124, 318, 319, 6, 5, 37, 573, 36, 4, 72,
700 /* 40 */ 131, 55, 335, 67, 54, 34, 430, 339, 339, 339,
701 /* 50 */ 339, 420, 421, 340, 341, 342, 343, 344, 345, 346,
702 /* 60 */ 347, 466, 31, 528, 571, 78, 571, 407, 408, 409,
703 /* 70 */ 410, 466, 30, 436, 435, 491, 161, 124, 305, 422,
704 /* 80 */ 423, 339, 356, 83, 526, 161, 124, 466, 8, 115,
705 /* 90 */ 75, 32, 318, 319, 6, 5, 37, 122, 36, 4,
706 /* 100 */ 72, 131, 70, 335, 67, 429, 52, 48, 339, 339,
707 /* 110 */ 339, 339, 420, 421, 340, 341, 342, 343, 344, 345,
708 /* 120 */ 346, 347, 465, 301, 431, 432, 433, 434, 26, 443,
709 /* 130 */ 449, 27, 465, 25, 329, 445, 65, 64, 63, 62,
710 /* 140 */ 422, 423, 339, 84, 83, 29, 163, 85, 465, 23,
711 /* 150 */ 531, 161, 124, 318, 319, 6, 5, 37, 76, 36,
712 /* 160 */ 4, 72, 131, 76, 335, 67, 394, 395, 42, 339,
713 /* 170 */ 339, 339, 339, 420, 421, 340, 341, 342, 343, 344,
714 /* 180 */ 345, 346, 347, 391, 430, 294, 60, 61, 65, 64,
715 /* 190 */ 63, 62, 82, 33, 374, 63, 62, 20, 24, 391,
716 /* 200 */ 430, 68, 60, 61, 81, 66, 303, 80, 2, 3,
717 /* 210 */ 374, 436, 435, 20, 419, 349, 349, 349, 349, 349,
718 /* 220 */ 349, 349, 349, 349, 349, 114, 418, 436, 435, 399,
719 /* 230 */ 529, 161, 124, 135, 125, 161, 124, 355, 457, 427,
720 /* 240 */ 153, 140, 130, 429, 564, 7, 400, 401, 402, 404,
721 /* 250 */ 81, 139, 303, 80, 154, 407, 408, 409, 410, 429,
722 /* 260 */ 113, 425, 431, 432, 433, 434, 149, 9, 122, 390,
723 /* 270 */ 156, 155, 128, 127, 161, 124, 113, 11, 431, 432,
724 /* 280 */ 433, 434, 378, 157, 122, 390, 156, 155, 391, 430,
725 /* 290 */ 39, 60, 61, 128, 377, 159, 447, 27, 74, 374,
726 /* 300 */ 149, 13, 59, 14, 119, 448, 118, 125, 161, 124,
727 /* 310 */ 15, 126, 442, 449, 27, 69, 436, 435, 445, 143,
728 /* 320 */ 141, 65, 64, 63, 62, 376, 158, 150, 358, 163,
729 /* 330 */ 57, 439, 23, 86, 389, 1, 65, 64, 63, 62,
730 /* 340 */ 53, 18, 125, 161, 124, 58, 148, 147, 429, 389,
731 /* 350 */ 382, 380, 381, 38, 375, 45, 143, 141, 65, 64,
732 /* 360 */ 63, 62, 154, 376, 158, 113, 160, 431, 432, 433,
733 /* 370 */ 434, 440, 71, 122, 390, 156, 155, 53, 35, 440,
734 /* 380 */ 162, 17, 16, 148, 147, 440, 440, 123, 440, 19,
735 /* 390 */ 38, 146, 142, 426, 391, 440, 440, 60, 61, 65,
736 /* 400 */ 64, 63, 62, 314, 440, 112, 532, 440, 59, 440,
737 /* 410 */ 440, 296, 297, 298, 440, 300, 440, 440, 17, 16,
738 /* 420 */ 391, 440, 440, 60, 61, 123, 19, 440, 146, 142,
739 /* 430 */ 426, 374, 391, 330, 59, 60, 61, 391, 326, 440,
740 /* 440 */ 60, 61, 440, 374, 440, 532, 59, 440, 374, 440,
741 /* 450 */ 532, 59, 440, 532, 440, 440, 422, 423, 339, 440,
742 /* 460 */ 440, 440, 440, 136, 134, 440, 87, 41, 440, 440,
743 /* 470 */ 440, 113, 43, 440, 430, 125, 161, 124, 440, 122,
744 /* 480 */ 390, 156, 155, 98, 374, 339, 339, 339, 339, 420,
745 /* 490 */ 421, 440, 125, 161, 124, 154, 440, 113, 22, 440,
746 /* 500 */ 440, 436, 435, 440, 440, 122, 390, 156, 155, 113,
747 /* 510 */ 440, 440, 154, 440, 113, 440, 440, 122, 390, 156,
748 /* 520 */ 155, 440, 122, 390, 156, 155, 391, 144, 440, 60,
749 /* 530 */ 61, 391, 145, 429, 60, 61, 440, 374, 440, 440,
750 /* 540 */ 59, 440, 374, 440, 440, 59, 440, 440, 440, 440,
751 /* 550 */ 113, 440, 431, 432, 433, 434, 391, 440, 122, 60,
752 /* 560 */ 61, 391, 440, 440, 60, 61, 440, 374, 440, 440,
753 /* 570 */ 59, 440, 112, 440, 391, 59, 440, 60, 61, 391,
754 /* 580 */ 440, 440, 60, 61, 440, 374, 114, 440, 46, 440,
755 /* 590 */ 374, 92, 440, 50, 440, 125, 161, 124, 440, 457,
756 /* 600 */ 125, 161, 124, 113, 79, 79, 440, 440, 113, 440,
757 /* 610 */ 440, 122, 390, 156, 155, 154, 122, 390, 156, 155,
758 /* 620 */ 154, 74, 440, 149, 440, 440, 114, 440, 496, 118,
759 /* 630 */ 125, 161, 124, 113, 440, 125, 161, 124, 113, 471,
760 /* 640 */ 440, 122, 390, 156, 155, 430, 122, 390, 156, 155,
761 /* 650 */ 150, 113, 440, 440, 440, 154, 113, 440, 440, 122,
762 /* 660 */ 390, 156, 155, 440, 122, 390, 156, 155, 440, 74,
763 /* 670 */ 440, 149, 436, 435, 440, 440, 495, 118, 125, 161,
764 /* 680 */ 124, 74, 440, 149, 114, 440, 440, 440, 489, 118,
765 /* 690 */ 125, 161, 124, 125, 161, 124, 440, 446, 150, 65,
766 /* 700 */ 64, 63, 62, 440, 429, 440, 440, 74, 440, 149,
767 /* 710 */ 150, 440, 293, 154, 479, 118, 125, 161, 124, 440,
768 /* 720 */ 74, 440, 149, 431, 432, 433, 434, 478, 118, 125,
769 /* 730 */ 161, 124, 74, 440, 149, 440, 150, 440, 440, 515,
770 /* 740 */ 118, 125, 161, 124, 440, 74, 440, 149, 440, 150,
771 /* 750 */ 440, 440, 138, 118, 125, 161, 124, 440, 74, 440,
772 /* 760 */ 149, 150, 440, 440, 440, 523, 118, 125, 161, 124,
773 /* 770 */ 74, 440, 149, 440, 150, 440, 440, 525, 118, 125,
774 /* 780 */ 161, 124, 74, 440, 149, 440, 440, 150, 440, 522,
775 /* 790 */ 118, 125, 161, 124, 93, 65, 64, 63, 62, 150,
776 /* 800 */ 440, 440, 440, 125, 161, 124, 74, 40, 149, 440,
777 /* 810 */ 440, 150, 440, 524, 118, 125, 161, 124, 440, 74,
778 /* 820 */ 440, 149, 440, 154, 440, 440, 521, 118, 125, 161,
779 /* 830 */ 124, 74, 440, 149, 440, 150, 440, 440, 520, 118,
780 /* 840 */ 125, 161, 124, 440, 74, 440, 149, 440, 150, 440,
781 /* 850 */ 440, 519, 118, 125, 161, 124, 440, 74, 440, 149,
782 /* 860 */ 150, 440, 440, 440, 518, 118, 125, 161, 124, 74,
783 /* 870 */ 440, 149, 440, 150, 440, 440, 517, 118, 125, 161,
784 /* 880 */ 124, 74, 440, 149, 440, 440, 150, 440, 151, 118,
785 /* 890 */ 125, 161, 124, 90, 65, 64, 63, 62, 150, 440,
786 /* 900 */ 440, 440, 125, 161, 124, 74, 440, 149, 440, 440,
787 /* 910 */ 150, 440, 152, 118, 125, 161, 124, 440, 73, 440,
788 /* 920 */ 149, 440, 154, 10, 440, 117, 118, 125, 161, 124,
789 /* 930 */ 74, 440, 149, 440, 150, 440, 440, 137, 118, 125,
790 /* 940 */ 161, 124, 440, 74, 440, 149, 440, 150, 440, 440,
791 /* 950 */ 475, 118, 125, 161, 124, 440, 91, 440, 149, 150,
792 /* 960 */ 440, 440, 440, 440, 129, 125, 161, 124, 77, 440,
793 /* 970 */ 440, 325, 150, 65, 64, 63, 62, 125, 161, 124,
794 /* 980 */ 65, 64, 63, 62, 440, 150, 440, 440, 440, 460,
795 /* 990 */ 440, 28, 104, 389, 440, 440, 440, 154, 440, 49,
796 /* 1000 */ 440, 125, 161, 124, 105, 44, 440, 440, 440, 106,
797 /* 1010 */ 440, 440, 440, 125, 161, 124, 440, 107, 125, 161,
798 /* 1020 */ 124, 154, 440, 440, 440, 94, 125, 161, 124, 440,
799 /* 1030 */ 440, 88, 440, 154, 125, 161, 124, 440, 154, 108,
800 /* 1040 */ 125, 161, 124, 440, 440, 440, 154, 440, 125, 161,
801 /* 1050 */ 124, 440, 95, 440, 154, 96, 440, 440, 440, 440,
802 /* 1060 */ 154, 125, 161, 124, 125, 161, 124, 440, 154, 65,
803 /* 1070 */ 64, 63, 62, 440, 440, 440, 89, 440, 440, 109,
804 /* 1080 */ 440, 154, 97, 440, 154, 125, 161, 124, 125, 161,
805 /* 1090 */ 124, 125, 161, 124, 65, 64, 63, 62, 12, 65,
806 /* 1100 */ 64, 63, 62, 110, 440, 154, 440, 354, 154, 440,
807 /* 1110 */ 440, 154, 125, 161, 124, 440, 111, 440, 47, 99,
808 /* 1120 */ 440, 440, 440, 440, 100, 125, 161, 124, 125, 161,
809 /* 1130 */ 124, 440, 154, 125, 161, 124, 440, 440, 440, 440,
810 /* 1140 */ 101, 440, 440, 440, 440, 154, 440, 102, 154, 125,
811 /* 1150 */ 161, 124, 440, 154, 103, 440, 125, 161, 124, 440,
812 /* 1160 */ 440, 546, 440, 125, 161, 124, 440, 440, 440, 154,
813 /* 1170 */ 125, 161, 124, 440, 440, 545, 154, 440, 544, 440,
814 /* 1180 */ 440, 440, 440, 154, 125, 161, 124, 125, 161, 124,
815 /* 1190 */ 154, 543, 65, 64, 63, 62, 65, 64, 63, 62,
816 /* 1200 */ 125, 161, 124, 440, 154, 353, 440, 154, 440, 393,
817 /* 1210 */ 440, 440, 120, 440, 440, 121, 440, 440, 440, 440,
818 /* 1220 */ 154, 125, 161, 124, 125, 161, 124, 65, 64, 63,
819 /* 1230 */ 62, 65, 64, 63, 62, 309, 65, 64, 63, 62,
820 /* 1240 */ 440, 154, 440, 440, 154, 440, 51, 440, 440, 65,
821 /* 1250 */ 64, 63, 62, 440, 440, 56, 65, 64, 63, 62,
822 /* 1260 */ 440, 440, 392, 440, 440, 440, 440, 440, 440, 389,
823 };
824 static const YYCODETYPE yy_lookahead[] = {
825 /* 0 */ 0, 99, 0, 126, 102, 103, 94, 95, 96, 97,
826 /* 10 */ 10, 100, 10, 101, 4, 5, 6, 7, 18, 19,
827 /* 20 */ 20, 3, 22, 12, 112, 100, 26, 115, 107, 108,
828 /* 30 */ 109, 31, 32, 33, 34, 35, 125, 37, 38, 39,
829 /* 40 */ 40, 99, 42, 43, 102, 103, 2, 47, 48, 49,
830 /* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
831 /* 60 */ 60, 0, 10, 100, 122, 123, 124, 27, 28, 29,
832 /* 70 */ 30, 10, 121, 29, 30, 107, 108, 109, 26, 18,
833 /* 80 */ 19, 20, 17, 22, 107, 108, 109, 26, 23, 78,
834 /* 90 */ 46, 101, 31, 32, 33, 34, 35, 86, 37, 38,
835 /* 100 */ 39, 40, 84, 42, 43, 61, 4, 5, 47, 48,
836 /* 110 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
837 /* 120 */ 59, 60, 0, 23, 80, 81, 82, 83, 120, 95,
838 /* 130 */ 96, 97, 10, 118, 2, 101, 4, 5, 6, 7,
839 /* 140 */ 18, 19, 20, 110, 22, 121, 112, 110, 26, 115,
840 /* 150 */ 107, 108, 109, 31, 32, 33, 34, 35, 46, 37,
841 /* 160 */ 38, 39, 40, 46, 42, 43, 91, 92, 36, 47,
842 /* 170 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
843 /* 180 */ 58, 59, 60, 1, 2, 17, 4, 5, 4, 5,
844 /* 190 */ 6, 7, 8, 16, 12, 6, 7, 15, 15, 1,
845 /* 200 */ 2, 41, 4, 5, 22, 93, 24, 25, 38, 38,
846 /* 210 */ 12, 29, 30, 15, 39, 61, 62, 63, 64, 65,
847 /* 220 */ 66, 67, 68, 69, 70, 98, 39, 29, 30, 1,
848 /* 230 */ 107, 108, 109, 45, 107, 108, 109, 17, 111, 76,
849 /* 240 */ 12, 77, 14, 61, 117, 71, 18, 19, 20, 21,
850 /* 250 */ 22, 75, 24, 25, 127, 27, 28, 29, 30, 61,
851 /* 260 */ 78, 76, 80, 81, 82, 83, 100, 3, 86, 87,
852 /* 270 */ 88, 89, 106, 107, 108, 109, 78, 3, 80, 81,
853 /* 280 */ 82, 83, 24, 25, 86, 87, 88, 89, 1, 2,
854 /* 290 */ 36, 4, 5, 127, 24, 25, 96, 97, 98, 12,
855 /* 300 */ 100, 3, 15, 3, 90, 105, 106, 107, 108, 109,
856 /* 310 */ 3, 94, 95, 96, 97, 3, 29, 30, 101, 2,
857 /* 320 */ 3, 4, 5, 6, 7, 24, 25, 127, 73, 112,
858 /* 330 */ 15, 114, 115, 98, 17, 13, 4, 5, 6, 7,
859 /* 340 */ 23, 23, 107, 108, 109, 15, 29, 30, 61, 17,
860 /* 350 */ 26, 26, 26, 36, 12, 23, 2, 3, 4, 5,
861 /* 360 */ 6, 7, 127, 24, 25, 78, 85, 80, 81, 82,
862 /* 370 */ 83, 128, 3, 86, 87, 88, 89, 23, 11, 128,
863 /* 380 */ 79, 64, 65, 29, 30, 128, 128, 86, 128, 72,
864 /* 390 */ 36, 74, 75, 76, 1, 128, 128, 4, 5, 4,
865 /* 400 */ 5, 6, 7, 8, 128, 12, 46, 128, 15, 128,
866 /* 410 */ 128, 18, 19, 20, 128, 22, 128, 128, 64, 65,
867 /* 420 */ 1, 128, 128, 4, 5, 86, 72, 128, 74, 75,
868 /* 430 */ 76, 12, 1, 2, 15, 4, 5, 1, 2, 128,
869 /* 440 */ 4, 5, 128, 12, 128, 85, 15, 128, 12, 128,
870 /* 450 */ 90, 15, 128, 93, 128, 128, 18, 19, 20, 128,
871 /* 460 */ 128, 128, 128, 44, 45, 128, 98, 36, 128, 128,
872 /* 470 */ 128, 78, 36, 128, 2, 107, 108, 109, 128, 86,
873 /* 480 */ 87, 88, 89, 98, 12, 47, 48, 49, 50, 51,
874 /* 490 */ 52, 128, 107, 108, 109, 127, 128, 78, 113, 128,
875 /* 500 */ 128, 29, 30, 128, 128, 86, 87, 88, 89, 78,
876 /* 510 */ 128, 128, 127, 128, 78, 128, 128, 86, 87, 88,
877 /* 520 */ 89, 128, 86, 87, 88, 89, 1, 2, 128, 4,
878 /* 530 */ 5, 1, 2, 61, 4, 5, 128, 12, 128, 128,
879 /* 540 */ 15, 128, 12, 128, 128, 15, 128, 128, 128, 128,
880 /* 550 */ 78, 128, 80, 81, 82, 83, 1, 128, 86, 4,
881 /* 560 */ 5, 1, 128, 128, 4, 5, 128, 12, 128, 128,
882 /* 570 */ 15, 128, 12, 128, 1, 15, 128, 4, 5, 1,
883 /* 580 */ 128, 128, 4, 5, 128, 12, 98, 128, 15, 128,
884 /* 590 */ 12, 98, 128, 15, 128, 107, 108, 109, 128, 111,
885 /* 600 */ 107, 108, 109, 78, 116, 117, 128, 128, 78, 128,
886 /* 610 */ 128, 86, 87, 88, 89, 127, 86, 87, 88, 89,
887 /* 620 */ 127, 98, 128, 100, 128, 128, 98, 128, 105, 106,
888 /* 630 */ 107, 108, 109, 78, 128, 107, 108, 109, 78, 111,
889 /* 640 */ 128, 86, 87, 88, 89, 2, 86, 87, 88, 89,
890 /* 650 */ 127, 78, 128, 128, 128, 127, 78, 128, 128, 86,
891 /* 660 */ 87, 88, 89, 128, 86, 87, 88, 89, 128, 98,
892 /* 670 */ 128, 100, 29, 30, 128, 128, 105, 106, 107, 108,
893 /* 680 */ 109, 98, 128, 100, 98, 128, 128, 128, 105, 106,
894 /* 690 */ 107, 108, 109, 107, 108, 109, 128, 111, 127, 4,
895 /* 700 */ 5, 6, 7, 128, 61, 128, 128, 98, 128, 100,
896 /* 710 */ 127, 128, 17, 127, 105, 106, 107, 108, 109, 128,
897 /* 720 */ 98, 128, 100, 80, 81, 82, 83, 105, 106, 107,
898 /* 730 */ 108, 109, 98, 128, 100, 128, 127, 128, 128, 105,
899 /* 740 */ 106, 107, 108, 109, 128, 98, 128, 100, 128, 127,
900 /* 750 */ 128, 128, 105, 106, 107, 108, 109, 128, 98, 128,
901 /* 760 */ 100, 127, 128, 128, 128, 105, 106, 107, 108, 109,
902 /* 770 */ 98, 128, 100, 128, 127, 128, 128, 105, 106, 107,
903 /* 780 */ 108, 109, 98, 128, 100, 128, 128, 127, 128, 105,
904 /* 790 */ 106, 107, 108, 109, 98, 4, 5, 6, 7, 127,
905 /* 800 */ 128, 128, 128, 107, 108, 109, 98, 16, 100, 128,
906 /* 810 */ 128, 127, 128, 105, 106, 107, 108, 109, 128, 98,
907 /* 820 */ 128, 100, 128, 127, 128, 128, 105, 106, 107, 108,
908 /* 830 */ 109, 98, 128, 100, 128, 127, 128, 128, 105, 106,
909 /* 840 */ 107, 108, 109, 128, 98, 128, 100, 128, 127, 128,
910 /* 850 */ 128, 105, 106, 107, 108, 109, 128, 98, 128, 100,
911 /* 860 */ 127, 128, 128, 128, 105, 106, 107, 108, 109, 98,
912 /* 870 */ 128, 100, 128, 127, 128, 128, 105, 106, 107, 108,
913 /* 880 */ 109, 98, 128, 100, 128, 128, 127, 128, 105, 106,
914 /* 890 */ 107, 108, 109, 98, 4, 5, 6, 7, 127, 128,
915 /* 900 */ 128, 128, 107, 108, 109, 98, 128, 100, 128, 128,
916 /* 910 */ 127, 128, 105, 106, 107, 108, 109, 128, 98, 128,
917 /* 920 */ 100, 128, 127, 33, 128, 105, 106, 107, 108, 109,
918 /* 930 */ 98, 128, 100, 128, 127, 128, 128, 105, 106, 107,
919 /* 940 */ 108, 109, 128, 98, 128, 100, 128, 127, 128, 128,
920 /* 950 */ 105, 106, 107, 108, 109, 128, 98, 128, 100, 127,
921 /* 960 */ 128, 128, 128, 128, 106, 107, 108, 109, 98, 128,
922 /* 970 */ 128, 2, 127, 4, 5, 6, 7, 107, 108, 109,
923 /* 980 */ 4, 5, 6, 7, 128, 127, 128, 128, 128, 119,
924 /* 990 */ 128, 121, 98, 17, 128, 128, 128, 127, 128, 23,
925 /* 1000 */ 128, 107, 108, 109, 98, 36, 128, 128, 128, 98,
926 /* 1010 */ 128, 128, 128, 107, 108, 109, 128, 98, 107, 108,
927 /* 1020 */ 109, 127, 128, 128, 128, 98, 107, 108, 109, 128,
928 /* 1030 */ 128, 98, 128, 127, 107, 108, 109, 128, 127, 98,
929 /* 1040 */ 107, 108, 109, 128, 128, 128, 127, 128, 107, 108,
930 /* 1050 */ 109, 128, 98, 128, 127, 98, 128, 128, 128, 128,
931 /* 1060 */ 127, 107, 108, 109, 107, 108, 109, 128, 127, 4,
932 /* 1070 */ 5, 6, 7, 128, 128, 128, 98, 128, 128, 98,
933 /* 1080 */ 128, 127, 98, 128, 127, 107, 108, 109, 107, 108,
934 /* 1090 */ 109, 107, 108, 109, 4, 5, 6, 7, 33, 4,
935 /* 1100 */ 5, 6, 7, 98, 128, 127, 128, 17, 127, 128,
936 /* 1110 */ 128, 127, 107, 108, 109, 128, 98, 128, 23, 98,
937 /* 1120 */ 128, 128, 128, 128, 98, 107, 108, 109, 107, 108,
938 /* 1130 */ 109, 128, 127, 107, 108, 109, 128, 128, 128, 128,
939 /* 1140 */ 98, 128, 128, 128, 128, 127, 128, 98, 127, 107,
940 /* 1150 */ 108, 109, 128, 127, 98, 128, 107, 108, 109, 128,
941 /* 1160 */ 128, 98, 128, 107, 108, 109, 128, 128, 128, 127,
942 /* 1170 */ 107, 108, 109, 128, 128, 98, 127, 128, 98, 128,
943 /* 1180 */ 128, 128, 128, 127, 107, 108, 109, 107, 108, 109,
944 /* 1190 */ 127, 98, 4, 5, 6, 7, 4, 5, 6, 7,
945 /* 1200 */ 107, 108, 109, 128, 127, 17, 128, 127, 128, 17,
946 /* 1210 */ 128, 128, 98, 128, 128, 98, 128, 128, 128, 128,
947 /* 1220 */ 127, 107, 108, 109, 107, 108, 109, 4, 5, 6,
948 /* 1230 */ 7, 4, 5, 6, 7, 8, 4, 5, 6, 7,
949 /* 1240 */ 128, 127, 128, 128, 127, 128, 23, 128, 128, 4,
950 /* 1250 */ 5, 6, 7, 128, 128, 23, 4, 5, 6, 7,
951 /* 1260 */ 128, 128, 17, 128, 128, 128, 128, 128, 128, 17,
952 /* 1270 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
953 /* 1280 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
954 /* 1290 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
955 /* 1300 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
956 /* 1310 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
957 /* 1320 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
958 /* 1330 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
959 /* 1340 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
960 /* 1350 */ 128, 94, 94, 94, 94, 94, 94, 94, 94, 94,
961 /* 1360 */ 94, 94, 94, 94,
962 };
963 #define YY_SHIFT_COUNT (163)
964 #define YY_SHIFT_MIN (0)
965 #define YY_SHIFT_MAX (1252)
966 static const unsigned short int yy_shift_ofst[] = {
967 /* 0 */ 228, 182, 198, 198, 198, 198, 198, 198, 198, 198,
968 /* 10 */ 198, 198, 198, 198, 198, 198, 198, 198, 198, 198,
969 /* 20 */ 198, 198, 198, 393, 287, 393, 228, 555, 0, 61,
970 /* 30 */ 122, 228, 419, 472, 560, 560, 431, 436, 525, 530,
971 /* 40 */ 555, 555, 555, 555, 555, 555, 555, 555, 573, 555,
972 /* 50 */ 555, 555, 578, 555, 555, 555, 555, 555, 555, 555,
973 /* 60 */ 555, 555, 555, 555, 555, 555, 438, 11, 11, 11,
974 /* 70 */ 11, 11, 44, 317, 354, 643, 643, 184, 40, 100,
975 /* 80 */ 1270, 1270, 1270, 1270, 154, 154, 132, 969, 332, 976,
976 /* 90 */ 695, 791, 890, 1065, 1090, 1095, 1188, 1223, 395, 1227,
977 /* 100 */ 1192, 1232, 1245, 1252, 10, 10, 10, 10, 10, 10,
978 /* 110 */ 10, 10, 360, 301, 10, 339, 52, 65, 102, 75,
979 /* 120 */ 189, 189, 258, 270, 18, 112, 2, 117, 168, 177,
980 /* 130 */ 183, 160, 170, 171, 175, 187, 188, 174, 220, 163,
981 /* 140 */ 176, 164, 185, 264, 274, 298, 254, 300, 307, 312,
982 /* 150 */ 214, 255, 318, 322, 214, 315, 330, 324, 325, 326,
983 /* 160 */ 342, 281, 369, 367,
984 };
985 #define YY_REDUCE_COUNT (83)
986 #define YY_REDUCE_MIN (-123)
987 #define YY_REDUCE_MAX (1117)
988 static const short yy_reduce_ofst[] = {
989 /* 0 */ 217, 200, 523, 571, 583, 609, 622, 634, 647, 660,
990 /* 10 */ 672, 684, 708, 721, 733, 746, 759, 771, 783, 807,
991 /* 20 */ 820, 832, 845, 488, 858, 127, -88, 870, -58, -58,
992 /* 30 */ -58, 34, 385, 166, 528, 586, 235, 368, 493, 696,
993 /* 40 */ 795, 894, 906, 911, 919, 927, 933, 941, 954, 957,
994 /* 50 */ 978, 981, 984, 1005, 1018, 1021, 1026, 1042, 1049, 1056,
995 /* 60 */ 1063, 1077, 1080, 1093, 1114, 1117, -98, -79, -32, -23,
996 /* 70 */ 43, 123, -89, -123, -123, -75, -37, -49, -10, 15,
997 /* 80 */ 8, 33, 24, 37,
998 };
999 static const YYACTIONTYPE yy_default[] = {
1000 /* 0 */ 444, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1001 /* 10 */ 438, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1002 /* 20 */ 438, 438, 438, 438, 438, 438, 444, 570, 575, 575,
1003 /* 30 */ 575, 444, 474, 438, 438, 438, 574, 480, 438, 438,
1004 /* 40 */ 438, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1005 /* 50 */ 438, 438, 438, 438, 470, 438, 438, 438, 438, 438,
1006 /* 60 */ 438, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1007 /* 70 */ 438, 438, 438, 438, 438, 438, 438, 570, 438, 450,
1008 /* 80 */ 464, 506, 570, 506, 462, 492, 438, 438, 438, 438,
1009 /* 90 */ 438, 438, 438, 438, 438, 438, 438, 438, 473, 468,
1010 /* 100 */ 438, 438, 438, 438, 486, 485, 482, 481, 510, 509,
1011 /* 110 */ 508, 469, 453, 438, 561, 438, 438, 438, 582, 438,
1012 /* 120 */ 542, 541, 537, 438, 530, 527, 438, 527, 438, 438,
1013 /* 130 */ 438, 490, 438, 438, 438, 438, 438, 438, 438, 438,
1014 /* 140 */ 438, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1015 /* 150 */ 586, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1016 /* 160 */ 438, 595, 438, 438,
1017 };
1018 /********** End of lemon-generated parsing tables *****************************/
1019
1020 /* The next table maps tokens (terminal symbols) into fallback tokens.
1021 ** If a construct like the following:
@@ -1082,10 +1105,11 @@
1105 0, /* BIG => nothing */
1106 0, /* SMALL => nothing */
1107 0, /* AND => nothing */
1108 0, /* LT => nothing */
1109 0, /* GT => nothing */
1110 0, /* ON => nothing */
1111 0, /* WAY => nothing */
1112 0, /* BETWEEN => nothing */
1113 0, /* THE => nothing */
1114 0, /* NTH => nothing */
1115 0, /* VERTEX => nothing */
@@ -1263,63 +1287,64 @@
1287 /* 69 */ "BIG",
1288 /* 70 */ "SMALL",
1289 /* 71 */ "AND",
1290 /* 72 */ "LT",
1291 /* 73 */ "GT",
1292 /* 74 */ "ON",
1293 /* 75 */ "WAY",
1294 /* 76 */ "BETWEEN",
1295 /* 77 */ "THE",
1296 /* 78 */ "NTH",
1297 /* 79 */ "VERTEX",
1298 /* 80 */ "TOP",
1299 /* 81 */ "BOTTOM",
1300 /* 82 */ "START",
1301 /* 83 */ "END",
1302 /* 84 */ "IN",
1303 /* 85 */ "DOT_U",
1304 /* 86 */ "LAST",
1305 /* 87 */ "NUMBER",
1306 /* 88 */ "FUNC1",
1307 /* 89 */ "FUNC2",
1308 /* 90 */ "DOT_XY",
1309 /* 91 */ "X",
1310 /* 92 */ "Y",
1311 /* 93 */ "DOT_L",
1312 /* 94 */ "element_list",
1313 /* 95 */ "element",
1314 /* 96 */ "unnamed_element",
1315 /* 97 */ "basetype",
1316 /* 98 */ "expr",
1317 /* 99 */ "numproperty",
1318 /* 100 */ "edge",
1319 /* 101 */ "direction",
1320 /* 102 */ "dashproperty",
1321 /* 103 */ "colorproperty",
1322 /* 104 */ "locproperty",
1323 /* 105 */ "position",
1324 /* 106 */ "place",
1325 /* 107 */ "object",
1326 /* 108 */ "objectname",
1327 /* 109 */ "nth",
1328 /* 110 */ "textposition",
1329 /* 111 */ "rvalue",
1330 /* 112 */ "lvalue",
1331 /* 113 */ "even",
1332 /* 114 */ "document",
1333 /* 115 */ "print",
1334 /* 116 */ "prlist",
1335 /* 117 */ "pritem",
1336 /* 118 */ "prsep",
1337 /* 119 */ "attribute_list",
1338 /* 120 */ "savelist",
1339 /* 121 */ "alist",
1340 /* 122 */ "attribute",
1341 /* 123 */ "go",
1342 /* 124 */ "boolproperty",
1343 /* 125 */ "withclause",
1344 /* 126 */ "between",
1345 /* 127 */ "place2",
1346 };
1347 #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
1348
1349 #ifndef NDEBUG
1350 /* For tracing reduce actions, the names of all rules are required.
@@ -1403,81 +1428,85 @@
1428 /* 75 */ "position ::= expr LT position COMMA position GT",
1429 /* 76 */ "position ::= expr ABOVE position",
1430 /* 77 */ "position ::= expr BELOW position",
1431 /* 78 */ "position ::= expr LEFT OF position",
1432 /* 79 */ "position ::= expr RIGHT OF position",
1433 /* 80 */ "position ::= expr ON HEADING EDGEPT OF position",
1434 /* 81 */ "position ::= expr HEADING EDGEPT OF position",
1435 /* 82 */ "position ::= expr EDGEPT OF position",
1436 /* 83 */ "position ::= expr ON HEADING expr FROM position",
1437 /* 84 */ "position ::= expr HEADING expr FROM position",
1438 /* 85 */ "place ::= edge OF object",
1439 /* 86 */ "place2 ::= object",
1440 /* 87 */ "place2 ::= object DOT_E edge",
1441 /* 88 */ "place2 ::= NTH VERTEX OF object",
1442 /* 89 */ "object ::= nth",
1443 /* 90 */ "object ::= nth OF|IN object",
1444 /* 91 */ "objectname ::= PLACENAME",
1445 /* 92 */ "objectname ::= objectname DOT_U PLACENAME",
1446 /* 93 */ "nth ::= NTH CLASSNAME",
1447 /* 94 */ "nth ::= NTH LAST CLASSNAME",
1448 /* 95 */ "nth ::= LAST CLASSNAME",
1449 /* 96 */ "nth ::= LAST",
1450 /* 97 */ "nth ::= NTH LB RB",
1451 /* 98 */ "nth ::= NTH LAST LB RB",
1452 /* 99 */ "nth ::= LAST LB RB",
1453 /* 100 */ "expr ::= expr PLUS expr",
1454 /* 101 */ "expr ::= expr MINUS expr",
1455 /* 102 */ "expr ::= expr STAR expr",
1456 /* 103 */ "expr ::= expr SLASH expr",
1457 /* 104 */ "expr ::= MINUS expr",
1458 /* 105 */ "expr ::= PLUS expr",
1459 /* 106 */ "expr ::= LP expr RP",
1460 /* 107 */ "expr ::= NUMBER",
1461 /* 108 */ "expr ::= ID",
1462 /* 109 */ "expr ::= FUNC1 LP expr RP",
1463 /* 110 */ "expr ::= FUNC2 LP expr COMMA expr RP",
1464 /* 111 */ "expr ::= place2 DOT_XY X",
1465 /* 112 */ "expr ::= place2 DOT_XY Y",
1466 /* 113 */ "expr ::= object DOT_L numproperty",
1467 /* 114 */ "expr ::= object DOT_L dashproperty",
1468 /* 115 */ "expr ::= object DOT_L colorproperty",
1469 /* 116 */ "lvalue ::= ID",
1470 /* 117 */ "lvalue ::= FILL",
1471 /* 118 */ "lvalue ::= COLOR",
1472 /* 119 */ "lvalue ::= THICKNESS",
1473 /* 120 */ "rvalue ::= expr",
1474 /* 121 */ "print ::= PRINT",
1475 /* 122 */ "prlist ::= pritem",
1476 /* 123 */ "prlist ::= prlist prsep pritem",
1477 /* 124 */ "direction ::= UP",
1478 /* 125 */ "direction ::= DOWN",
1479 /* 126 */ "direction ::= LEFT",
1480 /* 127 */ "direction ::= RIGHT",
1481 /* 128 */ "attribute_list ::= alist",
1482 /* 129 */ "alist ::=",
1483 /* 130 */ "alist ::= alist attribute",
1484 /* 131 */ "attribute ::= boolproperty",
1485 /* 132 */ "attribute ::= WITH withclause",
1486 /* 133 */ "go ::= GO",
1487 /* 134 */ "go ::=",
1488 /* 135 */ "even ::= UNTIL EVEN WITH",
1489 /* 136 */ "even ::= EVEN WITH",
1490 /* 137 */ "dashproperty ::= DOTTED",
1491 /* 138 */ "dashproperty ::= DASHED",
1492 /* 139 */ "colorproperty ::= FILL",
1493 /* 140 */ "colorproperty ::= COLOR",
1494 /* 141 */ "position ::= place",
1495 /* 142 */ "between ::= WAY BETWEEN",
1496 /* 143 */ "between ::= BETWEEN",
1497 /* 144 */ "between ::= OF THE WAY BETWEEN",
1498 /* 145 */ "place ::= place2",
1499 /* 146 */ "edge ::= CENTER",
1500 /* 147 */ "edge ::= EDGEPT",
1501 /* 148 */ "edge ::= TOP",
1502 /* 149 */ "edge ::= BOTTOM",
1503 /* 150 */ "edge ::= START",
1504 /* 151 */ "edge ::= END",
1505 /* 152 */ "edge ::= RIGHT",
1506 /* 153 */ "edge ::= LEFT",
1507 /* 154 */ "object ::= objectname",
1508 };
1509 #endif /* NDEBUG */
1510
1511
1512 #if YYSTACKDEPTH<=0
@@ -1599,24 +1628,24 @@
1628 ** Note: during a reduce, the only symbols destroyed are those
1629 ** which appear on the RHS of the rule, but which are *not* used
1630 ** inside the C code.
1631 */
1632 /********* Begin destructor definitions ***************************************/
1633 case 94: /* element_list */
1634 {
1635 #line 448 "pikchr.y"
1636 pik_elist_free(p,(yypminor->yy52));
1637 #line 1662 "pikchr.c"
1638 }
1639 break;
1640 case 95: /* element */
1641 case 96: /* unnamed_element */
1642 case 97: /* basetype */
1643 {
1644 #line 450 "pikchr.y"
1645 pik_elem_free(p,(yypminor->yy58));
1646 #line 1671 "pikchr.c"
1647 }
1648 break;
1649 /********* End destructor definitions *****************************************/
1650 default: break; /* If no destructor action specified: do nothing */
1651 }
@@ -1830,14 +1859,14 @@
1859 #endif
1860 while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
1861 /* Here code is inserted which will execute if the parser
1862 ** stack every overflows */
1863 /******** Begin %stack_overflow code ******************************************/
1864 #line 479 "pikchr.y"
1865
1866 pik_error(p, 0, "parser stack overflow");
1867 #line 1892 "pikchr.c"
1868 /******** End %stack_overflow code ********************************************/
1869 pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */
1870 pik_parserCTX_STORE
1871 }
1872
@@ -1905,161 +1934,165 @@
1934 }
1935
1936 /* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side
1937 ** of that rule */
1938 static const YYCODETYPE yyRuleInfoLhs[] = {
1939 114, /* (0) document ::= element_list */
1940 94, /* (1) element_list ::= element */
1941 94, /* (2) element_list ::= element_list EOL element */
1942 95, /* (3) element ::= */
1943 95, /* (4) element ::= direction */
1944 95, /* (5) element ::= lvalue ASSIGN rvalue */
1945 95, /* (6) element ::= PLACENAME COLON unnamed_element */
1946 95, /* (7) element ::= PLACENAME COLON position */
1947 95, /* (8) element ::= unnamed_element */
1948 95, /* (9) element ::= print prlist */
1949 95, /* (10) element ::= ASSERT LP expr EQ expr RP */
1950 95, /* (11) element ::= ASSERT LP place EQ place RP */
1951 111, /* (12) rvalue ::= PLACENAME */
1952 117, /* (13) pritem ::= FILL */
1953 117, /* (14) pritem ::= COLOR */
1954 117, /* (15) pritem ::= THICKNESS */
1955 117, /* (16) pritem ::= rvalue */
1956 117, /* (17) pritem ::= STRING */
1957 118, /* (18) prsep ::= COMMA */
1958 96, /* (19) unnamed_element ::= basetype attribute_list */
1959 97, /* (20) basetype ::= CLASSNAME */
1960 97, /* (21) basetype ::= STRING textposition */
1961 97, /* (22) basetype ::= LB savelist element_list RB */
1962 120, /* (23) savelist ::= */
1963 119, /* (24) attribute_list ::= expr alist */
1964 119, /* (25) attribute_list ::= expr PERCENT alist */
1965 122, /* (26) attribute ::= numproperty expr PERCENT */
1966 122, /* (27) attribute ::= numproperty expr */
1967 122, /* (28) attribute ::= dashproperty expr */
1968 122, /* (29) attribute ::= dashproperty */
1969 122, /* (30) attribute ::= colorproperty rvalue */
1970 122, /* (31) attribute ::= go direction expr PERCENT */
1971 122, /* (32) attribute ::= go direction expr */
1972 122, /* (33) attribute ::= go direction */
1973 122, /* (34) attribute ::= go direction even position */
1974 122, /* (35) attribute ::= CLOSE */
1975 122, /* (36) attribute ::= CHOP */
1976 122, /* (37) attribute ::= FROM position */
1977 122, /* (38) attribute ::= TO position */
1978 122, /* (39) attribute ::= THEN */
1979 122, /* (40) attribute ::= THEN expr HEADING expr */
1980 122, /* (41) attribute ::= THEN HEADING expr */
1981 122, /* (42) attribute ::= THEN expr EDGEPT */
1982 122, /* (43) attribute ::= THEN EDGEPT */
1983 122, /* (44) attribute ::= GO expr HEADING expr */
1984 122, /* (45) attribute ::= GO HEADING expr */
1985 122, /* (46) attribute ::= GO expr EDGEPT */
1986 122, /* (47) attribute ::= GO EDGEPT */
1987 122, /* (48) attribute ::= AT position */
1988 122, /* (49) attribute ::= SAME */
1989 122, /* (50) attribute ::= SAME AS object */
1990 122, /* (51) attribute ::= STRING textposition */
1991 122, /* (52) attribute ::= FIT */
1992 122, /* (53) attribute ::= BEHIND object */
1993 125, /* (54) withclause ::= DOT_E edge AT position */
1994 125, /* (55) withclause ::= edge AT position */
1995 99, /* (56) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
1996 124, /* (57) boolproperty ::= CW */
1997 124, /* (58) boolproperty ::= CCW */
1998 124, /* (59) boolproperty ::= LARROW */
1999 124, /* (60) boolproperty ::= RARROW */
2000 124, /* (61) boolproperty ::= LRARROW */
2001 124, /* (62) boolproperty ::= INVIS */
2002 124, /* (63) boolproperty ::= THICK */
2003 124, /* (64) boolproperty ::= THIN */
2004 110, /* (65) textposition ::= */
2005 110, /* (66) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2006 105, /* (67) position ::= expr COMMA expr */
2007 105, /* (68) position ::= place PLUS expr COMMA expr */
2008 105, /* (69) position ::= place MINUS expr COMMA expr */
2009 105, /* (70) position ::= place PLUS LP expr COMMA expr RP */
2010 105, /* (71) position ::= place MINUS LP expr COMMA expr RP */
2011 105, /* (72) position ::= LP position COMMA position RP */
2012 105, /* (73) position ::= LP position RP */
2013 105, /* (74) position ::= expr between position AND position */
2014 105, /* (75) position ::= expr LT position COMMA position GT */
2015 105, /* (76) position ::= expr ABOVE position */
2016 105, /* (77) position ::= expr BELOW position */
2017 105, /* (78) position ::= expr LEFT OF position */
2018 105, /* (79) position ::= expr RIGHT OF position */
2019 105, /* (80) position ::= expr ON HEADING EDGEPT OF position */
2020 105, /* (81) position ::= expr HEADING EDGEPT OF position */
2021 105, /* (82) position ::= expr EDGEPT OF position */
2022 105, /* (83) position ::= expr ON HEADING expr FROM position */
2023 105, /* (84) position ::= expr HEADING expr FROM position */
2024 106, /* (85) place ::= edge OF object */
2025 127, /* (86) place2 ::= object */
2026 127, /* (87) place2 ::= object DOT_E edge */
2027 127, /* (88) place2 ::= NTH VERTEX OF object */
2028 107, /* (89) object ::= nth */
2029 107, /* (90) object ::= nth OF|IN object */
2030 108, /* (91) objectname ::= PLACENAME */
2031 108, /* (92) objectname ::= objectname DOT_U PLACENAME */
2032 109, /* (93) nth ::= NTH CLASSNAME */
2033 109, /* (94) nth ::= NTH LAST CLASSNAME */
2034 109, /* (95) nth ::= LAST CLASSNAME */
2035 109, /* (96) nth ::= LAST */
2036 109, /* (97) nth ::= NTH LB RB */
2037 109, /* (98) nth ::= NTH LAST LB RB */
2038 109, /* (99) nth ::= LAST LB RB */
2039 98, /* (100) expr ::= expr PLUS expr */
2040 98, /* (101) expr ::= expr MINUS expr */
2041 98, /* (102) expr ::= expr STAR expr */
2042 98, /* (103) expr ::= expr SLASH expr */
2043 98, /* (104) expr ::= MINUS expr */
2044 98, /* (105) expr ::= PLUS expr */
2045 98, /* (106) expr ::= LP expr RP */
2046 98, /* (107) expr ::= NUMBER */
2047 98, /* (108) expr ::= ID */
2048 98, /* (109) expr ::= FUNC1 LP expr RP */
2049 98, /* (110) expr ::= FUNC2 LP expr COMMA expr RP */
2050 98, /* (111) expr ::= place2 DOT_XY X */
2051 98, /* (112) expr ::= place2 DOT_XY Y */
2052 98, /* (113) expr ::= object DOT_L numproperty */
2053 98, /* (114) expr ::= object DOT_L dashproperty */
2054 98, /* (115) expr ::= object DOT_L colorproperty */
2055 112, /* (116) lvalue ::= ID */
2056 112, /* (117) lvalue ::= FILL */
2057 112, /* (118) lvalue ::= COLOR */
2058 112, /* (119) lvalue ::= THICKNESS */
2059 111, /* (120) rvalue ::= expr */
2060 115, /* (121) print ::= PRINT */
2061 116, /* (122) prlist ::= pritem */
2062 116, /* (123) prlist ::= prlist prsep pritem */
2063 101, /* (124) direction ::= UP */
2064 101, /* (125) direction ::= DOWN */
2065 101, /* (126) direction ::= LEFT */
2066 101, /* (127) direction ::= RIGHT */
2067 119, /* (128) attribute_list ::= alist */
2068 121, /* (129) alist ::= */
2069 121, /* (130) alist ::= alist attribute */
2070 122, /* (131) attribute ::= boolproperty */
2071 122, /* (132) attribute ::= WITH withclause */
2072 123, /* (133) go ::= GO */
2073 123, /* (134) go ::= */
2074 113, /* (135) even ::= UNTIL EVEN WITH */
2075 113, /* (136) even ::= EVEN WITH */
2076 102, /* (137) dashproperty ::= DOTTED */
2077 102, /* (138) dashproperty ::= DASHED */
2078 103, /* (139) colorproperty ::= FILL */
2079 103, /* (140) colorproperty ::= COLOR */
2080 105, /* (141) position ::= place */
2081 126, /* (142) between ::= WAY BETWEEN */
2082 126, /* (143) between ::= BETWEEN */
2083 126, /* (144) between ::= OF THE WAY BETWEEN */
2084 106, /* (145) place ::= place2 */
2085 100, /* (146) edge ::= CENTER */
2086 100, /* (147) edge ::= EDGEPT */
2087 100, /* (148) edge ::= TOP */
2088 100, /* (149) edge ::= BOTTOM */
2089 100, /* (150) edge ::= START */
2090 100, /* (151) edge ::= END */
2091 100, /* (152) edge ::= RIGHT */
2092 100, /* (153) edge ::= LEFT */
2093 107, /* (154) object ::= objectname */
2094 };
2095
2096 /* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
2097 ** of symbols on the right-hand side of that rule. */
2098 static const signed char yyRuleInfoNRhs[] = {
@@ -2141,81 +2174,85 @@
2174 -6, /* (75) position ::= expr LT position COMMA position GT */
2175 -3, /* (76) position ::= expr ABOVE position */
2176 -3, /* (77) position ::= expr BELOW position */
2177 -4, /* (78) position ::= expr LEFT OF position */
2178 -4, /* (79) position ::= expr RIGHT OF position */
2179 -6, /* (80) position ::= expr ON HEADING EDGEPT OF position */
2180 -5, /* (81) position ::= expr HEADING EDGEPT OF position */
2181 -4, /* (82) position ::= expr EDGEPT OF position */
2182 -6, /* (83) position ::= expr ON HEADING expr FROM position */
2183 -5, /* (84) position ::= expr HEADING expr FROM position */
2184 -3, /* (85) place ::= edge OF object */
2185 -1, /* (86) place2 ::= object */
2186 -3, /* (87) place2 ::= object DOT_E edge */
2187 -4, /* (88) place2 ::= NTH VERTEX OF object */
2188 -1, /* (89) object ::= nth */
2189 -3, /* (90) object ::= nth OF|IN object */
2190 -1, /* (91) objectname ::= PLACENAME */
2191 -3, /* (92) objectname ::= objectname DOT_U PLACENAME */
2192 -2, /* (93) nth ::= NTH CLASSNAME */
2193 -3, /* (94) nth ::= NTH LAST CLASSNAME */
2194 -2, /* (95) nth ::= LAST CLASSNAME */
2195 -1, /* (96) nth ::= LAST */
2196 -3, /* (97) nth ::= NTH LB RB */
2197 -4, /* (98) nth ::= NTH LAST LB RB */
2198 -3, /* (99) nth ::= LAST LB RB */
2199 -3, /* (100) expr ::= expr PLUS expr */
2200 -3, /* (101) expr ::= expr MINUS expr */
2201 -3, /* (102) expr ::= expr STAR expr */
2202 -3, /* (103) expr ::= expr SLASH expr */
2203 -2, /* (104) expr ::= MINUS expr */
2204 -2, /* (105) expr ::= PLUS expr */
2205 -3, /* (106) expr ::= LP expr RP */
2206 -1, /* (107) expr ::= NUMBER */
2207 -1, /* (108) expr ::= ID */
2208 -4, /* (109) expr ::= FUNC1 LP expr RP */
2209 -6, /* (110) expr ::= FUNC2 LP expr COMMA expr RP */
2210 -3, /* (111) expr ::= place2 DOT_XY X */
2211 -3, /* (112) expr ::= place2 DOT_XY Y */
2212 -3, /* (113) expr ::= object DOT_L numproperty */
2213 -3, /* (114) expr ::= object DOT_L dashproperty */
2214 -3, /* (115) expr ::= object DOT_L colorproperty */
2215 -1, /* (116) lvalue ::= ID */
2216 -1, /* (117) lvalue ::= FILL */
2217 -1, /* (118) lvalue ::= COLOR */
2218 -1, /* (119) lvalue ::= THICKNESS */
2219 -1, /* (120) rvalue ::= expr */
2220 -1, /* (121) print ::= PRINT */
2221 -1, /* (122) prlist ::= pritem */
2222 -3, /* (123) prlist ::= prlist prsep pritem */
2223 -1, /* (124) direction ::= UP */
2224 -1, /* (125) direction ::= DOWN */
2225 -1, /* (126) direction ::= LEFT */
2226 -1, /* (127) direction ::= RIGHT */
2227 -1, /* (128) attribute_list ::= alist */
2228 0, /* (129) alist ::= */
2229 -2, /* (130) alist ::= alist attribute */
2230 -1, /* (131) attribute ::= boolproperty */
2231 -2, /* (132) attribute ::= WITH withclause */
2232 -1, /* (133) go ::= GO */
2233 0, /* (134) go ::= */
2234 -3, /* (135) even ::= UNTIL EVEN WITH */
2235 -2, /* (136) even ::= EVEN WITH */
2236 -1, /* (137) dashproperty ::= DOTTED */
2237 -1, /* (138) dashproperty ::= DASHED */
2238 -1, /* (139) colorproperty ::= FILL */
2239 -1, /* (140) colorproperty ::= COLOR */
2240 -1, /* (141) position ::= place */
2241 -2, /* (142) between ::= WAY BETWEEN */
2242 -1, /* (143) between ::= BETWEEN */
2243 -4, /* (144) between ::= OF THE WAY BETWEEN */
2244 -1, /* (145) place ::= place2 */
2245 -1, /* (146) edge ::= CENTER */
2246 -1, /* (147) edge ::= EDGEPT */
2247 -1, /* (148) edge ::= TOP */
2248 -1, /* (149) edge ::= BOTTOM */
2249 -1, /* (150) edge ::= START */
2250 -1, /* (151) edge ::= END */
2251 -1, /* (152) edge ::= RIGHT */
2252 -1, /* (153) edge ::= LEFT */
2253 -1, /* (154) object ::= objectname */
2254 };
2255
2256 static void yy_accept(yyParser*); /* Forward Declaration */
2257
2258 /*
@@ -2302,627 +2339,646 @@
2339 ** break;
2340 */
2341 /********** Begin reduce actions **********************************************/
2342 YYMINORTYPE yylhsminor;
2343 case 0: /* document ::= element_list */
2344 #line 483 "pikchr.y"
2345 {pik_render(p,yymsp[0].minor.yy52);}
2346 #line 2371 "pikchr.c"
2347 break;
2348 case 1: /* element_list ::= element */
2349 #line 486 "pikchr.y"
2350 { yylhsminor.yy52 = pik_elist_append(p,0,yymsp[0].minor.yy58); }
2351 #line 2376 "pikchr.c"
2352 yymsp[0].minor.yy52 = yylhsminor.yy52;
2353 break;
2354 case 2: /* element_list ::= element_list EOL element */
2355 #line 488 "pikchr.y"
2356 { yylhsminor.yy52 = pik_elist_append(p,yymsp[-2].minor.yy52,yymsp[0].minor.yy58); }
2357 #line 2382 "pikchr.c"
2358 yymsp[-2].minor.yy52 = yylhsminor.yy52;
2359 break;
2360 case 3: /* element ::= */
2361 #line 491 "pikchr.y"
2362 { yymsp[1].minor.yy58 = 0; }
2363 #line 2388 "pikchr.c"
2364 break;
2365 case 4: /* element ::= direction */
2366 #line 492 "pikchr.y"
2367 { pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy58=0; }
2368 #line 2393 "pikchr.c"
2369 yymsp[0].minor.yy58 = yylhsminor.yy58;
2370 break;
2371 case 5: /* element ::= lvalue ASSIGN rvalue */
2372 #line 493 "pikchr.y"
2373 {pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy149,&yymsp[-1].minor.yy0); yylhsminor.yy58=0;}
2374 #line 2399 "pikchr.c"
2375 yymsp[-2].minor.yy58 = yylhsminor.yy58;
2376 break;
2377 case 6: /* element ::= PLACENAME COLON unnamed_element */
2378 #line 495 "pikchr.y"
2379 { yylhsminor.yy58 = yymsp[0].minor.yy58; pik_elem_setname(p,yymsp[0].minor.yy58,&yymsp[-2].minor.yy0); }
2380 #line 2405 "pikchr.c"
2381 yymsp[-2].minor.yy58 = yylhsminor.yy58;
2382 break;
2383 case 7: /* element ::= PLACENAME COLON position */
2384 #line 497 "pikchr.y"
2385 { yylhsminor.yy58 = pik_elem_new(p,0,0,0);
2386 if(yylhsminor.yy58){ yylhsminor.yy58->ptAt = yymsp[0].minor.yy95; pik_elem_setname(p,yylhsminor.yy58,&yymsp[-2].minor.yy0); }}
2387 #line 2412 "pikchr.c"
2388 yymsp[-2].minor.yy58 = yylhsminor.yy58;
2389 break;
2390 case 8: /* element ::= unnamed_element */
2391 #line 499 "pikchr.y"
2392 {yylhsminor.yy58 = yymsp[0].minor.yy58;}
2393 #line 2418 "pikchr.c"
2394 yymsp[0].minor.yy58 = yylhsminor.yy58;
2395 break;
2396 case 9: /* element ::= print prlist */
2397 #line 500 "pikchr.y"
2398 {pik_append(p,"<br>\n",5); yymsp[-1].minor.yy58=0;}
2399 #line 2424 "pikchr.c"
2400 break;
2401 case 10: /* element ::= ASSERT LP expr EQ expr RP */
2402 #line 505 "pikchr.y"
2403 {yymsp[-5].minor.yy58=pik_assert(p,yymsp[-3].minor.yy149,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy149);}
2404 #line 2429 "pikchr.c"
2405 break;
2406 case 11: /* element ::= ASSERT LP place EQ place RP */
2407 #line 507 "pikchr.y"
2408 {yymsp[-5].minor.yy58=pik_place_assert(p,&yymsp[-3].minor.yy95,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy95);}
2409 #line 2434 "pikchr.c"
2410 break;
2411 case 12: /* rvalue ::= PLACENAME */
2412 #line 518 "pikchr.y"
2413 {yylhsminor.yy149 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2414 #line 2439 "pikchr.c"
2415 yymsp[0].minor.yy149 = yylhsminor.yy149;
2416 break;
2417 case 13: /* pritem ::= FILL */
2418 case 14: /* pritem ::= COLOR */ yytestcase(yyruleno==14);
2419 case 15: /* pritem ::= THICKNESS */ yytestcase(yyruleno==15);
2420 #line 523 "pikchr.y"
2421 {pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));}
2422 #line 2447 "pikchr.c"
2423 break;
2424 case 16: /* pritem ::= rvalue */
2425 #line 526 "pikchr.y"
2426 {pik_append_num(p,"",yymsp[0].minor.yy149);}
2427 #line 2452 "pikchr.c"
2428 break;
2429 case 17: /* pritem ::= STRING */
2430 #line 527 "pikchr.y"
2431 {pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2432 #line 2457 "pikchr.c"
2433 break;
2434 case 18: /* prsep ::= COMMA */
2435 #line 528 "pikchr.y"
2436 {pik_append(p, " ", 1);}
2437 #line 2462 "pikchr.c"
2438 break;
2439 case 19: /* unnamed_element ::= basetype attribute_list */
2440 #line 531 "pikchr.y"
2441 {yylhsminor.yy58 = yymsp[-1].minor.yy58; pik_after_adding_attributes(p,yylhsminor.yy58);}
2442 #line 2467 "pikchr.c"
2443 yymsp[-1].minor.yy58 = yylhsminor.yy58;
2444 break;
2445 case 20: /* basetype ::= CLASSNAME */
2446 #line 533 "pikchr.y"
2447 {yylhsminor.yy58 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2448 #line 2473 "pikchr.c"
2449 yymsp[0].minor.yy58 = yylhsminor.yy58;
2450 break;
2451 case 21: /* basetype ::= STRING textposition */
2452 #line 535 "pikchr.y"
2453 {yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy92; yylhsminor.yy58 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2454 #line 2479 "pikchr.c"
2455 yymsp[-1].minor.yy58 = yylhsminor.yy58;
2456 break;
2457 case 22: /* basetype ::= LB savelist element_list RB */
2458 #line 537 "pikchr.y"
2459 { p->list = yymsp[-2].minor.yy52; yymsp[-3].minor.yy58 = pik_elem_new(p,0,0,yymsp[-1].minor.yy52); if(yymsp[-3].minor.yy58) yymsp[-3].minor.yy58->errTok = yymsp[0].minor.yy0; }
2460 #line 2485 "pikchr.c"
2461 break;
2462 case 23: /* savelist ::= */
2463 #line 542 "pikchr.y"
2464 {yymsp[1].minor.yy52 = p->list; p->list = 0;}
2465 #line 2490 "pikchr.c"
2466 break;
2467 case 24: /* attribute_list ::= expr alist */
2468 #line 549 "pikchr.y"
2469 { pik_add_direction(p,0,&yymsp[-1].minor.yy149,0);}
2470 #line 2495 "pikchr.c"
2471 break;
2472 case 25: /* attribute_list ::= expr PERCENT alist */
2473 #line 550 "pikchr.y"
2474 { pik_add_direction(p,0,&yymsp[-2].minor.yy149,1);}
2475 #line 2500 "pikchr.c"
2476 break;
2477 case 26: /* attribute ::= numproperty expr PERCENT */
2478 #line 555 "pikchr.y"
2479 { pik_set_numprop(p,&yymsp[-2].minor.yy0,0.0,yymsp[-1].minor.yy149/100.0); }
2480 #line 2505 "pikchr.c"
2481 break;
2482 case 27: /* attribute ::= numproperty expr */
2483 case 30: /* attribute ::= colorproperty rvalue */ yytestcase(yyruleno==30);
2484 #line 556 "pikchr.y"
2485 { pik_set_numprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy149,0.0); }
2486 #line 2511 "pikchr.c"
2487 break;
2488 case 28: /* attribute ::= dashproperty expr */
2489 #line 557 "pikchr.y"
2490 { pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy149); }
2491 #line 2516 "pikchr.c"
2492 break;
2493 case 29: /* attribute ::= dashproperty */
2494 #line 558 "pikchr.y"
2495 { pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2496 #line 2521 "pikchr.c"
2497 break;
2498 case 31: /* attribute ::= go direction expr PERCENT */
2499 #line 561 "pikchr.y"
2500 { pik_add_direction(p,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy149,1);}
2501 #line 2526 "pikchr.c"
2502 break;
2503 case 32: /* attribute ::= go direction expr */
2504 #line 562 "pikchr.y"
2505 { pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy149,0);}
2506 #line 2531 "pikchr.c"
2507 break;
2508 case 33: /* attribute ::= go direction */
2509 #line 563 "pikchr.y"
2510 { pik_add_direction(p,&yymsp[0].minor.yy0,0,0); }
2511 #line 2536 "pikchr.c"
2512 break;
2513 case 34: /* attribute ::= go direction even position */
2514 #line 564 "pikchr.y"
2515 {pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy95);}
2516 #line 2541 "pikchr.c"
2517 break;
2518 case 35: /* attribute ::= CLOSE */
2519 #line 565 "pikchr.y"
2520 { pik_close_path(p,&yymsp[0].minor.yy0); }
2521 #line 2546 "pikchr.c"
2522 break;
2523 case 36: /* attribute ::= CHOP */
2524 #line 566 "pikchr.y"
2525 { p->cur->bChop = 1; }
2526 #line 2551 "pikchr.c"
2527 break;
2528 case 37: /* attribute ::= FROM position */
2529 #line 567 "pikchr.y"
2530 { pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy95); }
2531 #line 2556 "pikchr.c"
2532 break;
2533 case 38: /* attribute ::= TO position */
2534 #line 568 "pikchr.y"
2535 { pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy95); }
2536 #line 2561 "pikchr.c"
2537 break;
2538 case 39: /* attribute ::= THEN */
2539 #line 569 "pikchr.y"
2540 { pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2541 #line 2566 "pikchr.c"
2542 break;
2543 case 40: /* attribute ::= THEN expr HEADING expr */
2544 case 44: /* attribute ::= GO expr HEADING expr */ yytestcase(yyruleno==44);
2545 #line 571 "pikchr.y"
2546 {pik_move_hdg(p,&yymsp[-2].minor.yy149,&yymsp[-1].minor.yy0,yymsp[0].minor.yy149,0,&yymsp[-3].minor.yy0);}
2547 #line 2572 "pikchr.c"
2548 break;
2549 case 41: /* attribute ::= THEN HEADING expr */
2550 case 45: /* attribute ::= GO HEADING expr */ yytestcase(yyruleno==45);
2551 #line 572 "pikchr.y"
2552 {pik_move_hdg(p,0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy149,0,&yymsp[-2].minor.yy0);}
2553 #line 2578 "pikchr.c"
2554 break;
2555 case 42: /* attribute ::= THEN expr EDGEPT */
2556 case 46: /* attribute ::= GO expr EDGEPT */ yytestcase(yyruleno==46);
2557 #line 573 "pikchr.y"
2558 {pik_move_hdg(p,&yymsp[-1].minor.yy149,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);}
2559 #line 2584 "pikchr.c"
2560 break;
2561 case 43: /* attribute ::= THEN EDGEPT */
2562 case 47: /* attribute ::= GO EDGEPT */ yytestcase(yyruleno==47);
2563 #line 574 "pikchr.y"
2564 {pik_move_hdg(p,0,0,0,&yymsp[0].minor.yy0,&yymsp[-1].minor.yy0);}
2565 #line 2590 "pikchr.c"
2566 break;
2567 case 48: /* attribute ::= AT position */
2568 #line 580 "pikchr.y"
2569 { pik_set_at(p,0,&yymsp[0].minor.yy95,&yymsp[-1].minor.yy0); }
2570 #line 2595 "pikchr.c"
2571 break;
2572 case 49: /* attribute ::= SAME */
2573 #line 582 "pikchr.y"
2574 {pik_same(p,0,&yymsp[0].minor.yy0);}
2575 #line 2600 "pikchr.c"
2576 break;
2577 case 50: /* attribute ::= SAME AS object */
2578 #line 583 "pikchr.y"
2579 {pik_same(p,yymsp[0].minor.yy58,&yymsp[-2].minor.yy0);}
2580 #line 2605 "pikchr.c"
2581 break;
2582 case 51: /* attribute ::= STRING textposition */
2583 #line 584 "pikchr.y"
2584 {pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy92);}
2585 #line 2610 "pikchr.c"
2586 break;
2587 case 52: /* attribute ::= FIT */
2588 #line 585 "pikchr.y"
2589 {pik_size_to_fit(p,&yymsp[0].minor.yy0); }
2590 #line 2615 "pikchr.c"
2591 break;
2592 case 53: /* attribute ::= BEHIND object */
2593 #line 586 "pikchr.y"
2594 {pik_behind(p,yymsp[0].minor.yy58);}
2595 #line 2620 "pikchr.c"
2596 break;
2597 case 54: /* withclause ::= DOT_E edge AT position */
2598 case 55: /* withclause ::= edge AT position */ yytestcase(yyruleno==55);
2599 #line 594 "pikchr.y"
2600 { pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy95,&yymsp[-1].minor.yy0); }
2601 #line 2626 "pikchr.c"
2602 break;
2603 case 56: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2604 #line 598 "pikchr.y"
2605 {yylhsminor.yy0 = yymsp[0].minor.yy0;}
2606 #line 2631 "pikchr.c"
2607 yymsp[0].minor.yy0 = yylhsminor.yy0;
2608 break;
2609 case 57: /* boolproperty ::= CW */
2610 #line 609 "pikchr.y"
2611 {p->cur->cw = 1;}
2612 #line 2637 "pikchr.c"
2613 break;
2614 case 58: /* boolproperty ::= CCW */
2615 #line 610 "pikchr.y"
2616 {p->cur->cw = 0;}
2617 #line 2642 "pikchr.c"
2618 break;
2619 case 59: /* boolproperty ::= LARROW */
2620 #line 611 "pikchr.y"
2621 {p->cur->larrow=1; p->cur->rarrow=0; }
2622 #line 2647 "pikchr.c"
2623 break;
2624 case 60: /* boolproperty ::= RARROW */
2625 #line 612 "pikchr.y"
2626 {p->cur->larrow=0; p->cur->rarrow=1; }
2627 #line 2652 "pikchr.c"
2628 break;
2629 case 61: /* boolproperty ::= LRARROW */
2630 #line 613 "pikchr.y"
2631 {p->cur->larrow=1; p->cur->rarrow=1; }
2632 #line 2657 "pikchr.c"
2633 break;
2634 case 62: /* boolproperty ::= INVIS */
2635 #line 614 "pikchr.y"
2636 {p->cur->sw = 0.0;}
2637 #line 2662 "pikchr.c"
2638 break;
2639 case 63: /* boolproperty ::= THICK */
2640 #line 615 "pikchr.y"
2641 {p->cur->sw *= 1.5;}
2642 #line 2667 "pikchr.c"
2643 break;
2644 case 64: /* boolproperty ::= THIN */
2645 #line 616 "pikchr.y"
2646 {p->cur->sw *= 0.67;}
2647 #line 2672 "pikchr.c"
2648 break;
2649 case 65: /* textposition ::= */
2650 #line 618 "pikchr.y"
2651 {yymsp[1].minor.yy92 = 0;}
2652 #line 2677 "pikchr.c"
2653 break;
2654 case 66: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2655 #line 621 "pikchr.y"
2656 {yylhsminor.yy92 = pik_text_position(p,yymsp[-1].minor.yy92,&yymsp[0].minor.yy0);}
2657 #line 2682 "pikchr.c"
2658 yymsp[-1].minor.yy92 = yylhsminor.yy92;
2659 break;
2660 case 67: /* position ::= expr COMMA expr */
2661 #line 624 "pikchr.y"
2662 {yylhsminor.yy95.x=yymsp[-2].minor.yy149; yylhsminor.yy95.y=yymsp[0].minor.yy149;}
2663 #line 2688 "pikchr.c"
2664 yymsp[-2].minor.yy95 = yylhsminor.yy95;
2665 break;
2666 case 68: /* position ::= place PLUS expr COMMA expr */
2667 #line 626 "pikchr.y"
2668 {yylhsminor.yy95.x=yymsp[-4].minor.yy95.x+yymsp[-2].minor.yy149; yylhsminor.yy95.y=yymsp[-4].minor.yy95.y+yymsp[0].minor.yy149;}
2669 #line 2694 "pikchr.c"
2670 yymsp[-4].minor.yy95 = yylhsminor.yy95;
2671 break;
2672 case 69: /* position ::= place MINUS expr COMMA expr */
2673 #line 627 "pikchr.y"
2674 {yylhsminor.yy95.x=yymsp[-4].minor.yy95.x-yymsp[-2].minor.yy149; yylhsminor.yy95.y=yymsp[-4].minor.yy95.y-yymsp[0].minor.yy149;}
2675 #line 2700 "pikchr.c"
2676 yymsp[-4].minor.yy95 = yylhsminor.yy95;
2677 break;
2678 case 70: /* position ::= place PLUS LP expr COMMA expr RP */
2679 #line 629 "pikchr.y"
2680 {yylhsminor.yy95.x=yymsp[-6].minor.yy95.x+yymsp[-3].minor.yy149; yylhsminor.yy95.y=yymsp[-6].minor.yy95.y+yymsp[-1].minor.yy149;}
2681 #line 2706 "pikchr.c"
2682 yymsp[-6].minor.yy95 = yylhsminor.yy95;
2683 break;
2684 case 71: /* position ::= place MINUS LP expr COMMA expr RP */
2685 #line 631 "pikchr.y"
2686 {yylhsminor.yy95.x=yymsp[-6].minor.yy95.x-yymsp[-3].minor.yy149; yylhsminor.yy95.y=yymsp[-6].minor.yy95.y-yymsp[-1].minor.yy149;}
2687 #line 2712 "pikchr.c"
2688 yymsp[-6].minor.yy95 = yylhsminor.yy95;
2689 break;
2690 case 72: /* position ::= LP position COMMA position RP */
2691 #line 632 "pikchr.y"
2692 {yymsp[-4].minor.yy95.x=yymsp[-3].minor.yy95.x; yymsp[-4].minor.yy95.y=yymsp[-1].minor.yy95.y;}
2693 #line 2718 "pikchr.c"
2694 break;
2695 case 73: /* position ::= LP position RP */
2696 #line 633 "pikchr.y"
2697 {yymsp[-2].minor.yy95=yymsp[-1].minor.yy95;}
2698 #line 2723 "pikchr.c"
2699 break;
2700 case 74: /* position ::= expr between position AND position */
2701 #line 635 "pikchr.y"
2702 {yylhsminor.yy95 = pik_position_between(p,yymsp[-4].minor.yy149,yymsp[-2].minor.yy95,yymsp[0].minor.yy95);}
2703 #line 2728 "pikchr.c"
2704 yymsp[-4].minor.yy95 = yylhsminor.yy95;
2705 break;
2706 case 75: /* position ::= expr LT position COMMA position GT */
2707 #line 637 "pikchr.y"
2708 {yylhsminor.yy95 = pik_position_between(p,yymsp[-5].minor.yy149,yymsp[-3].minor.yy95,yymsp[-1].minor.yy95);}
2709 #line 2734 "pikchr.c"
2710 yymsp[-5].minor.yy95 = yylhsminor.yy95;
2711 break;
2712 case 76: /* position ::= expr ABOVE position */
2713 #line 638 "pikchr.y"
2714 {yylhsminor.yy95=yymsp[0].minor.yy95; yylhsminor.yy95.y += yymsp[-2].minor.yy149;}
2715 #line 2740 "pikchr.c"
2716 yymsp[-2].minor.yy95 = yylhsminor.yy95;
2717 break;
2718 case 77: /* position ::= expr BELOW position */
2719 #line 639 "pikchr.y"
2720 {yylhsminor.yy95=yymsp[0].minor.yy95; yylhsminor.yy95.y -= yymsp[-2].minor.yy149;}
2721 #line 2746 "pikchr.c"
2722 yymsp[-2].minor.yy95 = yylhsminor.yy95;
2723 break;
2724 case 78: /* position ::= expr LEFT OF position */
2725 #line 640 "pikchr.y"
2726 {yylhsminor.yy95=yymsp[0].minor.yy95; yylhsminor.yy95.x -= yymsp[-3].minor.yy149;}
2727 #line 2752 "pikchr.c"
2728 yymsp[-3].minor.yy95 = yylhsminor.yy95;
2729 break;
2730 case 79: /* position ::= expr RIGHT OF position */
2731 #line 641 "pikchr.y"
2732 {yylhsminor.yy95=yymsp[0].minor.yy95; yylhsminor.yy95.x += yymsp[-3].minor.yy149;}
2733 #line 2758 "pikchr.c"
2734 yymsp[-3].minor.yy95 = yylhsminor.yy95;
2735 break;
2736 case 80: /* position ::= expr ON HEADING EDGEPT OF position */
2737 #line 643 "pikchr.y"
2738 {yylhsminor.yy95 = pik_position_at_hdg(p,yymsp[-5].minor.yy149,&yymsp[-2].minor.yy0,yymsp[0].minor.yy95);}
2739 #line 2764 "pikchr.c"
2740 yymsp[-5].minor.yy95 = yylhsminor.yy95;
2741 break;
2742 case 81: /* position ::= expr HEADING EDGEPT OF position */
2743 #line 645 "pikchr.y"
2744 {yylhsminor.yy95 = pik_position_at_hdg(p,yymsp[-4].minor.yy149,&yymsp[-2].minor.yy0,yymsp[0].minor.yy95);}
2745 #line 2770 "pikchr.c"
2746 yymsp[-4].minor.yy95 = yylhsminor.yy95;
2747 break;
2748 case 82: /* position ::= expr EDGEPT OF position */
2749 #line 647 "pikchr.y"
2750 {yylhsminor.yy95 = pik_position_at_hdg(p,yymsp[-3].minor.yy149,&yymsp[-2].minor.yy0,yymsp[0].minor.yy95);}
2751 #line 2776 "pikchr.c"
2752 yymsp[-3].minor.yy95 = yylhsminor.yy95;
2753 break;
2754 case 83: /* position ::= expr ON HEADING expr FROM position */
2755 #line 649 "pikchr.y"
2756 {yylhsminor.yy95 = pik_position_at_angle(p,yymsp[-5].minor.yy149,yymsp[-2].minor.yy149,yymsp[0].minor.yy95);}
2757 #line 2782 "pikchr.c"
2758 yymsp[-5].minor.yy95 = yylhsminor.yy95;
2759 break;
2760 case 84: /* position ::= expr HEADING expr FROM position */
2761 #line 651 "pikchr.y"
2762 {yylhsminor.yy95 = pik_position_at_angle(p,yymsp[-4].minor.yy149,yymsp[-2].minor.yy149,yymsp[0].minor.yy95);}
2763 #line 2788 "pikchr.c"
2764 yymsp[-4].minor.yy95 = yylhsminor.yy95;
2765 break;
2766 case 85: /* place ::= edge OF object */
2767 #line 663 "pikchr.y"
2768 {yylhsminor.yy95 = pik_place_of_elem(p,yymsp[0].minor.yy58,&yymsp[-2].minor.yy0);}
2769 #line 2794 "pikchr.c"
2770 yymsp[-2].minor.yy95 = yylhsminor.yy95;
2771 break;
2772 case 86: /* place2 ::= object */
2773 #line 664 "pikchr.y"
2774 {yylhsminor.yy95 = pik_place_of_elem(p,yymsp[0].minor.yy58,0);}
2775 #line 2800 "pikchr.c"
2776 yymsp[0].minor.yy95 = yylhsminor.yy95;
2777 break;
2778 case 87: /* place2 ::= object DOT_E edge */
2779 #line 665 "pikchr.y"
2780 {yylhsminor.yy95 = pik_place_of_elem(p,yymsp[-2].minor.yy58,&yymsp[0].minor.yy0);}
2781 #line 2806 "pikchr.c"
2782 yymsp[-2].minor.yy95 = yylhsminor.yy95;
2783 break;
2784 case 88: /* place2 ::= NTH VERTEX OF object */
2785 #line 666 "pikchr.y"
2786 {yylhsminor.yy95 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy58);}
2787 #line 2812 "pikchr.c"
2788 yymsp[-3].minor.yy95 = yylhsminor.yy95;
2789 break;
2790 case 89: /* object ::= nth */
2791 #line 678 "pikchr.y"
2792 {yylhsminor.yy58 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2793 #line 2818 "pikchr.c"
2794 yymsp[0].minor.yy58 = yylhsminor.yy58;
2795 break;
2796 case 90: /* object ::= nth OF|IN object */
2797 #line 679 "pikchr.y"
2798 {yylhsminor.yy58 = pik_find_nth(p,yymsp[0].minor.yy58,&yymsp[-2].minor.yy0);}
2799 #line 2824 "pikchr.c"
2800 yymsp[-2].minor.yy58 = yylhsminor.yy58;
2801 break;
2802 case 91: /* objectname ::= PLACENAME */
2803 #line 681 "pikchr.y"
2804 {yylhsminor.yy58 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2805 #line 2830 "pikchr.c"
2806 yymsp[0].minor.yy58 = yylhsminor.yy58;
2807 break;
2808 case 92: /* objectname ::= objectname DOT_U PLACENAME */
2809 #line 683 "pikchr.y"
2810 {yylhsminor.yy58 = pik_find_byname(p,yymsp[-2].minor.yy58,&yymsp[0].minor.yy0);}
2811 #line 2836 "pikchr.c"
2812 yymsp[-2].minor.yy58 = yylhsminor.yy58;
2813 break;
2814 case 93: /* nth ::= NTH CLASSNAME */
2815 #line 685 "pikchr.y"
2816 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2817 #line 2842 "pikchr.c"
2818 yymsp[-1].minor.yy0 = yylhsminor.yy0;
2819 break;
2820 case 94: /* nth ::= NTH LAST CLASSNAME */
2821 #line 686 "pikchr.y"
2822 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2823 #line 2848 "pikchr.c"
2824 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2825 break;
2826 case 95: /* nth ::= LAST CLASSNAME */
2827 #line 687 "pikchr.y"
2828 {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2829 #line 2854 "pikchr.c"
2830 break;
2831 case 96: /* nth ::= LAST */
2832 #line 688 "pikchr.y"
2833 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2834 #line 2859 "pikchr.c"
2835 yymsp[0].minor.yy0 = yylhsminor.yy0;
2836 break;
2837 case 97: /* nth ::= NTH LB RB */
2838 #line 689 "pikchr.y"
2839 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2840 #line 2865 "pikchr.c"
2841 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2842 break;
2843 case 98: /* nth ::= NTH LAST LB RB */
2844 #line 690 "pikchr.y"
2845 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2846 #line 2871 "pikchr.c"
2847 yymsp[-3].minor.yy0 = yylhsminor.yy0;
2848 break;
2849 case 99: /* nth ::= LAST LB RB */
2850 #line 691 "pikchr.y"
2851 {yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2852 #line 2877 "pikchr.c"
2853 break;
2854 case 100: /* expr ::= expr PLUS expr */
2855 #line 693 "pikchr.y"
2856 {yylhsminor.yy149=yymsp[-2].minor.yy149+yymsp[0].minor.yy149;}
2857 #line 2882 "pikchr.c"
2858 yymsp[-2].minor.yy149 = yylhsminor.yy149;
2859 break;
2860 case 101: /* expr ::= expr MINUS expr */
2861 #line 694 "pikchr.y"
2862 {yylhsminor.yy149=yymsp[-2].minor.yy149-yymsp[0].minor.yy149;}
2863 #line 2888 "pikchr.c"
2864 yymsp[-2].minor.yy149 = yylhsminor.yy149;
2865 break;
2866 case 102: /* expr ::= expr STAR expr */
2867 #line 695 "pikchr.y"
2868 {yylhsminor.yy149=yymsp[-2].minor.yy149*yymsp[0].minor.yy149;}
2869 #line 2894 "pikchr.c"
2870 yymsp[-2].minor.yy149 = yylhsminor.yy149;
2871 break;
2872 case 103: /* expr ::= expr SLASH expr */
2873 #line 696 "pikchr.y"
2874 {
2875 if( yymsp[0].minor.yy149==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy149 = 0.0; }
2876 else{ yylhsminor.yy149 = yymsp[-2].minor.yy149/yymsp[0].minor.yy149; }
2877 }
2878 #line 2903 "pikchr.c"
2879 yymsp[-2].minor.yy149 = yylhsminor.yy149;
2880 break;
2881 case 104: /* expr ::= MINUS expr */
2882 #line 700 "pikchr.y"
2883 {yymsp[-1].minor.yy149=-yymsp[0].minor.yy149;}
2884 #line 2909 "pikchr.c"
2885 break;
2886 case 105: /* expr ::= PLUS expr */
2887 #line 701 "pikchr.y"
2888 {yymsp[-1].minor.yy149=yymsp[0].minor.yy149;}
2889 #line 2914 "pikchr.c"
2890 break;
2891 case 106: /* expr ::= LP expr RP */
2892 #line 702 "pikchr.y"
2893 {yymsp[-2].minor.yy149=yymsp[-1].minor.yy149;}
2894 #line 2919 "pikchr.c"
2895 break;
2896 case 107: /* expr ::= NUMBER */
2897 #line 703 "pikchr.y"
2898 {yylhsminor.yy149=pik_atof(p,&yymsp[0].minor.yy0);}
2899 #line 2924 "pikchr.c"
2900 yymsp[0].minor.yy149 = yylhsminor.yy149;
2901 break;
2902 case 108: /* expr ::= ID */
2903 #line 704 "pikchr.y"
2904 {yylhsminor.yy149=pik_get_var(p,&yymsp[0].minor.yy0);}
2905 #line 2930 "pikchr.c"
2906 yymsp[0].minor.yy149 = yylhsminor.yy149;
2907 break;
2908 case 109: /* expr ::= FUNC1 LP expr RP */
2909 #line 705 "pikchr.y"
2910 {yylhsminor.yy149 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy149,0.0);}
2911 #line 2936 "pikchr.c"
2912 yymsp[-3].minor.yy149 = yylhsminor.yy149;
2913 break;
2914 case 110: /* expr ::= FUNC2 LP expr COMMA expr RP */
2915 #line 706 "pikchr.y"
2916 {yylhsminor.yy149 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy149,yymsp[-1].minor.yy149);}
2917 #line 2942 "pikchr.c"
2918 yymsp[-5].minor.yy149 = yylhsminor.yy149;
2919 break;
2920 case 111: /* expr ::= place2 DOT_XY X */
2921 #line 707 "pikchr.y"
2922 {yylhsminor.yy149 = yymsp[-2].minor.yy95.x;}
2923 #line 2948 "pikchr.c"
2924 yymsp[-2].minor.yy149 = yylhsminor.yy149;
2925 break;
2926 case 112: /* expr ::= place2 DOT_XY Y */
2927 #line 708 "pikchr.y"
2928 {yylhsminor.yy149 = yymsp[-2].minor.yy95.y;}
2929 #line 2954 "pikchr.c"
2930 yymsp[-2].minor.yy149 = yylhsminor.yy149;
2931 break;
2932 case 113: /* expr ::= object DOT_L numproperty */
2933 case 114: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==114);
2934 case 115: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==115);
2935 #line 709 "pikchr.y"
2936 {yylhsminor.yy149=pik_property_of(p,yymsp[-2].minor.yy58,&yymsp[0].minor.yy0);}
2937 #line 2962 "pikchr.c"
2938 yymsp[-2].minor.yy149 = yylhsminor.yy149;
2939 break;
2940 default:
2941 /* (116) lvalue ::= ID */ yytestcase(yyruleno==116);
2942 /* (117) lvalue ::= FILL */ yytestcase(yyruleno==117);
2943 /* (118) lvalue ::= COLOR */ yytestcase(yyruleno==118);
2944 /* (119) lvalue ::= THICKNESS */ yytestcase(yyruleno==119);
2945 /* (120) rvalue ::= expr */ yytestcase(yyruleno==120);
2946 /* (121) print ::= PRINT */ yytestcase(yyruleno==121);
2947 /* (122) prlist ::= pritem (OPTIMIZED OUT) */ assert(yyruleno!=122);
2948 /* (123) prlist ::= prlist prsep pritem */ yytestcase(yyruleno==123);
2949 /* (124) direction ::= UP */ yytestcase(yyruleno==124);
2950 /* (125) direction ::= DOWN */ yytestcase(yyruleno==125);
2951 /* (126) direction ::= LEFT */ yytestcase(yyruleno==126);
2952 /* (127) direction ::= RIGHT */ yytestcase(yyruleno==127);
2953 /* (128) attribute_list ::= alist */ yytestcase(yyruleno==128);
2954 /* (129) alist ::= */ yytestcase(yyruleno==129);
2955 /* (130) alist ::= alist attribute */ yytestcase(yyruleno==130);
2956 /* (131) attribute ::= boolproperty (OPTIMIZED OUT) */ assert(yyruleno!=131);
2957 /* (132) attribute ::= WITH withclause */ yytestcase(yyruleno==132);
2958 /* (133) go ::= GO */ yytestcase(yyruleno==133);
2959 /* (134) go ::= */ yytestcase(yyruleno==134);
2960 /* (135) even ::= UNTIL EVEN WITH */ yytestcase(yyruleno==135);
2961 /* (136) even ::= EVEN WITH */ yytestcase(yyruleno==136);
2962 /* (137) dashproperty ::= DOTTED */ yytestcase(yyruleno==137);
2963 /* (138) dashproperty ::= DASHED */ yytestcase(yyruleno==138);
2964 /* (139) colorproperty ::= FILL */ yytestcase(yyruleno==139);
2965 /* (140) colorproperty ::= COLOR */ yytestcase(yyruleno==140);
2966 /* (141) position ::= place */ yytestcase(yyruleno==141);
2967 /* (142) between ::= WAY BETWEEN */ yytestcase(yyruleno==142);
2968 /* (143) between ::= BETWEEN */ yytestcase(yyruleno==143);
2969 /* (144) between ::= OF THE WAY BETWEEN */ yytestcase(yyruleno==144);
2970 /* (145) place ::= place2 */ yytestcase(yyruleno==145);
2971 /* (146) edge ::= CENTER */ yytestcase(yyruleno==146);
2972 /* (147) edge ::= EDGEPT */ yytestcase(yyruleno==147);
2973 /* (148) edge ::= TOP */ yytestcase(yyruleno==148);
2974 /* (149) edge ::= BOTTOM */ yytestcase(yyruleno==149);
2975 /* (150) edge ::= START */ yytestcase(yyruleno==150);
2976 /* (151) edge ::= END */ yytestcase(yyruleno==151);
2977 /* (152) edge ::= RIGHT */ yytestcase(yyruleno==152);
2978 /* (153) edge ::= LEFT */ yytestcase(yyruleno==153);
2979 /* (154) object ::= objectname */ yytestcase(yyruleno==154);
2980 break;
2981 /********** End reduce actions ************************************************/
2982 };
2983 assert( yyruleno<sizeof(yyRuleInfoLhs)/sizeof(yyRuleInfoLhs[0]) );
2984 yygoto = yyRuleInfoLhs[yyruleno];
@@ -2978,18 +3034,18 @@
3034 ){
3035 pik_parserARG_FETCH
3036 pik_parserCTX_FETCH
3037 #define TOKEN yyminor
3038 /************ Begin %syntax_error code ****************************************/
3039 #line 472 "pikchr.y"
3040
3041 if( TOKEN.z && TOKEN.z[0] ){
3042 pik_error(p, &TOKEN, "syntax error");
3043 }else{
3044 pik_error(p, 0, "syntax error");
3045 }
3046 #line 3071 "pikchr.c"
3047 /************ End %syntax_error code ******************************************/
3048 pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
3049 pik_parserCTX_STORE
3050 }
3051
@@ -3218,11 +3274,11 @@
3274 #else
3275 (void)iToken;
3276 return 0;
3277 #endif
3278 }
3279 #line 714 "pikchr.y"
3280
3281
3282
3283 /* Chart of the 140 official HTML color names with their
3284 ** corresponding RGB value.
@@ -3865,10 +3921,29 @@
3921 static void lineInit(Pik *p, PElem *pElem){
3922 pElem->w = pik_value(p, "linewid",7,0);
3923 pElem->h = pik_value(p, "lineht",6,0);
3924 pElem->rad = pik_value(p, "linerad",7,0);
3925 pElem->fill = -1.0;
3926 }
3927 static PPoint lineOffset(Pik *p, PElem *pElem, int cp){
3928
3929 #if 0 /* No. Just make .center the geometic center of the line.
3930 ** This is different from legacy-PIC and Gnu-PIC, but it seems
3931 ** to work better. And the two points are the same in most
3932 ** cases anyhow. */
3933 /* The .center of an unclosed line is half way between
3934 ** its .start and .end. For everything else, the offset
3935 ** is the same as for box */
3936 if( cp==CP_C && !pElem->bClose ){
3937 PPoint out;
3938 out.x = 0.5*(pElem->ptEnter.x + pElem->ptExit.x) - pElem->ptAt.x;
3939 out.y = 0.5*(pElem->ptEnter.x + pElem->ptExit.y) - pElem->ptAt.y;
3940 return out;
3941 }
3942 #endif
3943
3944 return boxOffset(p,pElem,cp);
3945 }
3946 static void lineRender(Pik *p, PElem *pElem){
3947 int i;
3948 if( pElem->sw>0.0 ){
3949 const char *z = "<path d=\"M";
@@ -4041,11 +4116,11 @@
4116 /* isline */ 1,
4117 /* eJust */ 0,
4118 /* xInit */ arrowInit,
4119 /* xNumProp */ 0,
4120 /* xChop */ 0,
4121 /* xOffset */ lineOffset,
4122 /* xFit */ 0,
4123 /* xRender */ splineRender
4124 },
4125 { /* name */ "box",
4126 /* isline */ 0,
@@ -4111,11 +4186,11 @@
4186 /* isline */ 1,
4187 /* eJust */ 0,
4188 /* xInit */ lineInit,
4189 /* xNumProp */ 0,
4190 /* xChop */ 0,
4191 /* xOffset */ lineOffset,
4192 /* xFit */ 0,
4193 /* xRender */ splineRender
4194 },
4195 { /* name */ "move",
4196 /* isline */ 1,
@@ -4141,11 +4216,11 @@
4216 /* isline */ 1,
4217 /* eJust */ 0,
4218 /* xInit */ splineInit,
4219 /* xNumProp */ 0,
4220 /* xChop */ 0,
4221 /* xOffset */ lineOffset,
4222 /* xFit */ 0,
4223 /* xRender */ splineRender
4224 },
4225 { /* name */ "text",
4226 /* isline */ 0,
@@ -4659,18 +4734,18 @@
4734
4735 /*
4736 ** Process an "assert( e1 == e2 )" statement. Always return NULL.
4737 */
4738 static PElem *pik_assert(Pik *p, PNum e1, PToken *pEq, PNum e2){
4739 char zE1[100], zE2[100], zMsg[300];
4740
4741 /* Convert the numbers to strings using %g for comparison. This
4742 ** limits the precision of the comparison to account for rounding error. */
4743 snprintf(zE1, sizeof(zE1), "%g", e1); zE1[sizeof(zE1)-1] = 0;
4744 snprintf(zE2, sizeof(zE2), "%g", e2); zE1[sizeof(zE2)-1] = 0;
4745 if( strcmp(zE1,zE2)!=0 ){
4746 snprintf(zMsg, sizeof(zMsg), "%.50s != %.50s", zE1, zE2);
4747 pik_error(p, pEq, zMsg);
4748 }
4749 return 0;
4750 }
4751
@@ -5858,15 +5933,10 @@
5933 if( pEdge==0 ){
5934 return pElem->ptAt;
5935 }
5936 pClass = pElem->type;
5937 if( pEdge->eType==T_EDGEPT || pEdge->eEdge>0 ){
 
 
 
 
 
5938 if( pClass->xOffset==0 ){
5939 pt = boxOffset(p, pElem, pEdge->eEdge);
5940 }else{
5941 pt = pClass->xOffset(p, pElem, pEdge->eEdge);
5942 }
@@ -6113,11 +6183,15 @@
6183 pElem->h = pElem->bbox.ne.y - pElem->bbox.sw.y;
6184
6185 /* If this is a polygon (if it has the "close" attribute), then
6186 ** adjust the exit point */
6187 if( pElem->bClose ){
6188 /* "closed" lines work like block objects */
6189 pik_elem_set_exit(p, pElem, pElem->inDir);
6190 }else{
6191 /* For an open line, the "center" is half way between
6192 ** the .start and the .end */
6193 }
6194 }else{
6195 PNum w2 = pElem->w/2.0;
6196 PNum h2 = pElem->h/2.0;
6197 pElem->ptEnter = pElem->ptAt;
@@ -6344,11 +6418,11 @@
6418 { "bold", 4, T_BOLD, 0, 0 },
6419 { "bot", 3, T_EDGEPT, 0, CP_S },
6420 { "bottom", 6, T_BOTTOM, 0, CP_S },
6421 { "c", 1, T_EDGEPT, 0, CP_C },
6422 { "ccw", 3, T_CCW, 0, 0 },
6423 { "center", 6, T_CENTER, 0, CP_C },
6424 { "chop", 4, T_CHOP, 0, 0 },
6425 { "close", 5, T_CLOSE, 0, 0 },
6426 { "color", 5, T_COLOR, 0, 0 },
6427 { "cos", 3, T_FUNC1, FN_COS, 0 },
6428 { "cw", 2, T_CW, 0, 0 },
@@ -6505,11 +6579,10 @@
6579 pToken->eType = T_ERROR;
6580 return i;
6581 }
6582 }else if( z[1]=='/' ){
6583 for(i=2; z[i]!=0 && z[i]!='\n'; i++){}
 
6584 pToken->eType = T_WHITESPACE;
6585 return i;
6586 }else if( z[1]=='=' ){
6587 pToken->eType = T_ASSIGN;
6588 pToken->eCode = T_SLASH;
@@ -6591,11 +6664,11 @@
6664 pFound = pik_find_word((const char*)z+1, i-1,
6665 pik_keywords, count(pik_keywords));
6666 if( pFound && (pFound->eEdge>0 ||
6667 pFound->eType==T_EDGEPT ||
6668 pFound->eType==T_START ||
6669 pFound->eType==T_END )
6670 ){
6671 /* Dot followed by something that is a 2-D place value */
6672 pToken->eType = T_DOT_E;
6673 }else if( pFound->eType==T_X || pFound->eType==T_Y ){
6674 /* Dot followed by "x" or "y" */
@@ -6909,11 +6982,11 @@
6982 zOut = pikchr(zIn, "pikchr", 0, &w, &h);
6983 free(zIn);
6984 if( zOut ){
6985 if( w<0 ){
6986 printf("<p>ERROR:</p>\n");
6987 }else if( bNoEcho==0 ){
6988 printf("<p>Output size: %d by %d</p>\n", w, h);
6989 }
6990 printf("<div style='border:3px solid lightgray;max-width:%dpx'>\n"
6991 "%s</div>\n",
6992 w, zOut);
@@ -6923,6 +6996,6 @@
6996 printf("</body></html>\n");
6997 return 0;
6998 }
6999 #endif /* PIKCHR_SHELL */
7000
7001 #line 7026 "pikchr.c"
7002

Keyboard Shortcuts

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