Fossil SCM

Fix the assert() statement in Pikchr so that it works on positions, not just places.

drh 2020-09-20 15:05 trunk
Commit 249817138c37596e9bd17337dbc886866e7f418e07f2271befbc437f005d35df
1 file changed +677 -657
+677 -657
--- src/pikchr.c
+++ src/pikchr.c
@@ -443,11 +443,11 @@
443443
static PPoint pik_nth_vertex(Pik *p, PToken *pNth, PToken *pErr, PElem *pElem);
444444
static PToken pik_next_semantic_token(PToken *pThis);
445445
static void pik_compute_layout_settings(Pik*);
446446
static void pik_behind(Pik*,PElem*);
447447
static PElem *pik_assert(Pik*,PNum,PToken*,PNum);
448
-static PElem *pik_place_assert(Pik*,PPoint*,PToken*,PPoint*);
448
+static PElem *pik_position_assert(Pik*,PPoint*,PToken*,PPoint*);
449449
static PNum pik_dist(PPoint*,PPoint*);
450450
451451
452452
#line 478 "pikchr.c"
453453
/**************** End of %include directives **********************************/
@@ -633,21 +633,21 @@
633633
#define pik_parserCTX_PARAM ,p
634634
#define pik_parserCTX_FETCH Pik *p=yypParser->p;
635635
#define pik_parserCTX_STORE yypParser->p=p;
636636
#define YYFALLBACK 1
637637
#define YYNSTATE 162
638
-#define YYNRULE 152
639
-#define YYNRULE_WITH_ACTION 112
638
+#define YYNRULE 153
639
+#define YYNRULE_WITH_ACTION 113
640640
#define YYNTOKEN 95
641641
#define YY_MAX_SHIFT 161
642642
#define YY_MIN_SHIFTREDUCE 282
643
-#define YY_MAX_SHIFTREDUCE 433
644
-#define YY_ERROR_ACTION 434
645
-#define YY_ACCEPT_ACTION 435
646
-#define YY_NO_ACTION 436
647
-#define YY_MIN_REDUCE 437
648
-#define YY_MAX_REDUCE 588
643
+#define YY_MAX_SHIFTREDUCE 434
644
+#define YY_ERROR_ACTION 435
645
+#define YY_ACCEPT_ACTION 436
646
+#define YY_NO_ACTION 437
647
+#define YY_MIN_REDUCE 438
648
+#define YY_MAX_REDUCE 590
649649
/************* End control #defines *******************************************/
650650
#define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
651651
652652
/* Define the yytestcase() macro to be a no-op if is not already defined
653653
** otherwise.
@@ -710,321 +710,328 @@
710710
** yy_reduce_ofst[] For each state, the offset into yy_action for
711711
** shifting non-terminals after a reduce.
712712
** yy_default[] Default action for each state.
713713
**
714714
*********** Begin parsing tables **********************************************/
715
-#define YY_ACTTAB_COUNT (1206)
715
+#define YY_ACTTAB_COUNT (1244)
716716
static const YYACTIONTYPE yy_action[] = {
717
- /* 0 */ 562, 437, 23, 443, 27, 73, 128, 147, 53, 49,
718
- /* 10 */ 562, 35, 444, 113, 120, 159, 119, 127, 418, 419,
719
- /* 20 */ 333, 546, 80, 519, 547, 548, 562, 64, 63, 62,
720
- /* 30 */ 61, 316, 317, 6, 5, 32, 148, 31, 4, 71,
721
- /* 40 */ 126, 26, 329, 66, 566, 300, 48, 333, 333, 333,
722
- /* 50 */ 333, 416, 417, 334, 335, 336, 337, 338, 339, 340,
723
- /* 60 */ 341, 464, 64, 63, 62, 61, 121, 438, 445, 27,
724
- /* 70 */ 35, 464, 69, 441, 29, 292, 485, 159, 119, 418,
725
- /* 80 */ 419, 333, 30, 80, 161, 350, 304, 464, 435, 25,
726
- /* 90 */ 324, 10, 316, 317, 6, 5, 32, 82, 31, 4,
727
- /* 100 */ 71, 126, 83, 329, 66, 482, 159, 119, 333, 333,
728
- /* 110 */ 333, 333, 416, 417, 334, 335, 336, 337, 338, 339,
729
- /* 120 */ 340, 341, 385, 426, 43, 59, 60, 34, 64, 63,
730
- /* 130 */ 62, 61, 75, 368, 372, 155, 22, 75, 385, 426,
731
- /* 140 */ 42, 59, 60, 79, 38, 302, 78, 45, 37, 368,
732
- /* 150 */ 432, 431, 22, 69, 343, 343, 343, 343, 343, 343,
733
- /* 160 */ 343, 343, 343, 343, 368, 293, 432, 431, 394, 564,
734
- /* 170 */ 76, 564, 64, 63, 62, 61, 307, 389, 390, 132,
735
- /* 180 */ 65, 125, 425, 62, 61, 395, 396, 397, 399, 79,
736
- /* 190 */ 36, 302, 78, 28, 402, 403, 404, 405, 425, 106,
737
- /* 200 */ 67, 427, 428, 429, 430, 415, 322, 117, 384, 154,
738
- /* 210 */ 153, 152, 517, 159, 119, 106, 130, 427, 428, 429,
739
- /* 220 */ 430, 371, 157, 117, 384, 154, 153, 152, 385, 426,
740
- /* 230 */ 108, 59, 60, 64, 63, 62, 61, 2, 117, 368,
741
- /* 240 */ 44, 147, 58, 3, 89, 426, 383, 123, 122, 159,
742
- /* 250 */ 119, 414, 46, 120, 159, 119, 432, 431, 1, 141,
743
- /* 260 */ 139, 64, 63, 62, 61, 385, 463, 388, 59, 60,
744
- /* 270 */ 123, 8, 432, 431, 383, 151, 368, 9, 423, 58,
745
- /* 280 */ 54, 107, 402, 403, 404, 405, 146, 145, 425, 74,
746
- /* 290 */ 120, 159, 119, 40, 453, 64, 63, 62, 61, 349,
747
- /* 300 */ 463, 77, 77, 137, 425, 106, 421, 427, 428, 429,
748
- /* 310 */ 430, 138, 151, 117, 384, 154, 153, 152, 522, 159,
749
- /* 320 */ 119, 19, 18, 427, 428, 429, 430, 114, 11, 21,
750
- /* 330 */ 13, 144, 140, 422, 141, 139, 64, 63, 62, 61,
751
- /* 340 */ 15, 41, 106, 64, 63, 62, 61, 16, 370, 156,
752
- /* 350 */ 117, 384, 154, 153, 152, 54, 418, 419, 333, 17,
753
- /* 360 */ 107, 146, 145, 385, 370, 156, 59, 60, 40, 120,
754
- /* 370 */ 159, 119, 12, 468, 102, 68, 352, 58, 20, 24,
755
- /* 380 */ 295, 296, 297, 56, 299, 333, 333, 333, 333, 416,
756
- /* 390 */ 417, 151, 64, 63, 62, 61, 19, 18, 385, 523,
757
- /* 400 */ 57, 59, 60, 160, 21, 383, 144, 140, 422, 368,
758
- /* 410 */ 118, 50, 58, 376, 385, 142, 374, 59, 60, 385,
759
- /* 420 */ 143, 375, 59, 60, 369, 368, 118, 158, 58, 70,
760
- /* 430 */ 368, 39, 385, 58, 436, 59, 60, 436, 523, 436,
761
- /* 440 */ 106, 131, 129, 368, 523, 436, 58, 523, 117, 384,
762
- /* 450 */ 154, 153, 152, 426, 64, 63, 62, 61, 64, 63,
763
- /* 460 */ 62, 61, 87, 368, 147, 385, 436, 348, 59, 60,
764
- /* 470 */ 124, 120, 159, 119, 436, 106, 102, 52, 436, 58,
765
- /* 480 */ 432, 431, 436, 117, 384, 154, 153, 152, 436, 436,
766
- /* 490 */ 436, 106, 436, 148, 436, 436, 106, 436, 436, 117,
767
- /* 500 */ 384, 154, 153, 152, 117, 384, 154, 153, 152, 106,
768
- /* 510 */ 436, 385, 425, 436, 59, 60, 436, 117, 384, 154,
769
- /* 520 */ 153, 152, 368, 436, 385, 47, 436, 59, 60, 106,
770
- /* 530 */ 436, 427, 428, 429, 430, 368, 436, 117, 51, 439,
771
- /* 540 */ 445, 27, 106, 436, 436, 441, 436, 436, 88, 436,
772
- /* 550 */ 117, 384, 154, 153, 152, 436, 161, 120, 159, 119,
773
- /* 560 */ 436, 25, 436, 7, 469, 469, 520, 159, 119, 109,
774
- /* 570 */ 438, 445, 27, 436, 436, 73, 441, 147, 436, 151,
775
- /* 580 */ 436, 436, 487, 113, 120, 159, 119, 161, 106, 436,
776
- /* 590 */ 436, 436, 25, 436, 436, 436, 117, 384, 154, 153,
777
- /* 600 */ 152, 106, 64, 63, 62, 61, 148, 436, 90, 117,
778
- /* 610 */ 384, 154, 153, 152, 73, 436, 147, 120, 159, 119,
779
- /* 620 */ 436, 486, 113, 120, 159, 119, 436, 73, 436, 147,
780
- /* 630 */ 436, 14, 436, 436, 480, 113, 120, 159, 119, 151,
781
- /* 640 */ 436, 436, 73, 436, 147, 148, 436, 436, 436, 474,
782
- /* 650 */ 113, 120, 159, 119, 73, 436, 147, 107, 148, 436,
783
- /* 660 */ 436, 473, 113, 120, 159, 119, 120, 159, 119, 436,
784
- /* 670 */ 453, 436, 436, 148, 436, 436, 436, 436, 556, 436,
785
- /* 680 */ 436, 436, 73, 436, 147, 148, 436, 436, 151, 470,
786
- /* 690 */ 113, 120, 159, 119, 436, 436, 73, 436, 147, 436,
787
- /* 700 */ 436, 436, 436, 133, 113, 120, 159, 119, 436, 73,
788
- /* 710 */ 436, 147, 436, 148, 436, 436, 506, 113, 120, 159,
789
- /* 720 */ 119, 73, 436, 147, 436, 436, 436, 148, 136, 113,
790
- /* 730 */ 120, 159, 119, 436, 73, 436, 147, 436, 436, 436,
791
- /* 740 */ 148, 514, 113, 120, 159, 119, 436, 436, 436, 73,
792
- /* 750 */ 436, 147, 148, 436, 436, 436, 516, 113, 120, 159,
793
- /* 760 */ 119, 73, 436, 147, 107, 148, 436, 436, 513, 113,
794
- /* 770 */ 120, 159, 119, 120, 159, 119, 436, 442, 436, 436,
795
- /* 780 */ 148, 436, 64, 63, 62, 61, 436, 436, 436, 73,
796
- /* 790 */ 436, 147, 148, 436, 436, 151, 515, 113, 120, 159,
797
- /* 800 */ 119, 55, 436, 73, 436, 147, 64, 63, 62, 61,
798
- /* 810 */ 512, 113, 120, 159, 119, 436, 73, 436, 147, 386,
799
- /* 820 */ 148, 436, 436, 511, 113, 120, 159, 119, 73, 436,
800
- /* 830 */ 147, 436, 436, 436, 148, 510, 113, 120, 159, 119,
801
- /* 840 */ 436, 73, 436, 147, 436, 436, 436, 148, 509, 113,
802
- /* 850 */ 120, 159, 119, 436, 436, 436, 73, 436, 147, 148,
803
- /* 860 */ 436, 436, 436, 508, 113, 120, 159, 119, 73, 436,
804
- /* 870 */ 147, 86, 148, 436, 436, 149, 113, 120, 159, 119,
805
- /* 880 */ 120, 159, 119, 436, 436, 436, 436, 148, 436, 436,
806
- /* 890 */ 436, 436, 436, 436, 436, 436, 73, 436, 147, 148,
807
- /* 900 */ 436, 426, 151, 150, 113, 120, 159, 119, 436, 436,
808
- /* 910 */ 72, 436, 147, 436, 436, 436, 436, 112, 113, 120,
809
- /* 920 */ 159, 119, 436, 73, 436, 147, 436, 148, 432, 431,
810
- /* 930 */ 135, 113, 120, 159, 119, 73, 436, 147, 436, 88,
811
- /* 940 */ 436, 148, 134, 113, 120, 159, 119, 436, 120, 159,
812
- /* 950 */ 119, 436, 436, 436, 148, 81, 436, 436, 88, 436,
813
- /* 960 */ 425, 436, 456, 436, 33, 436, 148, 120, 159, 119,
814
- /* 970 */ 151, 436, 436, 436, 110, 110, 88, 436, 436, 427,
815
- /* 980 */ 428, 429, 430, 436, 436, 120, 159, 119, 436, 151,
816
- /* 990 */ 436, 436, 111, 111, 436, 436, 436, 436, 436, 88,
817
- /* 1000 */ 436, 436, 99, 436, 436, 436, 436, 151, 120, 159,
818
- /* 1010 */ 119, 120, 159, 119, 436, 465, 436, 100, 64, 63,
819
- /* 1020 */ 62, 61, 436, 436, 436, 101, 120, 159, 119, 91,
820
- /* 1030 */ 151, 347, 84, 151, 120, 159, 119, 436, 120, 159,
821
- /* 1040 */ 119, 120, 159, 119, 103, 436, 436, 436, 151, 436,
822
- /* 1050 */ 436, 436, 436, 120, 159, 119, 151, 436, 92, 436,
823
- /* 1060 */ 151, 436, 93, 151, 436, 436, 436, 120, 159, 119,
824
- /* 1070 */ 85, 120, 159, 119, 104, 151, 436, 436, 436, 120,
825
- /* 1080 */ 159, 119, 436, 120, 159, 119, 94, 436, 436, 151,
826
- /* 1090 */ 436, 436, 436, 151, 436, 120, 159, 119, 436, 105,
827
- /* 1100 */ 436, 151, 95, 436, 436, 151, 436, 436, 120, 159,
828
- /* 1110 */ 119, 120, 159, 119, 436, 96, 436, 151, 64, 63,
829
- /* 1120 */ 62, 61, 436, 436, 120, 159, 119, 97, 436, 436,
830
- /* 1130 */ 151, 387, 98, 151, 436, 436, 120, 159, 119, 537,
831
- /* 1140 */ 436, 120, 159, 119, 536, 436, 151, 436, 120, 159,
832
- /* 1150 */ 119, 436, 436, 120, 159, 119, 535, 436, 151, 436,
833
- /* 1160 */ 436, 436, 534, 151, 436, 120, 159, 119, 115, 436,
834
- /* 1170 */ 151, 120, 159, 119, 116, 151, 436, 120, 159, 119,
835
- /* 1180 */ 436, 436, 436, 120, 159, 119, 436, 151, 64, 63,
836
- /* 1190 */ 62, 61, 436, 151, 436, 436, 436, 436, 436, 151,
837
- /* 1200 */ 436, 383, 436, 436, 436, 151,
717
+ /* 0 */ 564, 438, 25, 444, 29, 74, 127, 146, 54, 51,
718
+ /* 10 */ 564, 36, 445, 113, 120, 159, 119, 126, 419, 420,
719
+ /* 20 */ 333, 548, 81, 520, 549, 550, 564, 64, 63, 62,
720
+ /* 30 */ 61, 316, 317, 9, 8, 33, 147, 32, 7, 71,
721
+ /* 40 */ 125, 28, 329, 66, 568, 300, 50, 333, 333, 333,
722
+ /* 50 */ 333, 417, 418, 334, 335, 336, 337, 338, 339, 340,
723
+ /* 60 */ 341, 465, 64, 63, 62, 61, 121, 439, 446, 29,
724
+ /* 70 */ 36, 465, 30, 442, 368, 292, 486, 159, 119, 419,
725
+ /* 80 */ 420, 333, 31, 81, 161, 350, 304, 465, 436, 27,
726
+ /* 90 */ 324, 13, 316, 317, 9, 8, 33, 69, 32, 7,
727
+ /* 100 */ 71, 125, 83, 329, 66, 483, 159, 119, 333, 333,
728
+ /* 110 */ 333, 333, 417, 418, 334, 335, 336, 337, 338, 339,
729
+ /* 120 */ 340, 341, 386, 427, 46, 59, 60, 64, 63, 62,
730
+ /* 130 */ 61, 307, 84, 368, 322, 35, 2, 293, 386, 427,
731
+ /* 140 */ 108, 59, 60, 80, 4, 302, 79, 3, 117, 368,
732
+ /* 150 */ 433, 432, 2, 62, 61, 154, 154, 154, 386, 390,
733
+ /* 160 */ 391, 59, 60, 518, 159, 119, 433, 432, 47, 102,
734
+ /* 170 */ 38, 67, 42, 48, 37, 295, 296, 297, 69, 299,
735
+ /* 180 */ 372, 155, 426, 343, 343, 343, 343, 343, 343, 343,
736
+ /* 190 */ 343, 343, 343, 371, 157, 566, 77, 566, 426, 106,
737
+ /* 200 */ 76, 428, 429, 430, 431, 5, 6, 117, 385, 153,
738
+ /* 210 */ 152, 151, 523, 159, 119, 106, 416, 428, 429, 430,
739
+ /* 220 */ 431, 415, 427, 117, 385, 153, 152, 151, 386, 427,
740
+ /* 230 */ 129, 59, 60, 389, 1, 106, 521, 159, 119, 368,
741
+ /* 240 */ 11, 12, 2, 117, 385, 153, 152, 151, 65, 433,
742
+ /* 250 */ 432, 64, 63, 62, 61, 349, 433, 432, 136, 140,
743
+ /* 260 */ 138, 64, 63, 62, 61, 386, 75, 427, 59, 60,
744
+ /* 270 */ 53, 424, 422, 45, 137, 14, 368, 16, 18, 42,
745
+ /* 280 */ 55, 426, 154, 154, 154, 44, 145, 144, 426, 64,
746
+ /* 290 */ 63, 62, 61, 43, 433, 432, 64, 63, 62, 61,
747
+ /* 300 */ 428, 429, 430, 431, 19, 106, 114, 428, 429, 430,
748
+ /* 310 */ 431, 20, 68, 117, 385, 153, 152, 151, 15, 352,
749
+ /* 320 */ 23, 22, 21, 384, 376, 17, 426, 370, 156, 24,
750
+ /* 330 */ 26, 143, 139, 423, 140, 138, 64, 63, 62, 61,
751
+ /* 340 */ 374, 57, 106, 58, 375, 428, 429, 430, 431, 383,
752
+ /* 350 */ 117, 385, 153, 152, 151, 55, 64, 63, 62, 61,
753
+ /* 360 */ 369, 145, 144, 403, 404, 405, 406, 158, 43, 348,
754
+ /* 370 */ 70, 140, 138, 64, 63, 62, 61, 386, 464, 39,
755
+ /* 380 */ 59, 60, 64, 63, 62, 61, 437, 437, 368, 118,
756
+ /* 390 */ 437, 42, 55, 437, 437, 383, 22, 21, 145, 144,
757
+ /* 400 */ 395, 49, 437, 524, 24, 43, 143, 139, 423, 437,
758
+ /* 410 */ 437, 131, 464, 124, 437, 437, 437, 396, 397, 398,
759
+ /* 420 */ 400, 80, 437, 302, 79, 437, 403, 404, 405, 406,
760
+ /* 430 */ 440, 446, 29, 22, 21, 386, 442, 437, 59, 60,
761
+ /* 440 */ 437, 24, 524, 143, 139, 423, 368, 161, 524, 42,
762
+ /* 450 */ 437, 524, 27, 437, 106, 437, 386, 141, 437, 59,
763
+ /* 460 */ 60, 437, 117, 385, 153, 152, 151, 368, 437, 437,
764
+ /* 470 */ 42, 437, 386, 142, 437, 59, 60, 386, 130, 128,
765
+ /* 480 */ 59, 60, 437, 368, 370, 156, 42, 437, 368, 437,
766
+ /* 490 */ 386, 42, 437, 59, 60, 386, 437, 437, 59, 60,
767
+ /* 500 */ 437, 102, 437, 437, 42, 437, 368, 437, 437, 40,
768
+ /* 510 */ 437, 437, 106, 437, 386, 437, 437, 59, 60, 437,
769
+ /* 520 */ 117, 385, 153, 152, 151, 368, 437, 437, 41, 64,
770
+ /* 530 */ 63, 62, 61, 106, 64, 63, 62, 61, 437, 160,
771
+ /* 540 */ 437, 117, 385, 153, 152, 151, 118, 387, 56, 106,
772
+ /* 550 */ 437, 437, 437, 437, 106, 437, 437, 117, 385, 153,
773
+ /* 560 */ 152, 151, 117, 385, 153, 152, 151, 106, 64, 63,
774
+ /* 570 */ 62, 61, 106, 437, 437, 117, 385, 153, 152, 151,
775
+ /* 580 */ 117, 385, 153, 152, 151, 419, 420, 333, 437, 437,
776
+ /* 590 */ 437, 106, 437, 437, 437, 88, 437, 437, 437, 117,
777
+ /* 600 */ 385, 153, 152, 151, 120, 159, 119, 437, 437, 437,
778
+ /* 610 */ 10, 470, 470, 437, 333, 333, 333, 333, 417, 418,
779
+ /* 620 */ 73, 437, 146, 437, 437, 437, 150, 112, 113, 120,
780
+ /* 630 */ 159, 119, 437, 74, 437, 146, 64, 63, 62, 61,
781
+ /* 640 */ 122, 113, 120, 159, 119, 72, 437, 146, 437, 347,
782
+ /* 650 */ 437, 147, 123, 113, 120, 159, 119, 437, 74, 437,
783
+ /* 660 */ 146, 437, 437, 437, 147, 488, 113, 120, 159, 119,
784
+ /* 670 */ 437, 437, 74, 437, 146, 437, 147, 437, 437, 487,
785
+ /* 680 */ 113, 120, 159, 119, 74, 437, 146, 437, 437, 147,
786
+ /* 690 */ 437, 481, 113, 120, 159, 119, 437, 437, 437, 74,
787
+ /* 700 */ 437, 146, 88, 147, 437, 437, 475, 113, 120, 159,
788
+ /* 710 */ 119, 120, 159, 119, 74, 147, 146, 437, 110, 110,
789
+ /* 720 */ 437, 474, 113, 120, 159, 119, 437, 74, 437, 146,
790
+ /* 730 */ 147, 437, 437, 150, 471, 113, 120, 159, 119, 437,
791
+ /* 740 */ 74, 437, 146, 437, 437, 147, 437, 132, 113, 120,
792
+ /* 750 */ 159, 119, 74, 437, 146, 437, 437, 437, 147, 507,
793
+ /* 760 */ 113, 120, 159, 119, 437, 74, 437, 146, 437, 437,
794
+ /* 770 */ 437, 147, 135, 113, 120, 159, 119, 437, 437, 74,
795
+ /* 780 */ 437, 146, 437, 147, 437, 437, 515, 113, 120, 159,
796
+ /* 790 */ 119, 74, 437, 146, 437, 437, 147, 437, 517, 113,
797
+ /* 800 */ 120, 159, 119, 437, 437, 437, 74, 437, 146, 88,
798
+ /* 810 */ 147, 437, 437, 514, 113, 120, 159, 119, 120, 159,
799
+ /* 820 */ 119, 74, 147, 146, 437, 111, 111, 437, 516, 113,
800
+ /* 830 */ 120, 159, 119, 437, 74, 437, 146, 147, 437, 437,
801
+ /* 840 */ 150, 513, 113, 120, 159, 119, 437, 74, 437, 146,
802
+ /* 850 */ 437, 437, 147, 437, 512, 113, 120, 159, 119, 74,
803
+ /* 860 */ 437, 146, 437, 437, 437, 147, 511, 113, 120, 159,
804
+ /* 870 */ 119, 437, 74, 437, 146, 437, 437, 437, 147, 510,
805
+ /* 880 */ 113, 120, 159, 119, 437, 437, 74, 437, 146, 437,
806
+ /* 890 */ 147, 437, 437, 509, 113, 120, 159, 119, 74, 437,
807
+ /* 900 */ 146, 107, 437, 147, 437, 148, 113, 120, 159, 119,
808
+ /* 910 */ 120, 159, 119, 74, 469, 146, 85, 147, 437, 437,
809
+ /* 920 */ 149, 113, 120, 159, 119, 120, 159, 119, 74, 147,
810
+ /* 930 */ 146, 437, 150, 437, 437, 134, 113, 120, 159, 119,
811
+ /* 940 */ 437, 74, 437, 146, 147, 107, 437, 150, 133, 113,
812
+ /* 950 */ 120, 159, 119, 437, 120, 159, 119, 437, 454, 147,
813
+ /* 960 */ 437, 64, 63, 62, 61, 78, 78, 437, 88, 437,
814
+ /* 970 */ 437, 437, 147, 437, 383, 437, 150, 120, 159, 119,
815
+ /* 980 */ 52, 437, 437, 437, 82, 437, 88, 437, 437, 437,
816
+ /* 990 */ 437, 457, 437, 34, 107, 120, 159, 119, 437, 150,
817
+ /* 1000 */ 437, 437, 466, 120, 159, 119, 437, 454, 437, 109,
818
+ /* 1010 */ 439, 446, 29, 437, 437, 558, 442, 150, 437, 437,
819
+ /* 1020 */ 107, 64, 63, 62, 61, 150, 86, 161, 437, 120,
820
+ /* 1030 */ 159, 119, 27, 443, 388, 120, 159, 119, 98, 437,
821
+ /* 1040 */ 437, 437, 437, 89, 437, 437, 437, 120, 159, 119,
822
+ /* 1050 */ 90, 150, 120, 159, 119, 87, 437, 150, 437, 120,
823
+ /* 1060 */ 159, 119, 99, 437, 120, 159, 119, 437, 100, 150,
824
+ /* 1070 */ 437, 120, 159, 119, 150, 437, 437, 120, 159, 119,
825
+ /* 1080 */ 101, 150, 64, 63, 62, 61, 150, 437, 437, 120,
826
+ /* 1090 */ 159, 119, 437, 150, 91, 383, 437, 103, 437, 150,
827
+ /* 1100 */ 437, 437, 437, 120, 159, 119, 120, 159, 119, 92,
828
+ /* 1110 */ 437, 150, 93, 437, 437, 437, 437, 437, 120, 159,
829
+ /* 1120 */ 119, 120, 159, 119, 437, 150, 104, 437, 150, 437,
830
+ /* 1130 */ 437, 437, 437, 437, 437, 120, 159, 119, 94, 437,
831
+ /* 1140 */ 150, 437, 437, 150, 437, 437, 437, 120, 159, 119,
832
+ /* 1150 */ 105, 437, 437, 95, 437, 437, 437, 150, 437, 120,
833
+ /* 1160 */ 159, 119, 120, 159, 119, 96, 437, 437, 97, 150,
834
+ /* 1170 */ 437, 437, 437, 437, 120, 159, 119, 120, 159, 119,
835
+ /* 1180 */ 538, 150, 437, 437, 150, 437, 437, 437, 437, 120,
836
+ /* 1190 */ 159, 119, 437, 537, 437, 437, 150, 536, 437, 150,
837
+ /* 1200 */ 437, 437, 120, 159, 119, 535, 120, 159, 119, 115,
838
+ /* 1210 */ 437, 150, 116, 437, 120, 159, 119, 437, 120, 159,
839
+ /* 1220 */ 119, 120, 159, 119, 150, 437, 437, 437, 150, 437,
840
+ /* 1230 */ 437, 437, 437, 437, 437, 437, 150, 437, 437, 437,
841
+ /* 1240 */ 150, 437, 437, 150,
838842
};
839843
static const YYCODETYPE yy_lookahead[] = {
840844
/* 0 */ 0, 0, 129, 97, 98, 99, 101, 101, 4, 5,
841845
/* 10 */ 10, 10, 106, 107, 108, 109, 110, 101, 18, 19,
842846
/* 20 */ 20, 100, 22, 101, 103, 104, 26, 4, 5, 6,
843847
/* 30 */ 7, 31, 32, 33, 34, 35, 130, 37, 38, 39,
844848
/* 40 */ 40, 102, 42, 43, 128, 23, 23, 47, 48, 49,
845849
/* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
846850
/* 60 */ 60, 0, 4, 5, 6, 7, 95, 96, 97, 98,
847
- /* 70 */ 10, 10, 3, 102, 121, 17, 108, 109, 110, 18,
851
+ /* 70 */ 10, 10, 121, 102, 12, 17, 108, 109, 110, 18,
848852
/* 80 */ 19, 20, 123, 22, 113, 17, 26, 26, 117, 118,
849
- /* 90 */ 2, 23, 31, 32, 33, 34, 35, 111, 37, 38,
853
+ /* 90 */ 2, 23, 31, 32, 33, 34, 35, 3, 37, 38,
850854
/* 100 */ 39, 40, 111, 42, 43, 108, 109, 110, 47, 48,
851855
/* 110 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
852
- /* 120 */ 59, 60, 1, 2, 36, 4, 5, 124, 4, 5,
853
- /* 130 */ 6, 7, 46, 12, 24, 25, 15, 46, 1, 2,
854
- /* 140 */ 16, 4, 5, 22, 100, 24, 25, 103, 104, 12,
855
- /* 150 */ 29, 30, 15, 84, 61, 62, 63, 64, 65, 66,
856
- /* 160 */ 67, 68, 69, 70, 12, 17, 29, 30, 1, 125,
857
- /* 170 */ 126, 127, 4, 5, 6, 7, 8, 92, 93, 12,
858
- /* 180 */ 94, 14, 61, 6, 7, 18, 19, 20, 21, 22,
859
- /* 190 */ 16, 24, 25, 15, 27, 28, 29, 30, 61, 78,
860
- /* 200 */ 41, 80, 81, 82, 83, 39, 2, 86, 87, 88,
861
- /* 210 */ 89, 90, 108, 109, 110, 78, 45, 80, 81, 82,
862
- /* 220 */ 83, 24, 25, 86, 87, 88, 89, 90, 1, 2,
863
- /* 230 */ 78, 4, 5, 4, 5, 6, 7, 38, 86, 12,
864
- /* 240 */ 36, 101, 15, 38, 99, 2, 17, 107, 108, 109,
865
- /* 250 */ 110, 39, 23, 108, 109, 110, 29, 30, 13, 2,
866
- /* 260 */ 3, 4, 5, 6, 7, 1, 2, 17, 4, 5,
867
- /* 270 */ 130, 23, 29, 30, 17, 130, 12, 71, 76, 15,
868
- /* 280 */ 23, 99, 27, 28, 29, 30, 29, 30, 61, 46,
869
- /* 290 */ 108, 109, 110, 36, 112, 4, 5, 6, 7, 17,
870
- /* 300 */ 36, 119, 120, 75, 61, 78, 76, 80, 81, 82,
871
- /* 310 */ 83, 77, 130, 86, 87, 88, 89, 90, 108, 109,
872
- /* 320 */ 110, 64, 65, 80, 81, 82, 83, 91, 3, 72,
873
- /* 330 */ 3, 74, 75, 76, 2, 3, 4, 5, 6, 7,
874
- /* 340 */ 3, 36, 78, 4, 5, 6, 7, 3, 24, 25,
875
- /* 350 */ 86, 87, 88, 89, 90, 23, 18, 19, 20, 3,
876
- /* 360 */ 99, 29, 30, 1, 24, 25, 4, 5, 36, 108,
877
- /* 370 */ 109, 110, 33, 112, 12, 3, 73, 15, 23, 15,
878
- /* 380 */ 18, 19, 20, 15, 22, 47, 48, 49, 50, 51,
879
- /* 390 */ 52, 130, 4, 5, 6, 7, 64, 65, 1, 46,
880
- /* 400 */ 15, 4, 5, 79, 72, 17, 74, 75, 76, 12,
881
- /* 410 */ 86, 23, 15, 26, 1, 2, 26, 4, 5, 1,
882
- /* 420 */ 2, 26, 4, 5, 12, 12, 86, 85, 15, 3,
883
- /* 430 */ 12, 11, 1, 15, 131, 4, 5, 131, 85, 131,
884
- /* 440 */ 78, 44, 45, 12, 91, 131, 15, 94, 86, 87,
885
- /* 450 */ 88, 89, 90, 2, 4, 5, 6, 7, 4, 5,
886
- /* 460 */ 6, 7, 99, 12, 101, 1, 131, 17, 4, 5,
887
- /* 470 */ 107, 108, 109, 110, 131, 78, 12, 23, 131, 15,
888
- /* 480 */ 29, 30, 131, 86, 87, 88, 89, 90, 131, 131,
889
- /* 490 */ 131, 78, 131, 130, 131, 131, 78, 131, 131, 86,
890
- /* 500 */ 87, 88, 89, 90, 86, 87, 88, 89, 90, 78,
891
- /* 510 */ 131, 1, 61, 131, 4, 5, 131, 86, 87, 88,
892
- /* 520 */ 89, 90, 12, 131, 1, 15, 131, 4, 5, 78,
893
- /* 530 */ 131, 80, 81, 82, 83, 12, 131, 86, 15, 96,
894
- /* 540 */ 97, 98, 78, 131, 131, 102, 131, 131, 99, 131,
895
- /* 550 */ 86, 87, 88, 89, 90, 131, 113, 108, 109, 110,
896
- /* 560 */ 131, 118, 131, 114, 115, 116, 108, 109, 110, 95,
897
- /* 570 */ 96, 97, 98, 131, 131, 99, 102, 101, 131, 130,
898
- /* 580 */ 131, 131, 106, 107, 108, 109, 110, 113, 78, 131,
899
- /* 590 */ 131, 131, 118, 131, 131, 131, 86, 87, 88, 89,
900
- /* 600 */ 90, 78, 4, 5, 6, 7, 130, 131, 99, 86,
901
- /* 610 */ 87, 88, 89, 90, 99, 131, 101, 108, 109, 110,
902
- /* 620 */ 131, 106, 107, 108, 109, 110, 131, 99, 131, 101,
903
- /* 630 */ 131, 33, 131, 131, 106, 107, 108, 109, 110, 130,
904
- /* 640 */ 131, 131, 99, 131, 101, 130, 131, 131, 131, 106,
905
- /* 650 */ 107, 108, 109, 110, 99, 131, 101, 99, 130, 131,
906
- /* 660 */ 131, 106, 107, 108, 109, 110, 108, 109, 110, 131,
907
- /* 670 */ 112, 131, 131, 130, 131, 131, 131, 131, 120, 131,
908
- /* 680 */ 131, 131, 99, 131, 101, 130, 131, 131, 130, 106,
909
- /* 690 */ 107, 108, 109, 110, 131, 131, 99, 131, 101, 131,
910
- /* 700 */ 131, 131, 131, 106, 107, 108, 109, 110, 131, 99,
911
- /* 710 */ 131, 101, 131, 130, 131, 131, 106, 107, 108, 109,
912
- /* 720 */ 110, 99, 131, 101, 131, 131, 131, 130, 106, 107,
913
- /* 730 */ 108, 109, 110, 131, 99, 131, 101, 131, 131, 131,
914
- /* 740 */ 130, 106, 107, 108, 109, 110, 131, 131, 131, 99,
915
- /* 750 */ 131, 101, 130, 131, 131, 131, 106, 107, 108, 109,
916
- /* 760 */ 110, 99, 131, 101, 99, 130, 131, 131, 106, 107,
917
- /* 770 */ 108, 109, 110, 108, 109, 110, 131, 112, 131, 131,
918
- /* 780 */ 130, 131, 4, 5, 6, 7, 131, 131, 131, 99,
919
- /* 790 */ 131, 101, 130, 131, 131, 130, 106, 107, 108, 109,
920
- /* 800 */ 110, 23, 131, 99, 131, 101, 4, 5, 6, 7,
921
- /* 810 */ 106, 107, 108, 109, 110, 131, 99, 131, 101, 17,
922
- /* 820 */ 130, 131, 131, 106, 107, 108, 109, 110, 99, 131,
923
- /* 830 */ 101, 131, 131, 131, 130, 106, 107, 108, 109, 110,
924
- /* 840 */ 131, 99, 131, 101, 131, 131, 131, 130, 106, 107,
925
- /* 850 */ 108, 109, 110, 131, 131, 131, 99, 131, 101, 130,
926
- /* 860 */ 131, 131, 131, 106, 107, 108, 109, 110, 99, 131,
927
- /* 870 */ 101, 99, 130, 131, 131, 106, 107, 108, 109, 110,
928
- /* 880 */ 108, 109, 110, 131, 131, 131, 131, 130, 131, 131,
929
- /* 890 */ 131, 131, 131, 131, 131, 131, 99, 131, 101, 130,
930
- /* 900 */ 131, 2, 130, 106, 107, 108, 109, 110, 131, 131,
931
- /* 910 */ 99, 131, 101, 131, 131, 131, 131, 106, 107, 108,
932
- /* 920 */ 109, 110, 131, 99, 131, 101, 131, 130, 29, 30,
933
- /* 930 */ 106, 107, 108, 109, 110, 99, 131, 101, 131, 99,
934
- /* 940 */ 131, 130, 106, 107, 108, 109, 110, 131, 108, 109,
935
- /* 950 */ 110, 131, 131, 131, 130, 115, 131, 131, 99, 131,
936
- /* 960 */ 61, 131, 122, 131, 124, 131, 130, 108, 109, 110,
937
- /* 970 */ 130, 131, 131, 131, 115, 116, 99, 131, 131, 80,
938
- /* 980 */ 81, 82, 83, 131, 131, 108, 109, 110, 131, 130,
939
- /* 990 */ 131, 131, 115, 116, 131, 131, 131, 131, 131, 99,
940
- /* 1000 */ 131, 131, 99, 131, 131, 131, 131, 130, 108, 109,
941
- /* 1010 */ 110, 108, 109, 110, 131, 115, 131, 99, 4, 5,
942
- /* 1020 */ 6, 7, 131, 131, 131, 99, 108, 109, 110, 99,
943
- /* 1030 */ 130, 17, 99, 130, 108, 109, 110, 131, 108, 109,
944
- /* 1040 */ 110, 108, 109, 110, 99, 131, 131, 131, 130, 131,
945
- /* 1050 */ 131, 131, 131, 108, 109, 110, 130, 131, 99, 131,
946
- /* 1060 */ 130, 131, 99, 130, 131, 131, 131, 108, 109, 110,
947
- /* 1070 */ 99, 108, 109, 110, 99, 130, 131, 131, 131, 108,
948
- /* 1080 */ 109, 110, 131, 108, 109, 110, 99, 131, 131, 130,
949
- /* 1090 */ 131, 131, 131, 130, 131, 108, 109, 110, 131, 99,
950
- /* 1100 */ 131, 130, 99, 131, 131, 130, 131, 131, 108, 109,
951
- /* 1110 */ 110, 108, 109, 110, 131, 99, 131, 130, 4, 5,
952
- /* 1120 */ 6, 7, 131, 131, 108, 109, 110, 99, 131, 131,
953
- /* 1130 */ 130, 17, 99, 130, 131, 131, 108, 109, 110, 99,
954
- /* 1140 */ 131, 108, 109, 110, 99, 131, 130, 131, 108, 109,
955
- /* 1150 */ 110, 131, 131, 108, 109, 110, 99, 131, 130, 131,
956
- /* 1160 */ 131, 131, 99, 130, 131, 108, 109, 110, 99, 131,
957
- /* 1170 */ 130, 108, 109, 110, 99, 130, 131, 108, 109, 110,
958
- /* 1180 */ 131, 131, 131, 108, 109, 110, 131, 130, 4, 5,
959
- /* 1190 */ 6, 7, 131, 130, 131, 131, 131, 131, 131, 130,
960
- /* 1200 */ 131, 17, 131, 131, 131, 130, 131, 131, 131, 131,
961
- /* 1210 */ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
962
- /* 1220 */ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
963
- /* 1230 */ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
964
- /* 1240 */ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
965
- /* 1250 */ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
966
- /* 1260 */ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
967
- /* 1270 */ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
968
- /* 1280 */ 131, 131, 131, 131, 95, 95, 95, 95, 95, 95,
856
+ /* 120 */ 59, 60, 1, 2, 36, 4, 5, 4, 5, 6,
857
+ /* 130 */ 7, 8, 111, 12, 2, 124, 15, 17, 1, 2,
858
+ /* 140 */ 78, 4, 5, 22, 15, 24, 25, 16, 86, 12,
859
+ /* 150 */ 29, 30, 15, 6, 7, 18, 19, 20, 1, 92,
860
+ /* 160 */ 93, 4, 5, 108, 109, 110, 29, 30, 36, 12,
861
+ /* 170 */ 100, 41, 15, 103, 104, 18, 19, 20, 84, 22,
862
+ /* 180 */ 24, 25, 61, 61, 62, 63, 64, 65, 66, 67,
863
+ /* 190 */ 68, 69, 70, 24, 25, 125, 126, 127, 61, 78,
864
+ /* 200 */ 46, 80, 81, 82, 83, 38, 38, 86, 87, 88,
865
+ /* 210 */ 89, 90, 108, 109, 110, 78, 39, 80, 81, 82,
866
+ /* 220 */ 83, 39, 2, 86, 87, 88, 89, 90, 1, 2,
867
+ /* 230 */ 45, 4, 5, 17, 13, 78, 108, 109, 110, 12,
868
+ /* 240 */ 23, 71, 15, 86, 87, 88, 89, 90, 94, 29,
869
+ /* 250 */ 30, 4, 5, 6, 7, 17, 29, 30, 75, 2,
870
+ /* 260 */ 3, 4, 5, 6, 7, 1, 46, 2, 4, 5,
871
+ /* 270 */ 23, 76, 76, 16, 77, 3, 12, 3, 3, 15,
872
+ /* 280 */ 23, 61, 18, 19, 20, 36, 29, 30, 61, 4,
873
+ /* 290 */ 5, 6, 7, 36, 29, 30, 4, 5, 6, 7,
874
+ /* 300 */ 80, 81, 82, 83, 3, 78, 91, 80, 81, 82,
875
+ /* 310 */ 83, 3, 3, 86, 87, 88, 89, 90, 33, 73,
876
+ /* 320 */ 23, 64, 65, 17, 26, 33, 61, 24, 25, 72,
877
+ /* 330 */ 15, 74, 75, 76, 2, 3, 4, 5, 6, 7,
878
+ /* 340 */ 26, 15, 78, 15, 26, 80, 81, 82, 83, 17,
879
+ /* 350 */ 86, 87, 88, 89, 90, 23, 4, 5, 6, 7,
880
+ /* 360 */ 12, 29, 30, 27, 28, 29, 30, 85, 36, 17,
881
+ /* 370 */ 3, 2, 3, 4, 5, 6, 7, 1, 2, 11,
882
+ /* 380 */ 4, 5, 4, 5, 6, 7, 131, 131, 12, 86,
883
+ /* 390 */ 131, 15, 23, 131, 131, 17, 64, 65, 29, 30,
884
+ /* 400 */ 1, 23, 131, 46, 72, 36, 74, 75, 76, 131,
885
+ /* 410 */ 131, 12, 36, 14, 131, 131, 131, 18, 19, 20,
886
+ /* 420 */ 21, 22, 131, 24, 25, 131, 27, 28, 29, 30,
887
+ /* 430 */ 96, 97, 98, 64, 65, 1, 102, 131, 4, 5,
888
+ /* 440 */ 131, 72, 85, 74, 75, 76, 12, 113, 91, 15,
889
+ /* 450 */ 131, 94, 118, 131, 78, 131, 1, 2, 131, 4,
890
+ /* 460 */ 5, 131, 86, 87, 88, 89, 90, 12, 131, 131,
891
+ /* 470 */ 15, 131, 1, 2, 131, 4, 5, 1, 44, 45,
892
+ /* 480 */ 4, 5, 131, 12, 24, 25, 15, 131, 12, 131,
893
+ /* 490 */ 1, 15, 131, 4, 5, 1, 131, 131, 4, 5,
894
+ /* 500 */ 131, 12, 131, 131, 15, 131, 12, 131, 131, 15,
895
+ /* 510 */ 131, 131, 78, 131, 1, 131, 131, 4, 5, 131,
896
+ /* 520 */ 86, 87, 88, 89, 90, 12, 131, 131, 15, 4,
897
+ /* 530 */ 5, 6, 7, 78, 4, 5, 6, 7, 131, 79,
898
+ /* 540 */ 131, 86, 87, 88, 89, 90, 86, 17, 23, 78,
899
+ /* 550 */ 131, 131, 131, 131, 78, 131, 131, 86, 87, 88,
900
+ /* 560 */ 89, 90, 86, 87, 88, 89, 90, 78, 4, 5,
901
+ /* 570 */ 6, 7, 78, 131, 131, 86, 87, 88, 89, 90,
902
+ /* 580 */ 86, 87, 88, 89, 90, 18, 19, 20, 131, 131,
903
+ /* 590 */ 131, 78, 131, 131, 131, 99, 131, 131, 131, 86,
904
+ /* 600 */ 87, 88, 89, 90, 108, 109, 110, 131, 131, 131,
905
+ /* 610 */ 114, 115, 116, 131, 47, 48, 49, 50, 51, 52,
906
+ /* 620 */ 99, 131, 101, 131, 131, 131, 130, 106, 107, 108,
907
+ /* 630 */ 109, 110, 131, 99, 131, 101, 4, 5, 6, 7,
908
+ /* 640 */ 106, 107, 108, 109, 110, 99, 131, 101, 131, 17,
909
+ /* 650 */ 131, 130, 106, 107, 108, 109, 110, 131, 99, 131,
910
+ /* 660 */ 101, 131, 131, 131, 130, 106, 107, 108, 109, 110,
911
+ /* 670 */ 131, 131, 99, 131, 101, 131, 130, 131, 131, 106,
912
+ /* 680 */ 107, 108, 109, 110, 99, 131, 101, 131, 131, 130,
913
+ /* 690 */ 131, 106, 107, 108, 109, 110, 131, 131, 131, 99,
914
+ /* 700 */ 131, 101, 99, 130, 131, 131, 106, 107, 108, 109,
915
+ /* 710 */ 110, 108, 109, 110, 99, 130, 101, 131, 115, 116,
916
+ /* 720 */ 131, 106, 107, 108, 109, 110, 131, 99, 131, 101,
917
+ /* 730 */ 130, 131, 131, 130, 106, 107, 108, 109, 110, 131,
918
+ /* 740 */ 99, 131, 101, 131, 131, 130, 131, 106, 107, 108,
919
+ /* 750 */ 109, 110, 99, 131, 101, 131, 131, 131, 130, 106,
920
+ /* 760 */ 107, 108, 109, 110, 131, 99, 131, 101, 131, 131,
921
+ /* 770 */ 131, 130, 106, 107, 108, 109, 110, 131, 131, 99,
922
+ /* 780 */ 131, 101, 131, 130, 131, 131, 106, 107, 108, 109,
923
+ /* 790 */ 110, 99, 131, 101, 131, 131, 130, 131, 106, 107,
924
+ /* 800 */ 108, 109, 110, 131, 131, 131, 99, 131, 101, 99,
925
+ /* 810 */ 130, 131, 131, 106, 107, 108, 109, 110, 108, 109,
926
+ /* 820 */ 110, 99, 130, 101, 131, 115, 116, 131, 106, 107,
927
+ /* 830 */ 108, 109, 110, 131, 99, 131, 101, 130, 131, 131,
928
+ /* 840 */ 130, 106, 107, 108, 109, 110, 131, 99, 131, 101,
929
+ /* 850 */ 131, 131, 130, 131, 106, 107, 108, 109, 110, 99,
930
+ /* 860 */ 131, 101, 131, 131, 131, 130, 106, 107, 108, 109,
931
+ /* 870 */ 110, 131, 99, 131, 101, 131, 131, 131, 130, 106,
932
+ /* 880 */ 107, 108, 109, 110, 131, 131, 99, 131, 101, 131,
933
+ /* 890 */ 130, 131, 131, 106, 107, 108, 109, 110, 99, 131,
934
+ /* 900 */ 101, 99, 131, 130, 131, 106, 107, 108, 109, 110,
935
+ /* 910 */ 108, 109, 110, 99, 112, 101, 99, 130, 131, 131,
936
+ /* 920 */ 106, 107, 108, 109, 110, 108, 109, 110, 99, 130,
937
+ /* 930 */ 101, 131, 130, 131, 131, 106, 107, 108, 109, 110,
938
+ /* 940 */ 131, 99, 131, 101, 130, 99, 131, 130, 106, 107,
939
+ /* 950 */ 108, 109, 110, 131, 108, 109, 110, 131, 112, 130,
940
+ /* 960 */ 131, 4, 5, 6, 7, 119, 120, 131, 99, 131,
941
+ /* 970 */ 131, 131, 130, 131, 17, 131, 130, 108, 109, 110,
942
+ /* 980 */ 23, 131, 131, 131, 115, 131, 99, 131, 131, 131,
943
+ /* 990 */ 131, 122, 131, 124, 99, 108, 109, 110, 131, 130,
944
+ /* 1000 */ 131, 131, 115, 108, 109, 110, 131, 112, 131, 95,
945
+ /* 1010 */ 96, 97, 98, 131, 131, 120, 102, 130, 131, 131,
946
+ /* 1020 */ 99, 4, 5, 6, 7, 130, 99, 113, 131, 108,
947
+ /* 1030 */ 109, 110, 118, 112, 17, 108, 109, 110, 99, 131,
948
+ /* 1040 */ 131, 131, 131, 99, 131, 131, 131, 108, 109, 110,
949
+ /* 1050 */ 99, 130, 108, 109, 110, 99, 131, 130, 131, 108,
950
+ /* 1060 */ 109, 110, 99, 131, 108, 109, 110, 131, 99, 130,
951
+ /* 1070 */ 131, 108, 109, 110, 130, 131, 131, 108, 109, 110,
952
+ /* 1080 */ 99, 130, 4, 5, 6, 7, 130, 131, 131, 108,
953
+ /* 1090 */ 109, 110, 131, 130, 99, 17, 131, 99, 131, 130,
954
+ /* 1100 */ 131, 131, 131, 108, 109, 110, 108, 109, 110, 99,
955
+ /* 1110 */ 131, 130, 99, 131, 131, 131, 131, 131, 108, 109,
956
+ /* 1120 */ 110, 108, 109, 110, 131, 130, 99, 131, 130, 131,
957
+ /* 1130 */ 131, 131, 131, 131, 131, 108, 109, 110, 99, 131,
958
+ /* 1140 */ 130, 131, 131, 130, 131, 131, 131, 108, 109, 110,
959
+ /* 1150 */ 99, 131, 131, 99, 131, 131, 131, 130, 131, 108,
960
+ /* 1160 */ 109, 110, 108, 109, 110, 99, 131, 131, 99, 130,
961
+ /* 1170 */ 131, 131, 131, 131, 108, 109, 110, 108, 109, 110,
962
+ /* 1180 */ 99, 130, 131, 131, 130, 131, 131, 131, 131, 108,
963
+ /* 1190 */ 109, 110, 131, 99, 131, 131, 130, 99, 131, 130,
964
+ /* 1200 */ 131, 131, 108, 109, 110, 99, 108, 109, 110, 99,
965
+ /* 1210 */ 131, 130, 99, 131, 108, 109, 110, 131, 108, 109,
966
+ /* 1220 */ 110, 108, 109, 110, 130, 131, 131, 131, 130, 131,
967
+ /* 1230 */ 131, 131, 131, 131, 131, 131, 130, 131, 131, 131,
968
+ /* 1240 */ 130, 131, 131, 130, 95, 95, 95, 95, 95, 95,
969
+ /* 1250 */ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
970
+ /* 1260 */ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
971
+ /* 1270 */ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
972
+ /* 1280 */ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
969973
/* 1290 */ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
970
- /* 1300 */ 95,
974
+ /* 1300 */ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
975
+ /* 1310 */ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
976
+ /* 1320 */ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
977
+ /* 1330 */ 95, 95, 95, 95, 95, 95, 95, 95, 95,
971978
};
972979
#define YY_SHIFT_COUNT (161)
973980
#define YY_SHIFT_MIN (0)
974
-#define YY_SHIFT_MAX (1184)
981
+#define YY_SHIFT_MAX (1078)
975982
static const unsigned short int yy_shift_ofst[] = {
976
- /* 0 */ 167, 121, 137, 137, 137, 137, 137, 137, 137, 137,
977
- /* 10 */ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
978
- /* 20 */ 137, 137, 137, 137, 137, 362, 397, 431, 227, 362,
979
- /* 30 */ 167, 264, 264, 0, 61, 167, 451, 464, 431, 464,
980
- /* 40 */ 413, 418, 431, 431, 431, 431, 431, 431, 431, 510,
981
- /* 50 */ 431, 431, 431, 523, 431, 431, 431, 431, 431, 431,
982
- /* 60 */ 431, 431, 431, 431, 431, 338, 152, 152, 152, 152,
983
- /* 70 */ 152, 243, 257, 332, 899, 899, 255, 22, 1206, 1206,
984
- /* 80 */ 1206, 1206, 93, 93, 229, 388, 58, 124, 168, 339,
985
- /* 90 */ 598, 450, 23, 1014, 454, 1114, 778, 802, 1184, 291,
986
- /* 100 */ 291, 291, 353, 291, 291, 291, 324, 291, 340, 60,
987
- /* 110 */ 88, 204, 68, 4, 85, 177, 177, 110, 197, 69,
988
- /* 120 */ 86, 1, 91, 148, 174, 178, 159, 199, 205, 166,
989
- /* 130 */ 212, 171, 245, 250, 248, 206, 282, 202, 228, 234,
990
- /* 140 */ 230, 325, 327, 337, 305, 344, 356, 372, 236, 303,
991
- /* 150 */ 355, 236, 364, 368, 385, 387, 390, 395, 412, 342,
992
- /* 160 */ 426, 420,
983
+ /* 0 */ 399, 121, 137, 227, 227, 227, 227, 227, 227, 227,
984
+ /* 10 */ 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
985
+ /* 20 */ 227, 227, 227, 227, 227, 227, 227, 157, 434, 476,
986
+ /* 30 */ 157, 399, 376, 376, 0, 61, 399, 489, 476, 489,
987
+ /* 40 */ 264, 264, 264, 455, 471, 476, 476, 476, 476, 476,
988
+ /* 50 */ 476, 494, 476, 476, 513, 476, 476, 476, 476, 476,
989
+ /* 60 */ 476, 476, 476, 476, 476, 567, 62, 62, 62, 62,
990
+ /* 70 */ 62, 220, 257, 332, 369, 265, 265, 336, 22, 1244,
991
+ /* 80 */ 1244, 1244, 1244, 122, 122, 378, 957, 58, 123, 285,
992
+ /* 90 */ 292, 352, 23, 632, 247, 1017, 525, 530, 1078, 564,
993
+ /* 100 */ 564, 564, 357, 564, 564, 564, 460, 564, 303, 60,
994
+ /* 110 */ 88, 132, 68, 4, 67, 147, 147, 156, 169, 94,
995
+ /* 120 */ 154, 1, 120, 131, 129, 130, 167, 168, 177, 182,
996
+ /* 130 */ 185, 221, 216, 217, 170, 238, 195, 183, 197, 196,
997
+ /* 140 */ 272, 274, 275, 249, 301, 308, 309, 215, 246, 297,
998
+ /* 150 */ 215, 315, 326, 328, 306, 298, 314, 318, 348, 282,
999
+ /* 160 */ 367, 368,
9931000
};
994
-#define YY_REDUCE_COUNT (81)
1001
+#define YY_REDUCE_COUNT (82)
9951002
#define YY_REDUCE_MIN (-127)
996
-#define YY_REDUCE_MAX (1075)
1003
+#define YY_REDUCE_MAX (1113)
9971004
static const short yy_reduce_ofst[] = {
998
- /* 0 */ -29, -94, 476, 515, 528, 543, 555, 583, 597, 610,
999
- /* 10 */ 622, 635, 650, 662, 690, 704, 717, 729, 742, 757,
1000
- /* 20 */ 769, 797, 811, 824, 836, 182, 449, 840, 363, 558,
1001
- /* 30 */ 474, 859, 877, 44, 44, 443, 140, 261, 900, 665,
1002
- /* 40 */ 145, 509, 772, 903, 918, 926, 930, 933, 945, 959,
1003
- /* 50 */ 963, 971, 975, 987, 1000, 1003, 1016, 1028, 1033, 1040,
1004
- /* 60 */ 1045, 1057, 1063, 1069, 1075, -79, -32, -3, 104, 210,
1005
- /* 70 */ 458, -84, -127, -127, -95, -78, -61, -47, -41, -14,
1006
- /* 80 */ -9, 3,
1005
+ /* 0 */ -29, -94, 521, 534, 546, 559, 573, 585, 600, 615,
1006
+ /* 10 */ 628, 641, 653, 666, 680, 692, 707, 722, 735, 748,
1007
+ /* 20 */ 760, 773, 787, 799, 814, 829, 842, 846, 496, 869,
1008
+ /* 30 */ 895, 914, 603, 710, 70, 70, 334, 802, 887, 921,
1009
+ /* 40 */ 817, 927, 939, 944, 951, 956, 963, 969, 981, 995,
1010
+ /* 50 */ 998, 1010, 1013, 1027, 1039, 1051, 1054, 1066, 1069, 1081,
1011
+ /* 60 */ 1094, 1098, 1106, 1110, 1113, -79, -32, -3, 55, 104,
1012
+ /* 70 */ 128, -84, -127, -127, -127, -95, -78, -61, -49, -41,
1013
+ /* 80 */ -9, 21, 11,
10071014
};
10081015
static const YYACTIONTYPE yy_default[] = {
1009
- /* 0 */ 440, 434, 434, 434, 434, 434, 434, 434, 434, 434,
1010
- /* 10 */ 434, 434, 434, 434, 434, 434, 434, 434, 434, 434,
1011
- /* 20 */ 434, 434, 434, 434, 434, 434, 463, 563, 434, 434,
1012
- /* 30 */ 440, 567, 475, 568, 568, 440, 434, 434, 434, 434,
1013
- /* 40 */ 434, 434, 434, 434, 434, 467, 434, 434, 434, 434,
1014
- /* 50 */ 434, 434, 434, 434, 434, 434, 434, 434, 434, 434,
1015
- /* 60 */ 434, 434, 434, 434, 434, 434, 434, 434, 434, 434,
1016
- /* 70 */ 434, 434, 434, 434, 434, 434, 434, 446, 460, 497,
1017
- /* 80 */ 497, 563, 458, 483, 434, 434, 434, 434, 461, 434,
1018
- /* 90 */ 434, 434, 434, 434, 434, 434, 434, 434, 434, 478,
1019
- /* 100 */ 476, 466, 449, 501, 500, 499, 434, 553, 434, 434,
1020
- /* 110 */ 434, 434, 434, 575, 434, 533, 532, 528, 434, 521,
1021
- /* 120 */ 518, 434, 518, 434, 434, 434, 481, 434, 434, 434,
1022
- /* 130 */ 434, 434, 434, 434, 434, 434, 434, 434, 434, 434,
1023
- /* 140 */ 434, 434, 434, 434, 434, 434, 434, 434, 579, 434,
1024
- /* 150 */ 434, 434, 434, 434, 434, 434, 434, 434, 434, 588,
1025
- /* 160 */ 434, 434,
1016
+ /* 0 */ 441, 435, 435, 435, 435, 435, 435, 435, 435, 435,
1017
+ /* 10 */ 435, 435, 435, 435, 435, 435, 435, 435, 435, 435,
1018
+ /* 20 */ 435, 435, 435, 435, 435, 435, 435, 435, 464, 565,
1019
+ /* 30 */ 435, 441, 569, 476, 570, 570, 441, 435, 435, 435,
1020
+ /* 40 */ 435, 435, 435, 435, 435, 435, 435, 435, 468, 435,
1021
+ /* 50 */ 435, 435, 435, 435, 435, 435, 435, 435, 435, 435,
1022
+ /* 60 */ 435, 435, 435, 435, 435, 435, 435, 435, 435, 435,
1023
+ /* 70 */ 435, 435, 435, 435, 435, 435, 435, 435, 447, 461,
1024
+ /* 80 */ 498, 498, 565, 459, 484, 435, 435, 435, 462, 435,
1025
+ /* 90 */ 435, 435, 435, 435, 435, 435, 435, 435, 435, 479,
1026
+ /* 100 */ 477, 467, 450, 502, 501, 500, 435, 555, 435, 435,
1027
+ /* 110 */ 435, 435, 435, 577, 435, 534, 533, 529, 435, 522,
1028
+ /* 120 */ 519, 435, 435, 435, 435, 482, 435, 435, 435, 435,
1029
+ /* 130 */ 435, 435, 435, 435, 435, 435, 435, 435, 435, 435,
1030
+ /* 140 */ 435, 435, 435, 435, 435, 435, 435, 581, 435, 435,
1031
+ /* 150 */ 435, 435, 435, 435, 435, 435, 435, 435, 435, 590,
1032
+ /* 160 */ 435, 435,
10261033
};
10271034
/********** End of lemon-generated parsing tables *****************************/
10281035
10291036
/* The next table maps tokens (terminal symbols) into fallback tokens.
10301037
** If a construct like the following:
@@ -1372,11 +1379,11 @@
13721379
/* 6 */ "element ::= PLACENAME COLON unnamed_element",
13731380
/* 7 */ "element ::= PLACENAME COLON position",
13741381
/* 8 */ "element ::= unnamed_element",
13751382
/* 9 */ "element ::= print prlist",
13761383
/* 10 */ "element ::= ASSERT LP expr EQ expr RP",
1377
- /* 11 */ "element ::= ASSERT LP place EQ place RP",
1384
+ /* 11 */ "element ::= ASSERT LP position EQ position RP",
13781385
/* 12 */ "rvalue ::= PLACENAME",
13791386
/* 13 */ "pritem ::= FILL",
13801387
/* 14 */ "pritem ::= COLOR",
13811388
/* 15 */ "pritem ::= THICKNESS",
13821389
/* 16 */ "pritem ::= rvalue",
@@ -1463,60 +1470,61 @@
14631470
/* 97 */ "expr ::= expr STAR expr",
14641471
/* 98 */ "expr ::= expr SLASH expr",
14651472
/* 99 */ "expr ::= MINUS expr",
14661473
/* 100 */ "expr ::= PLUS expr",
14671474
/* 101 */ "expr ::= LP expr RP",
1468
- /* 102 */ "expr ::= NUMBER",
1469
- /* 103 */ "expr ::= ID",
1470
- /* 104 */ "expr ::= FUNC1 LP expr RP",
1471
- /* 105 */ "expr ::= FUNC2 LP expr COMMA expr RP",
1472
- /* 106 */ "expr ::= DIST LP position COMMA position RP",
1473
- /* 107 */ "expr ::= place2 DOT_XY X",
1474
- /* 108 */ "expr ::= place2 DOT_XY Y",
1475
- /* 109 */ "expr ::= object DOT_L numproperty",
1476
- /* 110 */ "expr ::= object DOT_L dashproperty",
1477
- /* 111 */ "expr ::= object DOT_L colorproperty",
1478
- /* 112 */ "lvalue ::= ID",
1479
- /* 113 */ "lvalue ::= FILL",
1480
- /* 114 */ "lvalue ::= COLOR",
1481
- /* 115 */ "lvalue ::= THICKNESS",
1482
- /* 116 */ "rvalue ::= expr",
1483
- /* 117 */ "print ::= PRINT",
1484
- /* 118 */ "prlist ::= pritem",
1485
- /* 119 */ "prlist ::= prlist prsep pritem",
1486
- /* 120 */ "direction ::= UP",
1487
- /* 121 */ "direction ::= DOWN",
1488
- /* 122 */ "direction ::= LEFT",
1489
- /* 123 */ "direction ::= RIGHT",
1490
- /* 124 */ "optrelexpr ::= relexpr",
1491
- /* 125 */ "attribute_list ::= alist",
1492
- /* 126 */ "alist ::=",
1493
- /* 127 */ "alist ::= alist attribute",
1494
- /* 128 */ "attribute ::= boolproperty",
1495
- /* 129 */ "attribute ::= WITH withclause",
1496
- /* 130 */ "go ::= GO",
1497
- /* 131 */ "go ::=",
1498
- /* 132 */ "even ::= UNTIL EVEN WITH",
1499
- /* 133 */ "even ::= EVEN WITH",
1500
- /* 134 */ "dashproperty ::= DOTTED",
1501
- /* 135 */ "dashproperty ::= DASHED",
1502
- /* 136 */ "colorproperty ::= FILL",
1503
- /* 137 */ "colorproperty ::= COLOR",
1504
- /* 138 */ "position ::= place",
1505
- /* 139 */ "between ::= WAY BETWEEN",
1506
- /* 140 */ "between ::= BETWEEN",
1507
- /* 141 */ "between ::= OF THE WAY BETWEEN",
1508
- /* 142 */ "place ::= place2",
1509
- /* 143 */ "edge ::= CENTER",
1510
- /* 144 */ "edge ::= EDGEPT",
1511
- /* 145 */ "edge ::= TOP",
1512
- /* 146 */ "edge ::= BOTTOM",
1513
- /* 147 */ "edge ::= START",
1514
- /* 148 */ "edge ::= END",
1515
- /* 149 */ "edge ::= RIGHT",
1516
- /* 150 */ "edge ::= LEFT",
1517
- /* 151 */ "object ::= objectname",
1475
+ /* 102 */ "expr ::= LP FILL|COLOR|THICKNESS RP",
1476
+ /* 103 */ "expr ::= NUMBER",
1477
+ /* 104 */ "expr ::= ID",
1478
+ /* 105 */ "expr ::= FUNC1 LP expr RP",
1479
+ /* 106 */ "expr ::= FUNC2 LP expr COMMA expr RP",
1480
+ /* 107 */ "expr ::= DIST LP position COMMA position RP",
1481
+ /* 108 */ "expr ::= place2 DOT_XY X",
1482
+ /* 109 */ "expr ::= place2 DOT_XY Y",
1483
+ /* 110 */ "expr ::= object DOT_L numproperty",
1484
+ /* 111 */ "expr ::= object DOT_L dashproperty",
1485
+ /* 112 */ "expr ::= object DOT_L colorproperty",
1486
+ /* 113 */ "lvalue ::= ID",
1487
+ /* 114 */ "lvalue ::= FILL",
1488
+ /* 115 */ "lvalue ::= COLOR",
1489
+ /* 116 */ "lvalue ::= THICKNESS",
1490
+ /* 117 */ "rvalue ::= expr",
1491
+ /* 118 */ "print ::= PRINT",
1492
+ /* 119 */ "prlist ::= pritem",
1493
+ /* 120 */ "prlist ::= prlist prsep pritem",
1494
+ /* 121 */ "direction ::= UP",
1495
+ /* 122 */ "direction ::= DOWN",
1496
+ /* 123 */ "direction ::= LEFT",
1497
+ /* 124 */ "direction ::= RIGHT",
1498
+ /* 125 */ "optrelexpr ::= relexpr",
1499
+ /* 126 */ "attribute_list ::= alist",
1500
+ /* 127 */ "alist ::=",
1501
+ /* 128 */ "alist ::= alist attribute",
1502
+ /* 129 */ "attribute ::= boolproperty",
1503
+ /* 130 */ "attribute ::= WITH withclause",
1504
+ /* 131 */ "go ::= GO",
1505
+ /* 132 */ "go ::=",
1506
+ /* 133 */ "even ::= UNTIL EVEN WITH",
1507
+ /* 134 */ "even ::= EVEN WITH",
1508
+ /* 135 */ "dashproperty ::= DOTTED",
1509
+ /* 136 */ "dashproperty ::= DASHED",
1510
+ /* 137 */ "colorproperty ::= FILL",
1511
+ /* 138 */ "colorproperty ::= COLOR",
1512
+ /* 139 */ "position ::= place",
1513
+ /* 140 */ "between ::= WAY BETWEEN",
1514
+ /* 141 */ "between ::= BETWEEN",
1515
+ /* 142 */ "between ::= OF THE WAY BETWEEN",
1516
+ /* 143 */ "place ::= place2",
1517
+ /* 144 */ "edge ::= CENTER",
1518
+ /* 145 */ "edge ::= EDGEPT",
1519
+ /* 146 */ "edge ::= TOP",
1520
+ /* 147 */ "edge ::= BOTTOM",
1521
+ /* 148 */ "edge ::= START",
1522
+ /* 149 */ "edge ::= END",
1523
+ /* 150 */ "edge ::= RIGHT",
1524
+ /* 151 */ "edge ::= LEFT",
1525
+ /* 152 */ "object ::= objectname",
15181526
};
15191527
#endif /* NDEBUG */
15201528
15211529
15221530
#if YYSTACKDEPTH<=0
@@ -1642,20 +1650,20 @@
16421650
/********* Begin destructor definitions ***************************************/
16431651
case 95: /* element_list */
16441652
{
16451653
#line 467 "pikchr.y"
16461654
pik_elist_free(p,(yypminor->yy56));
1647
-#line 1672 "pikchr.c"
1655
+#line 1680 "pikchr.c"
16481656
}
16491657
break;
16501658
case 96: /* element */
16511659
case 97: /* unnamed_element */
16521660
case 98: /* basetype */
16531661
{
16541662
#line 469 "pikchr.y"
16551663
pik_elem_free(p,(yypminor->yy226));
1656
-#line 1681 "pikchr.c"
1664
+#line 1689 "pikchr.c"
16571665
}
16581666
break;
16591667
/********* End destructor definitions *****************************************/
16601668
default: break; /* If no destructor action specified: do nothing */
16611669
}
@@ -1872,11 +1880,11 @@
18721880
** stack every overflows */
18731881
/******** Begin %stack_overflow code ******************************************/
18741882
#line 501 "pikchr.y"
18751883
18761884
pik_error(p, 0, "parser stack overflow");
1877
-#line 1902 "pikchr.c"
1885
+#line 1910 "pikchr.c"
18781886
/******** End %stack_overflow code ********************************************/
18791887
pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */
18801888
pik_parserCTX_STORE
18811889
}
18821890
@@ -1955,11 +1963,11 @@
19551963
96, /* (6) element ::= PLACENAME COLON unnamed_element */
19561964
96, /* (7) element ::= PLACENAME COLON position */
19571965
96, /* (8) element ::= unnamed_element */
19581966
96, /* (9) element ::= print prlist */
19591967
96, /* (10) element ::= ASSERT LP expr EQ expr RP */
1960
- 96, /* (11) element ::= ASSERT LP place EQ place RP */
1968
+ 96, /* (11) element ::= ASSERT LP position EQ position RP */
19611969
112, /* (12) rvalue ::= PLACENAME */
19621970
120, /* (13) pritem ::= FILL */
19631971
120, /* (14) pritem ::= COLOR */
19641972
120, /* (15) pritem ::= THICKNESS */
19651973
120, /* (16) pritem ::= rvalue */
@@ -2046,60 +2054,61 @@
20462054
99, /* (97) expr ::= expr STAR expr */
20472055
99, /* (98) expr ::= expr SLASH expr */
20482056
99, /* (99) expr ::= MINUS expr */
20492057
99, /* (100) expr ::= PLUS expr */
20502058
99, /* (101) expr ::= LP expr RP */
2051
- 99, /* (102) expr ::= NUMBER */
2052
- 99, /* (103) expr ::= ID */
2053
- 99, /* (104) expr ::= FUNC1 LP expr RP */
2054
- 99, /* (105) expr ::= FUNC2 LP expr COMMA expr RP */
2055
- 99, /* (106) expr ::= DIST LP position COMMA position RP */
2056
- 99, /* (107) expr ::= place2 DOT_XY X */
2057
- 99, /* (108) expr ::= place2 DOT_XY Y */
2058
- 99, /* (109) expr ::= object DOT_L numproperty */
2059
- 99, /* (110) expr ::= object DOT_L dashproperty */
2060
- 99, /* (111) expr ::= object DOT_L colorproperty */
2061
- 113, /* (112) lvalue ::= ID */
2062
- 113, /* (113) lvalue ::= FILL */
2063
- 113, /* (114) lvalue ::= COLOR */
2064
- 113, /* (115) lvalue ::= THICKNESS */
2065
- 112, /* (116) rvalue ::= expr */
2066
- 118, /* (117) print ::= PRINT */
2067
- 119, /* (118) prlist ::= pritem */
2068
- 119, /* (119) prlist ::= prlist prsep pritem */
2069
- 102, /* (120) direction ::= UP */
2070
- 102, /* (121) direction ::= DOWN */
2071
- 102, /* (122) direction ::= LEFT */
2072
- 102, /* (123) direction ::= RIGHT */
2073
- 116, /* (124) optrelexpr ::= relexpr */
2074
- 122, /* (125) attribute_list ::= alist */
2075
- 124, /* (126) alist ::= */
2076
- 124, /* (127) alist ::= alist attribute */
2077
- 125, /* (128) attribute ::= boolproperty */
2078
- 125, /* (129) attribute ::= WITH withclause */
2079
- 126, /* (130) go ::= GO */
2080
- 126, /* (131) go ::= */
2081
- 114, /* (132) even ::= UNTIL EVEN WITH */
2082
- 114, /* (133) even ::= EVEN WITH */
2083
- 103, /* (134) dashproperty ::= DOTTED */
2084
- 103, /* (135) dashproperty ::= DASHED */
2085
- 104, /* (136) colorproperty ::= FILL */
2086
- 104, /* (137) colorproperty ::= COLOR */
2087
- 106, /* (138) position ::= place */
2088
- 129, /* (139) between ::= WAY BETWEEN */
2089
- 129, /* (140) between ::= BETWEEN */
2090
- 129, /* (141) between ::= OF THE WAY BETWEEN */
2091
- 107, /* (142) place ::= place2 */
2092
- 101, /* (143) edge ::= CENTER */
2093
- 101, /* (144) edge ::= EDGEPT */
2094
- 101, /* (145) edge ::= TOP */
2095
- 101, /* (146) edge ::= BOTTOM */
2096
- 101, /* (147) edge ::= START */
2097
- 101, /* (148) edge ::= END */
2098
- 101, /* (149) edge ::= RIGHT */
2099
- 101, /* (150) edge ::= LEFT */
2100
- 108, /* (151) object ::= objectname */
2059
+ 99, /* (102) expr ::= LP FILL|COLOR|THICKNESS RP */
2060
+ 99, /* (103) expr ::= NUMBER */
2061
+ 99, /* (104) expr ::= ID */
2062
+ 99, /* (105) expr ::= FUNC1 LP expr RP */
2063
+ 99, /* (106) expr ::= FUNC2 LP expr COMMA expr RP */
2064
+ 99, /* (107) expr ::= DIST LP position COMMA position RP */
2065
+ 99, /* (108) expr ::= place2 DOT_XY X */
2066
+ 99, /* (109) expr ::= place2 DOT_XY Y */
2067
+ 99, /* (110) expr ::= object DOT_L numproperty */
2068
+ 99, /* (111) expr ::= object DOT_L dashproperty */
2069
+ 99, /* (112) expr ::= object DOT_L colorproperty */
2070
+ 113, /* (113) lvalue ::= ID */
2071
+ 113, /* (114) lvalue ::= FILL */
2072
+ 113, /* (115) lvalue ::= COLOR */
2073
+ 113, /* (116) lvalue ::= THICKNESS */
2074
+ 112, /* (117) rvalue ::= expr */
2075
+ 118, /* (118) print ::= PRINT */
2076
+ 119, /* (119) prlist ::= pritem */
2077
+ 119, /* (120) prlist ::= prlist prsep pritem */
2078
+ 102, /* (121) direction ::= UP */
2079
+ 102, /* (122) direction ::= DOWN */
2080
+ 102, /* (123) direction ::= LEFT */
2081
+ 102, /* (124) direction ::= RIGHT */
2082
+ 116, /* (125) optrelexpr ::= relexpr */
2083
+ 122, /* (126) attribute_list ::= alist */
2084
+ 124, /* (127) alist ::= */
2085
+ 124, /* (128) alist ::= alist attribute */
2086
+ 125, /* (129) attribute ::= boolproperty */
2087
+ 125, /* (130) attribute ::= WITH withclause */
2088
+ 126, /* (131) go ::= GO */
2089
+ 126, /* (132) go ::= */
2090
+ 114, /* (133) even ::= UNTIL EVEN WITH */
2091
+ 114, /* (134) even ::= EVEN WITH */
2092
+ 103, /* (135) dashproperty ::= DOTTED */
2093
+ 103, /* (136) dashproperty ::= DASHED */
2094
+ 104, /* (137) colorproperty ::= FILL */
2095
+ 104, /* (138) colorproperty ::= COLOR */
2096
+ 106, /* (139) position ::= place */
2097
+ 129, /* (140) between ::= WAY BETWEEN */
2098
+ 129, /* (141) between ::= BETWEEN */
2099
+ 129, /* (142) between ::= OF THE WAY BETWEEN */
2100
+ 107, /* (143) place ::= place2 */
2101
+ 101, /* (144) edge ::= CENTER */
2102
+ 101, /* (145) edge ::= EDGEPT */
2103
+ 101, /* (146) edge ::= TOP */
2104
+ 101, /* (147) edge ::= BOTTOM */
2105
+ 101, /* (148) edge ::= START */
2106
+ 101, /* (149) edge ::= END */
2107
+ 101, /* (150) edge ::= RIGHT */
2108
+ 101, /* (151) edge ::= LEFT */
2109
+ 108, /* (152) object ::= objectname */
21012110
};
21022111
21032112
/* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
21042113
** of symbols on the right-hand side of that rule. */
21052114
static const signed char yyRuleInfoNRhs[] = {
@@ -2112,11 +2121,11 @@
21122121
-3, /* (6) element ::= PLACENAME COLON unnamed_element */
21132122
-3, /* (7) element ::= PLACENAME COLON position */
21142123
-1, /* (8) element ::= unnamed_element */
21152124
-2, /* (9) element ::= print prlist */
21162125
-6, /* (10) element ::= ASSERT LP expr EQ expr RP */
2117
- -6, /* (11) element ::= ASSERT LP place EQ place RP */
2126
+ -6, /* (11) element ::= ASSERT LP position EQ position RP */
21182127
-1, /* (12) rvalue ::= PLACENAME */
21192128
-1, /* (13) pritem ::= FILL */
21202129
-1, /* (14) pritem ::= COLOR */
21212130
-1, /* (15) pritem ::= THICKNESS */
21222131
-1, /* (16) pritem ::= rvalue */
@@ -2203,60 +2212,61 @@
22032212
-3, /* (97) expr ::= expr STAR expr */
22042213
-3, /* (98) expr ::= expr SLASH expr */
22052214
-2, /* (99) expr ::= MINUS expr */
22062215
-2, /* (100) expr ::= PLUS expr */
22072216
-3, /* (101) expr ::= LP expr RP */
2208
- -1, /* (102) expr ::= NUMBER */
2209
- -1, /* (103) expr ::= ID */
2210
- -4, /* (104) expr ::= FUNC1 LP expr RP */
2211
- -6, /* (105) expr ::= FUNC2 LP expr COMMA expr RP */
2212
- -6, /* (106) expr ::= DIST LP position COMMA position RP */
2213
- -3, /* (107) expr ::= place2 DOT_XY X */
2214
- -3, /* (108) expr ::= place2 DOT_XY Y */
2215
- -3, /* (109) expr ::= object DOT_L numproperty */
2216
- -3, /* (110) expr ::= object DOT_L dashproperty */
2217
- -3, /* (111) expr ::= object DOT_L colorproperty */
2218
- -1, /* (112) lvalue ::= ID */
2219
- -1, /* (113) lvalue ::= FILL */
2220
- -1, /* (114) lvalue ::= COLOR */
2221
- -1, /* (115) lvalue ::= THICKNESS */
2222
- -1, /* (116) rvalue ::= expr */
2223
- -1, /* (117) print ::= PRINT */
2224
- -1, /* (118) prlist ::= pritem */
2225
- -3, /* (119) prlist ::= prlist prsep pritem */
2226
- -1, /* (120) direction ::= UP */
2227
- -1, /* (121) direction ::= DOWN */
2228
- -1, /* (122) direction ::= LEFT */
2229
- -1, /* (123) direction ::= RIGHT */
2230
- -1, /* (124) optrelexpr ::= relexpr */
2231
- -1, /* (125) attribute_list ::= alist */
2232
- 0, /* (126) alist ::= */
2233
- -2, /* (127) alist ::= alist attribute */
2234
- -1, /* (128) attribute ::= boolproperty */
2235
- -2, /* (129) attribute ::= WITH withclause */
2236
- -1, /* (130) go ::= GO */
2237
- 0, /* (131) go ::= */
2238
- -3, /* (132) even ::= UNTIL EVEN WITH */
2239
- -2, /* (133) even ::= EVEN WITH */
2240
- -1, /* (134) dashproperty ::= DOTTED */
2241
- -1, /* (135) dashproperty ::= DASHED */
2242
- -1, /* (136) colorproperty ::= FILL */
2243
- -1, /* (137) colorproperty ::= COLOR */
2244
- -1, /* (138) position ::= place */
2245
- -2, /* (139) between ::= WAY BETWEEN */
2246
- -1, /* (140) between ::= BETWEEN */
2247
- -4, /* (141) between ::= OF THE WAY BETWEEN */
2248
- -1, /* (142) place ::= place2 */
2249
- -1, /* (143) edge ::= CENTER */
2250
- -1, /* (144) edge ::= EDGEPT */
2251
- -1, /* (145) edge ::= TOP */
2252
- -1, /* (146) edge ::= BOTTOM */
2253
- -1, /* (147) edge ::= START */
2254
- -1, /* (148) edge ::= END */
2255
- -1, /* (149) edge ::= RIGHT */
2256
- -1, /* (150) edge ::= LEFT */
2257
- -1, /* (151) object ::= objectname */
2217
+ -3, /* (102) expr ::= LP FILL|COLOR|THICKNESS RP */
2218
+ -1, /* (103) expr ::= NUMBER */
2219
+ -1, /* (104) expr ::= ID */
2220
+ -4, /* (105) expr ::= FUNC1 LP expr RP */
2221
+ -6, /* (106) expr ::= FUNC2 LP expr COMMA expr RP */
2222
+ -6, /* (107) expr ::= DIST LP position COMMA position RP */
2223
+ -3, /* (108) expr ::= place2 DOT_XY X */
2224
+ -3, /* (109) expr ::= place2 DOT_XY Y */
2225
+ -3, /* (110) expr ::= object DOT_L numproperty */
2226
+ -3, /* (111) expr ::= object DOT_L dashproperty */
2227
+ -3, /* (112) expr ::= object DOT_L colorproperty */
2228
+ -1, /* (113) lvalue ::= ID */
2229
+ -1, /* (114) lvalue ::= FILL */
2230
+ -1, /* (115) lvalue ::= COLOR */
2231
+ -1, /* (116) lvalue ::= THICKNESS */
2232
+ -1, /* (117) rvalue ::= expr */
2233
+ -1, /* (118) print ::= PRINT */
2234
+ -1, /* (119) prlist ::= pritem */
2235
+ -3, /* (120) prlist ::= prlist prsep pritem */
2236
+ -1, /* (121) direction ::= UP */
2237
+ -1, /* (122) direction ::= DOWN */
2238
+ -1, /* (123) direction ::= LEFT */
2239
+ -1, /* (124) direction ::= RIGHT */
2240
+ -1, /* (125) optrelexpr ::= relexpr */
2241
+ -1, /* (126) attribute_list ::= alist */
2242
+ 0, /* (127) alist ::= */
2243
+ -2, /* (128) alist ::= alist attribute */
2244
+ -1, /* (129) attribute ::= boolproperty */
2245
+ -2, /* (130) attribute ::= WITH withclause */
2246
+ -1, /* (131) go ::= GO */
2247
+ 0, /* (132) go ::= */
2248
+ -3, /* (133) even ::= UNTIL EVEN WITH */
2249
+ -2, /* (134) even ::= EVEN WITH */
2250
+ -1, /* (135) dashproperty ::= DOTTED */
2251
+ -1, /* (136) dashproperty ::= DASHED */
2252
+ -1, /* (137) colorproperty ::= FILL */
2253
+ -1, /* (138) colorproperty ::= COLOR */
2254
+ -1, /* (139) position ::= place */
2255
+ -2, /* (140) between ::= WAY BETWEEN */
2256
+ -1, /* (141) between ::= BETWEEN */
2257
+ -4, /* (142) between ::= OF THE WAY BETWEEN */
2258
+ -1, /* (143) place ::= place2 */
2259
+ -1, /* (144) edge ::= CENTER */
2260
+ -1, /* (145) edge ::= EDGEPT */
2261
+ -1, /* (146) edge ::= TOP */
2262
+ -1, /* (147) edge ::= BOTTOM */
2263
+ -1, /* (148) edge ::= START */
2264
+ -1, /* (149) edge ::= END */
2265
+ -1, /* (150) edge ::= RIGHT */
2266
+ -1, /* (151) edge ::= LEFT */
2267
+ -1, /* (152) object ::= objectname */
22582268
};
22592269
22602270
static void yy_accept(yyParser*); /* Forward Declaration */
22612271
22622272
/*
@@ -2282,12 +2292,13 @@
22822292
int yysize; /* Amount to pop the stack */
22832293
pik_parserARG_FETCH
22842294
(void)yyLookahead;
22852295
(void)yyLookaheadToken;
22862296
yymsp = yypParser->yytos;
2297
+ assert( yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) );
22872298
#ifndef NDEBUG
2288
- if( yyTraceFILE && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){
2299
+ if( yyTraceFILE ){
22892300
yysize = yyRuleInfoNRhs[yyruleno];
22902301
if( yysize ){
22912302
fprintf(yyTraceFILE, "%sReduce %d [%s]%s, pop back to state %d.\n",
22922303
yyTracePrompt,
22932304
yyruleno, yyRuleName[yyruleno],
@@ -2345,639 +2356,644 @@
23452356
/********** Begin reduce actions **********************************************/
23462357
YYMINORTYPE yylhsminor;
23472358
case 0: /* document ::= element_list */
23482359
#line 505 "pikchr.y"
23492360
{pik_render(p,yymsp[0].minor.yy56);}
2350
-#line 2375 "pikchr.c"
2361
+#line 2386 "pikchr.c"
23512362
break;
23522363
case 1: /* element_list ::= element */
23532364
#line 508 "pikchr.y"
23542365
{ yylhsminor.yy56 = pik_elist_append(p,0,yymsp[0].minor.yy226); }
2355
-#line 2380 "pikchr.c"
2366
+#line 2391 "pikchr.c"
23562367
yymsp[0].minor.yy56 = yylhsminor.yy56;
23572368
break;
23582369
case 2: /* element_list ::= element_list EOL element */
23592370
#line 510 "pikchr.y"
23602371
{ yylhsminor.yy56 = pik_elist_append(p,yymsp[-2].minor.yy56,yymsp[0].minor.yy226); }
2361
-#line 2386 "pikchr.c"
2372
+#line 2397 "pikchr.c"
23622373
yymsp[-2].minor.yy56 = yylhsminor.yy56;
23632374
break;
23642375
case 3: /* element ::= */
23652376
#line 513 "pikchr.y"
23662377
{ yymsp[1].minor.yy226 = 0; }
2367
-#line 2392 "pikchr.c"
2378
+#line 2403 "pikchr.c"
23682379
break;
23692380
case 4: /* element ::= direction */
23702381
#line 514 "pikchr.y"
23712382
{ pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy226=0; }
2372
-#line 2397 "pikchr.c"
2383
+#line 2408 "pikchr.c"
23732384
yymsp[0].minor.yy226 = yylhsminor.yy226;
23742385
break;
23752386
case 5: /* element ::= lvalue ASSIGN rvalue */
23762387
#line 515 "pikchr.y"
23772388
{pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy257,&yymsp[-1].minor.yy0); yylhsminor.yy226=0;}
2378
-#line 2403 "pikchr.c"
2389
+#line 2414 "pikchr.c"
23792390
yymsp[-2].minor.yy226 = yylhsminor.yy226;
23802391
break;
23812392
case 6: /* element ::= PLACENAME COLON unnamed_element */
23822393
#line 517 "pikchr.y"
23832394
{ yylhsminor.yy226 = yymsp[0].minor.yy226; pik_elem_setname(p,yymsp[0].minor.yy226,&yymsp[-2].minor.yy0); }
2384
-#line 2409 "pikchr.c"
2395
+#line 2420 "pikchr.c"
23852396
yymsp[-2].minor.yy226 = yylhsminor.yy226;
23862397
break;
23872398
case 7: /* element ::= PLACENAME COLON position */
23882399
#line 519 "pikchr.y"
23892400
{ yylhsminor.yy226 = pik_elem_new(p,0,0,0);
23902401
if(yylhsminor.yy226){ yylhsminor.yy226->ptAt = yymsp[0].minor.yy175; pik_elem_setname(p,yylhsminor.yy226,&yymsp[-2].minor.yy0); }}
2391
-#line 2416 "pikchr.c"
2402
+#line 2427 "pikchr.c"
23922403
yymsp[-2].minor.yy226 = yylhsminor.yy226;
23932404
break;
23942405
case 8: /* element ::= unnamed_element */
23952406
#line 521 "pikchr.y"
23962407
{yylhsminor.yy226 = yymsp[0].minor.yy226;}
2397
-#line 2422 "pikchr.c"
2408
+#line 2433 "pikchr.c"
23982409
yymsp[0].minor.yy226 = yylhsminor.yy226;
23992410
break;
24002411
case 9: /* element ::= print prlist */
24012412
#line 522 "pikchr.y"
24022413
{pik_append(p,"<br>\n",5); yymsp[-1].minor.yy226=0;}
2403
-#line 2428 "pikchr.c"
2414
+#line 2439 "pikchr.c"
24042415
break;
24052416
case 10: /* element ::= ASSERT LP expr EQ expr RP */
24062417
#line 527 "pikchr.y"
24072418
{yymsp[-5].minor.yy226=pik_assert(p,yymsp[-3].minor.yy257,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy257);}
2408
-#line 2433 "pikchr.c"
2419
+#line 2444 "pikchr.c"
24092420
break;
2410
- case 11: /* element ::= ASSERT LP place EQ place RP */
2421
+ case 11: /* element ::= ASSERT LP position EQ position RP */
24112422
#line 529 "pikchr.y"
2412
-{yymsp[-5].minor.yy226=pik_place_assert(p,&yymsp[-3].minor.yy175,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy175);}
2413
-#line 2438 "pikchr.c"
2423
+{yymsp[-5].minor.yy226=pik_position_assert(p,&yymsp[-3].minor.yy175,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy175);}
2424
+#line 2449 "pikchr.c"
24142425
break;
24152426
case 12: /* rvalue ::= PLACENAME */
24162427
#line 540 "pikchr.y"
24172428
{yylhsminor.yy257 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2418
-#line 2443 "pikchr.c"
2429
+#line 2454 "pikchr.c"
24192430
yymsp[0].minor.yy257 = yylhsminor.yy257;
24202431
break;
24212432
case 13: /* pritem ::= FILL */
24222433
case 14: /* pritem ::= COLOR */ yytestcase(yyruleno==14);
24232434
case 15: /* pritem ::= THICKNESS */ yytestcase(yyruleno==15);
24242435
#line 545 "pikchr.y"
24252436
{pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));}
2426
-#line 2451 "pikchr.c"
2437
+#line 2462 "pikchr.c"
24272438
break;
24282439
case 16: /* pritem ::= rvalue */
24292440
#line 548 "pikchr.y"
24302441
{pik_append_num(p,"",yymsp[0].minor.yy257);}
2431
-#line 2456 "pikchr.c"
2442
+#line 2467 "pikchr.c"
24322443
break;
24332444
case 17: /* pritem ::= STRING */
24342445
#line 549 "pikchr.y"
24352446
{pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2436
-#line 2461 "pikchr.c"
2447
+#line 2472 "pikchr.c"
24372448
break;
24382449
case 18: /* prsep ::= COMMA */
24392450
#line 550 "pikchr.y"
24402451
{pik_append(p, " ", 1);}
2441
-#line 2466 "pikchr.c"
2452
+#line 2477 "pikchr.c"
24422453
break;
24432454
case 19: /* unnamed_element ::= basetype attribute_list */
24442455
#line 553 "pikchr.y"
24452456
{yylhsminor.yy226 = yymsp[-1].minor.yy226; pik_after_adding_attributes(p,yylhsminor.yy226);}
2446
-#line 2471 "pikchr.c"
2457
+#line 2482 "pikchr.c"
24472458
yymsp[-1].minor.yy226 = yylhsminor.yy226;
24482459
break;
24492460
case 20: /* basetype ::= CLASSNAME */
24502461
#line 555 "pikchr.y"
24512462
{yylhsminor.yy226 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2452
-#line 2477 "pikchr.c"
2463
+#line 2488 "pikchr.c"
24532464
yymsp[0].minor.yy226 = yylhsminor.yy226;
24542465
break;
24552466
case 21: /* basetype ::= STRING textposition */
24562467
#line 557 "pikchr.y"
24572468
{yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy116; yylhsminor.yy226 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2458
-#line 2483 "pikchr.c"
2469
+#line 2494 "pikchr.c"
24592470
yymsp[-1].minor.yy226 = yylhsminor.yy226;
24602471
break;
24612472
case 22: /* basetype ::= LB savelist element_list RB */
24622473
#line 559 "pikchr.y"
24632474
{ p->list = yymsp[-2].minor.yy56; yymsp[-3].minor.yy226 = pik_elem_new(p,0,0,yymsp[-1].minor.yy56); if(yymsp[-3].minor.yy226) yymsp[-3].minor.yy226->errTok = yymsp[0].minor.yy0; }
2464
-#line 2489 "pikchr.c"
2475
+#line 2500 "pikchr.c"
24652476
break;
24662477
case 23: /* savelist ::= */
24672478
#line 564 "pikchr.y"
24682479
{yymsp[1].minor.yy56 = p->list; p->list = 0;}
2469
-#line 2494 "pikchr.c"
2480
+#line 2505 "pikchr.c"
24702481
break;
24712482
case 24: /* relexpr ::= expr */
24722483
#line 571 "pikchr.y"
24732484
{yylhsminor.yy164.rAbs = yymsp[0].minor.yy257; yylhsminor.yy164.rRel = 0;}
2474
-#line 2499 "pikchr.c"
2485
+#line 2510 "pikchr.c"
24752486
yymsp[0].minor.yy164 = yylhsminor.yy164;
24762487
break;
24772488
case 25: /* relexpr ::= expr PERCENT */
24782489
#line 572 "pikchr.y"
24792490
{yylhsminor.yy164.rAbs = 0; yylhsminor.yy164.rRel = yymsp[-1].minor.yy257/100;}
2480
-#line 2505 "pikchr.c"
2491
+#line 2516 "pikchr.c"
24812492
yymsp[-1].minor.yy164 = yylhsminor.yy164;
24822493
break;
24832494
case 26: /* optrelexpr ::= */
24842495
#line 574 "pikchr.y"
24852496
{yymsp[1].minor.yy164.rAbs = 0; yymsp[1].minor.yy164.rRel = 1.0;}
2486
-#line 2511 "pikchr.c"
2497
+#line 2522 "pikchr.c"
24872498
break;
24882499
case 27: /* attribute_list ::= relexpr alist */
24892500
#line 576 "pikchr.y"
24902501
{pik_add_direction(p,0,&yymsp[-1].minor.yy164);}
2491
-#line 2516 "pikchr.c"
2502
+#line 2527 "pikchr.c"
24922503
break;
24932504
case 28: /* attribute ::= numproperty relexpr */
24942505
#line 580 "pikchr.y"
24952506
{ pik_set_numprop(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy164); }
2496
-#line 2521 "pikchr.c"
2507
+#line 2532 "pikchr.c"
24972508
break;
24982509
case 29: /* attribute ::= dashproperty expr */
24992510
#line 581 "pikchr.y"
25002511
{ pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy257); }
2501
-#line 2526 "pikchr.c"
2512
+#line 2537 "pikchr.c"
25022513
break;
25032514
case 30: /* attribute ::= dashproperty */
25042515
#line 582 "pikchr.y"
25052516
{ pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2506
-#line 2531 "pikchr.c"
2517
+#line 2542 "pikchr.c"
25072518
break;
25082519
case 31: /* attribute ::= colorproperty rvalue */
25092520
#line 583 "pikchr.y"
25102521
{ pik_set_clrprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy257); }
2511
-#line 2536 "pikchr.c"
2522
+#line 2547 "pikchr.c"
25122523
break;
25132524
case 32: /* attribute ::= go direction optrelexpr */
25142525
#line 584 "pikchr.y"
25152526
{ pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy164);}
2516
-#line 2541 "pikchr.c"
2527
+#line 2552 "pikchr.c"
25172528
break;
25182529
case 33: /* attribute ::= go direction even position */
25192530
#line 585 "pikchr.y"
25202531
{pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy175);}
2521
-#line 2546 "pikchr.c"
2532
+#line 2557 "pikchr.c"
25222533
break;
25232534
case 34: /* attribute ::= CLOSE */
25242535
#line 586 "pikchr.y"
25252536
{ pik_close_path(p,&yymsp[0].minor.yy0); }
2526
-#line 2551 "pikchr.c"
2537
+#line 2562 "pikchr.c"
25272538
break;
25282539
case 35: /* attribute ::= CHOP */
25292540
#line 587 "pikchr.y"
25302541
{ p->cur->bChop = 1; }
2531
-#line 2556 "pikchr.c"
2542
+#line 2567 "pikchr.c"
25322543
break;
25332544
case 36: /* attribute ::= FROM position */
25342545
#line 588 "pikchr.y"
25352546
{ pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy175); }
2536
-#line 2561 "pikchr.c"
2547
+#line 2572 "pikchr.c"
25372548
break;
25382549
case 37: /* attribute ::= TO position */
25392550
#line 589 "pikchr.y"
25402551
{ pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy175); }
2541
-#line 2566 "pikchr.c"
2552
+#line 2577 "pikchr.c"
25422553
break;
25432554
case 38: /* attribute ::= THEN */
25442555
#line 590 "pikchr.y"
25452556
{ pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2546
-#line 2571 "pikchr.c"
2557
+#line 2582 "pikchr.c"
25472558
break;
25482559
case 39: /* attribute ::= THEN optrelexpr HEADING expr */
25492560
case 41: /* attribute ::= GO optrelexpr HEADING expr */ yytestcase(yyruleno==41);
25502561
#line 592 "pikchr.y"
25512562
{pik_move_hdg(p,&yymsp[-2].minor.yy164,&yymsp[-1].minor.yy0,yymsp[0].minor.yy257,0,&yymsp[-3].minor.yy0);}
2552
-#line 2577 "pikchr.c"
2563
+#line 2588 "pikchr.c"
25532564
break;
25542565
case 40: /* attribute ::= THEN optrelexpr EDGEPT */
25552566
case 42: /* attribute ::= GO optrelexpr EDGEPT */ yytestcase(yyruleno==42);
25562567
#line 593 "pikchr.y"
25572568
{pik_move_hdg(p,&yymsp[-1].minor.yy164,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);}
2558
-#line 2583 "pikchr.c"
2569
+#line 2594 "pikchr.c"
25592570
break;
25602571
case 43: /* attribute ::= AT position */
25612572
#line 598 "pikchr.y"
25622573
{ pik_set_at(p,0,&yymsp[0].minor.yy175,&yymsp[-1].minor.yy0); }
2563
-#line 2588 "pikchr.c"
2574
+#line 2599 "pikchr.c"
25642575
break;
25652576
case 44: /* attribute ::= SAME */
25662577
#line 600 "pikchr.y"
25672578
{pik_same(p,0,&yymsp[0].minor.yy0);}
2568
-#line 2593 "pikchr.c"
2579
+#line 2604 "pikchr.c"
25692580
break;
25702581
case 45: /* attribute ::= SAME AS object */
25712582
#line 601 "pikchr.y"
25722583
{pik_same(p,yymsp[0].minor.yy226,&yymsp[-2].minor.yy0);}
2573
-#line 2598 "pikchr.c"
2584
+#line 2609 "pikchr.c"
25742585
break;
25752586
case 46: /* attribute ::= STRING textposition */
25762587
#line 602 "pikchr.y"
25772588
{pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy116);}
2578
-#line 2603 "pikchr.c"
2589
+#line 2614 "pikchr.c"
25792590
break;
25802591
case 47: /* attribute ::= FIT */
25812592
#line 603 "pikchr.y"
25822593
{pik_size_to_fit(p,&yymsp[0].minor.yy0); }
2583
-#line 2608 "pikchr.c"
2594
+#line 2619 "pikchr.c"
25842595
break;
25852596
case 48: /* attribute ::= BEHIND object */
25862597
#line 604 "pikchr.y"
25872598
{pik_behind(p,yymsp[0].minor.yy226);}
2588
-#line 2613 "pikchr.c"
2599
+#line 2624 "pikchr.c"
25892600
break;
25902601
case 49: /* withclause ::= DOT_E edge AT position */
25912602
case 50: /* withclause ::= edge AT position */ yytestcase(yyruleno==50);
25922603
#line 612 "pikchr.y"
25932604
{ pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy175,&yymsp[-1].minor.yy0); }
2594
-#line 2619 "pikchr.c"
2605
+#line 2630 "pikchr.c"
25952606
break;
25962607
case 51: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
25972608
#line 616 "pikchr.y"
25982609
{yylhsminor.yy0 = yymsp[0].minor.yy0;}
2599
-#line 2624 "pikchr.c"
2610
+#line 2635 "pikchr.c"
26002611
yymsp[0].minor.yy0 = yylhsminor.yy0;
26012612
break;
26022613
case 52: /* boolproperty ::= CW */
26032614
#line 627 "pikchr.y"
26042615
{p->cur->cw = 1;}
2605
-#line 2630 "pikchr.c"
2616
+#line 2641 "pikchr.c"
26062617
break;
26072618
case 53: /* boolproperty ::= CCW */
26082619
#line 628 "pikchr.y"
26092620
{p->cur->cw = 0;}
2610
-#line 2635 "pikchr.c"
2621
+#line 2646 "pikchr.c"
26112622
break;
26122623
case 54: /* boolproperty ::= LARROW */
26132624
#line 629 "pikchr.y"
26142625
{p->cur->larrow=1; p->cur->rarrow=0; }
2615
-#line 2640 "pikchr.c"
2626
+#line 2651 "pikchr.c"
26162627
break;
26172628
case 55: /* boolproperty ::= RARROW */
26182629
#line 630 "pikchr.y"
26192630
{p->cur->larrow=0; p->cur->rarrow=1; }
2620
-#line 2645 "pikchr.c"
2631
+#line 2656 "pikchr.c"
26212632
break;
26222633
case 56: /* boolproperty ::= LRARROW */
26232634
#line 631 "pikchr.y"
26242635
{p->cur->larrow=1; p->cur->rarrow=1; }
2625
-#line 2650 "pikchr.c"
2636
+#line 2661 "pikchr.c"
26262637
break;
26272638
case 57: /* boolproperty ::= INVIS */
26282639
#line 632 "pikchr.y"
26292640
{p->cur->sw = 0.0;}
2630
-#line 2655 "pikchr.c"
2641
+#line 2666 "pikchr.c"
26312642
break;
26322643
case 58: /* boolproperty ::= THICK */
26332644
#line 633 "pikchr.y"
26342645
{p->cur->sw *= 1.5;}
2635
-#line 2660 "pikchr.c"
2646
+#line 2671 "pikchr.c"
26362647
break;
26372648
case 59: /* boolproperty ::= THIN */
26382649
#line 634 "pikchr.y"
26392650
{p->cur->sw *= 0.67;}
2640
-#line 2665 "pikchr.c"
2651
+#line 2676 "pikchr.c"
26412652
break;
26422653
case 60: /* textposition ::= */
26432654
#line 636 "pikchr.y"
26442655
{yymsp[1].minor.yy116 = 0;}
2645
-#line 2670 "pikchr.c"
2656
+#line 2681 "pikchr.c"
26462657
break;
26472658
case 61: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
26482659
#line 639 "pikchr.y"
26492660
{yylhsminor.yy116 = pik_text_position(yymsp[-1].minor.yy116,&yymsp[0].minor.yy0);}
2650
-#line 2675 "pikchr.c"
2661
+#line 2686 "pikchr.c"
26512662
yymsp[-1].minor.yy116 = yylhsminor.yy116;
26522663
break;
26532664
case 62: /* position ::= expr COMMA expr */
26542665
#line 642 "pikchr.y"
26552666
{yylhsminor.yy175.x=yymsp[-2].minor.yy257; yylhsminor.yy175.y=yymsp[0].minor.yy257;}
2656
-#line 2681 "pikchr.c"
2667
+#line 2692 "pikchr.c"
26572668
yymsp[-2].minor.yy175 = yylhsminor.yy175;
26582669
break;
26592670
case 63: /* position ::= place PLUS expr COMMA expr */
26602671
#line 644 "pikchr.y"
26612672
{yylhsminor.yy175.x=yymsp[-4].minor.yy175.x+yymsp[-2].minor.yy257; yylhsminor.yy175.y=yymsp[-4].minor.yy175.y+yymsp[0].minor.yy257;}
2662
-#line 2687 "pikchr.c"
2673
+#line 2698 "pikchr.c"
26632674
yymsp[-4].minor.yy175 = yylhsminor.yy175;
26642675
break;
26652676
case 64: /* position ::= place MINUS expr COMMA expr */
26662677
#line 645 "pikchr.y"
26672678
{yylhsminor.yy175.x=yymsp[-4].minor.yy175.x-yymsp[-2].minor.yy257; yylhsminor.yy175.y=yymsp[-4].minor.yy175.y-yymsp[0].minor.yy257;}
2668
-#line 2693 "pikchr.c"
2679
+#line 2704 "pikchr.c"
26692680
yymsp[-4].minor.yy175 = yylhsminor.yy175;
26702681
break;
26712682
case 65: /* position ::= place PLUS LP expr COMMA expr RP */
26722683
#line 647 "pikchr.y"
26732684
{yylhsminor.yy175.x=yymsp[-6].minor.yy175.x+yymsp[-3].minor.yy257; yylhsminor.yy175.y=yymsp[-6].minor.yy175.y+yymsp[-1].minor.yy257;}
2674
-#line 2699 "pikchr.c"
2685
+#line 2710 "pikchr.c"
26752686
yymsp[-6].minor.yy175 = yylhsminor.yy175;
26762687
break;
26772688
case 66: /* position ::= place MINUS LP expr COMMA expr RP */
26782689
#line 649 "pikchr.y"
26792690
{yylhsminor.yy175.x=yymsp[-6].minor.yy175.x-yymsp[-3].minor.yy257; yylhsminor.yy175.y=yymsp[-6].minor.yy175.y-yymsp[-1].minor.yy257;}
2680
-#line 2705 "pikchr.c"
2691
+#line 2716 "pikchr.c"
26812692
yymsp[-6].minor.yy175 = yylhsminor.yy175;
26822693
break;
26832694
case 67: /* position ::= LP position COMMA position RP */
26842695
#line 650 "pikchr.y"
26852696
{yymsp[-4].minor.yy175.x=yymsp[-3].minor.yy175.x; yymsp[-4].minor.yy175.y=yymsp[-1].minor.yy175.y;}
2686
-#line 2711 "pikchr.c"
2697
+#line 2722 "pikchr.c"
26872698
break;
26882699
case 68: /* position ::= LP position RP */
26892700
#line 651 "pikchr.y"
26902701
{yymsp[-2].minor.yy175=yymsp[-1].minor.yy175;}
2691
-#line 2716 "pikchr.c"
2702
+#line 2727 "pikchr.c"
26922703
break;
26932704
case 69: /* position ::= expr between position AND position */
26942705
#line 653 "pikchr.y"
26952706
{yylhsminor.yy175 = pik_position_between(yymsp[-4].minor.yy257,yymsp[-2].minor.yy175,yymsp[0].minor.yy175);}
2696
-#line 2721 "pikchr.c"
2707
+#line 2732 "pikchr.c"
26972708
yymsp[-4].minor.yy175 = yylhsminor.yy175;
26982709
break;
26992710
case 70: /* position ::= expr LT position COMMA position GT */
27002711
#line 655 "pikchr.y"
27012712
{yylhsminor.yy175 = pik_position_between(yymsp[-5].minor.yy257,yymsp[-3].minor.yy175,yymsp[-1].minor.yy175);}
2702
-#line 2727 "pikchr.c"
2713
+#line 2738 "pikchr.c"
27032714
yymsp[-5].minor.yy175 = yylhsminor.yy175;
27042715
break;
27052716
case 71: /* position ::= expr ABOVE position */
27062717
#line 656 "pikchr.y"
27072718
{yylhsminor.yy175=yymsp[0].minor.yy175; yylhsminor.yy175.y += yymsp[-2].minor.yy257;}
2708
-#line 2733 "pikchr.c"
2719
+#line 2744 "pikchr.c"
27092720
yymsp[-2].minor.yy175 = yylhsminor.yy175;
27102721
break;
27112722
case 72: /* position ::= expr BELOW position */
27122723
#line 657 "pikchr.y"
27132724
{yylhsminor.yy175=yymsp[0].minor.yy175; yylhsminor.yy175.y -= yymsp[-2].minor.yy257;}
2714
-#line 2739 "pikchr.c"
2725
+#line 2750 "pikchr.c"
27152726
yymsp[-2].minor.yy175 = yylhsminor.yy175;
27162727
break;
27172728
case 73: /* position ::= expr LEFT OF position */
27182729
#line 658 "pikchr.y"
27192730
{yylhsminor.yy175=yymsp[0].minor.yy175; yylhsminor.yy175.x -= yymsp[-3].minor.yy257;}
2720
-#line 2745 "pikchr.c"
2731
+#line 2756 "pikchr.c"
27212732
yymsp[-3].minor.yy175 = yylhsminor.yy175;
27222733
break;
27232734
case 74: /* position ::= expr RIGHT OF position */
27242735
#line 659 "pikchr.y"
27252736
{yylhsminor.yy175=yymsp[0].minor.yy175; yylhsminor.yy175.x += yymsp[-3].minor.yy257;}
2726
-#line 2751 "pikchr.c"
2737
+#line 2762 "pikchr.c"
27272738
yymsp[-3].minor.yy175 = yylhsminor.yy175;
27282739
break;
27292740
case 75: /* position ::= expr ON HEADING EDGEPT OF position */
27302741
#line 661 "pikchr.y"
27312742
{yylhsminor.yy175 = pik_position_at_hdg(yymsp[-5].minor.yy257,&yymsp[-2].minor.yy0,yymsp[0].minor.yy175);}
2732
-#line 2757 "pikchr.c"
2743
+#line 2768 "pikchr.c"
27332744
yymsp[-5].minor.yy175 = yylhsminor.yy175;
27342745
break;
27352746
case 76: /* position ::= expr HEADING EDGEPT OF position */
27362747
#line 663 "pikchr.y"
27372748
{yylhsminor.yy175 = pik_position_at_hdg(yymsp[-4].minor.yy257,&yymsp[-2].minor.yy0,yymsp[0].minor.yy175);}
2738
-#line 2763 "pikchr.c"
2749
+#line 2774 "pikchr.c"
27392750
yymsp[-4].minor.yy175 = yylhsminor.yy175;
27402751
break;
27412752
case 77: /* position ::= expr EDGEPT OF position */
27422753
#line 665 "pikchr.y"
27432754
{yylhsminor.yy175 = pik_position_at_hdg(yymsp[-3].minor.yy257,&yymsp[-2].minor.yy0,yymsp[0].minor.yy175);}
2744
-#line 2769 "pikchr.c"
2755
+#line 2780 "pikchr.c"
27452756
yymsp[-3].minor.yy175 = yylhsminor.yy175;
27462757
break;
27472758
case 78: /* position ::= expr ON HEADING expr FROM position */
27482759
#line 667 "pikchr.y"
27492760
{yylhsminor.yy175 = pik_position_at_angle(yymsp[-5].minor.yy257,yymsp[-2].minor.yy257,yymsp[0].minor.yy175);}
2750
-#line 2775 "pikchr.c"
2761
+#line 2786 "pikchr.c"
27512762
yymsp[-5].minor.yy175 = yylhsminor.yy175;
27522763
break;
27532764
case 79: /* position ::= expr HEADING expr FROM position */
27542765
#line 669 "pikchr.y"
27552766
{yylhsminor.yy175 = pik_position_at_angle(yymsp[-4].minor.yy257,yymsp[-2].minor.yy257,yymsp[0].minor.yy175);}
2756
-#line 2781 "pikchr.c"
2767
+#line 2792 "pikchr.c"
27572768
yymsp[-4].minor.yy175 = yylhsminor.yy175;
27582769
break;
27592770
case 80: /* place ::= edge OF object */
27602771
#line 681 "pikchr.y"
27612772
{yylhsminor.yy175 = pik_place_of_elem(p,yymsp[0].minor.yy226,&yymsp[-2].minor.yy0);}
2762
-#line 2787 "pikchr.c"
2773
+#line 2798 "pikchr.c"
27632774
yymsp[-2].minor.yy175 = yylhsminor.yy175;
27642775
break;
27652776
case 81: /* place2 ::= object */
27662777
#line 682 "pikchr.y"
27672778
{yylhsminor.yy175 = pik_place_of_elem(p,yymsp[0].minor.yy226,0);}
2768
-#line 2793 "pikchr.c"
2779
+#line 2804 "pikchr.c"
27692780
yymsp[0].minor.yy175 = yylhsminor.yy175;
27702781
break;
27712782
case 82: /* place2 ::= object DOT_E edge */
27722783
#line 683 "pikchr.y"
27732784
{yylhsminor.yy175 = pik_place_of_elem(p,yymsp[-2].minor.yy226,&yymsp[0].minor.yy0);}
2774
-#line 2799 "pikchr.c"
2785
+#line 2810 "pikchr.c"
27752786
yymsp[-2].minor.yy175 = yylhsminor.yy175;
27762787
break;
27772788
case 83: /* place2 ::= NTH VERTEX OF object */
27782789
#line 684 "pikchr.y"
27792790
{yylhsminor.yy175 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy226);}
2780
-#line 2805 "pikchr.c"
2791
+#line 2816 "pikchr.c"
27812792
yymsp[-3].minor.yy175 = yylhsminor.yy175;
27822793
break;
27832794
case 84: /* object ::= nth */
27842795
#line 696 "pikchr.y"
27852796
{yylhsminor.yy226 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2786
-#line 2811 "pikchr.c"
2797
+#line 2822 "pikchr.c"
27872798
yymsp[0].minor.yy226 = yylhsminor.yy226;
27882799
break;
27892800
case 85: /* object ::= nth OF|IN object */
27902801
#line 697 "pikchr.y"
27912802
{yylhsminor.yy226 = pik_find_nth(p,yymsp[0].minor.yy226,&yymsp[-2].minor.yy0);}
2792
-#line 2817 "pikchr.c"
2803
+#line 2828 "pikchr.c"
27932804
yymsp[-2].minor.yy226 = yylhsminor.yy226;
27942805
break;
27952806
case 86: /* objectname ::= PLACENAME */
27962807
#line 699 "pikchr.y"
27972808
{yylhsminor.yy226 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2798
-#line 2823 "pikchr.c"
2809
+#line 2834 "pikchr.c"
27992810
yymsp[0].minor.yy226 = yylhsminor.yy226;
28002811
break;
28012812
case 87: /* objectname ::= objectname DOT_U PLACENAME */
28022813
#line 701 "pikchr.y"
28032814
{yylhsminor.yy226 = pik_find_byname(p,yymsp[-2].minor.yy226,&yymsp[0].minor.yy0);}
2804
-#line 2829 "pikchr.c"
2815
+#line 2840 "pikchr.c"
28052816
yymsp[-2].minor.yy226 = yylhsminor.yy226;
28062817
break;
28072818
case 88: /* nth ::= NTH CLASSNAME */
28082819
#line 703 "pikchr.y"
28092820
{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2810
-#line 2835 "pikchr.c"
2821
+#line 2846 "pikchr.c"
28112822
yymsp[-1].minor.yy0 = yylhsminor.yy0;
28122823
break;
28132824
case 89: /* nth ::= NTH LAST CLASSNAME */
28142825
#line 704 "pikchr.y"
28152826
{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2816
-#line 2841 "pikchr.c"
2827
+#line 2852 "pikchr.c"
28172828
yymsp[-2].minor.yy0 = yylhsminor.yy0;
28182829
break;
28192830
case 90: /* nth ::= LAST CLASSNAME */
28202831
#line 705 "pikchr.y"
28212832
{yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2822
-#line 2847 "pikchr.c"
2833
+#line 2858 "pikchr.c"
28232834
break;
28242835
case 91: /* nth ::= LAST */
28252836
#line 706 "pikchr.y"
28262837
{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2827
-#line 2852 "pikchr.c"
2838
+#line 2863 "pikchr.c"
28282839
yymsp[0].minor.yy0 = yylhsminor.yy0;
28292840
break;
28302841
case 92: /* nth ::= NTH LB RB */
28312842
#line 707 "pikchr.y"
28322843
{yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2833
-#line 2858 "pikchr.c"
2844
+#line 2869 "pikchr.c"
28342845
yymsp[-2].minor.yy0 = yylhsminor.yy0;
28352846
break;
28362847
case 93: /* nth ::= NTH LAST LB RB */
28372848
#line 708 "pikchr.y"
28382849
{yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2839
-#line 2864 "pikchr.c"
2850
+#line 2875 "pikchr.c"
28402851
yymsp[-3].minor.yy0 = yylhsminor.yy0;
28412852
break;
28422853
case 94: /* nth ::= LAST LB RB */
28432854
#line 709 "pikchr.y"
28442855
{yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2845
-#line 2870 "pikchr.c"
2856
+#line 2881 "pikchr.c"
28462857
break;
28472858
case 95: /* expr ::= expr PLUS expr */
28482859
#line 711 "pikchr.y"
28492860
{yylhsminor.yy257=yymsp[-2].minor.yy257+yymsp[0].minor.yy257;}
2850
-#line 2875 "pikchr.c"
2861
+#line 2886 "pikchr.c"
28512862
yymsp[-2].minor.yy257 = yylhsminor.yy257;
28522863
break;
28532864
case 96: /* expr ::= expr MINUS expr */
28542865
#line 712 "pikchr.y"
28552866
{yylhsminor.yy257=yymsp[-2].minor.yy257-yymsp[0].minor.yy257;}
2856
-#line 2881 "pikchr.c"
2867
+#line 2892 "pikchr.c"
28572868
yymsp[-2].minor.yy257 = yylhsminor.yy257;
28582869
break;
28592870
case 97: /* expr ::= expr STAR expr */
28602871
#line 713 "pikchr.y"
28612872
{yylhsminor.yy257=yymsp[-2].minor.yy257*yymsp[0].minor.yy257;}
2862
-#line 2887 "pikchr.c"
2873
+#line 2898 "pikchr.c"
28632874
yymsp[-2].minor.yy257 = yylhsminor.yy257;
28642875
break;
28652876
case 98: /* expr ::= expr SLASH expr */
28662877
#line 714 "pikchr.y"
28672878
{
28682879
if( yymsp[0].minor.yy257==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy257 = 0.0; }
28692880
else{ yylhsminor.yy257 = yymsp[-2].minor.yy257/yymsp[0].minor.yy257; }
28702881
}
2871
-#line 2896 "pikchr.c"
2882
+#line 2907 "pikchr.c"
28722883
yymsp[-2].minor.yy257 = yylhsminor.yy257;
28732884
break;
28742885
case 99: /* expr ::= MINUS expr */
28752886
#line 718 "pikchr.y"
28762887
{yymsp[-1].minor.yy257=-yymsp[0].minor.yy257;}
2877
-#line 2902 "pikchr.c"
2888
+#line 2913 "pikchr.c"
28782889
break;
28792890
case 100: /* expr ::= PLUS expr */
28802891
#line 719 "pikchr.y"
28812892
{yymsp[-1].minor.yy257=yymsp[0].minor.yy257;}
2882
-#line 2907 "pikchr.c"
2893
+#line 2918 "pikchr.c"
28832894
break;
28842895
case 101: /* expr ::= LP expr RP */
28852896
#line 720 "pikchr.y"
28862897
{yymsp[-2].minor.yy257=yymsp[-1].minor.yy257;}
2887
-#line 2912 "pikchr.c"
2888
- break;
2889
- case 102: /* expr ::= NUMBER */
2890
-#line 721 "pikchr.y"
2891
-{yylhsminor.yy257=pik_atof(&yymsp[0].minor.yy0);}
2892
-#line 2917 "pikchr.c"
2893
- yymsp[0].minor.yy257 = yylhsminor.yy257;
2894
- break;
2895
- case 103: /* expr ::= ID */
2896
-#line 722 "pikchr.y"
2897
-{yylhsminor.yy257=pik_get_var(p,&yymsp[0].minor.yy0);}
2898
-#line 2923 "pikchr.c"
2899
- yymsp[0].minor.yy257 = yylhsminor.yy257;
2900
- break;
2901
- case 104: /* expr ::= FUNC1 LP expr RP */
2902
-#line 723 "pikchr.y"
2903
-{yylhsminor.yy257 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy257,0.0);}
2904
-#line 2929 "pikchr.c"
2905
- yymsp[-3].minor.yy257 = yylhsminor.yy257;
2906
- break;
2907
- case 105: /* expr ::= FUNC2 LP expr COMMA expr RP */
2908
-#line 724 "pikchr.y"
2909
-{yylhsminor.yy257 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy257,yymsp[-1].minor.yy257);}
2910
-#line 2935 "pikchr.c"
2898
+#line 2923 "pikchr.c"
2899
+ break;
2900
+ case 102: /* expr ::= LP FILL|COLOR|THICKNESS RP */
2901
+#line 721 "pikchr.y"
2902
+{yymsp[-2].minor.yy257=pik_get_var(p,&yymsp[-1].minor.yy0);}
2903
+#line 2928 "pikchr.c"
2904
+ break;
2905
+ case 103: /* expr ::= NUMBER */
2906
+#line 722 "pikchr.y"
2907
+{yylhsminor.yy257=pik_atof(&yymsp[0].minor.yy0);}
2908
+#line 2933 "pikchr.c"
2909
+ yymsp[0].minor.yy257 = yylhsminor.yy257;
2910
+ break;
2911
+ case 104: /* expr ::= ID */
2912
+#line 723 "pikchr.y"
2913
+{yylhsminor.yy257=pik_get_var(p,&yymsp[0].minor.yy0);}
2914
+#line 2939 "pikchr.c"
2915
+ yymsp[0].minor.yy257 = yylhsminor.yy257;
2916
+ break;
2917
+ case 105: /* expr ::= FUNC1 LP expr RP */
2918
+#line 724 "pikchr.y"
2919
+{yylhsminor.yy257 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy257,0.0);}
2920
+#line 2945 "pikchr.c"
2921
+ yymsp[-3].minor.yy257 = yylhsminor.yy257;
2922
+ break;
2923
+ case 106: /* expr ::= FUNC2 LP expr COMMA expr RP */
2924
+#line 725 "pikchr.y"
2925
+{yylhsminor.yy257 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy257,yymsp[-1].minor.yy257);}
2926
+#line 2951 "pikchr.c"
29112927
yymsp[-5].minor.yy257 = yylhsminor.yy257;
29122928
break;
2913
- case 106: /* expr ::= DIST LP position COMMA position RP */
2914
-#line 725 "pikchr.y"
2915
-{yymsp[-5].minor.yy257 = pik_dist(&yymsp[-3].minor.yy175,&yymsp[-1].minor.yy175);}
2916
-#line 2941 "pikchr.c"
2917
- break;
2918
- case 107: /* expr ::= place2 DOT_XY X */
2919
-#line 726 "pikchr.y"
2920
-{yylhsminor.yy257 = yymsp[-2].minor.yy175.x;}
2921
-#line 2946 "pikchr.c"
2922
- yymsp[-2].minor.yy257 = yylhsminor.yy257;
2923
- break;
2924
- case 108: /* expr ::= place2 DOT_XY Y */
2925
-#line 727 "pikchr.y"
2926
-{yylhsminor.yy257 = yymsp[-2].minor.yy175.y;}
2927
-#line 2952 "pikchr.c"
2928
- yymsp[-2].minor.yy257 = yylhsminor.yy257;
2929
- break;
2930
- case 109: /* expr ::= object DOT_L numproperty */
2931
- case 110: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==110);
2932
- case 111: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==111);
2933
-#line 728 "pikchr.y"
2934
-{yylhsminor.yy257=pik_property_of(yymsp[-2].minor.yy226,&yymsp[0].minor.yy0);}
2935
-#line 2960 "pikchr.c"
2929
+ case 107: /* expr ::= DIST LP position COMMA position RP */
2930
+#line 726 "pikchr.y"
2931
+{yymsp[-5].minor.yy257 = pik_dist(&yymsp[-3].minor.yy175,&yymsp[-1].minor.yy175);}
2932
+#line 2957 "pikchr.c"
2933
+ break;
2934
+ case 108: /* expr ::= place2 DOT_XY X */
2935
+#line 727 "pikchr.y"
2936
+{yylhsminor.yy257 = yymsp[-2].minor.yy175.x;}
2937
+#line 2962 "pikchr.c"
2938
+ yymsp[-2].minor.yy257 = yylhsminor.yy257;
2939
+ break;
2940
+ case 109: /* expr ::= place2 DOT_XY Y */
2941
+#line 728 "pikchr.y"
2942
+{yylhsminor.yy257 = yymsp[-2].minor.yy175.y;}
2943
+#line 2968 "pikchr.c"
2944
+ yymsp[-2].minor.yy257 = yylhsminor.yy257;
2945
+ break;
2946
+ case 110: /* expr ::= object DOT_L numproperty */
2947
+ case 111: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==111);
2948
+ case 112: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==112);
2949
+#line 729 "pikchr.y"
2950
+{yylhsminor.yy257=pik_property_of(yymsp[-2].minor.yy226,&yymsp[0].minor.yy0);}
2951
+#line 2976 "pikchr.c"
29362952
yymsp[-2].minor.yy257 = yylhsminor.yy257;
29372953
break;
29382954
default:
2939
- /* (112) lvalue ::= ID */ yytestcase(yyruleno==112);
2940
- /* (113) lvalue ::= FILL */ yytestcase(yyruleno==113);
2941
- /* (114) lvalue ::= COLOR */ yytestcase(yyruleno==114);
2942
- /* (115) lvalue ::= THICKNESS */ yytestcase(yyruleno==115);
2943
- /* (116) rvalue ::= expr */ yytestcase(yyruleno==116);
2944
- /* (117) print ::= PRINT */ yytestcase(yyruleno==117);
2945
- /* (118) prlist ::= pritem (OPTIMIZED OUT) */ assert(yyruleno!=118);
2946
- /* (119) prlist ::= prlist prsep pritem */ yytestcase(yyruleno==119);
2947
- /* (120) direction ::= UP */ yytestcase(yyruleno==120);
2948
- /* (121) direction ::= DOWN */ yytestcase(yyruleno==121);
2949
- /* (122) direction ::= LEFT */ yytestcase(yyruleno==122);
2950
- /* (123) direction ::= RIGHT */ yytestcase(yyruleno==123);
2951
- /* (124) optrelexpr ::= relexpr (OPTIMIZED OUT) */ assert(yyruleno!=124);
2952
- /* (125) attribute_list ::= alist */ yytestcase(yyruleno==125);
2953
- /* (126) alist ::= */ yytestcase(yyruleno==126);
2954
- /* (127) alist ::= alist attribute */ yytestcase(yyruleno==127);
2955
- /* (128) attribute ::= boolproperty (OPTIMIZED OUT) */ assert(yyruleno!=128);
2956
- /* (129) attribute ::= WITH withclause */ yytestcase(yyruleno==129);
2957
- /* (130) go ::= GO */ yytestcase(yyruleno==130);
2958
- /* (131) go ::= */ yytestcase(yyruleno==131);
2959
- /* (132) even ::= UNTIL EVEN WITH */ yytestcase(yyruleno==132);
2960
- /* (133) even ::= EVEN WITH */ yytestcase(yyruleno==133);
2961
- /* (134) dashproperty ::= DOTTED */ yytestcase(yyruleno==134);
2962
- /* (135) dashproperty ::= DASHED */ yytestcase(yyruleno==135);
2963
- /* (136) colorproperty ::= FILL */ yytestcase(yyruleno==136);
2964
- /* (137) colorproperty ::= COLOR */ yytestcase(yyruleno==137);
2965
- /* (138) position ::= place */ yytestcase(yyruleno==138);
2966
- /* (139) between ::= WAY BETWEEN */ yytestcase(yyruleno==139);
2967
- /* (140) between ::= BETWEEN */ yytestcase(yyruleno==140);
2968
- /* (141) between ::= OF THE WAY BETWEEN */ yytestcase(yyruleno==141);
2969
- /* (142) place ::= place2 */ yytestcase(yyruleno==142);
2970
- /* (143) edge ::= CENTER */ yytestcase(yyruleno==143);
2971
- /* (144) edge ::= EDGEPT */ yytestcase(yyruleno==144);
2972
- /* (145) edge ::= TOP */ yytestcase(yyruleno==145);
2973
- /* (146) edge ::= BOTTOM */ yytestcase(yyruleno==146);
2974
- /* (147) edge ::= START */ yytestcase(yyruleno==147);
2975
- /* (148) edge ::= END */ yytestcase(yyruleno==148);
2976
- /* (149) edge ::= RIGHT */ yytestcase(yyruleno==149);
2977
- /* (150) edge ::= LEFT */ yytestcase(yyruleno==150);
2978
- /* (151) object ::= objectname */ yytestcase(yyruleno==151);
2955
+ /* (113) lvalue ::= ID */ yytestcase(yyruleno==113);
2956
+ /* (114) lvalue ::= FILL */ yytestcase(yyruleno==114);
2957
+ /* (115) lvalue ::= COLOR */ yytestcase(yyruleno==115);
2958
+ /* (116) lvalue ::= THICKNESS */ yytestcase(yyruleno==116);
2959
+ /* (117) rvalue ::= expr */ yytestcase(yyruleno==117);
2960
+ /* (118) print ::= PRINT */ yytestcase(yyruleno==118);
2961
+ /* (119) prlist ::= pritem (OPTIMIZED OUT) */ assert(yyruleno!=119);
2962
+ /* (120) prlist ::= prlist prsep pritem */ yytestcase(yyruleno==120);
2963
+ /* (121) direction ::= UP */ yytestcase(yyruleno==121);
2964
+ /* (122) direction ::= DOWN */ yytestcase(yyruleno==122);
2965
+ /* (123) direction ::= LEFT */ yytestcase(yyruleno==123);
2966
+ /* (124) direction ::= RIGHT */ yytestcase(yyruleno==124);
2967
+ /* (125) optrelexpr ::= relexpr (OPTIMIZED OUT) */ assert(yyruleno!=125);
2968
+ /* (126) attribute_list ::= alist */ yytestcase(yyruleno==126);
2969
+ /* (127) alist ::= */ yytestcase(yyruleno==127);
2970
+ /* (128) alist ::= alist attribute */ yytestcase(yyruleno==128);
2971
+ /* (129) attribute ::= boolproperty (OPTIMIZED OUT) */ assert(yyruleno!=129);
2972
+ /* (130) attribute ::= WITH withclause */ yytestcase(yyruleno==130);
2973
+ /* (131) go ::= GO */ yytestcase(yyruleno==131);
2974
+ /* (132) go ::= */ yytestcase(yyruleno==132);
2975
+ /* (133) even ::= UNTIL EVEN WITH */ yytestcase(yyruleno==133);
2976
+ /* (134) even ::= EVEN WITH */ yytestcase(yyruleno==134);
2977
+ /* (135) dashproperty ::= DOTTED */ yytestcase(yyruleno==135);
2978
+ /* (136) dashproperty ::= DASHED */ yytestcase(yyruleno==136);
2979
+ /* (137) colorproperty ::= FILL */ yytestcase(yyruleno==137);
2980
+ /* (138) colorproperty ::= COLOR */ yytestcase(yyruleno==138);
2981
+ /* (139) position ::= place */ yytestcase(yyruleno==139);
2982
+ /* (140) between ::= WAY BETWEEN */ yytestcase(yyruleno==140);
2983
+ /* (141) between ::= BETWEEN */ yytestcase(yyruleno==141);
2984
+ /* (142) between ::= OF THE WAY BETWEEN */ yytestcase(yyruleno==142);
2985
+ /* (143) place ::= place2 */ yytestcase(yyruleno==143);
2986
+ /* (144) edge ::= CENTER */ yytestcase(yyruleno==144);
2987
+ /* (145) edge ::= EDGEPT */ yytestcase(yyruleno==145);
2988
+ /* (146) edge ::= TOP */ yytestcase(yyruleno==146);
2989
+ /* (147) edge ::= BOTTOM */ yytestcase(yyruleno==147);
2990
+ /* (148) edge ::= START */ yytestcase(yyruleno==148);
2991
+ /* (149) edge ::= END */ yytestcase(yyruleno==149);
2992
+ /* (150) edge ::= RIGHT */ yytestcase(yyruleno==150);
2993
+ /* (151) edge ::= LEFT */ yytestcase(yyruleno==151);
2994
+ /* (152) object ::= objectname */ yytestcase(yyruleno==152);
29792995
break;
29802996
/********** End reduce actions ************************************************/
29812997
};
29822998
assert( yyruleno<sizeof(yyRuleInfoLhs)/sizeof(yyRuleInfoLhs[0]) );
29832999
yygoto = yyRuleInfoLhs[yyruleno];
@@ -3041,11 +3057,11 @@
30413057
pik_error(p, &TOKEN, "syntax error");
30423058
}else{
30433059
pik_error(p, 0, "syntax error");
30443060
}
30453061
UNUSED_PARAMETER(yymajor);
3046
-#line 3071 "pikchr.c"
3062
+#line 3087 "pikchr.c"
30473063
/************ End %syntax_error code ******************************************/
30483064
pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
30493065
pik_parserCTX_STORE
30503066
}
30513067
@@ -3274,11 +3290,11 @@
32743290
#else
32753291
(void)iToken;
32763292
return 0;
32773293
#endif
32783294
}
3279
-#line 733 "pikchr.y"
3295
+#line 734 "pikchr.y"
32803296
32813297
32823298
32833299
/* Chart of the 140 official HTML color names with their
32843300
** corresponding RGB value.
@@ -4845,11 +4861,11 @@
48454861
}
48464862
48474863
/*
48484864
** Process an "assert( place1 == place2 )" statement. Always return NULL.
48494865
*/
4850
-static PElem *pik_place_assert(Pik *p, PPoint *e1, PToken *pEq, PPoint *e2){
4866
+static PElem *pik_position_assert(Pik *p, PPoint *e1, PToken *pEq, PPoint *e2){
48514867
char zE1[100], zE2[100], zMsg[210];
48524868
48534869
/* Convert the numbers to strings using %g for comparison. This
48544870
** limits the precision of the comparison to account for rounding error. */
48554871
snprintf(zE1, sizeof(zE1), "(%g,%g)", e1->x, e1->y); zE1[sizeof(zE1)-1] = 0;
@@ -6369,11 +6385,15 @@
63696385
63706386
pElem->ptEnter = pElem->aPath[0];
63716387
pElem->ptExit = pElem->aPath[pElem->nPath-1];
63726388
63736389
/* Compute the center of the line based on the bounding box over
6374
- ** the vertexes */
6390
+ ** the vertexes. This is a difference from PIC. In Pikchr, the
6391
+ ** center of a line is the center of its bounding box. In PIC, the
6392
+ ** center of a line is halfway between its .start and .end. For
6393
+ ** straight lines, this is the same point, but for multi-segment
6394
+ ** lines the result is usually diferent */
63756395
for(i=0; i<pElem->nPath; i++){
63766396
pik_bbox_add_xy(&pElem->bbox, pElem->aPath[i].x, pElem->aPath[i].y);
63776397
}
63786398
pElem->ptAt.x = (pElem->bbox.ne.x + pElem->bbox.sw.x)/2.0;
63796399
pElem->ptAt.y = (pElem->bbox.ne.y + pElem->bbox.sw.y)/2.0;
@@ -6384,15 +6404,13 @@
63846404
pElem->h = pElem->bbox.ne.y - pElem->bbox.sw.y;
63856405
63866406
/* If this is a polygon (if it has the "close" attribute), then
63876407
** adjust the exit point */
63886408
if( pElem->bClose ){
6389
- /* "closed" lines work like block objects */
6409
+ /* For "closed" lines, the .end is one of the .e, .s, .w, or .n
6410
+ ** points of the bounding box, as with block objects. */
63906411
pik_elem_set_exit(pElem, pElem->inDir);
6391
- }else{
6392
- /* For an open line, the "center" is half way between
6393
- ** the .start and the .end */
63946412
}
63956413
}else{
63966414
PNum w2 = pElem->w/2.0;
63976415
PNum h2 = pElem->h/2.0;
63986416
pElem->ptEnter = pElem->ptAt;
@@ -6535,11 +6553,10 @@
65356553
static void pik_render(Pik *p, PEList *pEList){
65366554
if( pEList==0 ) return;
65376555
if( p->nErr==0 ){
65386556
PNum thickness; /* Stroke width */
65396557
PNum margin; /* Extra bounding box margin */
6540
- PNum leftmargin; /* Extra bounding box area on the left */
65416558
PNum w, h; /* Drawing width and height */
65426559
PNum wArrow;
65436560
PNum pikScale; /* Value of the "scale" variable */
65446561
65456562
/* Set up rendering parameters */
@@ -6546,24 +6563,23 @@
65466563
pik_compute_layout_settings(p);
65476564
thickness = pik_value(p,"thickness",9,0);
65486565
if( thickness<=0.01 ) thickness = 0.01;
65496566
margin = pik_value(p,"margin",6,0);
65506567
margin += thickness;
6551
- leftmargin = pik_value(p,"leftmargin",10,0);
65526568
wArrow = p->wArrow*thickness;
65536569
65546570
/* Compute a bounding box over all objects so that we can know
65556571
** how big to declare the SVG canvas */
65566572
pik_bbox_init(&p->bbox);
65576573
pik_bbox_add_elist(p, pEList, wArrow);
65586574
65596575
/* Expand the bounding box slightly to account for line thickness
65606576
** and the optional "margin = EXPR" setting. */
6561
- p->bbox.ne.x += margin;
6562
- p->bbox.ne.y += margin;
6563
- p->bbox.sw.x -= margin + leftmargin;
6564
- p->bbox.sw.y -= margin;
6577
+ p->bbox.ne.x += margin + pik_value(p,"rightmargin",11,0);
6578
+ p->bbox.ne.y += margin + pik_value(p,"topmargin",9,0);
6579
+ p->bbox.sw.x -= margin + pik_value(p,"leftmargin",10,0);
6580
+ p->bbox.sw.y -= margin + pik_value(p,"bottommargin",12,0);
65656581
65666582
/* Output the SVG */
65676583
pik_append(p, "<svg",4);
65686584
if( p->zClass ){
65696585
pik_append(p, " class=\"", -1);
@@ -7131,10 +7147,11 @@
71317147
static void usage(const char *argv0){
71327148
fprintf(stderr, "usage: %s [OPTIONS] FILE ...\n", argv0);
71337149
fprintf(stderr,
71347150
"Convert Pikchr input files into SVG.\n"
71357151
"Options:\n"
7152
+ " --dont-stop Process all files even if earlier files have errors\n"
71367153
" --svg-only Omit raw SVG without the HTML wrapper\n"
71377154
);
71387155
exit(1);
71397156
}
71407157
@@ -7166,10 +7183,11 @@
71667183
** line.
71677184
*/
71687185
int main(int argc, char **argv){
71697186
int i;
71707187
int bSvgOnly = 0; /* Output SVG only. No HTML wrapper */
7188
+ int bDontStop = 0; /* Continue in spite of errors */
71717189
const char *zHtmlHdr =
71727190
"<!DOCTYPE html>\n"
71737191
"<html lang=\"en-US\">\n"
71747192
"<head>\n<title>PIKCHR Test</title>\n"
71757193
"<style>\n"
@@ -7201,10 +7219,13 @@
72017219
72027220
if( argv[i][0]=='-' ){
72037221
char *z = argv[i];
72047222
z++;
72057223
if( z[0]=='-' ) z++;
7224
+ if( strcmp(z,"dont-stop")==0 ){
7225
+ bDontStop = 1;
7226
+ }else
72067227
if( strcmp(z,"svg-only")==0 ){
72077228
if( zHtmlHdr==0 ){
72087229
fprintf(stderr, "the \"%s\" option must come first\n",argv[i]);
72097230
exit(1);
72107231
}
@@ -7234,13 +7255,12 @@
72347255
fclose(in);
72357256
zIn[sz] = 0;
72367257
zOut = pikchr(zIn, "pikchr", 0, &w, &h);
72377258
if( zOut==0 ){
72387259
fprintf(stderr, "pikchr() returns NULL. Out of memory?\n");
7239
- exit(1);
7240
- }
7241
- if( bSvgOnly ){
7260
+ if( !bDontStop ) exit(1);
7261
+ }else if( bSvgOnly ){
72427262
printf("%s\n", zOut);
72437263
}else{
72447264
if( zHtmlHdr ){
72457265
printf("%s", zHtmlHdr);
72467266
zHtmlHdr = 0;
@@ -7265,6 +7285,6 @@
72657285
}
72667286
return 0;
72677287
}
72687288
#endif /* PIKCHR_SHELL */
72697289
7270
-#line 7295 "pikchr.c"
7290
+#line 7315 "pikchr.c"
72717291
--- src/pikchr.c
+++ src/pikchr.c
@@ -443,11 +443,11 @@
443 static PPoint pik_nth_vertex(Pik *p, PToken *pNth, PToken *pErr, PElem *pElem);
444 static PToken pik_next_semantic_token(PToken *pThis);
445 static void pik_compute_layout_settings(Pik*);
446 static void pik_behind(Pik*,PElem*);
447 static PElem *pik_assert(Pik*,PNum,PToken*,PNum);
448 static PElem *pik_place_assert(Pik*,PPoint*,PToken*,PPoint*);
449 static PNum pik_dist(PPoint*,PPoint*);
450
451
452 #line 478 "pikchr.c"
453 /**************** End of %include directives **********************************/
@@ -633,21 +633,21 @@
633 #define pik_parserCTX_PARAM ,p
634 #define pik_parserCTX_FETCH Pik *p=yypParser->p;
635 #define pik_parserCTX_STORE yypParser->p=p;
636 #define YYFALLBACK 1
637 #define YYNSTATE 162
638 #define YYNRULE 152
639 #define YYNRULE_WITH_ACTION 112
640 #define YYNTOKEN 95
641 #define YY_MAX_SHIFT 161
642 #define YY_MIN_SHIFTREDUCE 282
643 #define YY_MAX_SHIFTREDUCE 433
644 #define YY_ERROR_ACTION 434
645 #define YY_ACCEPT_ACTION 435
646 #define YY_NO_ACTION 436
647 #define YY_MIN_REDUCE 437
648 #define YY_MAX_REDUCE 588
649 /************* End control #defines *******************************************/
650 #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
651
652 /* Define the yytestcase() macro to be a no-op if is not already defined
653 ** otherwise.
@@ -710,321 +710,328 @@
710 ** yy_reduce_ofst[] For each state, the offset into yy_action for
711 ** shifting non-terminals after a reduce.
712 ** yy_default[] Default action for each state.
713 **
714 *********** Begin parsing tables **********************************************/
715 #define YY_ACTTAB_COUNT (1206)
716 static const YYACTIONTYPE yy_action[] = {
717 /* 0 */ 562, 437, 23, 443, 27, 73, 128, 147, 53, 49,
718 /* 10 */ 562, 35, 444, 113, 120, 159, 119, 127, 418, 419,
719 /* 20 */ 333, 546, 80, 519, 547, 548, 562, 64, 63, 62,
720 /* 30 */ 61, 316, 317, 6, 5, 32, 148, 31, 4, 71,
721 /* 40 */ 126, 26, 329, 66, 566, 300, 48, 333, 333, 333,
722 /* 50 */ 333, 416, 417, 334, 335, 336, 337, 338, 339, 340,
723 /* 60 */ 341, 464, 64, 63, 62, 61, 121, 438, 445, 27,
724 /* 70 */ 35, 464, 69, 441, 29, 292, 485, 159, 119, 418,
725 /* 80 */ 419, 333, 30, 80, 161, 350, 304, 464, 435, 25,
726 /* 90 */ 324, 10, 316, 317, 6, 5, 32, 82, 31, 4,
727 /* 100 */ 71, 126, 83, 329, 66, 482, 159, 119, 333, 333,
728 /* 110 */ 333, 333, 416, 417, 334, 335, 336, 337, 338, 339,
729 /* 120 */ 340, 341, 385, 426, 43, 59, 60, 34, 64, 63,
730 /* 130 */ 62, 61, 75, 368, 372, 155, 22, 75, 385, 426,
731 /* 140 */ 42, 59, 60, 79, 38, 302, 78, 45, 37, 368,
732 /* 150 */ 432, 431, 22, 69, 343, 343, 343, 343, 343, 343,
733 /* 160 */ 343, 343, 343, 343, 368, 293, 432, 431, 394, 564,
734 /* 170 */ 76, 564, 64, 63, 62, 61, 307, 389, 390, 132,
735 /* 180 */ 65, 125, 425, 62, 61, 395, 396, 397, 399, 79,
736 /* 190 */ 36, 302, 78, 28, 402, 403, 404, 405, 425, 106,
737 /* 200 */ 67, 427, 428, 429, 430, 415, 322, 117, 384, 154,
738 /* 210 */ 153, 152, 517, 159, 119, 106, 130, 427, 428, 429,
739 /* 220 */ 430, 371, 157, 117, 384, 154, 153, 152, 385, 426,
740 /* 230 */ 108, 59, 60, 64, 63, 62, 61, 2, 117, 368,
741 /* 240 */ 44, 147, 58, 3, 89, 426, 383, 123, 122, 159,
742 /* 250 */ 119, 414, 46, 120, 159, 119, 432, 431, 1, 141,
743 /* 260 */ 139, 64, 63, 62, 61, 385, 463, 388, 59, 60,
744 /* 270 */ 123, 8, 432, 431, 383, 151, 368, 9, 423, 58,
745 /* 280 */ 54, 107, 402, 403, 404, 405, 146, 145, 425, 74,
746 /* 290 */ 120, 159, 119, 40, 453, 64, 63, 62, 61, 349,
747 /* 300 */ 463, 77, 77, 137, 425, 106, 421, 427, 428, 429,
748 /* 310 */ 430, 138, 151, 117, 384, 154, 153, 152, 522, 159,
749 /* 320 */ 119, 19, 18, 427, 428, 429, 430, 114, 11, 21,
750 /* 330 */ 13, 144, 140, 422, 141, 139, 64, 63, 62, 61,
751 /* 340 */ 15, 41, 106, 64, 63, 62, 61, 16, 370, 156,
752 /* 350 */ 117, 384, 154, 153, 152, 54, 418, 419, 333, 17,
753 /* 360 */ 107, 146, 145, 385, 370, 156, 59, 60, 40, 120,
754 /* 370 */ 159, 119, 12, 468, 102, 68, 352, 58, 20, 24,
755 /* 380 */ 295, 296, 297, 56, 299, 333, 333, 333, 333, 416,
756 /* 390 */ 417, 151, 64, 63, 62, 61, 19, 18, 385, 523,
757 /* 400 */ 57, 59, 60, 160, 21, 383, 144, 140, 422, 368,
758 /* 410 */ 118, 50, 58, 376, 385, 142, 374, 59, 60, 385,
759 /* 420 */ 143, 375, 59, 60, 369, 368, 118, 158, 58, 70,
760 /* 430 */ 368, 39, 385, 58, 436, 59, 60, 436, 523, 436,
761 /* 440 */ 106, 131, 129, 368, 523, 436, 58, 523, 117, 384,
762 /* 450 */ 154, 153, 152, 426, 64, 63, 62, 61, 64, 63,
763 /* 460 */ 62, 61, 87, 368, 147, 385, 436, 348, 59, 60,
764 /* 470 */ 124, 120, 159, 119, 436, 106, 102, 52, 436, 58,
765 /* 480 */ 432, 431, 436, 117, 384, 154, 153, 152, 436, 436,
766 /* 490 */ 436, 106, 436, 148, 436, 436, 106, 436, 436, 117,
767 /* 500 */ 384, 154, 153, 152, 117, 384, 154, 153, 152, 106,
768 /* 510 */ 436, 385, 425, 436, 59, 60, 436, 117, 384, 154,
769 /* 520 */ 153, 152, 368, 436, 385, 47, 436, 59, 60, 106,
770 /* 530 */ 436, 427, 428, 429, 430, 368, 436, 117, 51, 439,
771 /* 540 */ 445, 27, 106, 436, 436, 441, 436, 436, 88, 436,
772 /* 550 */ 117, 384, 154, 153, 152, 436, 161, 120, 159, 119,
773 /* 560 */ 436, 25, 436, 7, 469, 469, 520, 159, 119, 109,
774 /* 570 */ 438, 445, 27, 436, 436, 73, 441, 147, 436, 151,
775 /* 580 */ 436, 436, 487, 113, 120, 159, 119, 161, 106, 436,
776 /* 590 */ 436, 436, 25, 436, 436, 436, 117, 384, 154, 153,
777 /* 600 */ 152, 106, 64, 63, 62, 61, 148, 436, 90, 117,
778 /* 610 */ 384, 154, 153, 152, 73, 436, 147, 120, 159, 119,
779 /* 620 */ 436, 486, 113, 120, 159, 119, 436, 73, 436, 147,
780 /* 630 */ 436, 14, 436, 436, 480, 113, 120, 159, 119, 151,
781 /* 640 */ 436, 436, 73, 436, 147, 148, 436, 436, 436, 474,
782 /* 650 */ 113, 120, 159, 119, 73, 436, 147, 107, 148, 436,
783 /* 660 */ 436, 473, 113, 120, 159, 119, 120, 159, 119, 436,
784 /* 670 */ 453, 436, 436, 148, 436, 436, 436, 436, 556, 436,
785 /* 680 */ 436, 436, 73, 436, 147, 148, 436, 436, 151, 470,
786 /* 690 */ 113, 120, 159, 119, 436, 436, 73, 436, 147, 436,
787 /* 700 */ 436, 436, 436, 133, 113, 120, 159, 119, 436, 73,
788 /* 710 */ 436, 147, 436, 148, 436, 436, 506, 113, 120, 159,
789 /* 720 */ 119, 73, 436, 147, 436, 436, 436, 148, 136, 113,
790 /* 730 */ 120, 159, 119, 436, 73, 436, 147, 436, 436, 436,
791 /* 740 */ 148, 514, 113, 120, 159, 119, 436, 436, 436, 73,
792 /* 750 */ 436, 147, 148, 436, 436, 436, 516, 113, 120, 159,
793 /* 760 */ 119, 73, 436, 147, 107, 148, 436, 436, 513, 113,
794 /* 770 */ 120, 159, 119, 120, 159, 119, 436, 442, 436, 436,
795 /* 780 */ 148, 436, 64, 63, 62, 61, 436, 436, 436, 73,
796 /* 790 */ 436, 147, 148, 436, 436, 151, 515, 113, 120, 159,
797 /* 800 */ 119, 55, 436, 73, 436, 147, 64, 63, 62, 61,
798 /* 810 */ 512, 113, 120, 159, 119, 436, 73, 436, 147, 386,
799 /* 820 */ 148, 436, 436, 511, 113, 120, 159, 119, 73, 436,
800 /* 830 */ 147, 436, 436, 436, 148, 510, 113, 120, 159, 119,
801 /* 840 */ 436, 73, 436, 147, 436, 436, 436, 148, 509, 113,
802 /* 850 */ 120, 159, 119, 436, 436, 436, 73, 436, 147, 148,
803 /* 860 */ 436, 436, 436, 508, 113, 120, 159, 119, 73, 436,
804 /* 870 */ 147, 86, 148, 436, 436, 149, 113, 120, 159, 119,
805 /* 880 */ 120, 159, 119, 436, 436, 436, 436, 148, 436, 436,
806 /* 890 */ 436, 436, 436, 436, 436, 436, 73, 436, 147, 148,
807 /* 900 */ 436, 426, 151, 150, 113, 120, 159, 119, 436, 436,
808 /* 910 */ 72, 436, 147, 436, 436, 436, 436, 112, 113, 120,
809 /* 920 */ 159, 119, 436, 73, 436, 147, 436, 148, 432, 431,
810 /* 930 */ 135, 113, 120, 159, 119, 73, 436, 147, 436, 88,
811 /* 940 */ 436, 148, 134, 113, 120, 159, 119, 436, 120, 159,
812 /* 950 */ 119, 436, 436, 436, 148, 81, 436, 436, 88, 436,
813 /* 960 */ 425, 436, 456, 436, 33, 436, 148, 120, 159, 119,
814 /* 970 */ 151, 436, 436, 436, 110, 110, 88, 436, 436, 427,
815 /* 980 */ 428, 429, 430, 436, 436, 120, 159, 119, 436, 151,
816 /* 990 */ 436, 436, 111, 111, 436, 436, 436, 436, 436, 88,
817 /* 1000 */ 436, 436, 99, 436, 436, 436, 436, 151, 120, 159,
818 /* 1010 */ 119, 120, 159, 119, 436, 465, 436, 100, 64, 63,
819 /* 1020 */ 62, 61, 436, 436, 436, 101, 120, 159, 119, 91,
820 /* 1030 */ 151, 347, 84, 151, 120, 159, 119, 436, 120, 159,
821 /* 1040 */ 119, 120, 159, 119, 103, 436, 436, 436, 151, 436,
822 /* 1050 */ 436, 436, 436, 120, 159, 119, 151, 436, 92, 436,
823 /* 1060 */ 151, 436, 93, 151, 436, 436, 436, 120, 159, 119,
824 /* 1070 */ 85, 120, 159, 119, 104, 151, 436, 436, 436, 120,
825 /* 1080 */ 159, 119, 436, 120, 159, 119, 94, 436, 436, 151,
826 /* 1090 */ 436, 436, 436, 151, 436, 120, 159, 119, 436, 105,
827 /* 1100 */ 436, 151, 95, 436, 436, 151, 436, 436, 120, 159,
828 /* 1110 */ 119, 120, 159, 119, 436, 96, 436, 151, 64, 63,
829 /* 1120 */ 62, 61, 436, 436, 120, 159, 119, 97, 436, 436,
830 /* 1130 */ 151, 387, 98, 151, 436, 436, 120, 159, 119, 537,
831 /* 1140 */ 436, 120, 159, 119, 536, 436, 151, 436, 120, 159,
832 /* 1150 */ 119, 436, 436, 120, 159, 119, 535, 436, 151, 436,
833 /* 1160 */ 436, 436, 534, 151, 436, 120, 159, 119, 115, 436,
834 /* 1170 */ 151, 120, 159, 119, 116, 151, 436, 120, 159, 119,
835 /* 1180 */ 436, 436, 436, 120, 159, 119, 436, 151, 64, 63,
836 /* 1190 */ 62, 61, 436, 151, 436, 436, 436, 436, 436, 151,
837 /* 1200 */ 436, 383, 436, 436, 436, 151,
 
 
 
 
838 };
839 static const YYCODETYPE yy_lookahead[] = {
840 /* 0 */ 0, 0, 129, 97, 98, 99, 101, 101, 4, 5,
841 /* 10 */ 10, 10, 106, 107, 108, 109, 110, 101, 18, 19,
842 /* 20 */ 20, 100, 22, 101, 103, 104, 26, 4, 5, 6,
843 /* 30 */ 7, 31, 32, 33, 34, 35, 130, 37, 38, 39,
844 /* 40 */ 40, 102, 42, 43, 128, 23, 23, 47, 48, 49,
845 /* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
846 /* 60 */ 60, 0, 4, 5, 6, 7, 95, 96, 97, 98,
847 /* 70 */ 10, 10, 3, 102, 121, 17, 108, 109, 110, 18,
848 /* 80 */ 19, 20, 123, 22, 113, 17, 26, 26, 117, 118,
849 /* 90 */ 2, 23, 31, 32, 33, 34, 35, 111, 37, 38,
850 /* 100 */ 39, 40, 111, 42, 43, 108, 109, 110, 47, 48,
851 /* 110 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
852 /* 120 */ 59, 60, 1, 2, 36, 4, 5, 124, 4, 5,
853 /* 130 */ 6, 7, 46, 12, 24, 25, 15, 46, 1, 2,
854 /* 140 */ 16, 4, 5, 22, 100, 24, 25, 103, 104, 12,
855 /* 150 */ 29, 30, 15, 84, 61, 62, 63, 64, 65, 66,
856 /* 160 */ 67, 68, 69, 70, 12, 17, 29, 30, 1, 125,
857 /* 170 */ 126, 127, 4, 5, 6, 7, 8, 92, 93, 12,
858 /* 180 */ 94, 14, 61, 6, 7, 18, 19, 20, 21, 22,
859 /* 190 */ 16, 24, 25, 15, 27, 28, 29, 30, 61, 78,
860 /* 200 */ 41, 80, 81, 82, 83, 39, 2, 86, 87, 88,
861 /* 210 */ 89, 90, 108, 109, 110, 78, 45, 80, 81, 82,
862 /* 220 */ 83, 24, 25, 86, 87, 88, 89, 90, 1, 2,
863 /* 230 */ 78, 4, 5, 4, 5, 6, 7, 38, 86, 12,
864 /* 240 */ 36, 101, 15, 38, 99, 2, 17, 107, 108, 109,
865 /* 250 */ 110, 39, 23, 108, 109, 110, 29, 30, 13, 2,
866 /* 260 */ 3, 4, 5, 6, 7, 1, 2, 17, 4, 5,
867 /* 270 */ 130, 23, 29, 30, 17, 130, 12, 71, 76, 15,
868 /* 280 */ 23, 99, 27, 28, 29, 30, 29, 30, 61, 46,
869 /* 290 */ 108, 109, 110, 36, 112, 4, 5, 6, 7, 17,
870 /* 300 */ 36, 119, 120, 75, 61, 78, 76, 80, 81, 82,
871 /* 310 */ 83, 77, 130, 86, 87, 88, 89, 90, 108, 109,
872 /* 320 */ 110, 64, 65, 80, 81, 82, 83, 91, 3, 72,
873 /* 330 */ 3, 74, 75, 76, 2, 3, 4, 5, 6, 7,
874 /* 340 */ 3, 36, 78, 4, 5, 6, 7, 3, 24, 25,
875 /* 350 */ 86, 87, 88, 89, 90, 23, 18, 19, 20, 3,
876 /* 360 */ 99, 29, 30, 1, 24, 25, 4, 5, 36, 108,
877 /* 370 */ 109, 110, 33, 112, 12, 3, 73, 15, 23, 15,
878 /* 380 */ 18, 19, 20, 15, 22, 47, 48, 49, 50, 51,
879 /* 390 */ 52, 130, 4, 5, 6, 7, 64, 65, 1, 46,
880 /* 400 */ 15, 4, 5, 79, 72, 17, 74, 75, 76, 12,
881 /* 410 */ 86, 23, 15, 26, 1, 2, 26, 4, 5, 1,
882 /* 420 */ 2, 26, 4, 5, 12, 12, 86, 85, 15, 3,
883 /* 430 */ 12, 11, 1, 15, 131, 4, 5, 131, 85, 131,
884 /* 440 */ 78, 44, 45, 12, 91, 131, 15, 94, 86, 87,
885 /* 450 */ 88, 89, 90, 2, 4, 5, 6, 7, 4, 5,
886 /* 460 */ 6, 7, 99, 12, 101, 1, 131, 17, 4, 5,
887 /* 470 */ 107, 108, 109, 110, 131, 78, 12, 23, 131, 15,
888 /* 480 */ 29, 30, 131, 86, 87, 88, 89, 90, 131, 131,
889 /* 490 */ 131, 78, 131, 130, 131, 131, 78, 131, 131, 86,
890 /* 500 */ 87, 88, 89, 90, 86, 87, 88, 89, 90, 78,
891 /* 510 */ 131, 1, 61, 131, 4, 5, 131, 86, 87, 88,
892 /* 520 */ 89, 90, 12, 131, 1, 15, 131, 4, 5, 78,
893 /* 530 */ 131, 80, 81, 82, 83, 12, 131, 86, 15, 96,
894 /* 540 */ 97, 98, 78, 131, 131, 102, 131, 131, 99, 131,
895 /* 550 */ 86, 87, 88, 89, 90, 131, 113, 108, 109, 110,
896 /* 560 */ 131, 118, 131, 114, 115, 116, 108, 109, 110, 95,
897 /* 570 */ 96, 97, 98, 131, 131, 99, 102, 101, 131, 130,
898 /* 580 */ 131, 131, 106, 107, 108, 109, 110, 113, 78, 131,
899 /* 590 */ 131, 131, 118, 131, 131, 131, 86, 87, 88, 89,
900 /* 600 */ 90, 78, 4, 5, 6, 7, 130, 131, 99, 86,
901 /* 610 */ 87, 88, 89, 90, 99, 131, 101, 108, 109, 110,
902 /* 620 */ 131, 106, 107, 108, 109, 110, 131, 99, 131, 101,
903 /* 630 */ 131, 33, 131, 131, 106, 107, 108, 109, 110, 130,
904 /* 640 */ 131, 131, 99, 131, 101, 130, 131, 131, 131, 106,
905 /* 650 */ 107, 108, 109, 110, 99, 131, 101, 99, 130, 131,
906 /* 660 */ 131, 106, 107, 108, 109, 110, 108, 109, 110, 131,
907 /* 670 */ 112, 131, 131, 130, 131, 131, 131, 131, 120, 131,
908 /* 680 */ 131, 131, 99, 131, 101, 130, 131, 131, 130, 106,
909 /* 690 */ 107, 108, 109, 110, 131, 131, 99, 131, 101, 131,
910 /* 700 */ 131, 131, 131, 106, 107, 108, 109, 110, 131, 99,
911 /* 710 */ 131, 101, 131, 130, 131, 131, 106, 107, 108, 109,
912 /* 720 */ 110, 99, 131, 101, 131, 131, 131, 130, 106, 107,
913 /* 730 */ 108, 109, 110, 131, 99, 131, 101, 131, 131, 131,
914 /* 740 */ 130, 106, 107, 108, 109, 110, 131, 131, 131, 99,
915 /* 750 */ 131, 101, 130, 131, 131, 131, 106, 107, 108, 109,
916 /* 760 */ 110, 99, 131, 101, 99, 130, 131, 131, 106, 107,
917 /* 770 */ 108, 109, 110, 108, 109, 110, 131, 112, 131, 131,
918 /* 780 */ 130, 131, 4, 5, 6, 7, 131, 131, 131, 99,
919 /* 790 */ 131, 101, 130, 131, 131, 130, 106, 107, 108, 109,
920 /* 800 */ 110, 23, 131, 99, 131, 101, 4, 5, 6, 7,
921 /* 810 */ 106, 107, 108, 109, 110, 131, 99, 131, 101, 17,
922 /* 820 */ 130, 131, 131, 106, 107, 108, 109, 110, 99, 131,
923 /* 830 */ 101, 131, 131, 131, 130, 106, 107, 108, 109, 110,
924 /* 840 */ 131, 99, 131, 101, 131, 131, 131, 130, 106, 107,
925 /* 850 */ 108, 109, 110, 131, 131, 131, 99, 131, 101, 130,
926 /* 860 */ 131, 131, 131, 106, 107, 108, 109, 110, 99, 131,
927 /* 870 */ 101, 99, 130, 131, 131, 106, 107, 108, 109, 110,
928 /* 880 */ 108, 109, 110, 131, 131, 131, 131, 130, 131, 131,
929 /* 890 */ 131, 131, 131, 131, 131, 131, 99, 131, 101, 130,
930 /* 900 */ 131, 2, 130, 106, 107, 108, 109, 110, 131, 131,
931 /* 910 */ 99, 131, 101, 131, 131, 131, 131, 106, 107, 108,
932 /* 920 */ 109, 110, 131, 99, 131, 101, 131, 130, 29, 30,
933 /* 930 */ 106, 107, 108, 109, 110, 99, 131, 101, 131, 99,
934 /* 940 */ 131, 130, 106, 107, 108, 109, 110, 131, 108, 109,
935 /* 950 */ 110, 131, 131, 131, 130, 115, 131, 131, 99, 131,
936 /* 960 */ 61, 131, 122, 131, 124, 131, 130, 108, 109, 110,
937 /* 970 */ 130, 131, 131, 131, 115, 116, 99, 131, 131, 80,
938 /* 980 */ 81, 82, 83, 131, 131, 108, 109, 110, 131, 130,
939 /* 990 */ 131, 131, 115, 116, 131, 131, 131, 131, 131, 99,
940 /* 1000 */ 131, 131, 99, 131, 131, 131, 131, 130, 108, 109,
941 /* 1010 */ 110, 108, 109, 110, 131, 115, 131, 99, 4, 5,
942 /* 1020 */ 6, 7, 131, 131, 131, 99, 108, 109, 110, 99,
943 /* 1030 */ 130, 17, 99, 130, 108, 109, 110, 131, 108, 109,
944 /* 1040 */ 110, 108, 109, 110, 99, 131, 131, 131, 130, 131,
945 /* 1050 */ 131, 131, 131, 108, 109, 110, 130, 131, 99, 131,
946 /* 1060 */ 130, 131, 99, 130, 131, 131, 131, 108, 109, 110,
947 /* 1070 */ 99, 108, 109, 110, 99, 130, 131, 131, 131, 108,
948 /* 1080 */ 109, 110, 131, 108, 109, 110, 99, 131, 131, 130,
949 /* 1090 */ 131, 131, 131, 130, 131, 108, 109, 110, 131, 99,
950 /* 1100 */ 131, 130, 99, 131, 131, 130, 131, 131, 108, 109,
951 /* 1110 */ 110, 108, 109, 110, 131, 99, 131, 130, 4, 5,
952 /* 1120 */ 6, 7, 131, 131, 108, 109, 110, 99, 131, 131,
953 /* 1130 */ 130, 17, 99, 130, 131, 131, 108, 109, 110, 99,
954 /* 1140 */ 131, 108, 109, 110, 99, 131, 130, 131, 108, 109,
955 /* 1150 */ 110, 131, 131, 108, 109, 110, 99, 131, 130, 131,
956 /* 1160 */ 131, 131, 99, 130, 131, 108, 109, 110, 99, 131,
957 /* 1170 */ 130, 108, 109, 110, 99, 130, 131, 108, 109, 110,
958 /* 1180 */ 131, 131, 131, 108, 109, 110, 131, 130, 4, 5,
959 /* 1190 */ 6, 7, 131, 130, 131, 131, 131, 131, 131, 130,
960 /* 1200 */ 131, 17, 131, 131, 131, 130, 131, 131, 131, 131,
961 /* 1210 */ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
962 /* 1220 */ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
963 /* 1230 */ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
964 /* 1240 */ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
965 /* 1250 */ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
966 /* 1260 */ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
967 /* 1270 */ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
968 /* 1280 */ 131, 131, 131, 131, 95, 95, 95, 95, 95, 95,
969 /* 1290 */ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
970 /* 1300 */ 95,
 
 
 
971 };
972 #define YY_SHIFT_COUNT (161)
973 #define YY_SHIFT_MIN (0)
974 #define YY_SHIFT_MAX (1184)
975 static const unsigned short int yy_shift_ofst[] = {
976 /* 0 */ 167, 121, 137, 137, 137, 137, 137, 137, 137, 137,
977 /* 10 */ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
978 /* 20 */ 137, 137, 137, 137, 137, 362, 397, 431, 227, 362,
979 /* 30 */ 167, 264, 264, 0, 61, 167, 451, 464, 431, 464,
980 /* 40 */ 413, 418, 431, 431, 431, 431, 431, 431, 431, 510,
981 /* 50 */ 431, 431, 431, 523, 431, 431, 431, 431, 431, 431,
982 /* 60 */ 431, 431, 431, 431, 431, 338, 152, 152, 152, 152,
983 /* 70 */ 152, 243, 257, 332, 899, 899, 255, 22, 1206, 1206,
984 /* 80 */ 1206, 1206, 93, 93, 229, 388, 58, 124, 168, 339,
985 /* 90 */ 598, 450, 23, 1014, 454, 1114, 778, 802, 1184, 291,
986 /* 100 */ 291, 291, 353, 291, 291, 291, 324, 291, 340, 60,
987 /* 110 */ 88, 204, 68, 4, 85, 177, 177, 110, 197, 69,
988 /* 120 */ 86, 1, 91, 148, 174, 178, 159, 199, 205, 166,
989 /* 130 */ 212, 171, 245, 250, 248, 206, 282, 202, 228, 234,
990 /* 140 */ 230, 325, 327, 337, 305, 344, 356, 372, 236, 303,
991 /* 150 */ 355, 236, 364, 368, 385, 387, 390, 395, 412, 342,
992 /* 160 */ 426, 420,
993 };
994 #define YY_REDUCE_COUNT (81)
995 #define YY_REDUCE_MIN (-127)
996 #define YY_REDUCE_MAX (1075)
997 static const short yy_reduce_ofst[] = {
998 /* 0 */ -29, -94, 476, 515, 528, 543, 555, 583, 597, 610,
999 /* 10 */ 622, 635, 650, 662, 690, 704, 717, 729, 742, 757,
1000 /* 20 */ 769, 797, 811, 824, 836, 182, 449, 840, 363, 558,
1001 /* 30 */ 474, 859, 877, 44, 44, 443, 140, 261, 900, 665,
1002 /* 40 */ 145, 509, 772, 903, 918, 926, 930, 933, 945, 959,
1003 /* 50 */ 963, 971, 975, 987, 1000, 1003, 1016, 1028, 1033, 1040,
1004 /* 60 */ 1045, 1057, 1063, 1069, 1075, -79, -32, -3, 104, 210,
1005 /* 70 */ 458, -84, -127, -127, -95, -78, -61, -47, -41, -14,
1006 /* 80 */ -9, 3,
1007 };
1008 static const YYACTIONTYPE yy_default[] = {
1009 /* 0 */ 440, 434, 434, 434, 434, 434, 434, 434, 434, 434,
1010 /* 10 */ 434, 434, 434, 434, 434, 434, 434, 434, 434, 434,
1011 /* 20 */ 434, 434, 434, 434, 434, 434, 463, 563, 434, 434,
1012 /* 30 */ 440, 567, 475, 568, 568, 440, 434, 434, 434, 434,
1013 /* 40 */ 434, 434, 434, 434, 434, 467, 434, 434, 434, 434,
1014 /* 50 */ 434, 434, 434, 434, 434, 434, 434, 434, 434, 434,
1015 /* 60 */ 434, 434, 434, 434, 434, 434, 434, 434, 434, 434,
1016 /* 70 */ 434, 434, 434, 434, 434, 434, 434, 446, 460, 497,
1017 /* 80 */ 497, 563, 458, 483, 434, 434, 434, 434, 461, 434,
1018 /* 90 */ 434, 434, 434, 434, 434, 434, 434, 434, 434, 478,
1019 /* 100 */ 476, 466, 449, 501, 500, 499, 434, 553, 434, 434,
1020 /* 110 */ 434, 434, 434, 575, 434, 533, 532, 528, 434, 521,
1021 /* 120 */ 518, 434, 518, 434, 434, 434, 481, 434, 434, 434,
1022 /* 130 */ 434, 434, 434, 434, 434, 434, 434, 434, 434, 434,
1023 /* 140 */ 434, 434, 434, 434, 434, 434, 434, 434, 579, 434,
1024 /* 150 */ 434, 434, 434, 434, 434, 434, 434, 434, 434, 588,
1025 /* 160 */ 434, 434,
1026 };
1027 /********** End of lemon-generated parsing tables *****************************/
1028
1029 /* The next table maps tokens (terminal symbols) into fallback tokens.
1030 ** If a construct like the following:
@@ -1372,11 +1379,11 @@
1372 /* 6 */ "element ::= PLACENAME COLON unnamed_element",
1373 /* 7 */ "element ::= PLACENAME COLON position",
1374 /* 8 */ "element ::= unnamed_element",
1375 /* 9 */ "element ::= print prlist",
1376 /* 10 */ "element ::= ASSERT LP expr EQ expr RP",
1377 /* 11 */ "element ::= ASSERT LP place EQ place RP",
1378 /* 12 */ "rvalue ::= PLACENAME",
1379 /* 13 */ "pritem ::= FILL",
1380 /* 14 */ "pritem ::= COLOR",
1381 /* 15 */ "pritem ::= THICKNESS",
1382 /* 16 */ "pritem ::= rvalue",
@@ -1463,60 +1470,61 @@
1463 /* 97 */ "expr ::= expr STAR expr",
1464 /* 98 */ "expr ::= expr SLASH expr",
1465 /* 99 */ "expr ::= MINUS expr",
1466 /* 100 */ "expr ::= PLUS expr",
1467 /* 101 */ "expr ::= LP expr RP",
1468 /* 102 */ "expr ::= NUMBER",
1469 /* 103 */ "expr ::= ID",
1470 /* 104 */ "expr ::= FUNC1 LP expr RP",
1471 /* 105 */ "expr ::= FUNC2 LP expr COMMA expr RP",
1472 /* 106 */ "expr ::= DIST LP position COMMA position RP",
1473 /* 107 */ "expr ::= place2 DOT_XY X",
1474 /* 108 */ "expr ::= place2 DOT_XY Y",
1475 /* 109 */ "expr ::= object DOT_L numproperty",
1476 /* 110 */ "expr ::= object DOT_L dashproperty",
1477 /* 111 */ "expr ::= object DOT_L colorproperty",
1478 /* 112 */ "lvalue ::= ID",
1479 /* 113 */ "lvalue ::= FILL",
1480 /* 114 */ "lvalue ::= COLOR",
1481 /* 115 */ "lvalue ::= THICKNESS",
1482 /* 116 */ "rvalue ::= expr",
1483 /* 117 */ "print ::= PRINT",
1484 /* 118 */ "prlist ::= pritem",
1485 /* 119 */ "prlist ::= prlist prsep pritem",
1486 /* 120 */ "direction ::= UP",
1487 /* 121 */ "direction ::= DOWN",
1488 /* 122 */ "direction ::= LEFT",
1489 /* 123 */ "direction ::= RIGHT",
1490 /* 124 */ "optrelexpr ::= relexpr",
1491 /* 125 */ "attribute_list ::= alist",
1492 /* 126 */ "alist ::=",
1493 /* 127 */ "alist ::= alist attribute",
1494 /* 128 */ "attribute ::= boolproperty",
1495 /* 129 */ "attribute ::= WITH withclause",
1496 /* 130 */ "go ::= GO",
1497 /* 131 */ "go ::=",
1498 /* 132 */ "even ::= UNTIL EVEN WITH",
1499 /* 133 */ "even ::= EVEN WITH",
1500 /* 134 */ "dashproperty ::= DOTTED",
1501 /* 135 */ "dashproperty ::= DASHED",
1502 /* 136 */ "colorproperty ::= FILL",
1503 /* 137 */ "colorproperty ::= COLOR",
1504 /* 138 */ "position ::= place",
1505 /* 139 */ "between ::= WAY BETWEEN",
1506 /* 140 */ "between ::= BETWEEN",
1507 /* 141 */ "between ::= OF THE WAY BETWEEN",
1508 /* 142 */ "place ::= place2",
1509 /* 143 */ "edge ::= CENTER",
1510 /* 144 */ "edge ::= EDGEPT",
1511 /* 145 */ "edge ::= TOP",
1512 /* 146 */ "edge ::= BOTTOM",
1513 /* 147 */ "edge ::= START",
1514 /* 148 */ "edge ::= END",
1515 /* 149 */ "edge ::= RIGHT",
1516 /* 150 */ "edge ::= LEFT",
1517 /* 151 */ "object ::= objectname",
 
1518 };
1519 #endif /* NDEBUG */
1520
1521
1522 #if YYSTACKDEPTH<=0
@@ -1642,20 +1650,20 @@
1642 /********* Begin destructor definitions ***************************************/
1643 case 95: /* element_list */
1644 {
1645 #line 467 "pikchr.y"
1646 pik_elist_free(p,(yypminor->yy56));
1647 #line 1672 "pikchr.c"
1648 }
1649 break;
1650 case 96: /* element */
1651 case 97: /* unnamed_element */
1652 case 98: /* basetype */
1653 {
1654 #line 469 "pikchr.y"
1655 pik_elem_free(p,(yypminor->yy226));
1656 #line 1681 "pikchr.c"
1657 }
1658 break;
1659 /********* End destructor definitions *****************************************/
1660 default: break; /* If no destructor action specified: do nothing */
1661 }
@@ -1872,11 +1880,11 @@
1872 ** stack every overflows */
1873 /******** Begin %stack_overflow code ******************************************/
1874 #line 501 "pikchr.y"
1875
1876 pik_error(p, 0, "parser stack overflow");
1877 #line 1902 "pikchr.c"
1878 /******** End %stack_overflow code ********************************************/
1879 pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */
1880 pik_parserCTX_STORE
1881 }
1882
@@ -1955,11 +1963,11 @@
1955 96, /* (6) element ::= PLACENAME COLON unnamed_element */
1956 96, /* (7) element ::= PLACENAME COLON position */
1957 96, /* (8) element ::= unnamed_element */
1958 96, /* (9) element ::= print prlist */
1959 96, /* (10) element ::= ASSERT LP expr EQ expr RP */
1960 96, /* (11) element ::= ASSERT LP place EQ place RP */
1961 112, /* (12) rvalue ::= PLACENAME */
1962 120, /* (13) pritem ::= FILL */
1963 120, /* (14) pritem ::= COLOR */
1964 120, /* (15) pritem ::= THICKNESS */
1965 120, /* (16) pritem ::= rvalue */
@@ -2046,60 +2054,61 @@
2046 99, /* (97) expr ::= expr STAR expr */
2047 99, /* (98) expr ::= expr SLASH expr */
2048 99, /* (99) expr ::= MINUS expr */
2049 99, /* (100) expr ::= PLUS expr */
2050 99, /* (101) expr ::= LP expr RP */
2051 99, /* (102) expr ::= NUMBER */
2052 99, /* (103) expr ::= ID */
2053 99, /* (104) expr ::= FUNC1 LP expr RP */
2054 99, /* (105) expr ::= FUNC2 LP expr COMMA expr RP */
2055 99, /* (106) expr ::= DIST LP position COMMA position RP */
2056 99, /* (107) expr ::= place2 DOT_XY X */
2057 99, /* (108) expr ::= place2 DOT_XY Y */
2058 99, /* (109) expr ::= object DOT_L numproperty */
2059 99, /* (110) expr ::= object DOT_L dashproperty */
2060 99, /* (111) expr ::= object DOT_L colorproperty */
2061 113, /* (112) lvalue ::= ID */
2062 113, /* (113) lvalue ::= FILL */
2063 113, /* (114) lvalue ::= COLOR */
2064 113, /* (115) lvalue ::= THICKNESS */
2065 112, /* (116) rvalue ::= expr */
2066 118, /* (117) print ::= PRINT */
2067 119, /* (118) prlist ::= pritem */
2068 119, /* (119) prlist ::= prlist prsep pritem */
2069 102, /* (120) direction ::= UP */
2070 102, /* (121) direction ::= DOWN */
2071 102, /* (122) direction ::= LEFT */
2072 102, /* (123) direction ::= RIGHT */
2073 116, /* (124) optrelexpr ::= relexpr */
2074 122, /* (125) attribute_list ::= alist */
2075 124, /* (126) alist ::= */
2076 124, /* (127) alist ::= alist attribute */
2077 125, /* (128) attribute ::= boolproperty */
2078 125, /* (129) attribute ::= WITH withclause */
2079 126, /* (130) go ::= GO */
2080 126, /* (131) go ::= */
2081 114, /* (132) even ::= UNTIL EVEN WITH */
2082 114, /* (133) even ::= EVEN WITH */
2083 103, /* (134) dashproperty ::= DOTTED */
2084 103, /* (135) dashproperty ::= DASHED */
2085 104, /* (136) colorproperty ::= FILL */
2086 104, /* (137) colorproperty ::= COLOR */
2087 106, /* (138) position ::= place */
2088 129, /* (139) between ::= WAY BETWEEN */
2089 129, /* (140) between ::= BETWEEN */
2090 129, /* (141) between ::= OF THE WAY BETWEEN */
2091 107, /* (142) place ::= place2 */
2092 101, /* (143) edge ::= CENTER */
2093 101, /* (144) edge ::= EDGEPT */
2094 101, /* (145) edge ::= TOP */
2095 101, /* (146) edge ::= BOTTOM */
2096 101, /* (147) edge ::= START */
2097 101, /* (148) edge ::= END */
2098 101, /* (149) edge ::= RIGHT */
2099 101, /* (150) edge ::= LEFT */
2100 108, /* (151) object ::= objectname */
 
2101 };
2102
2103 /* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
2104 ** of symbols on the right-hand side of that rule. */
2105 static const signed char yyRuleInfoNRhs[] = {
@@ -2112,11 +2121,11 @@
2112 -3, /* (6) element ::= PLACENAME COLON unnamed_element */
2113 -3, /* (7) element ::= PLACENAME COLON position */
2114 -1, /* (8) element ::= unnamed_element */
2115 -2, /* (9) element ::= print prlist */
2116 -6, /* (10) element ::= ASSERT LP expr EQ expr RP */
2117 -6, /* (11) element ::= ASSERT LP place EQ place RP */
2118 -1, /* (12) rvalue ::= PLACENAME */
2119 -1, /* (13) pritem ::= FILL */
2120 -1, /* (14) pritem ::= COLOR */
2121 -1, /* (15) pritem ::= THICKNESS */
2122 -1, /* (16) pritem ::= rvalue */
@@ -2203,60 +2212,61 @@
2203 -3, /* (97) expr ::= expr STAR expr */
2204 -3, /* (98) expr ::= expr SLASH expr */
2205 -2, /* (99) expr ::= MINUS expr */
2206 -2, /* (100) expr ::= PLUS expr */
2207 -3, /* (101) expr ::= LP expr RP */
2208 -1, /* (102) expr ::= NUMBER */
2209 -1, /* (103) expr ::= ID */
2210 -4, /* (104) expr ::= FUNC1 LP expr RP */
2211 -6, /* (105) expr ::= FUNC2 LP expr COMMA expr RP */
2212 -6, /* (106) expr ::= DIST LP position COMMA position RP */
2213 -3, /* (107) expr ::= place2 DOT_XY X */
2214 -3, /* (108) expr ::= place2 DOT_XY Y */
2215 -3, /* (109) expr ::= object DOT_L numproperty */
2216 -3, /* (110) expr ::= object DOT_L dashproperty */
2217 -3, /* (111) expr ::= object DOT_L colorproperty */
2218 -1, /* (112) lvalue ::= ID */
2219 -1, /* (113) lvalue ::= FILL */
2220 -1, /* (114) lvalue ::= COLOR */
2221 -1, /* (115) lvalue ::= THICKNESS */
2222 -1, /* (116) rvalue ::= expr */
2223 -1, /* (117) print ::= PRINT */
2224 -1, /* (118) prlist ::= pritem */
2225 -3, /* (119) prlist ::= prlist prsep pritem */
2226 -1, /* (120) direction ::= UP */
2227 -1, /* (121) direction ::= DOWN */
2228 -1, /* (122) direction ::= LEFT */
2229 -1, /* (123) direction ::= RIGHT */
2230 -1, /* (124) optrelexpr ::= relexpr */
2231 -1, /* (125) attribute_list ::= alist */
2232 0, /* (126) alist ::= */
2233 -2, /* (127) alist ::= alist attribute */
2234 -1, /* (128) attribute ::= boolproperty */
2235 -2, /* (129) attribute ::= WITH withclause */
2236 -1, /* (130) go ::= GO */
2237 0, /* (131) go ::= */
2238 -3, /* (132) even ::= UNTIL EVEN WITH */
2239 -2, /* (133) even ::= EVEN WITH */
2240 -1, /* (134) dashproperty ::= DOTTED */
2241 -1, /* (135) dashproperty ::= DASHED */
2242 -1, /* (136) colorproperty ::= FILL */
2243 -1, /* (137) colorproperty ::= COLOR */
2244 -1, /* (138) position ::= place */
2245 -2, /* (139) between ::= WAY BETWEEN */
2246 -1, /* (140) between ::= BETWEEN */
2247 -4, /* (141) between ::= OF THE WAY BETWEEN */
2248 -1, /* (142) place ::= place2 */
2249 -1, /* (143) edge ::= CENTER */
2250 -1, /* (144) edge ::= EDGEPT */
2251 -1, /* (145) edge ::= TOP */
2252 -1, /* (146) edge ::= BOTTOM */
2253 -1, /* (147) edge ::= START */
2254 -1, /* (148) edge ::= END */
2255 -1, /* (149) edge ::= RIGHT */
2256 -1, /* (150) edge ::= LEFT */
2257 -1, /* (151) object ::= objectname */
 
2258 };
2259
2260 static void yy_accept(yyParser*); /* Forward Declaration */
2261
2262 /*
@@ -2282,12 +2292,13 @@
2282 int yysize; /* Amount to pop the stack */
2283 pik_parserARG_FETCH
2284 (void)yyLookahead;
2285 (void)yyLookaheadToken;
2286 yymsp = yypParser->yytos;
 
2287 #ifndef NDEBUG
2288 if( yyTraceFILE && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){
2289 yysize = yyRuleInfoNRhs[yyruleno];
2290 if( yysize ){
2291 fprintf(yyTraceFILE, "%sReduce %d [%s]%s, pop back to state %d.\n",
2292 yyTracePrompt,
2293 yyruleno, yyRuleName[yyruleno],
@@ -2345,639 +2356,644 @@
2345 /********** Begin reduce actions **********************************************/
2346 YYMINORTYPE yylhsminor;
2347 case 0: /* document ::= element_list */
2348 #line 505 "pikchr.y"
2349 {pik_render(p,yymsp[0].minor.yy56);}
2350 #line 2375 "pikchr.c"
2351 break;
2352 case 1: /* element_list ::= element */
2353 #line 508 "pikchr.y"
2354 { yylhsminor.yy56 = pik_elist_append(p,0,yymsp[0].minor.yy226); }
2355 #line 2380 "pikchr.c"
2356 yymsp[0].minor.yy56 = yylhsminor.yy56;
2357 break;
2358 case 2: /* element_list ::= element_list EOL element */
2359 #line 510 "pikchr.y"
2360 { yylhsminor.yy56 = pik_elist_append(p,yymsp[-2].minor.yy56,yymsp[0].minor.yy226); }
2361 #line 2386 "pikchr.c"
2362 yymsp[-2].minor.yy56 = yylhsminor.yy56;
2363 break;
2364 case 3: /* element ::= */
2365 #line 513 "pikchr.y"
2366 { yymsp[1].minor.yy226 = 0; }
2367 #line 2392 "pikchr.c"
2368 break;
2369 case 4: /* element ::= direction */
2370 #line 514 "pikchr.y"
2371 { pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy226=0; }
2372 #line 2397 "pikchr.c"
2373 yymsp[0].minor.yy226 = yylhsminor.yy226;
2374 break;
2375 case 5: /* element ::= lvalue ASSIGN rvalue */
2376 #line 515 "pikchr.y"
2377 {pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy257,&yymsp[-1].minor.yy0); yylhsminor.yy226=0;}
2378 #line 2403 "pikchr.c"
2379 yymsp[-2].minor.yy226 = yylhsminor.yy226;
2380 break;
2381 case 6: /* element ::= PLACENAME COLON unnamed_element */
2382 #line 517 "pikchr.y"
2383 { yylhsminor.yy226 = yymsp[0].minor.yy226; pik_elem_setname(p,yymsp[0].minor.yy226,&yymsp[-2].minor.yy0); }
2384 #line 2409 "pikchr.c"
2385 yymsp[-2].minor.yy226 = yylhsminor.yy226;
2386 break;
2387 case 7: /* element ::= PLACENAME COLON position */
2388 #line 519 "pikchr.y"
2389 { yylhsminor.yy226 = pik_elem_new(p,0,0,0);
2390 if(yylhsminor.yy226){ yylhsminor.yy226->ptAt = yymsp[0].minor.yy175; pik_elem_setname(p,yylhsminor.yy226,&yymsp[-2].minor.yy0); }}
2391 #line 2416 "pikchr.c"
2392 yymsp[-2].minor.yy226 = yylhsminor.yy226;
2393 break;
2394 case 8: /* element ::= unnamed_element */
2395 #line 521 "pikchr.y"
2396 {yylhsminor.yy226 = yymsp[0].minor.yy226;}
2397 #line 2422 "pikchr.c"
2398 yymsp[0].minor.yy226 = yylhsminor.yy226;
2399 break;
2400 case 9: /* element ::= print prlist */
2401 #line 522 "pikchr.y"
2402 {pik_append(p,"<br>\n",5); yymsp[-1].minor.yy226=0;}
2403 #line 2428 "pikchr.c"
2404 break;
2405 case 10: /* element ::= ASSERT LP expr EQ expr RP */
2406 #line 527 "pikchr.y"
2407 {yymsp[-5].minor.yy226=pik_assert(p,yymsp[-3].minor.yy257,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy257);}
2408 #line 2433 "pikchr.c"
2409 break;
2410 case 11: /* element ::= ASSERT LP place EQ place RP */
2411 #line 529 "pikchr.y"
2412 {yymsp[-5].minor.yy226=pik_place_assert(p,&yymsp[-3].minor.yy175,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy175);}
2413 #line 2438 "pikchr.c"
2414 break;
2415 case 12: /* rvalue ::= PLACENAME */
2416 #line 540 "pikchr.y"
2417 {yylhsminor.yy257 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2418 #line 2443 "pikchr.c"
2419 yymsp[0].minor.yy257 = yylhsminor.yy257;
2420 break;
2421 case 13: /* pritem ::= FILL */
2422 case 14: /* pritem ::= COLOR */ yytestcase(yyruleno==14);
2423 case 15: /* pritem ::= THICKNESS */ yytestcase(yyruleno==15);
2424 #line 545 "pikchr.y"
2425 {pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));}
2426 #line 2451 "pikchr.c"
2427 break;
2428 case 16: /* pritem ::= rvalue */
2429 #line 548 "pikchr.y"
2430 {pik_append_num(p,"",yymsp[0].minor.yy257);}
2431 #line 2456 "pikchr.c"
2432 break;
2433 case 17: /* pritem ::= STRING */
2434 #line 549 "pikchr.y"
2435 {pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2436 #line 2461 "pikchr.c"
2437 break;
2438 case 18: /* prsep ::= COMMA */
2439 #line 550 "pikchr.y"
2440 {pik_append(p, " ", 1);}
2441 #line 2466 "pikchr.c"
2442 break;
2443 case 19: /* unnamed_element ::= basetype attribute_list */
2444 #line 553 "pikchr.y"
2445 {yylhsminor.yy226 = yymsp[-1].minor.yy226; pik_after_adding_attributes(p,yylhsminor.yy226);}
2446 #line 2471 "pikchr.c"
2447 yymsp[-1].minor.yy226 = yylhsminor.yy226;
2448 break;
2449 case 20: /* basetype ::= CLASSNAME */
2450 #line 555 "pikchr.y"
2451 {yylhsminor.yy226 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2452 #line 2477 "pikchr.c"
2453 yymsp[0].minor.yy226 = yylhsminor.yy226;
2454 break;
2455 case 21: /* basetype ::= STRING textposition */
2456 #line 557 "pikchr.y"
2457 {yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy116; yylhsminor.yy226 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2458 #line 2483 "pikchr.c"
2459 yymsp[-1].minor.yy226 = yylhsminor.yy226;
2460 break;
2461 case 22: /* basetype ::= LB savelist element_list RB */
2462 #line 559 "pikchr.y"
2463 { p->list = yymsp[-2].minor.yy56; yymsp[-3].minor.yy226 = pik_elem_new(p,0,0,yymsp[-1].minor.yy56); if(yymsp[-3].minor.yy226) yymsp[-3].minor.yy226->errTok = yymsp[0].minor.yy0; }
2464 #line 2489 "pikchr.c"
2465 break;
2466 case 23: /* savelist ::= */
2467 #line 564 "pikchr.y"
2468 {yymsp[1].minor.yy56 = p->list; p->list = 0;}
2469 #line 2494 "pikchr.c"
2470 break;
2471 case 24: /* relexpr ::= expr */
2472 #line 571 "pikchr.y"
2473 {yylhsminor.yy164.rAbs = yymsp[0].minor.yy257; yylhsminor.yy164.rRel = 0;}
2474 #line 2499 "pikchr.c"
2475 yymsp[0].minor.yy164 = yylhsminor.yy164;
2476 break;
2477 case 25: /* relexpr ::= expr PERCENT */
2478 #line 572 "pikchr.y"
2479 {yylhsminor.yy164.rAbs = 0; yylhsminor.yy164.rRel = yymsp[-1].minor.yy257/100;}
2480 #line 2505 "pikchr.c"
2481 yymsp[-1].minor.yy164 = yylhsminor.yy164;
2482 break;
2483 case 26: /* optrelexpr ::= */
2484 #line 574 "pikchr.y"
2485 {yymsp[1].minor.yy164.rAbs = 0; yymsp[1].minor.yy164.rRel = 1.0;}
2486 #line 2511 "pikchr.c"
2487 break;
2488 case 27: /* attribute_list ::= relexpr alist */
2489 #line 576 "pikchr.y"
2490 {pik_add_direction(p,0,&yymsp[-1].minor.yy164);}
2491 #line 2516 "pikchr.c"
2492 break;
2493 case 28: /* attribute ::= numproperty relexpr */
2494 #line 580 "pikchr.y"
2495 { pik_set_numprop(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy164); }
2496 #line 2521 "pikchr.c"
2497 break;
2498 case 29: /* attribute ::= dashproperty expr */
2499 #line 581 "pikchr.y"
2500 { pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy257); }
2501 #line 2526 "pikchr.c"
2502 break;
2503 case 30: /* attribute ::= dashproperty */
2504 #line 582 "pikchr.y"
2505 { pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2506 #line 2531 "pikchr.c"
2507 break;
2508 case 31: /* attribute ::= colorproperty rvalue */
2509 #line 583 "pikchr.y"
2510 { pik_set_clrprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy257); }
2511 #line 2536 "pikchr.c"
2512 break;
2513 case 32: /* attribute ::= go direction optrelexpr */
2514 #line 584 "pikchr.y"
2515 { pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy164);}
2516 #line 2541 "pikchr.c"
2517 break;
2518 case 33: /* attribute ::= go direction even position */
2519 #line 585 "pikchr.y"
2520 {pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy175);}
2521 #line 2546 "pikchr.c"
2522 break;
2523 case 34: /* attribute ::= CLOSE */
2524 #line 586 "pikchr.y"
2525 { pik_close_path(p,&yymsp[0].minor.yy0); }
2526 #line 2551 "pikchr.c"
2527 break;
2528 case 35: /* attribute ::= CHOP */
2529 #line 587 "pikchr.y"
2530 { p->cur->bChop = 1; }
2531 #line 2556 "pikchr.c"
2532 break;
2533 case 36: /* attribute ::= FROM position */
2534 #line 588 "pikchr.y"
2535 { pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy175); }
2536 #line 2561 "pikchr.c"
2537 break;
2538 case 37: /* attribute ::= TO position */
2539 #line 589 "pikchr.y"
2540 { pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy175); }
2541 #line 2566 "pikchr.c"
2542 break;
2543 case 38: /* attribute ::= THEN */
2544 #line 590 "pikchr.y"
2545 { pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2546 #line 2571 "pikchr.c"
2547 break;
2548 case 39: /* attribute ::= THEN optrelexpr HEADING expr */
2549 case 41: /* attribute ::= GO optrelexpr HEADING expr */ yytestcase(yyruleno==41);
2550 #line 592 "pikchr.y"
2551 {pik_move_hdg(p,&yymsp[-2].minor.yy164,&yymsp[-1].minor.yy0,yymsp[0].minor.yy257,0,&yymsp[-3].minor.yy0);}
2552 #line 2577 "pikchr.c"
2553 break;
2554 case 40: /* attribute ::= THEN optrelexpr EDGEPT */
2555 case 42: /* attribute ::= GO optrelexpr EDGEPT */ yytestcase(yyruleno==42);
2556 #line 593 "pikchr.y"
2557 {pik_move_hdg(p,&yymsp[-1].minor.yy164,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);}
2558 #line 2583 "pikchr.c"
2559 break;
2560 case 43: /* attribute ::= AT position */
2561 #line 598 "pikchr.y"
2562 { pik_set_at(p,0,&yymsp[0].minor.yy175,&yymsp[-1].minor.yy0); }
2563 #line 2588 "pikchr.c"
2564 break;
2565 case 44: /* attribute ::= SAME */
2566 #line 600 "pikchr.y"
2567 {pik_same(p,0,&yymsp[0].minor.yy0);}
2568 #line 2593 "pikchr.c"
2569 break;
2570 case 45: /* attribute ::= SAME AS object */
2571 #line 601 "pikchr.y"
2572 {pik_same(p,yymsp[0].minor.yy226,&yymsp[-2].minor.yy0);}
2573 #line 2598 "pikchr.c"
2574 break;
2575 case 46: /* attribute ::= STRING textposition */
2576 #line 602 "pikchr.y"
2577 {pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy116);}
2578 #line 2603 "pikchr.c"
2579 break;
2580 case 47: /* attribute ::= FIT */
2581 #line 603 "pikchr.y"
2582 {pik_size_to_fit(p,&yymsp[0].minor.yy0); }
2583 #line 2608 "pikchr.c"
2584 break;
2585 case 48: /* attribute ::= BEHIND object */
2586 #line 604 "pikchr.y"
2587 {pik_behind(p,yymsp[0].minor.yy226);}
2588 #line 2613 "pikchr.c"
2589 break;
2590 case 49: /* withclause ::= DOT_E edge AT position */
2591 case 50: /* withclause ::= edge AT position */ yytestcase(yyruleno==50);
2592 #line 612 "pikchr.y"
2593 { pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy175,&yymsp[-1].minor.yy0); }
2594 #line 2619 "pikchr.c"
2595 break;
2596 case 51: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2597 #line 616 "pikchr.y"
2598 {yylhsminor.yy0 = yymsp[0].minor.yy0;}
2599 #line 2624 "pikchr.c"
2600 yymsp[0].minor.yy0 = yylhsminor.yy0;
2601 break;
2602 case 52: /* boolproperty ::= CW */
2603 #line 627 "pikchr.y"
2604 {p->cur->cw = 1;}
2605 #line 2630 "pikchr.c"
2606 break;
2607 case 53: /* boolproperty ::= CCW */
2608 #line 628 "pikchr.y"
2609 {p->cur->cw = 0;}
2610 #line 2635 "pikchr.c"
2611 break;
2612 case 54: /* boolproperty ::= LARROW */
2613 #line 629 "pikchr.y"
2614 {p->cur->larrow=1; p->cur->rarrow=0; }
2615 #line 2640 "pikchr.c"
2616 break;
2617 case 55: /* boolproperty ::= RARROW */
2618 #line 630 "pikchr.y"
2619 {p->cur->larrow=0; p->cur->rarrow=1; }
2620 #line 2645 "pikchr.c"
2621 break;
2622 case 56: /* boolproperty ::= LRARROW */
2623 #line 631 "pikchr.y"
2624 {p->cur->larrow=1; p->cur->rarrow=1; }
2625 #line 2650 "pikchr.c"
2626 break;
2627 case 57: /* boolproperty ::= INVIS */
2628 #line 632 "pikchr.y"
2629 {p->cur->sw = 0.0;}
2630 #line 2655 "pikchr.c"
2631 break;
2632 case 58: /* boolproperty ::= THICK */
2633 #line 633 "pikchr.y"
2634 {p->cur->sw *= 1.5;}
2635 #line 2660 "pikchr.c"
2636 break;
2637 case 59: /* boolproperty ::= THIN */
2638 #line 634 "pikchr.y"
2639 {p->cur->sw *= 0.67;}
2640 #line 2665 "pikchr.c"
2641 break;
2642 case 60: /* textposition ::= */
2643 #line 636 "pikchr.y"
2644 {yymsp[1].minor.yy116 = 0;}
2645 #line 2670 "pikchr.c"
2646 break;
2647 case 61: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2648 #line 639 "pikchr.y"
2649 {yylhsminor.yy116 = pik_text_position(yymsp[-1].minor.yy116,&yymsp[0].minor.yy0);}
2650 #line 2675 "pikchr.c"
2651 yymsp[-1].minor.yy116 = yylhsminor.yy116;
2652 break;
2653 case 62: /* position ::= expr COMMA expr */
2654 #line 642 "pikchr.y"
2655 {yylhsminor.yy175.x=yymsp[-2].minor.yy257; yylhsminor.yy175.y=yymsp[0].minor.yy257;}
2656 #line 2681 "pikchr.c"
2657 yymsp[-2].minor.yy175 = yylhsminor.yy175;
2658 break;
2659 case 63: /* position ::= place PLUS expr COMMA expr */
2660 #line 644 "pikchr.y"
2661 {yylhsminor.yy175.x=yymsp[-4].minor.yy175.x+yymsp[-2].minor.yy257; yylhsminor.yy175.y=yymsp[-4].minor.yy175.y+yymsp[0].minor.yy257;}
2662 #line 2687 "pikchr.c"
2663 yymsp[-4].minor.yy175 = yylhsminor.yy175;
2664 break;
2665 case 64: /* position ::= place MINUS expr COMMA expr */
2666 #line 645 "pikchr.y"
2667 {yylhsminor.yy175.x=yymsp[-4].minor.yy175.x-yymsp[-2].minor.yy257; yylhsminor.yy175.y=yymsp[-4].minor.yy175.y-yymsp[0].minor.yy257;}
2668 #line 2693 "pikchr.c"
2669 yymsp[-4].minor.yy175 = yylhsminor.yy175;
2670 break;
2671 case 65: /* position ::= place PLUS LP expr COMMA expr RP */
2672 #line 647 "pikchr.y"
2673 {yylhsminor.yy175.x=yymsp[-6].minor.yy175.x+yymsp[-3].minor.yy257; yylhsminor.yy175.y=yymsp[-6].minor.yy175.y+yymsp[-1].minor.yy257;}
2674 #line 2699 "pikchr.c"
2675 yymsp[-6].minor.yy175 = yylhsminor.yy175;
2676 break;
2677 case 66: /* position ::= place MINUS LP expr COMMA expr RP */
2678 #line 649 "pikchr.y"
2679 {yylhsminor.yy175.x=yymsp[-6].minor.yy175.x-yymsp[-3].minor.yy257; yylhsminor.yy175.y=yymsp[-6].minor.yy175.y-yymsp[-1].minor.yy257;}
2680 #line 2705 "pikchr.c"
2681 yymsp[-6].minor.yy175 = yylhsminor.yy175;
2682 break;
2683 case 67: /* position ::= LP position COMMA position RP */
2684 #line 650 "pikchr.y"
2685 {yymsp[-4].minor.yy175.x=yymsp[-3].minor.yy175.x; yymsp[-4].minor.yy175.y=yymsp[-1].minor.yy175.y;}
2686 #line 2711 "pikchr.c"
2687 break;
2688 case 68: /* position ::= LP position RP */
2689 #line 651 "pikchr.y"
2690 {yymsp[-2].minor.yy175=yymsp[-1].minor.yy175;}
2691 #line 2716 "pikchr.c"
2692 break;
2693 case 69: /* position ::= expr between position AND position */
2694 #line 653 "pikchr.y"
2695 {yylhsminor.yy175 = pik_position_between(yymsp[-4].minor.yy257,yymsp[-2].minor.yy175,yymsp[0].minor.yy175);}
2696 #line 2721 "pikchr.c"
2697 yymsp[-4].minor.yy175 = yylhsminor.yy175;
2698 break;
2699 case 70: /* position ::= expr LT position COMMA position GT */
2700 #line 655 "pikchr.y"
2701 {yylhsminor.yy175 = pik_position_between(yymsp[-5].minor.yy257,yymsp[-3].minor.yy175,yymsp[-1].minor.yy175);}
2702 #line 2727 "pikchr.c"
2703 yymsp[-5].minor.yy175 = yylhsminor.yy175;
2704 break;
2705 case 71: /* position ::= expr ABOVE position */
2706 #line 656 "pikchr.y"
2707 {yylhsminor.yy175=yymsp[0].minor.yy175; yylhsminor.yy175.y += yymsp[-2].minor.yy257;}
2708 #line 2733 "pikchr.c"
2709 yymsp[-2].minor.yy175 = yylhsminor.yy175;
2710 break;
2711 case 72: /* position ::= expr BELOW position */
2712 #line 657 "pikchr.y"
2713 {yylhsminor.yy175=yymsp[0].minor.yy175; yylhsminor.yy175.y -= yymsp[-2].minor.yy257;}
2714 #line 2739 "pikchr.c"
2715 yymsp[-2].minor.yy175 = yylhsminor.yy175;
2716 break;
2717 case 73: /* position ::= expr LEFT OF position */
2718 #line 658 "pikchr.y"
2719 {yylhsminor.yy175=yymsp[0].minor.yy175; yylhsminor.yy175.x -= yymsp[-3].minor.yy257;}
2720 #line 2745 "pikchr.c"
2721 yymsp[-3].minor.yy175 = yylhsminor.yy175;
2722 break;
2723 case 74: /* position ::= expr RIGHT OF position */
2724 #line 659 "pikchr.y"
2725 {yylhsminor.yy175=yymsp[0].minor.yy175; yylhsminor.yy175.x += yymsp[-3].minor.yy257;}
2726 #line 2751 "pikchr.c"
2727 yymsp[-3].minor.yy175 = yylhsminor.yy175;
2728 break;
2729 case 75: /* position ::= expr ON HEADING EDGEPT OF position */
2730 #line 661 "pikchr.y"
2731 {yylhsminor.yy175 = pik_position_at_hdg(yymsp[-5].minor.yy257,&yymsp[-2].minor.yy0,yymsp[0].minor.yy175);}
2732 #line 2757 "pikchr.c"
2733 yymsp[-5].minor.yy175 = yylhsminor.yy175;
2734 break;
2735 case 76: /* position ::= expr HEADING EDGEPT OF position */
2736 #line 663 "pikchr.y"
2737 {yylhsminor.yy175 = pik_position_at_hdg(yymsp[-4].minor.yy257,&yymsp[-2].minor.yy0,yymsp[0].minor.yy175);}
2738 #line 2763 "pikchr.c"
2739 yymsp[-4].minor.yy175 = yylhsminor.yy175;
2740 break;
2741 case 77: /* position ::= expr EDGEPT OF position */
2742 #line 665 "pikchr.y"
2743 {yylhsminor.yy175 = pik_position_at_hdg(yymsp[-3].minor.yy257,&yymsp[-2].minor.yy0,yymsp[0].minor.yy175);}
2744 #line 2769 "pikchr.c"
2745 yymsp[-3].minor.yy175 = yylhsminor.yy175;
2746 break;
2747 case 78: /* position ::= expr ON HEADING expr FROM position */
2748 #line 667 "pikchr.y"
2749 {yylhsminor.yy175 = pik_position_at_angle(yymsp[-5].minor.yy257,yymsp[-2].minor.yy257,yymsp[0].minor.yy175);}
2750 #line 2775 "pikchr.c"
2751 yymsp[-5].minor.yy175 = yylhsminor.yy175;
2752 break;
2753 case 79: /* position ::= expr HEADING expr FROM position */
2754 #line 669 "pikchr.y"
2755 {yylhsminor.yy175 = pik_position_at_angle(yymsp[-4].minor.yy257,yymsp[-2].minor.yy257,yymsp[0].minor.yy175);}
2756 #line 2781 "pikchr.c"
2757 yymsp[-4].minor.yy175 = yylhsminor.yy175;
2758 break;
2759 case 80: /* place ::= edge OF object */
2760 #line 681 "pikchr.y"
2761 {yylhsminor.yy175 = pik_place_of_elem(p,yymsp[0].minor.yy226,&yymsp[-2].minor.yy0);}
2762 #line 2787 "pikchr.c"
2763 yymsp[-2].minor.yy175 = yylhsminor.yy175;
2764 break;
2765 case 81: /* place2 ::= object */
2766 #line 682 "pikchr.y"
2767 {yylhsminor.yy175 = pik_place_of_elem(p,yymsp[0].minor.yy226,0);}
2768 #line 2793 "pikchr.c"
2769 yymsp[0].minor.yy175 = yylhsminor.yy175;
2770 break;
2771 case 82: /* place2 ::= object DOT_E edge */
2772 #line 683 "pikchr.y"
2773 {yylhsminor.yy175 = pik_place_of_elem(p,yymsp[-2].minor.yy226,&yymsp[0].minor.yy0);}
2774 #line 2799 "pikchr.c"
2775 yymsp[-2].minor.yy175 = yylhsminor.yy175;
2776 break;
2777 case 83: /* place2 ::= NTH VERTEX OF object */
2778 #line 684 "pikchr.y"
2779 {yylhsminor.yy175 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy226);}
2780 #line 2805 "pikchr.c"
2781 yymsp[-3].minor.yy175 = yylhsminor.yy175;
2782 break;
2783 case 84: /* object ::= nth */
2784 #line 696 "pikchr.y"
2785 {yylhsminor.yy226 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2786 #line 2811 "pikchr.c"
2787 yymsp[0].minor.yy226 = yylhsminor.yy226;
2788 break;
2789 case 85: /* object ::= nth OF|IN object */
2790 #line 697 "pikchr.y"
2791 {yylhsminor.yy226 = pik_find_nth(p,yymsp[0].minor.yy226,&yymsp[-2].minor.yy0);}
2792 #line 2817 "pikchr.c"
2793 yymsp[-2].minor.yy226 = yylhsminor.yy226;
2794 break;
2795 case 86: /* objectname ::= PLACENAME */
2796 #line 699 "pikchr.y"
2797 {yylhsminor.yy226 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2798 #line 2823 "pikchr.c"
2799 yymsp[0].minor.yy226 = yylhsminor.yy226;
2800 break;
2801 case 87: /* objectname ::= objectname DOT_U PLACENAME */
2802 #line 701 "pikchr.y"
2803 {yylhsminor.yy226 = pik_find_byname(p,yymsp[-2].minor.yy226,&yymsp[0].minor.yy0);}
2804 #line 2829 "pikchr.c"
2805 yymsp[-2].minor.yy226 = yylhsminor.yy226;
2806 break;
2807 case 88: /* nth ::= NTH CLASSNAME */
2808 #line 703 "pikchr.y"
2809 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2810 #line 2835 "pikchr.c"
2811 yymsp[-1].minor.yy0 = yylhsminor.yy0;
2812 break;
2813 case 89: /* nth ::= NTH LAST CLASSNAME */
2814 #line 704 "pikchr.y"
2815 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2816 #line 2841 "pikchr.c"
2817 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2818 break;
2819 case 90: /* nth ::= LAST CLASSNAME */
2820 #line 705 "pikchr.y"
2821 {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2822 #line 2847 "pikchr.c"
2823 break;
2824 case 91: /* nth ::= LAST */
2825 #line 706 "pikchr.y"
2826 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2827 #line 2852 "pikchr.c"
2828 yymsp[0].minor.yy0 = yylhsminor.yy0;
2829 break;
2830 case 92: /* nth ::= NTH LB RB */
2831 #line 707 "pikchr.y"
2832 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2833 #line 2858 "pikchr.c"
2834 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2835 break;
2836 case 93: /* nth ::= NTH LAST LB RB */
2837 #line 708 "pikchr.y"
2838 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2839 #line 2864 "pikchr.c"
2840 yymsp[-3].minor.yy0 = yylhsminor.yy0;
2841 break;
2842 case 94: /* nth ::= LAST LB RB */
2843 #line 709 "pikchr.y"
2844 {yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2845 #line 2870 "pikchr.c"
2846 break;
2847 case 95: /* expr ::= expr PLUS expr */
2848 #line 711 "pikchr.y"
2849 {yylhsminor.yy257=yymsp[-2].minor.yy257+yymsp[0].minor.yy257;}
2850 #line 2875 "pikchr.c"
2851 yymsp[-2].minor.yy257 = yylhsminor.yy257;
2852 break;
2853 case 96: /* expr ::= expr MINUS expr */
2854 #line 712 "pikchr.y"
2855 {yylhsminor.yy257=yymsp[-2].minor.yy257-yymsp[0].minor.yy257;}
2856 #line 2881 "pikchr.c"
2857 yymsp[-2].minor.yy257 = yylhsminor.yy257;
2858 break;
2859 case 97: /* expr ::= expr STAR expr */
2860 #line 713 "pikchr.y"
2861 {yylhsminor.yy257=yymsp[-2].minor.yy257*yymsp[0].minor.yy257;}
2862 #line 2887 "pikchr.c"
2863 yymsp[-2].minor.yy257 = yylhsminor.yy257;
2864 break;
2865 case 98: /* expr ::= expr SLASH expr */
2866 #line 714 "pikchr.y"
2867 {
2868 if( yymsp[0].minor.yy257==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy257 = 0.0; }
2869 else{ yylhsminor.yy257 = yymsp[-2].minor.yy257/yymsp[0].minor.yy257; }
2870 }
2871 #line 2896 "pikchr.c"
2872 yymsp[-2].minor.yy257 = yylhsminor.yy257;
2873 break;
2874 case 99: /* expr ::= MINUS expr */
2875 #line 718 "pikchr.y"
2876 {yymsp[-1].minor.yy257=-yymsp[0].minor.yy257;}
2877 #line 2902 "pikchr.c"
2878 break;
2879 case 100: /* expr ::= PLUS expr */
2880 #line 719 "pikchr.y"
2881 {yymsp[-1].minor.yy257=yymsp[0].minor.yy257;}
2882 #line 2907 "pikchr.c"
2883 break;
2884 case 101: /* expr ::= LP expr RP */
2885 #line 720 "pikchr.y"
2886 {yymsp[-2].minor.yy257=yymsp[-1].minor.yy257;}
2887 #line 2912 "pikchr.c"
2888 break;
2889 case 102: /* expr ::= NUMBER */
2890 #line 721 "pikchr.y"
2891 {yylhsminor.yy257=pik_atof(&yymsp[0].minor.yy0);}
2892 #line 2917 "pikchr.c"
2893 yymsp[0].minor.yy257 = yylhsminor.yy257;
2894 break;
2895 case 103: /* expr ::= ID */
2896 #line 722 "pikchr.y"
2897 {yylhsminor.yy257=pik_get_var(p,&yymsp[0].minor.yy0);}
2898 #line 2923 "pikchr.c"
2899 yymsp[0].minor.yy257 = yylhsminor.yy257;
2900 break;
2901 case 104: /* expr ::= FUNC1 LP expr RP */
2902 #line 723 "pikchr.y"
2903 {yylhsminor.yy257 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy257,0.0);}
2904 #line 2929 "pikchr.c"
2905 yymsp[-3].minor.yy257 = yylhsminor.yy257;
2906 break;
2907 case 105: /* expr ::= FUNC2 LP expr COMMA expr RP */
2908 #line 724 "pikchr.y"
2909 {yylhsminor.yy257 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy257,yymsp[-1].minor.yy257);}
2910 #line 2935 "pikchr.c"
 
 
 
 
 
2911 yymsp[-5].minor.yy257 = yylhsminor.yy257;
2912 break;
2913 case 106: /* expr ::= DIST LP position COMMA position RP */
2914 #line 725 "pikchr.y"
2915 {yymsp[-5].minor.yy257 = pik_dist(&yymsp[-3].minor.yy175,&yymsp[-1].minor.yy175);}
2916 #line 2941 "pikchr.c"
2917 break;
2918 case 107: /* expr ::= place2 DOT_XY X */
2919 #line 726 "pikchr.y"
2920 {yylhsminor.yy257 = yymsp[-2].minor.yy175.x;}
2921 #line 2946 "pikchr.c"
2922 yymsp[-2].minor.yy257 = yylhsminor.yy257;
2923 break;
2924 case 108: /* expr ::= place2 DOT_XY Y */
2925 #line 727 "pikchr.y"
2926 {yylhsminor.yy257 = yymsp[-2].minor.yy175.y;}
2927 #line 2952 "pikchr.c"
2928 yymsp[-2].minor.yy257 = yylhsminor.yy257;
2929 break;
2930 case 109: /* expr ::= object DOT_L numproperty */
2931 case 110: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==110);
2932 case 111: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==111);
2933 #line 728 "pikchr.y"
2934 {yylhsminor.yy257=pik_property_of(yymsp[-2].minor.yy226,&yymsp[0].minor.yy0);}
2935 #line 2960 "pikchr.c"
2936 yymsp[-2].minor.yy257 = yylhsminor.yy257;
2937 break;
2938 default:
2939 /* (112) lvalue ::= ID */ yytestcase(yyruleno==112);
2940 /* (113) lvalue ::= FILL */ yytestcase(yyruleno==113);
2941 /* (114) lvalue ::= COLOR */ yytestcase(yyruleno==114);
2942 /* (115) lvalue ::= THICKNESS */ yytestcase(yyruleno==115);
2943 /* (116) rvalue ::= expr */ yytestcase(yyruleno==116);
2944 /* (117) print ::= PRINT */ yytestcase(yyruleno==117);
2945 /* (118) prlist ::= pritem (OPTIMIZED OUT) */ assert(yyruleno!=118);
2946 /* (119) prlist ::= prlist prsep pritem */ yytestcase(yyruleno==119);
2947 /* (120) direction ::= UP */ yytestcase(yyruleno==120);
2948 /* (121) direction ::= DOWN */ yytestcase(yyruleno==121);
2949 /* (122) direction ::= LEFT */ yytestcase(yyruleno==122);
2950 /* (123) direction ::= RIGHT */ yytestcase(yyruleno==123);
2951 /* (124) optrelexpr ::= relexpr (OPTIMIZED OUT) */ assert(yyruleno!=124);
2952 /* (125) attribute_list ::= alist */ yytestcase(yyruleno==125);
2953 /* (126) alist ::= */ yytestcase(yyruleno==126);
2954 /* (127) alist ::= alist attribute */ yytestcase(yyruleno==127);
2955 /* (128) attribute ::= boolproperty (OPTIMIZED OUT) */ assert(yyruleno!=128);
2956 /* (129) attribute ::= WITH withclause */ yytestcase(yyruleno==129);
2957 /* (130) go ::= GO */ yytestcase(yyruleno==130);
2958 /* (131) go ::= */ yytestcase(yyruleno==131);
2959 /* (132) even ::= UNTIL EVEN WITH */ yytestcase(yyruleno==132);
2960 /* (133) even ::= EVEN WITH */ yytestcase(yyruleno==133);
2961 /* (134) dashproperty ::= DOTTED */ yytestcase(yyruleno==134);
2962 /* (135) dashproperty ::= DASHED */ yytestcase(yyruleno==135);
2963 /* (136) colorproperty ::= FILL */ yytestcase(yyruleno==136);
2964 /* (137) colorproperty ::= COLOR */ yytestcase(yyruleno==137);
2965 /* (138) position ::= place */ yytestcase(yyruleno==138);
2966 /* (139) between ::= WAY BETWEEN */ yytestcase(yyruleno==139);
2967 /* (140) between ::= BETWEEN */ yytestcase(yyruleno==140);
2968 /* (141) between ::= OF THE WAY BETWEEN */ yytestcase(yyruleno==141);
2969 /* (142) place ::= place2 */ yytestcase(yyruleno==142);
2970 /* (143) edge ::= CENTER */ yytestcase(yyruleno==143);
2971 /* (144) edge ::= EDGEPT */ yytestcase(yyruleno==144);
2972 /* (145) edge ::= TOP */ yytestcase(yyruleno==145);
2973 /* (146) edge ::= BOTTOM */ yytestcase(yyruleno==146);
2974 /* (147) edge ::= START */ yytestcase(yyruleno==147);
2975 /* (148) edge ::= END */ yytestcase(yyruleno==148);
2976 /* (149) edge ::= RIGHT */ yytestcase(yyruleno==149);
2977 /* (150) edge ::= LEFT */ yytestcase(yyruleno==150);
2978 /* (151) object ::= objectname */ yytestcase(yyruleno==151);
2979 break;
2980 /********** End reduce actions ************************************************/
2981 };
2982 assert( yyruleno<sizeof(yyRuleInfoLhs)/sizeof(yyRuleInfoLhs[0]) );
2983 yygoto = yyRuleInfoLhs[yyruleno];
@@ -3041,11 +3057,11 @@
3041 pik_error(p, &TOKEN, "syntax error");
3042 }else{
3043 pik_error(p, 0, "syntax error");
3044 }
3045 UNUSED_PARAMETER(yymajor);
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
@@ -3274,11 +3290,11 @@
3274 #else
3275 (void)iToken;
3276 return 0;
3277 #endif
3278 }
3279 #line 733 "pikchr.y"
3280
3281
3282
3283 /* Chart of the 140 official HTML color names with their
3284 ** corresponding RGB value.
@@ -4845,11 +4861,11 @@
4845 }
4846
4847 /*
4848 ** Process an "assert( place1 == place2 )" statement. Always return NULL.
4849 */
4850 static PElem *pik_place_assert(Pik *p, PPoint *e1, PToken *pEq, PPoint *e2){
4851 char zE1[100], zE2[100], zMsg[210];
4852
4853 /* Convert the numbers to strings using %g for comparison. This
4854 ** limits the precision of the comparison to account for rounding error. */
4855 snprintf(zE1, sizeof(zE1), "(%g,%g)", e1->x, e1->y); zE1[sizeof(zE1)-1] = 0;
@@ -6369,11 +6385,15 @@
6369
6370 pElem->ptEnter = pElem->aPath[0];
6371 pElem->ptExit = pElem->aPath[pElem->nPath-1];
6372
6373 /* Compute the center of the line based on the bounding box over
6374 ** the vertexes */
 
 
 
 
6375 for(i=0; i<pElem->nPath; i++){
6376 pik_bbox_add_xy(&pElem->bbox, pElem->aPath[i].x, pElem->aPath[i].y);
6377 }
6378 pElem->ptAt.x = (pElem->bbox.ne.x + pElem->bbox.sw.x)/2.0;
6379 pElem->ptAt.y = (pElem->bbox.ne.y + pElem->bbox.sw.y)/2.0;
@@ -6384,15 +6404,13 @@
6384 pElem->h = pElem->bbox.ne.y - pElem->bbox.sw.y;
6385
6386 /* If this is a polygon (if it has the "close" attribute), then
6387 ** adjust the exit point */
6388 if( pElem->bClose ){
6389 /* "closed" lines work like block objects */
 
6390 pik_elem_set_exit(pElem, pElem->inDir);
6391 }else{
6392 /* For an open line, the "center" is half way between
6393 ** the .start and the .end */
6394 }
6395 }else{
6396 PNum w2 = pElem->w/2.0;
6397 PNum h2 = pElem->h/2.0;
6398 pElem->ptEnter = pElem->ptAt;
@@ -6535,11 +6553,10 @@
6535 static void pik_render(Pik *p, PEList *pEList){
6536 if( pEList==0 ) return;
6537 if( p->nErr==0 ){
6538 PNum thickness; /* Stroke width */
6539 PNum margin; /* Extra bounding box margin */
6540 PNum leftmargin; /* Extra bounding box area on the left */
6541 PNum w, h; /* Drawing width and height */
6542 PNum wArrow;
6543 PNum pikScale; /* Value of the "scale" variable */
6544
6545 /* Set up rendering parameters */
@@ -6546,24 +6563,23 @@
6546 pik_compute_layout_settings(p);
6547 thickness = pik_value(p,"thickness",9,0);
6548 if( thickness<=0.01 ) thickness = 0.01;
6549 margin = pik_value(p,"margin",6,0);
6550 margin += thickness;
6551 leftmargin = pik_value(p,"leftmargin",10,0);
6552 wArrow = p->wArrow*thickness;
6553
6554 /* Compute a bounding box over all objects so that we can know
6555 ** how big to declare the SVG canvas */
6556 pik_bbox_init(&p->bbox);
6557 pik_bbox_add_elist(p, pEList, wArrow);
6558
6559 /* Expand the bounding box slightly to account for line thickness
6560 ** and the optional "margin = EXPR" setting. */
6561 p->bbox.ne.x += margin;
6562 p->bbox.ne.y += margin;
6563 p->bbox.sw.x -= margin + leftmargin;
6564 p->bbox.sw.y -= margin;
6565
6566 /* Output the SVG */
6567 pik_append(p, "<svg",4);
6568 if( p->zClass ){
6569 pik_append(p, " class=\"", -1);
@@ -7131,10 +7147,11 @@
7131 static void usage(const char *argv0){
7132 fprintf(stderr, "usage: %s [OPTIONS] FILE ...\n", argv0);
7133 fprintf(stderr,
7134 "Convert Pikchr input files into SVG.\n"
7135 "Options:\n"
 
7136 " --svg-only Omit raw SVG without the HTML wrapper\n"
7137 );
7138 exit(1);
7139 }
7140
@@ -7166,10 +7183,11 @@
7166 ** line.
7167 */
7168 int main(int argc, char **argv){
7169 int i;
7170 int bSvgOnly = 0; /* Output SVG only. No HTML wrapper */
 
7171 const char *zHtmlHdr =
7172 "<!DOCTYPE html>\n"
7173 "<html lang=\"en-US\">\n"
7174 "<head>\n<title>PIKCHR Test</title>\n"
7175 "<style>\n"
@@ -7201,10 +7219,13 @@
7201
7202 if( argv[i][0]=='-' ){
7203 char *z = argv[i];
7204 z++;
7205 if( z[0]=='-' ) z++;
 
 
 
7206 if( strcmp(z,"svg-only")==0 ){
7207 if( zHtmlHdr==0 ){
7208 fprintf(stderr, "the \"%s\" option must come first\n",argv[i]);
7209 exit(1);
7210 }
@@ -7234,13 +7255,12 @@
7234 fclose(in);
7235 zIn[sz] = 0;
7236 zOut = pikchr(zIn, "pikchr", 0, &w, &h);
7237 if( zOut==0 ){
7238 fprintf(stderr, "pikchr() returns NULL. Out of memory?\n");
7239 exit(1);
7240 }
7241 if( bSvgOnly ){
7242 printf("%s\n", zOut);
7243 }else{
7244 if( zHtmlHdr ){
7245 printf("%s", zHtmlHdr);
7246 zHtmlHdr = 0;
@@ -7265,6 +7285,6 @@
7265 }
7266 return 0;
7267 }
7268 #endif /* PIKCHR_SHELL */
7269
7270 #line 7295 "pikchr.c"
7271
--- src/pikchr.c
+++ src/pikchr.c
@@ -443,11 +443,11 @@
443 static PPoint pik_nth_vertex(Pik *p, PToken *pNth, PToken *pErr, PElem *pElem);
444 static PToken pik_next_semantic_token(PToken *pThis);
445 static void pik_compute_layout_settings(Pik*);
446 static void pik_behind(Pik*,PElem*);
447 static PElem *pik_assert(Pik*,PNum,PToken*,PNum);
448 static PElem *pik_position_assert(Pik*,PPoint*,PToken*,PPoint*);
449 static PNum pik_dist(PPoint*,PPoint*);
450
451
452 #line 478 "pikchr.c"
453 /**************** End of %include directives **********************************/
@@ -633,21 +633,21 @@
633 #define pik_parserCTX_PARAM ,p
634 #define pik_parserCTX_FETCH Pik *p=yypParser->p;
635 #define pik_parserCTX_STORE yypParser->p=p;
636 #define YYFALLBACK 1
637 #define YYNSTATE 162
638 #define YYNRULE 153
639 #define YYNRULE_WITH_ACTION 113
640 #define YYNTOKEN 95
641 #define YY_MAX_SHIFT 161
642 #define YY_MIN_SHIFTREDUCE 282
643 #define YY_MAX_SHIFTREDUCE 434
644 #define YY_ERROR_ACTION 435
645 #define YY_ACCEPT_ACTION 436
646 #define YY_NO_ACTION 437
647 #define YY_MIN_REDUCE 438
648 #define YY_MAX_REDUCE 590
649 /************* End control #defines *******************************************/
650 #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
651
652 /* Define the yytestcase() macro to be a no-op if is not already defined
653 ** otherwise.
@@ -710,321 +710,328 @@
710 ** yy_reduce_ofst[] For each state, the offset into yy_action for
711 ** shifting non-terminals after a reduce.
712 ** yy_default[] Default action for each state.
713 **
714 *********** Begin parsing tables **********************************************/
715 #define YY_ACTTAB_COUNT (1244)
716 static const YYACTIONTYPE yy_action[] = {
717 /* 0 */ 564, 438, 25, 444, 29, 74, 127, 146, 54, 51,
718 /* 10 */ 564, 36, 445, 113, 120, 159, 119, 126, 419, 420,
719 /* 20 */ 333, 548, 81, 520, 549, 550, 564, 64, 63, 62,
720 /* 30 */ 61, 316, 317, 9, 8, 33, 147, 32, 7, 71,
721 /* 40 */ 125, 28, 329, 66, 568, 300, 50, 333, 333, 333,
722 /* 50 */ 333, 417, 418, 334, 335, 336, 337, 338, 339, 340,
723 /* 60 */ 341, 465, 64, 63, 62, 61, 121, 439, 446, 29,
724 /* 70 */ 36, 465, 30, 442, 368, 292, 486, 159, 119, 419,
725 /* 80 */ 420, 333, 31, 81, 161, 350, 304, 465, 436, 27,
726 /* 90 */ 324, 13, 316, 317, 9, 8, 33, 69, 32, 7,
727 /* 100 */ 71, 125, 83, 329, 66, 483, 159, 119, 333, 333,
728 /* 110 */ 333, 333, 417, 418, 334, 335, 336, 337, 338, 339,
729 /* 120 */ 340, 341, 386, 427, 46, 59, 60, 64, 63, 62,
730 /* 130 */ 61, 307, 84, 368, 322, 35, 2, 293, 386, 427,
731 /* 140 */ 108, 59, 60, 80, 4, 302, 79, 3, 117, 368,
732 /* 150 */ 433, 432, 2, 62, 61, 154, 154, 154, 386, 390,
733 /* 160 */ 391, 59, 60, 518, 159, 119, 433, 432, 47, 102,
734 /* 170 */ 38, 67, 42, 48, 37, 295, 296, 297, 69, 299,
735 /* 180 */ 372, 155, 426, 343, 343, 343, 343, 343, 343, 343,
736 /* 190 */ 343, 343, 343, 371, 157, 566, 77, 566, 426, 106,
737 /* 200 */ 76, 428, 429, 430, 431, 5, 6, 117, 385, 153,
738 /* 210 */ 152, 151, 523, 159, 119, 106, 416, 428, 429, 430,
739 /* 220 */ 431, 415, 427, 117, 385, 153, 152, 151, 386, 427,
740 /* 230 */ 129, 59, 60, 389, 1, 106, 521, 159, 119, 368,
741 /* 240 */ 11, 12, 2, 117, 385, 153, 152, 151, 65, 433,
742 /* 250 */ 432, 64, 63, 62, 61, 349, 433, 432, 136, 140,
743 /* 260 */ 138, 64, 63, 62, 61, 386, 75, 427, 59, 60,
744 /* 270 */ 53, 424, 422, 45, 137, 14, 368, 16, 18, 42,
745 /* 280 */ 55, 426, 154, 154, 154, 44, 145, 144, 426, 64,
746 /* 290 */ 63, 62, 61, 43, 433, 432, 64, 63, 62, 61,
747 /* 300 */ 428, 429, 430, 431, 19, 106, 114, 428, 429, 430,
748 /* 310 */ 431, 20, 68, 117, 385, 153, 152, 151, 15, 352,
749 /* 320 */ 23, 22, 21, 384, 376, 17, 426, 370, 156, 24,
750 /* 330 */ 26, 143, 139, 423, 140, 138, 64, 63, 62, 61,
751 /* 340 */ 374, 57, 106, 58, 375, 428, 429, 430, 431, 383,
752 /* 350 */ 117, 385, 153, 152, 151, 55, 64, 63, 62, 61,
753 /* 360 */ 369, 145, 144, 403, 404, 405, 406, 158, 43, 348,
754 /* 370 */ 70, 140, 138, 64, 63, 62, 61, 386, 464, 39,
755 /* 380 */ 59, 60, 64, 63, 62, 61, 437, 437, 368, 118,
756 /* 390 */ 437, 42, 55, 437, 437, 383, 22, 21, 145, 144,
757 /* 400 */ 395, 49, 437, 524, 24, 43, 143, 139, 423, 437,
758 /* 410 */ 437, 131, 464, 124, 437, 437, 437, 396, 397, 398,
759 /* 420 */ 400, 80, 437, 302, 79, 437, 403, 404, 405, 406,
760 /* 430 */ 440, 446, 29, 22, 21, 386, 442, 437, 59, 60,
761 /* 440 */ 437, 24, 524, 143, 139, 423, 368, 161, 524, 42,
762 /* 450 */ 437, 524, 27, 437, 106, 437, 386, 141, 437, 59,
763 /* 460 */ 60, 437, 117, 385, 153, 152, 151, 368, 437, 437,
764 /* 470 */ 42, 437, 386, 142, 437, 59, 60, 386, 130, 128,
765 /* 480 */ 59, 60, 437, 368, 370, 156, 42, 437, 368, 437,
766 /* 490 */ 386, 42, 437, 59, 60, 386, 437, 437, 59, 60,
767 /* 500 */ 437, 102, 437, 437, 42, 437, 368, 437, 437, 40,
768 /* 510 */ 437, 437, 106, 437, 386, 437, 437, 59, 60, 437,
769 /* 520 */ 117, 385, 153, 152, 151, 368, 437, 437, 41, 64,
770 /* 530 */ 63, 62, 61, 106, 64, 63, 62, 61, 437, 160,
771 /* 540 */ 437, 117, 385, 153, 152, 151, 118, 387, 56, 106,
772 /* 550 */ 437, 437, 437, 437, 106, 437, 437, 117, 385, 153,
773 /* 560 */ 152, 151, 117, 385, 153, 152, 151, 106, 64, 63,
774 /* 570 */ 62, 61, 106, 437, 437, 117, 385, 153, 152, 151,
775 /* 580 */ 117, 385, 153, 152, 151, 419, 420, 333, 437, 437,
776 /* 590 */ 437, 106, 437, 437, 437, 88, 437, 437, 437, 117,
777 /* 600 */ 385, 153, 152, 151, 120, 159, 119, 437, 437, 437,
778 /* 610 */ 10, 470, 470, 437, 333, 333, 333, 333, 417, 418,
779 /* 620 */ 73, 437, 146, 437, 437, 437, 150, 112, 113, 120,
780 /* 630 */ 159, 119, 437, 74, 437, 146, 64, 63, 62, 61,
781 /* 640 */ 122, 113, 120, 159, 119, 72, 437, 146, 437, 347,
782 /* 650 */ 437, 147, 123, 113, 120, 159, 119, 437, 74, 437,
783 /* 660 */ 146, 437, 437, 437, 147, 488, 113, 120, 159, 119,
784 /* 670 */ 437, 437, 74, 437, 146, 437, 147, 437, 437, 487,
785 /* 680 */ 113, 120, 159, 119, 74, 437, 146, 437, 437, 147,
786 /* 690 */ 437, 481, 113, 120, 159, 119, 437, 437, 437, 74,
787 /* 700 */ 437, 146, 88, 147, 437, 437, 475, 113, 120, 159,
788 /* 710 */ 119, 120, 159, 119, 74, 147, 146, 437, 110, 110,
789 /* 720 */ 437, 474, 113, 120, 159, 119, 437, 74, 437, 146,
790 /* 730 */ 147, 437, 437, 150, 471, 113, 120, 159, 119, 437,
791 /* 740 */ 74, 437, 146, 437, 437, 147, 437, 132, 113, 120,
792 /* 750 */ 159, 119, 74, 437, 146, 437, 437, 437, 147, 507,
793 /* 760 */ 113, 120, 159, 119, 437, 74, 437, 146, 437, 437,
794 /* 770 */ 437, 147, 135, 113, 120, 159, 119, 437, 437, 74,
795 /* 780 */ 437, 146, 437, 147, 437, 437, 515, 113, 120, 159,
796 /* 790 */ 119, 74, 437, 146, 437, 437, 147, 437, 517, 113,
797 /* 800 */ 120, 159, 119, 437, 437, 437, 74, 437, 146, 88,
798 /* 810 */ 147, 437, 437, 514, 113, 120, 159, 119, 120, 159,
799 /* 820 */ 119, 74, 147, 146, 437, 111, 111, 437, 516, 113,
800 /* 830 */ 120, 159, 119, 437, 74, 437, 146, 147, 437, 437,
801 /* 840 */ 150, 513, 113, 120, 159, 119, 437, 74, 437, 146,
802 /* 850 */ 437, 437, 147, 437, 512, 113, 120, 159, 119, 74,
803 /* 860 */ 437, 146, 437, 437, 437, 147, 511, 113, 120, 159,
804 /* 870 */ 119, 437, 74, 437, 146, 437, 437, 437, 147, 510,
805 /* 880 */ 113, 120, 159, 119, 437, 437, 74, 437, 146, 437,
806 /* 890 */ 147, 437, 437, 509, 113, 120, 159, 119, 74, 437,
807 /* 900 */ 146, 107, 437, 147, 437, 148, 113, 120, 159, 119,
808 /* 910 */ 120, 159, 119, 74, 469, 146, 85, 147, 437, 437,
809 /* 920 */ 149, 113, 120, 159, 119, 120, 159, 119, 74, 147,
810 /* 930 */ 146, 437, 150, 437, 437, 134, 113, 120, 159, 119,
811 /* 940 */ 437, 74, 437, 146, 147, 107, 437, 150, 133, 113,
812 /* 950 */ 120, 159, 119, 437, 120, 159, 119, 437, 454, 147,
813 /* 960 */ 437, 64, 63, 62, 61, 78, 78, 437, 88, 437,
814 /* 970 */ 437, 437, 147, 437, 383, 437, 150, 120, 159, 119,
815 /* 980 */ 52, 437, 437, 437, 82, 437, 88, 437, 437, 437,
816 /* 990 */ 437, 457, 437, 34, 107, 120, 159, 119, 437, 150,
817 /* 1000 */ 437, 437, 466, 120, 159, 119, 437, 454, 437, 109,
818 /* 1010 */ 439, 446, 29, 437, 437, 558, 442, 150, 437, 437,
819 /* 1020 */ 107, 64, 63, 62, 61, 150, 86, 161, 437, 120,
820 /* 1030 */ 159, 119, 27, 443, 388, 120, 159, 119, 98, 437,
821 /* 1040 */ 437, 437, 437, 89, 437, 437, 437, 120, 159, 119,
822 /* 1050 */ 90, 150, 120, 159, 119, 87, 437, 150, 437, 120,
823 /* 1060 */ 159, 119, 99, 437, 120, 159, 119, 437, 100, 150,
824 /* 1070 */ 437, 120, 159, 119, 150, 437, 437, 120, 159, 119,
825 /* 1080 */ 101, 150, 64, 63, 62, 61, 150, 437, 437, 120,
826 /* 1090 */ 159, 119, 437, 150, 91, 383, 437, 103, 437, 150,
827 /* 1100 */ 437, 437, 437, 120, 159, 119, 120, 159, 119, 92,
828 /* 1110 */ 437, 150, 93, 437, 437, 437, 437, 437, 120, 159,
829 /* 1120 */ 119, 120, 159, 119, 437, 150, 104, 437, 150, 437,
830 /* 1130 */ 437, 437, 437, 437, 437, 120, 159, 119, 94, 437,
831 /* 1140 */ 150, 437, 437, 150, 437, 437, 437, 120, 159, 119,
832 /* 1150 */ 105, 437, 437, 95, 437, 437, 437, 150, 437, 120,
833 /* 1160 */ 159, 119, 120, 159, 119, 96, 437, 437, 97, 150,
834 /* 1170 */ 437, 437, 437, 437, 120, 159, 119, 120, 159, 119,
835 /* 1180 */ 538, 150, 437, 437, 150, 437, 437, 437, 437, 120,
836 /* 1190 */ 159, 119, 437, 537, 437, 437, 150, 536, 437, 150,
837 /* 1200 */ 437, 437, 120, 159, 119, 535, 120, 159, 119, 115,
838 /* 1210 */ 437, 150, 116, 437, 120, 159, 119, 437, 120, 159,
839 /* 1220 */ 119, 120, 159, 119, 150, 437, 437, 437, 150, 437,
840 /* 1230 */ 437, 437, 437, 437, 437, 437, 150, 437, 437, 437,
841 /* 1240 */ 150, 437, 437, 150,
842 };
843 static const YYCODETYPE yy_lookahead[] = {
844 /* 0 */ 0, 0, 129, 97, 98, 99, 101, 101, 4, 5,
845 /* 10 */ 10, 10, 106, 107, 108, 109, 110, 101, 18, 19,
846 /* 20 */ 20, 100, 22, 101, 103, 104, 26, 4, 5, 6,
847 /* 30 */ 7, 31, 32, 33, 34, 35, 130, 37, 38, 39,
848 /* 40 */ 40, 102, 42, 43, 128, 23, 23, 47, 48, 49,
849 /* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
850 /* 60 */ 60, 0, 4, 5, 6, 7, 95, 96, 97, 98,
851 /* 70 */ 10, 10, 121, 102, 12, 17, 108, 109, 110, 18,
852 /* 80 */ 19, 20, 123, 22, 113, 17, 26, 26, 117, 118,
853 /* 90 */ 2, 23, 31, 32, 33, 34, 35, 3, 37, 38,
854 /* 100 */ 39, 40, 111, 42, 43, 108, 109, 110, 47, 48,
855 /* 110 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
856 /* 120 */ 59, 60, 1, 2, 36, 4, 5, 4, 5, 6,
857 /* 130 */ 7, 8, 111, 12, 2, 124, 15, 17, 1, 2,
858 /* 140 */ 78, 4, 5, 22, 15, 24, 25, 16, 86, 12,
859 /* 150 */ 29, 30, 15, 6, 7, 18, 19, 20, 1, 92,
860 /* 160 */ 93, 4, 5, 108, 109, 110, 29, 30, 36, 12,
861 /* 170 */ 100, 41, 15, 103, 104, 18, 19, 20, 84, 22,
862 /* 180 */ 24, 25, 61, 61, 62, 63, 64, 65, 66, 67,
863 /* 190 */ 68, 69, 70, 24, 25, 125, 126, 127, 61, 78,
864 /* 200 */ 46, 80, 81, 82, 83, 38, 38, 86, 87, 88,
865 /* 210 */ 89, 90, 108, 109, 110, 78, 39, 80, 81, 82,
866 /* 220 */ 83, 39, 2, 86, 87, 88, 89, 90, 1, 2,
867 /* 230 */ 45, 4, 5, 17, 13, 78, 108, 109, 110, 12,
868 /* 240 */ 23, 71, 15, 86, 87, 88, 89, 90, 94, 29,
869 /* 250 */ 30, 4, 5, 6, 7, 17, 29, 30, 75, 2,
870 /* 260 */ 3, 4, 5, 6, 7, 1, 46, 2, 4, 5,
871 /* 270 */ 23, 76, 76, 16, 77, 3, 12, 3, 3, 15,
872 /* 280 */ 23, 61, 18, 19, 20, 36, 29, 30, 61, 4,
873 /* 290 */ 5, 6, 7, 36, 29, 30, 4, 5, 6, 7,
874 /* 300 */ 80, 81, 82, 83, 3, 78, 91, 80, 81, 82,
875 /* 310 */ 83, 3, 3, 86, 87, 88, 89, 90, 33, 73,
876 /* 320 */ 23, 64, 65, 17, 26, 33, 61, 24, 25, 72,
877 /* 330 */ 15, 74, 75, 76, 2, 3, 4, 5, 6, 7,
878 /* 340 */ 26, 15, 78, 15, 26, 80, 81, 82, 83, 17,
879 /* 350 */ 86, 87, 88, 89, 90, 23, 4, 5, 6, 7,
880 /* 360 */ 12, 29, 30, 27, 28, 29, 30, 85, 36, 17,
881 /* 370 */ 3, 2, 3, 4, 5, 6, 7, 1, 2, 11,
882 /* 380 */ 4, 5, 4, 5, 6, 7, 131, 131, 12, 86,
883 /* 390 */ 131, 15, 23, 131, 131, 17, 64, 65, 29, 30,
884 /* 400 */ 1, 23, 131, 46, 72, 36, 74, 75, 76, 131,
885 /* 410 */ 131, 12, 36, 14, 131, 131, 131, 18, 19, 20,
886 /* 420 */ 21, 22, 131, 24, 25, 131, 27, 28, 29, 30,
887 /* 430 */ 96, 97, 98, 64, 65, 1, 102, 131, 4, 5,
888 /* 440 */ 131, 72, 85, 74, 75, 76, 12, 113, 91, 15,
889 /* 450 */ 131, 94, 118, 131, 78, 131, 1, 2, 131, 4,
890 /* 460 */ 5, 131, 86, 87, 88, 89, 90, 12, 131, 131,
891 /* 470 */ 15, 131, 1, 2, 131, 4, 5, 1, 44, 45,
892 /* 480 */ 4, 5, 131, 12, 24, 25, 15, 131, 12, 131,
893 /* 490 */ 1, 15, 131, 4, 5, 1, 131, 131, 4, 5,
894 /* 500 */ 131, 12, 131, 131, 15, 131, 12, 131, 131, 15,
895 /* 510 */ 131, 131, 78, 131, 1, 131, 131, 4, 5, 131,
896 /* 520 */ 86, 87, 88, 89, 90, 12, 131, 131, 15, 4,
897 /* 530 */ 5, 6, 7, 78, 4, 5, 6, 7, 131, 79,
898 /* 540 */ 131, 86, 87, 88, 89, 90, 86, 17, 23, 78,
899 /* 550 */ 131, 131, 131, 131, 78, 131, 131, 86, 87, 88,
900 /* 560 */ 89, 90, 86, 87, 88, 89, 90, 78, 4, 5,
901 /* 570 */ 6, 7, 78, 131, 131, 86, 87, 88, 89, 90,
902 /* 580 */ 86, 87, 88, 89, 90, 18, 19, 20, 131, 131,
903 /* 590 */ 131, 78, 131, 131, 131, 99, 131, 131, 131, 86,
904 /* 600 */ 87, 88, 89, 90, 108, 109, 110, 131, 131, 131,
905 /* 610 */ 114, 115, 116, 131, 47, 48, 49, 50, 51, 52,
906 /* 620 */ 99, 131, 101, 131, 131, 131, 130, 106, 107, 108,
907 /* 630 */ 109, 110, 131, 99, 131, 101, 4, 5, 6, 7,
908 /* 640 */ 106, 107, 108, 109, 110, 99, 131, 101, 131, 17,
909 /* 650 */ 131, 130, 106, 107, 108, 109, 110, 131, 99, 131,
910 /* 660 */ 101, 131, 131, 131, 130, 106, 107, 108, 109, 110,
911 /* 670 */ 131, 131, 99, 131, 101, 131, 130, 131, 131, 106,
912 /* 680 */ 107, 108, 109, 110, 99, 131, 101, 131, 131, 130,
913 /* 690 */ 131, 106, 107, 108, 109, 110, 131, 131, 131, 99,
914 /* 700 */ 131, 101, 99, 130, 131, 131, 106, 107, 108, 109,
915 /* 710 */ 110, 108, 109, 110, 99, 130, 101, 131, 115, 116,
916 /* 720 */ 131, 106, 107, 108, 109, 110, 131, 99, 131, 101,
917 /* 730 */ 130, 131, 131, 130, 106, 107, 108, 109, 110, 131,
918 /* 740 */ 99, 131, 101, 131, 131, 130, 131, 106, 107, 108,
919 /* 750 */ 109, 110, 99, 131, 101, 131, 131, 131, 130, 106,
920 /* 760 */ 107, 108, 109, 110, 131, 99, 131, 101, 131, 131,
921 /* 770 */ 131, 130, 106, 107, 108, 109, 110, 131, 131, 99,
922 /* 780 */ 131, 101, 131, 130, 131, 131, 106, 107, 108, 109,
923 /* 790 */ 110, 99, 131, 101, 131, 131, 130, 131, 106, 107,
924 /* 800 */ 108, 109, 110, 131, 131, 131, 99, 131, 101, 99,
925 /* 810 */ 130, 131, 131, 106, 107, 108, 109, 110, 108, 109,
926 /* 820 */ 110, 99, 130, 101, 131, 115, 116, 131, 106, 107,
927 /* 830 */ 108, 109, 110, 131, 99, 131, 101, 130, 131, 131,
928 /* 840 */ 130, 106, 107, 108, 109, 110, 131, 99, 131, 101,
929 /* 850 */ 131, 131, 130, 131, 106, 107, 108, 109, 110, 99,
930 /* 860 */ 131, 101, 131, 131, 131, 130, 106, 107, 108, 109,
931 /* 870 */ 110, 131, 99, 131, 101, 131, 131, 131, 130, 106,
932 /* 880 */ 107, 108, 109, 110, 131, 131, 99, 131, 101, 131,
933 /* 890 */ 130, 131, 131, 106, 107, 108, 109, 110, 99, 131,
934 /* 900 */ 101, 99, 131, 130, 131, 106, 107, 108, 109, 110,
935 /* 910 */ 108, 109, 110, 99, 112, 101, 99, 130, 131, 131,
936 /* 920 */ 106, 107, 108, 109, 110, 108, 109, 110, 99, 130,
937 /* 930 */ 101, 131, 130, 131, 131, 106, 107, 108, 109, 110,
938 /* 940 */ 131, 99, 131, 101, 130, 99, 131, 130, 106, 107,
939 /* 950 */ 108, 109, 110, 131, 108, 109, 110, 131, 112, 130,
940 /* 960 */ 131, 4, 5, 6, 7, 119, 120, 131, 99, 131,
941 /* 970 */ 131, 131, 130, 131, 17, 131, 130, 108, 109, 110,
942 /* 980 */ 23, 131, 131, 131, 115, 131, 99, 131, 131, 131,
943 /* 990 */ 131, 122, 131, 124, 99, 108, 109, 110, 131, 130,
944 /* 1000 */ 131, 131, 115, 108, 109, 110, 131, 112, 131, 95,
945 /* 1010 */ 96, 97, 98, 131, 131, 120, 102, 130, 131, 131,
946 /* 1020 */ 99, 4, 5, 6, 7, 130, 99, 113, 131, 108,
947 /* 1030 */ 109, 110, 118, 112, 17, 108, 109, 110, 99, 131,
948 /* 1040 */ 131, 131, 131, 99, 131, 131, 131, 108, 109, 110,
949 /* 1050 */ 99, 130, 108, 109, 110, 99, 131, 130, 131, 108,
950 /* 1060 */ 109, 110, 99, 131, 108, 109, 110, 131, 99, 130,
951 /* 1070 */ 131, 108, 109, 110, 130, 131, 131, 108, 109, 110,
952 /* 1080 */ 99, 130, 4, 5, 6, 7, 130, 131, 131, 108,
953 /* 1090 */ 109, 110, 131, 130, 99, 17, 131, 99, 131, 130,
954 /* 1100 */ 131, 131, 131, 108, 109, 110, 108, 109, 110, 99,
955 /* 1110 */ 131, 130, 99, 131, 131, 131, 131, 131, 108, 109,
956 /* 1120 */ 110, 108, 109, 110, 131, 130, 99, 131, 130, 131,
957 /* 1130 */ 131, 131, 131, 131, 131, 108, 109, 110, 99, 131,
958 /* 1140 */ 130, 131, 131, 130, 131, 131, 131, 108, 109, 110,
959 /* 1150 */ 99, 131, 131, 99, 131, 131, 131, 130, 131, 108,
960 /* 1160 */ 109, 110, 108, 109, 110, 99, 131, 131, 99, 130,
961 /* 1170 */ 131, 131, 131, 131, 108, 109, 110, 108, 109, 110,
962 /* 1180 */ 99, 130, 131, 131, 130, 131, 131, 131, 131, 108,
963 /* 1190 */ 109, 110, 131, 99, 131, 131, 130, 99, 131, 130,
964 /* 1200 */ 131, 131, 108, 109, 110, 99, 108, 109, 110, 99,
965 /* 1210 */ 131, 130, 99, 131, 108, 109, 110, 131, 108, 109,
966 /* 1220 */ 110, 108, 109, 110, 130, 131, 131, 131, 130, 131,
967 /* 1230 */ 131, 131, 131, 131, 131, 131, 130, 131, 131, 131,
968 /* 1240 */ 130, 131, 131, 130, 95, 95, 95, 95, 95, 95,
969 /* 1250 */ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
970 /* 1260 */ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
971 /* 1270 */ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
972 /* 1280 */ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
973 /* 1290 */ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
974 /* 1300 */ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
975 /* 1310 */ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
976 /* 1320 */ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
977 /* 1330 */ 95, 95, 95, 95, 95, 95, 95, 95, 95,
978 };
979 #define YY_SHIFT_COUNT (161)
980 #define YY_SHIFT_MIN (0)
981 #define YY_SHIFT_MAX (1078)
982 static const unsigned short int yy_shift_ofst[] = {
983 /* 0 */ 399, 121, 137, 227, 227, 227, 227, 227, 227, 227,
984 /* 10 */ 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
985 /* 20 */ 227, 227, 227, 227, 227, 227, 227, 157, 434, 476,
986 /* 30 */ 157, 399, 376, 376, 0, 61, 399, 489, 476, 489,
987 /* 40 */ 264, 264, 264, 455, 471, 476, 476, 476, 476, 476,
988 /* 50 */ 476, 494, 476, 476, 513, 476, 476, 476, 476, 476,
989 /* 60 */ 476, 476, 476, 476, 476, 567, 62, 62, 62, 62,
990 /* 70 */ 62, 220, 257, 332, 369, 265, 265, 336, 22, 1244,
991 /* 80 */ 1244, 1244, 1244, 122, 122, 378, 957, 58, 123, 285,
992 /* 90 */ 292, 352, 23, 632, 247, 1017, 525, 530, 1078, 564,
993 /* 100 */ 564, 564, 357, 564, 564, 564, 460, 564, 303, 60,
994 /* 110 */ 88, 132, 68, 4, 67, 147, 147, 156, 169, 94,
995 /* 120 */ 154, 1, 120, 131, 129, 130, 167, 168, 177, 182,
996 /* 130 */ 185, 221, 216, 217, 170, 238, 195, 183, 197, 196,
997 /* 140 */ 272, 274, 275, 249, 301, 308, 309, 215, 246, 297,
998 /* 150 */ 215, 315, 326, 328, 306, 298, 314, 318, 348, 282,
999 /* 160 */ 367, 368,
1000 };
1001 #define YY_REDUCE_COUNT (82)
1002 #define YY_REDUCE_MIN (-127)
1003 #define YY_REDUCE_MAX (1113)
1004 static const short yy_reduce_ofst[] = {
1005 /* 0 */ -29, -94, 521, 534, 546, 559, 573, 585, 600, 615,
1006 /* 10 */ 628, 641, 653, 666, 680, 692, 707, 722, 735, 748,
1007 /* 20 */ 760, 773, 787, 799, 814, 829, 842, 846, 496, 869,
1008 /* 30 */ 895, 914, 603, 710, 70, 70, 334, 802, 887, 921,
1009 /* 40 */ 817, 927, 939, 944, 951, 956, 963, 969, 981, 995,
1010 /* 50 */ 998, 1010, 1013, 1027, 1039, 1051, 1054, 1066, 1069, 1081,
1011 /* 60 */ 1094, 1098, 1106, 1110, 1113, -79, -32, -3, 55, 104,
1012 /* 70 */ 128, -84, -127, -127, -127, -95, -78, -61, -49, -41,
1013 /* 80 */ -9, 21, 11,
1014 };
1015 static const YYACTIONTYPE yy_default[] = {
1016 /* 0 */ 441, 435, 435, 435, 435, 435, 435, 435, 435, 435,
1017 /* 10 */ 435, 435, 435, 435, 435, 435, 435, 435, 435, 435,
1018 /* 20 */ 435, 435, 435, 435, 435, 435, 435, 435, 464, 565,
1019 /* 30 */ 435, 441, 569, 476, 570, 570, 441, 435, 435, 435,
1020 /* 40 */ 435, 435, 435, 435, 435, 435, 435, 435, 468, 435,
1021 /* 50 */ 435, 435, 435, 435, 435, 435, 435, 435, 435, 435,
1022 /* 60 */ 435, 435, 435, 435, 435, 435, 435, 435, 435, 435,
1023 /* 70 */ 435, 435, 435, 435, 435, 435, 435, 435, 447, 461,
1024 /* 80 */ 498, 498, 565, 459, 484, 435, 435, 435, 462, 435,
1025 /* 90 */ 435, 435, 435, 435, 435, 435, 435, 435, 435, 479,
1026 /* 100 */ 477, 467, 450, 502, 501, 500, 435, 555, 435, 435,
1027 /* 110 */ 435, 435, 435, 577, 435, 534, 533, 529, 435, 522,
1028 /* 120 */ 519, 435, 435, 435, 435, 482, 435, 435, 435, 435,
1029 /* 130 */ 435, 435, 435, 435, 435, 435, 435, 435, 435, 435,
1030 /* 140 */ 435, 435, 435, 435, 435, 435, 435, 581, 435, 435,
1031 /* 150 */ 435, 435, 435, 435, 435, 435, 435, 435, 435, 590,
1032 /* 160 */ 435, 435,
1033 };
1034 /********** End of lemon-generated parsing tables *****************************/
1035
1036 /* The next table maps tokens (terminal symbols) into fallback tokens.
1037 ** If a construct like the following:
@@ -1372,11 +1379,11 @@
1379 /* 6 */ "element ::= PLACENAME COLON unnamed_element",
1380 /* 7 */ "element ::= PLACENAME COLON position",
1381 /* 8 */ "element ::= unnamed_element",
1382 /* 9 */ "element ::= print prlist",
1383 /* 10 */ "element ::= ASSERT LP expr EQ expr RP",
1384 /* 11 */ "element ::= ASSERT LP position EQ position RP",
1385 /* 12 */ "rvalue ::= PLACENAME",
1386 /* 13 */ "pritem ::= FILL",
1387 /* 14 */ "pritem ::= COLOR",
1388 /* 15 */ "pritem ::= THICKNESS",
1389 /* 16 */ "pritem ::= rvalue",
@@ -1463,60 +1470,61 @@
1470 /* 97 */ "expr ::= expr STAR expr",
1471 /* 98 */ "expr ::= expr SLASH expr",
1472 /* 99 */ "expr ::= MINUS expr",
1473 /* 100 */ "expr ::= PLUS expr",
1474 /* 101 */ "expr ::= LP expr RP",
1475 /* 102 */ "expr ::= LP FILL|COLOR|THICKNESS RP",
1476 /* 103 */ "expr ::= NUMBER",
1477 /* 104 */ "expr ::= ID",
1478 /* 105 */ "expr ::= FUNC1 LP expr RP",
1479 /* 106 */ "expr ::= FUNC2 LP expr COMMA expr RP",
1480 /* 107 */ "expr ::= DIST LP position COMMA position RP",
1481 /* 108 */ "expr ::= place2 DOT_XY X",
1482 /* 109 */ "expr ::= place2 DOT_XY Y",
1483 /* 110 */ "expr ::= object DOT_L numproperty",
1484 /* 111 */ "expr ::= object DOT_L dashproperty",
1485 /* 112 */ "expr ::= object DOT_L colorproperty",
1486 /* 113 */ "lvalue ::= ID",
1487 /* 114 */ "lvalue ::= FILL",
1488 /* 115 */ "lvalue ::= COLOR",
1489 /* 116 */ "lvalue ::= THICKNESS",
1490 /* 117 */ "rvalue ::= expr",
1491 /* 118 */ "print ::= PRINT",
1492 /* 119 */ "prlist ::= pritem",
1493 /* 120 */ "prlist ::= prlist prsep pritem",
1494 /* 121 */ "direction ::= UP",
1495 /* 122 */ "direction ::= DOWN",
1496 /* 123 */ "direction ::= LEFT",
1497 /* 124 */ "direction ::= RIGHT",
1498 /* 125 */ "optrelexpr ::= relexpr",
1499 /* 126 */ "attribute_list ::= alist",
1500 /* 127 */ "alist ::=",
1501 /* 128 */ "alist ::= alist attribute",
1502 /* 129 */ "attribute ::= boolproperty",
1503 /* 130 */ "attribute ::= WITH withclause",
1504 /* 131 */ "go ::= GO",
1505 /* 132 */ "go ::=",
1506 /* 133 */ "even ::= UNTIL EVEN WITH",
1507 /* 134 */ "even ::= EVEN WITH",
1508 /* 135 */ "dashproperty ::= DOTTED",
1509 /* 136 */ "dashproperty ::= DASHED",
1510 /* 137 */ "colorproperty ::= FILL",
1511 /* 138 */ "colorproperty ::= COLOR",
1512 /* 139 */ "position ::= place",
1513 /* 140 */ "between ::= WAY BETWEEN",
1514 /* 141 */ "between ::= BETWEEN",
1515 /* 142 */ "between ::= OF THE WAY BETWEEN",
1516 /* 143 */ "place ::= place2",
1517 /* 144 */ "edge ::= CENTER",
1518 /* 145 */ "edge ::= EDGEPT",
1519 /* 146 */ "edge ::= TOP",
1520 /* 147 */ "edge ::= BOTTOM",
1521 /* 148 */ "edge ::= START",
1522 /* 149 */ "edge ::= END",
1523 /* 150 */ "edge ::= RIGHT",
1524 /* 151 */ "edge ::= LEFT",
1525 /* 152 */ "object ::= objectname",
1526 };
1527 #endif /* NDEBUG */
1528
1529
1530 #if YYSTACKDEPTH<=0
@@ -1642,20 +1650,20 @@
1650 /********* Begin destructor definitions ***************************************/
1651 case 95: /* element_list */
1652 {
1653 #line 467 "pikchr.y"
1654 pik_elist_free(p,(yypminor->yy56));
1655 #line 1680 "pikchr.c"
1656 }
1657 break;
1658 case 96: /* element */
1659 case 97: /* unnamed_element */
1660 case 98: /* basetype */
1661 {
1662 #line 469 "pikchr.y"
1663 pik_elem_free(p,(yypminor->yy226));
1664 #line 1689 "pikchr.c"
1665 }
1666 break;
1667 /********* End destructor definitions *****************************************/
1668 default: break; /* If no destructor action specified: do nothing */
1669 }
@@ -1872,11 +1880,11 @@
1880 ** stack every overflows */
1881 /******** Begin %stack_overflow code ******************************************/
1882 #line 501 "pikchr.y"
1883
1884 pik_error(p, 0, "parser stack overflow");
1885 #line 1910 "pikchr.c"
1886 /******** End %stack_overflow code ********************************************/
1887 pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */
1888 pik_parserCTX_STORE
1889 }
1890
@@ -1955,11 +1963,11 @@
1963 96, /* (6) element ::= PLACENAME COLON unnamed_element */
1964 96, /* (7) element ::= PLACENAME COLON position */
1965 96, /* (8) element ::= unnamed_element */
1966 96, /* (9) element ::= print prlist */
1967 96, /* (10) element ::= ASSERT LP expr EQ expr RP */
1968 96, /* (11) element ::= ASSERT LP position EQ position RP */
1969 112, /* (12) rvalue ::= PLACENAME */
1970 120, /* (13) pritem ::= FILL */
1971 120, /* (14) pritem ::= COLOR */
1972 120, /* (15) pritem ::= THICKNESS */
1973 120, /* (16) pritem ::= rvalue */
@@ -2046,60 +2054,61 @@
2054 99, /* (97) expr ::= expr STAR expr */
2055 99, /* (98) expr ::= expr SLASH expr */
2056 99, /* (99) expr ::= MINUS expr */
2057 99, /* (100) expr ::= PLUS expr */
2058 99, /* (101) expr ::= LP expr RP */
2059 99, /* (102) expr ::= LP FILL|COLOR|THICKNESS RP */
2060 99, /* (103) expr ::= NUMBER */
2061 99, /* (104) expr ::= ID */
2062 99, /* (105) expr ::= FUNC1 LP expr RP */
2063 99, /* (106) expr ::= FUNC2 LP expr COMMA expr RP */
2064 99, /* (107) expr ::= DIST LP position COMMA position RP */
2065 99, /* (108) expr ::= place2 DOT_XY X */
2066 99, /* (109) expr ::= place2 DOT_XY Y */
2067 99, /* (110) expr ::= object DOT_L numproperty */
2068 99, /* (111) expr ::= object DOT_L dashproperty */
2069 99, /* (112) expr ::= object DOT_L colorproperty */
2070 113, /* (113) lvalue ::= ID */
2071 113, /* (114) lvalue ::= FILL */
2072 113, /* (115) lvalue ::= COLOR */
2073 113, /* (116) lvalue ::= THICKNESS */
2074 112, /* (117) rvalue ::= expr */
2075 118, /* (118) print ::= PRINT */
2076 119, /* (119) prlist ::= pritem */
2077 119, /* (120) prlist ::= prlist prsep pritem */
2078 102, /* (121) direction ::= UP */
2079 102, /* (122) direction ::= DOWN */
2080 102, /* (123) direction ::= LEFT */
2081 102, /* (124) direction ::= RIGHT */
2082 116, /* (125) optrelexpr ::= relexpr */
2083 122, /* (126) attribute_list ::= alist */
2084 124, /* (127) alist ::= */
2085 124, /* (128) alist ::= alist attribute */
2086 125, /* (129) attribute ::= boolproperty */
2087 125, /* (130) attribute ::= WITH withclause */
2088 126, /* (131) go ::= GO */
2089 126, /* (132) go ::= */
2090 114, /* (133) even ::= UNTIL EVEN WITH */
2091 114, /* (134) even ::= EVEN WITH */
2092 103, /* (135) dashproperty ::= DOTTED */
2093 103, /* (136) dashproperty ::= DASHED */
2094 104, /* (137) colorproperty ::= FILL */
2095 104, /* (138) colorproperty ::= COLOR */
2096 106, /* (139) position ::= place */
2097 129, /* (140) between ::= WAY BETWEEN */
2098 129, /* (141) between ::= BETWEEN */
2099 129, /* (142) between ::= OF THE WAY BETWEEN */
2100 107, /* (143) place ::= place2 */
2101 101, /* (144) edge ::= CENTER */
2102 101, /* (145) edge ::= EDGEPT */
2103 101, /* (146) edge ::= TOP */
2104 101, /* (147) edge ::= BOTTOM */
2105 101, /* (148) edge ::= START */
2106 101, /* (149) edge ::= END */
2107 101, /* (150) edge ::= RIGHT */
2108 101, /* (151) edge ::= LEFT */
2109 108, /* (152) object ::= objectname */
2110 };
2111
2112 /* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
2113 ** of symbols on the right-hand side of that rule. */
2114 static const signed char yyRuleInfoNRhs[] = {
@@ -2112,11 +2121,11 @@
2121 -3, /* (6) element ::= PLACENAME COLON unnamed_element */
2122 -3, /* (7) element ::= PLACENAME COLON position */
2123 -1, /* (8) element ::= unnamed_element */
2124 -2, /* (9) element ::= print prlist */
2125 -6, /* (10) element ::= ASSERT LP expr EQ expr RP */
2126 -6, /* (11) element ::= ASSERT LP position EQ position RP */
2127 -1, /* (12) rvalue ::= PLACENAME */
2128 -1, /* (13) pritem ::= FILL */
2129 -1, /* (14) pritem ::= COLOR */
2130 -1, /* (15) pritem ::= THICKNESS */
2131 -1, /* (16) pritem ::= rvalue */
@@ -2203,60 +2212,61 @@
2212 -3, /* (97) expr ::= expr STAR expr */
2213 -3, /* (98) expr ::= expr SLASH expr */
2214 -2, /* (99) expr ::= MINUS expr */
2215 -2, /* (100) expr ::= PLUS expr */
2216 -3, /* (101) expr ::= LP expr RP */
2217 -3, /* (102) expr ::= LP FILL|COLOR|THICKNESS RP */
2218 -1, /* (103) expr ::= NUMBER */
2219 -1, /* (104) expr ::= ID */
2220 -4, /* (105) expr ::= FUNC1 LP expr RP */
2221 -6, /* (106) expr ::= FUNC2 LP expr COMMA expr RP */
2222 -6, /* (107) expr ::= DIST LP position COMMA position RP */
2223 -3, /* (108) expr ::= place2 DOT_XY X */
2224 -3, /* (109) expr ::= place2 DOT_XY Y */
2225 -3, /* (110) expr ::= object DOT_L numproperty */
2226 -3, /* (111) expr ::= object DOT_L dashproperty */
2227 -3, /* (112) expr ::= object DOT_L colorproperty */
2228 -1, /* (113) lvalue ::= ID */
2229 -1, /* (114) lvalue ::= FILL */
2230 -1, /* (115) lvalue ::= COLOR */
2231 -1, /* (116) lvalue ::= THICKNESS */
2232 -1, /* (117) rvalue ::= expr */
2233 -1, /* (118) print ::= PRINT */
2234 -1, /* (119) prlist ::= pritem */
2235 -3, /* (120) prlist ::= prlist prsep pritem */
2236 -1, /* (121) direction ::= UP */
2237 -1, /* (122) direction ::= DOWN */
2238 -1, /* (123) direction ::= LEFT */
2239 -1, /* (124) direction ::= RIGHT */
2240 -1, /* (125) optrelexpr ::= relexpr */
2241 -1, /* (126) attribute_list ::= alist */
2242 0, /* (127) alist ::= */
2243 -2, /* (128) alist ::= alist attribute */
2244 -1, /* (129) attribute ::= boolproperty */
2245 -2, /* (130) attribute ::= WITH withclause */
2246 -1, /* (131) go ::= GO */
2247 0, /* (132) go ::= */
2248 -3, /* (133) even ::= UNTIL EVEN WITH */
2249 -2, /* (134) even ::= EVEN WITH */
2250 -1, /* (135) dashproperty ::= DOTTED */
2251 -1, /* (136) dashproperty ::= DASHED */
2252 -1, /* (137) colorproperty ::= FILL */
2253 -1, /* (138) colorproperty ::= COLOR */
2254 -1, /* (139) position ::= place */
2255 -2, /* (140) between ::= WAY BETWEEN */
2256 -1, /* (141) between ::= BETWEEN */
2257 -4, /* (142) between ::= OF THE WAY BETWEEN */
2258 -1, /* (143) place ::= place2 */
2259 -1, /* (144) edge ::= CENTER */
2260 -1, /* (145) edge ::= EDGEPT */
2261 -1, /* (146) edge ::= TOP */
2262 -1, /* (147) edge ::= BOTTOM */
2263 -1, /* (148) edge ::= START */
2264 -1, /* (149) edge ::= END */
2265 -1, /* (150) edge ::= RIGHT */
2266 -1, /* (151) edge ::= LEFT */
2267 -1, /* (152) object ::= objectname */
2268 };
2269
2270 static void yy_accept(yyParser*); /* Forward Declaration */
2271
2272 /*
@@ -2282,12 +2292,13 @@
2292 int yysize; /* Amount to pop the stack */
2293 pik_parserARG_FETCH
2294 (void)yyLookahead;
2295 (void)yyLookaheadToken;
2296 yymsp = yypParser->yytos;
2297 assert( yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) );
2298 #ifndef NDEBUG
2299 if( yyTraceFILE ){
2300 yysize = yyRuleInfoNRhs[yyruleno];
2301 if( yysize ){
2302 fprintf(yyTraceFILE, "%sReduce %d [%s]%s, pop back to state %d.\n",
2303 yyTracePrompt,
2304 yyruleno, yyRuleName[yyruleno],
@@ -2345,639 +2356,644 @@
2356 /********** Begin reduce actions **********************************************/
2357 YYMINORTYPE yylhsminor;
2358 case 0: /* document ::= element_list */
2359 #line 505 "pikchr.y"
2360 {pik_render(p,yymsp[0].minor.yy56);}
2361 #line 2386 "pikchr.c"
2362 break;
2363 case 1: /* element_list ::= element */
2364 #line 508 "pikchr.y"
2365 { yylhsminor.yy56 = pik_elist_append(p,0,yymsp[0].minor.yy226); }
2366 #line 2391 "pikchr.c"
2367 yymsp[0].minor.yy56 = yylhsminor.yy56;
2368 break;
2369 case 2: /* element_list ::= element_list EOL element */
2370 #line 510 "pikchr.y"
2371 { yylhsminor.yy56 = pik_elist_append(p,yymsp[-2].minor.yy56,yymsp[0].minor.yy226); }
2372 #line 2397 "pikchr.c"
2373 yymsp[-2].minor.yy56 = yylhsminor.yy56;
2374 break;
2375 case 3: /* element ::= */
2376 #line 513 "pikchr.y"
2377 { yymsp[1].minor.yy226 = 0; }
2378 #line 2403 "pikchr.c"
2379 break;
2380 case 4: /* element ::= direction */
2381 #line 514 "pikchr.y"
2382 { pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy226=0; }
2383 #line 2408 "pikchr.c"
2384 yymsp[0].minor.yy226 = yylhsminor.yy226;
2385 break;
2386 case 5: /* element ::= lvalue ASSIGN rvalue */
2387 #line 515 "pikchr.y"
2388 {pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy257,&yymsp[-1].minor.yy0); yylhsminor.yy226=0;}
2389 #line 2414 "pikchr.c"
2390 yymsp[-2].minor.yy226 = yylhsminor.yy226;
2391 break;
2392 case 6: /* element ::= PLACENAME COLON unnamed_element */
2393 #line 517 "pikchr.y"
2394 { yylhsminor.yy226 = yymsp[0].minor.yy226; pik_elem_setname(p,yymsp[0].minor.yy226,&yymsp[-2].minor.yy0); }
2395 #line 2420 "pikchr.c"
2396 yymsp[-2].minor.yy226 = yylhsminor.yy226;
2397 break;
2398 case 7: /* element ::= PLACENAME COLON position */
2399 #line 519 "pikchr.y"
2400 { yylhsminor.yy226 = pik_elem_new(p,0,0,0);
2401 if(yylhsminor.yy226){ yylhsminor.yy226->ptAt = yymsp[0].minor.yy175; pik_elem_setname(p,yylhsminor.yy226,&yymsp[-2].minor.yy0); }}
2402 #line 2427 "pikchr.c"
2403 yymsp[-2].minor.yy226 = yylhsminor.yy226;
2404 break;
2405 case 8: /* element ::= unnamed_element */
2406 #line 521 "pikchr.y"
2407 {yylhsminor.yy226 = yymsp[0].minor.yy226;}
2408 #line 2433 "pikchr.c"
2409 yymsp[0].minor.yy226 = yylhsminor.yy226;
2410 break;
2411 case 9: /* element ::= print prlist */
2412 #line 522 "pikchr.y"
2413 {pik_append(p,"<br>\n",5); yymsp[-1].minor.yy226=0;}
2414 #line 2439 "pikchr.c"
2415 break;
2416 case 10: /* element ::= ASSERT LP expr EQ expr RP */
2417 #line 527 "pikchr.y"
2418 {yymsp[-5].minor.yy226=pik_assert(p,yymsp[-3].minor.yy257,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy257);}
2419 #line 2444 "pikchr.c"
2420 break;
2421 case 11: /* element ::= ASSERT LP position EQ position RP */
2422 #line 529 "pikchr.y"
2423 {yymsp[-5].minor.yy226=pik_position_assert(p,&yymsp[-3].minor.yy175,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy175);}
2424 #line 2449 "pikchr.c"
2425 break;
2426 case 12: /* rvalue ::= PLACENAME */
2427 #line 540 "pikchr.y"
2428 {yylhsminor.yy257 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2429 #line 2454 "pikchr.c"
2430 yymsp[0].minor.yy257 = yylhsminor.yy257;
2431 break;
2432 case 13: /* pritem ::= FILL */
2433 case 14: /* pritem ::= COLOR */ yytestcase(yyruleno==14);
2434 case 15: /* pritem ::= THICKNESS */ yytestcase(yyruleno==15);
2435 #line 545 "pikchr.y"
2436 {pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));}
2437 #line 2462 "pikchr.c"
2438 break;
2439 case 16: /* pritem ::= rvalue */
2440 #line 548 "pikchr.y"
2441 {pik_append_num(p,"",yymsp[0].minor.yy257);}
2442 #line 2467 "pikchr.c"
2443 break;
2444 case 17: /* pritem ::= STRING */
2445 #line 549 "pikchr.y"
2446 {pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2447 #line 2472 "pikchr.c"
2448 break;
2449 case 18: /* prsep ::= COMMA */
2450 #line 550 "pikchr.y"
2451 {pik_append(p, " ", 1);}
2452 #line 2477 "pikchr.c"
2453 break;
2454 case 19: /* unnamed_element ::= basetype attribute_list */
2455 #line 553 "pikchr.y"
2456 {yylhsminor.yy226 = yymsp[-1].minor.yy226; pik_after_adding_attributes(p,yylhsminor.yy226);}
2457 #line 2482 "pikchr.c"
2458 yymsp[-1].minor.yy226 = yylhsminor.yy226;
2459 break;
2460 case 20: /* basetype ::= CLASSNAME */
2461 #line 555 "pikchr.y"
2462 {yylhsminor.yy226 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2463 #line 2488 "pikchr.c"
2464 yymsp[0].minor.yy226 = yylhsminor.yy226;
2465 break;
2466 case 21: /* basetype ::= STRING textposition */
2467 #line 557 "pikchr.y"
2468 {yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy116; yylhsminor.yy226 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2469 #line 2494 "pikchr.c"
2470 yymsp[-1].minor.yy226 = yylhsminor.yy226;
2471 break;
2472 case 22: /* basetype ::= LB savelist element_list RB */
2473 #line 559 "pikchr.y"
2474 { p->list = yymsp[-2].minor.yy56; yymsp[-3].minor.yy226 = pik_elem_new(p,0,0,yymsp[-1].minor.yy56); if(yymsp[-3].minor.yy226) yymsp[-3].minor.yy226->errTok = yymsp[0].minor.yy0; }
2475 #line 2500 "pikchr.c"
2476 break;
2477 case 23: /* savelist ::= */
2478 #line 564 "pikchr.y"
2479 {yymsp[1].minor.yy56 = p->list; p->list = 0;}
2480 #line 2505 "pikchr.c"
2481 break;
2482 case 24: /* relexpr ::= expr */
2483 #line 571 "pikchr.y"
2484 {yylhsminor.yy164.rAbs = yymsp[0].minor.yy257; yylhsminor.yy164.rRel = 0;}
2485 #line 2510 "pikchr.c"
2486 yymsp[0].minor.yy164 = yylhsminor.yy164;
2487 break;
2488 case 25: /* relexpr ::= expr PERCENT */
2489 #line 572 "pikchr.y"
2490 {yylhsminor.yy164.rAbs = 0; yylhsminor.yy164.rRel = yymsp[-1].minor.yy257/100;}
2491 #line 2516 "pikchr.c"
2492 yymsp[-1].minor.yy164 = yylhsminor.yy164;
2493 break;
2494 case 26: /* optrelexpr ::= */
2495 #line 574 "pikchr.y"
2496 {yymsp[1].minor.yy164.rAbs = 0; yymsp[1].minor.yy164.rRel = 1.0;}
2497 #line 2522 "pikchr.c"
2498 break;
2499 case 27: /* attribute_list ::= relexpr alist */
2500 #line 576 "pikchr.y"
2501 {pik_add_direction(p,0,&yymsp[-1].minor.yy164);}
2502 #line 2527 "pikchr.c"
2503 break;
2504 case 28: /* attribute ::= numproperty relexpr */
2505 #line 580 "pikchr.y"
2506 { pik_set_numprop(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy164); }
2507 #line 2532 "pikchr.c"
2508 break;
2509 case 29: /* attribute ::= dashproperty expr */
2510 #line 581 "pikchr.y"
2511 { pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy257); }
2512 #line 2537 "pikchr.c"
2513 break;
2514 case 30: /* attribute ::= dashproperty */
2515 #line 582 "pikchr.y"
2516 { pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2517 #line 2542 "pikchr.c"
2518 break;
2519 case 31: /* attribute ::= colorproperty rvalue */
2520 #line 583 "pikchr.y"
2521 { pik_set_clrprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy257); }
2522 #line 2547 "pikchr.c"
2523 break;
2524 case 32: /* attribute ::= go direction optrelexpr */
2525 #line 584 "pikchr.y"
2526 { pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy164);}
2527 #line 2552 "pikchr.c"
2528 break;
2529 case 33: /* attribute ::= go direction even position */
2530 #line 585 "pikchr.y"
2531 {pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy175);}
2532 #line 2557 "pikchr.c"
2533 break;
2534 case 34: /* attribute ::= CLOSE */
2535 #line 586 "pikchr.y"
2536 { pik_close_path(p,&yymsp[0].minor.yy0); }
2537 #line 2562 "pikchr.c"
2538 break;
2539 case 35: /* attribute ::= CHOP */
2540 #line 587 "pikchr.y"
2541 { p->cur->bChop = 1; }
2542 #line 2567 "pikchr.c"
2543 break;
2544 case 36: /* attribute ::= FROM position */
2545 #line 588 "pikchr.y"
2546 { pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy175); }
2547 #line 2572 "pikchr.c"
2548 break;
2549 case 37: /* attribute ::= TO position */
2550 #line 589 "pikchr.y"
2551 { pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy175); }
2552 #line 2577 "pikchr.c"
2553 break;
2554 case 38: /* attribute ::= THEN */
2555 #line 590 "pikchr.y"
2556 { pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2557 #line 2582 "pikchr.c"
2558 break;
2559 case 39: /* attribute ::= THEN optrelexpr HEADING expr */
2560 case 41: /* attribute ::= GO optrelexpr HEADING expr */ yytestcase(yyruleno==41);
2561 #line 592 "pikchr.y"
2562 {pik_move_hdg(p,&yymsp[-2].minor.yy164,&yymsp[-1].minor.yy0,yymsp[0].minor.yy257,0,&yymsp[-3].minor.yy0);}
2563 #line 2588 "pikchr.c"
2564 break;
2565 case 40: /* attribute ::= THEN optrelexpr EDGEPT */
2566 case 42: /* attribute ::= GO optrelexpr EDGEPT */ yytestcase(yyruleno==42);
2567 #line 593 "pikchr.y"
2568 {pik_move_hdg(p,&yymsp[-1].minor.yy164,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);}
2569 #line 2594 "pikchr.c"
2570 break;
2571 case 43: /* attribute ::= AT position */
2572 #line 598 "pikchr.y"
2573 { pik_set_at(p,0,&yymsp[0].minor.yy175,&yymsp[-1].minor.yy0); }
2574 #line 2599 "pikchr.c"
2575 break;
2576 case 44: /* attribute ::= SAME */
2577 #line 600 "pikchr.y"
2578 {pik_same(p,0,&yymsp[0].minor.yy0);}
2579 #line 2604 "pikchr.c"
2580 break;
2581 case 45: /* attribute ::= SAME AS object */
2582 #line 601 "pikchr.y"
2583 {pik_same(p,yymsp[0].minor.yy226,&yymsp[-2].minor.yy0);}
2584 #line 2609 "pikchr.c"
2585 break;
2586 case 46: /* attribute ::= STRING textposition */
2587 #line 602 "pikchr.y"
2588 {pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy116);}
2589 #line 2614 "pikchr.c"
2590 break;
2591 case 47: /* attribute ::= FIT */
2592 #line 603 "pikchr.y"
2593 {pik_size_to_fit(p,&yymsp[0].minor.yy0); }
2594 #line 2619 "pikchr.c"
2595 break;
2596 case 48: /* attribute ::= BEHIND object */
2597 #line 604 "pikchr.y"
2598 {pik_behind(p,yymsp[0].minor.yy226);}
2599 #line 2624 "pikchr.c"
2600 break;
2601 case 49: /* withclause ::= DOT_E edge AT position */
2602 case 50: /* withclause ::= edge AT position */ yytestcase(yyruleno==50);
2603 #line 612 "pikchr.y"
2604 { pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy175,&yymsp[-1].minor.yy0); }
2605 #line 2630 "pikchr.c"
2606 break;
2607 case 51: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2608 #line 616 "pikchr.y"
2609 {yylhsminor.yy0 = yymsp[0].minor.yy0;}
2610 #line 2635 "pikchr.c"
2611 yymsp[0].minor.yy0 = yylhsminor.yy0;
2612 break;
2613 case 52: /* boolproperty ::= CW */
2614 #line 627 "pikchr.y"
2615 {p->cur->cw = 1;}
2616 #line 2641 "pikchr.c"
2617 break;
2618 case 53: /* boolproperty ::= CCW */
2619 #line 628 "pikchr.y"
2620 {p->cur->cw = 0;}
2621 #line 2646 "pikchr.c"
2622 break;
2623 case 54: /* boolproperty ::= LARROW */
2624 #line 629 "pikchr.y"
2625 {p->cur->larrow=1; p->cur->rarrow=0; }
2626 #line 2651 "pikchr.c"
2627 break;
2628 case 55: /* boolproperty ::= RARROW */
2629 #line 630 "pikchr.y"
2630 {p->cur->larrow=0; p->cur->rarrow=1; }
2631 #line 2656 "pikchr.c"
2632 break;
2633 case 56: /* boolproperty ::= LRARROW */
2634 #line 631 "pikchr.y"
2635 {p->cur->larrow=1; p->cur->rarrow=1; }
2636 #line 2661 "pikchr.c"
2637 break;
2638 case 57: /* boolproperty ::= INVIS */
2639 #line 632 "pikchr.y"
2640 {p->cur->sw = 0.0;}
2641 #line 2666 "pikchr.c"
2642 break;
2643 case 58: /* boolproperty ::= THICK */
2644 #line 633 "pikchr.y"
2645 {p->cur->sw *= 1.5;}
2646 #line 2671 "pikchr.c"
2647 break;
2648 case 59: /* boolproperty ::= THIN */
2649 #line 634 "pikchr.y"
2650 {p->cur->sw *= 0.67;}
2651 #line 2676 "pikchr.c"
2652 break;
2653 case 60: /* textposition ::= */
2654 #line 636 "pikchr.y"
2655 {yymsp[1].minor.yy116 = 0;}
2656 #line 2681 "pikchr.c"
2657 break;
2658 case 61: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2659 #line 639 "pikchr.y"
2660 {yylhsminor.yy116 = pik_text_position(yymsp[-1].minor.yy116,&yymsp[0].minor.yy0);}
2661 #line 2686 "pikchr.c"
2662 yymsp[-1].minor.yy116 = yylhsminor.yy116;
2663 break;
2664 case 62: /* position ::= expr COMMA expr */
2665 #line 642 "pikchr.y"
2666 {yylhsminor.yy175.x=yymsp[-2].minor.yy257; yylhsminor.yy175.y=yymsp[0].minor.yy257;}
2667 #line 2692 "pikchr.c"
2668 yymsp[-2].minor.yy175 = yylhsminor.yy175;
2669 break;
2670 case 63: /* position ::= place PLUS expr COMMA expr */
2671 #line 644 "pikchr.y"
2672 {yylhsminor.yy175.x=yymsp[-4].minor.yy175.x+yymsp[-2].minor.yy257; yylhsminor.yy175.y=yymsp[-4].minor.yy175.y+yymsp[0].minor.yy257;}
2673 #line 2698 "pikchr.c"
2674 yymsp[-4].minor.yy175 = yylhsminor.yy175;
2675 break;
2676 case 64: /* position ::= place MINUS expr COMMA expr */
2677 #line 645 "pikchr.y"
2678 {yylhsminor.yy175.x=yymsp[-4].minor.yy175.x-yymsp[-2].minor.yy257; yylhsminor.yy175.y=yymsp[-4].minor.yy175.y-yymsp[0].minor.yy257;}
2679 #line 2704 "pikchr.c"
2680 yymsp[-4].minor.yy175 = yylhsminor.yy175;
2681 break;
2682 case 65: /* position ::= place PLUS LP expr COMMA expr RP */
2683 #line 647 "pikchr.y"
2684 {yylhsminor.yy175.x=yymsp[-6].minor.yy175.x+yymsp[-3].minor.yy257; yylhsminor.yy175.y=yymsp[-6].minor.yy175.y+yymsp[-1].minor.yy257;}
2685 #line 2710 "pikchr.c"
2686 yymsp[-6].minor.yy175 = yylhsminor.yy175;
2687 break;
2688 case 66: /* position ::= place MINUS LP expr COMMA expr RP */
2689 #line 649 "pikchr.y"
2690 {yylhsminor.yy175.x=yymsp[-6].minor.yy175.x-yymsp[-3].minor.yy257; yylhsminor.yy175.y=yymsp[-6].minor.yy175.y-yymsp[-1].minor.yy257;}
2691 #line 2716 "pikchr.c"
2692 yymsp[-6].minor.yy175 = yylhsminor.yy175;
2693 break;
2694 case 67: /* position ::= LP position COMMA position RP */
2695 #line 650 "pikchr.y"
2696 {yymsp[-4].minor.yy175.x=yymsp[-3].minor.yy175.x; yymsp[-4].minor.yy175.y=yymsp[-1].minor.yy175.y;}
2697 #line 2722 "pikchr.c"
2698 break;
2699 case 68: /* position ::= LP position RP */
2700 #line 651 "pikchr.y"
2701 {yymsp[-2].minor.yy175=yymsp[-1].minor.yy175;}
2702 #line 2727 "pikchr.c"
2703 break;
2704 case 69: /* position ::= expr between position AND position */
2705 #line 653 "pikchr.y"
2706 {yylhsminor.yy175 = pik_position_between(yymsp[-4].minor.yy257,yymsp[-2].minor.yy175,yymsp[0].minor.yy175);}
2707 #line 2732 "pikchr.c"
2708 yymsp[-4].minor.yy175 = yylhsminor.yy175;
2709 break;
2710 case 70: /* position ::= expr LT position COMMA position GT */
2711 #line 655 "pikchr.y"
2712 {yylhsminor.yy175 = pik_position_between(yymsp[-5].minor.yy257,yymsp[-3].minor.yy175,yymsp[-1].minor.yy175);}
2713 #line 2738 "pikchr.c"
2714 yymsp[-5].minor.yy175 = yylhsminor.yy175;
2715 break;
2716 case 71: /* position ::= expr ABOVE position */
2717 #line 656 "pikchr.y"
2718 {yylhsminor.yy175=yymsp[0].minor.yy175; yylhsminor.yy175.y += yymsp[-2].minor.yy257;}
2719 #line 2744 "pikchr.c"
2720 yymsp[-2].minor.yy175 = yylhsminor.yy175;
2721 break;
2722 case 72: /* position ::= expr BELOW position */
2723 #line 657 "pikchr.y"
2724 {yylhsminor.yy175=yymsp[0].minor.yy175; yylhsminor.yy175.y -= yymsp[-2].minor.yy257;}
2725 #line 2750 "pikchr.c"
2726 yymsp[-2].minor.yy175 = yylhsminor.yy175;
2727 break;
2728 case 73: /* position ::= expr LEFT OF position */
2729 #line 658 "pikchr.y"
2730 {yylhsminor.yy175=yymsp[0].minor.yy175; yylhsminor.yy175.x -= yymsp[-3].minor.yy257;}
2731 #line 2756 "pikchr.c"
2732 yymsp[-3].minor.yy175 = yylhsminor.yy175;
2733 break;
2734 case 74: /* position ::= expr RIGHT OF position */
2735 #line 659 "pikchr.y"
2736 {yylhsminor.yy175=yymsp[0].minor.yy175; yylhsminor.yy175.x += yymsp[-3].minor.yy257;}
2737 #line 2762 "pikchr.c"
2738 yymsp[-3].minor.yy175 = yylhsminor.yy175;
2739 break;
2740 case 75: /* position ::= expr ON HEADING EDGEPT OF position */
2741 #line 661 "pikchr.y"
2742 {yylhsminor.yy175 = pik_position_at_hdg(yymsp[-5].minor.yy257,&yymsp[-2].minor.yy0,yymsp[0].minor.yy175);}
2743 #line 2768 "pikchr.c"
2744 yymsp[-5].minor.yy175 = yylhsminor.yy175;
2745 break;
2746 case 76: /* position ::= expr HEADING EDGEPT OF position */
2747 #line 663 "pikchr.y"
2748 {yylhsminor.yy175 = pik_position_at_hdg(yymsp[-4].minor.yy257,&yymsp[-2].minor.yy0,yymsp[0].minor.yy175);}
2749 #line 2774 "pikchr.c"
2750 yymsp[-4].minor.yy175 = yylhsminor.yy175;
2751 break;
2752 case 77: /* position ::= expr EDGEPT OF position */
2753 #line 665 "pikchr.y"
2754 {yylhsminor.yy175 = pik_position_at_hdg(yymsp[-3].minor.yy257,&yymsp[-2].minor.yy0,yymsp[0].minor.yy175);}
2755 #line 2780 "pikchr.c"
2756 yymsp[-3].minor.yy175 = yylhsminor.yy175;
2757 break;
2758 case 78: /* position ::= expr ON HEADING expr FROM position */
2759 #line 667 "pikchr.y"
2760 {yylhsminor.yy175 = pik_position_at_angle(yymsp[-5].minor.yy257,yymsp[-2].minor.yy257,yymsp[0].minor.yy175);}
2761 #line 2786 "pikchr.c"
2762 yymsp[-5].minor.yy175 = yylhsminor.yy175;
2763 break;
2764 case 79: /* position ::= expr HEADING expr FROM position */
2765 #line 669 "pikchr.y"
2766 {yylhsminor.yy175 = pik_position_at_angle(yymsp[-4].minor.yy257,yymsp[-2].minor.yy257,yymsp[0].minor.yy175);}
2767 #line 2792 "pikchr.c"
2768 yymsp[-4].minor.yy175 = yylhsminor.yy175;
2769 break;
2770 case 80: /* place ::= edge OF object */
2771 #line 681 "pikchr.y"
2772 {yylhsminor.yy175 = pik_place_of_elem(p,yymsp[0].minor.yy226,&yymsp[-2].minor.yy0);}
2773 #line 2798 "pikchr.c"
2774 yymsp[-2].minor.yy175 = yylhsminor.yy175;
2775 break;
2776 case 81: /* place2 ::= object */
2777 #line 682 "pikchr.y"
2778 {yylhsminor.yy175 = pik_place_of_elem(p,yymsp[0].minor.yy226,0);}
2779 #line 2804 "pikchr.c"
2780 yymsp[0].minor.yy175 = yylhsminor.yy175;
2781 break;
2782 case 82: /* place2 ::= object DOT_E edge */
2783 #line 683 "pikchr.y"
2784 {yylhsminor.yy175 = pik_place_of_elem(p,yymsp[-2].minor.yy226,&yymsp[0].minor.yy0);}
2785 #line 2810 "pikchr.c"
2786 yymsp[-2].minor.yy175 = yylhsminor.yy175;
2787 break;
2788 case 83: /* place2 ::= NTH VERTEX OF object */
2789 #line 684 "pikchr.y"
2790 {yylhsminor.yy175 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy226);}
2791 #line 2816 "pikchr.c"
2792 yymsp[-3].minor.yy175 = yylhsminor.yy175;
2793 break;
2794 case 84: /* object ::= nth */
2795 #line 696 "pikchr.y"
2796 {yylhsminor.yy226 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2797 #line 2822 "pikchr.c"
2798 yymsp[0].minor.yy226 = yylhsminor.yy226;
2799 break;
2800 case 85: /* object ::= nth OF|IN object */
2801 #line 697 "pikchr.y"
2802 {yylhsminor.yy226 = pik_find_nth(p,yymsp[0].minor.yy226,&yymsp[-2].minor.yy0);}
2803 #line 2828 "pikchr.c"
2804 yymsp[-2].minor.yy226 = yylhsminor.yy226;
2805 break;
2806 case 86: /* objectname ::= PLACENAME */
2807 #line 699 "pikchr.y"
2808 {yylhsminor.yy226 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2809 #line 2834 "pikchr.c"
2810 yymsp[0].minor.yy226 = yylhsminor.yy226;
2811 break;
2812 case 87: /* objectname ::= objectname DOT_U PLACENAME */
2813 #line 701 "pikchr.y"
2814 {yylhsminor.yy226 = pik_find_byname(p,yymsp[-2].minor.yy226,&yymsp[0].minor.yy0);}
2815 #line 2840 "pikchr.c"
2816 yymsp[-2].minor.yy226 = yylhsminor.yy226;
2817 break;
2818 case 88: /* nth ::= NTH CLASSNAME */
2819 #line 703 "pikchr.y"
2820 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2821 #line 2846 "pikchr.c"
2822 yymsp[-1].minor.yy0 = yylhsminor.yy0;
2823 break;
2824 case 89: /* nth ::= NTH LAST CLASSNAME */
2825 #line 704 "pikchr.y"
2826 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2827 #line 2852 "pikchr.c"
2828 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2829 break;
2830 case 90: /* nth ::= LAST CLASSNAME */
2831 #line 705 "pikchr.y"
2832 {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2833 #line 2858 "pikchr.c"
2834 break;
2835 case 91: /* nth ::= LAST */
2836 #line 706 "pikchr.y"
2837 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2838 #line 2863 "pikchr.c"
2839 yymsp[0].minor.yy0 = yylhsminor.yy0;
2840 break;
2841 case 92: /* nth ::= NTH LB RB */
2842 #line 707 "pikchr.y"
2843 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2844 #line 2869 "pikchr.c"
2845 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2846 break;
2847 case 93: /* nth ::= NTH LAST LB RB */
2848 #line 708 "pikchr.y"
2849 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2850 #line 2875 "pikchr.c"
2851 yymsp[-3].minor.yy0 = yylhsminor.yy0;
2852 break;
2853 case 94: /* nth ::= LAST LB RB */
2854 #line 709 "pikchr.y"
2855 {yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2856 #line 2881 "pikchr.c"
2857 break;
2858 case 95: /* expr ::= expr PLUS expr */
2859 #line 711 "pikchr.y"
2860 {yylhsminor.yy257=yymsp[-2].minor.yy257+yymsp[0].minor.yy257;}
2861 #line 2886 "pikchr.c"
2862 yymsp[-2].minor.yy257 = yylhsminor.yy257;
2863 break;
2864 case 96: /* expr ::= expr MINUS expr */
2865 #line 712 "pikchr.y"
2866 {yylhsminor.yy257=yymsp[-2].minor.yy257-yymsp[0].minor.yy257;}
2867 #line 2892 "pikchr.c"
2868 yymsp[-2].minor.yy257 = yylhsminor.yy257;
2869 break;
2870 case 97: /* expr ::= expr STAR expr */
2871 #line 713 "pikchr.y"
2872 {yylhsminor.yy257=yymsp[-2].minor.yy257*yymsp[0].minor.yy257;}
2873 #line 2898 "pikchr.c"
2874 yymsp[-2].minor.yy257 = yylhsminor.yy257;
2875 break;
2876 case 98: /* expr ::= expr SLASH expr */
2877 #line 714 "pikchr.y"
2878 {
2879 if( yymsp[0].minor.yy257==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy257 = 0.0; }
2880 else{ yylhsminor.yy257 = yymsp[-2].minor.yy257/yymsp[0].minor.yy257; }
2881 }
2882 #line 2907 "pikchr.c"
2883 yymsp[-2].minor.yy257 = yylhsminor.yy257;
2884 break;
2885 case 99: /* expr ::= MINUS expr */
2886 #line 718 "pikchr.y"
2887 {yymsp[-1].minor.yy257=-yymsp[0].minor.yy257;}
2888 #line 2913 "pikchr.c"
2889 break;
2890 case 100: /* expr ::= PLUS expr */
2891 #line 719 "pikchr.y"
2892 {yymsp[-1].minor.yy257=yymsp[0].minor.yy257;}
2893 #line 2918 "pikchr.c"
2894 break;
2895 case 101: /* expr ::= LP expr RP */
2896 #line 720 "pikchr.y"
2897 {yymsp[-2].minor.yy257=yymsp[-1].minor.yy257;}
2898 #line 2923 "pikchr.c"
2899 break;
2900 case 102: /* expr ::= LP FILL|COLOR|THICKNESS RP */
2901 #line 721 "pikchr.y"
2902 {yymsp[-2].minor.yy257=pik_get_var(p,&yymsp[-1].minor.yy0);}
2903 #line 2928 "pikchr.c"
2904 break;
2905 case 103: /* expr ::= NUMBER */
2906 #line 722 "pikchr.y"
2907 {yylhsminor.yy257=pik_atof(&yymsp[0].minor.yy0);}
2908 #line 2933 "pikchr.c"
2909 yymsp[0].minor.yy257 = yylhsminor.yy257;
2910 break;
2911 case 104: /* expr ::= ID */
2912 #line 723 "pikchr.y"
2913 {yylhsminor.yy257=pik_get_var(p,&yymsp[0].minor.yy0);}
2914 #line 2939 "pikchr.c"
2915 yymsp[0].minor.yy257 = yylhsminor.yy257;
2916 break;
2917 case 105: /* expr ::= FUNC1 LP expr RP */
2918 #line 724 "pikchr.y"
2919 {yylhsminor.yy257 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy257,0.0);}
2920 #line 2945 "pikchr.c"
2921 yymsp[-3].minor.yy257 = yylhsminor.yy257;
2922 break;
2923 case 106: /* expr ::= FUNC2 LP expr COMMA expr RP */
2924 #line 725 "pikchr.y"
2925 {yylhsminor.yy257 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy257,yymsp[-1].minor.yy257);}
2926 #line 2951 "pikchr.c"
2927 yymsp[-5].minor.yy257 = yylhsminor.yy257;
2928 break;
2929 case 107: /* expr ::= DIST LP position COMMA position RP */
2930 #line 726 "pikchr.y"
2931 {yymsp[-5].minor.yy257 = pik_dist(&yymsp[-3].minor.yy175,&yymsp[-1].minor.yy175);}
2932 #line 2957 "pikchr.c"
2933 break;
2934 case 108: /* expr ::= place2 DOT_XY X */
2935 #line 727 "pikchr.y"
2936 {yylhsminor.yy257 = yymsp[-2].minor.yy175.x;}
2937 #line 2962 "pikchr.c"
2938 yymsp[-2].minor.yy257 = yylhsminor.yy257;
2939 break;
2940 case 109: /* expr ::= place2 DOT_XY Y */
2941 #line 728 "pikchr.y"
2942 {yylhsminor.yy257 = yymsp[-2].minor.yy175.y;}
2943 #line 2968 "pikchr.c"
2944 yymsp[-2].minor.yy257 = yylhsminor.yy257;
2945 break;
2946 case 110: /* expr ::= object DOT_L numproperty */
2947 case 111: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==111);
2948 case 112: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==112);
2949 #line 729 "pikchr.y"
2950 {yylhsminor.yy257=pik_property_of(yymsp[-2].minor.yy226,&yymsp[0].minor.yy0);}
2951 #line 2976 "pikchr.c"
2952 yymsp[-2].minor.yy257 = yylhsminor.yy257;
2953 break;
2954 default:
2955 /* (113) lvalue ::= ID */ yytestcase(yyruleno==113);
2956 /* (114) lvalue ::= FILL */ yytestcase(yyruleno==114);
2957 /* (115) lvalue ::= COLOR */ yytestcase(yyruleno==115);
2958 /* (116) lvalue ::= THICKNESS */ yytestcase(yyruleno==116);
2959 /* (117) rvalue ::= expr */ yytestcase(yyruleno==117);
2960 /* (118) print ::= PRINT */ yytestcase(yyruleno==118);
2961 /* (119) prlist ::= pritem (OPTIMIZED OUT) */ assert(yyruleno!=119);
2962 /* (120) prlist ::= prlist prsep pritem */ yytestcase(yyruleno==120);
2963 /* (121) direction ::= UP */ yytestcase(yyruleno==121);
2964 /* (122) direction ::= DOWN */ yytestcase(yyruleno==122);
2965 /* (123) direction ::= LEFT */ yytestcase(yyruleno==123);
2966 /* (124) direction ::= RIGHT */ yytestcase(yyruleno==124);
2967 /* (125) optrelexpr ::= relexpr (OPTIMIZED OUT) */ assert(yyruleno!=125);
2968 /* (126) attribute_list ::= alist */ yytestcase(yyruleno==126);
2969 /* (127) alist ::= */ yytestcase(yyruleno==127);
2970 /* (128) alist ::= alist attribute */ yytestcase(yyruleno==128);
2971 /* (129) attribute ::= boolproperty (OPTIMIZED OUT) */ assert(yyruleno!=129);
2972 /* (130) attribute ::= WITH withclause */ yytestcase(yyruleno==130);
2973 /* (131) go ::= GO */ yytestcase(yyruleno==131);
2974 /* (132) go ::= */ yytestcase(yyruleno==132);
2975 /* (133) even ::= UNTIL EVEN WITH */ yytestcase(yyruleno==133);
2976 /* (134) even ::= EVEN WITH */ yytestcase(yyruleno==134);
2977 /* (135) dashproperty ::= DOTTED */ yytestcase(yyruleno==135);
2978 /* (136) dashproperty ::= DASHED */ yytestcase(yyruleno==136);
2979 /* (137) colorproperty ::= FILL */ yytestcase(yyruleno==137);
2980 /* (138) colorproperty ::= COLOR */ yytestcase(yyruleno==138);
2981 /* (139) position ::= place */ yytestcase(yyruleno==139);
2982 /* (140) between ::= WAY BETWEEN */ yytestcase(yyruleno==140);
2983 /* (141) between ::= BETWEEN */ yytestcase(yyruleno==141);
2984 /* (142) between ::= OF THE WAY BETWEEN */ yytestcase(yyruleno==142);
2985 /* (143) place ::= place2 */ yytestcase(yyruleno==143);
2986 /* (144) edge ::= CENTER */ yytestcase(yyruleno==144);
2987 /* (145) edge ::= EDGEPT */ yytestcase(yyruleno==145);
2988 /* (146) edge ::= TOP */ yytestcase(yyruleno==146);
2989 /* (147) edge ::= BOTTOM */ yytestcase(yyruleno==147);
2990 /* (148) edge ::= START */ yytestcase(yyruleno==148);
2991 /* (149) edge ::= END */ yytestcase(yyruleno==149);
2992 /* (150) edge ::= RIGHT */ yytestcase(yyruleno==150);
2993 /* (151) edge ::= LEFT */ yytestcase(yyruleno==151);
2994 /* (152) object ::= objectname */ yytestcase(yyruleno==152);
2995 break;
2996 /********** End reduce actions ************************************************/
2997 };
2998 assert( yyruleno<sizeof(yyRuleInfoLhs)/sizeof(yyRuleInfoLhs[0]) );
2999 yygoto = yyRuleInfoLhs[yyruleno];
@@ -3041,11 +3057,11 @@
3057 pik_error(p, &TOKEN, "syntax error");
3058 }else{
3059 pik_error(p, 0, "syntax error");
3060 }
3061 UNUSED_PARAMETER(yymajor);
3062 #line 3087 "pikchr.c"
3063 /************ End %syntax_error code ******************************************/
3064 pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
3065 pik_parserCTX_STORE
3066 }
3067
@@ -3274,11 +3290,11 @@
3290 #else
3291 (void)iToken;
3292 return 0;
3293 #endif
3294 }
3295 #line 734 "pikchr.y"
3296
3297
3298
3299 /* Chart of the 140 official HTML color names with their
3300 ** corresponding RGB value.
@@ -4845,11 +4861,11 @@
4861 }
4862
4863 /*
4864 ** Process an "assert( place1 == place2 )" statement. Always return NULL.
4865 */
4866 static PElem *pik_position_assert(Pik *p, PPoint *e1, PToken *pEq, PPoint *e2){
4867 char zE1[100], zE2[100], zMsg[210];
4868
4869 /* Convert the numbers to strings using %g for comparison. This
4870 ** limits the precision of the comparison to account for rounding error. */
4871 snprintf(zE1, sizeof(zE1), "(%g,%g)", e1->x, e1->y); zE1[sizeof(zE1)-1] = 0;
@@ -6369,11 +6385,15 @@
6385
6386 pElem->ptEnter = pElem->aPath[0];
6387 pElem->ptExit = pElem->aPath[pElem->nPath-1];
6388
6389 /* Compute the center of the line based on the bounding box over
6390 ** the vertexes. This is a difference from PIC. In Pikchr, the
6391 ** center of a line is the center of its bounding box. In PIC, the
6392 ** center of a line is halfway between its .start and .end. For
6393 ** straight lines, this is the same point, but for multi-segment
6394 ** lines the result is usually diferent */
6395 for(i=0; i<pElem->nPath; i++){
6396 pik_bbox_add_xy(&pElem->bbox, pElem->aPath[i].x, pElem->aPath[i].y);
6397 }
6398 pElem->ptAt.x = (pElem->bbox.ne.x + pElem->bbox.sw.x)/2.0;
6399 pElem->ptAt.y = (pElem->bbox.ne.y + pElem->bbox.sw.y)/2.0;
@@ -6384,15 +6404,13 @@
6404 pElem->h = pElem->bbox.ne.y - pElem->bbox.sw.y;
6405
6406 /* If this is a polygon (if it has the "close" attribute), then
6407 ** adjust the exit point */
6408 if( pElem->bClose ){
6409 /* For "closed" lines, the .end is one of the .e, .s, .w, or .n
6410 ** points of the bounding box, as with block objects. */
6411 pik_elem_set_exit(pElem, pElem->inDir);
 
 
 
6412 }
6413 }else{
6414 PNum w2 = pElem->w/2.0;
6415 PNum h2 = pElem->h/2.0;
6416 pElem->ptEnter = pElem->ptAt;
@@ -6535,11 +6553,10 @@
6553 static void pik_render(Pik *p, PEList *pEList){
6554 if( pEList==0 ) return;
6555 if( p->nErr==0 ){
6556 PNum thickness; /* Stroke width */
6557 PNum margin; /* Extra bounding box margin */
 
6558 PNum w, h; /* Drawing width and height */
6559 PNum wArrow;
6560 PNum pikScale; /* Value of the "scale" variable */
6561
6562 /* Set up rendering parameters */
@@ -6546,24 +6563,23 @@
6563 pik_compute_layout_settings(p);
6564 thickness = pik_value(p,"thickness",9,0);
6565 if( thickness<=0.01 ) thickness = 0.01;
6566 margin = pik_value(p,"margin",6,0);
6567 margin += thickness;
 
6568 wArrow = p->wArrow*thickness;
6569
6570 /* Compute a bounding box over all objects so that we can know
6571 ** how big to declare the SVG canvas */
6572 pik_bbox_init(&p->bbox);
6573 pik_bbox_add_elist(p, pEList, wArrow);
6574
6575 /* Expand the bounding box slightly to account for line thickness
6576 ** and the optional "margin = EXPR" setting. */
6577 p->bbox.ne.x += margin + pik_value(p,"rightmargin",11,0);
6578 p->bbox.ne.y += margin + pik_value(p,"topmargin",9,0);
6579 p->bbox.sw.x -= margin + pik_value(p,"leftmargin",10,0);
6580 p->bbox.sw.y -= margin + pik_value(p,"bottommargin",12,0);
6581
6582 /* Output the SVG */
6583 pik_append(p, "<svg",4);
6584 if( p->zClass ){
6585 pik_append(p, " class=\"", -1);
@@ -7131,10 +7147,11 @@
7147 static void usage(const char *argv0){
7148 fprintf(stderr, "usage: %s [OPTIONS] FILE ...\n", argv0);
7149 fprintf(stderr,
7150 "Convert Pikchr input files into SVG.\n"
7151 "Options:\n"
7152 " --dont-stop Process all files even if earlier files have errors\n"
7153 " --svg-only Omit raw SVG without the HTML wrapper\n"
7154 );
7155 exit(1);
7156 }
7157
@@ -7166,10 +7183,11 @@
7183 ** line.
7184 */
7185 int main(int argc, char **argv){
7186 int i;
7187 int bSvgOnly = 0; /* Output SVG only. No HTML wrapper */
7188 int bDontStop = 0; /* Continue in spite of errors */
7189 const char *zHtmlHdr =
7190 "<!DOCTYPE html>\n"
7191 "<html lang=\"en-US\">\n"
7192 "<head>\n<title>PIKCHR Test</title>\n"
7193 "<style>\n"
@@ -7201,10 +7219,13 @@
7219
7220 if( argv[i][0]=='-' ){
7221 char *z = argv[i];
7222 z++;
7223 if( z[0]=='-' ) z++;
7224 if( strcmp(z,"dont-stop")==0 ){
7225 bDontStop = 1;
7226 }else
7227 if( strcmp(z,"svg-only")==0 ){
7228 if( zHtmlHdr==0 ){
7229 fprintf(stderr, "the \"%s\" option must come first\n",argv[i]);
7230 exit(1);
7231 }
@@ -7234,13 +7255,12 @@
7255 fclose(in);
7256 zIn[sz] = 0;
7257 zOut = pikchr(zIn, "pikchr", 0, &w, &h);
7258 if( zOut==0 ){
7259 fprintf(stderr, "pikchr() returns NULL. Out of memory?\n");
7260 if( !bDontStop ) exit(1);
7261 }else if( bSvgOnly ){
 
7262 printf("%s\n", zOut);
7263 }else{
7264 if( zHtmlHdr ){
7265 printf("%s", zHtmlHdr);
7266 zHtmlHdr = 0;
@@ -7265,6 +7285,6 @@
7285 }
7286 return 0;
7287 }
7288 #endif /* PIKCHR_SHELL */
7289
7290 #line 7315 "pikchr.c"
7291

Keyboard Shortcuts

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