Fossil SCM

New pikchr.c that fixes the arc bounding box problem.

drh 2020-09-14 15:53 trunk
Commit c17f5fe24697f488210238f944dc760a193554db1fca79b2e4a25ea227ccc683
1 file changed +1338 -1362
+1338 -1362
--- src/pikchr.c
+++ src/pikchr.c
@@ -131,10 +131,11 @@
131131
typedef struct PToken PToken; /* A single token */
132132
typedef struct PElem PElem; /* A single diagram object or "element" */
133133
typedef struct PEList PEList; /* A list of elements */
134134
typedef struct PClass PClass; /* Description of elements types */
135135
typedef double PNum; /* Numeric value */
136
+typedef struct PRel PRel; /* Absolute or percentage value */
136137
typedef struct PPoint PPoint; /* A position in 2-D space */
137138
typedef struct PVar PVar; /* script-defined variable */
138139
typedef struct PBox PBox; /* A bounding box */
139140
140141
/* Compass points */
@@ -198,10 +199,24 @@
198199
199200
/* A bounding box */
200201
struct PBox {
201202
PPoint sw, ne; /* Lower-left and top-right corners */
202203
};
204
+
205
+/* An Absolute or a relative distance. The absolute distance
206
+** is stored in rAbs and the relative distance is stored in rRel.
207
+** Usually, one or the other will be 0.0. When using a PRel to
208
+** update an existing value, the computation is usually something
209
+** like this:
210
+**
211
+** value = PRel.rAbs + value*PRel.rRel
212
+**
213
+*/
214
+struct PRel {
215
+ PNum rAbs; /* Absolute value */
216
+ PNum rRel; /* Value relative to current value */
217
+};
203218
204219
/* A variable created by the ID = EXPR construct of the PIKCHR script
205220
**
206221
** PIKCHR (and PIC) scripts do not use many varaibles, so it is reasonable
207222
** to store them all on a linked list.
@@ -351,14 +366,15 @@
351366
*/
352367
struct PClass {
353368
const char *zName; /* Name of class */
354369
char isLine; /* True if a line class */
355370
char eJust; /* Use box-style text justification */
356
- void (*xInit)(Pik*,PElem*); /* Initializer */
357
- void (*xNumProp)(Pik*,PElem*,PToken*); /* Value change notification */
358
- PPoint (*xChop)(PElem*,PPoint*); /* Chopper */
359
- PPoint (*xOffset)(Pik*,PElem*,int); /* Offset from center to edge point */
371
+ void (*xInit)(Pik*,PElem*); /* Initializer */
372
+ void (*xNumProp)(Pik*,PElem*,PToken*); /* Value change notification */
373
+ void (*xCheck)(Pik*,PElem*); /* Checks to after parsing */
374
+ PPoint (*xChop)(PElem*,PPoint*); /* Chopper */
375
+ PPoint (*xOffset)(Pik*,PElem*,int); /* Offset from .c to edge point */
360376
void (*xFit)(Pik*,PElem*,PNum w,PNum h); /* Size to fit text */
361377
void (*xRender)(Pik*,PElem*); /* Render */
362378
};
363379
364380
@@ -391,15 +407,16 @@
391407
static PNum pik_get_var(Pik*,PToken*);
392408
static PNum pik_atof(Pik*,PToken*);
393409
static void pik_after_adding_attributes(Pik*,PElem*);
394410
static void pik_elem_move(PElem*,PNum dx, PNum dy);
395411
static void pik_elist_move(PEList*,PNum dx, PNum dy);
396
-static void pik_set_numprop(Pik*,PToken*,PNum,PNum);
412
+static void pik_set_numprop(Pik*,PToken*,PRel*);
413
+static void pik_set_clrprop(Pik*,PToken*,PNum);
397414
static void pik_set_dashed(Pik*,PToken*,PNum*);
398415
static void pik_then(Pik*,PToken*,PElem*);
399
-static void pik_add_direction(Pik*,PToken*,PNum*,int);
400
-static void pik_move_hdg(Pik*,PNum*,PToken*,PNum,PToken*,PToken*);
416
+static void pik_add_direction(Pik*,PToken*,PRel*);
417
+static void pik_move_hdg(Pik*,PRel*,PToken*,PNum,PToken*,PToken*);
401418
static void pik_evenwith(Pik*,PToken*,PPoint*);
402419
static void pik_set_from(Pik*,PElem*,PToken*,PPoint*);
403420
static void pik_add_to(Pik*,PElem*,PToken*,PPoint*);
404421
static void pik_close_path(Pik*,PToken*);
405422
static void pik_set_at(Pik*,PToken*,PPoint*,PToken*);
@@ -428,11 +445,11 @@
428445
static void pik_behind(Pik*,PElem*);
429446
static PElem *pik_assert(Pik*,PNum,PToken*,PNum);
430447
static PElem *pik_place_assert(Pik*,PPoint*,PToken*,PPoint*);
431448
432449
433
-#line 459 "pikchr.c"
450
+#line 476 "pikchr.c"
434451
/**************** End of %include directives **********************************/
435452
/* These constants specify the various numeric values for terminal symbols.
436453
***************** Begin token definitions *************************************/
437454
#ifndef T_ID
438455
#define T_ID 1
@@ -585,21 +602,22 @@
585602
#ifndef INTERFACE
586603
# define INTERFACE 1
587604
#endif
588605
/************* Begin control #defines *****************************************/
589606
#define YYCODETYPE unsigned char
590
-#define YYNOCODE 128
607
+#define YYNOCODE 130
591608
#define YYACTIONTYPE unsigned short int
592609
#define pik_parserTOKENTYPE PToken
593610
typedef union {
594611
int yyinit;
595612
pik_parserTOKENTYPE yy0;
596
- PEList* yy52;
597
- PElem* yy58;
598
- int yy92;
599
- PPoint yy95;
600
- PNum yy149;
613
+ PRel yy60;
614
+ PEList* yy72;
615
+ PNum yy73;
616
+ int yy74;
617
+ PPoint yy139;
618
+ PElem* yy254;
601619
} YYMINORTYPE;
602620
#ifndef YYSTACKDEPTH
603621
#define YYSTACKDEPTH 100
604622
#endif
605623
#define pik_parserARG_SDECL
@@ -611,22 +629,22 @@
611629
#define pik_parserCTX_PDECL ,Pik *p
612630
#define pik_parserCTX_PARAM ,p
613631
#define pik_parserCTX_FETCH Pik *p=yypParser->p;
614632
#define pik_parserCTX_STORE yypParser->p=p;
615633
#define YYFALLBACK 1
616
-#define YYNSTATE 164
617
-#define YYNRULE 155
618
-#define YYNRULE_WITH_ACTION 116
634
+#define YYNSTATE 157
635
+#define YYNRULE 151
636
+#define YYNRULE_WITH_ACTION 111
619637
#define YYNTOKEN 94
620
-#define YY_MAX_SHIFT 163
621
-#define YY_MIN_SHIFTREDUCE 283
622
-#define YY_MAX_SHIFTREDUCE 437
623
-#define YY_ERROR_ACTION 438
624
-#define YY_ACCEPT_ACTION 439
625
-#define YY_NO_ACTION 440
626
-#define YY_MIN_REDUCE 441
627
-#define YY_MAX_REDUCE 595
638
+#define YY_MAX_SHIFT 156
639
+#define YY_MIN_SHIFTREDUCE 276
640
+#define YY_MAX_SHIFTREDUCE 426
641
+#define YY_ERROR_ACTION 427
642
+#define YY_ACCEPT_ACTION 428
643
+#define YY_NO_ACTION 429
644
+#define YY_MIN_REDUCE 430
645
+#define YY_MAX_REDUCE 580
628646
/************* End control #defines *******************************************/
629647
#define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
630648
631649
/* Define the yytestcase() macro to be a no-op if is not already defined
632650
** otherwise.
@@ -689,333 +707,308 @@
689707
** yy_reduce_ofst[] For each state, the offset into yy_action for
690708
** shifting non-terminals after a reduce.
691709
** yy_default[] Default action for each state.
692710
**
693711
*********** Begin parsing tables **********************************************/
694
-#define YY_ACTTAB_COUNT (1270)
712
+#define YY_ACTTAB_COUNT (1159)
695713
static const YYACTIONTYPE yy_action[] = {
696
- /* 0 */ 569, 554, 441, 21, 555, 556, 116, 442, 449, 27,
697
- /* 10 */ 569, 132, 31, 445, 65, 64, 63, 62, 422, 423,
698
- /* 20 */ 339, 70, 83, 374, 163, 133, 569, 23, 494, 161,
699
- /* 30 */ 124, 318, 319, 6, 5, 37, 573, 36, 4, 72,
700
- /* 40 */ 131, 55, 335, 67, 54, 34, 430, 339, 339, 339,
701
- /* 50 */ 339, 420, 421, 340, 341, 342, 343, 344, 345, 346,
702
- /* 60 */ 347, 466, 31, 528, 571, 78, 571, 407, 408, 409,
703
- /* 70 */ 410, 466, 30, 436, 435, 491, 161, 124, 305, 422,
704
- /* 80 */ 423, 339, 356, 83, 526, 161, 124, 466, 8, 115,
705
- /* 90 */ 75, 32, 318, 319, 6, 5, 37, 122, 36, 4,
706
- /* 100 */ 72, 131, 70, 335, 67, 429, 52, 48, 339, 339,
707
- /* 110 */ 339, 339, 420, 421, 340, 341, 342, 343, 344, 345,
708
- /* 120 */ 346, 347, 465, 301, 431, 432, 433, 434, 26, 443,
709
- /* 130 */ 449, 27, 465, 25, 329, 445, 65, 64, 63, 62,
710
- /* 140 */ 422, 423, 339, 84, 83, 29, 163, 85, 465, 23,
711
- /* 150 */ 531, 161, 124, 318, 319, 6, 5, 37, 76, 36,
712
- /* 160 */ 4, 72, 131, 76, 335, 67, 394, 395, 42, 339,
713
- /* 170 */ 339, 339, 339, 420, 421, 340, 341, 342, 343, 344,
714
- /* 180 */ 345, 346, 347, 391, 430, 294, 60, 61, 65, 64,
715
- /* 190 */ 63, 62, 82, 33, 374, 63, 62, 20, 24, 391,
716
- /* 200 */ 430, 68, 60, 61, 81, 66, 303, 80, 2, 3,
717
- /* 210 */ 374, 436, 435, 20, 419, 349, 349, 349, 349, 349,
718
- /* 220 */ 349, 349, 349, 349, 349, 114, 418, 436, 435, 399,
719
- /* 230 */ 529, 161, 124, 135, 125, 161, 124, 355, 457, 427,
720
- /* 240 */ 153, 140, 130, 429, 564, 7, 400, 401, 402, 404,
721
- /* 250 */ 81, 139, 303, 80, 154, 407, 408, 409, 410, 429,
722
- /* 260 */ 113, 425, 431, 432, 433, 434, 149, 9, 122, 390,
723
- /* 270 */ 156, 155, 128, 127, 161, 124, 113, 11, 431, 432,
724
- /* 280 */ 433, 434, 378, 157, 122, 390, 156, 155, 391, 430,
725
- /* 290 */ 39, 60, 61, 128, 377, 159, 447, 27, 74, 374,
726
- /* 300 */ 149, 13, 59, 14, 119, 448, 118, 125, 161, 124,
727
- /* 310 */ 15, 126, 442, 449, 27, 69, 436, 435, 445, 143,
728
- /* 320 */ 141, 65, 64, 63, 62, 376, 158, 150, 358, 163,
729
- /* 330 */ 57, 439, 23, 86, 389, 1, 65, 64, 63, 62,
730
- /* 340 */ 53, 18, 125, 161, 124, 58, 148, 147, 429, 389,
731
- /* 350 */ 382, 380, 381, 38, 375, 45, 143, 141, 65, 64,
732
- /* 360 */ 63, 62, 154, 376, 158, 113, 160, 431, 432, 433,
733
- /* 370 */ 434, 440, 71, 122, 390, 156, 155, 53, 35, 440,
734
- /* 380 */ 162, 17, 16, 148, 147, 440, 440, 123, 440, 19,
735
- /* 390 */ 38, 146, 142, 426, 391, 440, 440, 60, 61, 65,
736
- /* 400 */ 64, 63, 62, 314, 440, 112, 532, 440, 59, 440,
737
- /* 410 */ 440, 296, 297, 298, 440, 300, 440, 440, 17, 16,
738
- /* 420 */ 391, 440, 440, 60, 61, 123, 19, 440, 146, 142,
739
- /* 430 */ 426, 374, 391, 330, 59, 60, 61, 391, 326, 440,
740
- /* 440 */ 60, 61, 440, 374, 440, 532, 59, 440, 374, 440,
741
- /* 450 */ 532, 59, 440, 532, 440, 440, 422, 423, 339, 440,
742
- /* 460 */ 440, 440, 440, 136, 134, 440, 87, 41, 440, 440,
743
- /* 470 */ 440, 113, 43, 440, 430, 125, 161, 124, 440, 122,
744
- /* 480 */ 390, 156, 155, 98, 374, 339, 339, 339, 339, 420,
745
- /* 490 */ 421, 440, 125, 161, 124, 154, 440, 113, 22, 440,
746
- /* 500 */ 440, 436, 435, 440, 440, 122, 390, 156, 155, 113,
747
- /* 510 */ 440, 440, 154, 440, 113, 440, 440, 122, 390, 156,
748
- /* 520 */ 155, 440, 122, 390, 156, 155, 391, 144, 440, 60,
749
- /* 530 */ 61, 391, 145, 429, 60, 61, 440, 374, 440, 440,
750
- /* 540 */ 59, 440, 374, 440, 440, 59, 440, 440, 440, 440,
751
- /* 550 */ 113, 440, 431, 432, 433, 434, 391, 440, 122, 60,
752
- /* 560 */ 61, 391, 440, 440, 60, 61, 440, 374, 440, 440,
753
- /* 570 */ 59, 440, 112, 440, 391, 59, 440, 60, 61, 391,
754
- /* 580 */ 440, 440, 60, 61, 440, 374, 114, 440, 46, 440,
755
- /* 590 */ 374, 92, 440, 50, 440, 125, 161, 124, 440, 457,
756
- /* 600 */ 125, 161, 124, 113, 79, 79, 440, 440, 113, 440,
757
- /* 610 */ 440, 122, 390, 156, 155, 154, 122, 390, 156, 155,
758
- /* 620 */ 154, 74, 440, 149, 440, 440, 114, 440, 496, 118,
759
- /* 630 */ 125, 161, 124, 113, 440, 125, 161, 124, 113, 471,
760
- /* 640 */ 440, 122, 390, 156, 155, 430, 122, 390, 156, 155,
761
- /* 650 */ 150, 113, 440, 440, 440, 154, 113, 440, 440, 122,
762
- /* 660 */ 390, 156, 155, 440, 122, 390, 156, 155, 440, 74,
763
- /* 670 */ 440, 149, 436, 435, 440, 440, 495, 118, 125, 161,
764
- /* 680 */ 124, 74, 440, 149, 114, 440, 440, 440, 489, 118,
765
- /* 690 */ 125, 161, 124, 125, 161, 124, 440, 446, 150, 65,
766
- /* 700 */ 64, 63, 62, 440, 429, 440, 440, 74, 440, 149,
767
- /* 710 */ 150, 440, 293, 154, 479, 118, 125, 161, 124, 440,
768
- /* 720 */ 74, 440, 149, 431, 432, 433, 434, 478, 118, 125,
769
- /* 730 */ 161, 124, 74, 440, 149, 440, 150, 440, 440, 515,
770
- /* 740 */ 118, 125, 161, 124, 440, 74, 440, 149, 440, 150,
771
- /* 750 */ 440, 440, 138, 118, 125, 161, 124, 440, 74, 440,
772
- /* 760 */ 149, 150, 440, 440, 440, 523, 118, 125, 161, 124,
773
- /* 770 */ 74, 440, 149, 440, 150, 440, 440, 525, 118, 125,
774
- /* 780 */ 161, 124, 74, 440, 149, 440, 440, 150, 440, 522,
775
- /* 790 */ 118, 125, 161, 124, 93, 65, 64, 63, 62, 150,
776
- /* 800 */ 440, 440, 440, 125, 161, 124, 74, 40, 149, 440,
777
- /* 810 */ 440, 150, 440, 524, 118, 125, 161, 124, 440, 74,
778
- /* 820 */ 440, 149, 440, 154, 440, 440, 521, 118, 125, 161,
779
- /* 830 */ 124, 74, 440, 149, 440, 150, 440, 440, 520, 118,
780
- /* 840 */ 125, 161, 124, 440, 74, 440, 149, 440, 150, 440,
781
- /* 850 */ 440, 519, 118, 125, 161, 124, 440, 74, 440, 149,
782
- /* 860 */ 150, 440, 440, 440, 518, 118, 125, 161, 124, 74,
783
- /* 870 */ 440, 149, 440, 150, 440, 440, 517, 118, 125, 161,
784
- /* 880 */ 124, 74, 440, 149, 440, 440, 150, 440, 151, 118,
785
- /* 890 */ 125, 161, 124, 90, 65, 64, 63, 62, 150, 440,
786
- /* 900 */ 440, 440, 125, 161, 124, 74, 440, 149, 440, 440,
787
- /* 910 */ 150, 440, 152, 118, 125, 161, 124, 440, 73, 440,
788
- /* 920 */ 149, 440, 154, 10, 440, 117, 118, 125, 161, 124,
789
- /* 930 */ 74, 440, 149, 440, 150, 440, 440, 137, 118, 125,
790
- /* 940 */ 161, 124, 440, 74, 440, 149, 440, 150, 440, 440,
791
- /* 950 */ 475, 118, 125, 161, 124, 440, 91, 440, 149, 150,
792
- /* 960 */ 440, 440, 440, 440, 129, 125, 161, 124, 77, 440,
793
- /* 970 */ 440, 325, 150, 65, 64, 63, 62, 125, 161, 124,
794
- /* 980 */ 65, 64, 63, 62, 440, 150, 440, 440, 440, 460,
795
- /* 990 */ 440, 28, 104, 389, 440, 440, 440, 154, 440, 49,
796
- /* 1000 */ 440, 125, 161, 124, 105, 44, 440, 440, 440, 106,
797
- /* 1010 */ 440, 440, 440, 125, 161, 124, 440, 107, 125, 161,
798
- /* 1020 */ 124, 154, 440, 440, 440, 94, 125, 161, 124, 440,
799
- /* 1030 */ 440, 88, 440, 154, 125, 161, 124, 440, 154, 108,
800
- /* 1040 */ 125, 161, 124, 440, 440, 440, 154, 440, 125, 161,
801
- /* 1050 */ 124, 440, 95, 440, 154, 96, 440, 440, 440, 440,
802
- /* 1060 */ 154, 125, 161, 124, 125, 161, 124, 440, 154, 65,
803
- /* 1070 */ 64, 63, 62, 440, 440, 440, 89, 440, 440, 109,
804
- /* 1080 */ 440, 154, 97, 440, 154, 125, 161, 124, 125, 161,
805
- /* 1090 */ 124, 125, 161, 124, 65, 64, 63, 62, 12, 65,
806
- /* 1100 */ 64, 63, 62, 110, 440, 154, 440, 354, 154, 440,
807
- /* 1110 */ 440, 154, 125, 161, 124, 440, 111, 440, 47, 99,
808
- /* 1120 */ 440, 440, 440, 440, 100, 125, 161, 124, 125, 161,
809
- /* 1130 */ 124, 440, 154, 125, 161, 124, 440, 440, 440, 440,
810
- /* 1140 */ 101, 440, 440, 440, 440, 154, 440, 102, 154, 125,
811
- /* 1150 */ 161, 124, 440, 154, 103, 440, 125, 161, 124, 440,
812
- /* 1160 */ 440, 546, 440, 125, 161, 124, 440, 440, 440, 154,
813
- /* 1170 */ 125, 161, 124, 440, 440, 545, 154, 440, 544, 440,
814
- /* 1180 */ 440, 440, 440, 154, 125, 161, 124, 125, 161, 124,
815
- /* 1190 */ 154, 543, 65, 64, 63, 62, 65, 64, 63, 62,
816
- /* 1200 */ 125, 161, 124, 440, 154, 353, 440, 154, 440, 393,
817
- /* 1210 */ 440, 440, 120, 440, 440, 121, 440, 440, 440, 440,
818
- /* 1220 */ 154, 125, 161, 124, 125, 161, 124, 65, 64, 63,
819
- /* 1230 */ 62, 65, 64, 63, 62, 309, 65, 64, 63, 62,
820
- /* 1240 */ 440, 154, 440, 440, 154, 440, 51, 440, 440, 65,
821
- /* 1250 */ 64, 63, 62, 440, 440, 56, 65, 64, 63, 62,
822
- /* 1260 */ 440, 440, 392, 440, 440, 440, 440, 440, 440, 389,
714
+ /* 0 */ 554, 430, 21, 436, 25, 71, 126, 142, 50, 46,
715
+ /* 10 */ 554, 33, 437, 111, 118, 154, 117, 125, 411, 412,
716
+ /* 20 */ 327, 538, 78, 512, 539, 540, 554, 62, 61, 60,
717
+ /* 30 */ 59, 310, 311, 6, 5, 30, 143, 29, 4, 69,
718
+ /* 40 */ 124, 24, 323, 64, 558, 294, 45, 327, 327, 327,
719
+ /* 50 */ 327, 409, 410, 328, 329, 330, 331, 332, 333, 334,
720
+ /* 60 */ 335, 457, 62, 61, 60, 59, 119, 431, 438, 25,
721
+ /* 70 */ 33, 457, 67, 434, 27, 286, 478, 154, 117, 411,
722
+ /* 80 */ 412, 327, 28, 78, 156, 344, 298, 457, 428, 23,
723
+ /* 90 */ 318, 8, 310, 311, 6, 5, 30, 80, 29, 4,
724
+ /* 100 */ 69, 124, 81, 323, 64, 475, 154, 117, 327, 327,
725
+ /* 110 */ 327, 327, 409, 410, 328, 329, 330, 331, 332, 333,
726
+ /* 120 */ 334, 335, 379, 419, 41, 57, 58, 73, 62, 61,
727
+ /* 130 */ 60, 59, 32, 362, 382, 383, 20, 287, 379, 419,
728
+ /* 140 */ 40, 57, 58, 77, 316, 296, 76, 60, 59, 362,
729
+ /* 150 */ 425, 424, 20, 67, 337, 337, 337, 337, 337, 337,
730
+ /* 160 */ 337, 337, 337, 337, 366, 150, 425, 424, 387, 362,
731
+ /* 170 */ 364, 151, 62, 61, 60, 59, 301, 34, 42, 146,
732
+ /* 180 */ 26, 123, 418, 365, 152, 388, 389, 390, 392, 77,
733
+ /* 190 */ 65, 296, 76, 73, 395, 396, 397, 398, 418, 104,
734
+ /* 200 */ 2, 420, 421, 422, 423, 142, 7, 115, 378, 149,
735
+ /* 210 */ 148, 121, 120, 154, 117, 104, 3, 420, 421, 422,
736
+ /* 220 */ 423, 128, 408, 115, 378, 149, 148, 379, 419, 407,
737
+ /* 230 */ 57, 58, 116, 343, 121, 106, 416, 71, 362, 142,
738
+ /* 240 */ 63, 56, 414, 115, 480, 111, 118, 154, 117, 36,
739
+ /* 250 */ 132, 133, 52, 35, 9, 425, 424, 11, 136, 134,
740
+ /* 260 */ 62, 61, 60, 59, 62, 61, 60, 59, 143, 395,
741
+ /* 270 */ 396, 397, 398, 377, 556, 74, 556, 377, 13, 51,
742
+ /* 280 */ 85, 39, 142, 43, 14, 141, 140, 418, 122, 118,
743
+ /* 290 */ 154, 117, 38, 364, 151, 136, 134, 62, 61, 60,
744
+ /* 300 */ 59, 15, 66, 112, 104, 346, 420, 421, 422, 423,
745
+ /* 310 */ 18, 143, 115, 378, 149, 148, 51, 516, 1, 54,
746
+ /* 320 */ 17, 16, 141, 140, 55, 510, 154, 117, 19, 38,
747
+ /* 330 */ 139, 135, 415, 379, 370, 363, 57, 58, 62, 61,
748
+ /* 340 */ 60, 59, 368, 369, 103, 68, 153, 56, 155, 37,
749
+ /* 350 */ 289, 290, 291, 429, 293, 116, 516, 17, 16, 379,
750
+ /* 360 */ 429, 516, 57, 58, 516, 19, 429, 139, 135, 415,
751
+ /* 370 */ 362, 379, 456, 56, 57, 58, 429, 429, 62, 61,
752
+ /* 380 */ 60, 59, 362, 429, 379, 56, 429, 57, 58, 429,
753
+ /* 390 */ 379, 377, 429, 57, 58, 362, 429, 47, 56, 429,
754
+ /* 400 */ 429, 103, 129, 127, 56, 419, 456, 515, 154, 117,
755
+ /* 410 */ 104, 62, 61, 60, 59, 362, 429, 429, 115, 378,
756
+ /* 420 */ 149, 148, 429, 379, 137, 429, 57, 58, 513, 154,
757
+ /* 430 */ 117, 429, 425, 424, 362, 429, 104, 56, 379, 138,
758
+ /* 440 */ 10, 57, 58, 429, 115, 378, 149, 148, 104, 362,
759
+ /* 450 */ 429, 379, 56, 429, 57, 58, 115, 378, 149, 148,
760
+ /* 460 */ 429, 104, 362, 429, 418, 44, 429, 104, 429, 115,
761
+ /* 470 */ 378, 149, 148, 429, 429, 115, 378, 149, 148, 429,
762
+ /* 480 */ 429, 104, 429, 420, 421, 422, 423, 379, 429, 115,
763
+ /* 490 */ 57, 58, 62, 61, 60, 59, 429, 429, 362, 429,
764
+ /* 500 */ 104, 48, 429, 105, 429, 429, 429, 429, 115, 378,
765
+ /* 510 */ 149, 148, 118, 154, 117, 104, 461, 411, 412, 327,
766
+ /* 520 */ 429, 12, 105, 115, 378, 149, 148, 419, 104, 429,
767
+ /* 530 */ 429, 118, 154, 117, 147, 446, 115, 378, 149, 148,
768
+ /* 540 */ 429, 429, 75, 75, 429, 429, 327, 327, 327, 327,
769
+ /* 550 */ 409, 410, 429, 147, 425, 424, 429, 429, 71, 429,
770
+ /* 560 */ 142, 429, 429, 429, 104, 479, 111, 118, 154, 117,
771
+ /* 570 */ 86, 72, 115, 378, 149, 148, 429, 429, 429, 118,
772
+ /* 580 */ 154, 117, 429, 71, 429, 142, 418, 429, 429, 143,
773
+ /* 590 */ 473, 111, 118, 154, 117, 429, 429, 62, 61, 60,
774
+ /* 600 */ 59, 147, 429, 429, 429, 420, 421, 422, 423, 71,
775
+ /* 610 */ 342, 142, 429, 429, 143, 429, 467, 111, 118, 154,
776
+ /* 620 */ 117, 429, 71, 429, 142, 429, 429, 429, 429, 466,
777
+ /* 630 */ 111, 118, 154, 117, 429, 71, 429, 142, 429, 429,
778
+ /* 640 */ 143, 429, 499, 111, 118, 154, 117, 71, 429, 142,
779
+ /* 650 */ 87, 429, 429, 143, 131, 111, 118, 154, 117, 118,
780
+ /* 660 */ 154, 117, 429, 71, 429, 142, 143, 429, 429, 429,
781
+ /* 670 */ 507, 111, 118, 154, 117, 429, 429, 429, 143, 429,
782
+ /* 680 */ 429, 147, 71, 429, 142, 429, 429, 429, 429, 509,
783
+ /* 690 */ 111, 118, 154, 117, 143, 62, 61, 60, 59, 429,
784
+ /* 700 */ 429, 62, 61, 60, 59, 429, 429, 71, 341, 142,
785
+ /* 710 */ 429, 429, 429, 143, 506, 111, 118, 154, 117, 71,
786
+ /* 720 */ 49, 142, 62, 61, 60, 59, 508, 111, 118, 154,
787
+ /* 730 */ 117, 429, 71, 429, 142, 381, 429, 429, 143, 505,
788
+ /* 740 */ 111, 118, 154, 117, 71, 419, 142, 429, 429, 429,
789
+ /* 750 */ 143, 504, 111, 118, 154, 117, 429, 71, 429, 142,
790
+ /* 760 */ 429, 429, 429, 143, 503, 111, 118, 154, 117, 71,
791
+ /* 770 */ 429, 142, 425, 424, 429, 143, 502, 111, 118, 154,
792
+ /* 780 */ 117, 429, 429, 71, 429, 142, 429, 429, 143, 429,
793
+ /* 790 */ 501, 111, 118, 154, 117, 429, 62, 61, 60, 59,
794
+ /* 800 */ 143, 429, 429, 429, 418, 429, 429, 429, 71, 380,
795
+ /* 810 */ 142, 429, 429, 429, 143, 144, 111, 118, 154, 117,
796
+ /* 820 */ 71, 429, 142, 420, 421, 422, 423, 145, 111, 118,
797
+ /* 830 */ 154, 117, 429, 70, 429, 142, 429, 429, 429, 143,
798
+ /* 840 */ 110, 111, 118, 154, 117, 71, 429, 142, 429, 429,
799
+ /* 850 */ 429, 143, 130, 111, 118, 154, 117, 429, 71, 429,
800
+ /* 860 */ 142, 429, 92, 429, 143, 463, 111, 118, 154, 117,
801
+ /* 870 */ 429, 118, 154, 117, 92, 429, 143, 22, 462, 462,
802
+ /* 880 */ 429, 429, 429, 118, 154, 117, 432, 438, 25, 143,
803
+ /* 890 */ 79, 105, 434, 147, 429, 429, 429, 449, 429, 31,
804
+ /* 900 */ 118, 154, 117, 156, 446, 147, 429, 429, 23, 429,
805
+ /* 910 */ 429, 429, 548, 107, 431, 438, 25, 429, 92, 429,
806
+ /* 920 */ 434, 429, 147, 429, 429, 429, 429, 118, 154, 117,
807
+ /* 930 */ 92, 156, 429, 429, 108, 108, 23, 429, 429, 118,
808
+ /* 940 */ 154, 117, 92, 429, 429, 429, 109, 109, 429, 147,
809
+ /* 950 */ 429, 118, 154, 117, 105, 429, 429, 429, 458, 84,
810
+ /* 960 */ 429, 147, 429, 118, 154, 117, 97, 435, 118, 154,
811
+ /* 970 */ 117, 98, 429, 147, 429, 118, 154, 117, 88, 429,
812
+ /* 980 */ 118, 154, 117, 82, 429, 147, 429, 118, 154, 117,
813
+ /* 990 */ 147, 429, 118, 154, 117, 429, 99, 147, 429, 429,
814
+ /* 1000 */ 429, 89, 147, 429, 429, 118, 154, 117, 429, 147,
815
+ /* 1010 */ 118, 154, 117, 90, 147, 62, 61, 60, 59, 83,
816
+ /* 1020 */ 429, 429, 118, 154, 117, 429, 100, 147, 118, 154,
817
+ /* 1030 */ 117, 429, 147, 429, 53, 118, 154, 117, 91, 62,
818
+ /* 1040 */ 61, 60, 59, 429, 147, 101, 429, 118, 154, 117,
819
+ /* 1050 */ 147, 102, 377, 429, 118, 154, 117, 147, 429, 429,
820
+ /* 1060 */ 118, 154, 117, 93, 429, 429, 429, 429, 94, 147,
821
+ /* 1070 */ 429, 429, 118, 154, 117, 95, 147, 118, 154, 117,
822
+ /* 1080 */ 96, 429, 147, 429, 118, 154, 117, 530, 429, 118,
823
+ /* 1090 */ 154, 117, 529, 429, 147, 429, 118, 154, 117, 147,
824
+ /* 1100 */ 429, 118, 154, 117, 528, 429, 147, 429, 429, 429,
825
+ /* 1110 */ 527, 147, 429, 118, 154, 117, 429, 429, 147, 118,
826
+ /* 1120 */ 154, 117, 113, 147, 429, 429, 429, 114, 429, 429,
827
+ /* 1130 */ 429, 118, 154, 117, 429, 147, 118, 154, 117, 429,
828
+ /* 1140 */ 429, 147, 429, 429, 429, 429, 429, 429, 429, 429,
829
+ /* 1150 */ 429, 429, 429, 147, 429, 429, 429, 429, 147,
823830
};
824831
static const YYCODETYPE yy_lookahead[] = {
825
- /* 0 */ 0, 99, 0, 126, 102, 103, 94, 95, 96, 97,
826
- /* 10 */ 10, 100, 10, 101, 4, 5, 6, 7, 18, 19,
827
- /* 20 */ 20, 3, 22, 12, 112, 100, 26, 115, 107, 108,
828
- /* 30 */ 109, 31, 32, 33, 34, 35, 125, 37, 38, 39,
829
- /* 40 */ 40, 99, 42, 43, 102, 103, 2, 47, 48, 49,
832
+ /* 0 */ 0, 0, 128, 96, 97, 98, 100, 100, 4, 5,
833
+ /* 10 */ 10, 10, 105, 106, 107, 108, 109, 100, 18, 19,
834
+ /* 20 */ 20, 99, 22, 100, 102, 103, 26, 4, 5, 6,
835
+ /* 30 */ 7, 31, 32, 33, 34, 35, 129, 37, 38, 39,
836
+ /* 40 */ 40, 101, 42, 43, 127, 23, 23, 47, 48, 49,
830837
/* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
831
- /* 60 */ 60, 0, 10, 100, 122, 123, 124, 27, 28, 29,
832
- /* 70 */ 30, 10, 121, 29, 30, 107, 108, 109, 26, 18,
833
- /* 80 */ 19, 20, 17, 22, 107, 108, 109, 26, 23, 78,
834
- /* 90 */ 46, 101, 31, 32, 33, 34, 35, 86, 37, 38,
835
- /* 100 */ 39, 40, 84, 42, 43, 61, 4, 5, 47, 48,
838
+ /* 60 */ 60, 0, 4, 5, 6, 7, 94, 95, 96, 97,
839
+ /* 70 */ 10, 10, 3, 101, 120, 17, 107, 108, 109, 18,
840
+ /* 80 */ 19, 20, 122, 22, 112, 17, 26, 26, 116, 117,
841
+ /* 90 */ 2, 23, 31, 32, 33, 34, 35, 110, 37, 38,
842
+ /* 100 */ 39, 40, 110, 42, 43, 107, 108, 109, 47, 48,
836843
/* 110 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
837
- /* 120 */ 59, 60, 0, 23, 80, 81, 82, 83, 120, 95,
838
- /* 130 */ 96, 97, 10, 118, 2, 101, 4, 5, 6, 7,
839
- /* 140 */ 18, 19, 20, 110, 22, 121, 112, 110, 26, 115,
840
- /* 150 */ 107, 108, 109, 31, 32, 33, 34, 35, 46, 37,
841
- /* 160 */ 38, 39, 40, 46, 42, 43, 91, 92, 36, 47,
842
- /* 170 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
843
- /* 180 */ 58, 59, 60, 1, 2, 17, 4, 5, 4, 5,
844
- /* 190 */ 6, 7, 8, 16, 12, 6, 7, 15, 15, 1,
845
- /* 200 */ 2, 41, 4, 5, 22, 93, 24, 25, 38, 38,
846
- /* 210 */ 12, 29, 30, 15, 39, 61, 62, 63, 64, 65,
847
- /* 220 */ 66, 67, 68, 69, 70, 98, 39, 29, 30, 1,
848
- /* 230 */ 107, 108, 109, 45, 107, 108, 109, 17, 111, 76,
849
- /* 240 */ 12, 77, 14, 61, 117, 71, 18, 19, 20, 21,
850
- /* 250 */ 22, 75, 24, 25, 127, 27, 28, 29, 30, 61,
851
- /* 260 */ 78, 76, 80, 81, 82, 83, 100, 3, 86, 87,
852
- /* 270 */ 88, 89, 106, 107, 108, 109, 78, 3, 80, 81,
853
- /* 280 */ 82, 83, 24, 25, 86, 87, 88, 89, 1, 2,
854
- /* 290 */ 36, 4, 5, 127, 24, 25, 96, 97, 98, 12,
855
- /* 300 */ 100, 3, 15, 3, 90, 105, 106, 107, 108, 109,
856
- /* 310 */ 3, 94, 95, 96, 97, 3, 29, 30, 101, 2,
857
- /* 320 */ 3, 4, 5, 6, 7, 24, 25, 127, 73, 112,
858
- /* 330 */ 15, 114, 115, 98, 17, 13, 4, 5, 6, 7,
859
- /* 340 */ 23, 23, 107, 108, 109, 15, 29, 30, 61, 17,
860
- /* 350 */ 26, 26, 26, 36, 12, 23, 2, 3, 4, 5,
861
- /* 360 */ 6, 7, 127, 24, 25, 78, 85, 80, 81, 82,
862
- /* 370 */ 83, 128, 3, 86, 87, 88, 89, 23, 11, 128,
863
- /* 380 */ 79, 64, 65, 29, 30, 128, 128, 86, 128, 72,
864
- /* 390 */ 36, 74, 75, 76, 1, 128, 128, 4, 5, 4,
865
- /* 400 */ 5, 6, 7, 8, 128, 12, 46, 128, 15, 128,
866
- /* 410 */ 128, 18, 19, 20, 128, 22, 128, 128, 64, 65,
867
- /* 420 */ 1, 128, 128, 4, 5, 86, 72, 128, 74, 75,
868
- /* 430 */ 76, 12, 1, 2, 15, 4, 5, 1, 2, 128,
869
- /* 440 */ 4, 5, 128, 12, 128, 85, 15, 128, 12, 128,
870
- /* 450 */ 90, 15, 128, 93, 128, 128, 18, 19, 20, 128,
871
- /* 460 */ 128, 128, 128, 44, 45, 128, 98, 36, 128, 128,
872
- /* 470 */ 128, 78, 36, 128, 2, 107, 108, 109, 128, 86,
873
- /* 480 */ 87, 88, 89, 98, 12, 47, 48, 49, 50, 51,
874
- /* 490 */ 52, 128, 107, 108, 109, 127, 128, 78, 113, 128,
875
- /* 500 */ 128, 29, 30, 128, 128, 86, 87, 88, 89, 78,
876
- /* 510 */ 128, 128, 127, 128, 78, 128, 128, 86, 87, 88,
877
- /* 520 */ 89, 128, 86, 87, 88, 89, 1, 2, 128, 4,
878
- /* 530 */ 5, 1, 2, 61, 4, 5, 128, 12, 128, 128,
879
- /* 540 */ 15, 128, 12, 128, 128, 15, 128, 128, 128, 128,
880
- /* 550 */ 78, 128, 80, 81, 82, 83, 1, 128, 86, 4,
881
- /* 560 */ 5, 1, 128, 128, 4, 5, 128, 12, 128, 128,
882
- /* 570 */ 15, 128, 12, 128, 1, 15, 128, 4, 5, 1,
883
- /* 580 */ 128, 128, 4, 5, 128, 12, 98, 128, 15, 128,
884
- /* 590 */ 12, 98, 128, 15, 128, 107, 108, 109, 128, 111,
885
- /* 600 */ 107, 108, 109, 78, 116, 117, 128, 128, 78, 128,
886
- /* 610 */ 128, 86, 87, 88, 89, 127, 86, 87, 88, 89,
887
- /* 620 */ 127, 98, 128, 100, 128, 128, 98, 128, 105, 106,
888
- /* 630 */ 107, 108, 109, 78, 128, 107, 108, 109, 78, 111,
889
- /* 640 */ 128, 86, 87, 88, 89, 2, 86, 87, 88, 89,
890
- /* 650 */ 127, 78, 128, 128, 128, 127, 78, 128, 128, 86,
891
- /* 660 */ 87, 88, 89, 128, 86, 87, 88, 89, 128, 98,
892
- /* 670 */ 128, 100, 29, 30, 128, 128, 105, 106, 107, 108,
893
- /* 680 */ 109, 98, 128, 100, 98, 128, 128, 128, 105, 106,
894
- /* 690 */ 107, 108, 109, 107, 108, 109, 128, 111, 127, 4,
895
- /* 700 */ 5, 6, 7, 128, 61, 128, 128, 98, 128, 100,
896
- /* 710 */ 127, 128, 17, 127, 105, 106, 107, 108, 109, 128,
897
- /* 720 */ 98, 128, 100, 80, 81, 82, 83, 105, 106, 107,
898
- /* 730 */ 108, 109, 98, 128, 100, 128, 127, 128, 128, 105,
899
- /* 740 */ 106, 107, 108, 109, 128, 98, 128, 100, 128, 127,
900
- /* 750 */ 128, 128, 105, 106, 107, 108, 109, 128, 98, 128,
901
- /* 760 */ 100, 127, 128, 128, 128, 105, 106, 107, 108, 109,
902
- /* 770 */ 98, 128, 100, 128, 127, 128, 128, 105, 106, 107,
903
- /* 780 */ 108, 109, 98, 128, 100, 128, 128, 127, 128, 105,
904
- /* 790 */ 106, 107, 108, 109, 98, 4, 5, 6, 7, 127,
905
- /* 800 */ 128, 128, 128, 107, 108, 109, 98, 16, 100, 128,
906
- /* 810 */ 128, 127, 128, 105, 106, 107, 108, 109, 128, 98,
907
- /* 820 */ 128, 100, 128, 127, 128, 128, 105, 106, 107, 108,
908
- /* 830 */ 109, 98, 128, 100, 128, 127, 128, 128, 105, 106,
909
- /* 840 */ 107, 108, 109, 128, 98, 128, 100, 128, 127, 128,
910
- /* 850 */ 128, 105, 106, 107, 108, 109, 128, 98, 128, 100,
911
- /* 860 */ 127, 128, 128, 128, 105, 106, 107, 108, 109, 98,
912
- /* 870 */ 128, 100, 128, 127, 128, 128, 105, 106, 107, 108,
913
- /* 880 */ 109, 98, 128, 100, 128, 128, 127, 128, 105, 106,
914
- /* 890 */ 107, 108, 109, 98, 4, 5, 6, 7, 127, 128,
915
- /* 900 */ 128, 128, 107, 108, 109, 98, 128, 100, 128, 128,
916
- /* 910 */ 127, 128, 105, 106, 107, 108, 109, 128, 98, 128,
917
- /* 920 */ 100, 128, 127, 33, 128, 105, 106, 107, 108, 109,
918
- /* 930 */ 98, 128, 100, 128, 127, 128, 128, 105, 106, 107,
919
- /* 940 */ 108, 109, 128, 98, 128, 100, 128, 127, 128, 128,
920
- /* 950 */ 105, 106, 107, 108, 109, 128, 98, 128, 100, 127,
921
- /* 960 */ 128, 128, 128, 128, 106, 107, 108, 109, 98, 128,
922
- /* 970 */ 128, 2, 127, 4, 5, 6, 7, 107, 108, 109,
923
- /* 980 */ 4, 5, 6, 7, 128, 127, 128, 128, 128, 119,
924
- /* 990 */ 128, 121, 98, 17, 128, 128, 128, 127, 128, 23,
925
- /* 1000 */ 128, 107, 108, 109, 98, 36, 128, 128, 128, 98,
926
- /* 1010 */ 128, 128, 128, 107, 108, 109, 128, 98, 107, 108,
927
- /* 1020 */ 109, 127, 128, 128, 128, 98, 107, 108, 109, 128,
928
- /* 1030 */ 128, 98, 128, 127, 107, 108, 109, 128, 127, 98,
929
- /* 1040 */ 107, 108, 109, 128, 128, 128, 127, 128, 107, 108,
930
- /* 1050 */ 109, 128, 98, 128, 127, 98, 128, 128, 128, 128,
931
- /* 1060 */ 127, 107, 108, 109, 107, 108, 109, 128, 127, 4,
932
- /* 1070 */ 5, 6, 7, 128, 128, 128, 98, 128, 128, 98,
933
- /* 1080 */ 128, 127, 98, 128, 127, 107, 108, 109, 107, 108,
934
- /* 1090 */ 109, 107, 108, 109, 4, 5, 6, 7, 33, 4,
935
- /* 1100 */ 5, 6, 7, 98, 128, 127, 128, 17, 127, 128,
936
- /* 1110 */ 128, 127, 107, 108, 109, 128, 98, 128, 23, 98,
937
- /* 1120 */ 128, 128, 128, 128, 98, 107, 108, 109, 107, 108,
938
- /* 1130 */ 109, 128, 127, 107, 108, 109, 128, 128, 128, 128,
939
- /* 1140 */ 98, 128, 128, 128, 128, 127, 128, 98, 127, 107,
940
- /* 1150 */ 108, 109, 128, 127, 98, 128, 107, 108, 109, 128,
941
- /* 1160 */ 128, 98, 128, 107, 108, 109, 128, 128, 128, 127,
942
- /* 1170 */ 107, 108, 109, 128, 128, 98, 127, 128, 98, 128,
943
- /* 1180 */ 128, 128, 128, 127, 107, 108, 109, 107, 108, 109,
944
- /* 1190 */ 127, 98, 4, 5, 6, 7, 4, 5, 6, 7,
945
- /* 1200 */ 107, 108, 109, 128, 127, 17, 128, 127, 128, 17,
946
- /* 1210 */ 128, 128, 98, 128, 128, 98, 128, 128, 128, 128,
947
- /* 1220 */ 127, 107, 108, 109, 107, 108, 109, 4, 5, 6,
948
- /* 1230 */ 7, 4, 5, 6, 7, 8, 4, 5, 6, 7,
949
- /* 1240 */ 128, 127, 128, 128, 127, 128, 23, 128, 128, 4,
950
- /* 1250 */ 5, 6, 7, 128, 128, 23, 4, 5, 6, 7,
951
- /* 1260 */ 128, 128, 17, 128, 128, 128, 128, 128, 128, 17,
952
- /* 1270 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
953
- /* 1280 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
954
- /* 1290 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
955
- /* 1300 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
956
- /* 1310 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
957
- /* 1320 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
958
- /* 1330 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
959
- /* 1340 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
960
- /* 1350 */ 128, 94, 94, 94, 94, 94, 94, 94, 94, 94,
961
- /* 1360 */ 94, 94, 94, 94,
844
+ /* 120 */ 59, 60, 1, 2, 36, 4, 5, 46, 4, 5,
845
+ /* 130 */ 6, 7, 123, 12, 91, 92, 15, 17, 1, 2,
846
+ /* 140 */ 16, 4, 5, 22, 2, 24, 25, 6, 7, 12,
847
+ /* 150 */ 29, 30, 15, 84, 61, 62, 63, 64, 65, 66,
848
+ /* 160 */ 67, 68, 69, 70, 24, 25, 29, 30, 1, 12,
849
+ /* 170 */ 24, 25, 4, 5, 6, 7, 8, 16, 36, 12,
850
+ /* 180 */ 15, 14, 61, 24, 25, 18, 19, 20, 21, 22,
851
+ /* 190 */ 41, 24, 25, 46, 27, 28, 29, 30, 61, 78,
852
+ /* 200 */ 38, 80, 81, 82, 83, 100, 71, 86, 87, 88,
853
+ /* 210 */ 89, 106, 107, 108, 109, 78, 38, 80, 81, 82,
854
+ /* 220 */ 83, 45, 39, 86, 87, 88, 89, 1, 2, 39,
855
+ /* 230 */ 4, 5, 86, 17, 129, 78, 76, 98, 12, 100,
856
+ /* 240 */ 93, 15, 76, 86, 105, 106, 107, 108, 109, 99,
857
+ /* 250 */ 75, 77, 102, 103, 3, 29, 30, 3, 2, 3,
858
+ /* 260 */ 4, 5, 6, 7, 4, 5, 6, 7, 129, 27,
859
+ /* 270 */ 28, 29, 30, 17, 124, 125, 126, 17, 3, 23,
860
+ /* 280 */ 98, 36, 100, 23, 3, 29, 30, 61, 106, 107,
861
+ /* 290 */ 108, 109, 36, 24, 25, 2, 3, 4, 5, 6,
862
+ /* 300 */ 7, 3, 3, 90, 78, 73, 80, 81, 82, 83,
863
+ /* 310 */ 23, 129, 86, 87, 88, 89, 23, 46, 13, 15,
864
+ /* 320 */ 64, 65, 29, 30, 15, 107, 108, 109, 72, 36,
865
+ /* 330 */ 74, 75, 76, 1, 26, 12, 4, 5, 4, 5,
866
+ /* 340 */ 6, 7, 26, 26, 12, 3, 85, 15, 79, 11,
867
+ /* 350 */ 18, 19, 20, 130, 22, 86, 85, 64, 65, 1,
868
+ /* 360 */ 130, 90, 4, 5, 93, 72, 130, 74, 75, 76,
869
+ /* 370 */ 12, 1, 2, 15, 4, 5, 130, 130, 4, 5,
870
+ /* 380 */ 6, 7, 12, 130, 1, 15, 130, 4, 5, 130,
871
+ /* 390 */ 1, 17, 130, 4, 5, 12, 130, 23, 15, 130,
872
+ /* 400 */ 130, 12, 44, 45, 15, 2, 36, 107, 108, 109,
873
+ /* 410 */ 78, 4, 5, 6, 7, 12, 130, 130, 86, 87,
874
+ /* 420 */ 88, 89, 130, 1, 2, 130, 4, 5, 107, 108,
875
+ /* 430 */ 109, 130, 29, 30, 12, 130, 78, 15, 1, 2,
876
+ /* 440 */ 33, 4, 5, 130, 86, 87, 88, 89, 78, 12,
877
+ /* 450 */ 130, 1, 15, 130, 4, 5, 86, 87, 88, 89,
878
+ /* 460 */ 130, 78, 12, 130, 61, 15, 130, 78, 130, 86,
879
+ /* 470 */ 87, 88, 89, 130, 130, 86, 87, 88, 89, 130,
880
+ /* 480 */ 130, 78, 130, 80, 81, 82, 83, 1, 130, 86,
881
+ /* 490 */ 4, 5, 4, 5, 6, 7, 130, 130, 12, 130,
882
+ /* 500 */ 78, 15, 130, 98, 130, 130, 130, 130, 86, 87,
883
+ /* 510 */ 88, 89, 107, 108, 109, 78, 111, 18, 19, 20,
884
+ /* 520 */ 130, 33, 98, 86, 87, 88, 89, 2, 78, 130,
885
+ /* 530 */ 130, 107, 108, 109, 129, 111, 86, 87, 88, 89,
886
+ /* 540 */ 130, 130, 118, 119, 130, 130, 47, 48, 49, 50,
887
+ /* 550 */ 51, 52, 130, 129, 29, 30, 130, 130, 98, 130,
888
+ /* 560 */ 100, 130, 130, 130, 78, 105, 106, 107, 108, 109,
889
+ /* 570 */ 98, 46, 86, 87, 88, 89, 130, 130, 130, 107,
890
+ /* 580 */ 108, 109, 130, 98, 130, 100, 61, 130, 130, 129,
891
+ /* 590 */ 105, 106, 107, 108, 109, 130, 130, 4, 5, 6,
892
+ /* 600 */ 7, 129, 130, 130, 130, 80, 81, 82, 83, 98,
893
+ /* 610 */ 17, 100, 130, 130, 129, 130, 105, 106, 107, 108,
894
+ /* 620 */ 109, 130, 98, 130, 100, 130, 130, 130, 130, 105,
895
+ /* 630 */ 106, 107, 108, 109, 130, 98, 130, 100, 130, 130,
896
+ /* 640 */ 129, 130, 105, 106, 107, 108, 109, 98, 130, 100,
897
+ /* 650 */ 98, 130, 130, 129, 105, 106, 107, 108, 109, 107,
898
+ /* 660 */ 108, 109, 130, 98, 130, 100, 129, 130, 130, 130,
899
+ /* 670 */ 105, 106, 107, 108, 109, 130, 130, 130, 129, 130,
900
+ /* 680 */ 130, 129, 98, 130, 100, 130, 130, 130, 130, 105,
901
+ /* 690 */ 106, 107, 108, 109, 129, 4, 5, 6, 7, 130,
902
+ /* 700 */ 130, 4, 5, 6, 7, 130, 130, 98, 17, 100,
903
+ /* 710 */ 130, 130, 130, 129, 105, 106, 107, 108, 109, 98,
904
+ /* 720 */ 23, 100, 4, 5, 6, 7, 105, 106, 107, 108,
905
+ /* 730 */ 109, 130, 98, 130, 100, 17, 130, 130, 129, 105,
906
+ /* 740 */ 106, 107, 108, 109, 98, 2, 100, 130, 130, 130,
907
+ /* 750 */ 129, 105, 106, 107, 108, 109, 130, 98, 130, 100,
908
+ /* 760 */ 130, 130, 130, 129, 105, 106, 107, 108, 109, 98,
909
+ /* 770 */ 130, 100, 29, 30, 130, 129, 105, 106, 107, 108,
910
+ /* 780 */ 109, 130, 130, 98, 130, 100, 130, 130, 129, 130,
911
+ /* 790 */ 105, 106, 107, 108, 109, 130, 4, 5, 6, 7,
912
+ /* 800 */ 129, 130, 130, 130, 61, 130, 130, 130, 98, 17,
913
+ /* 810 */ 100, 130, 130, 130, 129, 105, 106, 107, 108, 109,
914
+ /* 820 */ 98, 130, 100, 80, 81, 82, 83, 105, 106, 107,
915
+ /* 830 */ 108, 109, 130, 98, 130, 100, 130, 130, 130, 129,
916
+ /* 840 */ 105, 106, 107, 108, 109, 98, 130, 100, 130, 130,
917
+ /* 850 */ 130, 129, 105, 106, 107, 108, 109, 130, 98, 130,
918
+ /* 860 */ 100, 130, 98, 130, 129, 105, 106, 107, 108, 109,
919
+ /* 870 */ 130, 107, 108, 109, 98, 130, 129, 113, 114, 115,
920
+ /* 880 */ 130, 130, 130, 107, 108, 109, 95, 96, 97, 129,
921
+ /* 890 */ 114, 98, 101, 129, 130, 130, 130, 121, 130, 123,
922
+ /* 900 */ 107, 108, 109, 112, 111, 129, 130, 130, 117, 130,
923
+ /* 910 */ 130, 130, 119, 94, 95, 96, 97, 130, 98, 130,
924
+ /* 920 */ 101, 130, 129, 130, 130, 130, 130, 107, 108, 109,
925
+ /* 930 */ 98, 112, 130, 130, 114, 115, 117, 130, 130, 107,
926
+ /* 940 */ 108, 109, 98, 130, 130, 130, 114, 115, 130, 129,
927
+ /* 950 */ 130, 107, 108, 109, 98, 130, 130, 130, 114, 98,
928
+ /* 960 */ 130, 129, 130, 107, 108, 109, 98, 111, 107, 108,
929
+ /* 970 */ 109, 98, 130, 129, 130, 107, 108, 109, 98, 130,
930
+ /* 980 */ 107, 108, 109, 98, 130, 129, 130, 107, 108, 109,
931
+ /* 990 */ 129, 130, 107, 108, 109, 130, 98, 129, 130, 130,
932
+ /* 1000 */ 130, 98, 129, 130, 130, 107, 108, 109, 130, 129,
933
+ /* 1010 */ 107, 108, 109, 98, 129, 4, 5, 6, 7, 98,
934
+ /* 1020 */ 130, 130, 107, 108, 109, 130, 98, 129, 107, 108,
935
+ /* 1030 */ 109, 130, 129, 130, 23, 107, 108, 109, 98, 4,
936
+ /* 1040 */ 5, 6, 7, 130, 129, 98, 130, 107, 108, 109,
937
+ /* 1050 */ 129, 98, 17, 130, 107, 108, 109, 129, 130, 130,
938
+ /* 1060 */ 107, 108, 109, 98, 130, 130, 130, 130, 98, 129,
939
+ /* 1070 */ 130, 130, 107, 108, 109, 98, 129, 107, 108, 109,
940
+ /* 1080 */ 98, 130, 129, 130, 107, 108, 109, 98, 130, 107,
941
+ /* 1090 */ 108, 109, 98, 130, 129, 130, 107, 108, 109, 129,
942
+ /* 1100 */ 130, 107, 108, 109, 98, 130, 129, 130, 130, 130,
943
+ /* 1110 */ 98, 129, 130, 107, 108, 109, 130, 130, 129, 107,
944
+ /* 1120 */ 108, 109, 98, 129, 130, 130, 130, 98, 130, 130,
945
+ /* 1130 */ 130, 107, 108, 109, 130, 129, 107, 108, 109, 130,
946
+ /* 1140 */ 130, 129, 130, 130, 130, 130, 130, 130, 130, 130,
947
+ /* 1150 */ 130, 130, 130, 129, 130, 130, 130, 130, 129, 94,
948
+ /* 1160 */ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
949
+ /* 1170 */ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
950
+ /* 1180 */ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
951
+ /* 1190 */ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
952
+ /* 1200 */ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
953
+ /* 1210 */ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
954
+ /* 1220 */ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
955
+ /* 1230 */ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
956
+ /* 1240 */ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
957
+ /* 1250 */ 94, 94, 94,
962958
};
963
-#define YY_SHIFT_COUNT (163)
959
+#define YY_SHIFT_COUNT (156)
964960
#define YY_SHIFT_MIN (0)
965
-#define YY_SHIFT_MAX (1252)
961
+#define YY_SHIFT_MAX (1035)
966962
static const unsigned short int yy_shift_ofst[] = {
967
- /* 0 */ 228, 182, 198, 198, 198, 198, 198, 198, 198, 198,
968
- /* 10 */ 198, 198, 198, 198, 198, 198, 198, 198, 198, 198,
969
- /* 20 */ 198, 198, 198, 393, 287, 393, 228, 555, 0, 61,
970
- /* 30 */ 122, 228, 419, 472, 560, 560, 431, 436, 525, 530,
971
- /* 40 */ 555, 555, 555, 555, 555, 555, 555, 555, 573, 555,
972
- /* 50 */ 555, 555, 578, 555, 555, 555, 555, 555, 555, 555,
973
- /* 60 */ 555, 555, 555, 555, 555, 555, 438, 11, 11, 11,
974
- /* 70 */ 11, 11, 44, 317, 354, 643, 643, 184, 40, 100,
975
- /* 80 */ 1270, 1270, 1270, 1270, 154, 154, 132, 969, 332, 976,
976
- /* 90 */ 695, 791, 890, 1065, 1090, 1095, 1188, 1223, 395, 1227,
977
- /* 100 */ 1192, 1232, 1245, 1252, 10, 10, 10, 10, 10, 10,
978
- /* 110 */ 10, 10, 360, 301, 10, 339, 52, 65, 102, 75,
979
- /* 120 */ 189, 189, 258, 270, 18, 112, 2, 117, 168, 177,
980
- /* 130 */ 183, 160, 170, 171, 175, 187, 188, 174, 220, 163,
981
- /* 140 */ 176, 164, 185, 264, 274, 298, 254, 300, 307, 312,
982
- /* 150 */ 214, 255, 318, 322, 214, 315, 330, 324, 325, 326,
983
- /* 160 */ 342, 281, 369, 367,
963
+ /* 0 */ 167, 121, 137, 137, 137, 137, 137, 137, 137, 137,
964
+ /* 10 */ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
965
+ /* 20 */ 137, 137, 137, 332, 358, 383, 226, 332, 167, 370,
966
+ /* 30 */ 370, 0, 61, 167, 403, 389, 383, 389, 422, 437,
967
+ /* 40 */ 383, 383, 383, 383, 383, 383, 450, 383, 383, 383,
968
+ /* 50 */ 486, 383, 383, 383, 383, 383, 383, 383, 383, 383,
969
+ /* 60 */ 383, 383, 383, 499, 157, 157, 157, 157, 157, 525,
970
+ /* 70 */ 256, 293, 743, 743, 242, 22, 1159, 1159, 1159, 1159,
971
+ /* 80 */ 93, 93, 260, 374, 58, 124, 407, 488, 593, 23,
972
+ /* 90 */ 691, 697, 168, 718, 1011, 792, 1035, 334, 334, 334,
973
+ /* 100 */ 334, 334, 334, 271, 269, 334, 146, 60, 88, 142,
974
+ /* 110 */ 68, 4, 43, 141, 141, 140, 159, 69, 147, 1,
975
+ /* 120 */ 81, 120, 161, 165, 149, 162, 178, 183, 190, 176,
976
+ /* 130 */ 135, 216, 160, 175, 174, 166, 251, 254, 275, 245,
977
+ /* 140 */ 281, 298, 299, 213, 232, 287, 305, 213, 304, 309,
978
+ /* 150 */ 308, 316, 317, 323, 261, 342, 338,
984979
};
985
-#define YY_REDUCE_COUNT (83)
986
-#define YY_REDUCE_MIN (-123)
987
-#define YY_REDUCE_MAX (1117)
980
+#define YY_REDUCE_COUNT (79)
981
+#define YY_REDUCE_MIN (-126)
982
+#define YY_REDUCE_MAX (1029)
988983
static const short yy_reduce_ofst[] = {
989
- /* 0 */ 217, 200, 523, 571, 583, 609, 622, 634, 647, 660,
990
- /* 10 */ 672, 684, 708, 721, 733, 746, 759, 771, 783, 807,
991
- /* 20 */ 820, 832, 845, 488, 858, 127, -88, 870, -58, -58,
992
- /* 30 */ -58, 34, 385, 166, 528, 586, 235, 368, 493, 696,
993
- /* 40 */ 795, 894, 906, 911, 919, 927, 933, 941, 954, 957,
994
- /* 50 */ 978, 981, 984, 1005, 1018, 1021, 1026, 1042, 1049, 1056,
995
- /* 60 */ 1063, 1077, 1080, 1093, 1114, 1117, -98, -79, -32, -23,
996
- /* 70 */ 43, 123, -89, -123, -123, -75, -37, -49, -10, 15,
997
- /* 80 */ 8, 33, 24, 37,
984
+ /* 0 */ -28, -93, 139, 460, 485, 511, 524, 537, 549, 565,
985
+ /* 10 */ 584, 609, 621, 634, 646, 659, 671, 685, 710, 722,
986
+ /* 20 */ 735, 747, 760, 424, 764, 776, 182, 793, 819, 820,
987
+ /* 30 */ 832, 150, 150, 791, 105, 405, 844, 856, 472, 552,
988
+ /* 40 */ 861, 868, 873, 880, 885, 898, 903, 915, 921, 928,
989
+ /* 50 */ 940, 947, 953, 965, 970, 977, 982, 989, 994, 1006,
990
+ /* 60 */ 1012, 1024, 1029, -78, -31, -2, 218, 300, 321, -83,
991
+ /* 70 */ -126, -126, -94, -77, -60, -46, -40, -13, -8, 9,
998992
};
999993
static const YYACTIONTYPE yy_default[] = {
1000
- /* 0 */ 444, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1001
- /* 10 */ 438, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1002
- /* 20 */ 438, 438, 438, 438, 438, 438, 444, 570, 575, 575,
1003
- /* 30 */ 575, 444, 474, 438, 438, 438, 574, 480, 438, 438,
1004
- /* 40 */ 438, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1005
- /* 50 */ 438, 438, 438, 438, 470, 438, 438, 438, 438, 438,
1006
- /* 60 */ 438, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1007
- /* 70 */ 438, 438, 438, 438, 438, 438, 438, 570, 438, 450,
1008
- /* 80 */ 464, 506, 570, 506, 462, 492, 438, 438, 438, 438,
1009
- /* 90 */ 438, 438, 438, 438, 438, 438, 438, 438, 473, 468,
1010
- /* 100 */ 438, 438, 438, 438, 486, 485, 482, 481, 510, 509,
1011
- /* 110 */ 508, 469, 453, 438, 561, 438, 438, 438, 582, 438,
1012
- /* 120 */ 542, 541, 537, 438, 530, 527, 438, 527, 438, 438,
1013
- /* 130 */ 438, 490, 438, 438, 438, 438, 438, 438, 438, 438,
1014
- /* 140 */ 438, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1015
- /* 150 */ 586, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1016
- /* 160 */ 438, 595, 438, 438,
994
+ /* 0 */ 433, 427, 427, 427, 427, 427, 427, 427, 427, 427,
995
+ /* 10 */ 427, 427, 427, 427, 427, 427, 427, 427, 427, 427,
996
+ /* 20 */ 427, 427, 427, 427, 456, 555, 427, 427, 433, 559,
997
+ /* 30 */ 468, 560, 560, 433, 427, 427, 427, 427, 427, 427,
998
+ /* 40 */ 427, 427, 427, 427, 427, 427, 427, 427, 427, 427,
999
+ /* 50 */ 427, 427, 460, 427, 427, 427, 427, 427, 427, 427,
1000
+ /* 60 */ 427, 427, 427, 427, 427, 427, 427, 427, 427, 427,
1001
+ /* 70 */ 427, 427, 427, 427, 427, 439, 453, 490, 490, 555,
1002
+ /* 80 */ 451, 476, 427, 427, 427, 427, 427, 427, 427, 427,
1003
+ /* 90 */ 427, 427, 454, 427, 427, 427, 427, 471, 469, 494,
1004
+ /* 100 */ 493, 492, 459, 442, 427, 545, 427, 427, 427, 427,
1005
+ /* 110 */ 427, 567, 427, 526, 525, 521, 427, 514, 511, 427,
1006
+ /* 120 */ 511, 427, 427, 427, 474, 427, 427, 427, 427, 427,
1007
+ /* 130 */ 427, 427, 427, 427, 427, 427, 427, 427, 427, 427,
1008
+ /* 140 */ 427, 427, 427, 571, 427, 427, 427, 427, 427, 427,
1009
+ /* 150 */ 427, 427, 427, 427, 580, 427, 427,
10171010
};
10181011
/********** End of lemon-generated parsing tables *****************************/
10191012
10201013
/* The next table maps tokens (terminal symbols) into fallback tokens.
10211014
** If a construct like the following:
@@ -1327,24 +1320,26 @@
13271320
/* 109 */ "nth",
13281321
/* 110 */ "textposition",
13291322
/* 111 */ "rvalue",
13301323
/* 112 */ "lvalue",
13311324
/* 113 */ "even",
1332
- /* 114 */ "document",
1333
- /* 115 */ "print",
1334
- /* 116 */ "prlist",
1335
- /* 117 */ "pritem",
1336
- /* 118 */ "prsep",
1337
- /* 119 */ "attribute_list",
1338
- /* 120 */ "savelist",
1339
- /* 121 */ "alist",
1340
- /* 122 */ "attribute",
1341
- /* 123 */ "go",
1342
- /* 124 */ "boolproperty",
1343
- /* 125 */ "withclause",
1344
- /* 126 */ "between",
1345
- /* 127 */ "place2",
1325
+ /* 114 */ "relexpr",
1326
+ /* 115 */ "optrelexpr",
1327
+ /* 116 */ "document",
1328
+ /* 117 */ "print",
1329
+ /* 118 */ "prlist",
1330
+ /* 119 */ "pritem",
1331
+ /* 120 */ "prsep",
1332
+ /* 121 */ "attribute_list",
1333
+ /* 122 */ "savelist",
1334
+ /* 123 */ "alist",
1335
+ /* 124 */ "attribute",
1336
+ /* 125 */ "go",
1337
+ /* 126 */ "boolproperty",
1338
+ /* 127 */ "withclause",
1339
+ /* 128 */ "between",
1340
+ /* 129 */ "place2",
13461341
};
13471342
#endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
13481343
13491344
#ifndef NDEBUG
13501345
/* For tracing reduce actions, the names of all rules are required.
@@ -1372,141 +1367,137 @@
13721367
/* 19 */ "unnamed_element ::= basetype attribute_list",
13731368
/* 20 */ "basetype ::= CLASSNAME",
13741369
/* 21 */ "basetype ::= STRING textposition",
13751370
/* 22 */ "basetype ::= LB savelist element_list RB",
13761371
/* 23 */ "savelist ::=",
1377
- /* 24 */ "attribute_list ::= expr alist",
1378
- /* 25 */ "attribute_list ::= expr PERCENT alist",
1379
- /* 26 */ "attribute ::= numproperty expr PERCENT",
1380
- /* 27 */ "attribute ::= numproperty expr",
1381
- /* 28 */ "attribute ::= dashproperty expr",
1382
- /* 29 */ "attribute ::= dashproperty",
1383
- /* 30 */ "attribute ::= colorproperty rvalue",
1384
- /* 31 */ "attribute ::= go direction expr PERCENT",
1385
- /* 32 */ "attribute ::= go direction expr",
1386
- /* 33 */ "attribute ::= go direction",
1387
- /* 34 */ "attribute ::= go direction even position",
1388
- /* 35 */ "attribute ::= CLOSE",
1389
- /* 36 */ "attribute ::= CHOP",
1390
- /* 37 */ "attribute ::= FROM position",
1391
- /* 38 */ "attribute ::= TO position",
1392
- /* 39 */ "attribute ::= THEN",
1393
- /* 40 */ "attribute ::= THEN expr HEADING expr",
1394
- /* 41 */ "attribute ::= THEN HEADING expr",
1395
- /* 42 */ "attribute ::= THEN expr EDGEPT",
1396
- /* 43 */ "attribute ::= THEN EDGEPT",
1397
- /* 44 */ "attribute ::= GO expr HEADING expr",
1398
- /* 45 */ "attribute ::= GO HEADING expr",
1399
- /* 46 */ "attribute ::= GO expr EDGEPT",
1400
- /* 47 */ "attribute ::= GO EDGEPT",
1401
- /* 48 */ "attribute ::= AT position",
1402
- /* 49 */ "attribute ::= SAME",
1403
- /* 50 */ "attribute ::= SAME AS object",
1404
- /* 51 */ "attribute ::= STRING textposition",
1405
- /* 52 */ "attribute ::= FIT",
1406
- /* 53 */ "attribute ::= BEHIND object",
1407
- /* 54 */ "withclause ::= DOT_E edge AT position",
1408
- /* 55 */ "withclause ::= edge AT position",
1409
- /* 56 */ "numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS",
1410
- /* 57 */ "boolproperty ::= CW",
1411
- /* 58 */ "boolproperty ::= CCW",
1412
- /* 59 */ "boolproperty ::= LARROW",
1413
- /* 60 */ "boolproperty ::= RARROW",
1414
- /* 61 */ "boolproperty ::= LRARROW",
1415
- /* 62 */ "boolproperty ::= INVIS",
1416
- /* 63 */ "boolproperty ::= THICK",
1417
- /* 64 */ "boolproperty ::= THIN",
1418
- /* 65 */ "textposition ::=",
1419
- /* 66 */ "textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL",
1420
- /* 67 */ "position ::= expr COMMA expr",
1421
- /* 68 */ "position ::= place PLUS expr COMMA expr",
1422
- /* 69 */ "position ::= place MINUS expr COMMA expr",
1423
- /* 70 */ "position ::= place PLUS LP expr COMMA expr RP",
1424
- /* 71 */ "position ::= place MINUS LP expr COMMA expr RP",
1425
- /* 72 */ "position ::= LP position COMMA position RP",
1426
- /* 73 */ "position ::= LP position RP",
1427
- /* 74 */ "position ::= expr between position AND position",
1428
- /* 75 */ "position ::= expr LT position COMMA position GT",
1429
- /* 76 */ "position ::= expr ABOVE position",
1430
- /* 77 */ "position ::= expr BELOW position",
1431
- /* 78 */ "position ::= expr LEFT OF position",
1432
- /* 79 */ "position ::= expr RIGHT OF position",
1433
- /* 80 */ "position ::= expr ON HEADING EDGEPT OF position",
1434
- /* 81 */ "position ::= expr HEADING EDGEPT OF position",
1435
- /* 82 */ "position ::= expr EDGEPT OF position",
1436
- /* 83 */ "position ::= expr ON HEADING expr FROM position",
1437
- /* 84 */ "position ::= expr HEADING expr FROM position",
1438
- /* 85 */ "place ::= edge OF object",
1439
- /* 86 */ "place2 ::= object",
1440
- /* 87 */ "place2 ::= object DOT_E edge",
1441
- /* 88 */ "place2 ::= NTH VERTEX OF object",
1442
- /* 89 */ "object ::= nth",
1443
- /* 90 */ "object ::= nth OF|IN object",
1444
- /* 91 */ "objectname ::= PLACENAME",
1445
- /* 92 */ "objectname ::= objectname DOT_U PLACENAME",
1446
- /* 93 */ "nth ::= NTH CLASSNAME",
1447
- /* 94 */ "nth ::= NTH LAST CLASSNAME",
1448
- /* 95 */ "nth ::= LAST CLASSNAME",
1449
- /* 96 */ "nth ::= LAST",
1450
- /* 97 */ "nth ::= NTH LB RB",
1451
- /* 98 */ "nth ::= NTH LAST LB RB",
1452
- /* 99 */ "nth ::= LAST LB RB",
1453
- /* 100 */ "expr ::= expr PLUS expr",
1454
- /* 101 */ "expr ::= expr MINUS expr",
1455
- /* 102 */ "expr ::= expr STAR expr",
1456
- /* 103 */ "expr ::= expr SLASH expr",
1457
- /* 104 */ "expr ::= MINUS expr",
1458
- /* 105 */ "expr ::= PLUS expr",
1459
- /* 106 */ "expr ::= LP expr RP",
1460
- /* 107 */ "expr ::= NUMBER",
1461
- /* 108 */ "expr ::= ID",
1462
- /* 109 */ "expr ::= FUNC1 LP expr RP",
1463
- /* 110 */ "expr ::= FUNC2 LP expr COMMA expr RP",
1464
- /* 111 */ "expr ::= place2 DOT_XY X",
1465
- /* 112 */ "expr ::= place2 DOT_XY Y",
1466
- /* 113 */ "expr ::= object DOT_L numproperty",
1467
- /* 114 */ "expr ::= object DOT_L dashproperty",
1468
- /* 115 */ "expr ::= object DOT_L colorproperty",
1469
- /* 116 */ "lvalue ::= ID",
1470
- /* 117 */ "lvalue ::= FILL",
1471
- /* 118 */ "lvalue ::= COLOR",
1472
- /* 119 */ "lvalue ::= THICKNESS",
1473
- /* 120 */ "rvalue ::= expr",
1474
- /* 121 */ "print ::= PRINT",
1475
- /* 122 */ "prlist ::= pritem",
1476
- /* 123 */ "prlist ::= prlist prsep pritem",
1477
- /* 124 */ "direction ::= UP",
1478
- /* 125 */ "direction ::= DOWN",
1479
- /* 126 */ "direction ::= LEFT",
1480
- /* 127 */ "direction ::= RIGHT",
1481
- /* 128 */ "attribute_list ::= alist",
1482
- /* 129 */ "alist ::=",
1483
- /* 130 */ "alist ::= alist attribute",
1484
- /* 131 */ "attribute ::= boolproperty",
1485
- /* 132 */ "attribute ::= WITH withclause",
1486
- /* 133 */ "go ::= GO",
1487
- /* 134 */ "go ::=",
1488
- /* 135 */ "even ::= UNTIL EVEN WITH",
1489
- /* 136 */ "even ::= EVEN WITH",
1490
- /* 137 */ "dashproperty ::= DOTTED",
1491
- /* 138 */ "dashproperty ::= DASHED",
1492
- /* 139 */ "colorproperty ::= FILL",
1493
- /* 140 */ "colorproperty ::= COLOR",
1494
- /* 141 */ "position ::= place",
1495
- /* 142 */ "between ::= WAY BETWEEN",
1496
- /* 143 */ "between ::= BETWEEN",
1497
- /* 144 */ "between ::= OF THE WAY BETWEEN",
1498
- /* 145 */ "place ::= place2",
1499
- /* 146 */ "edge ::= CENTER",
1500
- /* 147 */ "edge ::= EDGEPT",
1501
- /* 148 */ "edge ::= TOP",
1502
- /* 149 */ "edge ::= BOTTOM",
1503
- /* 150 */ "edge ::= START",
1504
- /* 151 */ "edge ::= END",
1505
- /* 152 */ "edge ::= RIGHT",
1506
- /* 153 */ "edge ::= LEFT",
1507
- /* 154 */ "object ::= objectname",
1372
+ /* 24 */ "relexpr ::= expr",
1373
+ /* 25 */ "relexpr ::= expr PERCENT",
1374
+ /* 26 */ "optrelexpr ::=",
1375
+ /* 27 */ "attribute_list ::= relexpr alist",
1376
+ /* 28 */ "attribute ::= numproperty relexpr",
1377
+ /* 29 */ "attribute ::= dashproperty expr",
1378
+ /* 30 */ "attribute ::= dashproperty",
1379
+ /* 31 */ "attribute ::= colorproperty rvalue",
1380
+ /* 32 */ "attribute ::= go direction optrelexpr",
1381
+ /* 33 */ "attribute ::= go direction even position",
1382
+ /* 34 */ "attribute ::= CLOSE",
1383
+ /* 35 */ "attribute ::= CHOP",
1384
+ /* 36 */ "attribute ::= FROM position",
1385
+ /* 37 */ "attribute ::= TO position",
1386
+ /* 38 */ "attribute ::= THEN",
1387
+ /* 39 */ "attribute ::= THEN optrelexpr HEADING expr",
1388
+ /* 40 */ "attribute ::= THEN optrelexpr EDGEPT",
1389
+ /* 41 */ "attribute ::= GO optrelexpr HEADING expr",
1390
+ /* 42 */ "attribute ::= GO optrelexpr EDGEPT",
1391
+ /* 43 */ "attribute ::= AT position",
1392
+ /* 44 */ "attribute ::= SAME",
1393
+ /* 45 */ "attribute ::= SAME AS object",
1394
+ /* 46 */ "attribute ::= STRING textposition",
1395
+ /* 47 */ "attribute ::= FIT",
1396
+ /* 48 */ "attribute ::= BEHIND object",
1397
+ /* 49 */ "withclause ::= DOT_E edge AT position",
1398
+ /* 50 */ "withclause ::= edge AT position",
1399
+ /* 51 */ "numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS",
1400
+ /* 52 */ "boolproperty ::= CW",
1401
+ /* 53 */ "boolproperty ::= CCW",
1402
+ /* 54 */ "boolproperty ::= LARROW",
1403
+ /* 55 */ "boolproperty ::= RARROW",
1404
+ /* 56 */ "boolproperty ::= LRARROW",
1405
+ /* 57 */ "boolproperty ::= INVIS",
1406
+ /* 58 */ "boolproperty ::= THICK",
1407
+ /* 59 */ "boolproperty ::= THIN",
1408
+ /* 60 */ "textposition ::=",
1409
+ /* 61 */ "textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL",
1410
+ /* 62 */ "position ::= expr COMMA expr",
1411
+ /* 63 */ "position ::= place PLUS expr COMMA expr",
1412
+ /* 64 */ "position ::= place MINUS expr COMMA expr",
1413
+ /* 65 */ "position ::= place PLUS LP expr COMMA expr RP",
1414
+ /* 66 */ "position ::= place MINUS LP expr COMMA expr RP",
1415
+ /* 67 */ "position ::= LP position COMMA position RP",
1416
+ /* 68 */ "position ::= LP position RP",
1417
+ /* 69 */ "position ::= expr between position AND position",
1418
+ /* 70 */ "position ::= expr LT position COMMA position GT",
1419
+ /* 71 */ "position ::= expr ABOVE position",
1420
+ /* 72 */ "position ::= expr BELOW position",
1421
+ /* 73 */ "position ::= expr LEFT OF position",
1422
+ /* 74 */ "position ::= expr RIGHT OF position",
1423
+ /* 75 */ "position ::= expr ON HEADING EDGEPT OF position",
1424
+ /* 76 */ "position ::= expr HEADING EDGEPT OF position",
1425
+ /* 77 */ "position ::= expr EDGEPT OF position",
1426
+ /* 78 */ "position ::= expr ON HEADING expr FROM position",
1427
+ /* 79 */ "position ::= expr HEADING expr FROM position",
1428
+ /* 80 */ "place ::= edge OF object",
1429
+ /* 81 */ "place2 ::= object",
1430
+ /* 82 */ "place2 ::= object DOT_E edge",
1431
+ /* 83 */ "place2 ::= NTH VERTEX OF object",
1432
+ /* 84 */ "object ::= nth",
1433
+ /* 85 */ "object ::= nth OF|IN object",
1434
+ /* 86 */ "objectname ::= PLACENAME",
1435
+ /* 87 */ "objectname ::= objectname DOT_U PLACENAME",
1436
+ /* 88 */ "nth ::= NTH CLASSNAME",
1437
+ /* 89 */ "nth ::= NTH LAST CLASSNAME",
1438
+ /* 90 */ "nth ::= LAST CLASSNAME",
1439
+ /* 91 */ "nth ::= LAST",
1440
+ /* 92 */ "nth ::= NTH LB RB",
1441
+ /* 93 */ "nth ::= NTH LAST LB RB",
1442
+ /* 94 */ "nth ::= LAST LB RB",
1443
+ /* 95 */ "expr ::= expr PLUS expr",
1444
+ /* 96 */ "expr ::= expr MINUS expr",
1445
+ /* 97 */ "expr ::= expr STAR expr",
1446
+ /* 98 */ "expr ::= expr SLASH expr",
1447
+ /* 99 */ "expr ::= MINUS expr",
1448
+ /* 100 */ "expr ::= PLUS expr",
1449
+ /* 101 */ "expr ::= LP expr RP",
1450
+ /* 102 */ "expr ::= NUMBER",
1451
+ /* 103 */ "expr ::= ID",
1452
+ /* 104 */ "expr ::= FUNC1 LP expr RP",
1453
+ /* 105 */ "expr ::= FUNC2 LP expr COMMA expr RP",
1454
+ /* 106 */ "expr ::= place2 DOT_XY X",
1455
+ /* 107 */ "expr ::= place2 DOT_XY Y",
1456
+ /* 108 */ "expr ::= object DOT_L numproperty",
1457
+ /* 109 */ "expr ::= object DOT_L dashproperty",
1458
+ /* 110 */ "expr ::= object DOT_L colorproperty",
1459
+ /* 111 */ "lvalue ::= ID",
1460
+ /* 112 */ "lvalue ::= FILL",
1461
+ /* 113 */ "lvalue ::= COLOR",
1462
+ /* 114 */ "lvalue ::= THICKNESS",
1463
+ /* 115 */ "rvalue ::= expr",
1464
+ /* 116 */ "print ::= PRINT",
1465
+ /* 117 */ "prlist ::= pritem",
1466
+ /* 118 */ "prlist ::= prlist prsep pritem",
1467
+ /* 119 */ "direction ::= UP",
1468
+ /* 120 */ "direction ::= DOWN",
1469
+ /* 121 */ "direction ::= LEFT",
1470
+ /* 122 */ "direction ::= RIGHT",
1471
+ /* 123 */ "optrelexpr ::= relexpr",
1472
+ /* 124 */ "attribute_list ::= alist",
1473
+ /* 125 */ "alist ::=",
1474
+ /* 126 */ "alist ::= alist attribute",
1475
+ /* 127 */ "attribute ::= boolproperty",
1476
+ /* 128 */ "attribute ::= WITH withclause",
1477
+ /* 129 */ "go ::= GO",
1478
+ /* 130 */ "go ::=",
1479
+ /* 131 */ "even ::= UNTIL EVEN WITH",
1480
+ /* 132 */ "even ::= EVEN WITH",
1481
+ /* 133 */ "dashproperty ::= DOTTED",
1482
+ /* 134 */ "dashproperty ::= DASHED",
1483
+ /* 135 */ "colorproperty ::= FILL",
1484
+ /* 136 */ "colorproperty ::= COLOR",
1485
+ /* 137 */ "position ::= place",
1486
+ /* 138 */ "between ::= WAY BETWEEN",
1487
+ /* 139 */ "between ::= BETWEEN",
1488
+ /* 140 */ "between ::= OF THE WAY BETWEEN",
1489
+ /* 141 */ "place ::= place2",
1490
+ /* 142 */ "edge ::= CENTER",
1491
+ /* 143 */ "edge ::= EDGEPT",
1492
+ /* 144 */ "edge ::= TOP",
1493
+ /* 145 */ "edge ::= BOTTOM",
1494
+ /* 146 */ "edge ::= START",
1495
+ /* 147 */ "edge ::= END",
1496
+ /* 148 */ "edge ::= RIGHT",
1497
+ /* 149 */ "edge ::= LEFT",
1498
+ /* 150 */ "object ::= objectname",
15081499
};
15091500
#endif /* NDEBUG */
15101501
15111502
15121503
#if YYSTACKDEPTH<=0
@@ -1630,22 +1621,22 @@
16301621
** inside the C code.
16311622
*/
16321623
/********* Begin destructor definitions ***************************************/
16331624
case 94: /* element_list */
16341625
{
1635
-#line 448 "pikchr.y"
1636
-pik_elist_free(p,(yypminor->yy52));
1637
-#line 1662 "pikchr.c"
1626
+#line 465 "pikchr.y"
1627
+pik_elist_free(p,(yypminor->yy72));
1628
+#line 1653 "pikchr.c"
16381629
}
16391630
break;
16401631
case 95: /* element */
16411632
case 96: /* unnamed_element */
16421633
case 97: /* basetype */
16431634
{
1644
-#line 450 "pikchr.y"
1645
-pik_elem_free(p,(yypminor->yy58));
1646
-#line 1671 "pikchr.c"
1635
+#line 467 "pikchr.y"
1636
+pik_elem_free(p,(yypminor->yy254));
1637
+#line 1662 "pikchr.c"
16471638
}
16481639
break;
16491640
/********* End destructor definitions *****************************************/
16501641
default: break; /* If no destructor action specified: do nothing */
16511642
}
@@ -1859,14 +1850,14 @@
18591850
#endif
18601851
while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
18611852
/* Here code is inserted which will execute if the parser
18621853
** stack every overflows */
18631854
/******** Begin %stack_overflow code ******************************************/
1864
-#line 479 "pikchr.y"
1855
+#line 498 "pikchr.y"
18651856
18661857
pik_error(p, 0, "parser stack overflow");
1867
-#line 1892 "pikchr.c"
1858
+#line 1883 "pikchr.c"
18681859
/******** End %stack_overflow code ********************************************/
18691860
pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */
18701861
pik_parserCTX_STORE
18711862
}
18721863
@@ -1934,11 +1925,11 @@
19341925
}
19351926
19361927
/* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side
19371928
** of that rule */
19381929
static const YYCODETYPE yyRuleInfoLhs[] = {
1939
- 114, /* (0) document ::= element_list */
1930
+ 116, /* (0) document ::= element_list */
19401931
94, /* (1) element_list ::= element */
19411932
94, /* (2) element_list ::= element_list EOL element */
19421933
95, /* (3) element ::= */
19431934
95, /* (4) element ::= direction */
19441935
95, /* (5) element ::= lvalue ASSIGN rvalue */
@@ -1947,152 +1938,148 @@
19471938
95, /* (8) element ::= unnamed_element */
19481939
95, /* (9) element ::= print prlist */
19491940
95, /* (10) element ::= ASSERT LP expr EQ expr RP */
19501941
95, /* (11) element ::= ASSERT LP place EQ place RP */
19511942
111, /* (12) rvalue ::= PLACENAME */
1952
- 117, /* (13) pritem ::= FILL */
1953
- 117, /* (14) pritem ::= COLOR */
1954
- 117, /* (15) pritem ::= THICKNESS */
1955
- 117, /* (16) pritem ::= rvalue */
1956
- 117, /* (17) pritem ::= STRING */
1957
- 118, /* (18) prsep ::= COMMA */
1943
+ 119, /* (13) pritem ::= FILL */
1944
+ 119, /* (14) pritem ::= COLOR */
1945
+ 119, /* (15) pritem ::= THICKNESS */
1946
+ 119, /* (16) pritem ::= rvalue */
1947
+ 119, /* (17) pritem ::= STRING */
1948
+ 120, /* (18) prsep ::= COMMA */
19581949
96, /* (19) unnamed_element ::= basetype attribute_list */
19591950
97, /* (20) basetype ::= CLASSNAME */
19601951
97, /* (21) basetype ::= STRING textposition */
19611952
97, /* (22) basetype ::= LB savelist element_list RB */
1962
- 120, /* (23) savelist ::= */
1963
- 119, /* (24) attribute_list ::= expr alist */
1964
- 119, /* (25) attribute_list ::= expr PERCENT alist */
1965
- 122, /* (26) attribute ::= numproperty expr PERCENT */
1966
- 122, /* (27) attribute ::= numproperty expr */
1967
- 122, /* (28) attribute ::= dashproperty expr */
1968
- 122, /* (29) attribute ::= dashproperty */
1969
- 122, /* (30) attribute ::= colorproperty rvalue */
1970
- 122, /* (31) attribute ::= go direction expr PERCENT */
1971
- 122, /* (32) attribute ::= go direction expr */
1972
- 122, /* (33) attribute ::= go direction */
1973
- 122, /* (34) attribute ::= go direction even position */
1974
- 122, /* (35) attribute ::= CLOSE */
1975
- 122, /* (36) attribute ::= CHOP */
1976
- 122, /* (37) attribute ::= FROM position */
1977
- 122, /* (38) attribute ::= TO position */
1978
- 122, /* (39) attribute ::= THEN */
1979
- 122, /* (40) attribute ::= THEN expr HEADING expr */
1980
- 122, /* (41) attribute ::= THEN HEADING expr */
1981
- 122, /* (42) attribute ::= THEN expr EDGEPT */
1982
- 122, /* (43) attribute ::= THEN EDGEPT */
1983
- 122, /* (44) attribute ::= GO expr HEADING expr */
1984
- 122, /* (45) attribute ::= GO HEADING expr */
1985
- 122, /* (46) attribute ::= GO expr EDGEPT */
1986
- 122, /* (47) attribute ::= GO EDGEPT */
1987
- 122, /* (48) attribute ::= AT position */
1988
- 122, /* (49) attribute ::= SAME */
1989
- 122, /* (50) attribute ::= SAME AS object */
1990
- 122, /* (51) attribute ::= STRING textposition */
1991
- 122, /* (52) attribute ::= FIT */
1992
- 122, /* (53) attribute ::= BEHIND object */
1993
- 125, /* (54) withclause ::= DOT_E edge AT position */
1994
- 125, /* (55) withclause ::= edge AT position */
1995
- 99, /* (56) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
1996
- 124, /* (57) boolproperty ::= CW */
1997
- 124, /* (58) boolproperty ::= CCW */
1998
- 124, /* (59) boolproperty ::= LARROW */
1999
- 124, /* (60) boolproperty ::= RARROW */
2000
- 124, /* (61) boolproperty ::= LRARROW */
2001
- 124, /* (62) boolproperty ::= INVIS */
2002
- 124, /* (63) boolproperty ::= THICK */
2003
- 124, /* (64) boolproperty ::= THIN */
2004
- 110, /* (65) textposition ::= */
2005
- 110, /* (66) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2006
- 105, /* (67) position ::= expr COMMA expr */
2007
- 105, /* (68) position ::= place PLUS expr COMMA expr */
2008
- 105, /* (69) position ::= place MINUS expr COMMA expr */
2009
- 105, /* (70) position ::= place PLUS LP expr COMMA expr RP */
2010
- 105, /* (71) position ::= place MINUS LP expr COMMA expr RP */
2011
- 105, /* (72) position ::= LP position COMMA position RP */
2012
- 105, /* (73) position ::= LP position RP */
2013
- 105, /* (74) position ::= expr between position AND position */
2014
- 105, /* (75) position ::= expr LT position COMMA position GT */
2015
- 105, /* (76) position ::= expr ABOVE position */
2016
- 105, /* (77) position ::= expr BELOW position */
2017
- 105, /* (78) position ::= expr LEFT OF position */
2018
- 105, /* (79) position ::= expr RIGHT OF position */
2019
- 105, /* (80) position ::= expr ON HEADING EDGEPT OF position */
2020
- 105, /* (81) position ::= expr HEADING EDGEPT OF position */
2021
- 105, /* (82) position ::= expr EDGEPT OF position */
2022
- 105, /* (83) position ::= expr ON HEADING expr FROM position */
2023
- 105, /* (84) position ::= expr HEADING expr FROM position */
2024
- 106, /* (85) place ::= edge OF object */
2025
- 127, /* (86) place2 ::= object */
2026
- 127, /* (87) place2 ::= object DOT_E edge */
2027
- 127, /* (88) place2 ::= NTH VERTEX OF object */
2028
- 107, /* (89) object ::= nth */
2029
- 107, /* (90) object ::= nth OF|IN object */
2030
- 108, /* (91) objectname ::= PLACENAME */
2031
- 108, /* (92) objectname ::= objectname DOT_U PLACENAME */
2032
- 109, /* (93) nth ::= NTH CLASSNAME */
2033
- 109, /* (94) nth ::= NTH LAST CLASSNAME */
2034
- 109, /* (95) nth ::= LAST CLASSNAME */
2035
- 109, /* (96) nth ::= LAST */
2036
- 109, /* (97) nth ::= NTH LB RB */
2037
- 109, /* (98) nth ::= NTH LAST LB RB */
2038
- 109, /* (99) nth ::= LAST LB RB */
2039
- 98, /* (100) expr ::= expr PLUS expr */
2040
- 98, /* (101) expr ::= expr MINUS expr */
2041
- 98, /* (102) expr ::= expr STAR expr */
2042
- 98, /* (103) expr ::= expr SLASH expr */
2043
- 98, /* (104) expr ::= MINUS expr */
2044
- 98, /* (105) expr ::= PLUS expr */
2045
- 98, /* (106) expr ::= LP expr RP */
2046
- 98, /* (107) expr ::= NUMBER */
2047
- 98, /* (108) expr ::= ID */
2048
- 98, /* (109) expr ::= FUNC1 LP expr RP */
2049
- 98, /* (110) expr ::= FUNC2 LP expr COMMA expr RP */
2050
- 98, /* (111) expr ::= place2 DOT_XY X */
2051
- 98, /* (112) expr ::= place2 DOT_XY Y */
2052
- 98, /* (113) expr ::= object DOT_L numproperty */
2053
- 98, /* (114) expr ::= object DOT_L dashproperty */
2054
- 98, /* (115) expr ::= object DOT_L colorproperty */
2055
- 112, /* (116) lvalue ::= ID */
2056
- 112, /* (117) lvalue ::= FILL */
2057
- 112, /* (118) lvalue ::= COLOR */
2058
- 112, /* (119) lvalue ::= THICKNESS */
2059
- 111, /* (120) rvalue ::= expr */
2060
- 115, /* (121) print ::= PRINT */
2061
- 116, /* (122) prlist ::= pritem */
2062
- 116, /* (123) prlist ::= prlist prsep pritem */
2063
- 101, /* (124) direction ::= UP */
2064
- 101, /* (125) direction ::= DOWN */
2065
- 101, /* (126) direction ::= LEFT */
2066
- 101, /* (127) direction ::= RIGHT */
2067
- 119, /* (128) attribute_list ::= alist */
2068
- 121, /* (129) alist ::= */
2069
- 121, /* (130) alist ::= alist attribute */
2070
- 122, /* (131) attribute ::= boolproperty */
2071
- 122, /* (132) attribute ::= WITH withclause */
2072
- 123, /* (133) go ::= GO */
2073
- 123, /* (134) go ::= */
2074
- 113, /* (135) even ::= UNTIL EVEN WITH */
2075
- 113, /* (136) even ::= EVEN WITH */
2076
- 102, /* (137) dashproperty ::= DOTTED */
2077
- 102, /* (138) dashproperty ::= DASHED */
2078
- 103, /* (139) colorproperty ::= FILL */
2079
- 103, /* (140) colorproperty ::= COLOR */
2080
- 105, /* (141) position ::= place */
2081
- 126, /* (142) between ::= WAY BETWEEN */
2082
- 126, /* (143) between ::= BETWEEN */
2083
- 126, /* (144) between ::= OF THE WAY BETWEEN */
2084
- 106, /* (145) place ::= place2 */
2085
- 100, /* (146) edge ::= CENTER */
2086
- 100, /* (147) edge ::= EDGEPT */
2087
- 100, /* (148) edge ::= TOP */
2088
- 100, /* (149) edge ::= BOTTOM */
2089
- 100, /* (150) edge ::= START */
2090
- 100, /* (151) edge ::= END */
2091
- 100, /* (152) edge ::= RIGHT */
2092
- 100, /* (153) edge ::= LEFT */
2093
- 107, /* (154) object ::= objectname */
1953
+ 122, /* (23) savelist ::= */
1954
+ 114, /* (24) relexpr ::= expr */
1955
+ 114, /* (25) relexpr ::= expr PERCENT */
1956
+ 115, /* (26) optrelexpr ::= */
1957
+ 121, /* (27) attribute_list ::= relexpr alist */
1958
+ 124, /* (28) attribute ::= numproperty relexpr */
1959
+ 124, /* (29) attribute ::= dashproperty expr */
1960
+ 124, /* (30) attribute ::= dashproperty */
1961
+ 124, /* (31) attribute ::= colorproperty rvalue */
1962
+ 124, /* (32) attribute ::= go direction optrelexpr */
1963
+ 124, /* (33) attribute ::= go direction even position */
1964
+ 124, /* (34) attribute ::= CLOSE */
1965
+ 124, /* (35) attribute ::= CHOP */
1966
+ 124, /* (36) attribute ::= FROM position */
1967
+ 124, /* (37) attribute ::= TO position */
1968
+ 124, /* (38) attribute ::= THEN */
1969
+ 124, /* (39) attribute ::= THEN optrelexpr HEADING expr */
1970
+ 124, /* (40) attribute ::= THEN optrelexpr EDGEPT */
1971
+ 124, /* (41) attribute ::= GO optrelexpr HEADING expr */
1972
+ 124, /* (42) attribute ::= GO optrelexpr EDGEPT */
1973
+ 124, /* (43) attribute ::= AT position */
1974
+ 124, /* (44) attribute ::= SAME */
1975
+ 124, /* (45) attribute ::= SAME AS object */
1976
+ 124, /* (46) attribute ::= STRING textposition */
1977
+ 124, /* (47) attribute ::= FIT */
1978
+ 124, /* (48) attribute ::= BEHIND object */
1979
+ 127, /* (49) withclause ::= DOT_E edge AT position */
1980
+ 127, /* (50) withclause ::= edge AT position */
1981
+ 99, /* (51) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
1982
+ 126, /* (52) boolproperty ::= CW */
1983
+ 126, /* (53) boolproperty ::= CCW */
1984
+ 126, /* (54) boolproperty ::= LARROW */
1985
+ 126, /* (55) boolproperty ::= RARROW */
1986
+ 126, /* (56) boolproperty ::= LRARROW */
1987
+ 126, /* (57) boolproperty ::= INVIS */
1988
+ 126, /* (58) boolproperty ::= THICK */
1989
+ 126, /* (59) boolproperty ::= THIN */
1990
+ 110, /* (60) textposition ::= */
1991
+ 110, /* (61) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
1992
+ 105, /* (62) position ::= expr COMMA expr */
1993
+ 105, /* (63) position ::= place PLUS expr COMMA expr */
1994
+ 105, /* (64) position ::= place MINUS expr COMMA expr */
1995
+ 105, /* (65) position ::= place PLUS LP expr COMMA expr RP */
1996
+ 105, /* (66) position ::= place MINUS LP expr COMMA expr RP */
1997
+ 105, /* (67) position ::= LP position COMMA position RP */
1998
+ 105, /* (68) position ::= LP position RP */
1999
+ 105, /* (69) position ::= expr between position AND position */
2000
+ 105, /* (70) position ::= expr LT position COMMA position GT */
2001
+ 105, /* (71) position ::= expr ABOVE position */
2002
+ 105, /* (72) position ::= expr BELOW position */
2003
+ 105, /* (73) position ::= expr LEFT OF position */
2004
+ 105, /* (74) position ::= expr RIGHT OF position */
2005
+ 105, /* (75) position ::= expr ON HEADING EDGEPT OF position */
2006
+ 105, /* (76) position ::= expr HEADING EDGEPT OF position */
2007
+ 105, /* (77) position ::= expr EDGEPT OF position */
2008
+ 105, /* (78) position ::= expr ON HEADING expr FROM position */
2009
+ 105, /* (79) position ::= expr HEADING expr FROM position */
2010
+ 106, /* (80) place ::= edge OF object */
2011
+ 129, /* (81) place2 ::= object */
2012
+ 129, /* (82) place2 ::= object DOT_E edge */
2013
+ 129, /* (83) place2 ::= NTH VERTEX OF object */
2014
+ 107, /* (84) object ::= nth */
2015
+ 107, /* (85) object ::= nth OF|IN object */
2016
+ 108, /* (86) objectname ::= PLACENAME */
2017
+ 108, /* (87) objectname ::= objectname DOT_U PLACENAME */
2018
+ 109, /* (88) nth ::= NTH CLASSNAME */
2019
+ 109, /* (89) nth ::= NTH LAST CLASSNAME */
2020
+ 109, /* (90) nth ::= LAST CLASSNAME */
2021
+ 109, /* (91) nth ::= LAST */
2022
+ 109, /* (92) nth ::= NTH LB RB */
2023
+ 109, /* (93) nth ::= NTH LAST LB RB */
2024
+ 109, /* (94) nth ::= LAST LB RB */
2025
+ 98, /* (95) expr ::= expr PLUS expr */
2026
+ 98, /* (96) expr ::= expr MINUS expr */
2027
+ 98, /* (97) expr ::= expr STAR expr */
2028
+ 98, /* (98) expr ::= expr SLASH expr */
2029
+ 98, /* (99) expr ::= MINUS expr */
2030
+ 98, /* (100) expr ::= PLUS expr */
2031
+ 98, /* (101) expr ::= LP expr RP */
2032
+ 98, /* (102) expr ::= NUMBER */
2033
+ 98, /* (103) expr ::= ID */
2034
+ 98, /* (104) expr ::= FUNC1 LP expr RP */
2035
+ 98, /* (105) expr ::= FUNC2 LP expr COMMA expr RP */
2036
+ 98, /* (106) expr ::= place2 DOT_XY X */
2037
+ 98, /* (107) expr ::= place2 DOT_XY Y */
2038
+ 98, /* (108) expr ::= object DOT_L numproperty */
2039
+ 98, /* (109) expr ::= object DOT_L dashproperty */
2040
+ 98, /* (110) expr ::= object DOT_L colorproperty */
2041
+ 112, /* (111) lvalue ::= ID */
2042
+ 112, /* (112) lvalue ::= FILL */
2043
+ 112, /* (113) lvalue ::= COLOR */
2044
+ 112, /* (114) lvalue ::= THICKNESS */
2045
+ 111, /* (115) rvalue ::= expr */
2046
+ 117, /* (116) print ::= PRINT */
2047
+ 118, /* (117) prlist ::= pritem */
2048
+ 118, /* (118) prlist ::= prlist prsep pritem */
2049
+ 101, /* (119) direction ::= UP */
2050
+ 101, /* (120) direction ::= DOWN */
2051
+ 101, /* (121) direction ::= LEFT */
2052
+ 101, /* (122) direction ::= RIGHT */
2053
+ 115, /* (123) optrelexpr ::= relexpr */
2054
+ 121, /* (124) attribute_list ::= alist */
2055
+ 123, /* (125) alist ::= */
2056
+ 123, /* (126) alist ::= alist attribute */
2057
+ 124, /* (127) attribute ::= boolproperty */
2058
+ 124, /* (128) attribute ::= WITH withclause */
2059
+ 125, /* (129) go ::= GO */
2060
+ 125, /* (130) go ::= */
2061
+ 113, /* (131) even ::= UNTIL EVEN WITH */
2062
+ 113, /* (132) even ::= EVEN WITH */
2063
+ 102, /* (133) dashproperty ::= DOTTED */
2064
+ 102, /* (134) dashproperty ::= DASHED */
2065
+ 103, /* (135) colorproperty ::= FILL */
2066
+ 103, /* (136) colorproperty ::= COLOR */
2067
+ 105, /* (137) position ::= place */
2068
+ 128, /* (138) between ::= WAY BETWEEN */
2069
+ 128, /* (139) between ::= BETWEEN */
2070
+ 128, /* (140) between ::= OF THE WAY BETWEEN */
2071
+ 106, /* (141) place ::= place2 */
2072
+ 100, /* (142) edge ::= CENTER */
2073
+ 100, /* (143) edge ::= EDGEPT */
2074
+ 100, /* (144) edge ::= TOP */
2075
+ 100, /* (145) edge ::= BOTTOM */
2076
+ 100, /* (146) edge ::= START */
2077
+ 100, /* (147) edge ::= END */
2078
+ 100, /* (148) edge ::= RIGHT */
2079
+ 100, /* (149) edge ::= LEFT */
2080
+ 107, /* (150) object ::= objectname */
20942081
};
20952082
20962083
/* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
20972084
** of symbols on the right-hand side of that rule. */
20982085
static const signed char yyRuleInfoNRhs[] = {
@@ -2118,141 +2105,137 @@
21182105
-2, /* (19) unnamed_element ::= basetype attribute_list */
21192106
-1, /* (20) basetype ::= CLASSNAME */
21202107
-2, /* (21) basetype ::= STRING textposition */
21212108
-4, /* (22) basetype ::= LB savelist element_list RB */
21222109
0, /* (23) savelist ::= */
2123
- -2, /* (24) attribute_list ::= expr alist */
2124
- -3, /* (25) attribute_list ::= expr PERCENT alist */
2125
- -3, /* (26) attribute ::= numproperty expr PERCENT */
2126
- -2, /* (27) attribute ::= numproperty expr */
2127
- -2, /* (28) attribute ::= dashproperty expr */
2128
- -1, /* (29) attribute ::= dashproperty */
2129
- -2, /* (30) attribute ::= colorproperty rvalue */
2130
- -4, /* (31) attribute ::= go direction expr PERCENT */
2131
- -3, /* (32) attribute ::= go direction expr */
2132
- -2, /* (33) attribute ::= go direction */
2133
- -4, /* (34) attribute ::= go direction even position */
2134
- -1, /* (35) attribute ::= CLOSE */
2135
- -1, /* (36) attribute ::= CHOP */
2136
- -2, /* (37) attribute ::= FROM position */
2137
- -2, /* (38) attribute ::= TO position */
2138
- -1, /* (39) attribute ::= THEN */
2139
- -4, /* (40) attribute ::= THEN expr HEADING expr */
2140
- -3, /* (41) attribute ::= THEN HEADING expr */
2141
- -3, /* (42) attribute ::= THEN expr EDGEPT */
2142
- -2, /* (43) attribute ::= THEN EDGEPT */
2143
- -4, /* (44) attribute ::= GO expr HEADING expr */
2144
- -3, /* (45) attribute ::= GO HEADING expr */
2145
- -3, /* (46) attribute ::= GO expr EDGEPT */
2146
- -2, /* (47) attribute ::= GO EDGEPT */
2147
- -2, /* (48) attribute ::= AT position */
2148
- -1, /* (49) attribute ::= SAME */
2149
- -3, /* (50) attribute ::= SAME AS object */
2150
- -2, /* (51) attribute ::= STRING textposition */
2151
- -1, /* (52) attribute ::= FIT */
2152
- -2, /* (53) attribute ::= BEHIND object */
2153
- -4, /* (54) withclause ::= DOT_E edge AT position */
2154
- -3, /* (55) withclause ::= edge AT position */
2155
- -1, /* (56) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2156
- -1, /* (57) boolproperty ::= CW */
2157
- -1, /* (58) boolproperty ::= CCW */
2158
- -1, /* (59) boolproperty ::= LARROW */
2159
- -1, /* (60) boolproperty ::= RARROW */
2160
- -1, /* (61) boolproperty ::= LRARROW */
2161
- -1, /* (62) boolproperty ::= INVIS */
2162
- -1, /* (63) boolproperty ::= THICK */
2163
- -1, /* (64) boolproperty ::= THIN */
2164
- 0, /* (65) textposition ::= */
2165
- -2, /* (66) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2166
- -3, /* (67) position ::= expr COMMA expr */
2167
- -5, /* (68) position ::= place PLUS expr COMMA expr */
2168
- -5, /* (69) position ::= place MINUS expr COMMA expr */
2169
- -7, /* (70) position ::= place PLUS LP expr COMMA expr RP */
2170
- -7, /* (71) position ::= place MINUS LP expr COMMA expr RP */
2171
- -5, /* (72) position ::= LP position COMMA position RP */
2172
- -3, /* (73) position ::= LP position RP */
2173
- -5, /* (74) position ::= expr between position AND position */
2174
- -6, /* (75) position ::= expr LT position COMMA position GT */
2175
- -3, /* (76) position ::= expr ABOVE position */
2176
- -3, /* (77) position ::= expr BELOW position */
2177
- -4, /* (78) position ::= expr LEFT OF position */
2178
- -4, /* (79) position ::= expr RIGHT OF position */
2179
- -6, /* (80) position ::= expr ON HEADING EDGEPT OF position */
2180
- -5, /* (81) position ::= expr HEADING EDGEPT OF position */
2181
- -4, /* (82) position ::= expr EDGEPT OF position */
2182
- -6, /* (83) position ::= expr ON HEADING expr FROM position */
2183
- -5, /* (84) position ::= expr HEADING expr FROM position */
2184
- -3, /* (85) place ::= edge OF object */
2185
- -1, /* (86) place2 ::= object */
2186
- -3, /* (87) place2 ::= object DOT_E edge */
2187
- -4, /* (88) place2 ::= NTH VERTEX OF object */
2188
- -1, /* (89) object ::= nth */
2189
- -3, /* (90) object ::= nth OF|IN object */
2190
- -1, /* (91) objectname ::= PLACENAME */
2191
- -3, /* (92) objectname ::= objectname DOT_U PLACENAME */
2192
- -2, /* (93) nth ::= NTH CLASSNAME */
2193
- -3, /* (94) nth ::= NTH LAST CLASSNAME */
2194
- -2, /* (95) nth ::= LAST CLASSNAME */
2195
- -1, /* (96) nth ::= LAST */
2196
- -3, /* (97) nth ::= NTH LB RB */
2197
- -4, /* (98) nth ::= NTH LAST LB RB */
2198
- -3, /* (99) nth ::= LAST LB RB */
2199
- -3, /* (100) expr ::= expr PLUS expr */
2200
- -3, /* (101) expr ::= expr MINUS expr */
2201
- -3, /* (102) expr ::= expr STAR expr */
2202
- -3, /* (103) expr ::= expr SLASH expr */
2203
- -2, /* (104) expr ::= MINUS expr */
2204
- -2, /* (105) expr ::= PLUS expr */
2205
- -3, /* (106) expr ::= LP expr RP */
2206
- -1, /* (107) expr ::= NUMBER */
2207
- -1, /* (108) expr ::= ID */
2208
- -4, /* (109) expr ::= FUNC1 LP expr RP */
2209
- -6, /* (110) expr ::= FUNC2 LP expr COMMA expr RP */
2210
- -3, /* (111) expr ::= place2 DOT_XY X */
2211
- -3, /* (112) expr ::= place2 DOT_XY Y */
2212
- -3, /* (113) expr ::= object DOT_L numproperty */
2213
- -3, /* (114) expr ::= object DOT_L dashproperty */
2214
- -3, /* (115) expr ::= object DOT_L colorproperty */
2215
- -1, /* (116) lvalue ::= ID */
2216
- -1, /* (117) lvalue ::= FILL */
2217
- -1, /* (118) lvalue ::= COLOR */
2218
- -1, /* (119) lvalue ::= THICKNESS */
2219
- -1, /* (120) rvalue ::= expr */
2220
- -1, /* (121) print ::= PRINT */
2221
- -1, /* (122) prlist ::= pritem */
2222
- -3, /* (123) prlist ::= prlist prsep pritem */
2223
- -1, /* (124) direction ::= UP */
2224
- -1, /* (125) direction ::= DOWN */
2225
- -1, /* (126) direction ::= LEFT */
2226
- -1, /* (127) direction ::= RIGHT */
2227
- -1, /* (128) attribute_list ::= alist */
2228
- 0, /* (129) alist ::= */
2229
- -2, /* (130) alist ::= alist attribute */
2230
- -1, /* (131) attribute ::= boolproperty */
2231
- -2, /* (132) attribute ::= WITH withclause */
2232
- -1, /* (133) go ::= GO */
2233
- 0, /* (134) go ::= */
2234
- -3, /* (135) even ::= UNTIL EVEN WITH */
2235
- -2, /* (136) even ::= EVEN WITH */
2236
- -1, /* (137) dashproperty ::= DOTTED */
2237
- -1, /* (138) dashproperty ::= DASHED */
2238
- -1, /* (139) colorproperty ::= FILL */
2239
- -1, /* (140) colorproperty ::= COLOR */
2240
- -1, /* (141) position ::= place */
2241
- -2, /* (142) between ::= WAY BETWEEN */
2242
- -1, /* (143) between ::= BETWEEN */
2243
- -4, /* (144) between ::= OF THE WAY BETWEEN */
2244
- -1, /* (145) place ::= place2 */
2245
- -1, /* (146) edge ::= CENTER */
2246
- -1, /* (147) edge ::= EDGEPT */
2247
- -1, /* (148) edge ::= TOP */
2248
- -1, /* (149) edge ::= BOTTOM */
2249
- -1, /* (150) edge ::= START */
2250
- -1, /* (151) edge ::= END */
2251
- -1, /* (152) edge ::= RIGHT */
2252
- -1, /* (153) edge ::= LEFT */
2253
- -1, /* (154) object ::= objectname */
2110
+ -1, /* (24) relexpr ::= expr */
2111
+ -2, /* (25) relexpr ::= expr PERCENT */
2112
+ 0, /* (26) optrelexpr ::= */
2113
+ -2, /* (27) attribute_list ::= relexpr alist */
2114
+ -2, /* (28) attribute ::= numproperty relexpr */
2115
+ -2, /* (29) attribute ::= dashproperty expr */
2116
+ -1, /* (30) attribute ::= dashproperty */
2117
+ -2, /* (31) attribute ::= colorproperty rvalue */
2118
+ -3, /* (32) attribute ::= go direction optrelexpr */
2119
+ -4, /* (33) attribute ::= go direction even position */
2120
+ -1, /* (34) attribute ::= CLOSE */
2121
+ -1, /* (35) attribute ::= CHOP */
2122
+ -2, /* (36) attribute ::= FROM position */
2123
+ -2, /* (37) attribute ::= TO position */
2124
+ -1, /* (38) attribute ::= THEN */
2125
+ -4, /* (39) attribute ::= THEN optrelexpr HEADING expr */
2126
+ -3, /* (40) attribute ::= THEN optrelexpr EDGEPT */
2127
+ -4, /* (41) attribute ::= GO optrelexpr HEADING expr */
2128
+ -3, /* (42) attribute ::= GO optrelexpr EDGEPT */
2129
+ -2, /* (43) attribute ::= AT position */
2130
+ -1, /* (44) attribute ::= SAME */
2131
+ -3, /* (45) attribute ::= SAME AS object */
2132
+ -2, /* (46) attribute ::= STRING textposition */
2133
+ -1, /* (47) attribute ::= FIT */
2134
+ -2, /* (48) attribute ::= BEHIND object */
2135
+ -4, /* (49) withclause ::= DOT_E edge AT position */
2136
+ -3, /* (50) withclause ::= edge AT position */
2137
+ -1, /* (51) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2138
+ -1, /* (52) boolproperty ::= CW */
2139
+ -1, /* (53) boolproperty ::= CCW */
2140
+ -1, /* (54) boolproperty ::= LARROW */
2141
+ -1, /* (55) boolproperty ::= RARROW */
2142
+ -1, /* (56) boolproperty ::= LRARROW */
2143
+ -1, /* (57) boolproperty ::= INVIS */
2144
+ -1, /* (58) boolproperty ::= THICK */
2145
+ -1, /* (59) boolproperty ::= THIN */
2146
+ 0, /* (60) textposition ::= */
2147
+ -2, /* (61) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2148
+ -3, /* (62) position ::= expr COMMA expr */
2149
+ -5, /* (63) position ::= place PLUS expr COMMA expr */
2150
+ -5, /* (64) position ::= place MINUS expr COMMA expr */
2151
+ -7, /* (65) position ::= place PLUS LP expr COMMA expr RP */
2152
+ -7, /* (66) position ::= place MINUS LP expr COMMA expr RP */
2153
+ -5, /* (67) position ::= LP position COMMA position RP */
2154
+ -3, /* (68) position ::= LP position RP */
2155
+ -5, /* (69) position ::= expr between position AND position */
2156
+ -6, /* (70) position ::= expr LT position COMMA position GT */
2157
+ -3, /* (71) position ::= expr ABOVE position */
2158
+ -3, /* (72) position ::= expr BELOW position */
2159
+ -4, /* (73) position ::= expr LEFT OF position */
2160
+ -4, /* (74) position ::= expr RIGHT OF position */
2161
+ -6, /* (75) position ::= expr ON HEADING EDGEPT OF position */
2162
+ -5, /* (76) position ::= expr HEADING EDGEPT OF position */
2163
+ -4, /* (77) position ::= expr EDGEPT OF position */
2164
+ -6, /* (78) position ::= expr ON HEADING expr FROM position */
2165
+ -5, /* (79) position ::= expr HEADING expr FROM position */
2166
+ -3, /* (80) place ::= edge OF object */
2167
+ -1, /* (81) place2 ::= object */
2168
+ -3, /* (82) place2 ::= object DOT_E edge */
2169
+ -4, /* (83) place2 ::= NTH VERTEX OF object */
2170
+ -1, /* (84) object ::= nth */
2171
+ -3, /* (85) object ::= nth OF|IN object */
2172
+ -1, /* (86) objectname ::= PLACENAME */
2173
+ -3, /* (87) objectname ::= objectname DOT_U PLACENAME */
2174
+ -2, /* (88) nth ::= NTH CLASSNAME */
2175
+ -3, /* (89) nth ::= NTH LAST CLASSNAME */
2176
+ -2, /* (90) nth ::= LAST CLASSNAME */
2177
+ -1, /* (91) nth ::= LAST */
2178
+ -3, /* (92) nth ::= NTH LB RB */
2179
+ -4, /* (93) nth ::= NTH LAST LB RB */
2180
+ -3, /* (94) nth ::= LAST LB RB */
2181
+ -3, /* (95) expr ::= expr PLUS expr */
2182
+ -3, /* (96) expr ::= expr MINUS expr */
2183
+ -3, /* (97) expr ::= expr STAR expr */
2184
+ -3, /* (98) expr ::= expr SLASH expr */
2185
+ -2, /* (99) expr ::= MINUS expr */
2186
+ -2, /* (100) expr ::= PLUS expr */
2187
+ -3, /* (101) expr ::= LP expr RP */
2188
+ -1, /* (102) expr ::= NUMBER */
2189
+ -1, /* (103) expr ::= ID */
2190
+ -4, /* (104) expr ::= FUNC1 LP expr RP */
2191
+ -6, /* (105) expr ::= FUNC2 LP expr COMMA expr RP */
2192
+ -3, /* (106) expr ::= place2 DOT_XY X */
2193
+ -3, /* (107) expr ::= place2 DOT_XY Y */
2194
+ -3, /* (108) expr ::= object DOT_L numproperty */
2195
+ -3, /* (109) expr ::= object DOT_L dashproperty */
2196
+ -3, /* (110) expr ::= object DOT_L colorproperty */
2197
+ -1, /* (111) lvalue ::= ID */
2198
+ -1, /* (112) lvalue ::= FILL */
2199
+ -1, /* (113) lvalue ::= COLOR */
2200
+ -1, /* (114) lvalue ::= THICKNESS */
2201
+ -1, /* (115) rvalue ::= expr */
2202
+ -1, /* (116) print ::= PRINT */
2203
+ -1, /* (117) prlist ::= pritem */
2204
+ -3, /* (118) prlist ::= prlist prsep pritem */
2205
+ -1, /* (119) direction ::= UP */
2206
+ -1, /* (120) direction ::= DOWN */
2207
+ -1, /* (121) direction ::= LEFT */
2208
+ -1, /* (122) direction ::= RIGHT */
2209
+ -1, /* (123) optrelexpr ::= relexpr */
2210
+ -1, /* (124) attribute_list ::= alist */
2211
+ 0, /* (125) alist ::= */
2212
+ -2, /* (126) alist ::= alist attribute */
2213
+ -1, /* (127) attribute ::= boolproperty */
2214
+ -2, /* (128) attribute ::= WITH withclause */
2215
+ -1, /* (129) go ::= GO */
2216
+ 0, /* (130) go ::= */
2217
+ -3, /* (131) even ::= UNTIL EVEN WITH */
2218
+ -2, /* (132) even ::= EVEN WITH */
2219
+ -1, /* (133) dashproperty ::= DOTTED */
2220
+ -1, /* (134) dashproperty ::= DASHED */
2221
+ -1, /* (135) colorproperty ::= FILL */
2222
+ -1, /* (136) colorproperty ::= COLOR */
2223
+ -1, /* (137) position ::= place */
2224
+ -2, /* (138) between ::= WAY BETWEEN */
2225
+ -1, /* (139) between ::= BETWEEN */
2226
+ -4, /* (140) between ::= OF THE WAY BETWEEN */
2227
+ -1, /* (141) place ::= place2 */
2228
+ -1, /* (142) edge ::= CENTER */
2229
+ -1, /* (143) edge ::= EDGEPT */
2230
+ -1, /* (144) edge ::= TOP */
2231
+ -1, /* (145) edge ::= BOTTOM */
2232
+ -1, /* (146) edge ::= START */
2233
+ -1, /* (147) edge ::= END */
2234
+ -1, /* (148) edge ::= RIGHT */
2235
+ -1, /* (149) edge ::= LEFT */
2236
+ -1, /* (150) object ::= objectname */
22542237
};
22552238
22562239
static void yy_accept(yyParser*); /* Forward Declaration */
22572240
22582241
/*
@@ -2339,646 +2322,636 @@
23392322
** break;
23402323
*/
23412324
/********** Begin reduce actions **********************************************/
23422325
YYMINORTYPE yylhsminor;
23432326
case 0: /* document ::= element_list */
2344
-#line 483 "pikchr.y"
2345
-{pik_render(p,yymsp[0].minor.yy52);}
2346
-#line 2371 "pikchr.c"
2327
+#line 502 "pikchr.y"
2328
+{pik_render(p,yymsp[0].minor.yy72);}
2329
+#line 2354 "pikchr.c"
23472330
break;
23482331
case 1: /* element_list ::= element */
2349
-#line 486 "pikchr.y"
2350
-{ yylhsminor.yy52 = pik_elist_append(p,0,yymsp[0].minor.yy58); }
2351
-#line 2376 "pikchr.c"
2352
- yymsp[0].minor.yy52 = yylhsminor.yy52;
2332
+#line 505 "pikchr.y"
2333
+{ yylhsminor.yy72 = pik_elist_append(p,0,yymsp[0].minor.yy254); }
2334
+#line 2359 "pikchr.c"
2335
+ yymsp[0].minor.yy72 = yylhsminor.yy72;
23532336
break;
23542337
case 2: /* element_list ::= element_list EOL element */
2355
-#line 488 "pikchr.y"
2356
-{ yylhsminor.yy52 = pik_elist_append(p,yymsp[-2].minor.yy52,yymsp[0].minor.yy58); }
2357
-#line 2382 "pikchr.c"
2358
- yymsp[-2].minor.yy52 = yylhsminor.yy52;
2338
+#line 507 "pikchr.y"
2339
+{ yylhsminor.yy72 = pik_elist_append(p,yymsp[-2].minor.yy72,yymsp[0].minor.yy254); }
2340
+#line 2365 "pikchr.c"
2341
+ yymsp[-2].minor.yy72 = yylhsminor.yy72;
23592342
break;
23602343
case 3: /* element ::= */
2361
-#line 491 "pikchr.y"
2362
-{ yymsp[1].minor.yy58 = 0; }
2363
-#line 2388 "pikchr.c"
2344
+#line 510 "pikchr.y"
2345
+{ yymsp[1].minor.yy254 = 0; }
2346
+#line 2371 "pikchr.c"
23642347
break;
23652348
case 4: /* element ::= direction */
2366
-#line 492 "pikchr.y"
2367
-{ pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy58=0; }
2368
-#line 2393 "pikchr.c"
2369
- yymsp[0].minor.yy58 = yylhsminor.yy58;
2349
+#line 511 "pikchr.y"
2350
+{ pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy254=0; }
2351
+#line 2376 "pikchr.c"
2352
+ yymsp[0].minor.yy254 = yylhsminor.yy254;
23702353
break;
23712354
case 5: /* element ::= lvalue ASSIGN rvalue */
2372
-#line 493 "pikchr.y"
2373
-{pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy149,&yymsp[-1].minor.yy0); yylhsminor.yy58=0;}
2374
-#line 2399 "pikchr.c"
2375
- yymsp[-2].minor.yy58 = yylhsminor.yy58;
2355
+#line 512 "pikchr.y"
2356
+{pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy73,&yymsp[-1].minor.yy0); yylhsminor.yy254=0;}
2357
+#line 2382 "pikchr.c"
2358
+ yymsp[-2].minor.yy254 = yylhsminor.yy254;
23762359
break;
23772360
case 6: /* element ::= PLACENAME COLON unnamed_element */
2378
-#line 495 "pikchr.y"
2379
-{ yylhsminor.yy58 = yymsp[0].minor.yy58; pik_elem_setname(p,yymsp[0].minor.yy58,&yymsp[-2].minor.yy0); }
2380
-#line 2405 "pikchr.c"
2381
- yymsp[-2].minor.yy58 = yylhsminor.yy58;
2361
+#line 514 "pikchr.y"
2362
+{ yylhsminor.yy254 = yymsp[0].minor.yy254; pik_elem_setname(p,yymsp[0].minor.yy254,&yymsp[-2].minor.yy0); }
2363
+#line 2388 "pikchr.c"
2364
+ yymsp[-2].minor.yy254 = yylhsminor.yy254;
23822365
break;
23832366
case 7: /* element ::= PLACENAME COLON position */
2384
-#line 497 "pikchr.y"
2385
-{ yylhsminor.yy58 = pik_elem_new(p,0,0,0);
2386
- if(yylhsminor.yy58){ yylhsminor.yy58->ptAt = yymsp[0].minor.yy95; pik_elem_setname(p,yylhsminor.yy58,&yymsp[-2].minor.yy0); }}
2387
-#line 2412 "pikchr.c"
2388
- yymsp[-2].minor.yy58 = yylhsminor.yy58;
2367
+#line 516 "pikchr.y"
2368
+{ yylhsminor.yy254 = pik_elem_new(p,0,0,0);
2369
+ if(yylhsminor.yy254){ yylhsminor.yy254->ptAt = yymsp[0].minor.yy139; pik_elem_setname(p,yylhsminor.yy254,&yymsp[-2].minor.yy0); }}
2370
+#line 2395 "pikchr.c"
2371
+ yymsp[-2].minor.yy254 = yylhsminor.yy254;
23892372
break;
23902373
case 8: /* element ::= unnamed_element */
2391
-#line 499 "pikchr.y"
2392
-{yylhsminor.yy58 = yymsp[0].minor.yy58;}
2393
-#line 2418 "pikchr.c"
2394
- yymsp[0].minor.yy58 = yylhsminor.yy58;
2374
+#line 518 "pikchr.y"
2375
+{yylhsminor.yy254 = yymsp[0].minor.yy254;}
2376
+#line 2401 "pikchr.c"
2377
+ yymsp[0].minor.yy254 = yylhsminor.yy254;
23952378
break;
23962379
case 9: /* element ::= print prlist */
2397
-#line 500 "pikchr.y"
2398
-{pik_append(p,"<br>\n",5); yymsp[-1].minor.yy58=0;}
2399
-#line 2424 "pikchr.c"
2380
+#line 519 "pikchr.y"
2381
+{pik_append(p,"<br>\n",5); yymsp[-1].minor.yy254=0;}
2382
+#line 2407 "pikchr.c"
24002383
break;
24012384
case 10: /* element ::= ASSERT LP expr EQ expr RP */
2402
-#line 505 "pikchr.y"
2403
-{yymsp[-5].minor.yy58=pik_assert(p,yymsp[-3].minor.yy149,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy149);}
2404
-#line 2429 "pikchr.c"
2385
+#line 524 "pikchr.y"
2386
+{yymsp[-5].minor.yy254=pik_assert(p,yymsp[-3].minor.yy73,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy73);}
2387
+#line 2412 "pikchr.c"
24052388
break;
24062389
case 11: /* element ::= ASSERT LP place EQ place RP */
2407
-#line 507 "pikchr.y"
2408
-{yymsp[-5].minor.yy58=pik_place_assert(p,&yymsp[-3].minor.yy95,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy95);}
2409
-#line 2434 "pikchr.c"
2390
+#line 526 "pikchr.y"
2391
+{yymsp[-5].minor.yy254=pik_place_assert(p,&yymsp[-3].minor.yy139,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy139);}
2392
+#line 2417 "pikchr.c"
24102393
break;
24112394
case 12: /* rvalue ::= PLACENAME */
2412
-#line 518 "pikchr.y"
2413
-{yylhsminor.yy149 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2414
-#line 2439 "pikchr.c"
2415
- yymsp[0].minor.yy149 = yylhsminor.yy149;
2395
+#line 537 "pikchr.y"
2396
+{yylhsminor.yy73 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2397
+#line 2422 "pikchr.c"
2398
+ yymsp[0].minor.yy73 = yylhsminor.yy73;
24162399
break;
24172400
case 13: /* pritem ::= FILL */
24182401
case 14: /* pritem ::= COLOR */ yytestcase(yyruleno==14);
24192402
case 15: /* pritem ::= THICKNESS */ yytestcase(yyruleno==15);
2420
-#line 523 "pikchr.y"
2403
+#line 542 "pikchr.y"
24212404
{pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));}
2422
-#line 2447 "pikchr.c"
2405
+#line 2430 "pikchr.c"
24232406
break;
24242407
case 16: /* pritem ::= rvalue */
2425
-#line 526 "pikchr.y"
2426
-{pik_append_num(p,"",yymsp[0].minor.yy149);}
2427
-#line 2452 "pikchr.c"
2408
+#line 545 "pikchr.y"
2409
+{pik_append_num(p,"",yymsp[0].minor.yy73);}
2410
+#line 2435 "pikchr.c"
24282411
break;
24292412
case 17: /* pritem ::= STRING */
2430
-#line 527 "pikchr.y"
2413
+#line 546 "pikchr.y"
24312414
{pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2432
-#line 2457 "pikchr.c"
2415
+#line 2440 "pikchr.c"
24332416
break;
24342417
case 18: /* prsep ::= COMMA */
2435
-#line 528 "pikchr.y"
2418
+#line 547 "pikchr.y"
24362419
{pik_append(p, " ", 1);}
2437
-#line 2462 "pikchr.c"
2420
+#line 2445 "pikchr.c"
24382421
break;
24392422
case 19: /* unnamed_element ::= basetype attribute_list */
2440
-#line 531 "pikchr.y"
2441
-{yylhsminor.yy58 = yymsp[-1].minor.yy58; pik_after_adding_attributes(p,yylhsminor.yy58);}
2442
-#line 2467 "pikchr.c"
2443
- yymsp[-1].minor.yy58 = yylhsminor.yy58;
2423
+#line 550 "pikchr.y"
2424
+{yylhsminor.yy254 = yymsp[-1].minor.yy254; pik_after_adding_attributes(p,yylhsminor.yy254);}
2425
+#line 2450 "pikchr.c"
2426
+ yymsp[-1].minor.yy254 = yylhsminor.yy254;
24442427
break;
24452428
case 20: /* basetype ::= CLASSNAME */
2446
-#line 533 "pikchr.y"
2447
-{yylhsminor.yy58 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2448
-#line 2473 "pikchr.c"
2449
- yymsp[0].minor.yy58 = yylhsminor.yy58;
2429
+#line 552 "pikchr.y"
2430
+{yylhsminor.yy254 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2431
+#line 2456 "pikchr.c"
2432
+ yymsp[0].minor.yy254 = yylhsminor.yy254;
24502433
break;
24512434
case 21: /* basetype ::= STRING textposition */
2452
-#line 535 "pikchr.y"
2453
-{yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy92; yylhsminor.yy58 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2454
-#line 2479 "pikchr.c"
2455
- yymsp[-1].minor.yy58 = yylhsminor.yy58;
2435
+#line 554 "pikchr.y"
2436
+{yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy74; yylhsminor.yy254 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2437
+#line 2462 "pikchr.c"
2438
+ yymsp[-1].minor.yy254 = yylhsminor.yy254;
24562439
break;
24572440
case 22: /* basetype ::= LB savelist element_list RB */
2458
-#line 537 "pikchr.y"
2459
-{ p->list = yymsp[-2].minor.yy52; yymsp[-3].minor.yy58 = pik_elem_new(p,0,0,yymsp[-1].minor.yy52); if(yymsp[-3].minor.yy58) yymsp[-3].minor.yy58->errTok = yymsp[0].minor.yy0; }
2460
-#line 2485 "pikchr.c"
2441
+#line 556 "pikchr.y"
2442
+{ p->list = yymsp[-2].minor.yy72; yymsp[-3].minor.yy254 = pik_elem_new(p,0,0,yymsp[-1].minor.yy72); if(yymsp[-3].minor.yy254) yymsp[-3].minor.yy254->errTok = yymsp[0].minor.yy0; }
2443
+#line 2468 "pikchr.c"
24612444
break;
24622445
case 23: /* savelist ::= */
2463
-#line 542 "pikchr.y"
2464
-{yymsp[1].minor.yy52 = p->list; p->list = 0;}
2446
+#line 561 "pikchr.y"
2447
+{yymsp[1].minor.yy72 = p->list; p->list = 0;}
2448
+#line 2473 "pikchr.c"
2449
+ break;
2450
+ case 24: /* relexpr ::= expr */
2451
+#line 568 "pikchr.y"
2452
+{yylhsminor.yy60.rAbs = yymsp[0].minor.yy73; yylhsminor.yy60.rRel = 0;}
2453
+#line 2478 "pikchr.c"
2454
+ yymsp[0].minor.yy60 = yylhsminor.yy60;
2455
+ break;
2456
+ case 25: /* relexpr ::= expr PERCENT */
2457
+#line 569 "pikchr.y"
2458
+{yylhsminor.yy60.rAbs = 0; yylhsminor.yy60.rRel = yymsp[-1].minor.yy73/100;}
2459
+#line 2484 "pikchr.c"
2460
+ yymsp[-1].minor.yy60 = yylhsminor.yy60;
2461
+ break;
2462
+ case 26: /* optrelexpr ::= */
2463
+#line 571 "pikchr.y"
2464
+{yymsp[1].minor.yy60.rAbs = 0; yymsp[1].minor.yy60.rRel = 1.0;}
24652465
#line 2490 "pikchr.c"
24662466
break;
2467
- case 24: /* attribute_list ::= expr alist */
2468
-#line 549 "pikchr.y"
2469
-{ pik_add_direction(p,0,&yymsp[-1].minor.yy149,0);}
2467
+ case 27: /* attribute_list ::= relexpr alist */
2468
+#line 573 "pikchr.y"
2469
+{pik_add_direction(p,0,&yymsp[-1].minor.yy60);}
24702470
#line 2495 "pikchr.c"
24712471
break;
2472
- case 25: /* attribute_list ::= expr PERCENT alist */
2473
-#line 550 "pikchr.y"
2474
-{ pik_add_direction(p,0,&yymsp[-2].minor.yy149,1);}
2472
+ case 28: /* attribute ::= numproperty relexpr */
2473
+#line 577 "pikchr.y"
2474
+{ pik_set_numprop(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy60); }
24752475
#line 2500 "pikchr.c"
24762476
break;
2477
- case 26: /* attribute ::= numproperty expr PERCENT */
2478
-#line 555 "pikchr.y"
2479
-{ pik_set_numprop(p,&yymsp[-2].minor.yy0,0.0,yymsp[-1].minor.yy149/100.0); }
2477
+ case 29: /* attribute ::= dashproperty expr */
2478
+#line 578 "pikchr.y"
2479
+{ pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy73); }
24802480
#line 2505 "pikchr.c"
24812481
break;
2482
- case 27: /* attribute ::= numproperty expr */
2483
- case 30: /* attribute ::= colorproperty rvalue */ yytestcase(yyruleno==30);
2484
-#line 556 "pikchr.y"
2485
-{ pik_set_numprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy149,0.0); }
2486
-#line 2511 "pikchr.c"
2487
- break;
2488
- case 28: /* attribute ::= dashproperty expr */
2489
-#line 557 "pikchr.y"
2490
-{ pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy149); }
2491
-#line 2516 "pikchr.c"
2492
- break;
2493
- case 29: /* attribute ::= dashproperty */
2494
-#line 558 "pikchr.y"
2482
+ case 30: /* attribute ::= dashproperty */
2483
+#line 579 "pikchr.y"
24952484
{ pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2496
-#line 2521 "pikchr.c"
2497
- break;
2498
- case 31: /* attribute ::= go direction expr PERCENT */
2499
-#line 561 "pikchr.y"
2500
-{ pik_add_direction(p,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy149,1);}
2501
-#line 2526 "pikchr.c"
2502
- break;
2503
- case 32: /* attribute ::= go direction expr */
2504
-#line 562 "pikchr.y"
2505
-{ pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy149,0);}
2506
-#line 2531 "pikchr.c"
2507
- break;
2508
- case 33: /* attribute ::= go direction */
2509
-#line 563 "pikchr.y"
2510
-{ pik_add_direction(p,&yymsp[0].minor.yy0,0,0); }
2511
-#line 2536 "pikchr.c"
2512
- break;
2513
- case 34: /* attribute ::= go direction even position */
2514
-#line 564 "pikchr.y"
2515
-{pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy95);}
2516
-#line 2541 "pikchr.c"
2517
- break;
2518
- case 35: /* attribute ::= CLOSE */
2519
-#line 565 "pikchr.y"
2485
+#line 2510 "pikchr.c"
2486
+ break;
2487
+ case 31: /* attribute ::= colorproperty rvalue */
2488
+#line 580 "pikchr.y"
2489
+{ pik_set_clrprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy73); }
2490
+#line 2515 "pikchr.c"
2491
+ break;
2492
+ case 32: /* attribute ::= go direction optrelexpr */
2493
+#line 581 "pikchr.y"
2494
+{ pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy60);}
2495
+#line 2520 "pikchr.c"
2496
+ break;
2497
+ case 33: /* attribute ::= go direction even position */
2498
+#line 582 "pikchr.y"
2499
+{pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy139);}
2500
+#line 2525 "pikchr.c"
2501
+ break;
2502
+ case 34: /* attribute ::= CLOSE */
2503
+#line 583 "pikchr.y"
25202504
{ pik_close_path(p,&yymsp[0].minor.yy0); }
2521
-#line 2546 "pikchr.c"
2505
+#line 2530 "pikchr.c"
25222506
break;
2523
- case 36: /* attribute ::= CHOP */
2524
-#line 566 "pikchr.y"
2507
+ case 35: /* attribute ::= CHOP */
2508
+#line 584 "pikchr.y"
25252509
{ p->cur->bChop = 1; }
2526
-#line 2551 "pikchr.c"
2510
+#line 2535 "pikchr.c"
25272511
break;
2528
- case 37: /* attribute ::= FROM position */
2529
-#line 567 "pikchr.y"
2530
-{ pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy95); }
2512
+ case 36: /* attribute ::= FROM position */
2513
+#line 585 "pikchr.y"
2514
+{ pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy139); }
2515
+#line 2540 "pikchr.c"
2516
+ break;
2517
+ case 37: /* attribute ::= TO position */
2518
+#line 586 "pikchr.y"
2519
+{ pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy139); }
2520
+#line 2545 "pikchr.c"
2521
+ break;
2522
+ case 38: /* attribute ::= THEN */
2523
+#line 587 "pikchr.y"
2524
+{ pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2525
+#line 2550 "pikchr.c"
2526
+ break;
2527
+ case 39: /* attribute ::= THEN optrelexpr HEADING expr */
2528
+ case 41: /* attribute ::= GO optrelexpr HEADING expr */ yytestcase(yyruleno==41);
2529
+#line 589 "pikchr.y"
2530
+{pik_move_hdg(p,&yymsp[-2].minor.yy60,&yymsp[-1].minor.yy0,yymsp[0].minor.yy73,0,&yymsp[-3].minor.yy0);}
25312531
#line 2556 "pikchr.c"
25322532
break;
2533
- case 38: /* attribute ::= TO position */
2534
-#line 568 "pikchr.y"
2535
-{ pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy95); }
2536
-#line 2561 "pikchr.c"
2537
- break;
2538
- case 39: /* attribute ::= THEN */
2539
-#line 569 "pikchr.y"
2540
-{ pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2541
-#line 2566 "pikchr.c"
2542
- break;
2543
- case 40: /* attribute ::= THEN expr HEADING expr */
2544
- case 44: /* attribute ::= GO expr HEADING expr */ yytestcase(yyruleno==44);
2545
-#line 571 "pikchr.y"
2546
-{pik_move_hdg(p,&yymsp[-2].minor.yy149,&yymsp[-1].minor.yy0,yymsp[0].minor.yy149,0,&yymsp[-3].minor.yy0);}
2533
+ case 40: /* attribute ::= THEN optrelexpr EDGEPT */
2534
+ case 42: /* attribute ::= GO optrelexpr EDGEPT */ yytestcase(yyruleno==42);
2535
+#line 590 "pikchr.y"
2536
+{pik_move_hdg(p,&yymsp[-1].minor.yy60,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);}
2537
+#line 2562 "pikchr.c"
2538
+ break;
2539
+ case 43: /* attribute ::= AT position */
2540
+#line 595 "pikchr.y"
2541
+{ pik_set_at(p,0,&yymsp[0].minor.yy139,&yymsp[-1].minor.yy0); }
2542
+#line 2567 "pikchr.c"
2543
+ break;
2544
+ case 44: /* attribute ::= SAME */
2545
+#line 597 "pikchr.y"
2546
+{pik_same(p,0,&yymsp[0].minor.yy0);}
25472547
#line 2572 "pikchr.c"
25482548
break;
2549
- case 41: /* attribute ::= THEN HEADING expr */
2550
- case 45: /* attribute ::= GO HEADING expr */ yytestcase(yyruleno==45);
2551
-#line 572 "pikchr.y"
2552
-{pik_move_hdg(p,0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy149,0,&yymsp[-2].minor.yy0);}
2553
-#line 2578 "pikchr.c"
2554
- break;
2555
- case 42: /* attribute ::= THEN expr EDGEPT */
2556
- case 46: /* attribute ::= GO expr EDGEPT */ yytestcase(yyruleno==46);
2557
-#line 573 "pikchr.y"
2558
-{pik_move_hdg(p,&yymsp[-1].minor.yy149,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);}
2559
-#line 2584 "pikchr.c"
2560
- break;
2561
- case 43: /* attribute ::= THEN EDGEPT */
2562
- case 47: /* attribute ::= GO EDGEPT */ yytestcase(yyruleno==47);
2563
-#line 574 "pikchr.y"
2564
-{pik_move_hdg(p,0,0,0,&yymsp[0].minor.yy0,&yymsp[-1].minor.yy0);}
2565
-#line 2590 "pikchr.c"
2566
- break;
2567
- case 48: /* attribute ::= AT position */
2568
-#line 580 "pikchr.y"
2569
-{ pik_set_at(p,0,&yymsp[0].minor.yy95,&yymsp[-1].minor.yy0); }
2570
-#line 2595 "pikchr.c"
2571
- break;
2572
- case 49: /* attribute ::= SAME */
2573
-#line 582 "pikchr.y"
2574
-{pik_same(p,0,&yymsp[0].minor.yy0);}
2575
-#line 2600 "pikchr.c"
2576
- break;
2577
- case 50: /* attribute ::= SAME AS object */
2578
-#line 583 "pikchr.y"
2579
-{pik_same(p,yymsp[0].minor.yy58,&yymsp[-2].minor.yy0);}
2580
-#line 2605 "pikchr.c"
2581
- break;
2582
- case 51: /* attribute ::= STRING textposition */
2583
-#line 584 "pikchr.y"
2584
-{pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy92);}
2585
-#line 2610 "pikchr.c"
2586
- break;
2587
- case 52: /* attribute ::= FIT */
2588
-#line 585 "pikchr.y"
2549
+ case 45: /* attribute ::= SAME AS object */
2550
+#line 598 "pikchr.y"
2551
+{pik_same(p,yymsp[0].minor.yy254,&yymsp[-2].minor.yy0);}
2552
+#line 2577 "pikchr.c"
2553
+ break;
2554
+ case 46: /* attribute ::= STRING textposition */
2555
+#line 599 "pikchr.y"
2556
+{pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy74);}
2557
+#line 2582 "pikchr.c"
2558
+ break;
2559
+ case 47: /* attribute ::= FIT */
2560
+#line 600 "pikchr.y"
25892561
{pik_size_to_fit(p,&yymsp[0].minor.yy0); }
2590
-#line 2615 "pikchr.c"
2591
- break;
2592
- case 53: /* attribute ::= BEHIND object */
2593
-#line 586 "pikchr.y"
2594
-{pik_behind(p,yymsp[0].minor.yy58);}
2595
-#line 2620 "pikchr.c"
2596
- break;
2597
- case 54: /* withclause ::= DOT_E edge AT position */
2598
- case 55: /* withclause ::= edge AT position */ yytestcase(yyruleno==55);
2599
-#line 594 "pikchr.y"
2600
-{ pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy95,&yymsp[-1].minor.yy0); }
2601
-#line 2626 "pikchr.c"
2602
- break;
2603
- case 56: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2604
-#line 598 "pikchr.y"
2562
+#line 2587 "pikchr.c"
2563
+ break;
2564
+ case 48: /* attribute ::= BEHIND object */
2565
+#line 601 "pikchr.y"
2566
+{pik_behind(p,yymsp[0].minor.yy254);}
2567
+#line 2592 "pikchr.c"
2568
+ break;
2569
+ case 49: /* withclause ::= DOT_E edge AT position */
2570
+ case 50: /* withclause ::= edge AT position */ yytestcase(yyruleno==50);
2571
+#line 609 "pikchr.y"
2572
+{ pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy139,&yymsp[-1].minor.yy0); }
2573
+#line 2598 "pikchr.c"
2574
+ break;
2575
+ case 51: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2576
+#line 613 "pikchr.y"
26052577
{yylhsminor.yy0 = yymsp[0].minor.yy0;}
2606
-#line 2631 "pikchr.c"
2578
+#line 2603 "pikchr.c"
26072579
yymsp[0].minor.yy0 = yylhsminor.yy0;
26082580
break;
2609
- case 57: /* boolproperty ::= CW */
2610
-#line 609 "pikchr.y"
2581
+ case 52: /* boolproperty ::= CW */
2582
+#line 624 "pikchr.y"
26112583
{p->cur->cw = 1;}
2612
-#line 2637 "pikchr.c"
2584
+#line 2609 "pikchr.c"
26132585
break;
2614
- case 58: /* boolproperty ::= CCW */
2615
-#line 610 "pikchr.y"
2586
+ case 53: /* boolproperty ::= CCW */
2587
+#line 625 "pikchr.y"
26162588
{p->cur->cw = 0;}
2617
-#line 2642 "pikchr.c"
2589
+#line 2614 "pikchr.c"
26182590
break;
2619
- case 59: /* boolproperty ::= LARROW */
2620
-#line 611 "pikchr.y"
2591
+ case 54: /* boolproperty ::= LARROW */
2592
+#line 626 "pikchr.y"
26212593
{p->cur->larrow=1; p->cur->rarrow=0; }
2622
-#line 2647 "pikchr.c"
2594
+#line 2619 "pikchr.c"
26232595
break;
2624
- case 60: /* boolproperty ::= RARROW */
2625
-#line 612 "pikchr.y"
2596
+ case 55: /* boolproperty ::= RARROW */
2597
+#line 627 "pikchr.y"
26262598
{p->cur->larrow=0; p->cur->rarrow=1; }
2627
-#line 2652 "pikchr.c"
2599
+#line 2624 "pikchr.c"
26282600
break;
2629
- case 61: /* boolproperty ::= LRARROW */
2630
-#line 613 "pikchr.y"
2601
+ case 56: /* boolproperty ::= LRARROW */
2602
+#line 628 "pikchr.y"
26312603
{p->cur->larrow=1; p->cur->rarrow=1; }
2632
-#line 2657 "pikchr.c"
2604
+#line 2629 "pikchr.c"
26332605
break;
2634
- case 62: /* boolproperty ::= INVIS */
2635
-#line 614 "pikchr.y"
2606
+ case 57: /* boolproperty ::= INVIS */
2607
+#line 629 "pikchr.y"
26362608
{p->cur->sw = 0.0;}
2637
-#line 2662 "pikchr.c"
2609
+#line 2634 "pikchr.c"
26382610
break;
2639
- case 63: /* boolproperty ::= THICK */
2640
-#line 615 "pikchr.y"
2611
+ case 58: /* boolproperty ::= THICK */
2612
+#line 630 "pikchr.y"
26412613
{p->cur->sw *= 1.5;}
2642
-#line 2667 "pikchr.c"
2614
+#line 2639 "pikchr.c"
26432615
break;
2644
- case 64: /* boolproperty ::= THIN */
2645
-#line 616 "pikchr.y"
2616
+ case 59: /* boolproperty ::= THIN */
2617
+#line 631 "pikchr.y"
26462618
{p->cur->sw *= 0.67;}
2619
+#line 2644 "pikchr.c"
2620
+ break;
2621
+ case 60: /* textposition ::= */
2622
+#line 633 "pikchr.y"
2623
+{yymsp[1].minor.yy74 = 0;}
2624
+#line 2649 "pikchr.c"
2625
+ break;
2626
+ case 61: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2627
+#line 636 "pikchr.y"
2628
+{yylhsminor.yy74 = pik_text_position(p,yymsp[-1].minor.yy74,&yymsp[0].minor.yy0);}
2629
+#line 2654 "pikchr.c"
2630
+ yymsp[-1].minor.yy74 = yylhsminor.yy74;
2631
+ break;
2632
+ case 62: /* position ::= expr COMMA expr */
2633
+#line 639 "pikchr.y"
2634
+{yylhsminor.yy139.x=yymsp[-2].minor.yy73; yylhsminor.yy139.y=yymsp[0].minor.yy73;}
2635
+#line 2660 "pikchr.c"
2636
+ yymsp[-2].minor.yy139 = yylhsminor.yy139;
2637
+ break;
2638
+ case 63: /* position ::= place PLUS expr COMMA expr */
2639
+#line 641 "pikchr.y"
2640
+{yylhsminor.yy139.x=yymsp[-4].minor.yy139.x+yymsp[-2].minor.yy73; yylhsminor.yy139.y=yymsp[-4].minor.yy139.y+yymsp[0].minor.yy73;}
2641
+#line 2666 "pikchr.c"
2642
+ yymsp[-4].minor.yy139 = yylhsminor.yy139;
2643
+ break;
2644
+ case 64: /* position ::= place MINUS expr COMMA expr */
2645
+#line 642 "pikchr.y"
2646
+{yylhsminor.yy139.x=yymsp[-4].minor.yy139.x-yymsp[-2].minor.yy73; yylhsminor.yy139.y=yymsp[-4].minor.yy139.y-yymsp[0].minor.yy73;}
26472647
#line 2672 "pikchr.c"
2648
- break;
2649
- case 65: /* textposition ::= */
2650
-#line 618 "pikchr.y"
2651
-{yymsp[1].minor.yy92 = 0;}
2652
-#line 2677 "pikchr.c"
2653
- break;
2654
- case 66: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2655
-#line 621 "pikchr.y"
2656
-{yylhsminor.yy92 = pik_text_position(p,yymsp[-1].minor.yy92,&yymsp[0].minor.yy0);}
2657
-#line 2682 "pikchr.c"
2658
- yymsp[-1].minor.yy92 = yylhsminor.yy92;
2659
- break;
2660
- case 67: /* position ::= expr COMMA expr */
2661
-#line 624 "pikchr.y"
2662
-{yylhsminor.yy95.x=yymsp[-2].minor.yy149; yylhsminor.yy95.y=yymsp[0].minor.yy149;}
2663
-#line 2688 "pikchr.c"
2664
- yymsp[-2].minor.yy95 = yylhsminor.yy95;
2665
- break;
2666
- case 68: /* position ::= place PLUS expr COMMA expr */
2667
-#line 626 "pikchr.y"
2668
-{yylhsminor.yy95.x=yymsp[-4].minor.yy95.x+yymsp[-2].minor.yy149; yylhsminor.yy95.y=yymsp[-4].minor.yy95.y+yymsp[0].minor.yy149;}
2669
-#line 2694 "pikchr.c"
2670
- yymsp[-4].minor.yy95 = yylhsminor.yy95;
2671
- break;
2672
- case 69: /* position ::= place MINUS expr COMMA expr */
2673
-#line 627 "pikchr.y"
2674
-{yylhsminor.yy95.x=yymsp[-4].minor.yy95.x-yymsp[-2].minor.yy149; yylhsminor.yy95.y=yymsp[-4].minor.yy95.y-yymsp[0].minor.yy149;}
2648
+ yymsp[-4].minor.yy139 = yylhsminor.yy139;
2649
+ break;
2650
+ case 65: /* position ::= place PLUS LP expr COMMA expr RP */
2651
+#line 644 "pikchr.y"
2652
+{yylhsminor.yy139.x=yymsp[-6].minor.yy139.x+yymsp[-3].minor.yy73; yylhsminor.yy139.y=yymsp[-6].minor.yy139.y+yymsp[-1].minor.yy73;}
2653
+#line 2678 "pikchr.c"
2654
+ yymsp[-6].minor.yy139 = yylhsminor.yy139;
2655
+ break;
2656
+ case 66: /* position ::= place MINUS LP expr COMMA expr RP */
2657
+#line 646 "pikchr.y"
2658
+{yylhsminor.yy139.x=yymsp[-6].minor.yy139.x-yymsp[-3].minor.yy73; yylhsminor.yy139.y=yymsp[-6].minor.yy139.y-yymsp[-1].minor.yy73;}
2659
+#line 2684 "pikchr.c"
2660
+ yymsp[-6].minor.yy139 = yylhsminor.yy139;
2661
+ break;
2662
+ case 67: /* position ::= LP position COMMA position RP */
2663
+#line 647 "pikchr.y"
2664
+{yymsp[-4].minor.yy139.x=yymsp[-3].minor.yy139.x; yymsp[-4].minor.yy139.y=yymsp[-1].minor.yy139.y;}
2665
+#line 2690 "pikchr.c"
2666
+ break;
2667
+ case 68: /* position ::= LP position RP */
2668
+#line 648 "pikchr.y"
2669
+{yymsp[-2].minor.yy139=yymsp[-1].minor.yy139;}
2670
+#line 2695 "pikchr.c"
2671
+ break;
2672
+ case 69: /* position ::= expr between position AND position */
2673
+#line 650 "pikchr.y"
2674
+{yylhsminor.yy139 = pik_position_between(p,yymsp[-4].minor.yy73,yymsp[-2].minor.yy139,yymsp[0].minor.yy139);}
26752675
#line 2700 "pikchr.c"
2676
- yymsp[-4].minor.yy95 = yylhsminor.yy95;
2676
+ yymsp[-4].minor.yy139 = yylhsminor.yy139;
26772677
break;
2678
- case 70: /* position ::= place PLUS LP expr COMMA expr RP */
2679
-#line 629 "pikchr.y"
2680
-{yylhsminor.yy95.x=yymsp[-6].minor.yy95.x+yymsp[-3].minor.yy149; yylhsminor.yy95.y=yymsp[-6].minor.yy95.y+yymsp[-1].minor.yy149;}
2678
+ case 70: /* position ::= expr LT position COMMA position GT */
2679
+#line 652 "pikchr.y"
2680
+{yylhsminor.yy139 = pik_position_between(p,yymsp[-5].minor.yy73,yymsp[-3].minor.yy139,yymsp[-1].minor.yy139);}
26812681
#line 2706 "pikchr.c"
2682
- yymsp[-6].minor.yy95 = yylhsminor.yy95;
2682
+ yymsp[-5].minor.yy139 = yylhsminor.yy139;
26832683
break;
2684
- case 71: /* position ::= place MINUS LP expr COMMA expr RP */
2685
-#line 631 "pikchr.y"
2686
-{yylhsminor.yy95.x=yymsp[-6].minor.yy95.x-yymsp[-3].minor.yy149; yylhsminor.yy95.y=yymsp[-6].minor.yy95.y-yymsp[-1].minor.yy149;}
2684
+ case 71: /* position ::= expr ABOVE position */
2685
+#line 653 "pikchr.y"
2686
+{yylhsminor.yy139=yymsp[0].minor.yy139; yylhsminor.yy139.y += yymsp[-2].minor.yy73;}
26872687
#line 2712 "pikchr.c"
2688
- yymsp[-6].minor.yy95 = yylhsminor.yy95;
2688
+ yymsp[-2].minor.yy139 = yylhsminor.yy139;
26892689
break;
2690
- case 72: /* position ::= LP position COMMA position RP */
2691
-#line 632 "pikchr.y"
2692
-{yymsp[-4].minor.yy95.x=yymsp[-3].minor.yy95.x; yymsp[-4].minor.yy95.y=yymsp[-1].minor.yy95.y;}
2690
+ case 72: /* position ::= expr BELOW position */
2691
+#line 654 "pikchr.y"
2692
+{yylhsminor.yy139=yymsp[0].minor.yy139; yylhsminor.yy139.y -= yymsp[-2].minor.yy73;}
26932693
#line 2718 "pikchr.c"
2694
- break;
2695
- case 73: /* position ::= LP position RP */
2696
-#line 633 "pikchr.y"
2697
-{yymsp[-2].minor.yy95=yymsp[-1].minor.yy95;}
2698
-#line 2723 "pikchr.c"
2699
- break;
2700
- case 74: /* position ::= expr between position AND position */
2701
-#line 635 "pikchr.y"
2702
-{yylhsminor.yy95 = pik_position_between(p,yymsp[-4].minor.yy149,yymsp[-2].minor.yy95,yymsp[0].minor.yy95);}
2703
-#line 2728 "pikchr.c"
2704
- yymsp[-4].minor.yy95 = yylhsminor.yy95;
2705
- break;
2706
- case 75: /* position ::= expr LT position COMMA position GT */
2707
-#line 637 "pikchr.y"
2708
-{yylhsminor.yy95 = pik_position_between(p,yymsp[-5].minor.yy149,yymsp[-3].minor.yy95,yymsp[-1].minor.yy95);}
2709
-#line 2734 "pikchr.c"
2710
- yymsp[-5].minor.yy95 = yylhsminor.yy95;
2711
- break;
2712
- case 76: /* position ::= expr ABOVE position */
2713
-#line 638 "pikchr.y"
2714
-{yylhsminor.yy95=yymsp[0].minor.yy95; yylhsminor.yy95.y += yymsp[-2].minor.yy149;}
2715
-#line 2740 "pikchr.c"
2716
- yymsp[-2].minor.yy95 = yylhsminor.yy95;
2717
- break;
2718
- case 77: /* position ::= expr BELOW position */
2719
-#line 639 "pikchr.y"
2720
-{yylhsminor.yy95=yymsp[0].minor.yy95; yylhsminor.yy95.y -= yymsp[-2].minor.yy149;}
2721
-#line 2746 "pikchr.c"
2722
- yymsp[-2].minor.yy95 = yylhsminor.yy95;
2723
- break;
2724
- case 78: /* position ::= expr LEFT OF position */
2725
-#line 640 "pikchr.y"
2726
-{yylhsminor.yy95=yymsp[0].minor.yy95; yylhsminor.yy95.x -= yymsp[-3].minor.yy149;}
2727
-#line 2752 "pikchr.c"
2728
- yymsp[-3].minor.yy95 = yylhsminor.yy95;
2729
- break;
2730
- case 79: /* position ::= expr RIGHT OF position */
2731
-#line 641 "pikchr.y"
2732
-{yylhsminor.yy95=yymsp[0].minor.yy95; yylhsminor.yy95.x += yymsp[-3].minor.yy149;}
2733
-#line 2758 "pikchr.c"
2734
- yymsp[-3].minor.yy95 = yylhsminor.yy95;
2735
- break;
2736
- case 80: /* position ::= expr ON HEADING EDGEPT OF position */
2737
-#line 643 "pikchr.y"
2738
-{yylhsminor.yy95 = pik_position_at_hdg(p,yymsp[-5].minor.yy149,&yymsp[-2].minor.yy0,yymsp[0].minor.yy95);}
2739
-#line 2764 "pikchr.c"
2740
- yymsp[-5].minor.yy95 = yylhsminor.yy95;
2741
- break;
2742
- case 81: /* position ::= expr HEADING EDGEPT OF position */
2743
-#line 645 "pikchr.y"
2744
-{yylhsminor.yy95 = pik_position_at_hdg(p,yymsp[-4].minor.yy149,&yymsp[-2].minor.yy0,yymsp[0].minor.yy95);}
2745
-#line 2770 "pikchr.c"
2746
- yymsp[-4].minor.yy95 = yylhsminor.yy95;
2747
- break;
2748
- case 82: /* position ::= expr EDGEPT OF position */
2749
-#line 647 "pikchr.y"
2750
-{yylhsminor.yy95 = pik_position_at_hdg(p,yymsp[-3].minor.yy149,&yymsp[-2].minor.yy0,yymsp[0].minor.yy95);}
2751
-#line 2776 "pikchr.c"
2752
- yymsp[-3].minor.yy95 = yylhsminor.yy95;
2753
- break;
2754
- case 83: /* position ::= expr ON HEADING expr FROM position */
2755
-#line 649 "pikchr.y"
2756
-{yylhsminor.yy95 = pik_position_at_angle(p,yymsp[-5].minor.yy149,yymsp[-2].minor.yy149,yymsp[0].minor.yy95);}
2757
-#line 2782 "pikchr.c"
2758
- yymsp[-5].minor.yy95 = yylhsminor.yy95;
2759
- break;
2760
- case 84: /* position ::= expr HEADING expr FROM position */
2761
-#line 651 "pikchr.y"
2762
-{yylhsminor.yy95 = pik_position_at_angle(p,yymsp[-4].minor.yy149,yymsp[-2].minor.yy149,yymsp[0].minor.yy95);}
2763
-#line 2788 "pikchr.c"
2764
- yymsp[-4].minor.yy95 = yylhsminor.yy95;
2765
- break;
2766
- case 85: /* place ::= edge OF object */
2767
-#line 663 "pikchr.y"
2768
-{yylhsminor.yy95 = pik_place_of_elem(p,yymsp[0].minor.yy58,&yymsp[-2].minor.yy0);}
2769
-#line 2794 "pikchr.c"
2770
- yymsp[-2].minor.yy95 = yylhsminor.yy95;
2771
- break;
2772
- case 86: /* place2 ::= object */
2694
+ yymsp[-2].minor.yy139 = yylhsminor.yy139;
2695
+ break;
2696
+ case 73: /* position ::= expr LEFT OF position */
2697
+#line 655 "pikchr.y"
2698
+{yylhsminor.yy139=yymsp[0].minor.yy139; yylhsminor.yy139.x -= yymsp[-3].minor.yy73;}
2699
+#line 2724 "pikchr.c"
2700
+ yymsp[-3].minor.yy139 = yylhsminor.yy139;
2701
+ break;
2702
+ case 74: /* position ::= expr RIGHT OF position */
2703
+#line 656 "pikchr.y"
2704
+{yylhsminor.yy139=yymsp[0].minor.yy139; yylhsminor.yy139.x += yymsp[-3].minor.yy73;}
2705
+#line 2730 "pikchr.c"
2706
+ yymsp[-3].minor.yy139 = yylhsminor.yy139;
2707
+ break;
2708
+ case 75: /* position ::= expr ON HEADING EDGEPT OF position */
2709
+#line 658 "pikchr.y"
2710
+{yylhsminor.yy139 = pik_position_at_hdg(p,yymsp[-5].minor.yy73,&yymsp[-2].minor.yy0,yymsp[0].minor.yy139);}
2711
+#line 2736 "pikchr.c"
2712
+ yymsp[-5].minor.yy139 = yylhsminor.yy139;
2713
+ break;
2714
+ case 76: /* position ::= expr HEADING EDGEPT OF position */
2715
+#line 660 "pikchr.y"
2716
+{yylhsminor.yy139 = pik_position_at_hdg(p,yymsp[-4].minor.yy73,&yymsp[-2].minor.yy0,yymsp[0].minor.yy139);}
2717
+#line 2742 "pikchr.c"
2718
+ yymsp[-4].minor.yy139 = yylhsminor.yy139;
2719
+ break;
2720
+ case 77: /* position ::= expr EDGEPT OF position */
2721
+#line 662 "pikchr.y"
2722
+{yylhsminor.yy139 = pik_position_at_hdg(p,yymsp[-3].minor.yy73,&yymsp[-2].minor.yy0,yymsp[0].minor.yy139);}
2723
+#line 2748 "pikchr.c"
2724
+ yymsp[-3].minor.yy139 = yylhsminor.yy139;
2725
+ break;
2726
+ case 78: /* position ::= expr ON HEADING expr FROM position */
27732727
#line 664 "pikchr.y"
2774
-{yylhsminor.yy95 = pik_place_of_elem(p,yymsp[0].minor.yy58,0);}
2775
-#line 2800 "pikchr.c"
2776
- yymsp[0].minor.yy95 = yylhsminor.yy95;
2777
- break;
2778
- case 87: /* place2 ::= object DOT_E edge */
2779
-#line 665 "pikchr.y"
2780
-{yylhsminor.yy95 = pik_place_of_elem(p,yymsp[-2].minor.yy58,&yymsp[0].minor.yy0);}
2781
-#line 2806 "pikchr.c"
2782
- yymsp[-2].minor.yy95 = yylhsminor.yy95;
2783
- break;
2784
- case 88: /* place2 ::= NTH VERTEX OF object */
2728
+{yylhsminor.yy139 = pik_position_at_angle(p,yymsp[-5].minor.yy73,yymsp[-2].minor.yy73,yymsp[0].minor.yy139);}
2729
+#line 2754 "pikchr.c"
2730
+ yymsp[-5].minor.yy139 = yylhsminor.yy139;
2731
+ break;
2732
+ case 79: /* position ::= expr HEADING expr FROM position */
27852733
#line 666 "pikchr.y"
2786
-{yylhsminor.yy95 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy58);}
2787
-#line 2812 "pikchr.c"
2788
- yymsp[-3].minor.yy95 = yylhsminor.yy95;
2734
+{yylhsminor.yy139 = pik_position_at_angle(p,yymsp[-4].minor.yy73,yymsp[-2].minor.yy73,yymsp[0].minor.yy139);}
2735
+#line 2760 "pikchr.c"
2736
+ yymsp[-4].minor.yy139 = yylhsminor.yy139;
27892737
break;
2790
- case 89: /* object ::= nth */
2738
+ case 80: /* place ::= edge OF object */
27912739
#line 678 "pikchr.y"
2792
-{yylhsminor.yy58 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2793
-#line 2818 "pikchr.c"
2794
- yymsp[0].minor.yy58 = yylhsminor.yy58;
2740
+{yylhsminor.yy139 = pik_place_of_elem(p,yymsp[0].minor.yy254,&yymsp[-2].minor.yy0);}
2741
+#line 2766 "pikchr.c"
2742
+ yymsp[-2].minor.yy139 = yylhsminor.yy139;
27952743
break;
2796
- case 90: /* object ::= nth OF|IN object */
2744
+ case 81: /* place2 ::= object */
27972745
#line 679 "pikchr.y"
2798
-{yylhsminor.yy58 = pik_find_nth(p,yymsp[0].minor.yy58,&yymsp[-2].minor.yy0);}
2799
-#line 2824 "pikchr.c"
2800
- yymsp[-2].minor.yy58 = yylhsminor.yy58;
2746
+{yylhsminor.yy139 = pik_place_of_elem(p,yymsp[0].minor.yy254,0);}
2747
+#line 2772 "pikchr.c"
2748
+ yymsp[0].minor.yy139 = yylhsminor.yy139;
2749
+ break;
2750
+ case 82: /* place2 ::= object DOT_E edge */
2751
+#line 680 "pikchr.y"
2752
+{yylhsminor.yy139 = pik_place_of_elem(p,yymsp[-2].minor.yy254,&yymsp[0].minor.yy0);}
2753
+#line 2778 "pikchr.c"
2754
+ yymsp[-2].minor.yy139 = yylhsminor.yy139;
28012755
break;
2802
- case 91: /* objectname ::= PLACENAME */
2756
+ case 83: /* place2 ::= NTH VERTEX OF object */
28032757
#line 681 "pikchr.y"
2804
-{yylhsminor.yy58 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2805
-#line 2830 "pikchr.c"
2806
- yymsp[0].minor.yy58 = yylhsminor.yy58;
2807
- break;
2808
- case 92: /* objectname ::= objectname DOT_U PLACENAME */
2809
-#line 683 "pikchr.y"
2810
-{yylhsminor.yy58 = pik_find_byname(p,yymsp[-2].minor.yy58,&yymsp[0].minor.yy0);}
2811
-#line 2836 "pikchr.c"
2812
- yymsp[-2].minor.yy58 = yylhsminor.yy58;
2813
- break;
2814
- case 93: /* nth ::= NTH CLASSNAME */
2815
-#line 685 "pikchr.y"
2758
+{yylhsminor.yy139 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy254);}
2759
+#line 2784 "pikchr.c"
2760
+ yymsp[-3].minor.yy139 = yylhsminor.yy139;
2761
+ break;
2762
+ case 84: /* object ::= nth */
2763
+#line 693 "pikchr.y"
2764
+{yylhsminor.yy254 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2765
+#line 2790 "pikchr.c"
2766
+ yymsp[0].minor.yy254 = yylhsminor.yy254;
2767
+ break;
2768
+ case 85: /* object ::= nth OF|IN object */
2769
+#line 694 "pikchr.y"
2770
+{yylhsminor.yy254 = pik_find_nth(p,yymsp[0].minor.yy254,&yymsp[-2].minor.yy0);}
2771
+#line 2796 "pikchr.c"
2772
+ yymsp[-2].minor.yy254 = yylhsminor.yy254;
2773
+ break;
2774
+ case 86: /* objectname ::= PLACENAME */
2775
+#line 696 "pikchr.y"
2776
+{yylhsminor.yy254 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2777
+#line 2802 "pikchr.c"
2778
+ yymsp[0].minor.yy254 = yylhsminor.yy254;
2779
+ break;
2780
+ case 87: /* objectname ::= objectname DOT_U PLACENAME */
2781
+#line 698 "pikchr.y"
2782
+{yylhsminor.yy254 = pik_find_byname(p,yymsp[-2].minor.yy254,&yymsp[0].minor.yy0);}
2783
+#line 2808 "pikchr.c"
2784
+ yymsp[-2].minor.yy254 = yylhsminor.yy254;
2785
+ break;
2786
+ case 88: /* nth ::= NTH CLASSNAME */
2787
+#line 700 "pikchr.y"
28162788
{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2817
-#line 2842 "pikchr.c"
2789
+#line 2814 "pikchr.c"
28182790
yymsp[-1].minor.yy0 = yylhsminor.yy0;
28192791
break;
2820
- case 94: /* nth ::= NTH LAST CLASSNAME */
2821
-#line 686 "pikchr.y"
2792
+ case 89: /* nth ::= NTH LAST CLASSNAME */
2793
+#line 701 "pikchr.y"
28222794
{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2823
-#line 2848 "pikchr.c"
2795
+#line 2820 "pikchr.c"
28242796
yymsp[-2].minor.yy0 = yylhsminor.yy0;
28252797
break;
2826
- case 95: /* nth ::= LAST CLASSNAME */
2827
-#line 687 "pikchr.y"
2798
+ case 90: /* nth ::= LAST CLASSNAME */
2799
+#line 702 "pikchr.y"
28282800
{yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2829
-#line 2854 "pikchr.c"
2801
+#line 2826 "pikchr.c"
28302802
break;
2831
- case 96: /* nth ::= LAST */
2832
-#line 688 "pikchr.y"
2803
+ case 91: /* nth ::= LAST */
2804
+#line 703 "pikchr.y"
28332805
{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2834
-#line 2859 "pikchr.c"
2806
+#line 2831 "pikchr.c"
28352807
yymsp[0].minor.yy0 = yylhsminor.yy0;
28362808
break;
2837
- case 97: /* nth ::= NTH LB RB */
2838
-#line 689 "pikchr.y"
2809
+ case 92: /* nth ::= NTH LB RB */
2810
+#line 704 "pikchr.y"
28392811
{yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2840
-#line 2865 "pikchr.c"
2812
+#line 2837 "pikchr.c"
28412813
yymsp[-2].minor.yy0 = yylhsminor.yy0;
28422814
break;
2843
- case 98: /* nth ::= NTH LAST LB RB */
2844
-#line 690 "pikchr.y"
2815
+ case 93: /* nth ::= NTH LAST LB RB */
2816
+#line 705 "pikchr.y"
28452817
{yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2846
-#line 2871 "pikchr.c"
2818
+#line 2843 "pikchr.c"
28472819
yymsp[-3].minor.yy0 = yylhsminor.yy0;
28482820
break;
2849
- case 99: /* nth ::= LAST LB RB */
2850
-#line 691 "pikchr.y"
2851
-{yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2852
-#line 2877 "pikchr.c"
2853
- break;
2854
- case 100: /* expr ::= expr PLUS expr */
2855
-#line 693 "pikchr.y"
2856
-{yylhsminor.yy149=yymsp[-2].minor.yy149+yymsp[0].minor.yy149;}
2857
-#line 2882 "pikchr.c"
2858
- yymsp[-2].minor.yy149 = yylhsminor.yy149;
2859
- break;
2860
- case 101: /* expr ::= expr MINUS expr */
2861
-#line 694 "pikchr.y"
2862
-{yylhsminor.yy149=yymsp[-2].minor.yy149-yymsp[0].minor.yy149;}
2863
-#line 2888 "pikchr.c"
2864
- yymsp[-2].minor.yy149 = yylhsminor.yy149;
2865
- break;
2866
- case 102: /* expr ::= expr STAR expr */
2867
-#line 695 "pikchr.y"
2868
-{yylhsminor.yy149=yymsp[-2].minor.yy149*yymsp[0].minor.yy149;}
2869
-#line 2894 "pikchr.c"
2870
- yymsp[-2].minor.yy149 = yylhsminor.yy149;
2871
- break;
2872
- case 103: /* expr ::= expr SLASH expr */
2873
-#line 696 "pikchr.y"
2874
-{
2875
- if( yymsp[0].minor.yy149==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy149 = 0.0; }
2876
- else{ yylhsminor.yy149 = yymsp[-2].minor.yy149/yymsp[0].minor.yy149; }
2877
-}
2878
-#line 2903 "pikchr.c"
2879
- yymsp[-2].minor.yy149 = yylhsminor.yy149;
2880
- break;
2881
- case 104: /* expr ::= MINUS expr */
2882
-#line 700 "pikchr.y"
2883
-{yymsp[-1].minor.yy149=-yymsp[0].minor.yy149;}
2884
-#line 2909 "pikchr.c"
2885
- break;
2886
- case 105: /* expr ::= PLUS expr */
2887
-#line 701 "pikchr.y"
2888
-{yymsp[-1].minor.yy149=yymsp[0].minor.yy149;}
2889
-#line 2914 "pikchr.c"
2890
- break;
2891
- case 106: /* expr ::= LP expr RP */
2892
-#line 702 "pikchr.y"
2893
-{yymsp[-2].minor.yy149=yymsp[-1].minor.yy149;}
2894
-#line 2919 "pikchr.c"
2895
- break;
2896
- case 107: /* expr ::= NUMBER */
2897
-#line 703 "pikchr.y"
2898
-{yylhsminor.yy149=pik_atof(p,&yymsp[0].minor.yy0);}
2899
-#line 2924 "pikchr.c"
2900
- yymsp[0].minor.yy149 = yylhsminor.yy149;
2901
- break;
2902
- case 108: /* expr ::= ID */
2903
-#line 704 "pikchr.y"
2904
-{yylhsminor.yy149=pik_get_var(p,&yymsp[0].minor.yy0);}
2905
-#line 2930 "pikchr.c"
2906
- yymsp[0].minor.yy149 = yylhsminor.yy149;
2907
- break;
2908
- case 109: /* expr ::= FUNC1 LP expr RP */
2909
-#line 705 "pikchr.y"
2910
-{yylhsminor.yy149 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy149,0.0);}
2911
-#line 2936 "pikchr.c"
2912
- yymsp[-3].minor.yy149 = yylhsminor.yy149;
2913
- break;
2914
- case 110: /* expr ::= FUNC2 LP expr COMMA expr RP */
2915
-#line 706 "pikchr.y"
2916
-{yylhsminor.yy149 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy149,yymsp[-1].minor.yy149);}
2917
-#line 2942 "pikchr.c"
2918
- yymsp[-5].minor.yy149 = yylhsminor.yy149;
2919
- break;
2920
- case 111: /* expr ::= place2 DOT_XY X */
2921
-#line 707 "pikchr.y"
2922
-{yylhsminor.yy149 = yymsp[-2].minor.yy95.x;}
2923
-#line 2948 "pikchr.c"
2924
- yymsp[-2].minor.yy149 = yylhsminor.yy149;
2925
- break;
2926
- case 112: /* expr ::= place2 DOT_XY Y */
2927
-#line 708 "pikchr.y"
2928
-{yylhsminor.yy149 = yymsp[-2].minor.yy95.y;}
2929
-#line 2954 "pikchr.c"
2930
- yymsp[-2].minor.yy149 = yylhsminor.yy149;
2931
- break;
2932
- case 113: /* expr ::= object DOT_L numproperty */
2933
- case 114: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==114);
2934
- case 115: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==115);
2935
-#line 709 "pikchr.y"
2936
-{yylhsminor.yy149=pik_property_of(p,yymsp[-2].minor.yy58,&yymsp[0].minor.yy0);}
2937
-#line 2962 "pikchr.c"
2938
- yymsp[-2].minor.yy149 = yylhsminor.yy149;
2821
+ case 94: /* nth ::= LAST LB RB */
2822
+#line 706 "pikchr.y"
2823
+{yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2824
+#line 2849 "pikchr.c"
2825
+ break;
2826
+ case 95: /* expr ::= expr PLUS expr */
2827
+#line 708 "pikchr.y"
2828
+{yylhsminor.yy73=yymsp[-2].minor.yy73+yymsp[0].minor.yy73;}
2829
+#line 2854 "pikchr.c"
2830
+ yymsp[-2].minor.yy73 = yylhsminor.yy73;
2831
+ break;
2832
+ case 96: /* expr ::= expr MINUS expr */
2833
+#line 709 "pikchr.y"
2834
+{yylhsminor.yy73=yymsp[-2].minor.yy73-yymsp[0].minor.yy73;}
2835
+#line 2860 "pikchr.c"
2836
+ yymsp[-2].minor.yy73 = yylhsminor.yy73;
2837
+ break;
2838
+ case 97: /* expr ::= expr STAR expr */
2839
+#line 710 "pikchr.y"
2840
+{yylhsminor.yy73=yymsp[-2].minor.yy73*yymsp[0].minor.yy73;}
2841
+#line 2866 "pikchr.c"
2842
+ yymsp[-2].minor.yy73 = yylhsminor.yy73;
2843
+ break;
2844
+ case 98: /* expr ::= expr SLASH expr */
2845
+#line 711 "pikchr.y"
2846
+{
2847
+ if( yymsp[0].minor.yy73==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy73 = 0.0; }
2848
+ else{ yylhsminor.yy73 = yymsp[-2].minor.yy73/yymsp[0].minor.yy73; }
2849
+}
2850
+#line 2875 "pikchr.c"
2851
+ yymsp[-2].minor.yy73 = yylhsminor.yy73;
2852
+ break;
2853
+ case 99: /* expr ::= MINUS expr */
2854
+#line 715 "pikchr.y"
2855
+{yymsp[-1].minor.yy73=-yymsp[0].minor.yy73;}
2856
+#line 2881 "pikchr.c"
2857
+ break;
2858
+ case 100: /* expr ::= PLUS expr */
2859
+#line 716 "pikchr.y"
2860
+{yymsp[-1].minor.yy73=yymsp[0].minor.yy73;}
2861
+#line 2886 "pikchr.c"
2862
+ break;
2863
+ case 101: /* expr ::= LP expr RP */
2864
+#line 717 "pikchr.y"
2865
+{yymsp[-2].minor.yy73=yymsp[-1].minor.yy73;}
2866
+#line 2891 "pikchr.c"
2867
+ break;
2868
+ case 102: /* expr ::= NUMBER */
2869
+#line 718 "pikchr.y"
2870
+{yylhsminor.yy73=pik_atof(p,&yymsp[0].minor.yy0);}
2871
+#line 2896 "pikchr.c"
2872
+ yymsp[0].minor.yy73 = yylhsminor.yy73;
2873
+ break;
2874
+ case 103: /* expr ::= ID */
2875
+#line 719 "pikchr.y"
2876
+{yylhsminor.yy73=pik_get_var(p,&yymsp[0].minor.yy0);}
2877
+#line 2902 "pikchr.c"
2878
+ yymsp[0].minor.yy73 = yylhsminor.yy73;
2879
+ break;
2880
+ case 104: /* expr ::= FUNC1 LP expr RP */
2881
+#line 720 "pikchr.y"
2882
+{yylhsminor.yy73 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy73,0.0);}
2883
+#line 2908 "pikchr.c"
2884
+ yymsp[-3].minor.yy73 = yylhsminor.yy73;
2885
+ break;
2886
+ case 105: /* expr ::= FUNC2 LP expr COMMA expr RP */
2887
+#line 721 "pikchr.y"
2888
+{yylhsminor.yy73 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy73,yymsp[-1].minor.yy73);}
2889
+#line 2914 "pikchr.c"
2890
+ yymsp[-5].minor.yy73 = yylhsminor.yy73;
2891
+ break;
2892
+ case 106: /* expr ::= place2 DOT_XY X */
2893
+#line 722 "pikchr.y"
2894
+{yylhsminor.yy73 = yymsp[-2].minor.yy139.x;}
2895
+#line 2920 "pikchr.c"
2896
+ yymsp[-2].minor.yy73 = yylhsminor.yy73;
2897
+ break;
2898
+ case 107: /* expr ::= place2 DOT_XY Y */
2899
+#line 723 "pikchr.y"
2900
+{yylhsminor.yy73 = yymsp[-2].minor.yy139.y;}
2901
+#line 2926 "pikchr.c"
2902
+ yymsp[-2].minor.yy73 = yylhsminor.yy73;
2903
+ break;
2904
+ case 108: /* expr ::= object DOT_L numproperty */
2905
+ case 109: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==109);
2906
+ case 110: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==110);
2907
+#line 724 "pikchr.y"
2908
+{yylhsminor.yy73=pik_property_of(p,yymsp[-2].minor.yy254,&yymsp[0].minor.yy0);}
2909
+#line 2934 "pikchr.c"
2910
+ yymsp[-2].minor.yy73 = yylhsminor.yy73;
29392911
break;
29402912
default:
2941
- /* (116) lvalue ::= ID */ yytestcase(yyruleno==116);
2942
- /* (117) lvalue ::= FILL */ yytestcase(yyruleno==117);
2943
- /* (118) lvalue ::= COLOR */ yytestcase(yyruleno==118);
2944
- /* (119) lvalue ::= THICKNESS */ yytestcase(yyruleno==119);
2945
- /* (120) rvalue ::= expr */ yytestcase(yyruleno==120);
2946
- /* (121) print ::= PRINT */ yytestcase(yyruleno==121);
2947
- /* (122) prlist ::= pritem (OPTIMIZED OUT) */ assert(yyruleno!=122);
2948
- /* (123) prlist ::= prlist prsep pritem */ yytestcase(yyruleno==123);
2949
- /* (124) direction ::= UP */ yytestcase(yyruleno==124);
2950
- /* (125) direction ::= DOWN */ yytestcase(yyruleno==125);
2951
- /* (126) direction ::= LEFT */ yytestcase(yyruleno==126);
2952
- /* (127) direction ::= RIGHT */ yytestcase(yyruleno==127);
2953
- /* (128) attribute_list ::= alist */ yytestcase(yyruleno==128);
2954
- /* (129) alist ::= */ yytestcase(yyruleno==129);
2955
- /* (130) alist ::= alist attribute */ yytestcase(yyruleno==130);
2956
- /* (131) attribute ::= boolproperty (OPTIMIZED OUT) */ assert(yyruleno!=131);
2957
- /* (132) attribute ::= WITH withclause */ yytestcase(yyruleno==132);
2958
- /* (133) go ::= GO */ yytestcase(yyruleno==133);
2959
- /* (134) go ::= */ yytestcase(yyruleno==134);
2960
- /* (135) even ::= UNTIL EVEN WITH */ yytestcase(yyruleno==135);
2961
- /* (136) even ::= EVEN WITH */ yytestcase(yyruleno==136);
2962
- /* (137) dashproperty ::= DOTTED */ yytestcase(yyruleno==137);
2963
- /* (138) dashproperty ::= DASHED */ yytestcase(yyruleno==138);
2964
- /* (139) colorproperty ::= FILL */ yytestcase(yyruleno==139);
2965
- /* (140) colorproperty ::= COLOR */ yytestcase(yyruleno==140);
2966
- /* (141) position ::= place */ yytestcase(yyruleno==141);
2967
- /* (142) between ::= WAY BETWEEN */ yytestcase(yyruleno==142);
2968
- /* (143) between ::= BETWEEN */ yytestcase(yyruleno==143);
2969
- /* (144) between ::= OF THE WAY BETWEEN */ yytestcase(yyruleno==144);
2970
- /* (145) place ::= place2 */ yytestcase(yyruleno==145);
2971
- /* (146) edge ::= CENTER */ yytestcase(yyruleno==146);
2972
- /* (147) edge ::= EDGEPT */ yytestcase(yyruleno==147);
2973
- /* (148) edge ::= TOP */ yytestcase(yyruleno==148);
2974
- /* (149) edge ::= BOTTOM */ yytestcase(yyruleno==149);
2975
- /* (150) edge ::= START */ yytestcase(yyruleno==150);
2976
- /* (151) edge ::= END */ yytestcase(yyruleno==151);
2977
- /* (152) edge ::= RIGHT */ yytestcase(yyruleno==152);
2978
- /* (153) edge ::= LEFT */ yytestcase(yyruleno==153);
2979
- /* (154) object ::= objectname */ yytestcase(yyruleno==154);
2913
+ /* (111) lvalue ::= ID */ yytestcase(yyruleno==111);
2914
+ /* (112) lvalue ::= FILL */ yytestcase(yyruleno==112);
2915
+ /* (113) lvalue ::= COLOR */ yytestcase(yyruleno==113);
2916
+ /* (114) lvalue ::= THICKNESS */ yytestcase(yyruleno==114);
2917
+ /* (115) rvalue ::= expr */ yytestcase(yyruleno==115);
2918
+ /* (116) print ::= PRINT */ yytestcase(yyruleno==116);
2919
+ /* (117) prlist ::= pritem (OPTIMIZED OUT) */ assert(yyruleno!=117);
2920
+ /* (118) prlist ::= prlist prsep pritem */ yytestcase(yyruleno==118);
2921
+ /* (119) direction ::= UP */ yytestcase(yyruleno==119);
2922
+ /* (120) direction ::= DOWN */ yytestcase(yyruleno==120);
2923
+ /* (121) direction ::= LEFT */ yytestcase(yyruleno==121);
2924
+ /* (122) direction ::= RIGHT */ yytestcase(yyruleno==122);
2925
+ /* (123) optrelexpr ::= relexpr (OPTIMIZED OUT) */ assert(yyruleno!=123);
2926
+ /* (124) attribute_list ::= alist */ yytestcase(yyruleno==124);
2927
+ /* (125) alist ::= */ yytestcase(yyruleno==125);
2928
+ /* (126) alist ::= alist attribute */ yytestcase(yyruleno==126);
2929
+ /* (127) attribute ::= boolproperty (OPTIMIZED OUT) */ assert(yyruleno!=127);
2930
+ /* (128) attribute ::= WITH withclause */ yytestcase(yyruleno==128);
2931
+ /* (129) go ::= GO */ yytestcase(yyruleno==129);
2932
+ /* (130) go ::= */ yytestcase(yyruleno==130);
2933
+ /* (131) even ::= UNTIL EVEN WITH */ yytestcase(yyruleno==131);
2934
+ /* (132) even ::= EVEN WITH */ yytestcase(yyruleno==132);
2935
+ /* (133) dashproperty ::= DOTTED */ yytestcase(yyruleno==133);
2936
+ /* (134) dashproperty ::= DASHED */ yytestcase(yyruleno==134);
2937
+ /* (135) colorproperty ::= FILL */ yytestcase(yyruleno==135);
2938
+ /* (136) colorproperty ::= COLOR */ yytestcase(yyruleno==136);
2939
+ /* (137) position ::= place */ yytestcase(yyruleno==137);
2940
+ /* (138) between ::= WAY BETWEEN */ yytestcase(yyruleno==138);
2941
+ /* (139) between ::= BETWEEN */ yytestcase(yyruleno==139);
2942
+ /* (140) between ::= OF THE WAY BETWEEN */ yytestcase(yyruleno==140);
2943
+ /* (141) place ::= place2 */ yytestcase(yyruleno==141);
2944
+ /* (142) edge ::= CENTER */ yytestcase(yyruleno==142);
2945
+ /* (143) edge ::= EDGEPT */ yytestcase(yyruleno==143);
2946
+ /* (144) edge ::= TOP */ yytestcase(yyruleno==144);
2947
+ /* (145) edge ::= BOTTOM */ yytestcase(yyruleno==145);
2948
+ /* (146) edge ::= START */ yytestcase(yyruleno==146);
2949
+ /* (147) edge ::= END */ yytestcase(yyruleno==147);
2950
+ /* (148) edge ::= RIGHT */ yytestcase(yyruleno==148);
2951
+ /* (149) edge ::= LEFT */ yytestcase(yyruleno==149);
2952
+ /* (150) object ::= objectname */ yytestcase(yyruleno==150);
29802953
break;
29812954
/********** End reduce actions ************************************************/
29822955
};
29832956
assert( yyruleno<sizeof(yyRuleInfoLhs)/sizeof(yyRuleInfoLhs[0]) );
29842957
yygoto = yyRuleInfoLhs[yyruleno];
@@ -3034,18 +3007,18 @@
30343007
){
30353008
pik_parserARG_FETCH
30363009
pik_parserCTX_FETCH
30373010
#define TOKEN yyminor
30383011
/************ Begin %syntax_error code ****************************************/
3039
-#line 472 "pikchr.y"
3012
+#line 491 "pikchr.y"
30403013
30413014
if( TOKEN.z && TOKEN.z[0] ){
30423015
pik_error(p, &TOKEN, "syntax error");
30433016
}else{
30443017
pik_error(p, 0, "syntax error");
30453018
}
3046
-#line 3071 "pikchr.c"
3019
+#line 3044 "pikchr.c"
30473020
/************ End %syntax_error code ******************************************/
30483021
pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
30493022
pik_parserCTX_STORE
30503023
}
30513024
@@ -3274,11 +3247,11 @@
32743247
#else
32753248
(void)iToken;
32763249
return 0;
32773250
#endif
32783251
}
3279
-#line 714 "pikchr.y"
3252
+#line 729 "pikchr.y"
32803253
32813254
32823255
32833256
/* Chart of the 140 official HTML color names with their
32843257
** corresponding RGB value.
@@ -3490,28 +3463,42 @@
34903463
** than true arcs. Multiple reasons: (1) the legacy-PIC parameters
34913464
** that control arcs are obscure and I could not figure out what they
34923465
** mean based on available documentation. (2) Arcs are rarely used,
34933466
** and so do not seem that important.
34943467
*/
3495
-static void arcRender(Pik *p, PElem *pElem){
3468
+static PPoint arcControlPoint(int cw, PPoint f, PPoint t, PNum rScale){
3469
+ PPoint m;
34963470
PNum dx, dy;
3471
+ m.x = 0.5*(f.x+t.x);
3472
+ m.y = 0.5*(f.y+t.y);
3473
+ dx = t.x - f.x;
3474
+ dy = t.y - f.y;
3475
+ if( cw ){
3476
+ m.x -= 0.5*rScale*dy;
3477
+ m.y += 0.5*rScale*dx;
3478
+ }else{
3479
+ m.x += 0.5*rScale*dy;
3480
+ m.y -= 0.5*rScale*dx;
3481
+ }
3482
+ return m;
3483
+}
3484
+static void arcCheck(Pik *p, PElem *pElem){
3485
+ PPoint m;
3486
+ if( p->nTPath>2 ){
3487
+ pik_error(p, &pElem->errTok, "arc geometry error");
3488
+ return;
3489
+ }
3490
+ m = arcControlPoint(pElem->cw, p->aTPath[0], p->aTPath[1], 0.5);
3491
+ pik_bbox_add_xy(&pElem->bbox, m.x, m.y);
3492
+}
3493
+static void arcRender(Pik *p, PElem *pElem){
34973494
PPoint f, m, t;
34983495
if( pElem->nPath<2 ) return;
34993496
if( pElem->sw<=0.0 ) return;
35003497
f = pElem->aPath[0];
35013498
t = pElem->aPath[1];
3502
- m.x = 0.5*(f.x+t.x);
3503
- m.y = 0.5*(f.y+t.y);
3504
- dx = t.x - f.x;
3505
- dy = t.y - f.y;
3506
- if( pElem->cw ){
3507
- m.x -= 0.4*dy;
3508
- m.y += 0.4*dx;
3509
- }else{
3510
- m.x += 0.4*dy;
3511
- m.y -= 0.4*dx;
3512
- }
3499
+ m = arcControlPoint(pElem->cw,f,t,1.0);
35133500
if( pElem->larrow ){
35143501
pik_draw_arrowhead(p,&m,&f,pElem);
35153502
}
35163503
if( pElem->rarrow ){
35173504
pik_draw_arrowhead(p,&m,&t,pElem);
@@ -4078,10 +4065,16 @@
40784065
static void textInit(Pik *p, PElem *pElem){
40794066
pik_value(p, "textwid",7,0);
40804067
pik_value(p, "textht",6,0);
40814068
pElem->sw = 0.0;
40824069
}
4070
+static void textCheck(Pik *p, PElem *pElem){
4071
+ /* Automatically slim-down the width and height of text
4072
+ ** elements so that the bounding box tightly encloses the text */
4073
+ pik_size_to_fit(p, &pElem->errTok);
4074
+}
4075
+
40834076
40844077
/* Methods for the "sublist" class */
40854078
static void sublistInit(Pik *p, PElem *pElem){
40864079
PEList *pList = pElem->pSublist;
40874080
int i;
@@ -4105,10 +4098,11 @@
41054098
{ /* name */ "arc",
41064099
/* isline */ 1,
41074100
/* eJust */ 0,
41084101
/* xInit */ arcInit,
41094102
/* xNumProp */ 0,
4103
+ /* xCheck */ arcCheck,
41104104
/* xChop */ 0,
41114105
/* xOffset */ 0,
41124106
/* xFit */ 0,
41134107
/* xRender */ arcRender
41144108
},
@@ -4115,10 +4109,11 @@
41154109
{ /* name */ "arrow",
41164110
/* isline */ 1,
41174111
/* eJust */ 0,
41184112
/* xInit */ arrowInit,
41194113
/* xNumProp */ 0,
4114
+ /* xCheck */ 0,
41204115
/* xChop */ 0,
41214116
/* xOffset */ lineOffset,
41224117
/* xFit */ 0,
41234118
/* xRender */ splineRender
41244119
},
@@ -4125,10 +4120,11 @@
41254120
{ /* name */ "box",
41264121
/* isline */ 0,
41274122
/* eJust */ 1,
41284123
/* xInit */ boxInit,
41294124
/* xNumProp */ 0,
4125
+ /* xCheck */ 0,
41304126
/* xChop */ boxChop,
41314127
/* xOffset */ boxOffset,
41324128
/* xFit */ boxFit,
41334129
/* xRender */ boxRender
41344130
},
@@ -4135,10 +4131,11 @@
41354131
{ /* name */ "circle",
41364132
/* isline */ 0,
41374133
/* eJust */ 0,
41384134
/* xInit */ circleInit,
41394135
/* xNumProp */ circleNumProp,
4136
+ /* xCheck */ 0,
41404137
/* xChop */ circleChop,
41414138
/* xOffset */ ellipseOffset,
41424139
/* xFit */ circleFit,
41434140
/* xRender */ circleRender
41444141
},
@@ -4145,10 +4142,11 @@
41454142
{ /* name */ "cylinder",
41464143
/* isline */ 0,
41474144
/* eJust */ 1,
41484145
/* xInit */ cylinderInit,
41494146
/* xNumProp */ 0,
4147
+ /* xCheck */ 0,
41504148
/* xChop */ boxChop,
41514149
/* xOffset */ cylinderOffset,
41524150
/* xFit */ 0,
41534151
/* xRender */ cylinderRender
41544152
},
@@ -4155,10 +4153,11 @@
41554153
{ /* name */ "dot",
41564154
/* isline */ 0,
41574155
/* eJust */ 0,
41584156
/* xInit */ dotInit,
41594157
/* xNumProp */ dotNumProp,
4158
+ /* xCheck */ 0,
41604159
/* xChop */ circleChop,
41614160
/* xOffset */ ellipseOffset,
41624161
/* xFit */ 0,
41634162
/* xRender */ dotRender
41644163
},
@@ -4165,10 +4164,11 @@
41654164
{ /* name */ "ellipse",
41664165
/* isline */ 0,
41674166
/* eJust */ 0,
41684167
/* xInit */ ellipseInit,
41694168
/* xNumProp */ 0,
4169
+ /* xCheck */ 0,
41704170
/* xChop */ ellipseChop,
41714171
/* xOffset */ ellipseOffset,
41724172
/* xFit */ 0,
41734173
/* xRender */ ellipseRender
41744174
},
@@ -4175,10 +4175,11 @@
41754175
{ /* name */ "file",
41764176
/* isline */ 0,
41774177
/* eJust */ 1,
41784178
/* xInit */ fileInit,
41794179
/* xNumProp */ 0,
4180
+ /* xCheck */ 0,
41804181
/* xChop */ boxChop,
41814182
/* xOffset */ fileOffset,
41824183
/* xFit */ fileFit,
41834184
/* xRender */ fileRender
41844185
},
@@ -4185,10 +4186,11 @@
41854186
{ /* name */ "line",
41864187
/* isline */ 1,
41874188
/* eJust */ 0,
41884189
/* xInit */ lineInit,
41894190
/* xNumProp */ 0,
4191
+ /* xCheck */ 0,
41904192
/* xChop */ 0,
41914193
/* xOffset */ lineOffset,
41924194
/* xFit */ 0,
41934195
/* xRender */ splineRender
41944196
},
@@ -4195,10 +4197,11 @@
41954197
{ /* name */ "move",
41964198
/* isline */ 1,
41974199
/* eJust */ 0,
41984200
/* xInit */ moveInit,
41994201
/* xNumProp */ 0,
4202
+ /* xCheck */ 0,
42004203
/* xChop */ 0,
42014204
/* xOffset */ 0,
42024205
/* xFit */ 0,
42034206
/* xRender */ moveRender
42044207
},
@@ -4205,10 +4208,11 @@
42054208
{ /* name */ "oval",
42064209
/* isline */ 0,
42074210
/* eJust */ 1,
42084211
/* xInit */ ovalInit,
42094212
/* xNumProp */ ovalNumProp,
4213
+ /* xCheck */ 0,
42104214
/* xChop */ boxChop,
42114215
/* xOffset */ boxOffset,
42124216
/* xFit */ ovalFit,
42134217
/* xRender */ boxRender
42144218
},
@@ -4215,10 +4219,11 @@
42154219
{ /* name */ "spline",
42164220
/* isline */ 1,
42174221
/* eJust */ 0,
42184222
/* xInit */ splineInit,
42194223
/* xNumProp */ 0,
4224
+ /* xCheck */ 0,
42204225
/* xChop */ 0,
42214226
/* xOffset */ lineOffset,
42224227
/* xFit */ 0,
42234228
/* xRender */ splineRender
42244229
},
@@ -4225,10 +4230,11 @@
42254230
{ /* name */ "text",
42264231
/* isline */ 0,
42274232
/* eJust */ 0,
42284233
/* xInit */ textInit,
42294234
/* xNumProp */ 0,
4235
+ /* xCheck */ textCheck,
42304236
/* xChop */ boxChop,
42314237
/* xOffset */ boxOffset,
42324238
/* xFit */ boxFit,
42334239
/* xRender */ boxRender
42344240
},
@@ -4237,10 +4243,11 @@
42374243
{ /* name */ "[]",
42384244
/* isline */ 0,
42394245
/* eJust */ 0,
42404246
/* xInit */ sublistInit,
42414247
/* xNumProp */ 0,
4248
+ /* xCheck */ 0,
42424249
/* xChop */ 0,
42434250
/* xOffset */ 0,
42444251
/* xFit */ 0,
42454252
/* xRender */ 0
42464253
};
@@ -4248,10 +4255,11 @@
42484255
{ /* name */ "noop",
42494256
/* isline */ 0,
42504257
/* eJust */ 0,
42514258
/* xInit */ 0,
42524259
/* xNumProp */ 0,
4260
+ /* xCheck */ 0,
42534261
/* xChop */ 0,
42544262
/* xOffset */ 0,
42554263
/* xFit */ 0,
42564264
/* xRender */ 0
42574265
};
@@ -5117,56 +5125,53 @@
51175125
** Set a numeric property like "width 7" or "radius 200%".
51185126
**
51195127
** The rAbs term is an absolute value to add in. rRel is
51205128
** a relative value by which to change the current value.
51215129
*/
5122
-void pik_set_numprop(Pik *p, PToken *pId, PNum rAbs, PNum rRel){
5130
+void pik_set_numprop(Pik *p, PToken *pId, PRel *pVal){
51235131
PElem *pElem = p->cur;
51245132
switch( pId->eType ){
51255133
case T_HEIGHT:
51265134
if( pik_param_ok(p, pElem, pId, A_HEIGHT, A_BOTTOM|A_TOP|A_AT) ) return;
5127
- pElem->h = pElem->h*rRel + rAbs;
5128
- break;
5129
- case T_TOP:
5130
- if( pik_param_ok(p, pElem, pId, A_TOP, A_BOTTOM|A_WIDTH|A_AT) ) return;
5131
- pElem->top = rAbs;
5132
- break;
5133
- case T_BOTTOM:
5134
- if( pik_param_ok(p, pElem, pId, A_BOTTOM, A_TOP|A_WIDTH|A_AT) ) return;
5135
- pElem->bottom = rAbs;
5135
+ pElem->h = pElem->h*pVal->rRel + pVal->rAbs;
51365136
break;
51375137
case T_WIDTH:
51385138
if( pik_param_ok(p, pElem, pId, A_WIDTH, A_RIGHT|A_LEFT|A_AT) ) return;
5139
- pElem->w = pElem->w*rRel + rAbs;
5140
- break;
5141
- case T_RIGHT:
5142
- if( pik_param_ok(p, pElem, pId, A_RIGHT, A_WIDTH|A_LEFT|A_AT) ) return;
5143
- pElem->right = rAbs;
5144
- break;
5145
- case T_LEFT:
5146
- if( pik_param_ok(p, pElem, pId, A_LEFT, A_WIDTH|A_RIGHT|A_AT) ) return;
5147
- pElem->left = rAbs;
5139
+ pElem->w = pElem->w*pVal->rRel + pVal->rAbs;
51485140
break;
51495141
case T_RADIUS:
51505142
if( pik_param_ok(p, pElem, pId, A_RADIUS, 0) ) return;
5151
- pElem->rad = pElem->rad*rRel + rAbs;
5143
+ pElem->rad = pElem->rad*pVal->rRel + pVal->rAbs;
51525144
break;
51535145
case T_DIAMETER:
51545146
if( pik_param_ok(p, pElem, pId, A_RADIUS, 0) ) return;
5155
- pElem->rad = pElem->rad*rRel + 0.5*rAbs; /* diam it 2x radius */
5147
+ pElem->rad = pElem->rad*pVal->rRel + 0.5*pVal->rAbs; /* diam it 2x rad */
51565148
break;
51575149
case T_THICKNESS:
51585150
if( pik_param_ok(p, pElem, pId, A_THICKNESS, 0) ) return;
5159
- pElem->sw = pElem->sw*rRel + rAbs;
5151
+ pElem->sw = pElem->sw*pVal->rRel + pVal->rAbs;
51605152
break;
5153
+ }
5154
+ if( pElem->type->xNumProp ){
5155
+ pElem->type->xNumProp(p, pElem, pId);
5156
+ }
5157
+ return;
5158
+}
5159
+
5160
+/*
5161
+** Set a color property. The argument is an RGB value.
5162
+*/
5163
+void pik_set_clrprop(Pik *p, PToken *pId, PNum rClr){
5164
+ PElem *pElem = p->cur;
5165
+ switch( pId->eType ){
51615166
case T_FILL:
51625167
if( pik_param_ok(p, pElem, pId, A_FILL, 0) ) return;
5163
- pElem->fill = rAbs;
5168
+ pElem->fill = rClr;
51645169
break;
51655170
case T_COLOR:
51665171
if( pik_param_ok(p, pElem, pId, A_COLOR, 0) ) return;
5167
- pElem->color = rAbs;
5172
+ pElem->color = rClr;
51685173
break;
51695174
}
51705175
if( pElem->type->xNumProp ){
51715176
pElem->type->xNumProp(p, pElem, pId);
51725177
}
@@ -5231,75 +5236,50 @@
52315236
p->mTPath = 0;
52325237
return n;
52335238
}
52345239
52355240
/* Add a direction term to an element. "up 0.5", or "left 3", or "down"
5236
-** or "down to 1.3". Specific processing depends on parameters:
5237
-**
5238
-** pVal==0 Add the default width or height to the coordinate.
5239
-** Used to implement "down" and similar.
5240
-**
5241
-** rel==0 Add or subtract *pVal to the path coordinate. Used to
5242
-** implement "up 0.5" and similar.
5243
-**
5244
-** rel==1 Multiple 0.01*pVal with the width or height (as appropriate)
5245
-** and add that to the coordinate. Used for "left 50%" and
5246
-** similar.
5247
-**
5248
-** rel==2 Make the coordinate exactly equal to *pVal. Used to
5249
-** implement things like "down to 1.3".
5241
+** or "down 50%".
52505242
*/
5251
-static void pik_add_direction(Pik *p, PToken *pDir, PNum *pVal, int rel){
5243
+static void pik_add_direction(Pik *p, PToken *pDir, PRel *pVal){
52525244
PElem *pElem = p->cur;
52535245
int n;
52545246
int dir;
5255
- PNum scale = 1.0;
52565247
if( !pElem->type->isLine ){
52575248
if( pDir ){
52585249
pik_error(p, pDir, "use with line-oriented objects only");
52595250
}else{
52605251
PToken x = pik_next_semantic_token(p, &pElem->errTok);
52615252
pik_error(p, &x, "syntax error");
52625253
}
52635254
return;
52645255
}
5265
- if( pVal && rel==1 ){
5266
- scale = *pVal/100;
5267
- pVal = 0;
5268
- }
5269
- if( rel==2 ){
5270
- pElem->mProp |= A_FROM;
5271
- }
52725256
n = p->nTPath - 1;
52735257
if( p->thenFlag || p->mTPath==3 || n==0 ){
52745258
n = pik_next_rpath(p, pDir);
52755259
p->thenFlag = 0;
52765260
}
52775261
dir = pDir ? pDir->eCode : p->eDir;
52785262
switch( dir ){
52795263
case DIR_UP:
52805264
if( p->mTPath & 2 ) n = pik_next_rpath(p, pDir);
5281
- if( rel==2 ) p->aTPath[n].y = 0;
5282
- p->aTPath[n].y += (pVal ? *pVal : pElem->h*scale);
5265
+ p->aTPath[n].y += pVal->rAbs + pElem->h*pVal->rRel;
52835266
p->mTPath |= 2;
52845267
break;
52855268
case DIR_DOWN:
52865269
if( p->mTPath & 2 ) n = pik_next_rpath(p, pDir);
5287
- if( rel==2 ) p->aTPath[n].y = 0;
5288
- p->aTPath[n].y -= (pVal ? *pVal : pElem->h*scale);
5270
+ p->aTPath[n].y -= pVal->rAbs + pElem->h*pVal->rRel;
52895271
p->mTPath |= 2;
52905272
break;
52915273
case DIR_RIGHT:
52925274
if( p->mTPath & 1 ) n = pik_next_rpath(p, pDir);
5293
- if( rel==2 ) p->aTPath[n].x = 0;
5294
- p->aTPath[n].x += (pVal ? *pVal : pElem->w*scale);
5275
+ p->aTPath[n].x += pVal->rAbs + pElem->w*pVal->rRel;
52955276
p->mTPath |= 1;
52965277
break;
52975278
case DIR_LEFT:
52985279
if( p->mTPath & 1 ) n = pik_next_rpath(p, pDir);
5299
- if( rel==2 ) p->aTPath[n].x = 0;
5300
- p->aTPath[n].x -= (pVal ? *pVal : pElem->w*scale);
5280
+ p->aTPath[n].x -= pVal->rAbs + pElem->w*pVal->rRel;
53015281
p->mTPath |= 1;
53025282
break;
53035283
}
53045284
pElem->outDir = dir;
53055285
}
@@ -5306,34 +5286,27 @@
53065286
53075287
/* Process a movement attribute of one of these forms:
53085288
**
53095289
** pDist pHdgKW rHdg pEdgept
53105290
** GO distance HEADING angle
5311
-** GO HEADING angle
53125291
** GO distance compasspoint
5313
-** GO compasspoint
53145292
*/
53155293
static void pik_move_hdg(
53165294
Pik *p, /* The Pikchr context */
5317
- PNum *pDist, /* Distance to move. NULL means standard distance */
5295
+ PRel *pDist, /* Distance to move */
53185296
PToken *pHeading, /* "heading" keyword if present */
53195297
PNum rHdg, /* Angle argument to "heading" keyword */
53205298
PToken *pEdgept, /* EDGEPT keyword "ne", "sw", etc... */
53215299
PToken *pErr /* Token to use for error messages */
53225300
){
53235301
PElem *pElem = p->cur;
53245302
int n;
5325
- PNum rDist;
5303
+ PNum rDist = pDist->rAbs + pik_value(p,"linewid",7,0)*pDist->rRel;
53265304
if( !pElem->type->isLine ){
53275305
pik_error(p, pErr, "use with line-oriented objects only");
53285306
return;
53295307
}
5330
- if( pDist ){
5331
- rDist = *pDist;
5332
- }else{
5333
- rDist = pik_value(p, "linewid", 7, 0);
5334
- }
53355308
do{
53365309
n = pik_next_rpath(p, pErr);
53375310
}while( n<1 );
53385311
if( pHeading ){
53395312
if( rHdg<0.0 || rHdg>360.0 ){
@@ -6124,11 +6097,11 @@
61246097
default: p->aTPath[1].x += pElem->w; break;
61256098
case DIR_DOWN: p->aTPath[1].y -= pElem->h; break;
61266099
case DIR_LEFT: p->aTPath[1].x -= pElem->w; break;
61276100
case DIR_UP: p->aTPath[1].y += pElem->h; break;
61286101
}
6129
- if( strcmp(pElem->type->zName,"arc")==0 ){
6102
+ if( pElem->type->xInit==arcInit ){
61306103
p->eDir = pElem->outDir = (pElem->inDir + (pElem->cw ? 1 : 3))%4;
61316104
switch( pElem->outDir ){
61326105
default: p->aTPath[1].x += pElem->w; break;
61336106
case DIR_DOWN: p->aTPath[1].y -= pElem->h; break;
61346107
case DIR_LEFT: p->aTPath[1].x -= pElem->w; break;
@@ -6135,19 +6108,22 @@
61356108
case DIR_UP: p->aTPath[1].y += pElem->h; break;
61366109
}
61376110
}
61386111
}
61396112
6140
- /* Run "fit" on the text type automatically */
6141
- if( pElem->type->xInit==textInit && pElem->nTxt ){
6142
- pik_size_to_fit(p, &pElem->errTok);
6113
+ /* Initialize the bounding box prior to running xCheck */
6114
+ pik_bbox_init(&pElem->bbox);
6115
+
6116
+ /* Run object-specific code */
6117
+ if( pElem->type->xCheck!=0 ){
6118
+ pElem->type->xCheck(p,pElem);
6119
+ if( p->nErr ) return;
61436120
}
61446121
61456122
/* Compute final bounding box, entry and exit points, center
61466123
** point (ptAt) and path for the element
61476124
*/
6148
- pik_bbox_init(&pElem->bbox);
61496125
if( pElem->type->isLine ){
61506126
pElem->aPath = malloc( sizeof(PPoint)*p->nTPath );
61516127
if( pElem->aPath==0 ){
61526128
pik_error(p, 0, 0);
61536129
pElem->nPath = 0;
@@ -6996,6 +6972,6 @@
69966972
printf("</body></html>\n");
69976973
return 0;
69986974
}
69996975
#endif /* PIKCHR_SHELL */
70006976
7001
-#line 7026 "pikchr.c"
6977
+#line 7002 "pikchr.c"
70026978
--- src/pikchr.c
+++ src/pikchr.c
@@ -131,10 +131,11 @@
131 typedef struct PToken PToken; /* A single token */
132 typedef struct PElem PElem; /* A single diagram object or "element" */
133 typedef struct PEList PEList; /* A list of elements */
134 typedef struct PClass PClass; /* Description of elements types */
135 typedef double PNum; /* Numeric value */
 
136 typedef struct PPoint PPoint; /* A position in 2-D space */
137 typedef struct PVar PVar; /* script-defined variable */
138 typedef struct PBox PBox; /* A bounding box */
139
140 /* Compass points */
@@ -198,10 +199,24 @@
198
199 /* A bounding box */
200 struct PBox {
201 PPoint sw, ne; /* Lower-left and top-right corners */
202 };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
203
204 /* A variable created by the ID = EXPR construct of the PIKCHR script
205 **
206 ** PIKCHR (and PIC) scripts do not use many varaibles, so it is reasonable
207 ** to store them all on a linked list.
@@ -351,14 +366,15 @@
351 */
352 struct PClass {
353 const char *zName; /* Name of class */
354 char isLine; /* True if a line class */
355 char eJust; /* Use box-style text justification */
356 void (*xInit)(Pik*,PElem*); /* Initializer */
357 void (*xNumProp)(Pik*,PElem*,PToken*); /* Value change notification */
358 PPoint (*xChop)(PElem*,PPoint*); /* Chopper */
359 PPoint (*xOffset)(Pik*,PElem*,int); /* Offset from center to edge point */
 
360 void (*xFit)(Pik*,PElem*,PNum w,PNum h); /* Size to fit text */
361 void (*xRender)(Pik*,PElem*); /* Render */
362 };
363
364
@@ -391,15 +407,16 @@
391 static PNum pik_get_var(Pik*,PToken*);
392 static PNum pik_atof(Pik*,PToken*);
393 static void pik_after_adding_attributes(Pik*,PElem*);
394 static void pik_elem_move(PElem*,PNum dx, PNum dy);
395 static void pik_elist_move(PEList*,PNum dx, PNum dy);
396 static void pik_set_numprop(Pik*,PToken*,PNum,PNum);
 
397 static void pik_set_dashed(Pik*,PToken*,PNum*);
398 static void pik_then(Pik*,PToken*,PElem*);
399 static void pik_add_direction(Pik*,PToken*,PNum*,int);
400 static void pik_move_hdg(Pik*,PNum*,PToken*,PNum,PToken*,PToken*);
401 static void pik_evenwith(Pik*,PToken*,PPoint*);
402 static void pik_set_from(Pik*,PElem*,PToken*,PPoint*);
403 static void pik_add_to(Pik*,PElem*,PToken*,PPoint*);
404 static void pik_close_path(Pik*,PToken*);
405 static void pik_set_at(Pik*,PToken*,PPoint*,PToken*);
@@ -428,11 +445,11 @@
428 static void pik_behind(Pik*,PElem*);
429 static PElem *pik_assert(Pik*,PNum,PToken*,PNum);
430 static PElem *pik_place_assert(Pik*,PPoint*,PToken*,PPoint*);
431
432
433 #line 459 "pikchr.c"
434 /**************** End of %include directives **********************************/
435 /* These constants specify the various numeric values for terminal symbols.
436 ***************** Begin token definitions *************************************/
437 #ifndef T_ID
438 #define T_ID 1
@@ -585,21 +602,22 @@
585 #ifndef INTERFACE
586 # define INTERFACE 1
587 #endif
588 /************* Begin control #defines *****************************************/
589 #define YYCODETYPE unsigned char
590 #define YYNOCODE 128
591 #define YYACTIONTYPE unsigned short int
592 #define pik_parserTOKENTYPE PToken
593 typedef union {
594 int yyinit;
595 pik_parserTOKENTYPE yy0;
596 PEList* yy52;
597 PElem* yy58;
598 int yy92;
599 PPoint yy95;
600 PNum yy149;
 
601 } YYMINORTYPE;
602 #ifndef YYSTACKDEPTH
603 #define YYSTACKDEPTH 100
604 #endif
605 #define pik_parserARG_SDECL
@@ -611,22 +629,22 @@
611 #define pik_parserCTX_PDECL ,Pik *p
612 #define pik_parserCTX_PARAM ,p
613 #define pik_parserCTX_FETCH Pik *p=yypParser->p;
614 #define pik_parserCTX_STORE yypParser->p=p;
615 #define YYFALLBACK 1
616 #define YYNSTATE 164
617 #define YYNRULE 155
618 #define YYNRULE_WITH_ACTION 116
619 #define YYNTOKEN 94
620 #define YY_MAX_SHIFT 163
621 #define YY_MIN_SHIFTREDUCE 283
622 #define YY_MAX_SHIFTREDUCE 437
623 #define YY_ERROR_ACTION 438
624 #define YY_ACCEPT_ACTION 439
625 #define YY_NO_ACTION 440
626 #define YY_MIN_REDUCE 441
627 #define YY_MAX_REDUCE 595
628 /************* End control #defines *******************************************/
629 #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
630
631 /* Define the yytestcase() macro to be a no-op if is not already defined
632 ** otherwise.
@@ -689,333 +707,308 @@
689 ** yy_reduce_ofst[] For each state, the offset into yy_action for
690 ** shifting non-terminals after a reduce.
691 ** yy_default[] Default action for each state.
692 **
693 *********** Begin parsing tables **********************************************/
694 #define YY_ACTTAB_COUNT (1270)
695 static const YYACTIONTYPE yy_action[] = {
696 /* 0 */ 569, 554, 441, 21, 555, 556, 116, 442, 449, 27,
697 /* 10 */ 569, 132, 31, 445, 65, 64, 63, 62, 422, 423,
698 /* 20 */ 339, 70, 83, 374, 163, 133, 569, 23, 494, 161,
699 /* 30 */ 124, 318, 319, 6, 5, 37, 573, 36, 4, 72,
700 /* 40 */ 131, 55, 335, 67, 54, 34, 430, 339, 339, 339,
701 /* 50 */ 339, 420, 421, 340, 341, 342, 343, 344, 345, 346,
702 /* 60 */ 347, 466, 31, 528, 571, 78, 571, 407, 408, 409,
703 /* 70 */ 410, 466, 30, 436, 435, 491, 161, 124, 305, 422,
704 /* 80 */ 423, 339, 356, 83, 526, 161, 124, 466, 8, 115,
705 /* 90 */ 75, 32, 318, 319, 6, 5, 37, 122, 36, 4,
706 /* 100 */ 72, 131, 70, 335, 67, 429, 52, 48, 339, 339,
707 /* 110 */ 339, 339, 420, 421, 340, 341, 342, 343, 344, 345,
708 /* 120 */ 346, 347, 465, 301, 431, 432, 433, 434, 26, 443,
709 /* 130 */ 449, 27, 465, 25, 329, 445, 65, 64, 63, 62,
710 /* 140 */ 422, 423, 339, 84, 83, 29, 163, 85, 465, 23,
711 /* 150 */ 531, 161, 124, 318, 319, 6, 5, 37, 76, 36,
712 /* 160 */ 4, 72, 131, 76, 335, 67, 394, 395, 42, 339,
713 /* 170 */ 339, 339, 339, 420, 421, 340, 341, 342, 343, 344,
714 /* 180 */ 345, 346, 347, 391, 430, 294, 60, 61, 65, 64,
715 /* 190 */ 63, 62, 82, 33, 374, 63, 62, 20, 24, 391,
716 /* 200 */ 430, 68, 60, 61, 81, 66, 303, 80, 2, 3,
717 /* 210 */ 374, 436, 435, 20, 419, 349, 349, 349, 349, 349,
718 /* 220 */ 349, 349, 349, 349, 349, 114, 418, 436, 435, 399,
719 /* 230 */ 529, 161, 124, 135, 125, 161, 124, 355, 457, 427,
720 /* 240 */ 153, 140, 130, 429, 564, 7, 400, 401, 402, 404,
721 /* 250 */ 81, 139, 303, 80, 154, 407, 408, 409, 410, 429,
722 /* 260 */ 113, 425, 431, 432, 433, 434, 149, 9, 122, 390,
723 /* 270 */ 156, 155, 128, 127, 161, 124, 113, 11, 431, 432,
724 /* 280 */ 433, 434, 378, 157, 122, 390, 156, 155, 391, 430,
725 /* 290 */ 39, 60, 61, 128, 377, 159, 447, 27, 74, 374,
726 /* 300 */ 149, 13, 59, 14, 119, 448, 118, 125, 161, 124,
727 /* 310 */ 15, 126, 442, 449, 27, 69, 436, 435, 445, 143,
728 /* 320 */ 141, 65, 64, 63, 62, 376, 158, 150, 358, 163,
729 /* 330 */ 57, 439, 23, 86, 389, 1, 65, 64, 63, 62,
730 /* 340 */ 53, 18, 125, 161, 124, 58, 148, 147, 429, 389,
731 /* 350 */ 382, 380, 381, 38, 375, 45, 143, 141, 65, 64,
732 /* 360 */ 63, 62, 154, 376, 158, 113, 160, 431, 432, 433,
733 /* 370 */ 434, 440, 71, 122, 390, 156, 155, 53, 35, 440,
734 /* 380 */ 162, 17, 16, 148, 147, 440, 440, 123, 440, 19,
735 /* 390 */ 38, 146, 142, 426, 391, 440, 440, 60, 61, 65,
736 /* 400 */ 64, 63, 62, 314, 440, 112, 532, 440, 59, 440,
737 /* 410 */ 440, 296, 297, 298, 440, 300, 440, 440, 17, 16,
738 /* 420 */ 391, 440, 440, 60, 61, 123, 19, 440, 146, 142,
739 /* 430 */ 426, 374, 391, 330, 59, 60, 61, 391, 326, 440,
740 /* 440 */ 60, 61, 440, 374, 440, 532, 59, 440, 374, 440,
741 /* 450 */ 532, 59, 440, 532, 440, 440, 422, 423, 339, 440,
742 /* 460 */ 440, 440, 440, 136, 134, 440, 87, 41, 440, 440,
743 /* 470 */ 440, 113, 43, 440, 430, 125, 161, 124, 440, 122,
744 /* 480 */ 390, 156, 155, 98, 374, 339, 339, 339, 339, 420,
745 /* 490 */ 421, 440, 125, 161, 124, 154, 440, 113, 22, 440,
746 /* 500 */ 440, 436, 435, 440, 440, 122, 390, 156, 155, 113,
747 /* 510 */ 440, 440, 154, 440, 113, 440, 440, 122, 390, 156,
748 /* 520 */ 155, 440, 122, 390, 156, 155, 391, 144, 440, 60,
749 /* 530 */ 61, 391, 145, 429, 60, 61, 440, 374, 440, 440,
750 /* 540 */ 59, 440, 374, 440, 440, 59, 440, 440, 440, 440,
751 /* 550 */ 113, 440, 431, 432, 433, 434, 391, 440, 122, 60,
752 /* 560 */ 61, 391, 440, 440, 60, 61, 440, 374, 440, 440,
753 /* 570 */ 59, 440, 112, 440, 391, 59, 440, 60, 61, 391,
754 /* 580 */ 440, 440, 60, 61, 440, 374, 114, 440, 46, 440,
755 /* 590 */ 374, 92, 440, 50, 440, 125, 161, 124, 440, 457,
756 /* 600 */ 125, 161, 124, 113, 79, 79, 440, 440, 113, 440,
757 /* 610 */ 440, 122, 390, 156, 155, 154, 122, 390, 156, 155,
758 /* 620 */ 154, 74, 440, 149, 440, 440, 114, 440, 496, 118,
759 /* 630 */ 125, 161, 124, 113, 440, 125, 161, 124, 113, 471,
760 /* 640 */ 440, 122, 390, 156, 155, 430, 122, 390, 156, 155,
761 /* 650 */ 150, 113, 440, 440, 440, 154, 113, 440, 440, 122,
762 /* 660 */ 390, 156, 155, 440, 122, 390, 156, 155, 440, 74,
763 /* 670 */ 440, 149, 436, 435, 440, 440, 495, 118, 125, 161,
764 /* 680 */ 124, 74, 440, 149, 114, 440, 440, 440, 489, 118,
765 /* 690 */ 125, 161, 124, 125, 161, 124, 440, 446, 150, 65,
766 /* 700 */ 64, 63, 62, 440, 429, 440, 440, 74, 440, 149,
767 /* 710 */ 150, 440, 293, 154, 479, 118, 125, 161, 124, 440,
768 /* 720 */ 74, 440, 149, 431, 432, 433, 434, 478, 118, 125,
769 /* 730 */ 161, 124, 74, 440, 149, 440, 150, 440, 440, 515,
770 /* 740 */ 118, 125, 161, 124, 440, 74, 440, 149, 440, 150,
771 /* 750 */ 440, 440, 138, 118, 125, 161, 124, 440, 74, 440,
772 /* 760 */ 149, 150, 440, 440, 440, 523, 118, 125, 161, 124,
773 /* 770 */ 74, 440, 149, 440, 150, 440, 440, 525, 118, 125,
774 /* 780 */ 161, 124, 74, 440, 149, 440, 440, 150, 440, 522,
775 /* 790 */ 118, 125, 161, 124, 93, 65, 64, 63, 62, 150,
776 /* 800 */ 440, 440, 440, 125, 161, 124, 74, 40, 149, 440,
777 /* 810 */ 440, 150, 440, 524, 118, 125, 161, 124, 440, 74,
778 /* 820 */ 440, 149, 440, 154, 440, 440, 521, 118, 125, 161,
779 /* 830 */ 124, 74, 440, 149, 440, 150, 440, 440, 520, 118,
780 /* 840 */ 125, 161, 124, 440, 74, 440, 149, 440, 150, 440,
781 /* 850 */ 440, 519, 118, 125, 161, 124, 440, 74, 440, 149,
782 /* 860 */ 150, 440, 440, 440, 518, 118, 125, 161, 124, 74,
783 /* 870 */ 440, 149, 440, 150, 440, 440, 517, 118, 125, 161,
784 /* 880 */ 124, 74, 440, 149, 440, 440, 150, 440, 151, 118,
785 /* 890 */ 125, 161, 124, 90, 65, 64, 63, 62, 150, 440,
786 /* 900 */ 440, 440, 125, 161, 124, 74, 440, 149, 440, 440,
787 /* 910 */ 150, 440, 152, 118, 125, 161, 124, 440, 73, 440,
788 /* 920 */ 149, 440, 154, 10, 440, 117, 118, 125, 161, 124,
789 /* 930 */ 74, 440, 149, 440, 150, 440, 440, 137, 118, 125,
790 /* 940 */ 161, 124, 440, 74, 440, 149, 440, 150, 440, 440,
791 /* 950 */ 475, 118, 125, 161, 124, 440, 91, 440, 149, 150,
792 /* 960 */ 440, 440, 440, 440, 129, 125, 161, 124, 77, 440,
793 /* 970 */ 440, 325, 150, 65, 64, 63, 62, 125, 161, 124,
794 /* 980 */ 65, 64, 63, 62, 440, 150, 440, 440, 440, 460,
795 /* 990 */ 440, 28, 104, 389, 440, 440, 440, 154, 440, 49,
796 /* 1000 */ 440, 125, 161, 124, 105, 44, 440, 440, 440, 106,
797 /* 1010 */ 440, 440, 440, 125, 161, 124, 440, 107, 125, 161,
798 /* 1020 */ 124, 154, 440, 440, 440, 94, 125, 161, 124, 440,
799 /* 1030 */ 440, 88, 440, 154, 125, 161, 124, 440, 154, 108,
800 /* 1040 */ 125, 161, 124, 440, 440, 440, 154, 440, 125, 161,
801 /* 1050 */ 124, 440, 95, 440, 154, 96, 440, 440, 440, 440,
802 /* 1060 */ 154, 125, 161, 124, 125, 161, 124, 440, 154, 65,
803 /* 1070 */ 64, 63, 62, 440, 440, 440, 89, 440, 440, 109,
804 /* 1080 */ 440, 154, 97, 440, 154, 125, 161, 124, 125, 161,
805 /* 1090 */ 124, 125, 161, 124, 65, 64, 63, 62, 12, 65,
806 /* 1100 */ 64, 63, 62, 110, 440, 154, 440, 354, 154, 440,
807 /* 1110 */ 440, 154, 125, 161, 124, 440, 111, 440, 47, 99,
808 /* 1120 */ 440, 440, 440, 440, 100, 125, 161, 124, 125, 161,
809 /* 1130 */ 124, 440, 154, 125, 161, 124, 440, 440, 440, 440,
810 /* 1140 */ 101, 440, 440, 440, 440, 154, 440, 102, 154, 125,
811 /* 1150 */ 161, 124, 440, 154, 103, 440, 125, 161, 124, 440,
812 /* 1160 */ 440, 546, 440, 125, 161, 124, 440, 440, 440, 154,
813 /* 1170 */ 125, 161, 124, 440, 440, 545, 154, 440, 544, 440,
814 /* 1180 */ 440, 440, 440, 154, 125, 161, 124, 125, 161, 124,
815 /* 1190 */ 154, 543, 65, 64, 63, 62, 65, 64, 63, 62,
816 /* 1200 */ 125, 161, 124, 440, 154, 353, 440, 154, 440, 393,
817 /* 1210 */ 440, 440, 120, 440, 440, 121, 440, 440, 440, 440,
818 /* 1220 */ 154, 125, 161, 124, 125, 161, 124, 65, 64, 63,
819 /* 1230 */ 62, 65, 64, 63, 62, 309, 65, 64, 63, 62,
820 /* 1240 */ 440, 154, 440, 440, 154, 440, 51, 440, 440, 65,
821 /* 1250 */ 64, 63, 62, 440, 440, 56, 65, 64, 63, 62,
822 /* 1260 */ 440, 440, 392, 440, 440, 440, 440, 440, 440, 389,
823 };
824 static const YYCODETYPE yy_lookahead[] = {
825 /* 0 */ 0, 99, 0, 126, 102, 103, 94, 95, 96, 97,
826 /* 10 */ 10, 100, 10, 101, 4, 5, 6, 7, 18, 19,
827 /* 20 */ 20, 3, 22, 12, 112, 100, 26, 115, 107, 108,
828 /* 30 */ 109, 31, 32, 33, 34, 35, 125, 37, 38, 39,
829 /* 40 */ 40, 99, 42, 43, 102, 103, 2, 47, 48, 49,
830 /* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
831 /* 60 */ 60, 0, 10, 100, 122, 123, 124, 27, 28, 29,
832 /* 70 */ 30, 10, 121, 29, 30, 107, 108, 109, 26, 18,
833 /* 80 */ 19, 20, 17, 22, 107, 108, 109, 26, 23, 78,
834 /* 90 */ 46, 101, 31, 32, 33, 34, 35, 86, 37, 38,
835 /* 100 */ 39, 40, 84, 42, 43, 61, 4, 5, 47, 48,
836 /* 110 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
837 /* 120 */ 59, 60, 0, 23, 80, 81, 82, 83, 120, 95,
838 /* 130 */ 96, 97, 10, 118, 2, 101, 4, 5, 6, 7,
839 /* 140 */ 18, 19, 20, 110, 22, 121, 112, 110, 26, 115,
840 /* 150 */ 107, 108, 109, 31, 32, 33, 34, 35, 46, 37,
841 /* 160 */ 38, 39, 40, 46, 42, 43, 91, 92, 36, 47,
842 /* 170 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
843 /* 180 */ 58, 59, 60, 1, 2, 17, 4, 5, 4, 5,
844 /* 190 */ 6, 7, 8, 16, 12, 6, 7, 15, 15, 1,
845 /* 200 */ 2, 41, 4, 5, 22, 93, 24, 25, 38, 38,
846 /* 210 */ 12, 29, 30, 15, 39, 61, 62, 63, 64, 65,
847 /* 220 */ 66, 67, 68, 69, 70, 98, 39, 29, 30, 1,
848 /* 230 */ 107, 108, 109, 45, 107, 108, 109, 17, 111, 76,
849 /* 240 */ 12, 77, 14, 61, 117, 71, 18, 19, 20, 21,
850 /* 250 */ 22, 75, 24, 25, 127, 27, 28, 29, 30, 61,
851 /* 260 */ 78, 76, 80, 81, 82, 83, 100, 3, 86, 87,
852 /* 270 */ 88, 89, 106, 107, 108, 109, 78, 3, 80, 81,
853 /* 280 */ 82, 83, 24, 25, 86, 87, 88, 89, 1, 2,
854 /* 290 */ 36, 4, 5, 127, 24, 25, 96, 97, 98, 12,
855 /* 300 */ 100, 3, 15, 3, 90, 105, 106, 107, 108, 109,
856 /* 310 */ 3, 94, 95, 96, 97, 3, 29, 30, 101, 2,
857 /* 320 */ 3, 4, 5, 6, 7, 24, 25, 127, 73, 112,
858 /* 330 */ 15, 114, 115, 98, 17, 13, 4, 5, 6, 7,
859 /* 340 */ 23, 23, 107, 108, 109, 15, 29, 30, 61, 17,
860 /* 350 */ 26, 26, 26, 36, 12, 23, 2, 3, 4, 5,
861 /* 360 */ 6, 7, 127, 24, 25, 78, 85, 80, 81, 82,
862 /* 370 */ 83, 128, 3, 86, 87, 88, 89, 23, 11, 128,
863 /* 380 */ 79, 64, 65, 29, 30, 128, 128, 86, 128, 72,
864 /* 390 */ 36, 74, 75, 76, 1, 128, 128, 4, 5, 4,
865 /* 400 */ 5, 6, 7, 8, 128, 12, 46, 128, 15, 128,
866 /* 410 */ 128, 18, 19, 20, 128, 22, 128, 128, 64, 65,
867 /* 420 */ 1, 128, 128, 4, 5, 86, 72, 128, 74, 75,
868 /* 430 */ 76, 12, 1, 2, 15, 4, 5, 1, 2, 128,
869 /* 440 */ 4, 5, 128, 12, 128, 85, 15, 128, 12, 128,
870 /* 450 */ 90, 15, 128, 93, 128, 128, 18, 19, 20, 128,
871 /* 460 */ 128, 128, 128, 44, 45, 128, 98, 36, 128, 128,
872 /* 470 */ 128, 78, 36, 128, 2, 107, 108, 109, 128, 86,
873 /* 480 */ 87, 88, 89, 98, 12, 47, 48, 49, 50, 51,
874 /* 490 */ 52, 128, 107, 108, 109, 127, 128, 78, 113, 128,
875 /* 500 */ 128, 29, 30, 128, 128, 86, 87, 88, 89, 78,
876 /* 510 */ 128, 128, 127, 128, 78, 128, 128, 86, 87, 88,
877 /* 520 */ 89, 128, 86, 87, 88, 89, 1, 2, 128, 4,
878 /* 530 */ 5, 1, 2, 61, 4, 5, 128, 12, 128, 128,
879 /* 540 */ 15, 128, 12, 128, 128, 15, 128, 128, 128, 128,
880 /* 550 */ 78, 128, 80, 81, 82, 83, 1, 128, 86, 4,
881 /* 560 */ 5, 1, 128, 128, 4, 5, 128, 12, 128, 128,
882 /* 570 */ 15, 128, 12, 128, 1, 15, 128, 4, 5, 1,
883 /* 580 */ 128, 128, 4, 5, 128, 12, 98, 128, 15, 128,
884 /* 590 */ 12, 98, 128, 15, 128, 107, 108, 109, 128, 111,
885 /* 600 */ 107, 108, 109, 78, 116, 117, 128, 128, 78, 128,
886 /* 610 */ 128, 86, 87, 88, 89, 127, 86, 87, 88, 89,
887 /* 620 */ 127, 98, 128, 100, 128, 128, 98, 128, 105, 106,
888 /* 630 */ 107, 108, 109, 78, 128, 107, 108, 109, 78, 111,
889 /* 640 */ 128, 86, 87, 88, 89, 2, 86, 87, 88, 89,
890 /* 650 */ 127, 78, 128, 128, 128, 127, 78, 128, 128, 86,
891 /* 660 */ 87, 88, 89, 128, 86, 87, 88, 89, 128, 98,
892 /* 670 */ 128, 100, 29, 30, 128, 128, 105, 106, 107, 108,
893 /* 680 */ 109, 98, 128, 100, 98, 128, 128, 128, 105, 106,
894 /* 690 */ 107, 108, 109, 107, 108, 109, 128, 111, 127, 4,
895 /* 700 */ 5, 6, 7, 128, 61, 128, 128, 98, 128, 100,
896 /* 710 */ 127, 128, 17, 127, 105, 106, 107, 108, 109, 128,
897 /* 720 */ 98, 128, 100, 80, 81, 82, 83, 105, 106, 107,
898 /* 730 */ 108, 109, 98, 128, 100, 128, 127, 128, 128, 105,
899 /* 740 */ 106, 107, 108, 109, 128, 98, 128, 100, 128, 127,
900 /* 750 */ 128, 128, 105, 106, 107, 108, 109, 128, 98, 128,
901 /* 760 */ 100, 127, 128, 128, 128, 105, 106, 107, 108, 109,
902 /* 770 */ 98, 128, 100, 128, 127, 128, 128, 105, 106, 107,
903 /* 780 */ 108, 109, 98, 128, 100, 128, 128, 127, 128, 105,
904 /* 790 */ 106, 107, 108, 109, 98, 4, 5, 6, 7, 127,
905 /* 800 */ 128, 128, 128, 107, 108, 109, 98, 16, 100, 128,
906 /* 810 */ 128, 127, 128, 105, 106, 107, 108, 109, 128, 98,
907 /* 820 */ 128, 100, 128, 127, 128, 128, 105, 106, 107, 108,
908 /* 830 */ 109, 98, 128, 100, 128, 127, 128, 128, 105, 106,
909 /* 840 */ 107, 108, 109, 128, 98, 128, 100, 128, 127, 128,
910 /* 850 */ 128, 105, 106, 107, 108, 109, 128, 98, 128, 100,
911 /* 860 */ 127, 128, 128, 128, 105, 106, 107, 108, 109, 98,
912 /* 870 */ 128, 100, 128, 127, 128, 128, 105, 106, 107, 108,
913 /* 880 */ 109, 98, 128, 100, 128, 128, 127, 128, 105, 106,
914 /* 890 */ 107, 108, 109, 98, 4, 5, 6, 7, 127, 128,
915 /* 900 */ 128, 128, 107, 108, 109, 98, 128, 100, 128, 128,
916 /* 910 */ 127, 128, 105, 106, 107, 108, 109, 128, 98, 128,
917 /* 920 */ 100, 128, 127, 33, 128, 105, 106, 107, 108, 109,
918 /* 930 */ 98, 128, 100, 128, 127, 128, 128, 105, 106, 107,
919 /* 940 */ 108, 109, 128, 98, 128, 100, 128, 127, 128, 128,
920 /* 950 */ 105, 106, 107, 108, 109, 128, 98, 128, 100, 127,
921 /* 960 */ 128, 128, 128, 128, 106, 107, 108, 109, 98, 128,
922 /* 970 */ 128, 2, 127, 4, 5, 6, 7, 107, 108, 109,
923 /* 980 */ 4, 5, 6, 7, 128, 127, 128, 128, 128, 119,
924 /* 990 */ 128, 121, 98, 17, 128, 128, 128, 127, 128, 23,
925 /* 1000 */ 128, 107, 108, 109, 98, 36, 128, 128, 128, 98,
926 /* 1010 */ 128, 128, 128, 107, 108, 109, 128, 98, 107, 108,
927 /* 1020 */ 109, 127, 128, 128, 128, 98, 107, 108, 109, 128,
928 /* 1030 */ 128, 98, 128, 127, 107, 108, 109, 128, 127, 98,
929 /* 1040 */ 107, 108, 109, 128, 128, 128, 127, 128, 107, 108,
930 /* 1050 */ 109, 128, 98, 128, 127, 98, 128, 128, 128, 128,
931 /* 1060 */ 127, 107, 108, 109, 107, 108, 109, 128, 127, 4,
932 /* 1070 */ 5, 6, 7, 128, 128, 128, 98, 128, 128, 98,
933 /* 1080 */ 128, 127, 98, 128, 127, 107, 108, 109, 107, 108,
934 /* 1090 */ 109, 107, 108, 109, 4, 5, 6, 7, 33, 4,
935 /* 1100 */ 5, 6, 7, 98, 128, 127, 128, 17, 127, 128,
936 /* 1110 */ 128, 127, 107, 108, 109, 128, 98, 128, 23, 98,
937 /* 1120 */ 128, 128, 128, 128, 98, 107, 108, 109, 107, 108,
938 /* 1130 */ 109, 128, 127, 107, 108, 109, 128, 128, 128, 128,
939 /* 1140 */ 98, 128, 128, 128, 128, 127, 128, 98, 127, 107,
940 /* 1150 */ 108, 109, 128, 127, 98, 128, 107, 108, 109, 128,
941 /* 1160 */ 128, 98, 128, 107, 108, 109, 128, 128, 128, 127,
942 /* 1170 */ 107, 108, 109, 128, 128, 98, 127, 128, 98, 128,
943 /* 1180 */ 128, 128, 128, 127, 107, 108, 109, 107, 108, 109,
944 /* 1190 */ 127, 98, 4, 5, 6, 7, 4, 5, 6, 7,
945 /* 1200 */ 107, 108, 109, 128, 127, 17, 128, 127, 128, 17,
946 /* 1210 */ 128, 128, 98, 128, 128, 98, 128, 128, 128, 128,
947 /* 1220 */ 127, 107, 108, 109, 107, 108, 109, 4, 5, 6,
948 /* 1230 */ 7, 4, 5, 6, 7, 8, 4, 5, 6, 7,
949 /* 1240 */ 128, 127, 128, 128, 127, 128, 23, 128, 128, 4,
950 /* 1250 */ 5, 6, 7, 128, 128, 23, 4, 5, 6, 7,
951 /* 1260 */ 128, 128, 17, 128, 128, 128, 128, 128, 128, 17,
952 /* 1270 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
953 /* 1280 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
954 /* 1290 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
955 /* 1300 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
956 /* 1310 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
957 /* 1320 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
958 /* 1330 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
959 /* 1340 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
960 /* 1350 */ 128, 94, 94, 94, 94, 94, 94, 94, 94, 94,
961 /* 1360 */ 94, 94, 94, 94,
962 };
963 #define YY_SHIFT_COUNT (163)
964 #define YY_SHIFT_MIN (0)
965 #define YY_SHIFT_MAX (1252)
966 static const unsigned short int yy_shift_ofst[] = {
967 /* 0 */ 228, 182, 198, 198, 198, 198, 198, 198, 198, 198,
968 /* 10 */ 198, 198, 198, 198, 198, 198, 198, 198, 198, 198,
969 /* 20 */ 198, 198, 198, 393, 287, 393, 228, 555, 0, 61,
970 /* 30 */ 122, 228, 419, 472, 560, 560, 431, 436, 525, 530,
971 /* 40 */ 555, 555, 555, 555, 555, 555, 555, 555, 573, 555,
972 /* 50 */ 555, 555, 578, 555, 555, 555, 555, 555, 555, 555,
973 /* 60 */ 555, 555, 555, 555, 555, 555, 438, 11, 11, 11,
974 /* 70 */ 11, 11, 44, 317, 354, 643, 643, 184, 40, 100,
975 /* 80 */ 1270, 1270, 1270, 1270, 154, 154, 132, 969, 332, 976,
976 /* 90 */ 695, 791, 890, 1065, 1090, 1095, 1188, 1223, 395, 1227,
977 /* 100 */ 1192, 1232, 1245, 1252, 10, 10, 10, 10, 10, 10,
978 /* 110 */ 10, 10, 360, 301, 10, 339, 52, 65, 102, 75,
979 /* 120 */ 189, 189, 258, 270, 18, 112, 2, 117, 168, 177,
980 /* 130 */ 183, 160, 170, 171, 175, 187, 188, 174, 220, 163,
981 /* 140 */ 176, 164, 185, 264, 274, 298, 254, 300, 307, 312,
982 /* 150 */ 214, 255, 318, 322, 214, 315, 330, 324, 325, 326,
983 /* 160 */ 342, 281, 369, 367,
984 };
985 #define YY_REDUCE_COUNT (83)
986 #define YY_REDUCE_MIN (-123)
987 #define YY_REDUCE_MAX (1117)
988 static const short yy_reduce_ofst[] = {
989 /* 0 */ 217, 200, 523, 571, 583, 609, 622, 634, 647, 660,
990 /* 10 */ 672, 684, 708, 721, 733, 746, 759, 771, 783, 807,
991 /* 20 */ 820, 832, 845, 488, 858, 127, -88, 870, -58, -58,
992 /* 30 */ -58, 34, 385, 166, 528, 586, 235, 368, 493, 696,
993 /* 40 */ 795, 894, 906, 911, 919, 927, 933, 941, 954, 957,
994 /* 50 */ 978, 981, 984, 1005, 1018, 1021, 1026, 1042, 1049, 1056,
995 /* 60 */ 1063, 1077, 1080, 1093, 1114, 1117, -98, -79, -32, -23,
996 /* 70 */ 43, 123, -89, -123, -123, -75, -37, -49, -10, 15,
997 /* 80 */ 8, 33, 24, 37,
998 };
999 static const YYACTIONTYPE yy_default[] = {
1000 /* 0 */ 444, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1001 /* 10 */ 438, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1002 /* 20 */ 438, 438, 438, 438, 438, 438, 444, 570, 575, 575,
1003 /* 30 */ 575, 444, 474, 438, 438, 438, 574, 480, 438, 438,
1004 /* 40 */ 438, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1005 /* 50 */ 438, 438, 438, 438, 470, 438, 438, 438, 438, 438,
1006 /* 60 */ 438, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1007 /* 70 */ 438, 438, 438, 438, 438, 438, 438, 570, 438, 450,
1008 /* 80 */ 464, 506, 570, 506, 462, 492, 438, 438, 438, 438,
1009 /* 90 */ 438, 438, 438, 438, 438, 438, 438, 438, 473, 468,
1010 /* 100 */ 438, 438, 438, 438, 486, 485, 482, 481, 510, 509,
1011 /* 110 */ 508, 469, 453, 438, 561, 438, 438, 438, 582, 438,
1012 /* 120 */ 542, 541, 537, 438, 530, 527, 438, 527, 438, 438,
1013 /* 130 */ 438, 490, 438, 438, 438, 438, 438, 438, 438, 438,
1014 /* 140 */ 438, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1015 /* 150 */ 586, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1016 /* 160 */ 438, 595, 438, 438,
1017 };
1018 /********** End of lemon-generated parsing tables *****************************/
1019
1020 /* The next table maps tokens (terminal symbols) into fallback tokens.
1021 ** If a construct like the following:
@@ -1327,24 +1320,26 @@
1327 /* 109 */ "nth",
1328 /* 110 */ "textposition",
1329 /* 111 */ "rvalue",
1330 /* 112 */ "lvalue",
1331 /* 113 */ "even",
1332 /* 114 */ "document",
1333 /* 115 */ "print",
1334 /* 116 */ "prlist",
1335 /* 117 */ "pritem",
1336 /* 118 */ "prsep",
1337 /* 119 */ "attribute_list",
1338 /* 120 */ "savelist",
1339 /* 121 */ "alist",
1340 /* 122 */ "attribute",
1341 /* 123 */ "go",
1342 /* 124 */ "boolproperty",
1343 /* 125 */ "withclause",
1344 /* 126 */ "between",
1345 /* 127 */ "place2",
 
 
1346 };
1347 #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
1348
1349 #ifndef NDEBUG
1350 /* For tracing reduce actions, the names of all rules are required.
@@ -1372,141 +1367,137 @@
1372 /* 19 */ "unnamed_element ::= basetype attribute_list",
1373 /* 20 */ "basetype ::= CLASSNAME",
1374 /* 21 */ "basetype ::= STRING textposition",
1375 /* 22 */ "basetype ::= LB savelist element_list RB",
1376 /* 23 */ "savelist ::=",
1377 /* 24 */ "attribute_list ::= expr alist",
1378 /* 25 */ "attribute_list ::= expr PERCENT alist",
1379 /* 26 */ "attribute ::= numproperty expr PERCENT",
1380 /* 27 */ "attribute ::= numproperty expr",
1381 /* 28 */ "attribute ::= dashproperty expr",
1382 /* 29 */ "attribute ::= dashproperty",
1383 /* 30 */ "attribute ::= colorproperty rvalue",
1384 /* 31 */ "attribute ::= go direction expr PERCENT",
1385 /* 32 */ "attribute ::= go direction expr",
1386 /* 33 */ "attribute ::= go direction",
1387 /* 34 */ "attribute ::= go direction even position",
1388 /* 35 */ "attribute ::= CLOSE",
1389 /* 36 */ "attribute ::= CHOP",
1390 /* 37 */ "attribute ::= FROM position",
1391 /* 38 */ "attribute ::= TO position",
1392 /* 39 */ "attribute ::= THEN",
1393 /* 40 */ "attribute ::= THEN expr HEADING expr",
1394 /* 41 */ "attribute ::= THEN HEADING expr",
1395 /* 42 */ "attribute ::= THEN expr EDGEPT",
1396 /* 43 */ "attribute ::= THEN EDGEPT",
1397 /* 44 */ "attribute ::= GO expr HEADING expr",
1398 /* 45 */ "attribute ::= GO HEADING expr",
1399 /* 46 */ "attribute ::= GO expr EDGEPT",
1400 /* 47 */ "attribute ::= GO EDGEPT",
1401 /* 48 */ "attribute ::= AT position",
1402 /* 49 */ "attribute ::= SAME",
1403 /* 50 */ "attribute ::= SAME AS object",
1404 /* 51 */ "attribute ::= STRING textposition",
1405 /* 52 */ "attribute ::= FIT",
1406 /* 53 */ "attribute ::= BEHIND object",
1407 /* 54 */ "withclause ::= DOT_E edge AT position",
1408 /* 55 */ "withclause ::= edge AT position",
1409 /* 56 */ "numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS",
1410 /* 57 */ "boolproperty ::= CW",
1411 /* 58 */ "boolproperty ::= CCW",
1412 /* 59 */ "boolproperty ::= LARROW",
1413 /* 60 */ "boolproperty ::= RARROW",
1414 /* 61 */ "boolproperty ::= LRARROW",
1415 /* 62 */ "boolproperty ::= INVIS",
1416 /* 63 */ "boolproperty ::= THICK",
1417 /* 64 */ "boolproperty ::= THIN",
1418 /* 65 */ "textposition ::=",
1419 /* 66 */ "textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL",
1420 /* 67 */ "position ::= expr COMMA expr",
1421 /* 68 */ "position ::= place PLUS expr COMMA expr",
1422 /* 69 */ "position ::= place MINUS expr COMMA expr",
1423 /* 70 */ "position ::= place PLUS LP expr COMMA expr RP",
1424 /* 71 */ "position ::= place MINUS LP expr COMMA expr RP",
1425 /* 72 */ "position ::= LP position COMMA position RP",
1426 /* 73 */ "position ::= LP position RP",
1427 /* 74 */ "position ::= expr between position AND position",
1428 /* 75 */ "position ::= expr LT position COMMA position GT",
1429 /* 76 */ "position ::= expr ABOVE position",
1430 /* 77 */ "position ::= expr BELOW position",
1431 /* 78 */ "position ::= expr LEFT OF position",
1432 /* 79 */ "position ::= expr RIGHT OF position",
1433 /* 80 */ "position ::= expr ON HEADING EDGEPT OF position",
1434 /* 81 */ "position ::= expr HEADING EDGEPT OF position",
1435 /* 82 */ "position ::= expr EDGEPT OF position",
1436 /* 83 */ "position ::= expr ON HEADING expr FROM position",
1437 /* 84 */ "position ::= expr HEADING expr FROM position",
1438 /* 85 */ "place ::= edge OF object",
1439 /* 86 */ "place2 ::= object",
1440 /* 87 */ "place2 ::= object DOT_E edge",
1441 /* 88 */ "place2 ::= NTH VERTEX OF object",
1442 /* 89 */ "object ::= nth",
1443 /* 90 */ "object ::= nth OF|IN object",
1444 /* 91 */ "objectname ::= PLACENAME",
1445 /* 92 */ "objectname ::= objectname DOT_U PLACENAME",
1446 /* 93 */ "nth ::= NTH CLASSNAME",
1447 /* 94 */ "nth ::= NTH LAST CLASSNAME",
1448 /* 95 */ "nth ::= LAST CLASSNAME",
1449 /* 96 */ "nth ::= LAST",
1450 /* 97 */ "nth ::= NTH LB RB",
1451 /* 98 */ "nth ::= NTH LAST LB RB",
1452 /* 99 */ "nth ::= LAST LB RB",
1453 /* 100 */ "expr ::= expr PLUS expr",
1454 /* 101 */ "expr ::= expr MINUS expr",
1455 /* 102 */ "expr ::= expr STAR expr",
1456 /* 103 */ "expr ::= expr SLASH expr",
1457 /* 104 */ "expr ::= MINUS expr",
1458 /* 105 */ "expr ::= PLUS expr",
1459 /* 106 */ "expr ::= LP expr RP",
1460 /* 107 */ "expr ::= NUMBER",
1461 /* 108 */ "expr ::= ID",
1462 /* 109 */ "expr ::= FUNC1 LP expr RP",
1463 /* 110 */ "expr ::= FUNC2 LP expr COMMA expr RP",
1464 /* 111 */ "expr ::= place2 DOT_XY X",
1465 /* 112 */ "expr ::= place2 DOT_XY Y",
1466 /* 113 */ "expr ::= object DOT_L numproperty",
1467 /* 114 */ "expr ::= object DOT_L dashproperty",
1468 /* 115 */ "expr ::= object DOT_L colorproperty",
1469 /* 116 */ "lvalue ::= ID",
1470 /* 117 */ "lvalue ::= FILL",
1471 /* 118 */ "lvalue ::= COLOR",
1472 /* 119 */ "lvalue ::= THICKNESS",
1473 /* 120 */ "rvalue ::= expr",
1474 /* 121 */ "print ::= PRINT",
1475 /* 122 */ "prlist ::= pritem",
1476 /* 123 */ "prlist ::= prlist prsep pritem",
1477 /* 124 */ "direction ::= UP",
1478 /* 125 */ "direction ::= DOWN",
1479 /* 126 */ "direction ::= LEFT",
1480 /* 127 */ "direction ::= RIGHT",
1481 /* 128 */ "attribute_list ::= alist",
1482 /* 129 */ "alist ::=",
1483 /* 130 */ "alist ::= alist attribute",
1484 /* 131 */ "attribute ::= boolproperty",
1485 /* 132 */ "attribute ::= WITH withclause",
1486 /* 133 */ "go ::= GO",
1487 /* 134 */ "go ::=",
1488 /* 135 */ "even ::= UNTIL EVEN WITH",
1489 /* 136 */ "even ::= EVEN WITH",
1490 /* 137 */ "dashproperty ::= DOTTED",
1491 /* 138 */ "dashproperty ::= DASHED",
1492 /* 139 */ "colorproperty ::= FILL",
1493 /* 140 */ "colorproperty ::= COLOR",
1494 /* 141 */ "position ::= place",
1495 /* 142 */ "between ::= WAY BETWEEN",
1496 /* 143 */ "between ::= BETWEEN",
1497 /* 144 */ "between ::= OF THE WAY BETWEEN",
1498 /* 145 */ "place ::= place2",
1499 /* 146 */ "edge ::= CENTER",
1500 /* 147 */ "edge ::= EDGEPT",
1501 /* 148 */ "edge ::= TOP",
1502 /* 149 */ "edge ::= BOTTOM",
1503 /* 150 */ "edge ::= START",
1504 /* 151 */ "edge ::= END",
1505 /* 152 */ "edge ::= RIGHT",
1506 /* 153 */ "edge ::= LEFT",
1507 /* 154 */ "object ::= objectname",
1508 };
1509 #endif /* NDEBUG */
1510
1511
1512 #if YYSTACKDEPTH<=0
@@ -1630,22 +1621,22 @@
1630 ** inside the C code.
1631 */
1632 /********* Begin destructor definitions ***************************************/
1633 case 94: /* element_list */
1634 {
1635 #line 448 "pikchr.y"
1636 pik_elist_free(p,(yypminor->yy52));
1637 #line 1662 "pikchr.c"
1638 }
1639 break;
1640 case 95: /* element */
1641 case 96: /* unnamed_element */
1642 case 97: /* basetype */
1643 {
1644 #line 450 "pikchr.y"
1645 pik_elem_free(p,(yypminor->yy58));
1646 #line 1671 "pikchr.c"
1647 }
1648 break;
1649 /********* End destructor definitions *****************************************/
1650 default: break; /* If no destructor action specified: do nothing */
1651 }
@@ -1859,14 +1850,14 @@
1859 #endif
1860 while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
1861 /* Here code is inserted which will execute if the parser
1862 ** stack every overflows */
1863 /******** Begin %stack_overflow code ******************************************/
1864 #line 479 "pikchr.y"
1865
1866 pik_error(p, 0, "parser stack overflow");
1867 #line 1892 "pikchr.c"
1868 /******** End %stack_overflow code ********************************************/
1869 pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */
1870 pik_parserCTX_STORE
1871 }
1872
@@ -1934,11 +1925,11 @@
1934 }
1935
1936 /* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side
1937 ** of that rule */
1938 static const YYCODETYPE yyRuleInfoLhs[] = {
1939 114, /* (0) document ::= element_list */
1940 94, /* (1) element_list ::= element */
1941 94, /* (2) element_list ::= element_list EOL element */
1942 95, /* (3) element ::= */
1943 95, /* (4) element ::= direction */
1944 95, /* (5) element ::= lvalue ASSIGN rvalue */
@@ -1947,152 +1938,148 @@
1947 95, /* (8) element ::= unnamed_element */
1948 95, /* (9) element ::= print prlist */
1949 95, /* (10) element ::= ASSERT LP expr EQ expr RP */
1950 95, /* (11) element ::= ASSERT LP place EQ place RP */
1951 111, /* (12) rvalue ::= PLACENAME */
1952 117, /* (13) pritem ::= FILL */
1953 117, /* (14) pritem ::= COLOR */
1954 117, /* (15) pritem ::= THICKNESS */
1955 117, /* (16) pritem ::= rvalue */
1956 117, /* (17) pritem ::= STRING */
1957 118, /* (18) prsep ::= COMMA */
1958 96, /* (19) unnamed_element ::= basetype attribute_list */
1959 97, /* (20) basetype ::= CLASSNAME */
1960 97, /* (21) basetype ::= STRING textposition */
1961 97, /* (22) basetype ::= LB savelist element_list RB */
1962 120, /* (23) savelist ::= */
1963 119, /* (24) attribute_list ::= expr alist */
1964 119, /* (25) attribute_list ::= expr PERCENT alist */
1965 122, /* (26) attribute ::= numproperty expr PERCENT */
1966 122, /* (27) attribute ::= numproperty expr */
1967 122, /* (28) attribute ::= dashproperty expr */
1968 122, /* (29) attribute ::= dashproperty */
1969 122, /* (30) attribute ::= colorproperty rvalue */
1970 122, /* (31) attribute ::= go direction expr PERCENT */
1971 122, /* (32) attribute ::= go direction expr */
1972 122, /* (33) attribute ::= go direction */
1973 122, /* (34) attribute ::= go direction even position */
1974 122, /* (35) attribute ::= CLOSE */
1975 122, /* (36) attribute ::= CHOP */
1976 122, /* (37) attribute ::= FROM position */
1977 122, /* (38) attribute ::= TO position */
1978 122, /* (39) attribute ::= THEN */
1979 122, /* (40) attribute ::= THEN expr HEADING expr */
1980 122, /* (41) attribute ::= THEN HEADING expr */
1981 122, /* (42) attribute ::= THEN expr EDGEPT */
1982 122, /* (43) attribute ::= THEN EDGEPT */
1983 122, /* (44) attribute ::= GO expr HEADING expr */
1984 122, /* (45) attribute ::= GO HEADING expr */
1985 122, /* (46) attribute ::= GO expr EDGEPT */
1986 122, /* (47) attribute ::= GO EDGEPT */
1987 122, /* (48) attribute ::= AT position */
1988 122, /* (49) attribute ::= SAME */
1989 122, /* (50) attribute ::= SAME AS object */
1990 122, /* (51) attribute ::= STRING textposition */
1991 122, /* (52) attribute ::= FIT */
1992 122, /* (53) attribute ::= BEHIND object */
1993 125, /* (54) withclause ::= DOT_E edge AT position */
1994 125, /* (55) withclause ::= edge AT position */
1995 99, /* (56) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
1996 124, /* (57) boolproperty ::= CW */
1997 124, /* (58) boolproperty ::= CCW */
1998 124, /* (59) boolproperty ::= LARROW */
1999 124, /* (60) boolproperty ::= RARROW */
2000 124, /* (61) boolproperty ::= LRARROW */
2001 124, /* (62) boolproperty ::= INVIS */
2002 124, /* (63) boolproperty ::= THICK */
2003 124, /* (64) boolproperty ::= THIN */
2004 110, /* (65) textposition ::= */
2005 110, /* (66) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2006 105, /* (67) position ::= expr COMMA expr */
2007 105, /* (68) position ::= place PLUS expr COMMA expr */
2008 105, /* (69) position ::= place MINUS expr COMMA expr */
2009 105, /* (70) position ::= place PLUS LP expr COMMA expr RP */
2010 105, /* (71) position ::= place MINUS LP expr COMMA expr RP */
2011 105, /* (72) position ::= LP position COMMA position RP */
2012 105, /* (73) position ::= LP position RP */
2013 105, /* (74) position ::= expr between position AND position */
2014 105, /* (75) position ::= expr LT position COMMA position GT */
2015 105, /* (76) position ::= expr ABOVE position */
2016 105, /* (77) position ::= expr BELOW position */
2017 105, /* (78) position ::= expr LEFT OF position */
2018 105, /* (79) position ::= expr RIGHT OF position */
2019 105, /* (80) position ::= expr ON HEADING EDGEPT OF position */
2020 105, /* (81) position ::= expr HEADING EDGEPT OF position */
2021 105, /* (82) position ::= expr EDGEPT OF position */
2022 105, /* (83) position ::= expr ON HEADING expr FROM position */
2023 105, /* (84) position ::= expr HEADING expr FROM position */
2024 106, /* (85) place ::= edge OF object */
2025 127, /* (86) place2 ::= object */
2026 127, /* (87) place2 ::= object DOT_E edge */
2027 127, /* (88) place2 ::= NTH VERTEX OF object */
2028 107, /* (89) object ::= nth */
2029 107, /* (90) object ::= nth OF|IN object */
2030 108, /* (91) objectname ::= PLACENAME */
2031 108, /* (92) objectname ::= objectname DOT_U PLACENAME */
2032 109, /* (93) nth ::= NTH CLASSNAME */
2033 109, /* (94) nth ::= NTH LAST CLASSNAME */
2034 109, /* (95) nth ::= LAST CLASSNAME */
2035 109, /* (96) nth ::= LAST */
2036 109, /* (97) nth ::= NTH LB RB */
2037 109, /* (98) nth ::= NTH LAST LB RB */
2038 109, /* (99) nth ::= LAST LB RB */
2039 98, /* (100) expr ::= expr PLUS expr */
2040 98, /* (101) expr ::= expr MINUS expr */
2041 98, /* (102) expr ::= expr STAR expr */
2042 98, /* (103) expr ::= expr SLASH expr */
2043 98, /* (104) expr ::= MINUS expr */
2044 98, /* (105) expr ::= PLUS expr */
2045 98, /* (106) expr ::= LP expr RP */
2046 98, /* (107) expr ::= NUMBER */
2047 98, /* (108) expr ::= ID */
2048 98, /* (109) expr ::= FUNC1 LP expr RP */
2049 98, /* (110) expr ::= FUNC2 LP expr COMMA expr RP */
2050 98, /* (111) expr ::= place2 DOT_XY X */
2051 98, /* (112) expr ::= place2 DOT_XY Y */
2052 98, /* (113) expr ::= object DOT_L numproperty */
2053 98, /* (114) expr ::= object DOT_L dashproperty */
2054 98, /* (115) expr ::= object DOT_L colorproperty */
2055 112, /* (116) lvalue ::= ID */
2056 112, /* (117) lvalue ::= FILL */
2057 112, /* (118) lvalue ::= COLOR */
2058 112, /* (119) lvalue ::= THICKNESS */
2059 111, /* (120) rvalue ::= expr */
2060 115, /* (121) print ::= PRINT */
2061 116, /* (122) prlist ::= pritem */
2062 116, /* (123) prlist ::= prlist prsep pritem */
2063 101, /* (124) direction ::= UP */
2064 101, /* (125) direction ::= DOWN */
2065 101, /* (126) direction ::= LEFT */
2066 101, /* (127) direction ::= RIGHT */
2067 119, /* (128) attribute_list ::= alist */
2068 121, /* (129) alist ::= */
2069 121, /* (130) alist ::= alist attribute */
2070 122, /* (131) attribute ::= boolproperty */
2071 122, /* (132) attribute ::= WITH withclause */
2072 123, /* (133) go ::= GO */
2073 123, /* (134) go ::= */
2074 113, /* (135) even ::= UNTIL EVEN WITH */
2075 113, /* (136) even ::= EVEN WITH */
2076 102, /* (137) dashproperty ::= DOTTED */
2077 102, /* (138) dashproperty ::= DASHED */
2078 103, /* (139) colorproperty ::= FILL */
2079 103, /* (140) colorproperty ::= COLOR */
2080 105, /* (141) position ::= place */
2081 126, /* (142) between ::= WAY BETWEEN */
2082 126, /* (143) between ::= BETWEEN */
2083 126, /* (144) between ::= OF THE WAY BETWEEN */
2084 106, /* (145) place ::= place2 */
2085 100, /* (146) edge ::= CENTER */
2086 100, /* (147) edge ::= EDGEPT */
2087 100, /* (148) edge ::= TOP */
2088 100, /* (149) edge ::= BOTTOM */
2089 100, /* (150) edge ::= START */
2090 100, /* (151) edge ::= END */
2091 100, /* (152) edge ::= RIGHT */
2092 100, /* (153) edge ::= LEFT */
2093 107, /* (154) object ::= objectname */
2094 };
2095
2096 /* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
2097 ** of symbols on the right-hand side of that rule. */
2098 static const signed char yyRuleInfoNRhs[] = {
@@ -2118,141 +2105,137 @@
2118 -2, /* (19) unnamed_element ::= basetype attribute_list */
2119 -1, /* (20) basetype ::= CLASSNAME */
2120 -2, /* (21) basetype ::= STRING textposition */
2121 -4, /* (22) basetype ::= LB savelist element_list RB */
2122 0, /* (23) savelist ::= */
2123 -2, /* (24) attribute_list ::= expr alist */
2124 -3, /* (25) attribute_list ::= expr PERCENT alist */
2125 -3, /* (26) attribute ::= numproperty expr PERCENT */
2126 -2, /* (27) attribute ::= numproperty expr */
2127 -2, /* (28) attribute ::= dashproperty expr */
2128 -1, /* (29) attribute ::= dashproperty */
2129 -2, /* (30) attribute ::= colorproperty rvalue */
2130 -4, /* (31) attribute ::= go direction expr PERCENT */
2131 -3, /* (32) attribute ::= go direction expr */
2132 -2, /* (33) attribute ::= go direction */
2133 -4, /* (34) attribute ::= go direction even position */
2134 -1, /* (35) attribute ::= CLOSE */
2135 -1, /* (36) attribute ::= CHOP */
2136 -2, /* (37) attribute ::= FROM position */
2137 -2, /* (38) attribute ::= TO position */
2138 -1, /* (39) attribute ::= THEN */
2139 -4, /* (40) attribute ::= THEN expr HEADING expr */
2140 -3, /* (41) attribute ::= THEN HEADING expr */
2141 -3, /* (42) attribute ::= THEN expr EDGEPT */
2142 -2, /* (43) attribute ::= THEN EDGEPT */
2143 -4, /* (44) attribute ::= GO expr HEADING expr */
2144 -3, /* (45) attribute ::= GO HEADING expr */
2145 -3, /* (46) attribute ::= GO expr EDGEPT */
2146 -2, /* (47) attribute ::= GO EDGEPT */
2147 -2, /* (48) attribute ::= AT position */
2148 -1, /* (49) attribute ::= SAME */
2149 -3, /* (50) attribute ::= SAME AS object */
2150 -2, /* (51) attribute ::= STRING textposition */
2151 -1, /* (52) attribute ::= FIT */
2152 -2, /* (53) attribute ::= BEHIND object */
2153 -4, /* (54) withclause ::= DOT_E edge AT position */
2154 -3, /* (55) withclause ::= edge AT position */
2155 -1, /* (56) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2156 -1, /* (57) boolproperty ::= CW */
2157 -1, /* (58) boolproperty ::= CCW */
2158 -1, /* (59) boolproperty ::= LARROW */
2159 -1, /* (60) boolproperty ::= RARROW */
2160 -1, /* (61) boolproperty ::= LRARROW */
2161 -1, /* (62) boolproperty ::= INVIS */
2162 -1, /* (63) boolproperty ::= THICK */
2163 -1, /* (64) boolproperty ::= THIN */
2164 0, /* (65) textposition ::= */
2165 -2, /* (66) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2166 -3, /* (67) position ::= expr COMMA expr */
2167 -5, /* (68) position ::= place PLUS expr COMMA expr */
2168 -5, /* (69) position ::= place MINUS expr COMMA expr */
2169 -7, /* (70) position ::= place PLUS LP expr COMMA expr RP */
2170 -7, /* (71) position ::= place MINUS LP expr COMMA expr RP */
2171 -5, /* (72) position ::= LP position COMMA position RP */
2172 -3, /* (73) position ::= LP position RP */
2173 -5, /* (74) position ::= expr between position AND position */
2174 -6, /* (75) position ::= expr LT position COMMA position GT */
2175 -3, /* (76) position ::= expr ABOVE position */
2176 -3, /* (77) position ::= expr BELOW position */
2177 -4, /* (78) position ::= expr LEFT OF position */
2178 -4, /* (79) position ::= expr RIGHT OF position */
2179 -6, /* (80) position ::= expr ON HEADING EDGEPT OF position */
2180 -5, /* (81) position ::= expr HEADING EDGEPT OF position */
2181 -4, /* (82) position ::= expr EDGEPT OF position */
2182 -6, /* (83) position ::= expr ON HEADING expr FROM position */
2183 -5, /* (84) position ::= expr HEADING expr FROM position */
2184 -3, /* (85) place ::= edge OF object */
2185 -1, /* (86) place2 ::= object */
2186 -3, /* (87) place2 ::= object DOT_E edge */
2187 -4, /* (88) place2 ::= NTH VERTEX OF object */
2188 -1, /* (89) object ::= nth */
2189 -3, /* (90) object ::= nth OF|IN object */
2190 -1, /* (91) objectname ::= PLACENAME */
2191 -3, /* (92) objectname ::= objectname DOT_U PLACENAME */
2192 -2, /* (93) nth ::= NTH CLASSNAME */
2193 -3, /* (94) nth ::= NTH LAST CLASSNAME */
2194 -2, /* (95) nth ::= LAST CLASSNAME */
2195 -1, /* (96) nth ::= LAST */
2196 -3, /* (97) nth ::= NTH LB RB */
2197 -4, /* (98) nth ::= NTH LAST LB RB */
2198 -3, /* (99) nth ::= LAST LB RB */
2199 -3, /* (100) expr ::= expr PLUS expr */
2200 -3, /* (101) expr ::= expr MINUS expr */
2201 -3, /* (102) expr ::= expr STAR expr */
2202 -3, /* (103) expr ::= expr SLASH expr */
2203 -2, /* (104) expr ::= MINUS expr */
2204 -2, /* (105) expr ::= PLUS expr */
2205 -3, /* (106) expr ::= LP expr RP */
2206 -1, /* (107) expr ::= NUMBER */
2207 -1, /* (108) expr ::= ID */
2208 -4, /* (109) expr ::= FUNC1 LP expr RP */
2209 -6, /* (110) expr ::= FUNC2 LP expr COMMA expr RP */
2210 -3, /* (111) expr ::= place2 DOT_XY X */
2211 -3, /* (112) expr ::= place2 DOT_XY Y */
2212 -3, /* (113) expr ::= object DOT_L numproperty */
2213 -3, /* (114) expr ::= object DOT_L dashproperty */
2214 -3, /* (115) expr ::= object DOT_L colorproperty */
2215 -1, /* (116) lvalue ::= ID */
2216 -1, /* (117) lvalue ::= FILL */
2217 -1, /* (118) lvalue ::= COLOR */
2218 -1, /* (119) lvalue ::= THICKNESS */
2219 -1, /* (120) rvalue ::= expr */
2220 -1, /* (121) print ::= PRINT */
2221 -1, /* (122) prlist ::= pritem */
2222 -3, /* (123) prlist ::= prlist prsep pritem */
2223 -1, /* (124) direction ::= UP */
2224 -1, /* (125) direction ::= DOWN */
2225 -1, /* (126) direction ::= LEFT */
2226 -1, /* (127) direction ::= RIGHT */
2227 -1, /* (128) attribute_list ::= alist */
2228 0, /* (129) alist ::= */
2229 -2, /* (130) alist ::= alist attribute */
2230 -1, /* (131) attribute ::= boolproperty */
2231 -2, /* (132) attribute ::= WITH withclause */
2232 -1, /* (133) go ::= GO */
2233 0, /* (134) go ::= */
2234 -3, /* (135) even ::= UNTIL EVEN WITH */
2235 -2, /* (136) even ::= EVEN WITH */
2236 -1, /* (137) dashproperty ::= DOTTED */
2237 -1, /* (138) dashproperty ::= DASHED */
2238 -1, /* (139) colorproperty ::= FILL */
2239 -1, /* (140) colorproperty ::= COLOR */
2240 -1, /* (141) position ::= place */
2241 -2, /* (142) between ::= WAY BETWEEN */
2242 -1, /* (143) between ::= BETWEEN */
2243 -4, /* (144) between ::= OF THE WAY BETWEEN */
2244 -1, /* (145) place ::= place2 */
2245 -1, /* (146) edge ::= CENTER */
2246 -1, /* (147) edge ::= EDGEPT */
2247 -1, /* (148) edge ::= TOP */
2248 -1, /* (149) edge ::= BOTTOM */
2249 -1, /* (150) edge ::= START */
2250 -1, /* (151) edge ::= END */
2251 -1, /* (152) edge ::= RIGHT */
2252 -1, /* (153) edge ::= LEFT */
2253 -1, /* (154) object ::= objectname */
2254 };
2255
2256 static void yy_accept(yyParser*); /* Forward Declaration */
2257
2258 /*
@@ -2339,646 +2322,636 @@
2339 ** break;
2340 */
2341 /********** Begin reduce actions **********************************************/
2342 YYMINORTYPE yylhsminor;
2343 case 0: /* document ::= element_list */
2344 #line 483 "pikchr.y"
2345 {pik_render(p,yymsp[0].minor.yy52);}
2346 #line 2371 "pikchr.c"
2347 break;
2348 case 1: /* element_list ::= element */
2349 #line 486 "pikchr.y"
2350 { yylhsminor.yy52 = pik_elist_append(p,0,yymsp[0].minor.yy58); }
2351 #line 2376 "pikchr.c"
2352 yymsp[0].minor.yy52 = yylhsminor.yy52;
2353 break;
2354 case 2: /* element_list ::= element_list EOL element */
2355 #line 488 "pikchr.y"
2356 { yylhsminor.yy52 = pik_elist_append(p,yymsp[-2].minor.yy52,yymsp[0].minor.yy58); }
2357 #line 2382 "pikchr.c"
2358 yymsp[-2].minor.yy52 = yylhsminor.yy52;
2359 break;
2360 case 3: /* element ::= */
2361 #line 491 "pikchr.y"
2362 { yymsp[1].minor.yy58 = 0; }
2363 #line 2388 "pikchr.c"
2364 break;
2365 case 4: /* element ::= direction */
2366 #line 492 "pikchr.y"
2367 { pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy58=0; }
2368 #line 2393 "pikchr.c"
2369 yymsp[0].minor.yy58 = yylhsminor.yy58;
2370 break;
2371 case 5: /* element ::= lvalue ASSIGN rvalue */
2372 #line 493 "pikchr.y"
2373 {pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy149,&yymsp[-1].minor.yy0); yylhsminor.yy58=0;}
2374 #line 2399 "pikchr.c"
2375 yymsp[-2].minor.yy58 = yylhsminor.yy58;
2376 break;
2377 case 6: /* element ::= PLACENAME COLON unnamed_element */
2378 #line 495 "pikchr.y"
2379 { yylhsminor.yy58 = yymsp[0].minor.yy58; pik_elem_setname(p,yymsp[0].minor.yy58,&yymsp[-2].minor.yy0); }
2380 #line 2405 "pikchr.c"
2381 yymsp[-2].minor.yy58 = yylhsminor.yy58;
2382 break;
2383 case 7: /* element ::= PLACENAME COLON position */
2384 #line 497 "pikchr.y"
2385 { yylhsminor.yy58 = pik_elem_new(p,0,0,0);
2386 if(yylhsminor.yy58){ yylhsminor.yy58->ptAt = yymsp[0].minor.yy95; pik_elem_setname(p,yylhsminor.yy58,&yymsp[-2].minor.yy0); }}
2387 #line 2412 "pikchr.c"
2388 yymsp[-2].minor.yy58 = yylhsminor.yy58;
2389 break;
2390 case 8: /* element ::= unnamed_element */
2391 #line 499 "pikchr.y"
2392 {yylhsminor.yy58 = yymsp[0].minor.yy58;}
2393 #line 2418 "pikchr.c"
2394 yymsp[0].minor.yy58 = yylhsminor.yy58;
2395 break;
2396 case 9: /* element ::= print prlist */
2397 #line 500 "pikchr.y"
2398 {pik_append(p,"<br>\n",5); yymsp[-1].minor.yy58=0;}
2399 #line 2424 "pikchr.c"
2400 break;
2401 case 10: /* element ::= ASSERT LP expr EQ expr RP */
2402 #line 505 "pikchr.y"
2403 {yymsp[-5].minor.yy58=pik_assert(p,yymsp[-3].minor.yy149,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy149);}
2404 #line 2429 "pikchr.c"
2405 break;
2406 case 11: /* element ::= ASSERT LP place EQ place RP */
2407 #line 507 "pikchr.y"
2408 {yymsp[-5].minor.yy58=pik_place_assert(p,&yymsp[-3].minor.yy95,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy95);}
2409 #line 2434 "pikchr.c"
2410 break;
2411 case 12: /* rvalue ::= PLACENAME */
2412 #line 518 "pikchr.y"
2413 {yylhsminor.yy149 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2414 #line 2439 "pikchr.c"
2415 yymsp[0].minor.yy149 = yylhsminor.yy149;
2416 break;
2417 case 13: /* pritem ::= FILL */
2418 case 14: /* pritem ::= COLOR */ yytestcase(yyruleno==14);
2419 case 15: /* pritem ::= THICKNESS */ yytestcase(yyruleno==15);
2420 #line 523 "pikchr.y"
2421 {pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));}
2422 #line 2447 "pikchr.c"
2423 break;
2424 case 16: /* pritem ::= rvalue */
2425 #line 526 "pikchr.y"
2426 {pik_append_num(p,"",yymsp[0].minor.yy149);}
2427 #line 2452 "pikchr.c"
2428 break;
2429 case 17: /* pritem ::= STRING */
2430 #line 527 "pikchr.y"
2431 {pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2432 #line 2457 "pikchr.c"
2433 break;
2434 case 18: /* prsep ::= COMMA */
2435 #line 528 "pikchr.y"
2436 {pik_append(p, " ", 1);}
2437 #line 2462 "pikchr.c"
2438 break;
2439 case 19: /* unnamed_element ::= basetype attribute_list */
2440 #line 531 "pikchr.y"
2441 {yylhsminor.yy58 = yymsp[-1].minor.yy58; pik_after_adding_attributes(p,yylhsminor.yy58);}
2442 #line 2467 "pikchr.c"
2443 yymsp[-1].minor.yy58 = yylhsminor.yy58;
2444 break;
2445 case 20: /* basetype ::= CLASSNAME */
2446 #line 533 "pikchr.y"
2447 {yylhsminor.yy58 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2448 #line 2473 "pikchr.c"
2449 yymsp[0].minor.yy58 = yylhsminor.yy58;
2450 break;
2451 case 21: /* basetype ::= STRING textposition */
2452 #line 535 "pikchr.y"
2453 {yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy92; yylhsminor.yy58 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2454 #line 2479 "pikchr.c"
2455 yymsp[-1].minor.yy58 = yylhsminor.yy58;
2456 break;
2457 case 22: /* basetype ::= LB savelist element_list RB */
2458 #line 537 "pikchr.y"
2459 { p->list = yymsp[-2].minor.yy52; yymsp[-3].minor.yy58 = pik_elem_new(p,0,0,yymsp[-1].minor.yy52); if(yymsp[-3].minor.yy58) yymsp[-3].minor.yy58->errTok = yymsp[0].minor.yy0; }
2460 #line 2485 "pikchr.c"
2461 break;
2462 case 23: /* savelist ::= */
2463 #line 542 "pikchr.y"
2464 {yymsp[1].minor.yy52 = p->list; p->list = 0;}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2465 #line 2490 "pikchr.c"
2466 break;
2467 case 24: /* attribute_list ::= expr alist */
2468 #line 549 "pikchr.y"
2469 { pik_add_direction(p,0,&yymsp[-1].minor.yy149,0);}
2470 #line 2495 "pikchr.c"
2471 break;
2472 case 25: /* attribute_list ::= expr PERCENT alist */
2473 #line 550 "pikchr.y"
2474 { pik_add_direction(p,0,&yymsp[-2].minor.yy149,1);}
2475 #line 2500 "pikchr.c"
2476 break;
2477 case 26: /* attribute ::= numproperty expr PERCENT */
2478 #line 555 "pikchr.y"
2479 { pik_set_numprop(p,&yymsp[-2].minor.yy0,0.0,yymsp[-1].minor.yy149/100.0); }
2480 #line 2505 "pikchr.c"
2481 break;
2482 case 27: /* attribute ::= numproperty expr */
2483 case 30: /* attribute ::= colorproperty rvalue */ yytestcase(yyruleno==30);
2484 #line 556 "pikchr.y"
2485 { pik_set_numprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy149,0.0); }
2486 #line 2511 "pikchr.c"
2487 break;
2488 case 28: /* attribute ::= dashproperty expr */
2489 #line 557 "pikchr.y"
2490 { pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy149); }
2491 #line 2516 "pikchr.c"
2492 break;
2493 case 29: /* attribute ::= dashproperty */
2494 #line 558 "pikchr.y"
2495 { pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2496 #line 2521 "pikchr.c"
2497 break;
2498 case 31: /* attribute ::= go direction expr PERCENT */
2499 #line 561 "pikchr.y"
2500 { pik_add_direction(p,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy149,1);}
2501 #line 2526 "pikchr.c"
2502 break;
2503 case 32: /* attribute ::= go direction expr */
2504 #line 562 "pikchr.y"
2505 { pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy149,0);}
2506 #line 2531 "pikchr.c"
2507 break;
2508 case 33: /* attribute ::= go direction */
2509 #line 563 "pikchr.y"
2510 { pik_add_direction(p,&yymsp[0].minor.yy0,0,0); }
2511 #line 2536 "pikchr.c"
2512 break;
2513 case 34: /* attribute ::= go direction even position */
2514 #line 564 "pikchr.y"
2515 {pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy95);}
2516 #line 2541 "pikchr.c"
2517 break;
2518 case 35: /* attribute ::= CLOSE */
2519 #line 565 "pikchr.y"
2520 { pik_close_path(p,&yymsp[0].minor.yy0); }
2521 #line 2546 "pikchr.c"
2522 break;
2523 case 36: /* attribute ::= CHOP */
2524 #line 566 "pikchr.y"
2525 { p->cur->bChop = 1; }
2526 #line 2551 "pikchr.c"
2527 break;
2528 case 37: /* attribute ::= FROM position */
2529 #line 567 "pikchr.y"
2530 { pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy95); }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2531 #line 2556 "pikchr.c"
2532 break;
2533 case 38: /* attribute ::= TO position */
2534 #line 568 "pikchr.y"
2535 { pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy95); }
2536 #line 2561 "pikchr.c"
2537 break;
2538 case 39: /* attribute ::= THEN */
2539 #line 569 "pikchr.y"
2540 { pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2541 #line 2566 "pikchr.c"
2542 break;
2543 case 40: /* attribute ::= THEN expr HEADING expr */
2544 case 44: /* attribute ::= GO expr HEADING expr */ yytestcase(yyruleno==44);
2545 #line 571 "pikchr.y"
2546 {pik_move_hdg(p,&yymsp[-2].minor.yy149,&yymsp[-1].minor.yy0,yymsp[0].minor.yy149,0,&yymsp[-3].minor.yy0);}
2547 #line 2572 "pikchr.c"
2548 break;
2549 case 41: /* attribute ::= THEN HEADING expr */
2550 case 45: /* attribute ::= GO HEADING expr */ yytestcase(yyruleno==45);
2551 #line 572 "pikchr.y"
2552 {pik_move_hdg(p,0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy149,0,&yymsp[-2].minor.yy0);}
2553 #line 2578 "pikchr.c"
2554 break;
2555 case 42: /* attribute ::= THEN expr EDGEPT */
2556 case 46: /* attribute ::= GO expr EDGEPT */ yytestcase(yyruleno==46);
2557 #line 573 "pikchr.y"
2558 {pik_move_hdg(p,&yymsp[-1].minor.yy149,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);}
2559 #line 2584 "pikchr.c"
2560 break;
2561 case 43: /* attribute ::= THEN EDGEPT */
2562 case 47: /* attribute ::= GO EDGEPT */ yytestcase(yyruleno==47);
2563 #line 574 "pikchr.y"
2564 {pik_move_hdg(p,0,0,0,&yymsp[0].minor.yy0,&yymsp[-1].minor.yy0);}
2565 #line 2590 "pikchr.c"
2566 break;
2567 case 48: /* attribute ::= AT position */
2568 #line 580 "pikchr.y"
2569 { pik_set_at(p,0,&yymsp[0].minor.yy95,&yymsp[-1].minor.yy0); }
2570 #line 2595 "pikchr.c"
2571 break;
2572 case 49: /* attribute ::= SAME */
2573 #line 582 "pikchr.y"
2574 {pik_same(p,0,&yymsp[0].minor.yy0);}
2575 #line 2600 "pikchr.c"
2576 break;
2577 case 50: /* attribute ::= SAME AS object */
2578 #line 583 "pikchr.y"
2579 {pik_same(p,yymsp[0].minor.yy58,&yymsp[-2].minor.yy0);}
2580 #line 2605 "pikchr.c"
2581 break;
2582 case 51: /* attribute ::= STRING textposition */
2583 #line 584 "pikchr.y"
2584 {pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy92);}
2585 #line 2610 "pikchr.c"
2586 break;
2587 case 52: /* attribute ::= FIT */
2588 #line 585 "pikchr.y"
2589 {pik_size_to_fit(p,&yymsp[0].minor.yy0); }
2590 #line 2615 "pikchr.c"
2591 break;
2592 case 53: /* attribute ::= BEHIND object */
2593 #line 586 "pikchr.y"
2594 {pik_behind(p,yymsp[0].minor.yy58);}
2595 #line 2620 "pikchr.c"
2596 break;
2597 case 54: /* withclause ::= DOT_E edge AT position */
2598 case 55: /* withclause ::= edge AT position */ yytestcase(yyruleno==55);
2599 #line 594 "pikchr.y"
2600 { pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy95,&yymsp[-1].minor.yy0); }
2601 #line 2626 "pikchr.c"
2602 break;
2603 case 56: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2604 #line 598 "pikchr.y"
2605 {yylhsminor.yy0 = yymsp[0].minor.yy0;}
2606 #line 2631 "pikchr.c"
2607 yymsp[0].minor.yy0 = yylhsminor.yy0;
2608 break;
2609 case 57: /* boolproperty ::= CW */
2610 #line 609 "pikchr.y"
2611 {p->cur->cw = 1;}
2612 #line 2637 "pikchr.c"
2613 break;
2614 case 58: /* boolproperty ::= CCW */
2615 #line 610 "pikchr.y"
2616 {p->cur->cw = 0;}
2617 #line 2642 "pikchr.c"
2618 break;
2619 case 59: /* boolproperty ::= LARROW */
2620 #line 611 "pikchr.y"
2621 {p->cur->larrow=1; p->cur->rarrow=0; }
2622 #line 2647 "pikchr.c"
2623 break;
2624 case 60: /* boolproperty ::= RARROW */
2625 #line 612 "pikchr.y"
2626 {p->cur->larrow=0; p->cur->rarrow=1; }
2627 #line 2652 "pikchr.c"
2628 break;
2629 case 61: /* boolproperty ::= LRARROW */
2630 #line 613 "pikchr.y"
2631 {p->cur->larrow=1; p->cur->rarrow=1; }
2632 #line 2657 "pikchr.c"
2633 break;
2634 case 62: /* boolproperty ::= INVIS */
2635 #line 614 "pikchr.y"
2636 {p->cur->sw = 0.0;}
2637 #line 2662 "pikchr.c"
2638 break;
2639 case 63: /* boolproperty ::= THICK */
2640 #line 615 "pikchr.y"
2641 {p->cur->sw *= 1.5;}
2642 #line 2667 "pikchr.c"
2643 break;
2644 case 64: /* boolproperty ::= THIN */
2645 #line 616 "pikchr.y"
2646 {p->cur->sw *= 0.67;}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2647 #line 2672 "pikchr.c"
2648 break;
2649 case 65: /* textposition ::= */
2650 #line 618 "pikchr.y"
2651 {yymsp[1].minor.yy92 = 0;}
2652 #line 2677 "pikchr.c"
2653 break;
2654 case 66: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2655 #line 621 "pikchr.y"
2656 {yylhsminor.yy92 = pik_text_position(p,yymsp[-1].minor.yy92,&yymsp[0].minor.yy0);}
2657 #line 2682 "pikchr.c"
2658 yymsp[-1].minor.yy92 = yylhsminor.yy92;
2659 break;
2660 case 67: /* position ::= expr COMMA expr */
2661 #line 624 "pikchr.y"
2662 {yylhsminor.yy95.x=yymsp[-2].minor.yy149; yylhsminor.yy95.y=yymsp[0].minor.yy149;}
2663 #line 2688 "pikchr.c"
2664 yymsp[-2].minor.yy95 = yylhsminor.yy95;
2665 break;
2666 case 68: /* position ::= place PLUS expr COMMA expr */
2667 #line 626 "pikchr.y"
2668 {yylhsminor.yy95.x=yymsp[-4].minor.yy95.x+yymsp[-2].minor.yy149; yylhsminor.yy95.y=yymsp[-4].minor.yy95.y+yymsp[0].minor.yy149;}
2669 #line 2694 "pikchr.c"
2670 yymsp[-4].minor.yy95 = yylhsminor.yy95;
2671 break;
2672 case 69: /* position ::= place MINUS expr COMMA expr */
2673 #line 627 "pikchr.y"
2674 {yylhsminor.yy95.x=yymsp[-4].minor.yy95.x-yymsp[-2].minor.yy149; yylhsminor.yy95.y=yymsp[-4].minor.yy95.y-yymsp[0].minor.yy149;}
2675 #line 2700 "pikchr.c"
2676 yymsp[-4].minor.yy95 = yylhsminor.yy95;
2677 break;
2678 case 70: /* position ::= place PLUS LP expr COMMA expr RP */
2679 #line 629 "pikchr.y"
2680 {yylhsminor.yy95.x=yymsp[-6].minor.yy95.x+yymsp[-3].minor.yy149; yylhsminor.yy95.y=yymsp[-6].minor.yy95.y+yymsp[-1].minor.yy149;}
2681 #line 2706 "pikchr.c"
2682 yymsp[-6].minor.yy95 = yylhsminor.yy95;
2683 break;
2684 case 71: /* position ::= place MINUS LP expr COMMA expr RP */
2685 #line 631 "pikchr.y"
2686 {yylhsminor.yy95.x=yymsp[-6].minor.yy95.x-yymsp[-3].minor.yy149; yylhsminor.yy95.y=yymsp[-6].minor.yy95.y-yymsp[-1].minor.yy149;}
2687 #line 2712 "pikchr.c"
2688 yymsp[-6].minor.yy95 = yylhsminor.yy95;
2689 break;
2690 case 72: /* position ::= LP position COMMA position RP */
2691 #line 632 "pikchr.y"
2692 {yymsp[-4].minor.yy95.x=yymsp[-3].minor.yy95.x; yymsp[-4].minor.yy95.y=yymsp[-1].minor.yy95.y;}
2693 #line 2718 "pikchr.c"
2694 break;
2695 case 73: /* position ::= LP position RP */
2696 #line 633 "pikchr.y"
2697 {yymsp[-2].minor.yy95=yymsp[-1].minor.yy95;}
2698 #line 2723 "pikchr.c"
2699 break;
2700 case 74: /* position ::= expr between position AND position */
2701 #line 635 "pikchr.y"
2702 {yylhsminor.yy95 = pik_position_between(p,yymsp[-4].minor.yy149,yymsp[-2].minor.yy95,yymsp[0].minor.yy95);}
2703 #line 2728 "pikchr.c"
2704 yymsp[-4].minor.yy95 = yylhsminor.yy95;
2705 break;
2706 case 75: /* position ::= expr LT position COMMA position GT */
2707 #line 637 "pikchr.y"
2708 {yylhsminor.yy95 = pik_position_between(p,yymsp[-5].minor.yy149,yymsp[-3].minor.yy95,yymsp[-1].minor.yy95);}
2709 #line 2734 "pikchr.c"
2710 yymsp[-5].minor.yy95 = yylhsminor.yy95;
2711 break;
2712 case 76: /* position ::= expr ABOVE position */
2713 #line 638 "pikchr.y"
2714 {yylhsminor.yy95=yymsp[0].minor.yy95; yylhsminor.yy95.y += yymsp[-2].minor.yy149;}
2715 #line 2740 "pikchr.c"
2716 yymsp[-2].minor.yy95 = yylhsminor.yy95;
2717 break;
2718 case 77: /* position ::= expr BELOW position */
2719 #line 639 "pikchr.y"
2720 {yylhsminor.yy95=yymsp[0].minor.yy95; yylhsminor.yy95.y -= yymsp[-2].minor.yy149;}
2721 #line 2746 "pikchr.c"
2722 yymsp[-2].minor.yy95 = yylhsminor.yy95;
2723 break;
2724 case 78: /* position ::= expr LEFT OF position */
2725 #line 640 "pikchr.y"
2726 {yylhsminor.yy95=yymsp[0].minor.yy95; yylhsminor.yy95.x -= yymsp[-3].minor.yy149;}
2727 #line 2752 "pikchr.c"
2728 yymsp[-3].minor.yy95 = yylhsminor.yy95;
2729 break;
2730 case 79: /* position ::= expr RIGHT OF position */
2731 #line 641 "pikchr.y"
2732 {yylhsminor.yy95=yymsp[0].minor.yy95; yylhsminor.yy95.x += yymsp[-3].minor.yy149;}
2733 #line 2758 "pikchr.c"
2734 yymsp[-3].minor.yy95 = yylhsminor.yy95;
2735 break;
2736 case 80: /* position ::= expr ON HEADING EDGEPT OF position */
2737 #line 643 "pikchr.y"
2738 {yylhsminor.yy95 = pik_position_at_hdg(p,yymsp[-5].minor.yy149,&yymsp[-2].minor.yy0,yymsp[0].minor.yy95);}
2739 #line 2764 "pikchr.c"
2740 yymsp[-5].minor.yy95 = yylhsminor.yy95;
2741 break;
2742 case 81: /* position ::= expr HEADING EDGEPT OF position */
2743 #line 645 "pikchr.y"
2744 {yylhsminor.yy95 = pik_position_at_hdg(p,yymsp[-4].minor.yy149,&yymsp[-2].minor.yy0,yymsp[0].minor.yy95);}
2745 #line 2770 "pikchr.c"
2746 yymsp[-4].minor.yy95 = yylhsminor.yy95;
2747 break;
2748 case 82: /* position ::= expr EDGEPT OF position */
2749 #line 647 "pikchr.y"
2750 {yylhsminor.yy95 = pik_position_at_hdg(p,yymsp[-3].minor.yy149,&yymsp[-2].minor.yy0,yymsp[0].minor.yy95);}
2751 #line 2776 "pikchr.c"
2752 yymsp[-3].minor.yy95 = yylhsminor.yy95;
2753 break;
2754 case 83: /* position ::= expr ON HEADING expr FROM position */
2755 #line 649 "pikchr.y"
2756 {yylhsminor.yy95 = pik_position_at_angle(p,yymsp[-5].minor.yy149,yymsp[-2].minor.yy149,yymsp[0].minor.yy95);}
2757 #line 2782 "pikchr.c"
2758 yymsp[-5].minor.yy95 = yylhsminor.yy95;
2759 break;
2760 case 84: /* position ::= expr HEADING expr FROM position */
2761 #line 651 "pikchr.y"
2762 {yylhsminor.yy95 = pik_position_at_angle(p,yymsp[-4].minor.yy149,yymsp[-2].minor.yy149,yymsp[0].minor.yy95);}
2763 #line 2788 "pikchr.c"
2764 yymsp[-4].minor.yy95 = yylhsminor.yy95;
2765 break;
2766 case 85: /* place ::= edge OF object */
2767 #line 663 "pikchr.y"
2768 {yylhsminor.yy95 = pik_place_of_elem(p,yymsp[0].minor.yy58,&yymsp[-2].minor.yy0);}
2769 #line 2794 "pikchr.c"
2770 yymsp[-2].minor.yy95 = yylhsminor.yy95;
2771 break;
2772 case 86: /* place2 ::= object */
2773 #line 664 "pikchr.y"
2774 {yylhsminor.yy95 = pik_place_of_elem(p,yymsp[0].minor.yy58,0);}
2775 #line 2800 "pikchr.c"
2776 yymsp[0].minor.yy95 = yylhsminor.yy95;
2777 break;
2778 case 87: /* place2 ::= object DOT_E edge */
2779 #line 665 "pikchr.y"
2780 {yylhsminor.yy95 = pik_place_of_elem(p,yymsp[-2].minor.yy58,&yymsp[0].minor.yy0);}
2781 #line 2806 "pikchr.c"
2782 yymsp[-2].minor.yy95 = yylhsminor.yy95;
2783 break;
2784 case 88: /* place2 ::= NTH VERTEX OF object */
2785 #line 666 "pikchr.y"
2786 {yylhsminor.yy95 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy58);}
2787 #line 2812 "pikchr.c"
2788 yymsp[-3].minor.yy95 = yylhsminor.yy95;
2789 break;
2790 case 89: /* object ::= nth */
2791 #line 678 "pikchr.y"
2792 {yylhsminor.yy58 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2793 #line 2818 "pikchr.c"
2794 yymsp[0].minor.yy58 = yylhsminor.yy58;
2795 break;
2796 case 90: /* object ::= nth OF|IN object */
2797 #line 679 "pikchr.y"
2798 {yylhsminor.yy58 = pik_find_nth(p,yymsp[0].minor.yy58,&yymsp[-2].minor.yy0);}
2799 #line 2824 "pikchr.c"
2800 yymsp[-2].minor.yy58 = yylhsminor.yy58;
 
 
 
 
 
 
2801 break;
2802 case 91: /* objectname ::= PLACENAME */
2803 #line 681 "pikchr.y"
2804 {yylhsminor.yy58 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2805 #line 2830 "pikchr.c"
2806 yymsp[0].minor.yy58 = yylhsminor.yy58;
2807 break;
2808 case 92: /* objectname ::= objectname DOT_U PLACENAME */
2809 #line 683 "pikchr.y"
2810 {yylhsminor.yy58 = pik_find_byname(p,yymsp[-2].minor.yy58,&yymsp[0].minor.yy0);}
2811 #line 2836 "pikchr.c"
2812 yymsp[-2].minor.yy58 = yylhsminor.yy58;
2813 break;
2814 case 93: /* nth ::= NTH CLASSNAME */
2815 #line 685 "pikchr.y"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2816 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2817 #line 2842 "pikchr.c"
2818 yymsp[-1].minor.yy0 = yylhsminor.yy0;
2819 break;
2820 case 94: /* nth ::= NTH LAST CLASSNAME */
2821 #line 686 "pikchr.y"
2822 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2823 #line 2848 "pikchr.c"
2824 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2825 break;
2826 case 95: /* nth ::= LAST CLASSNAME */
2827 #line 687 "pikchr.y"
2828 {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2829 #line 2854 "pikchr.c"
2830 break;
2831 case 96: /* nth ::= LAST */
2832 #line 688 "pikchr.y"
2833 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2834 #line 2859 "pikchr.c"
2835 yymsp[0].minor.yy0 = yylhsminor.yy0;
2836 break;
2837 case 97: /* nth ::= NTH LB RB */
2838 #line 689 "pikchr.y"
2839 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2840 #line 2865 "pikchr.c"
2841 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2842 break;
2843 case 98: /* nth ::= NTH LAST LB RB */
2844 #line 690 "pikchr.y"
2845 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2846 #line 2871 "pikchr.c"
2847 yymsp[-3].minor.yy0 = yylhsminor.yy0;
2848 break;
2849 case 99: /* nth ::= LAST LB RB */
2850 #line 691 "pikchr.y"
2851 {yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2852 #line 2877 "pikchr.c"
2853 break;
2854 case 100: /* expr ::= expr PLUS expr */
2855 #line 693 "pikchr.y"
2856 {yylhsminor.yy149=yymsp[-2].minor.yy149+yymsp[0].minor.yy149;}
2857 #line 2882 "pikchr.c"
2858 yymsp[-2].minor.yy149 = yylhsminor.yy149;
2859 break;
2860 case 101: /* expr ::= expr MINUS expr */
2861 #line 694 "pikchr.y"
2862 {yylhsminor.yy149=yymsp[-2].minor.yy149-yymsp[0].minor.yy149;}
2863 #line 2888 "pikchr.c"
2864 yymsp[-2].minor.yy149 = yylhsminor.yy149;
2865 break;
2866 case 102: /* expr ::= expr STAR expr */
2867 #line 695 "pikchr.y"
2868 {yylhsminor.yy149=yymsp[-2].minor.yy149*yymsp[0].minor.yy149;}
2869 #line 2894 "pikchr.c"
2870 yymsp[-2].minor.yy149 = yylhsminor.yy149;
2871 break;
2872 case 103: /* expr ::= expr SLASH expr */
2873 #line 696 "pikchr.y"
2874 {
2875 if( yymsp[0].minor.yy149==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy149 = 0.0; }
2876 else{ yylhsminor.yy149 = yymsp[-2].minor.yy149/yymsp[0].minor.yy149; }
2877 }
2878 #line 2903 "pikchr.c"
2879 yymsp[-2].minor.yy149 = yylhsminor.yy149;
2880 break;
2881 case 104: /* expr ::= MINUS expr */
2882 #line 700 "pikchr.y"
2883 {yymsp[-1].minor.yy149=-yymsp[0].minor.yy149;}
2884 #line 2909 "pikchr.c"
2885 break;
2886 case 105: /* expr ::= PLUS expr */
2887 #line 701 "pikchr.y"
2888 {yymsp[-1].minor.yy149=yymsp[0].minor.yy149;}
2889 #line 2914 "pikchr.c"
2890 break;
2891 case 106: /* expr ::= LP expr RP */
2892 #line 702 "pikchr.y"
2893 {yymsp[-2].minor.yy149=yymsp[-1].minor.yy149;}
2894 #line 2919 "pikchr.c"
2895 break;
2896 case 107: /* expr ::= NUMBER */
2897 #line 703 "pikchr.y"
2898 {yylhsminor.yy149=pik_atof(p,&yymsp[0].minor.yy0);}
2899 #line 2924 "pikchr.c"
2900 yymsp[0].minor.yy149 = yylhsminor.yy149;
2901 break;
2902 case 108: /* expr ::= ID */
2903 #line 704 "pikchr.y"
2904 {yylhsminor.yy149=pik_get_var(p,&yymsp[0].minor.yy0);}
2905 #line 2930 "pikchr.c"
2906 yymsp[0].minor.yy149 = yylhsminor.yy149;
2907 break;
2908 case 109: /* expr ::= FUNC1 LP expr RP */
2909 #line 705 "pikchr.y"
2910 {yylhsminor.yy149 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy149,0.0);}
2911 #line 2936 "pikchr.c"
2912 yymsp[-3].minor.yy149 = yylhsminor.yy149;
2913 break;
2914 case 110: /* expr ::= FUNC2 LP expr COMMA expr RP */
2915 #line 706 "pikchr.y"
2916 {yylhsminor.yy149 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy149,yymsp[-1].minor.yy149);}
2917 #line 2942 "pikchr.c"
2918 yymsp[-5].minor.yy149 = yylhsminor.yy149;
2919 break;
2920 case 111: /* expr ::= place2 DOT_XY X */
2921 #line 707 "pikchr.y"
2922 {yylhsminor.yy149 = yymsp[-2].minor.yy95.x;}
2923 #line 2948 "pikchr.c"
2924 yymsp[-2].minor.yy149 = yylhsminor.yy149;
2925 break;
2926 case 112: /* expr ::= place2 DOT_XY Y */
2927 #line 708 "pikchr.y"
2928 {yylhsminor.yy149 = yymsp[-2].minor.yy95.y;}
2929 #line 2954 "pikchr.c"
2930 yymsp[-2].minor.yy149 = yylhsminor.yy149;
2931 break;
2932 case 113: /* expr ::= object DOT_L numproperty */
2933 case 114: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==114);
2934 case 115: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==115);
2935 #line 709 "pikchr.y"
2936 {yylhsminor.yy149=pik_property_of(p,yymsp[-2].minor.yy58,&yymsp[0].minor.yy0);}
2937 #line 2962 "pikchr.c"
2938 yymsp[-2].minor.yy149 = yylhsminor.yy149;
2939 break;
2940 default:
2941 /* (116) lvalue ::= ID */ yytestcase(yyruleno==116);
2942 /* (117) lvalue ::= FILL */ yytestcase(yyruleno==117);
2943 /* (118) lvalue ::= COLOR */ yytestcase(yyruleno==118);
2944 /* (119) lvalue ::= THICKNESS */ yytestcase(yyruleno==119);
2945 /* (120) rvalue ::= expr */ yytestcase(yyruleno==120);
2946 /* (121) print ::= PRINT */ yytestcase(yyruleno==121);
2947 /* (122) prlist ::= pritem (OPTIMIZED OUT) */ assert(yyruleno!=122);
2948 /* (123) prlist ::= prlist prsep pritem */ yytestcase(yyruleno==123);
2949 /* (124) direction ::= UP */ yytestcase(yyruleno==124);
2950 /* (125) direction ::= DOWN */ yytestcase(yyruleno==125);
2951 /* (126) direction ::= LEFT */ yytestcase(yyruleno==126);
2952 /* (127) direction ::= RIGHT */ yytestcase(yyruleno==127);
2953 /* (128) attribute_list ::= alist */ yytestcase(yyruleno==128);
2954 /* (129) alist ::= */ yytestcase(yyruleno==129);
2955 /* (130) alist ::= alist attribute */ yytestcase(yyruleno==130);
2956 /* (131) attribute ::= boolproperty (OPTIMIZED OUT) */ assert(yyruleno!=131);
2957 /* (132) attribute ::= WITH withclause */ yytestcase(yyruleno==132);
2958 /* (133) go ::= GO */ yytestcase(yyruleno==133);
2959 /* (134) go ::= */ yytestcase(yyruleno==134);
2960 /* (135) even ::= UNTIL EVEN WITH */ yytestcase(yyruleno==135);
2961 /* (136) even ::= EVEN WITH */ yytestcase(yyruleno==136);
2962 /* (137) dashproperty ::= DOTTED */ yytestcase(yyruleno==137);
2963 /* (138) dashproperty ::= DASHED */ yytestcase(yyruleno==138);
2964 /* (139) colorproperty ::= FILL */ yytestcase(yyruleno==139);
2965 /* (140) colorproperty ::= COLOR */ yytestcase(yyruleno==140);
2966 /* (141) position ::= place */ yytestcase(yyruleno==141);
2967 /* (142) between ::= WAY BETWEEN */ yytestcase(yyruleno==142);
2968 /* (143) between ::= BETWEEN */ yytestcase(yyruleno==143);
2969 /* (144) between ::= OF THE WAY BETWEEN */ yytestcase(yyruleno==144);
2970 /* (145) place ::= place2 */ yytestcase(yyruleno==145);
2971 /* (146) edge ::= CENTER */ yytestcase(yyruleno==146);
2972 /* (147) edge ::= EDGEPT */ yytestcase(yyruleno==147);
2973 /* (148) edge ::= TOP */ yytestcase(yyruleno==148);
2974 /* (149) edge ::= BOTTOM */ yytestcase(yyruleno==149);
2975 /* (150) edge ::= START */ yytestcase(yyruleno==150);
2976 /* (151) edge ::= END */ yytestcase(yyruleno==151);
2977 /* (152) edge ::= RIGHT */ yytestcase(yyruleno==152);
2978 /* (153) edge ::= LEFT */ yytestcase(yyruleno==153);
2979 /* (154) object ::= objectname */ yytestcase(yyruleno==154);
 
2980 break;
2981 /********** End reduce actions ************************************************/
2982 };
2983 assert( yyruleno<sizeof(yyRuleInfoLhs)/sizeof(yyRuleInfoLhs[0]) );
2984 yygoto = yyRuleInfoLhs[yyruleno];
@@ -3034,18 +3007,18 @@
3034 ){
3035 pik_parserARG_FETCH
3036 pik_parserCTX_FETCH
3037 #define TOKEN yyminor
3038 /************ Begin %syntax_error code ****************************************/
3039 #line 472 "pikchr.y"
3040
3041 if( TOKEN.z && TOKEN.z[0] ){
3042 pik_error(p, &TOKEN, "syntax error");
3043 }else{
3044 pik_error(p, 0, "syntax error");
3045 }
3046 #line 3071 "pikchr.c"
3047 /************ End %syntax_error code ******************************************/
3048 pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
3049 pik_parserCTX_STORE
3050 }
3051
@@ -3274,11 +3247,11 @@
3274 #else
3275 (void)iToken;
3276 return 0;
3277 #endif
3278 }
3279 #line 714 "pikchr.y"
3280
3281
3282
3283 /* Chart of the 140 official HTML color names with their
3284 ** corresponding RGB value.
@@ -3490,28 +3463,42 @@
3490 ** than true arcs. Multiple reasons: (1) the legacy-PIC parameters
3491 ** that control arcs are obscure and I could not figure out what they
3492 ** mean based on available documentation. (2) Arcs are rarely used,
3493 ** and so do not seem that important.
3494 */
3495 static void arcRender(Pik *p, PElem *pElem){
 
3496 PNum dx, dy;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3497 PPoint f, m, t;
3498 if( pElem->nPath<2 ) return;
3499 if( pElem->sw<=0.0 ) return;
3500 f = pElem->aPath[0];
3501 t = pElem->aPath[1];
3502 m.x = 0.5*(f.x+t.x);
3503 m.y = 0.5*(f.y+t.y);
3504 dx = t.x - f.x;
3505 dy = t.y - f.y;
3506 if( pElem->cw ){
3507 m.x -= 0.4*dy;
3508 m.y += 0.4*dx;
3509 }else{
3510 m.x += 0.4*dy;
3511 m.y -= 0.4*dx;
3512 }
3513 if( pElem->larrow ){
3514 pik_draw_arrowhead(p,&m,&f,pElem);
3515 }
3516 if( pElem->rarrow ){
3517 pik_draw_arrowhead(p,&m,&t,pElem);
@@ -4078,10 +4065,16 @@
4078 static void textInit(Pik *p, PElem *pElem){
4079 pik_value(p, "textwid",7,0);
4080 pik_value(p, "textht",6,0);
4081 pElem->sw = 0.0;
4082 }
 
 
 
 
 
 
4083
4084 /* Methods for the "sublist" class */
4085 static void sublistInit(Pik *p, PElem *pElem){
4086 PEList *pList = pElem->pSublist;
4087 int i;
@@ -4105,10 +4098,11 @@
4105 { /* name */ "arc",
4106 /* isline */ 1,
4107 /* eJust */ 0,
4108 /* xInit */ arcInit,
4109 /* xNumProp */ 0,
 
4110 /* xChop */ 0,
4111 /* xOffset */ 0,
4112 /* xFit */ 0,
4113 /* xRender */ arcRender
4114 },
@@ -4115,10 +4109,11 @@
4115 { /* name */ "arrow",
4116 /* isline */ 1,
4117 /* eJust */ 0,
4118 /* xInit */ arrowInit,
4119 /* xNumProp */ 0,
 
4120 /* xChop */ 0,
4121 /* xOffset */ lineOffset,
4122 /* xFit */ 0,
4123 /* xRender */ splineRender
4124 },
@@ -4125,10 +4120,11 @@
4125 { /* name */ "box",
4126 /* isline */ 0,
4127 /* eJust */ 1,
4128 /* xInit */ boxInit,
4129 /* xNumProp */ 0,
 
4130 /* xChop */ boxChop,
4131 /* xOffset */ boxOffset,
4132 /* xFit */ boxFit,
4133 /* xRender */ boxRender
4134 },
@@ -4135,10 +4131,11 @@
4135 { /* name */ "circle",
4136 /* isline */ 0,
4137 /* eJust */ 0,
4138 /* xInit */ circleInit,
4139 /* xNumProp */ circleNumProp,
 
4140 /* xChop */ circleChop,
4141 /* xOffset */ ellipseOffset,
4142 /* xFit */ circleFit,
4143 /* xRender */ circleRender
4144 },
@@ -4145,10 +4142,11 @@
4145 { /* name */ "cylinder",
4146 /* isline */ 0,
4147 /* eJust */ 1,
4148 /* xInit */ cylinderInit,
4149 /* xNumProp */ 0,
 
4150 /* xChop */ boxChop,
4151 /* xOffset */ cylinderOffset,
4152 /* xFit */ 0,
4153 /* xRender */ cylinderRender
4154 },
@@ -4155,10 +4153,11 @@
4155 { /* name */ "dot",
4156 /* isline */ 0,
4157 /* eJust */ 0,
4158 /* xInit */ dotInit,
4159 /* xNumProp */ dotNumProp,
 
4160 /* xChop */ circleChop,
4161 /* xOffset */ ellipseOffset,
4162 /* xFit */ 0,
4163 /* xRender */ dotRender
4164 },
@@ -4165,10 +4164,11 @@
4165 { /* name */ "ellipse",
4166 /* isline */ 0,
4167 /* eJust */ 0,
4168 /* xInit */ ellipseInit,
4169 /* xNumProp */ 0,
 
4170 /* xChop */ ellipseChop,
4171 /* xOffset */ ellipseOffset,
4172 /* xFit */ 0,
4173 /* xRender */ ellipseRender
4174 },
@@ -4175,10 +4175,11 @@
4175 { /* name */ "file",
4176 /* isline */ 0,
4177 /* eJust */ 1,
4178 /* xInit */ fileInit,
4179 /* xNumProp */ 0,
 
4180 /* xChop */ boxChop,
4181 /* xOffset */ fileOffset,
4182 /* xFit */ fileFit,
4183 /* xRender */ fileRender
4184 },
@@ -4185,10 +4186,11 @@
4185 { /* name */ "line",
4186 /* isline */ 1,
4187 /* eJust */ 0,
4188 /* xInit */ lineInit,
4189 /* xNumProp */ 0,
 
4190 /* xChop */ 0,
4191 /* xOffset */ lineOffset,
4192 /* xFit */ 0,
4193 /* xRender */ splineRender
4194 },
@@ -4195,10 +4197,11 @@
4195 { /* name */ "move",
4196 /* isline */ 1,
4197 /* eJust */ 0,
4198 /* xInit */ moveInit,
4199 /* xNumProp */ 0,
 
4200 /* xChop */ 0,
4201 /* xOffset */ 0,
4202 /* xFit */ 0,
4203 /* xRender */ moveRender
4204 },
@@ -4205,10 +4208,11 @@
4205 { /* name */ "oval",
4206 /* isline */ 0,
4207 /* eJust */ 1,
4208 /* xInit */ ovalInit,
4209 /* xNumProp */ ovalNumProp,
 
4210 /* xChop */ boxChop,
4211 /* xOffset */ boxOffset,
4212 /* xFit */ ovalFit,
4213 /* xRender */ boxRender
4214 },
@@ -4215,10 +4219,11 @@
4215 { /* name */ "spline",
4216 /* isline */ 1,
4217 /* eJust */ 0,
4218 /* xInit */ splineInit,
4219 /* xNumProp */ 0,
 
4220 /* xChop */ 0,
4221 /* xOffset */ lineOffset,
4222 /* xFit */ 0,
4223 /* xRender */ splineRender
4224 },
@@ -4225,10 +4230,11 @@
4225 { /* name */ "text",
4226 /* isline */ 0,
4227 /* eJust */ 0,
4228 /* xInit */ textInit,
4229 /* xNumProp */ 0,
 
4230 /* xChop */ boxChop,
4231 /* xOffset */ boxOffset,
4232 /* xFit */ boxFit,
4233 /* xRender */ boxRender
4234 },
@@ -4237,10 +4243,11 @@
4237 { /* name */ "[]",
4238 /* isline */ 0,
4239 /* eJust */ 0,
4240 /* xInit */ sublistInit,
4241 /* xNumProp */ 0,
 
4242 /* xChop */ 0,
4243 /* xOffset */ 0,
4244 /* xFit */ 0,
4245 /* xRender */ 0
4246 };
@@ -4248,10 +4255,11 @@
4248 { /* name */ "noop",
4249 /* isline */ 0,
4250 /* eJust */ 0,
4251 /* xInit */ 0,
4252 /* xNumProp */ 0,
 
4253 /* xChop */ 0,
4254 /* xOffset */ 0,
4255 /* xFit */ 0,
4256 /* xRender */ 0
4257 };
@@ -5117,56 +5125,53 @@
5117 ** Set a numeric property like "width 7" or "radius 200%".
5118 **
5119 ** The rAbs term is an absolute value to add in. rRel is
5120 ** a relative value by which to change the current value.
5121 */
5122 void pik_set_numprop(Pik *p, PToken *pId, PNum rAbs, PNum rRel){
5123 PElem *pElem = p->cur;
5124 switch( pId->eType ){
5125 case T_HEIGHT:
5126 if( pik_param_ok(p, pElem, pId, A_HEIGHT, A_BOTTOM|A_TOP|A_AT) ) return;
5127 pElem->h = pElem->h*rRel + rAbs;
5128 break;
5129 case T_TOP:
5130 if( pik_param_ok(p, pElem, pId, A_TOP, A_BOTTOM|A_WIDTH|A_AT) ) return;
5131 pElem->top = rAbs;
5132 break;
5133 case T_BOTTOM:
5134 if( pik_param_ok(p, pElem, pId, A_BOTTOM, A_TOP|A_WIDTH|A_AT) ) return;
5135 pElem->bottom = rAbs;
5136 break;
5137 case T_WIDTH:
5138 if( pik_param_ok(p, pElem, pId, A_WIDTH, A_RIGHT|A_LEFT|A_AT) ) return;
5139 pElem->w = pElem->w*rRel + rAbs;
5140 break;
5141 case T_RIGHT:
5142 if( pik_param_ok(p, pElem, pId, A_RIGHT, A_WIDTH|A_LEFT|A_AT) ) return;
5143 pElem->right = rAbs;
5144 break;
5145 case T_LEFT:
5146 if( pik_param_ok(p, pElem, pId, A_LEFT, A_WIDTH|A_RIGHT|A_AT) ) return;
5147 pElem->left = rAbs;
5148 break;
5149 case T_RADIUS:
5150 if( pik_param_ok(p, pElem, pId, A_RADIUS, 0) ) return;
5151 pElem->rad = pElem->rad*rRel + rAbs;
5152 break;
5153 case T_DIAMETER:
5154 if( pik_param_ok(p, pElem, pId, A_RADIUS, 0) ) return;
5155 pElem->rad = pElem->rad*rRel + 0.5*rAbs; /* diam it 2x radius */
5156 break;
5157 case T_THICKNESS:
5158 if( pik_param_ok(p, pElem, pId, A_THICKNESS, 0) ) return;
5159 pElem->sw = pElem->sw*rRel + rAbs;
5160 break;
 
 
 
 
 
 
 
 
 
 
 
 
 
5161 case T_FILL:
5162 if( pik_param_ok(p, pElem, pId, A_FILL, 0) ) return;
5163 pElem->fill = rAbs;
5164 break;
5165 case T_COLOR:
5166 if( pik_param_ok(p, pElem, pId, A_COLOR, 0) ) return;
5167 pElem->color = rAbs;
5168 break;
5169 }
5170 if( pElem->type->xNumProp ){
5171 pElem->type->xNumProp(p, pElem, pId);
5172 }
@@ -5231,75 +5236,50 @@
5231 p->mTPath = 0;
5232 return n;
5233 }
5234
5235 /* Add a direction term to an element. "up 0.5", or "left 3", or "down"
5236 ** or "down to 1.3". Specific processing depends on parameters:
5237 **
5238 ** pVal==0 Add the default width or height to the coordinate.
5239 ** Used to implement "down" and similar.
5240 **
5241 ** rel==0 Add or subtract *pVal to the path coordinate. Used to
5242 ** implement "up 0.5" and similar.
5243 **
5244 ** rel==1 Multiple 0.01*pVal with the width or height (as appropriate)
5245 ** and add that to the coordinate. Used for "left 50%" and
5246 ** similar.
5247 **
5248 ** rel==2 Make the coordinate exactly equal to *pVal. Used to
5249 ** implement things like "down to 1.3".
5250 */
5251 static void pik_add_direction(Pik *p, PToken *pDir, PNum *pVal, int rel){
5252 PElem *pElem = p->cur;
5253 int n;
5254 int dir;
5255 PNum scale = 1.0;
5256 if( !pElem->type->isLine ){
5257 if( pDir ){
5258 pik_error(p, pDir, "use with line-oriented objects only");
5259 }else{
5260 PToken x = pik_next_semantic_token(p, &pElem->errTok);
5261 pik_error(p, &x, "syntax error");
5262 }
5263 return;
5264 }
5265 if( pVal && rel==1 ){
5266 scale = *pVal/100;
5267 pVal = 0;
5268 }
5269 if( rel==2 ){
5270 pElem->mProp |= A_FROM;
5271 }
5272 n = p->nTPath - 1;
5273 if( p->thenFlag || p->mTPath==3 || n==0 ){
5274 n = pik_next_rpath(p, pDir);
5275 p->thenFlag = 0;
5276 }
5277 dir = pDir ? pDir->eCode : p->eDir;
5278 switch( dir ){
5279 case DIR_UP:
5280 if( p->mTPath & 2 ) n = pik_next_rpath(p, pDir);
5281 if( rel==2 ) p->aTPath[n].y = 0;
5282 p->aTPath[n].y += (pVal ? *pVal : pElem->h*scale);
5283 p->mTPath |= 2;
5284 break;
5285 case DIR_DOWN:
5286 if( p->mTPath & 2 ) n = pik_next_rpath(p, pDir);
5287 if( rel==2 ) p->aTPath[n].y = 0;
5288 p->aTPath[n].y -= (pVal ? *pVal : pElem->h*scale);
5289 p->mTPath |= 2;
5290 break;
5291 case DIR_RIGHT:
5292 if( p->mTPath & 1 ) n = pik_next_rpath(p, pDir);
5293 if( rel==2 ) p->aTPath[n].x = 0;
5294 p->aTPath[n].x += (pVal ? *pVal : pElem->w*scale);
5295 p->mTPath |= 1;
5296 break;
5297 case DIR_LEFT:
5298 if( p->mTPath & 1 ) n = pik_next_rpath(p, pDir);
5299 if( rel==2 ) p->aTPath[n].x = 0;
5300 p->aTPath[n].x -= (pVal ? *pVal : pElem->w*scale);
5301 p->mTPath |= 1;
5302 break;
5303 }
5304 pElem->outDir = dir;
5305 }
@@ -5306,34 +5286,27 @@
5306
5307 /* Process a movement attribute of one of these forms:
5308 **
5309 ** pDist pHdgKW rHdg pEdgept
5310 ** GO distance HEADING angle
5311 ** GO HEADING angle
5312 ** GO distance compasspoint
5313 ** GO compasspoint
5314 */
5315 static void pik_move_hdg(
5316 Pik *p, /* The Pikchr context */
5317 PNum *pDist, /* Distance to move. NULL means standard distance */
5318 PToken *pHeading, /* "heading" keyword if present */
5319 PNum rHdg, /* Angle argument to "heading" keyword */
5320 PToken *pEdgept, /* EDGEPT keyword "ne", "sw", etc... */
5321 PToken *pErr /* Token to use for error messages */
5322 ){
5323 PElem *pElem = p->cur;
5324 int n;
5325 PNum rDist;
5326 if( !pElem->type->isLine ){
5327 pik_error(p, pErr, "use with line-oriented objects only");
5328 return;
5329 }
5330 if( pDist ){
5331 rDist = *pDist;
5332 }else{
5333 rDist = pik_value(p, "linewid", 7, 0);
5334 }
5335 do{
5336 n = pik_next_rpath(p, pErr);
5337 }while( n<1 );
5338 if( pHeading ){
5339 if( rHdg<0.0 || rHdg>360.0 ){
@@ -6124,11 +6097,11 @@
6124 default: p->aTPath[1].x += pElem->w; break;
6125 case DIR_DOWN: p->aTPath[1].y -= pElem->h; break;
6126 case DIR_LEFT: p->aTPath[1].x -= pElem->w; break;
6127 case DIR_UP: p->aTPath[1].y += pElem->h; break;
6128 }
6129 if( strcmp(pElem->type->zName,"arc")==0 ){
6130 p->eDir = pElem->outDir = (pElem->inDir + (pElem->cw ? 1 : 3))%4;
6131 switch( pElem->outDir ){
6132 default: p->aTPath[1].x += pElem->w; break;
6133 case DIR_DOWN: p->aTPath[1].y -= pElem->h; break;
6134 case DIR_LEFT: p->aTPath[1].x -= pElem->w; break;
@@ -6135,19 +6108,22 @@
6135 case DIR_UP: p->aTPath[1].y += pElem->h; break;
6136 }
6137 }
6138 }
6139
6140 /* Run "fit" on the text type automatically */
6141 if( pElem->type->xInit==textInit && pElem->nTxt ){
6142 pik_size_to_fit(p, &pElem->errTok);
 
 
 
 
6143 }
6144
6145 /* Compute final bounding box, entry and exit points, center
6146 ** point (ptAt) and path for the element
6147 */
6148 pik_bbox_init(&pElem->bbox);
6149 if( pElem->type->isLine ){
6150 pElem->aPath = malloc( sizeof(PPoint)*p->nTPath );
6151 if( pElem->aPath==0 ){
6152 pik_error(p, 0, 0);
6153 pElem->nPath = 0;
@@ -6996,6 +6972,6 @@
6996 printf("</body></html>\n");
6997 return 0;
6998 }
6999 #endif /* PIKCHR_SHELL */
7000
7001 #line 7026 "pikchr.c"
7002
--- src/pikchr.c
+++ src/pikchr.c
@@ -131,10 +131,11 @@
131 typedef struct PToken PToken; /* A single token */
132 typedef struct PElem PElem; /* A single diagram object or "element" */
133 typedef struct PEList PEList; /* A list of elements */
134 typedef struct PClass PClass; /* Description of elements types */
135 typedef double PNum; /* Numeric value */
136 typedef struct PRel PRel; /* Absolute or percentage value */
137 typedef struct PPoint PPoint; /* A position in 2-D space */
138 typedef struct PVar PVar; /* script-defined variable */
139 typedef struct PBox PBox; /* A bounding box */
140
141 /* Compass points */
@@ -198,10 +199,24 @@
199
200 /* A bounding box */
201 struct PBox {
202 PPoint sw, ne; /* Lower-left and top-right corners */
203 };
204
205 /* An Absolute or a relative distance. The absolute distance
206 ** is stored in rAbs and the relative distance is stored in rRel.
207 ** Usually, one or the other will be 0.0. When using a PRel to
208 ** update an existing value, the computation is usually something
209 ** like this:
210 **
211 ** value = PRel.rAbs + value*PRel.rRel
212 **
213 */
214 struct PRel {
215 PNum rAbs; /* Absolute value */
216 PNum rRel; /* Value relative to current value */
217 };
218
219 /* A variable created by the ID = EXPR construct of the PIKCHR script
220 **
221 ** PIKCHR (and PIC) scripts do not use many varaibles, so it is reasonable
222 ** to store them all on a linked list.
@@ -351,14 +366,15 @@
366 */
367 struct PClass {
368 const char *zName; /* Name of class */
369 char isLine; /* True if a line class */
370 char eJust; /* Use box-style text justification */
371 void (*xInit)(Pik*,PElem*); /* Initializer */
372 void (*xNumProp)(Pik*,PElem*,PToken*); /* Value change notification */
373 void (*xCheck)(Pik*,PElem*); /* Checks to after parsing */
374 PPoint (*xChop)(PElem*,PPoint*); /* Chopper */
375 PPoint (*xOffset)(Pik*,PElem*,int); /* Offset from .c to edge point */
376 void (*xFit)(Pik*,PElem*,PNum w,PNum h); /* Size to fit text */
377 void (*xRender)(Pik*,PElem*); /* Render */
378 };
379
380
@@ -391,15 +407,16 @@
407 static PNum pik_get_var(Pik*,PToken*);
408 static PNum pik_atof(Pik*,PToken*);
409 static void pik_after_adding_attributes(Pik*,PElem*);
410 static void pik_elem_move(PElem*,PNum dx, PNum dy);
411 static void pik_elist_move(PEList*,PNum dx, PNum dy);
412 static void pik_set_numprop(Pik*,PToken*,PRel*);
413 static void pik_set_clrprop(Pik*,PToken*,PNum);
414 static void pik_set_dashed(Pik*,PToken*,PNum*);
415 static void pik_then(Pik*,PToken*,PElem*);
416 static void pik_add_direction(Pik*,PToken*,PRel*);
417 static void pik_move_hdg(Pik*,PRel*,PToken*,PNum,PToken*,PToken*);
418 static void pik_evenwith(Pik*,PToken*,PPoint*);
419 static void pik_set_from(Pik*,PElem*,PToken*,PPoint*);
420 static void pik_add_to(Pik*,PElem*,PToken*,PPoint*);
421 static void pik_close_path(Pik*,PToken*);
422 static void pik_set_at(Pik*,PToken*,PPoint*,PToken*);
@@ -428,11 +445,11 @@
445 static void pik_behind(Pik*,PElem*);
446 static PElem *pik_assert(Pik*,PNum,PToken*,PNum);
447 static PElem *pik_place_assert(Pik*,PPoint*,PToken*,PPoint*);
448
449
450 #line 476 "pikchr.c"
451 /**************** End of %include directives **********************************/
452 /* These constants specify the various numeric values for terminal symbols.
453 ***************** Begin token definitions *************************************/
454 #ifndef T_ID
455 #define T_ID 1
@@ -585,21 +602,22 @@
602 #ifndef INTERFACE
603 # define INTERFACE 1
604 #endif
605 /************* Begin control #defines *****************************************/
606 #define YYCODETYPE unsigned char
607 #define YYNOCODE 130
608 #define YYACTIONTYPE unsigned short int
609 #define pik_parserTOKENTYPE PToken
610 typedef union {
611 int yyinit;
612 pik_parserTOKENTYPE yy0;
613 PRel yy60;
614 PEList* yy72;
615 PNum yy73;
616 int yy74;
617 PPoint yy139;
618 PElem* yy254;
619 } YYMINORTYPE;
620 #ifndef YYSTACKDEPTH
621 #define YYSTACKDEPTH 100
622 #endif
623 #define pik_parserARG_SDECL
@@ -611,22 +629,22 @@
629 #define pik_parserCTX_PDECL ,Pik *p
630 #define pik_parserCTX_PARAM ,p
631 #define pik_parserCTX_FETCH Pik *p=yypParser->p;
632 #define pik_parserCTX_STORE yypParser->p=p;
633 #define YYFALLBACK 1
634 #define YYNSTATE 157
635 #define YYNRULE 151
636 #define YYNRULE_WITH_ACTION 111
637 #define YYNTOKEN 94
638 #define YY_MAX_SHIFT 156
639 #define YY_MIN_SHIFTREDUCE 276
640 #define YY_MAX_SHIFTREDUCE 426
641 #define YY_ERROR_ACTION 427
642 #define YY_ACCEPT_ACTION 428
643 #define YY_NO_ACTION 429
644 #define YY_MIN_REDUCE 430
645 #define YY_MAX_REDUCE 580
646 /************* End control #defines *******************************************/
647 #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
648
649 /* Define the yytestcase() macro to be a no-op if is not already defined
650 ** otherwise.
@@ -689,333 +707,308 @@
707 ** yy_reduce_ofst[] For each state, the offset into yy_action for
708 ** shifting non-terminals after a reduce.
709 ** yy_default[] Default action for each state.
710 **
711 *********** Begin parsing tables **********************************************/
712 #define YY_ACTTAB_COUNT (1159)
713 static const YYACTIONTYPE yy_action[] = {
714 /* 0 */ 554, 430, 21, 436, 25, 71, 126, 142, 50, 46,
715 /* 10 */ 554, 33, 437, 111, 118, 154, 117, 125, 411, 412,
716 /* 20 */ 327, 538, 78, 512, 539, 540, 554, 62, 61, 60,
717 /* 30 */ 59, 310, 311, 6, 5, 30, 143, 29, 4, 69,
718 /* 40 */ 124, 24, 323, 64, 558, 294, 45, 327, 327, 327,
719 /* 50 */ 327, 409, 410, 328, 329, 330, 331, 332, 333, 334,
720 /* 60 */ 335, 457, 62, 61, 60, 59, 119, 431, 438, 25,
721 /* 70 */ 33, 457, 67, 434, 27, 286, 478, 154, 117, 411,
722 /* 80 */ 412, 327, 28, 78, 156, 344, 298, 457, 428, 23,
723 /* 90 */ 318, 8, 310, 311, 6, 5, 30, 80, 29, 4,
724 /* 100 */ 69, 124, 81, 323, 64, 475, 154, 117, 327, 327,
725 /* 110 */ 327, 327, 409, 410, 328, 329, 330, 331, 332, 333,
726 /* 120 */ 334, 335, 379, 419, 41, 57, 58, 73, 62, 61,
727 /* 130 */ 60, 59, 32, 362, 382, 383, 20, 287, 379, 419,
728 /* 140 */ 40, 57, 58, 77, 316, 296, 76, 60, 59, 362,
729 /* 150 */ 425, 424, 20, 67, 337, 337, 337, 337, 337, 337,
730 /* 160 */ 337, 337, 337, 337, 366, 150, 425, 424, 387, 362,
731 /* 170 */ 364, 151, 62, 61, 60, 59, 301, 34, 42, 146,
732 /* 180 */ 26, 123, 418, 365, 152, 388, 389, 390, 392, 77,
733 /* 190 */ 65, 296, 76, 73, 395, 396, 397, 398, 418, 104,
734 /* 200 */ 2, 420, 421, 422, 423, 142, 7, 115, 378, 149,
735 /* 210 */ 148, 121, 120, 154, 117, 104, 3, 420, 421, 422,
736 /* 220 */ 423, 128, 408, 115, 378, 149, 148, 379, 419, 407,
737 /* 230 */ 57, 58, 116, 343, 121, 106, 416, 71, 362, 142,
738 /* 240 */ 63, 56, 414, 115, 480, 111, 118, 154, 117, 36,
739 /* 250 */ 132, 133, 52, 35, 9, 425, 424, 11, 136, 134,
740 /* 260 */ 62, 61, 60, 59, 62, 61, 60, 59, 143, 395,
741 /* 270 */ 396, 397, 398, 377, 556, 74, 556, 377, 13, 51,
742 /* 280 */ 85, 39, 142, 43, 14, 141, 140, 418, 122, 118,
743 /* 290 */ 154, 117, 38, 364, 151, 136, 134, 62, 61, 60,
744 /* 300 */ 59, 15, 66, 112, 104, 346, 420, 421, 422, 423,
745 /* 310 */ 18, 143, 115, 378, 149, 148, 51, 516, 1, 54,
746 /* 320 */ 17, 16, 141, 140, 55, 510, 154, 117, 19, 38,
747 /* 330 */ 139, 135, 415, 379, 370, 363, 57, 58, 62, 61,
748 /* 340 */ 60, 59, 368, 369, 103, 68, 153, 56, 155, 37,
749 /* 350 */ 289, 290, 291, 429, 293, 116, 516, 17, 16, 379,
750 /* 360 */ 429, 516, 57, 58, 516, 19, 429, 139, 135, 415,
751 /* 370 */ 362, 379, 456, 56, 57, 58, 429, 429, 62, 61,
752 /* 380 */ 60, 59, 362, 429, 379, 56, 429, 57, 58, 429,
753 /* 390 */ 379, 377, 429, 57, 58, 362, 429, 47, 56, 429,
754 /* 400 */ 429, 103, 129, 127, 56, 419, 456, 515, 154, 117,
755 /* 410 */ 104, 62, 61, 60, 59, 362, 429, 429, 115, 378,
756 /* 420 */ 149, 148, 429, 379, 137, 429, 57, 58, 513, 154,
757 /* 430 */ 117, 429, 425, 424, 362, 429, 104, 56, 379, 138,
758 /* 440 */ 10, 57, 58, 429, 115, 378, 149, 148, 104, 362,
759 /* 450 */ 429, 379, 56, 429, 57, 58, 115, 378, 149, 148,
760 /* 460 */ 429, 104, 362, 429, 418, 44, 429, 104, 429, 115,
761 /* 470 */ 378, 149, 148, 429, 429, 115, 378, 149, 148, 429,
762 /* 480 */ 429, 104, 429, 420, 421, 422, 423, 379, 429, 115,
763 /* 490 */ 57, 58, 62, 61, 60, 59, 429, 429, 362, 429,
764 /* 500 */ 104, 48, 429, 105, 429, 429, 429, 429, 115, 378,
765 /* 510 */ 149, 148, 118, 154, 117, 104, 461, 411, 412, 327,
766 /* 520 */ 429, 12, 105, 115, 378, 149, 148, 419, 104, 429,
767 /* 530 */ 429, 118, 154, 117, 147, 446, 115, 378, 149, 148,
768 /* 540 */ 429, 429, 75, 75, 429, 429, 327, 327, 327, 327,
769 /* 550 */ 409, 410, 429, 147, 425, 424, 429, 429, 71, 429,
770 /* 560 */ 142, 429, 429, 429, 104, 479, 111, 118, 154, 117,
771 /* 570 */ 86, 72, 115, 378, 149, 148, 429, 429, 429, 118,
772 /* 580 */ 154, 117, 429, 71, 429, 142, 418, 429, 429, 143,
773 /* 590 */ 473, 111, 118, 154, 117, 429, 429, 62, 61, 60,
774 /* 600 */ 59, 147, 429, 429, 429, 420, 421, 422, 423, 71,
775 /* 610 */ 342, 142, 429, 429, 143, 429, 467, 111, 118, 154,
776 /* 620 */ 117, 429, 71, 429, 142, 429, 429, 429, 429, 466,
777 /* 630 */ 111, 118, 154, 117, 429, 71, 429, 142, 429, 429,
778 /* 640 */ 143, 429, 499, 111, 118, 154, 117, 71, 429, 142,
779 /* 650 */ 87, 429, 429, 143, 131, 111, 118, 154, 117, 118,
780 /* 660 */ 154, 117, 429, 71, 429, 142, 143, 429, 429, 429,
781 /* 670 */ 507, 111, 118, 154, 117, 429, 429, 429, 143, 429,
782 /* 680 */ 429, 147, 71, 429, 142, 429, 429, 429, 429, 509,
783 /* 690 */ 111, 118, 154, 117, 143, 62, 61, 60, 59, 429,
784 /* 700 */ 429, 62, 61, 60, 59, 429, 429, 71, 341, 142,
785 /* 710 */ 429, 429, 429, 143, 506, 111, 118, 154, 117, 71,
786 /* 720 */ 49, 142, 62, 61, 60, 59, 508, 111, 118, 154,
787 /* 730 */ 117, 429, 71, 429, 142, 381, 429, 429, 143, 505,
788 /* 740 */ 111, 118, 154, 117, 71, 419, 142, 429, 429, 429,
789 /* 750 */ 143, 504, 111, 118, 154, 117, 429, 71, 429, 142,
790 /* 760 */ 429, 429, 429, 143, 503, 111, 118, 154, 117, 71,
791 /* 770 */ 429, 142, 425, 424, 429, 143, 502, 111, 118, 154,
792 /* 780 */ 117, 429, 429, 71, 429, 142, 429, 429, 143, 429,
793 /* 790 */ 501, 111, 118, 154, 117, 429, 62, 61, 60, 59,
794 /* 800 */ 143, 429, 429, 429, 418, 429, 429, 429, 71, 380,
795 /* 810 */ 142, 429, 429, 429, 143, 144, 111, 118, 154, 117,
796 /* 820 */ 71, 429, 142, 420, 421, 422, 423, 145, 111, 118,
797 /* 830 */ 154, 117, 429, 70, 429, 142, 429, 429, 429, 143,
798 /* 840 */ 110, 111, 118, 154, 117, 71, 429, 142, 429, 429,
799 /* 850 */ 429, 143, 130, 111, 118, 154, 117, 429, 71, 429,
800 /* 860 */ 142, 429, 92, 429, 143, 463, 111, 118, 154, 117,
801 /* 870 */ 429, 118, 154, 117, 92, 429, 143, 22, 462, 462,
802 /* 880 */ 429, 429, 429, 118, 154, 117, 432, 438, 25, 143,
803 /* 890 */ 79, 105, 434, 147, 429, 429, 429, 449, 429, 31,
804 /* 900 */ 118, 154, 117, 156, 446, 147, 429, 429, 23, 429,
805 /* 910 */ 429, 429, 548, 107, 431, 438, 25, 429, 92, 429,
806 /* 920 */ 434, 429, 147, 429, 429, 429, 429, 118, 154, 117,
807 /* 930 */ 92, 156, 429, 429, 108, 108, 23, 429, 429, 118,
808 /* 940 */ 154, 117, 92, 429, 429, 429, 109, 109, 429, 147,
809 /* 950 */ 429, 118, 154, 117, 105, 429, 429, 429, 458, 84,
810 /* 960 */ 429, 147, 429, 118, 154, 117, 97, 435, 118, 154,
811 /* 970 */ 117, 98, 429, 147, 429, 118, 154, 117, 88, 429,
812 /* 980 */ 118, 154, 117, 82, 429, 147, 429, 118, 154, 117,
813 /* 990 */ 147, 429, 118, 154, 117, 429, 99, 147, 429, 429,
814 /* 1000 */ 429, 89, 147, 429, 429, 118, 154, 117, 429, 147,
815 /* 1010 */ 118, 154, 117, 90, 147, 62, 61, 60, 59, 83,
816 /* 1020 */ 429, 429, 118, 154, 117, 429, 100, 147, 118, 154,
817 /* 1030 */ 117, 429, 147, 429, 53, 118, 154, 117, 91, 62,
818 /* 1040 */ 61, 60, 59, 429, 147, 101, 429, 118, 154, 117,
819 /* 1050 */ 147, 102, 377, 429, 118, 154, 117, 147, 429, 429,
820 /* 1060 */ 118, 154, 117, 93, 429, 429, 429, 429, 94, 147,
821 /* 1070 */ 429, 429, 118, 154, 117, 95, 147, 118, 154, 117,
822 /* 1080 */ 96, 429, 147, 429, 118, 154, 117, 530, 429, 118,
823 /* 1090 */ 154, 117, 529, 429, 147, 429, 118, 154, 117, 147,
824 /* 1100 */ 429, 118, 154, 117, 528, 429, 147, 429, 429, 429,
825 /* 1110 */ 527, 147, 429, 118, 154, 117, 429, 429, 147, 118,
826 /* 1120 */ 154, 117, 113, 147, 429, 429, 429, 114, 429, 429,
827 /* 1130 */ 429, 118, 154, 117, 429, 147, 118, 154, 117, 429,
828 /* 1140 */ 429, 147, 429, 429, 429, 429, 429, 429, 429, 429,
829 /* 1150 */ 429, 429, 429, 147, 429, 429, 429, 429, 147,
 
 
 
 
 
 
 
 
 
 
 
830 };
831 static const YYCODETYPE yy_lookahead[] = {
832 /* 0 */ 0, 0, 128, 96, 97, 98, 100, 100, 4, 5,
833 /* 10 */ 10, 10, 105, 106, 107, 108, 109, 100, 18, 19,
834 /* 20 */ 20, 99, 22, 100, 102, 103, 26, 4, 5, 6,
835 /* 30 */ 7, 31, 32, 33, 34, 35, 129, 37, 38, 39,
836 /* 40 */ 40, 101, 42, 43, 127, 23, 23, 47, 48, 49,
837 /* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
838 /* 60 */ 60, 0, 4, 5, 6, 7, 94, 95, 96, 97,
839 /* 70 */ 10, 10, 3, 101, 120, 17, 107, 108, 109, 18,
840 /* 80 */ 19, 20, 122, 22, 112, 17, 26, 26, 116, 117,
841 /* 90 */ 2, 23, 31, 32, 33, 34, 35, 110, 37, 38,
842 /* 100 */ 39, 40, 110, 42, 43, 107, 108, 109, 47, 48,
843 /* 110 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
844 /* 120 */ 59, 60, 1, 2, 36, 4, 5, 46, 4, 5,
845 /* 130 */ 6, 7, 123, 12, 91, 92, 15, 17, 1, 2,
846 /* 140 */ 16, 4, 5, 22, 2, 24, 25, 6, 7, 12,
847 /* 150 */ 29, 30, 15, 84, 61, 62, 63, 64, 65, 66,
848 /* 160 */ 67, 68, 69, 70, 24, 25, 29, 30, 1, 12,
849 /* 170 */ 24, 25, 4, 5, 6, 7, 8, 16, 36, 12,
850 /* 180 */ 15, 14, 61, 24, 25, 18, 19, 20, 21, 22,
851 /* 190 */ 41, 24, 25, 46, 27, 28, 29, 30, 61, 78,
852 /* 200 */ 38, 80, 81, 82, 83, 100, 71, 86, 87, 88,
853 /* 210 */ 89, 106, 107, 108, 109, 78, 38, 80, 81, 82,
854 /* 220 */ 83, 45, 39, 86, 87, 88, 89, 1, 2, 39,
855 /* 230 */ 4, 5, 86, 17, 129, 78, 76, 98, 12, 100,
856 /* 240 */ 93, 15, 76, 86, 105, 106, 107, 108, 109, 99,
857 /* 250 */ 75, 77, 102, 103, 3, 29, 30, 3, 2, 3,
858 /* 260 */ 4, 5, 6, 7, 4, 5, 6, 7, 129, 27,
859 /* 270 */ 28, 29, 30, 17, 124, 125, 126, 17, 3, 23,
860 /* 280 */ 98, 36, 100, 23, 3, 29, 30, 61, 106, 107,
861 /* 290 */ 108, 109, 36, 24, 25, 2, 3, 4, 5, 6,
862 /* 300 */ 7, 3, 3, 90, 78, 73, 80, 81, 82, 83,
863 /* 310 */ 23, 129, 86, 87, 88, 89, 23, 46, 13, 15,
864 /* 320 */ 64, 65, 29, 30, 15, 107, 108, 109, 72, 36,
865 /* 330 */ 74, 75, 76, 1, 26, 12, 4, 5, 4, 5,
866 /* 340 */ 6, 7, 26, 26, 12, 3, 85, 15, 79, 11,
867 /* 350 */ 18, 19, 20, 130, 22, 86, 85, 64, 65, 1,
868 /* 360 */ 130, 90, 4, 5, 93, 72, 130, 74, 75, 76,
869 /* 370 */ 12, 1, 2, 15, 4, 5, 130, 130, 4, 5,
870 /* 380 */ 6, 7, 12, 130, 1, 15, 130, 4, 5, 130,
871 /* 390 */ 1, 17, 130, 4, 5, 12, 130, 23, 15, 130,
872 /* 400 */ 130, 12, 44, 45, 15, 2, 36, 107, 108, 109,
873 /* 410 */ 78, 4, 5, 6, 7, 12, 130, 130, 86, 87,
874 /* 420 */ 88, 89, 130, 1, 2, 130, 4, 5, 107, 108,
875 /* 430 */ 109, 130, 29, 30, 12, 130, 78, 15, 1, 2,
876 /* 440 */ 33, 4, 5, 130, 86, 87, 88, 89, 78, 12,
877 /* 450 */ 130, 1, 15, 130, 4, 5, 86, 87, 88, 89,
878 /* 460 */ 130, 78, 12, 130, 61, 15, 130, 78, 130, 86,
879 /* 470 */ 87, 88, 89, 130, 130, 86, 87, 88, 89, 130,
880 /* 480 */ 130, 78, 130, 80, 81, 82, 83, 1, 130, 86,
881 /* 490 */ 4, 5, 4, 5, 6, 7, 130, 130, 12, 130,
882 /* 500 */ 78, 15, 130, 98, 130, 130, 130, 130, 86, 87,
883 /* 510 */ 88, 89, 107, 108, 109, 78, 111, 18, 19, 20,
884 /* 520 */ 130, 33, 98, 86, 87, 88, 89, 2, 78, 130,
885 /* 530 */ 130, 107, 108, 109, 129, 111, 86, 87, 88, 89,
886 /* 540 */ 130, 130, 118, 119, 130, 130, 47, 48, 49, 50,
887 /* 550 */ 51, 52, 130, 129, 29, 30, 130, 130, 98, 130,
888 /* 560 */ 100, 130, 130, 130, 78, 105, 106, 107, 108, 109,
889 /* 570 */ 98, 46, 86, 87, 88, 89, 130, 130, 130, 107,
890 /* 580 */ 108, 109, 130, 98, 130, 100, 61, 130, 130, 129,
891 /* 590 */ 105, 106, 107, 108, 109, 130, 130, 4, 5, 6,
892 /* 600 */ 7, 129, 130, 130, 130, 80, 81, 82, 83, 98,
893 /* 610 */ 17, 100, 130, 130, 129, 130, 105, 106, 107, 108,
894 /* 620 */ 109, 130, 98, 130, 100, 130, 130, 130, 130, 105,
895 /* 630 */ 106, 107, 108, 109, 130, 98, 130, 100, 130, 130,
896 /* 640 */ 129, 130, 105, 106, 107, 108, 109, 98, 130, 100,
897 /* 650 */ 98, 130, 130, 129, 105, 106, 107, 108, 109, 107,
898 /* 660 */ 108, 109, 130, 98, 130, 100, 129, 130, 130, 130,
899 /* 670 */ 105, 106, 107, 108, 109, 130, 130, 130, 129, 130,
900 /* 680 */ 130, 129, 98, 130, 100, 130, 130, 130, 130, 105,
901 /* 690 */ 106, 107, 108, 109, 129, 4, 5, 6, 7, 130,
902 /* 700 */ 130, 4, 5, 6, 7, 130, 130, 98, 17, 100,
903 /* 710 */ 130, 130, 130, 129, 105, 106, 107, 108, 109, 98,
904 /* 720 */ 23, 100, 4, 5, 6, 7, 105, 106, 107, 108,
905 /* 730 */ 109, 130, 98, 130, 100, 17, 130, 130, 129, 105,
906 /* 740 */ 106, 107, 108, 109, 98, 2, 100, 130, 130, 130,
907 /* 750 */ 129, 105, 106, 107, 108, 109, 130, 98, 130, 100,
908 /* 760 */ 130, 130, 130, 129, 105, 106, 107, 108, 109, 98,
909 /* 770 */ 130, 100, 29, 30, 130, 129, 105, 106, 107, 108,
910 /* 780 */ 109, 130, 130, 98, 130, 100, 130, 130, 129, 130,
911 /* 790 */ 105, 106, 107, 108, 109, 130, 4, 5, 6, 7,
912 /* 800 */ 129, 130, 130, 130, 61, 130, 130, 130, 98, 17,
913 /* 810 */ 100, 130, 130, 130, 129, 105, 106, 107, 108, 109,
914 /* 820 */ 98, 130, 100, 80, 81, 82, 83, 105, 106, 107,
915 /* 830 */ 108, 109, 130, 98, 130, 100, 130, 130, 130, 129,
916 /* 840 */ 105, 106, 107, 108, 109, 98, 130, 100, 130, 130,
917 /* 850 */ 130, 129, 105, 106, 107, 108, 109, 130, 98, 130,
918 /* 860 */ 100, 130, 98, 130, 129, 105, 106, 107, 108, 109,
919 /* 870 */ 130, 107, 108, 109, 98, 130, 129, 113, 114, 115,
920 /* 880 */ 130, 130, 130, 107, 108, 109, 95, 96, 97, 129,
921 /* 890 */ 114, 98, 101, 129, 130, 130, 130, 121, 130, 123,
922 /* 900 */ 107, 108, 109, 112, 111, 129, 130, 130, 117, 130,
923 /* 910 */ 130, 130, 119, 94, 95, 96, 97, 130, 98, 130,
924 /* 920 */ 101, 130, 129, 130, 130, 130, 130, 107, 108, 109,
925 /* 930 */ 98, 112, 130, 130, 114, 115, 117, 130, 130, 107,
926 /* 940 */ 108, 109, 98, 130, 130, 130, 114, 115, 130, 129,
927 /* 950 */ 130, 107, 108, 109, 98, 130, 130, 130, 114, 98,
928 /* 960 */ 130, 129, 130, 107, 108, 109, 98, 111, 107, 108,
929 /* 970 */ 109, 98, 130, 129, 130, 107, 108, 109, 98, 130,
930 /* 980 */ 107, 108, 109, 98, 130, 129, 130, 107, 108, 109,
931 /* 990 */ 129, 130, 107, 108, 109, 130, 98, 129, 130, 130,
932 /* 1000 */ 130, 98, 129, 130, 130, 107, 108, 109, 130, 129,
933 /* 1010 */ 107, 108, 109, 98, 129, 4, 5, 6, 7, 98,
934 /* 1020 */ 130, 130, 107, 108, 109, 130, 98, 129, 107, 108,
935 /* 1030 */ 109, 130, 129, 130, 23, 107, 108, 109, 98, 4,
936 /* 1040 */ 5, 6, 7, 130, 129, 98, 130, 107, 108, 109,
937 /* 1050 */ 129, 98, 17, 130, 107, 108, 109, 129, 130, 130,
938 /* 1060 */ 107, 108, 109, 98, 130, 130, 130, 130, 98, 129,
939 /* 1070 */ 130, 130, 107, 108, 109, 98, 129, 107, 108, 109,
940 /* 1080 */ 98, 130, 129, 130, 107, 108, 109, 98, 130, 107,
941 /* 1090 */ 108, 109, 98, 130, 129, 130, 107, 108, 109, 129,
942 /* 1100 */ 130, 107, 108, 109, 98, 130, 129, 130, 130, 130,
943 /* 1110 */ 98, 129, 130, 107, 108, 109, 130, 130, 129, 107,
944 /* 1120 */ 108, 109, 98, 129, 130, 130, 130, 98, 130, 130,
945 /* 1130 */ 130, 107, 108, 109, 130, 129, 107, 108, 109, 130,
946 /* 1140 */ 130, 129, 130, 130, 130, 130, 130, 130, 130, 130,
947 /* 1150 */ 130, 130, 130, 129, 130, 130, 130, 130, 129, 94,
948 /* 1160 */ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
949 /* 1170 */ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
950 /* 1180 */ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
951 /* 1190 */ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
952 /* 1200 */ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
953 /* 1210 */ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
954 /* 1220 */ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
955 /* 1230 */ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
956 /* 1240 */ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
957 /* 1250 */ 94, 94, 94,
 
 
 
 
 
 
 
 
 
 
 
958 };
959 #define YY_SHIFT_COUNT (156)
960 #define YY_SHIFT_MIN (0)
961 #define YY_SHIFT_MAX (1035)
962 static const unsigned short int yy_shift_ofst[] = {
963 /* 0 */ 167, 121, 137, 137, 137, 137, 137, 137, 137, 137,
964 /* 10 */ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
965 /* 20 */ 137, 137, 137, 332, 358, 383, 226, 332, 167, 370,
966 /* 30 */ 370, 0, 61, 167, 403, 389, 383, 389, 422, 437,
967 /* 40 */ 383, 383, 383, 383, 383, 383, 450, 383, 383, 383,
968 /* 50 */ 486, 383, 383, 383, 383, 383, 383, 383, 383, 383,
969 /* 60 */ 383, 383, 383, 499, 157, 157, 157, 157, 157, 525,
970 /* 70 */ 256, 293, 743, 743, 242, 22, 1159, 1159, 1159, 1159,
971 /* 80 */ 93, 93, 260, 374, 58, 124, 407, 488, 593, 23,
972 /* 90 */ 691, 697, 168, 718, 1011, 792, 1035, 334, 334, 334,
973 /* 100 */ 334, 334, 334, 271, 269, 334, 146, 60, 88, 142,
974 /* 110 */ 68, 4, 43, 141, 141, 140, 159, 69, 147, 1,
975 /* 120 */ 81, 120, 161, 165, 149, 162, 178, 183, 190, 176,
976 /* 130 */ 135, 216, 160, 175, 174, 166, 251, 254, 275, 245,
977 /* 140 */ 281, 298, 299, 213, 232, 287, 305, 213, 304, 309,
978 /* 150 */ 308, 316, 317, 323, 261, 342, 338,
 
979 };
980 #define YY_REDUCE_COUNT (79)
981 #define YY_REDUCE_MIN (-126)
982 #define YY_REDUCE_MAX (1029)
983 static const short yy_reduce_ofst[] = {
984 /* 0 */ -28, -93, 139, 460, 485, 511, 524, 537, 549, 565,
985 /* 10 */ 584, 609, 621, 634, 646, 659, 671, 685, 710, 722,
986 /* 20 */ 735, 747, 760, 424, 764, 776, 182, 793, 819, 820,
987 /* 30 */ 832, 150, 150, 791, 105, 405, 844, 856, 472, 552,
988 /* 40 */ 861, 868, 873, 880, 885, 898, 903, 915, 921, 928,
989 /* 50 */ 940, 947, 953, 965, 970, 977, 982, 989, 994, 1006,
990 /* 60 */ 1012, 1024, 1029, -78, -31, -2, 218, 300, 321, -83,
991 /* 70 */ -126, -126, -94, -77, -60, -46, -40, -13, -8, 9,
 
992 };
993 static const YYACTIONTYPE yy_default[] = {
994 /* 0 */ 433, 427, 427, 427, 427, 427, 427, 427, 427, 427,
995 /* 10 */ 427, 427, 427, 427, 427, 427, 427, 427, 427, 427,
996 /* 20 */ 427, 427, 427, 427, 456, 555, 427, 427, 433, 559,
997 /* 30 */ 468, 560, 560, 433, 427, 427, 427, 427, 427, 427,
998 /* 40 */ 427, 427, 427, 427, 427, 427, 427, 427, 427, 427,
999 /* 50 */ 427, 427, 460, 427, 427, 427, 427, 427, 427, 427,
1000 /* 60 */ 427, 427, 427, 427, 427, 427, 427, 427, 427, 427,
1001 /* 70 */ 427, 427, 427, 427, 427, 439, 453, 490, 490, 555,
1002 /* 80 */ 451, 476, 427, 427, 427, 427, 427, 427, 427, 427,
1003 /* 90 */ 427, 427, 454, 427, 427, 427, 427, 471, 469, 494,
1004 /* 100 */ 493, 492, 459, 442, 427, 545, 427, 427, 427, 427,
1005 /* 110 */ 427, 567, 427, 526, 525, 521, 427, 514, 511, 427,
1006 /* 120 */ 511, 427, 427, 427, 474, 427, 427, 427, 427, 427,
1007 /* 130 */ 427, 427, 427, 427, 427, 427, 427, 427, 427, 427,
1008 /* 140 */ 427, 427, 427, 571, 427, 427, 427, 427, 427, 427,
1009 /* 150 */ 427, 427, 427, 427, 580, 427, 427,
 
1010 };
1011 /********** End of lemon-generated parsing tables *****************************/
1012
1013 /* The next table maps tokens (terminal symbols) into fallback tokens.
1014 ** If a construct like the following:
@@ -1327,24 +1320,26 @@
1320 /* 109 */ "nth",
1321 /* 110 */ "textposition",
1322 /* 111 */ "rvalue",
1323 /* 112 */ "lvalue",
1324 /* 113 */ "even",
1325 /* 114 */ "relexpr",
1326 /* 115 */ "optrelexpr",
1327 /* 116 */ "document",
1328 /* 117 */ "print",
1329 /* 118 */ "prlist",
1330 /* 119 */ "pritem",
1331 /* 120 */ "prsep",
1332 /* 121 */ "attribute_list",
1333 /* 122 */ "savelist",
1334 /* 123 */ "alist",
1335 /* 124 */ "attribute",
1336 /* 125 */ "go",
1337 /* 126 */ "boolproperty",
1338 /* 127 */ "withclause",
1339 /* 128 */ "between",
1340 /* 129 */ "place2",
1341 };
1342 #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
1343
1344 #ifndef NDEBUG
1345 /* For tracing reduce actions, the names of all rules are required.
@@ -1372,141 +1367,137 @@
1367 /* 19 */ "unnamed_element ::= basetype attribute_list",
1368 /* 20 */ "basetype ::= CLASSNAME",
1369 /* 21 */ "basetype ::= STRING textposition",
1370 /* 22 */ "basetype ::= LB savelist element_list RB",
1371 /* 23 */ "savelist ::=",
1372 /* 24 */ "relexpr ::= expr",
1373 /* 25 */ "relexpr ::= expr PERCENT",
1374 /* 26 */ "optrelexpr ::=",
1375 /* 27 */ "attribute_list ::= relexpr alist",
1376 /* 28 */ "attribute ::= numproperty relexpr",
1377 /* 29 */ "attribute ::= dashproperty expr",
1378 /* 30 */ "attribute ::= dashproperty",
1379 /* 31 */ "attribute ::= colorproperty rvalue",
1380 /* 32 */ "attribute ::= go direction optrelexpr",
1381 /* 33 */ "attribute ::= go direction even position",
1382 /* 34 */ "attribute ::= CLOSE",
1383 /* 35 */ "attribute ::= CHOP",
1384 /* 36 */ "attribute ::= FROM position",
1385 /* 37 */ "attribute ::= TO position",
1386 /* 38 */ "attribute ::= THEN",
1387 /* 39 */ "attribute ::= THEN optrelexpr HEADING expr",
1388 /* 40 */ "attribute ::= THEN optrelexpr EDGEPT",
1389 /* 41 */ "attribute ::= GO optrelexpr HEADING expr",
1390 /* 42 */ "attribute ::= GO optrelexpr EDGEPT",
1391 /* 43 */ "attribute ::= AT position",
1392 /* 44 */ "attribute ::= SAME",
1393 /* 45 */ "attribute ::= SAME AS object",
1394 /* 46 */ "attribute ::= STRING textposition",
1395 /* 47 */ "attribute ::= FIT",
1396 /* 48 */ "attribute ::= BEHIND object",
1397 /* 49 */ "withclause ::= DOT_E edge AT position",
1398 /* 50 */ "withclause ::= edge AT position",
1399 /* 51 */ "numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS",
1400 /* 52 */ "boolproperty ::= CW",
1401 /* 53 */ "boolproperty ::= CCW",
1402 /* 54 */ "boolproperty ::= LARROW",
1403 /* 55 */ "boolproperty ::= RARROW",
1404 /* 56 */ "boolproperty ::= LRARROW",
1405 /* 57 */ "boolproperty ::= INVIS",
1406 /* 58 */ "boolproperty ::= THICK",
1407 /* 59 */ "boolproperty ::= THIN",
1408 /* 60 */ "textposition ::=",
1409 /* 61 */ "textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL",
1410 /* 62 */ "position ::= expr COMMA expr",
1411 /* 63 */ "position ::= place PLUS expr COMMA expr",
1412 /* 64 */ "position ::= place MINUS expr COMMA expr",
1413 /* 65 */ "position ::= place PLUS LP expr COMMA expr RP",
1414 /* 66 */ "position ::= place MINUS LP expr COMMA expr RP",
1415 /* 67 */ "position ::= LP position COMMA position RP",
1416 /* 68 */ "position ::= LP position RP",
1417 /* 69 */ "position ::= expr between position AND position",
1418 /* 70 */ "position ::= expr LT position COMMA position GT",
1419 /* 71 */ "position ::= expr ABOVE position",
1420 /* 72 */ "position ::= expr BELOW position",
1421 /* 73 */ "position ::= expr LEFT OF position",
1422 /* 74 */ "position ::= expr RIGHT OF position",
1423 /* 75 */ "position ::= expr ON HEADING EDGEPT OF position",
1424 /* 76 */ "position ::= expr HEADING EDGEPT OF position",
1425 /* 77 */ "position ::= expr EDGEPT OF position",
1426 /* 78 */ "position ::= expr ON HEADING expr FROM position",
1427 /* 79 */ "position ::= expr HEADING expr FROM position",
1428 /* 80 */ "place ::= edge OF object",
1429 /* 81 */ "place2 ::= object",
1430 /* 82 */ "place2 ::= object DOT_E edge",
1431 /* 83 */ "place2 ::= NTH VERTEX OF object",
1432 /* 84 */ "object ::= nth",
1433 /* 85 */ "object ::= nth OF|IN object",
1434 /* 86 */ "objectname ::= PLACENAME",
1435 /* 87 */ "objectname ::= objectname DOT_U PLACENAME",
1436 /* 88 */ "nth ::= NTH CLASSNAME",
1437 /* 89 */ "nth ::= NTH LAST CLASSNAME",
1438 /* 90 */ "nth ::= LAST CLASSNAME",
1439 /* 91 */ "nth ::= LAST",
1440 /* 92 */ "nth ::= NTH LB RB",
1441 /* 93 */ "nth ::= NTH LAST LB RB",
1442 /* 94 */ "nth ::= LAST LB RB",
1443 /* 95 */ "expr ::= expr PLUS expr",
1444 /* 96 */ "expr ::= expr MINUS expr",
1445 /* 97 */ "expr ::= expr STAR expr",
1446 /* 98 */ "expr ::= expr SLASH expr",
1447 /* 99 */ "expr ::= MINUS expr",
1448 /* 100 */ "expr ::= PLUS expr",
1449 /* 101 */ "expr ::= LP expr RP",
1450 /* 102 */ "expr ::= NUMBER",
1451 /* 103 */ "expr ::= ID",
1452 /* 104 */ "expr ::= FUNC1 LP expr RP",
1453 /* 105 */ "expr ::= FUNC2 LP expr COMMA expr RP",
1454 /* 106 */ "expr ::= place2 DOT_XY X",
1455 /* 107 */ "expr ::= place2 DOT_XY Y",
1456 /* 108 */ "expr ::= object DOT_L numproperty",
1457 /* 109 */ "expr ::= object DOT_L dashproperty",
1458 /* 110 */ "expr ::= object DOT_L colorproperty",
1459 /* 111 */ "lvalue ::= ID",
1460 /* 112 */ "lvalue ::= FILL",
1461 /* 113 */ "lvalue ::= COLOR",
1462 /* 114 */ "lvalue ::= THICKNESS",
1463 /* 115 */ "rvalue ::= expr",
1464 /* 116 */ "print ::= PRINT",
1465 /* 117 */ "prlist ::= pritem",
1466 /* 118 */ "prlist ::= prlist prsep pritem",
1467 /* 119 */ "direction ::= UP",
1468 /* 120 */ "direction ::= DOWN",
1469 /* 121 */ "direction ::= LEFT",
1470 /* 122 */ "direction ::= RIGHT",
1471 /* 123 */ "optrelexpr ::= relexpr",
1472 /* 124 */ "attribute_list ::= alist",
1473 /* 125 */ "alist ::=",
1474 /* 126 */ "alist ::= alist attribute",
1475 /* 127 */ "attribute ::= boolproperty",
1476 /* 128 */ "attribute ::= WITH withclause",
1477 /* 129 */ "go ::= GO",
1478 /* 130 */ "go ::=",
1479 /* 131 */ "even ::= UNTIL EVEN WITH",
1480 /* 132 */ "even ::= EVEN WITH",
1481 /* 133 */ "dashproperty ::= DOTTED",
1482 /* 134 */ "dashproperty ::= DASHED",
1483 /* 135 */ "colorproperty ::= FILL",
1484 /* 136 */ "colorproperty ::= COLOR",
1485 /* 137 */ "position ::= place",
1486 /* 138 */ "between ::= WAY BETWEEN",
1487 /* 139 */ "between ::= BETWEEN",
1488 /* 140 */ "between ::= OF THE WAY BETWEEN",
1489 /* 141 */ "place ::= place2",
1490 /* 142 */ "edge ::= CENTER",
1491 /* 143 */ "edge ::= EDGEPT",
1492 /* 144 */ "edge ::= TOP",
1493 /* 145 */ "edge ::= BOTTOM",
1494 /* 146 */ "edge ::= START",
1495 /* 147 */ "edge ::= END",
1496 /* 148 */ "edge ::= RIGHT",
1497 /* 149 */ "edge ::= LEFT",
1498 /* 150 */ "object ::= objectname",
 
 
 
 
1499 };
1500 #endif /* NDEBUG */
1501
1502
1503 #if YYSTACKDEPTH<=0
@@ -1630,22 +1621,22 @@
1621 ** inside the C code.
1622 */
1623 /********* Begin destructor definitions ***************************************/
1624 case 94: /* element_list */
1625 {
1626 #line 465 "pikchr.y"
1627 pik_elist_free(p,(yypminor->yy72));
1628 #line 1653 "pikchr.c"
1629 }
1630 break;
1631 case 95: /* element */
1632 case 96: /* unnamed_element */
1633 case 97: /* basetype */
1634 {
1635 #line 467 "pikchr.y"
1636 pik_elem_free(p,(yypminor->yy254));
1637 #line 1662 "pikchr.c"
1638 }
1639 break;
1640 /********* End destructor definitions *****************************************/
1641 default: break; /* If no destructor action specified: do nothing */
1642 }
@@ -1859,14 +1850,14 @@
1850 #endif
1851 while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
1852 /* Here code is inserted which will execute if the parser
1853 ** stack every overflows */
1854 /******** Begin %stack_overflow code ******************************************/
1855 #line 498 "pikchr.y"
1856
1857 pik_error(p, 0, "parser stack overflow");
1858 #line 1883 "pikchr.c"
1859 /******** End %stack_overflow code ********************************************/
1860 pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */
1861 pik_parserCTX_STORE
1862 }
1863
@@ -1934,11 +1925,11 @@
1925 }
1926
1927 /* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side
1928 ** of that rule */
1929 static const YYCODETYPE yyRuleInfoLhs[] = {
1930 116, /* (0) document ::= element_list */
1931 94, /* (1) element_list ::= element */
1932 94, /* (2) element_list ::= element_list EOL element */
1933 95, /* (3) element ::= */
1934 95, /* (4) element ::= direction */
1935 95, /* (5) element ::= lvalue ASSIGN rvalue */
@@ -1947,152 +1938,148 @@
1938 95, /* (8) element ::= unnamed_element */
1939 95, /* (9) element ::= print prlist */
1940 95, /* (10) element ::= ASSERT LP expr EQ expr RP */
1941 95, /* (11) element ::= ASSERT LP place EQ place RP */
1942 111, /* (12) rvalue ::= PLACENAME */
1943 119, /* (13) pritem ::= FILL */
1944 119, /* (14) pritem ::= COLOR */
1945 119, /* (15) pritem ::= THICKNESS */
1946 119, /* (16) pritem ::= rvalue */
1947 119, /* (17) pritem ::= STRING */
1948 120, /* (18) prsep ::= COMMA */
1949 96, /* (19) unnamed_element ::= basetype attribute_list */
1950 97, /* (20) basetype ::= CLASSNAME */
1951 97, /* (21) basetype ::= STRING textposition */
1952 97, /* (22) basetype ::= LB savelist element_list RB */
1953 122, /* (23) savelist ::= */
1954 114, /* (24) relexpr ::= expr */
1955 114, /* (25) relexpr ::= expr PERCENT */
1956 115, /* (26) optrelexpr ::= */
1957 121, /* (27) attribute_list ::= relexpr alist */
1958 124, /* (28) attribute ::= numproperty relexpr */
1959 124, /* (29) attribute ::= dashproperty expr */
1960 124, /* (30) attribute ::= dashproperty */
1961 124, /* (31) attribute ::= colorproperty rvalue */
1962 124, /* (32) attribute ::= go direction optrelexpr */
1963 124, /* (33) attribute ::= go direction even position */
1964 124, /* (34) attribute ::= CLOSE */
1965 124, /* (35) attribute ::= CHOP */
1966 124, /* (36) attribute ::= FROM position */
1967 124, /* (37) attribute ::= TO position */
1968 124, /* (38) attribute ::= THEN */
1969 124, /* (39) attribute ::= THEN optrelexpr HEADING expr */
1970 124, /* (40) attribute ::= THEN optrelexpr EDGEPT */
1971 124, /* (41) attribute ::= GO optrelexpr HEADING expr */
1972 124, /* (42) attribute ::= GO optrelexpr EDGEPT */
1973 124, /* (43) attribute ::= AT position */
1974 124, /* (44) attribute ::= SAME */
1975 124, /* (45) attribute ::= SAME AS object */
1976 124, /* (46) attribute ::= STRING textposition */
1977 124, /* (47) attribute ::= FIT */
1978 124, /* (48) attribute ::= BEHIND object */
1979 127, /* (49) withclause ::= DOT_E edge AT position */
1980 127, /* (50) withclause ::= edge AT position */
1981 99, /* (51) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
1982 126, /* (52) boolproperty ::= CW */
1983 126, /* (53) boolproperty ::= CCW */
1984 126, /* (54) boolproperty ::= LARROW */
1985 126, /* (55) boolproperty ::= RARROW */
1986 126, /* (56) boolproperty ::= LRARROW */
1987 126, /* (57) boolproperty ::= INVIS */
1988 126, /* (58) boolproperty ::= THICK */
1989 126, /* (59) boolproperty ::= THIN */
1990 110, /* (60) textposition ::= */
1991 110, /* (61) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
1992 105, /* (62) position ::= expr COMMA expr */
1993 105, /* (63) position ::= place PLUS expr COMMA expr */
1994 105, /* (64) position ::= place MINUS expr COMMA expr */
1995 105, /* (65) position ::= place PLUS LP expr COMMA expr RP */
1996 105, /* (66) position ::= place MINUS LP expr COMMA expr RP */
1997 105, /* (67) position ::= LP position COMMA position RP */
1998 105, /* (68) position ::= LP position RP */
1999 105, /* (69) position ::= expr between position AND position */
2000 105, /* (70) position ::= expr LT position COMMA position GT */
2001 105, /* (71) position ::= expr ABOVE position */
2002 105, /* (72) position ::= expr BELOW position */
2003 105, /* (73) position ::= expr LEFT OF position */
2004 105, /* (74) position ::= expr RIGHT OF position */
2005 105, /* (75) position ::= expr ON HEADING EDGEPT OF position */
2006 105, /* (76) position ::= expr HEADING EDGEPT OF position */
2007 105, /* (77) position ::= expr EDGEPT OF position */
2008 105, /* (78) position ::= expr ON HEADING expr FROM position */
2009 105, /* (79) position ::= expr HEADING expr FROM position */
2010 106, /* (80) place ::= edge OF object */
2011 129, /* (81) place2 ::= object */
2012 129, /* (82) place2 ::= object DOT_E edge */
2013 129, /* (83) place2 ::= NTH VERTEX OF object */
2014 107, /* (84) object ::= nth */
2015 107, /* (85) object ::= nth OF|IN object */
2016 108, /* (86) objectname ::= PLACENAME */
2017 108, /* (87) objectname ::= objectname DOT_U PLACENAME */
2018 109, /* (88) nth ::= NTH CLASSNAME */
2019 109, /* (89) nth ::= NTH LAST CLASSNAME */
2020 109, /* (90) nth ::= LAST CLASSNAME */
2021 109, /* (91) nth ::= LAST */
2022 109, /* (92) nth ::= NTH LB RB */
2023 109, /* (93) nth ::= NTH LAST LB RB */
2024 109, /* (94) nth ::= LAST LB RB */
2025 98, /* (95) expr ::= expr PLUS expr */
2026 98, /* (96) expr ::= expr MINUS expr */
2027 98, /* (97) expr ::= expr STAR expr */
2028 98, /* (98) expr ::= expr SLASH expr */
2029 98, /* (99) expr ::= MINUS expr */
2030 98, /* (100) expr ::= PLUS expr */
2031 98, /* (101) expr ::= LP expr RP */
2032 98, /* (102) expr ::= NUMBER */
2033 98, /* (103) expr ::= ID */
2034 98, /* (104) expr ::= FUNC1 LP expr RP */
2035 98, /* (105) expr ::= FUNC2 LP expr COMMA expr RP */
2036 98, /* (106) expr ::= place2 DOT_XY X */
2037 98, /* (107) expr ::= place2 DOT_XY Y */
2038 98, /* (108) expr ::= object DOT_L numproperty */
2039 98, /* (109) expr ::= object DOT_L dashproperty */
2040 98, /* (110) expr ::= object DOT_L colorproperty */
2041 112, /* (111) lvalue ::= ID */
2042 112, /* (112) lvalue ::= FILL */
2043 112, /* (113) lvalue ::= COLOR */
2044 112, /* (114) lvalue ::= THICKNESS */
2045 111, /* (115) rvalue ::= expr */
2046 117, /* (116) print ::= PRINT */
2047 118, /* (117) prlist ::= pritem */
2048 118, /* (118) prlist ::= prlist prsep pritem */
2049 101, /* (119) direction ::= UP */
2050 101, /* (120) direction ::= DOWN */
2051 101, /* (121) direction ::= LEFT */
2052 101, /* (122) direction ::= RIGHT */
2053 115, /* (123) optrelexpr ::= relexpr */
2054 121, /* (124) attribute_list ::= alist */
2055 123, /* (125) alist ::= */
2056 123, /* (126) alist ::= alist attribute */
2057 124, /* (127) attribute ::= boolproperty */
2058 124, /* (128) attribute ::= WITH withclause */
2059 125, /* (129) go ::= GO */
2060 125, /* (130) go ::= */
2061 113, /* (131) even ::= UNTIL EVEN WITH */
2062 113, /* (132) even ::= EVEN WITH */
2063 102, /* (133) dashproperty ::= DOTTED */
2064 102, /* (134) dashproperty ::= DASHED */
2065 103, /* (135) colorproperty ::= FILL */
2066 103, /* (136) colorproperty ::= COLOR */
2067 105, /* (137) position ::= place */
2068 128, /* (138) between ::= WAY BETWEEN */
2069 128, /* (139) between ::= BETWEEN */
2070 128, /* (140) between ::= OF THE WAY BETWEEN */
2071 106, /* (141) place ::= place2 */
2072 100, /* (142) edge ::= CENTER */
2073 100, /* (143) edge ::= EDGEPT */
2074 100, /* (144) edge ::= TOP */
2075 100, /* (145) edge ::= BOTTOM */
2076 100, /* (146) edge ::= START */
2077 100, /* (147) edge ::= END */
2078 100, /* (148) edge ::= RIGHT */
2079 100, /* (149) edge ::= LEFT */
2080 107, /* (150) object ::= objectname */
 
 
 
 
2081 };
2082
2083 /* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
2084 ** of symbols on the right-hand side of that rule. */
2085 static const signed char yyRuleInfoNRhs[] = {
@@ -2118,141 +2105,137 @@
2105 -2, /* (19) unnamed_element ::= basetype attribute_list */
2106 -1, /* (20) basetype ::= CLASSNAME */
2107 -2, /* (21) basetype ::= STRING textposition */
2108 -4, /* (22) basetype ::= LB savelist element_list RB */
2109 0, /* (23) savelist ::= */
2110 -1, /* (24) relexpr ::= expr */
2111 -2, /* (25) relexpr ::= expr PERCENT */
2112 0, /* (26) optrelexpr ::= */
2113 -2, /* (27) attribute_list ::= relexpr alist */
2114 -2, /* (28) attribute ::= numproperty relexpr */
2115 -2, /* (29) attribute ::= dashproperty expr */
2116 -1, /* (30) attribute ::= dashproperty */
2117 -2, /* (31) attribute ::= colorproperty rvalue */
2118 -3, /* (32) attribute ::= go direction optrelexpr */
2119 -4, /* (33) attribute ::= go direction even position */
2120 -1, /* (34) attribute ::= CLOSE */
2121 -1, /* (35) attribute ::= CHOP */
2122 -2, /* (36) attribute ::= FROM position */
2123 -2, /* (37) attribute ::= TO position */
2124 -1, /* (38) attribute ::= THEN */
2125 -4, /* (39) attribute ::= THEN optrelexpr HEADING expr */
2126 -3, /* (40) attribute ::= THEN optrelexpr EDGEPT */
2127 -4, /* (41) attribute ::= GO optrelexpr HEADING expr */
2128 -3, /* (42) attribute ::= GO optrelexpr EDGEPT */
2129 -2, /* (43) attribute ::= AT position */
2130 -1, /* (44) attribute ::= SAME */
2131 -3, /* (45) attribute ::= SAME AS object */
2132 -2, /* (46) attribute ::= STRING textposition */
2133 -1, /* (47) attribute ::= FIT */
2134 -2, /* (48) attribute ::= BEHIND object */
2135 -4, /* (49) withclause ::= DOT_E edge AT position */
2136 -3, /* (50) withclause ::= edge AT position */
2137 -1, /* (51) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2138 -1, /* (52) boolproperty ::= CW */
2139 -1, /* (53) boolproperty ::= CCW */
2140 -1, /* (54) boolproperty ::= LARROW */
2141 -1, /* (55) boolproperty ::= RARROW */
2142 -1, /* (56) boolproperty ::= LRARROW */
2143 -1, /* (57) boolproperty ::= INVIS */
2144 -1, /* (58) boolproperty ::= THICK */
2145 -1, /* (59) boolproperty ::= THIN */
2146 0, /* (60) textposition ::= */
2147 -2, /* (61) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2148 -3, /* (62) position ::= expr COMMA expr */
2149 -5, /* (63) position ::= place PLUS expr COMMA expr */
2150 -5, /* (64) position ::= place MINUS expr COMMA expr */
2151 -7, /* (65) position ::= place PLUS LP expr COMMA expr RP */
2152 -7, /* (66) position ::= place MINUS LP expr COMMA expr RP */
2153 -5, /* (67) position ::= LP position COMMA position RP */
2154 -3, /* (68) position ::= LP position RP */
2155 -5, /* (69) position ::= expr between position AND position */
2156 -6, /* (70) position ::= expr LT position COMMA position GT */
2157 -3, /* (71) position ::= expr ABOVE position */
2158 -3, /* (72) position ::= expr BELOW position */
2159 -4, /* (73) position ::= expr LEFT OF position */
2160 -4, /* (74) position ::= expr RIGHT OF position */
2161 -6, /* (75) position ::= expr ON HEADING EDGEPT OF position */
2162 -5, /* (76) position ::= expr HEADING EDGEPT OF position */
2163 -4, /* (77) position ::= expr EDGEPT OF position */
2164 -6, /* (78) position ::= expr ON HEADING expr FROM position */
2165 -5, /* (79) position ::= expr HEADING expr FROM position */
2166 -3, /* (80) place ::= edge OF object */
2167 -1, /* (81) place2 ::= object */
2168 -3, /* (82) place2 ::= object DOT_E edge */
2169 -4, /* (83) place2 ::= NTH VERTEX OF object */
2170 -1, /* (84) object ::= nth */
2171 -3, /* (85) object ::= nth OF|IN object */
2172 -1, /* (86) objectname ::= PLACENAME */
2173 -3, /* (87) objectname ::= objectname DOT_U PLACENAME */
2174 -2, /* (88) nth ::= NTH CLASSNAME */
2175 -3, /* (89) nth ::= NTH LAST CLASSNAME */
2176 -2, /* (90) nth ::= LAST CLASSNAME */
2177 -1, /* (91) nth ::= LAST */
2178 -3, /* (92) nth ::= NTH LB RB */
2179 -4, /* (93) nth ::= NTH LAST LB RB */
2180 -3, /* (94) nth ::= LAST LB RB */
2181 -3, /* (95) expr ::= expr PLUS expr */
2182 -3, /* (96) expr ::= expr MINUS expr */
2183 -3, /* (97) expr ::= expr STAR expr */
2184 -3, /* (98) expr ::= expr SLASH expr */
2185 -2, /* (99) expr ::= MINUS expr */
2186 -2, /* (100) expr ::= PLUS expr */
2187 -3, /* (101) expr ::= LP expr RP */
2188 -1, /* (102) expr ::= NUMBER */
2189 -1, /* (103) expr ::= ID */
2190 -4, /* (104) expr ::= FUNC1 LP expr RP */
2191 -6, /* (105) expr ::= FUNC2 LP expr COMMA expr RP */
2192 -3, /* (106) expr ::= place2 DOT_XY X */
2193 -3, /* (107) expr ::= place2 DOT_XY Y */
2194 -3, /* (108) expr ::= object DOT_L numproperty */
2195 -3, /* (109) expr ::= object DOT_L dashproperty */
2196 -3, /* (110) expr ::= object DOT_L colorproperty */
2197 -1, /* (111) lvalue ::= ID */
2198 -1, /* (112) lvalue ::= FILL */
2199 -1, /* (113) lvalue ::= COLOR */
2200 -1, /* (114) lvalue ::= THICKNESS */
2201 -1, /* (115) rvalue ::= expr */
2202 -1, /* (116) print ::= PRINT */
2203 -1, /* (117) prlist ::= pritem */
2204 -3, /* (118) prlist ::= prlist prsep pritem */
2205 -1, /* (119) direction ::= UP */
2206 -1, /* (120) direction ::= DOWN */
2207 -1, /* (121) direction ::= LEFT */
2208 -1, /* (122) direction ::= RIGHT */
2209 -1, /* (123) optrelexpr ::= relexpr */
2210 -1, /* (124) attribute_list ::= alist */
2211 0, /* (125) alist ::= */
2212 -2, /* (126) alist ::= alist attribute */
2213 -1, /* (127) attribute ::= boolproperty */
2214 -2, /* (128) attribute ::= WITH withclause */
2215 -1, /* (129) go ::= GO */
2216 0, /* (130) go ::= */
2217 -3, /* (131) even ::= UNTIL EVEN WITH */
2218 -2, /* (132) even ::= EVEN WITH */
2219 -1, /* (133) dashproperty ::= DOTTED */
2220 -1, /* (134) dashproperty ::= DASHED */
2221 -1, /* (135) colorproperty ::= FILL */
2222 -1, /* (136) colorproperty ::= COLOR */
2223 -1, /* (137) position ::= place */
2224 -2, /* (138) between ::= WAY BETWEEN */
2225 -1, /* (139) between ::= BETWEEN */
2226 -4, /* (140) between ::= OF THE WAY BETWEEN */
2227 -1, /* (141) place ::= place2 */
2228 -1, /* (142) edge ::= CENTER */
2229 -1, /* (143) edge ::= EDGEPT */
2230 -1, /* (144) edge ::= TOP */
2231 -1, /* (145) edge ::= BOTTOM */
2232 -1, /* (146) edge ::= START */
2233 -1, /* (147) edge ::= END */
2234 -1, /* (148) edge ::= RIGHT */
2235 -1, /* (149) edge ::= LEFT */
2236 -1, /* (150) object ::= objectname */
 
 
 
 
2237 };
2238
2239 static void yy_accept(yyParser*); /* Forward Declaration */
2240
2241 /*
@@ -2339,646 +2322,636 @@
2322 ** break;
2323 */
2324 /********** Begin reduce actions **********************************************/
2325 YYMINORTYPE yylhsminor;
2326 case 0: /* document ::= element_list */
2327 #line 502 "pikchr.y"
2328 {pik_render(p,yymsp[0].minor.yy72);}
2329 #line 2354 "pikchr.c"
2330 break;
2331 case 1: /* element_list ::= element */
2332 #line 505 "pikchr.y"
2333 { yylhsminor.yy72 = pik_elist_append(p,0,yymsp[0].minor.yy254); }
2334 #line 2359 "pikchr.c"
2335 yymsp[0].minor.yy72 = yylhsminor.yy72;
2336 break;
2337 case 2: /* element_list ::= element_list EOL element */
2338 #line 507 "pikchr.y"
2339 { yylhsminor.yy72 = pik_elist_append(p,yymsp[-2].minor.yy72,yymsp[0].minor.yy254); }
2340 #line 2365 "pikchr.c"
2341 yymsp[-2].minor.yy72 = yylhsminor.yy72;
2342 break;
2343 case 3: /* element ::= */
2344 #line 510 "pikchr.y"
2345 { yymsp[1].minor.yy254 = 0; }
2346 #line 2371 "pikchr.c"
2347 break;
2348 case 4: /* element ::= direction */
2349 #line 511 "pikchr.y"
2350 { pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy254=0; }
2351 #line 2376 "pikchr.c"
2352 yymsp[0].minor.yy254 = yylhsminor.yy254;
2353 break;
2354 case 5: /* element ::= lvalue ASSIGN rvalue */
2355 #line 512 "pikchr.y"
2356 {pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy73,&yymsp[-1].minor.yy0); yylhsminor.yy254=0;}
2357 #line 2382 "pikchr.c"
2358 yymsp[-2].minor.yy254 = yylhsminor.yy254;
2359 break;
2360 case 6: /* element ::= PLACENAME COLON unnamed_element */
2361 #line 514 "pikchr.y"
2362 { yylhsminor.yy254 = yymsp[0].minor.yy254; pik_elem_setname(p,yymsp[0].minor.yy254,&yymsp[-2].minor.yy0); }
2363 #line 2388 "pikchr.c"
2364 yymsp[-2].minor.yy254 = yylhsminor.yy254;
2365 break;
2366 case 7: /* element ::= PLACENAME COLON position */
2367 #line 516 "pikchr.y"
2368 { yylhsminor.yy254 = pik_elem_new(p,0,0,0);
2369 if(yylhsminor.yy254){ yylhsminor.yy254->ptAt = yymsp[0].minor.yy139; pik_elem_setname(p,yylhsminor.yy254,&yymsp[-2].minor.yy0); }}
2370 #line 2395 "pikchr.c"
2371 yymsp[-2].minor.yy254 = yylhsminor.yy254;
2372 break;
2373 case 8: /* element ::= unnamed_element */
2374 #line 518 "pikchr.y"
2375 {yylhsminor.yy254 = yymsp[0].minor.yy254;}
2376 #line 2401 "pikchr.c"
2377 yymsp[0].minor.yy254 = yylhsminor.yy254;
2378 break;
2379 case 9: /* element ::= print prlist */
2380 #line 519 "pikchr.y"
2381 {pik_append(p,"<br>\n",5); yymsp[-1].minor.yy254=0;}
2382 #line 2407 "pikchr.c"
2383 break;
2384 case 10: /* element ::= ASSERT LP expr EQ expr RP */
2385 #line 524 "pikchr.y"
2386 {yymsp[-5].minor.yy254=pik_assert(p,yymsp[-3].minor.yy73,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy73);}
2387 #line 2412 "pikchr.c"
2388 break;
2389 case 11: /* element ::= ASSERT LP place EQ place RP */
2390 #line 526 "pikchr.y"
2391 {yymsp[-5].minor.yy254=pik_place_assert(p,&yymsp[-3].minor.yy139,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy139);}
2392 #line 2417 "pikchr.c"
2393 break;
2394 case 12: /* rvalue ::= PLACENAME */
2395 #line 537 "pikchr.y"
2396 {yylhsminor.yy73 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2397 #line 2422 "pikchr.c"
2398 yymsp[0].minor.yy73 = yylhsminor.yy73;
2399 break;
2400 case 13: /* pritem ::= FILL */
2401 case 14: /* pritem ::= COLOR */ yytestcase(yyruleno==14);
2402 case 15: /* pritem ::= THICKNESS */ yytestcase(yyruleno==15);
2403 #line 542 "pikchr.y"
2404 {pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));}
2405 #line 2430 "pikchr.c"
2406 break;
2407 case 16: /* pritem ::= rvalue */
2408 #line 545 "pikchr.y"
2409 {pik_append_num(p,"",yymsp[0].minor.yy73);}
2410 #line 2435 "pikchr.c"
2411 break;
2412 case 17: /* pritem ::= STRING */
2413 #line 546 "pikchr.y"
2414 {pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2415 #line 2440 "pikchr.c"
2416 break;
2417 case 18: /* prsep ::= COMMA */
2418 #line 547 "pikchr.y"
2419 {pik_append(p, " ", 1);}
2420 #line 2445 "pikchr.c"
2421 break;
2422 case 19: /* unnamed_element ::= basetype attribute_list */
2423 #line 550 "pikchr.y"
2424 {yylhsminor.yy254 = yymsp[-1].minor.yy254; pik_after_adding_attributes(p,yylhsminor.yy254);}
2425 #line 2450 "pikchr.c"
2426 yymsp[-1].minor.yy254 = yylhsminor.yy254;
2427 break;
2428 case 20: /* basetype ::= CLASSNAME */
2429 #line 552 "pikchr.y"
2430 {yylhsminor.yy254 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2431 #line 2456 "pikchr.c"
2432 yymsp[0].minor.yy254 = yylhsminor.yy254;
2433 break;
2434 case 21: /* basetype ::= STRING textposition */
2435 #line 554 "pikchr.y"
2436 {yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy74; yylhsminor.yy254 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2437 #line 2462 "pikchr.c"
2438 yymsp[-1].minor.yy254 = yylhsminor.yy254;
2439 break;
2440 case 22: /* basetype ::= LB savelist element_list RB */
2441 #line 556 "pikchr.y"
2442 { p->list = yymsp[-2].minor.yy72; yymsp[-3].minor.yy254 = pik_elem_new(p,0,0,yymsp[-1].minor.yy72); if(yymsp[-3].minor.yy254) yymsp[-3].minor.yy254->errTok = yymsp[0].minor.yy0; }
2443 #line 2468 "pikchr.c"
2444 break;
2445 case 23: /* savelist ::= */
2446 #line 561 "pikchr.y"
2447 {yymsp[1].minor.yy72 = p->list; p->list = 0;}
2448 #line 2473 "pikchr.c"
2449 break;
2450 case 24: /* relexpr ::= expr */
2451 #line 568 "pikchr.y"
2452 {yylhsminor.yy60.rAbs = yymsp[0].minor.yy73; yylhsminor.yy60.rRel = 0;}
2453 #line 2478 "pikchr.c"
2454 yymsp[0].minor.yy60 = yylhsminor.yy60;
2455 break;
2456 case 25: /* relexpr ::= expr PERCENT */
2457 #line 569 "pikchr.y"
2458 {yylhsminor.yy60.rAbs = 0; yylhsminor.yy60.rRel = yymsp[-1].minor.yy73/100;}
2459 #line 2484 "pikchr.c"
2460 yymsp[-1].minor.yy60 = yylhsminor.yy60;
2461 break;
2462 case 26: /* optrelexpr ::= */
2463 #line 571 "pikchr.y"
2464 {yymsp[1].minor.yy60.rAbs = 0; yymsp[1].minor.yy60.rRel = 1.0;}
2465 #line 2490 "pikchr.c"
2466 break;
2467 case 27: /* attribute_list ::= relexpr alist */
2468 #line 573 "pikchr.y"
2469 {pik_add_direction(p,0,&yymsp[-1].minor.yy60);}
2470 #line 2495 "pikchr.c"
2471 break;
2472 case 28: /* attribute ::= numproperty relexpr */
2473 #line 577 "pikchr.y"
2474 { pik_set_numprop(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy60); }
2475 #line 2500 "pikchr.c"
2476 break;
2477 case 29: /* attribute ::= dashproperty expr */
2478 #line 578 "pikchr.y"
2479 { pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy73); }
2480 #line 2505 "pikchr.c"
2481 break;
2482 case 30: /* attribute ::= dashproperty */
2483 #line 579 "pikchr.y"
 
 
 
 
 
 
 
 
 
 
 
2484 { pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2485 #line 2510 "pikchr.c"
2486 break;
2487 case 31: /* attribute ::= colorproperty rvalue */
2488 #line 580 "pikchr.y"
2489 { pik_set_clrprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy73); }
2490 #line 2515 "pikchr.c"
2491 break;
2492 case 32: /* attribute ::= go direction optrelexpr */
2493 #line 581 "pikchr.y"
2494 { pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy60);}
2495 #line 2520 "pikchr.c"
2496 break;
2497 case 33: /* attribute ::= go direction even position */
2498 #line 582 "pikchr.y"
2499 {pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy139);}
2500 #line 2525 "pikchr.c"
2501 break;
2502 case 34: /* attribute ::= CLOSE */
2503 #line 583 "pikchr.y"
 
 
 
 
 
2504 { pik_close_path(p,&yymsp[0].minor.yy0); }
2505 #line 2530 "pikchr.c"
2506 break;
2507 case 35: /* attribute ::= CHOP */
2508 #line 584 "pikchr.y"
2509 { p->cur->bChop = 1; }
2510 #line 2535 "pikchr.c"
2511 break;
2512 case 36: /* attribute ::= FROM position */
2513 #line 585 "pikchr.y"
2514 { pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy139); }
2515 #line 2540 "pikchr.c"
2516 break;
2517 case 37: /* attribute ::= TO position */
2518 #line 586 "pikchr.y"
2519 { pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy139); }
2520 #line 2545 "pikchr.c"
2521 break;
2522 case 38: /* attribute ::= THEN */
2523 #line 587 "pikchr.y"
2524 { pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2525 #line 2550 "pikchr.c"
2526 break;
2527 case 39: /* attribute ::= THEN optrelexpr HEADING expr */
2528 case 41: /* attribute ::= GO optrelexpr HEADING expr */ yytestcase(yyruleno==41);
2529 #line 589 "pikchr.y"
2530 {pik_move_hdg(p,&yymsp[-2].minor.yy60,&yymsp[-1].minor.yy0,yymsp[0].minor.yy73,0,&yymsp[-3].minor.yy0);}
2531 #line 2556 "pikchr.c"
2532 break;
2533 case 40: /* attribute ::= THEN optrelexpr EDGEPT */
2534 case 42: /* attribute ::= GO optrelexpr EDGEPT */ yytestcase(yyruleno==42);
2535 #line 590 "pikchr.y"
2536 {pik_move_hdg(p,&yymsp[-1].minor.yy60,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);}
2537 #line 2562 "pikchr.c"
2538 break;
2539 case 43: /* attribute ::= AT position */
2540 #line 595 "pikchr.y"
2541 { pik_set_at(p,0,&yymsp[0].minor.yy139,&yymsp[-1].minor.yy0); }
2542 #line 2567 "pikchr.c"
2543 break;
2544 case 44: /* attribute ::= SAME */
2545 #line 597 "pikchr.y"
2546 {pik_same(p,0,&yymsp[0].minor.yy0);}
2547 #line 2572 "pikchr.c"
2548 break;
2549 case 45: /* attribute ::= SAME AS object */
2550 #line 598 "pikchr.y"
2551 {pik_same(p,yymsp[0].minor.yy254,&yymsp[-2].minor.yy0);}
2552 #line 2577 "pikchr.c"
2553 break;
2554 case 46: /* attribute ::= STRING textposition */
2555 #line 599 "pikchr.y"
2556 {pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy74);}
2557 #line 2582 "pikchr.c"
2558 break;
2559 case 47: /* attribute ::= FIT */
2560 #line 600 "pikchr.y"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2561 {pik_size_to_fit(p,&yymsp[0].minor.yy0); }
2562 #line 2587 "pikchr.c"
2563 break;
2564 case 48: /* attribute ::= BEHIND object */
2565 #line 601 "pikchr.y"
2566 {pik_behind(p,yymsp[0].minor.yy254);}
2567 #line 2592 "pikchr.c"
2568 break;
2569 case 49: /* withclause ::= DOT_E edge AT position */
2570 case 50: /* withclause ::= edge AT position */ yytestcase(yyruleno==50);
2571 #line 609 "pikchr.y"
2572 { pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy139,&yymsp[-1].minor.yy0); }
2573 #line 2598 "pikchr.c"
2574 break;
2575 case 51: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2576 #line 613 "pikchr.y"
2577 {yylhsminor.yy0 = yymsp[0].minor.yy0;}
2578 #line 2603 "pikchr.c"
2579 yymsp[0].minor.yy0 = yylhsminor.yy0;
2580 break;
2581 case 52: /* boolproperty ::= CW */
2582 #line 624 "pikchr.y"
2583 {p->cur->cw = 1;}
2584 #line 2609 "pikchr.c"
2585 break;
2586 case 53: /* boolproperty ::= CCW */
2587 #line 625 "pikchr.y"
2588 {p->cur->cw = 0;}
2589 #line 2614 "pikchr.c"
2590 break;
2591 case 54: /* boolproperty ::= LARROW */
2592 #line 626 "pikchr.y"
2593 {p->cur->larrow=1; p->cur->rarrow=0; }
2594 #line 2619 "pikchr.c"
2595 break;
2596 case 55: /* boolproperty ::= RARROW */
2597 #line 627 "pikchr.y"
2598 {p->cur->larrow=0; p->cur->rarrow=1; }
2599 #line 2624 "pikchr.c"
2600 break;
2601 case 56: /* boolproperty ::= LRARROW */
2602 #line 628 "pikchr.y"
2603 {p->cur->larrow=1; p->cur->rarrow=1; }
2604 #line 2629 "pikchr.c"
2605 break;
2606 case 57: /* boolproperty ::= INVIS */
2607 #line 629 "pikchr.y"
2608 {p->cur->sw = 0.0;}
2609 #line 2634 "pikchr.c"
2610 break;
2611 case 58: /* boolproperty ::= THICK */
2612 #line 630 "pikchr.y"
2613 {p->cur->sw *= 1.5;}
2614 #line 2639 "pikchr.c"
2615 break;
2616 case 59: /* boolproperty ::= THIN */
2617 #line 631 "pikchr.y"
2618 {p->cur->sw *= 0.67;}
2619 #line 2644 "pikchr.c"
2620 break;
2621 case 60: /* textposition ::= */
2622 #line 633 "pikchr.y"
2623 {yymsp[1].minor.yy74 = 0;}
2624 #line 2649 "pikchr.c"
2625 break;
2626 case 61: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2627 #line 636 "pikchr.y"
2628 {yylhsminor.yy74 = pik_text_position(p,yymsp[-1].minor.yy74,&yymsp[0].minor.yy0);}
2629 #line 2654 "pikchr.c"
2630 yymsp[-1].minor.yy74 = yylhsminor.yy74;
2631 break;
2632 case 62: /* position ::= expr COMMA expr */
2633 #line 639 "pikchr.y"
2634 {yylhsminor.yy139.x=yymsp[-2].minor.yy73; yylhsminor.yy139.y=yymsp[0].minor.yy73;}
2635 #line 2660 "pikchr.c"
2636 yymsp[-2].minor.yy139 = yylhsminor.yy139;
2637 break;
2638 case 63: /* position ::= place PLUS expr COMMA expr */
2639 #line 641 "pikchr.y"
2640 {yylhsminor.yy139.x=yymsp[-4].minor.yy139.x+yymsp[-2].minor.yy73; yylhsminor.yy139.y=yymsp[-4].minor.yy139.y+yymsp[0].minor.yy73;}
2641 #line 2666 "pikchr.c"
2642 yymsp[-4].minor.yy139 = yylhsminor.yy139;
2643 break;
2644 case 64: /* position ::= place MINUS expr COMMA expr */
2645 #line 642 "pikchr.y"
2646 {yylhsminor.yy139.x=yymsp[-4].minor.yy139.x-yymsp[-2].minor.yy73; yylhsminor.yy139.y=yymsp[-4].minor.yy139.y-yymsp[0].minor.yy73;}
2647 #line 2672 "pikchr.c"
2648 yymsp[-4].minor.yy139 = yylhsminor.yy139;
2649 break;
2650 case 65: /* position ::= place PLUS LP expr COMMA expr RP */
2651 #line 644 "pikchr.y"
2652 {yylhsminor.yy139.x=yymsp[-6].minor.yy139.x+yymsp[-3].minor.yy73; yylhsminor.yy139.y=yymsp[-6].minor.yy139.y+yymsp[-1].minor.yy73;}
2653 #line 2678 "pikchr.c"
2654 yymsp[-6].minor.yy139 = yylhsminor.yy139;
2655 break;
2656 case 66: /* position ::= place MINUS LP expr COMMA expr RP */
2657 #line 646 "pikchr.y"
2658 {yylhsminor.yy139.x=yymsp[-6].minor.yy139.x-yymsp[-3].minor.yy73; yylhsminor.yy139.y=yymsp[-6].minor.yy139.y-yymsp[-1].minor.yy73;}
2659 #line 2684 "pikchr.c"
2660 yymsp[-6].minor.yy139 = yylhsminor.yy139;
2661 break;
2662 case 67: /* position ::= LP position COMMA position RP */
2663 #line 647 "pikchr.y"
2664 {yymsp[-4].minor.yy139.x=yymsp[-3].minor.yy139.x; yymsp[-4].minor.yy139.y=yymsp[-1].minor.yy139.y;}
2665 #line 2690 "pikchr.c"
2666 break;
2667 case 68: /* position ::= LP position RP */
2668 #line 648 "pikchr.y"
2669 {yymsp[-2].minor.yy139=yymsp[-1].minor.yy139;}
2670 #line 2695 "pikchr.c"
2671 break;
2672 case 69: /* position ::= expr between position AND position */
2673 #line 650 "pikchr.y"
2674 {yylhsminor.yy139 = pik_position_between(p,yymsp[-4].minor.yy73,yymsp[-2].minor.yy139,yymsp[0].minor.yy139);}
2675 #line 2700 "pikchr.c"
2676 yymsp[-4].minor.yy139 = yylhsminor.yy139;
2677 break;
2678 case 70: /* position ::= expr LT position COMMA position GT */
2679 #line 652 "pikchr.y"
2680 {yylhsminor.yy139 = pik_position_between(p,yymsp[-5].minor.yy73,yymsp[-3].minor.yy139,yymsp[-1].minor.yy139);}
2681 #line 2706 "pikchr.c"
2682 yymsp[-5].minor.yy139 = yylhsminor.yy139;
2683 break;
2684 case 71: /* position ::= expr ABOVE position */
2685 #line 653 "pikchr.y"
2686 {yylhsminor.yy139=yymsp[0].minor.yy139; yylhsminor.yy139.y += yymsp[-2].minor.yy73;}
2687 #line 2712 "pikchr.c"
2688 yymsp[-2].minor.yy139 = yylhsminor.yy139;
2689 break;
2690 case 72: /* position ::= expr BELOW position */
2691 #line 654 "pikchr.y"
2692 {yylhsminor.yy139=yymsp[0].minor.yy139; yylhsminor.yy139.y -= yymsp[-2].minor.yy73;}
2693 #line 2718 "pikchr.c"
2694 yymsp[-2].minor.yy139 = yylhsminor.yy139;
2695 break;
2696 case 73: /* position ::= expr LEFT OF position */
2697 #line 655 "pikchr.y"
2698 {yylhsminor.yy139=yymsp[0].minor.yy139; yylhsminor.yy139.x -= yymsp[-3].minor.yy73;}
2699 #line 2724 "pikchr.c"
2700 yymsp[-3].minor.yy139 = yylhsminor.yy139;
2701 break;
2702 case 74: /* position ::= expr RIGHT OF position */
2703 #line 656 "pikchr.y"
2704 {yylhsminor.yy139=yymsp[0].minor.yy139; yylhsminor.yy139.x += yymsp[-3].minor.yy73;}
2705 #line 2730 "pikchr.c"
2706 yymsp[-3].minor.yy139 = yylhsminor.yy139;
2707 break;
2708 case 75: /* position ::= expr ON HEADING EDGEPT OF position */
2709 #line 658 "pikchr.y"
2710 {yylhsminor.yy139 = pik_position_at_hdg(p,yymsp[-5].minor.yy73,&yymsp[-2].minor.yy0,yymsp[0].minor.yy139);}
2711 #line 2736 "pikchr.c"
2712 yymsp[-5].minor.yy139 = yylhsminor.yy139;
2713 break;
2714 case 76: /* position ::= expr HEADING EDGEPT OF position */
2715 #line 660 "pikchr.y"
2716 {yylhsminor.yy139 = pik_position_at_hdg(p,yymsp[-4].minor.yy73,&yymsp[-2].minor.yy0,yymsp[0].minor.yy139);}
2717 #line 2742 "pikchr.c"
2718 yymsp[-4].minor.yy139 = yylhsminor.yy139;
2719 break;
2720 case 77: /* position ::= expr EDGEPT OF position */
2721 #line 662 "pikchr.y"
2722 {yylhsminor.yy139 = pik_position_at_hdg(p,yymsp[-3].minor.yy73,&yymsp[-2].minor.yy0,yymsp[0].minor.yy139);}
2723 #line 2748 "pikchr.c"
2724 yymsp[-3].minor.yy139 = yylhsminor.yy139;
2725 break;
2726 case 78: /* position ::= expr ON HEADING expr FROM position */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2727 #line 664 "pikchr.y"
2728 {yylhsminor.yy139 = pik_position_at_angle(p,yymsp[-5].minor.yy73,yymsp[-2].minor.yy73,yymsp[0].minor.yy139);}
2729 #line 2754 "pikchr.c"
2730 yymsp[-5].minor.yy139 = yylhsminor.yy139;
2731 break;
2732 case 79: /* position ::= expr HEADING expr FROM position */
 
 
 
 
 
 
2733 #line 666 "pikchr.y"
2734 {yylhsminor.yy139 = pik_position_at_angle(p,yymsp[-4].minor.yy73,yymsp[-2].minor.yy73,yymsp[0].minor.yy139);}
2735 #line 2760 "pikchr.c"
2736 yymsp[-4].minor.yy139 = yylhsminor.yy139;
2737 break;
2738 case 80: /* place ::= edge OF object */
2739 #line 678 "pikchr.y"
2740 {yylhsminor.yy139 = pik_place_of_elem(p,yymsp[0].minor.yy254,&yymsp[-2].minor.yy0);}
2741 #line 2766 "pikchr.c"
2742 yymsp[-2].minor.yy139 = yylhsminor.yy139;
2743 break;
2744 case 81: /* place2 ::= object */
2745 #line 679 "pikchr.y"
2746 {yylhsminor.yy139 = pik_place_of_elem(p,yymsp[0].minor.yy254,0);}
2747 #line 2772 "pikchr.c"
2748 yymsp[0].minor.yy139 = yylhsminor.yy139;
2749 break;
2750 case 82: /* place2 ::= object DOT_E edge */
2751 #line 680 "pikchr.y"
2752 {yylhsminor.yy139 = pik_place_of_elem(p,yymsp[-2].minor.yy254,&yymsp[0].minor.yy0);}
2753 #line 2778 "pikchr.c"
2754 yymsp[-2].minor.yy139 = yylhsminor.yy139;
2755 break;
2756 case 83: /* place2 ::= NTH VERTEX OF object */
2757 #line 681 "pikchr.y"
2758 {yylhsminor.yy139 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy254);}
2759 #line 2784 "pikchr.c"
2760 yymsp[-3].minor.yy139 = yylhsminor.yy139;
2761 break;
2762 case 84: /* object ::= nth */
2763 #line 693 "pikchr.y"
2764 {yylhsminor.yy254 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2765 #line 2790 "pikchr.c"
2766 yymsp[0].minor.yy254 = yylhsminor.yy254;
2767 break;
2768 case 85: /* object ::= nth OF|IN object */
2769 #line 694 "pikchr.y"
2770 {yylhsminor.yy254 = pik_find_nth(p,yymsp[0].minor.yy254,&yymsp[-2].minor.yy0);}
2771 #line 2796 "pikchr.c"
2772 yymsp[-2].minor.yy254 = yylhsminor.yy254;
2773 break;
2774 case 86: /* objectname ::= PLACENAME */
2775 #line 696 "pikchr.y"
2776 {yylhsminor.yy254 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2777 #line 2802 "pikchr.c"
2778 yymsp[0].minor.yy254 = yylhsminor.yy254;
2779 break;
2780 case 87: /* objectname ::= objectname DOT_U PLACENAME */
2781 #line 698 "pikchr.y"
2782 {yylhsminor.yy254 = pik_find_byname(p,yymsp[-2].minor.yy254,&yymsp[0].minor.yy0);}
2783 #line 2808 "pikchr.c"
2784 yymsp[-2].minor.yy254 = yylhsminor.yy254;
2785 break;
2786 case 88: /* nth ::= NTH CLASSNAME */
2787 #line 700 "pikchr.y"
2788 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2789 #line 2814 "pikchr.c"
2790 yymsp[-1].minor.yy0 = yylhsminor.yy0;
2791 break;
2792 case 89: /* nth ::= NTH LAST CLASSNAME */
2793 #line 701 "pikchr.y"
2794 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2795 #line 2820 "pikchr.c"
2796 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2797 break;
2798 case 90: /* nth ::= LAST CLASSNAME */
2799 #line 702 "pikchr.y"
2800 {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2801 #line 2826 "pikchr.c"
2802 break;
2803 case 91: /* nth ::= LAST */
2804 #line 703 "pikchr.y"
2805 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2806 #line 2831 "pikchr.c"
2807 yymsp[0].minor.yy0 = yylhsminor.yy0;
2808 break;
2809 case 92: /* nth ::= NTH LB RB */
2810 #line 704 "pikchr.y"
2811 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2812 #line 2837 "pikchr.c"
2813 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2814 break;
2815 case 93: /* nth ::= NTH LAST LB RB */
2816 #line 705 "pikchr.y"
2817 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2818 #line 2843 "pikchr.c"
2819 yymsp[-3].minor.yy0 = yylhsminor.yy0;
2820 break;
2821 case 94: /* nth ::= LAST LB RB */
2822 #line 706 "pikchr.y"
2823 {yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2824 #line 2849 "pikchr.c"
2825 break;
2826 case 95: /* expr ::= expr PLUS expr */
2827 #line 708 "pikchr.y"
2828 {yylhsminor.yy73=yymsp[-2].minor.yy73+yymsp[0].minor.yy73;}
2829 #line 2854 "pikchr.c"
2830 yymsp[-2].minor.yy73 = yylhsminor.yy73;
2831 break;
2832 case 96: /* expr ::= expr MINUS expr */
2833 #line 709 "pikchr.y"
2834 {yylhsminor.yy73=yymsp[-2].minor.yy73-yymsp[0].minor.yy73;}
2835 #line 2860 "pikchr.c"
2836 yymsp[-2].minor.yy73 = yylhsminor.yy73;
2837 break;
2838 case 97: /* expr ::= expr STAR expr */
2839 #line 710 "pikchr.y"
2840 {yylhsminor.yy73=yymsp[-2].minor.yy73*yymsp[0].minor.yy73;}
2841 #line 2866 "pikchr.c"
2842 yymsp[-2].minor.yy73 = yylhsminor.yy73;
2843 break;
2844 case 98: /* expr ::= expr SLASH expr */
2845 #line 711 "pikchr.y"
2846 {
2847 if( yymsp[0].minor.yy73==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy73 = 0.0; }
2848 else{ yylhsminor.yy73 = yymsp[-2].minor.yy73/yymsp[0].minor.yy73; }
2849 }
2850 #line 2875 "pikchr.c"
2851 yymsp[-2].minor.yy73 = yylhsminor.yy73;
2852 break;
2853 case 99: /* expr ::= MINUS expr */
2854 #line 715 "pikchr.y"
2855 {yymsp[-1].minor.yy73=-yymsp[0].minor.yy73;}
2856 #line 2881 "pikchr.c"
2857 break;
2858 case 100: /* expr ::= PLUS expr */
2859 #line 716 "pikchr.y"
2860 {yymsp[-1].minor.yy73=yymsp[0].minor.yy73;}
2861 #line 2886 "pikchr.c"
2862 break;
2863 case 101: /* expr ::= LP expr RP */
2864 #line 717 "pikchr.y"
2865 {yymsp[-2].minor.yy73=yymsp[-1].minor.yy73;}
2866 #line 2891 "pikchr.c"
2867 break;
2868 case 102: /* expr ::= NUMBER */
2869 #line 718 "pikchr.y"
2870 {yylhsminor.yy73=pik_atof(p,&yymsp[0].minor.yy0);}
2871 #line 2896 "pikchr.c"
2872 yymsp[0].minor.yy73 = yylhsminor.yy73;
2873 break;
2874 case 103: /* expr ::= ID */
2875 #line 719 "pikchr.y"
2876 {yylhsminor.yy73=pik_get_var(p,&yymsp[0].minor.yy0);}
2877 #line 2902 "pikchr.c"
2878 yymsp[0].minor.yy73 = yylhsminor.yy73;
2879 break;
2880 case 104: /* expr ::= FUNC1 LP expr RP */
2881 #line 720 "pikchr.y"
2882 {yylhsminor.yy73 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy73,0.0);}
2883 #line 2908 "pikchr.c"
2884 yymsp[-3].minor.yy73 = yylhsminor.yy73;
2885 break;
2886 case 105: /* expr ::= FUNC2 LP expr COMMA expr RP */
2887 #line 721 "pikchr.y"
2888 {yylhsminor.yy73 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy73,yymsp[-1].minor.yy73);}
2889 #line 2914 "pikchr.c"
2890 yymsp[-5].minor.yy73 = yylhsminor.yy73;
2891 break;
2892 case 106: /* expr ::= place2 DOT_XY X */
2893 #line 722 "pikchr.y"
2894 {yylhsminor.yy73 = yymsp[-2].minor.yy139.x;}
2895 #line 2920 "pikchr.c"
2896 yymsp[-2].minor.yy73 = yylhsminor.yy73;
2897 break;
2898 case 107: /* expr ::= place2 DOT_XY Y */
2899 #line 723 "pikchr.y"
2900 {yylhsminor.yy73 = yymsp[-2].minor.yy139.y;}
2901 #line 2926 "pikchr.c"
2902 yymsp[-2].minor.yy73 = yylhsminor.yy73;
2903 break;
2904 case 108: /* expr ::= object DOT_L numproperty */
2905 case 109: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==109);
2906 case 110: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==110);
2907 #line 724 "pikchr.y"
2908 {yylhsminor.yy73=pik_property_of(p,yymsp[-2].minor.yy254,&yymsp[0].minor.yy0);}
2909 #line 2934 "pikchr.c"
2910 yymsp[-2].minor.yy73 = yylhsminor.yy73;
2911 break;
2912 default:
2913 /* (111) lvalue ::= ID */ yytestcase(yyruleno==111);
2914 /* (112) lvalue ::= FILL */ yytestcase(yyruleno==112);
2915 /* (113) lvalue ::= COLOR */ yytestcase(yyruleno==113);
2916 /* (114) lvalue ::= THICKNESS */ yytestcase(yyruleno==114);
2917 /* (115) rvalue ::= expr */ yytestcase(yyruleno==115);
2918 /* (116) print ::= PRINT */ yytestcase(yyruleno==116);
2919 /* (117) prlist ::= pritem (OPTIMIZED OUT) */ assert(yyruleno!=117);
2920 /* (118) prlist ::= prlist prsep pritem */ yytestcase(yyruleno==118);
2921 /* (119) direction ::= UP */ yytestcase(yyruleno==119);
2922 /* (120) direction ::= DOWN */ yytestcase(yyruleno==120);
2923 /* (121) direction ::= LEFT */ yytestcase(yyruleno==121);
2924 /* (122) direction ::= RIGHT */ yytestcase(yyruleno==122);
2925 /* (123) optrelexpr ::= relexpr (OPTIMIZED OUT) */ assert(yyruleno!=123);
2926 /* (124) attribute_list ::= alist */ yytestcase(yyruleno==124);
2927 /* (125) alist ::= */ yytestcase(yyruleno==125);
2928 /* (126) alist ::= alist attribute */ yytestcase(yyruleno==126);
2929 /* (127) attribute ::= boolproperty (OPTIMIZED OUT) */ assert(yyruleno!=127);
2930 /* (128) attribute ::= WITH withclause */ yytestcase(yyruleno==128);
2931 /* (129) go ::= GO */ yytestcase(yyruleno==129);
2932 /* (130) go ::= */ yytestcase(yyruleno==130);
2933 /* (131) even ::= UNTIL EVEN WITH */ yytestcase(yyruleno==131);
2934 /* (132) even ::= EVEN WITH */ yytestcase(yyruleno==132);
2935 /* (133) dashproperty ::= DOTTED */ yytestcase(yyruleno==133);
2936 /* (134) dashproperty ::= DASHED */ yytestcase(yyruleno==134);
2937 /* (135) colorproperty ::= FILL */ yytestcase(yyruleno==135);
2938 /* (136) colorproperty ::= COLOR */ yytestcase(yyruleno==136);
2939 /* (137) position ::= place */ yytestcase(yyruleno==137);
2940 /* (138) between ::= WAY BETWEEN */ yytestcase(yyruleno==138);
2941 /* (139) between ::= BETWEEN */ yytestcase(yyruleno==139);
2942 /* (140) between ::= OF THE WAY BETWEEN */ yytestcase(yyruleno==140);
2943 /* (141) place ::= place2 */ yytestcase(yyruleno==141);
2944 /* (142) edge ::= CENTER */ yytestcase(yyruleno==142);
2945 /* (143) edge ::= EDGEPT */ yytestcase(yyruleno==143);
2946 /* (144) edge ::= TOP */ yytestcase(yyruleno==144);
2947 /* (145) edge ::= BOTTOM */ yytestcase(yyruleno==145);
2948 /* (146) edge ::= START */ yytestcase(yyruleno==146);
2949 /* (147) edge ::= END */ yytestcase(yyruleno==147);
2950 /* (148) edge ::= RIGHT */ yytestcase(yyruleno==148);
2951 /* (149) edge ::= LEFT */ yytestcase(yyruleno==149);
2952 /* (150) object ::= objectname */ yytestcase(yyruleno==150);
2953 break;
2954 /********** End reduce actions ************************************************/
2955 };
2956 assert( yyruleno<sizeof(yyRuleInfoLhs)/sizeof(yyRuleInfoLhs[0]) );
2957 yygoto = yyRuleInfoLhs[yyruleno];
@@ -3034,18 +3007,18 @@
3007 ){
3008 pik_parserARG_FETCH
3009 pik_parserCTX_FETCH
3010 #define TOKEN yyminor
3011 /************ Begin %syntax_error code ****************************************/
3012 #line 491 "pikchr.y"
3013
3014 if( TOKEN.z && TOKEN.z[0] ){
3015 pik_error(p, &TOKEN, "syntax error");
3016 }else{
3017 pik_error(p, 0, "syntax error");
3018 }
3019 #line 3044 "pikchr.c"
3020 /************ End %syntax_error code ******************************************/
3021 pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
3022 pik_parserCTX_STORE
3023 }
3024
@@ -3274,11 +3247,11 @@
3247 #else
3248 (void)iToken;
3249 return 0;
3250 #endif
3251 }
3252 #line 729 "pikchr.y"
3253
3254
3255
3256 /* Chart of the 140 official HTML color names with their
3257 ** corresponding RGB value.
@@ -3490,28 +3463,42 @@
3463 ** than true arcs. Multiple reasons: (1) the legacy-PIC parameters
3464 ** that control arcs are obscure and I could not figure out what they
3465 ** mean based on available documentation. (2) Arcs are rarely used,
3466 ** and so do not seem that important.
3467 */
3468 static PPoint arcControlPoint(int cw, PPoint f, PPoint t, PNum rScale){
3469 PPoint m;
3470 PNum dx, dy;
3471 m.x = 0.5*(f.x+t.x);
3472 m.y = 0.5*(f.y+t.y);
3473 dx = t.x - f.x;
3474 dy = t.y - f.y;
3475 if( cw ){
3476 m.x -= 0.5*rScale*dy;
3477 m.y += 0.5*rScale*dx;
3478 }else{
3479 m.x += 0.5*rScale*dy;
3480 m.y -= 0.5*rScale*dx;
3481 }
3482 return m;
3483 }
3484 static void arcCheck(Pik *p, PElem *pElem){
3485 PPoint m;
3486 if( p->nTPath>2 ){
3487 pik_error(p, &pElem->errTok, "arc geometry error");
3488 return;
3489 }
3490 m = arcControlPoint(pElem->cw, p->aTPath[0], p->aTPath[1], 0.5);
3491 pik_bbox_add_xy(&pElem->bbox, m.x, m.y);
3492 }
3493 static void arcRender(Pik *p, PElem *pElem){
3494 PPoint f, m, t;
3495 if( pElem->nPath<2 ) return;
3496 if( pElem->sw<=0.0 ) return;
3497 f = pElem->aPath[0];
3498 t = pElem->aPath[1];
3499 m = arcControlPoint(pElem->cw,f,t,1.0);
 
 
 
 
 
 
 
 
 
 
3500 if( pElem->larrow ){
3501 pik_draw_arrowhead(p,&m,&f,pElem);
3502 }
3503 if( pElem->rarrow ){
3504 pik_draw_arrowhead(p,&m,&t,pElem);
@@ -4078,10 +4065,16 @@
4065 static void textInit(Pik *p, PElem *pElem){
4066 pik_value(p, "textwid",7,0);
4067 pik_value(p, "textht",6,0);
4068 pElem->sw = 0.0;
4069 }
4070 static void textCheck(Pik *p, PElem *pElem){
4071 /* Automatically slim-down the width and height of text
4072 ** elements so that the bounding box tightly encloses the text */
4073 pik_size_to_fit(p, &pElem->errTok);
4074 }
4075
4076
4077 /* Methods for the "sublist" class */
4078 static void sublistInit(Pik *p, PElem *pElem){
4079 PEList *pList = pElem->pSublist;
4080 int i;
@@ -4105,10 +4098,11 @@
4098 { /* name */ "arc",
4099 /* isline */ 1,
4100 /* eJust */ 0,
4101 /* xInit */ arcInit,
4102 /* xNumProp */ 0,
4103 /* xCheck */ arcCheck,
4104 /* xChop */ 0,
4105 /* xOffset */ 0,
4106 /* xFit */ 0,
4107 /* xRender */ arcRender
4108 },
@@ -4115,10 +4109,11 @@
4109 { /* name */ "arrow",
4110 /* isline */ 1,
4111 /* eJust */ 0,
4112 /* xInit */ arrowInit,
4113 /* xNumProp */ 0,
4114 /* xCheck */ 0,
4115 /* xChop */ 0,
4116 /* xOffset */ lineOffset,
4117 /* xFit */ 0,
4118 /* xRender */ splineRender
4119 },
@@ -4125,10 +4120,11 @@
4120 { /* name */ "box",
4121 /* isline */ 0,
4122 /* eJust */ 1,
4123 /* xInit */ boxInit,
4124 /* xNumProp */ 0,
4125 /* xCheck */ 0,
4126 /* xChop */ boxChop,
4127 /* xOffset */ boxOffset,
4128 /* xFit */ boxFit,
4129 /* xRender */ boxRender
4130 },
@@ -4135,10 +4131,11 @@
4131 { /* name */ "circle",
4132 /* isline */ 0,
4133 /* eJust */ 0,
4134 /* xInit */ circleInit,
4135 /* xNumProp */ circleNumProp,
4136 /* xCheck */ 0,
4137 /* xChop */ circleChop,
4138 /* xOffset */ ellipseOffset,
4139 /* xFit */ circleFit,
4140 /* xRender */ circleRender
4141 },
@@ -4145,10 +4142,11 @@
4142 { /* name */ "cylinder",
4143 /* isline */ 0,
4144 /* eJust */ 1,
4145 /* xInit */ cylinderInit,
4146 /* xNumProp */ 0,
4147 /* xCheck */ 0,
4148 /* xChop */ boxChop,
4149 /* xOffset */ cylinderOffset,
4150 /* xFit */ 0,
4151 /* xRender */ cylinderRender
4152 },
@@ -4155,10 +4153,11 @@
4153 { /* name */ "dot",
4154 /* isline */ 0,
4155 /* eJust */ 0,
4156 /* xInit */ dotInit,
4157 /* xNumProp */ dotNumProp,
4158 /* xCheck */ 0,
4159 /* xChop */ circleChop,
4160 /* xOffset */ ellipseOffset,
4161 /* xFit */ 0,
4162 /* xRender */ dotRender
4163 },
@@ -4165,10 +4164,11 @@
4164 { /* name */ "ellipse",
4165 /* isline */ 0,
4166 /* eJust */ 0,
4167 /* xInit */ ellipseInit,
4168 /* xNumProp */ 0,
4169 /* xCheck */ 0,
4170 /* xChop */ ellipseChop,
4171 /* xOffset */ ellipseOffset,
4172 /* xFit */ 0,
4173 /* xRender */ ellipseRender
4174 },
@@ -4175,10 +4175,11 @@
4175 { /* name */ "file",
4176 /* isline */ 0,
4177 /* eJust */ 1,
4178 /* xInit */ fileInit,
4179 /* xNumProp */ 0,
4180 /* xCheck */ 0,
4181 /* xChop */ boxChop,
4182 /* xOffset */ fileOffset,
4183 /* xFit */ fileFit,
4184 /* xRender */ fileRender
4185 },
@@ -4185,10 +4186,11 @@
4186 { /* name */ "line",
4187 /* isline */ 1,
4188 /* eJust */ 0,
4189 /* xInit */ lineInit,
4190 /* xNumProp */ 0,
4191 /* xCheck */ 0,
4192 /* xChop */ 0,
4193 /* xOffset */ lineOffset,
4194 /* xFit */ 0,
4195 /* xRender */ splineRender
4196 },
@@ -4195,10 +4197,11 @@
4197 { /* name */ "move",
4198 /* isline */ 1,
4199 /* eJust */ 0,
4200 /* xInit */ moveInit,
4201 /* xNumProp */ 0,
4202 /* xCheck */ 0,
4203 /* xChop */ 0,
4204 /* xOffset */ 0,
4205 /* xFit */ 0,
4206 /* xRender */ moveRender
4207 },
@@ -4205,10 +4208,11 @@
4208 { /* name */ "oval",
4209 /* isline */ 0,
4210 /* eJust */ 1,
4211 /* xInit */ ovalInit,
4212 /* xNumProp */ ovalNumProp,
4213 /* xCheck */ 0,
4214 /* xChop */ boxChop,
4215 /* xOffset */ boxOffset,
4216 /* xFit */ ovalFit,
4217 /* xRender */ boxRender
4218 },
@@ -4215,10 +4219,11 @@
4219 { /* name */ "spline",
4220 /* isline */ 1,
4221 /* eJust */ 0,
4222 /* xInit */ splineInit,
4223 /* xNumProp */ 0,
4224 /* xCheck */ 0,
4225 /* xChop */ 0,
4226 /* xOffset */ lineOffset,
4227 /* xFit */ 0,
4228 /* xRender */ splineRender
4229 },
@@ -4225,10 +4230,11 @@
4230 { /* name */ "text",
4231 /* isline */ 0,
4232 /* eJust */ 0,
4233 /* xInit */ textInit,
4234 /* xNumProp */ 0,
4235 /* xCheck */ textCheck,
4236 /* xChop */ boxChop,
4237 /* xOffset */ boxOffset,
4238 /* xFit */ boxFit,
4239 /* xRender */ boxRender
4240 },
@@ -4237,10 +4243,11 @@
4243 { /* name */ "[]",
4244 /* isline */ 0,
4245 /* eJust */ 0,
4246 /* xInit */ sublistInit,
4247 /* xNumProp */ 0,
4248 /* xCheck */ 0,
4249 /* xChop */ 0,
4250 /* xOffset */ 0,
4251 /* xFit */ 0,
4252 /* xRender */ 0
4253 };
@@ -4248,10 +4255,11 @@
4255 { /* name */ "noop",
4256 /* isline */ 0,
4257 /* eJust */ 0,
4258 /* xInit */ 0,
4259 /* xNumProp */ 0,
4260 /* xCheck */ 0,
4261 /* xChop */ 0,
4262 /* xOffset */ 0,
4263 /* xFit */ 0,
4264 /* xRender */ 0
4265 };
@@ -5117,56 +5125,53 @@
5125 ** Set a numeric property like "width 7" or "radius 200%".
5126 **
5127 ** The rAbs term is an absolute value to add in. rRel is
5128 ** a relative value by which to change the current value.
5129 */
5130 void pik_set_numprop(Pik *p, PToken *pId, PRel *pVal){
5131 PElem *pElem = p->cur;
5132 switch( pId->eType ){
5133 case T_HEIGHT:
5134 if( pik_param_ok(p, pElem, pId, A_HEIGHT, A_BOTTOM|A_TOP|A_AT) ) return;
5135 pElem->h = pElem->h*pVal->rRel + pVal->rAbs;
 
 
 
 
 
 
 
 
5136 break;
5137 case T_WIDTH:
5138 if( pik_param_ok(p, pElem, pId, A_WIDTH, A_RIGHT|A_LEFT|A_AT) ) return;
5139 pElem->w = pElem->w*pVal->rRel + pVal->rAbs;
 
 
 
 
 
 
 
 
5140 break;
5141 case T_RADIUS:
5142 if( pik_param_ok(p, pElem, pId, A_RADIUS, 0) ) return;
5143 pElem->rad = pElem->rad*pVal->rRel + pVal->rAbs;
5144 break;
5145 case T_DIAMETER:
5146 if( pik_param_ok(p, pElem, pId, A_RADIUS, 0) ) return;
5147 pElem->rad = pElem->rad*pVal->rRel + 0.5*pVal->rAbs; /* diam it 2x rad */
5148 break;
5149 case T_THICKNESS:
5150 if( pik_param_ok(p, pElem, pId, A_THICKNESS, 0) ) return;
5151 pElem->sw = pElem->sw*pVal->rRel + pVal->rAbs;
5152 break;
5153 }
5154 if( pElem->type->xNumProp ){
5155 pElem->type->xNumProp(p, pElem, pId);
5156 }
5157 return;
5158 }
5159
5160 /*
5161 ** Set a color property. The argument is an RGB value.
5162 */
5163 void pik_set_clrprop(Pik *p, PToken *pId, PNum rClr){
5164 PElem *pElem = p->cur;
5165 switch( pId->eType ){
5166 case T_FILL:
5167 if( pik_param_ok(p, pElem, pId, A_FILL, 0) ) return;
5168 pElem->fill = rClr;
5169 break;
5170 case T_COLOR:
5171 if( pik_param_ok(p, pElem, pId, A_COLOR, 0) ) return;
5172 pElem->color = rClr;
5173 break;
5174 }
5175 if( pElem->type->xNumProp ){
5176 pElem->type->xNumProp(p, pElem, pId);
5177 }
@@ -5231,75 +5236,50 @@
5236 p->mTPath = 0;
5237 return n;
5238 }
5239
5240 /* Add a direction term to an element. "up 0.5", or "left 3", or "down"
5241 ** or "down 50%".
 
 
 
 
 
 
 
 
 
 
 
 
 
5242 */
5243 static void pik_add_direction(Pik *p, PToken *pDir, PRel *pVal){
5244 PElem *pElem = p->cur;
5245 int n;
5246 int dir;
 
5247 if( !pElem->type->isLine ){
5248 if( pDir ){
5249 pik_error(p, pDir, "use with line-oriented objects only");
5250 }else{
5251 PToken x = pik_next_semantic_token(p, &pElem->errTok);
5252 pik_error(p, &x, "syntax error");
5253 }
5254 return;
5255 }
 
 
 
 
 
 
 
5256 n = p->nTPath - 1;
5257 if( p->thenFlag || p->mTPath==3 || n==0 ){
5258 n = pik_next_rpath(p, pDir);
5259 p->thenFlag = 0;
5260 }
5261 dir = pDir ? pDir->eCode : p->eDir;
5262 switch( dir ){
5263 case DIR_UP:
5264 if( p->mTPath & 2 ) n = pik_next_rpath(p, pDir);
5265 p->aTPath[n].y += pVal->rAbs + pElem->h*pVal->rRel;
 
5266 p->mTPath |= 2;
5267 break;
5268 case DIR_DOWN:
5269 if( p->mTPath & 2 ) n = pik_next_rpath(p, pDir);
5270 p->aTPath[n].y -= pVal->rAbs + pElem->h*pVal->rRel;
 
5271 p->mTPath |= 2;
5272 break;
5273 case DIR_RIGHT:
5274 if( p->mTPath & 1 ) n = pik_next_rpath(p, pDir);
5275 p->aTPath[n].x += pVal->rAbs + pElem->w*pVal->rRel;
 
5276 p->mTPath |= 1;
5277 break;
5278 case DIR_LEFT:
5279 if( p->mTPath & 1 ) n = pik_next_rpath(p, pDir);
5280 p->aTPath[n].x -= pVal->rAbs + pElem->w*pVal->rRel;
 
5281 p->mTPath |= 1;
5282 break;
5283 }
5284 pElem->outDir = dir;
5285 }
@@ -5306,34 +5286,27 @@
5286
5287 /* Process a movement attribute of one of these forms:
5288 **
5289 ** pDist pHdgKW rHdg pEdgept
5290 ** GO distance HEADING angle
 
5291 ** GO distance compasspoint
 
5292 */
5293 static void pik_move_hdg(
5294 Pik *p, /* The Pikchr context */
5295 PRel *pDist, /* Distance to move */
5296 PToken *pHeading, /* "heading" keyword if present */
5297 PNum rHdg, /* Angle argument to "heading" keyword */
5298 PToken *pEdgept, /* EDGEPT keyword "ne", "sw", etc... */
5299 PToken *pErr /* Token to use for error messages */
5300 ){
5301 PElem *pElem = p->cur;
5302 int n;
5303 PNum rDist = pDist->rAbs + pik_value(p,"linewid",7,0)*pDist->rRel;
5304 if( !pElem->type->isLine ){
5305 pik_error(p, pErr, "use with line-oriented objects only");
5306 return;
5307 }
 
 
 
 
 
5308 do{
5309 n = pik_next_rpath(p, pErr);
5310 }while( n<1 );
5311 if( pHeading ){
5312 if( rHdg<0.0 || rHdg>360.0 ){
@@ -6124,11 +6097,11 @@
6097 default: p->aTPath[1].x += pElem->w; break;
6098 case DIR_DOWN: p->aTPath[1].y -= pElem->h; break;
6099 case DIR_LEFT: p->aTPath[1].x -= pElem->w; break;
6100 case DIR_UP: p->aTPath[1].y += pElem->h; break;
6101 }
6102 if( pElem->type->xInit==arcInit ){
6103 p->eDir = pElem->outDir = (pElem->inDir + (pElem->cw ? 1 : 3))%4;
6104 switch( pElem->outDir ){
6105 default: p->aTPath[1].x += pElem->w; break;
6106 case DIR_DOWN: p->aTPath[1].y -= pElem->h; break;
6107 case DIR_LEFT: p->aTPath[1].x -= pElem->w; break;
@@ -6135,19 +6108,22 @@
6108 case DIR_UP: p->aTPath[1].y += pElem->h; break;
6109 }
6110 }
6111 }
6112
6113 /* Initialize the bounding box prior to running xCheck */
6114 pik_bbox_init(&pElem->bbox);
6115
6116 /* Run object-specific code */
6117 if( pElem->type->xCheck!=0 ){
6118 pElem->type->xCheck(p,pElem);
6119 if( p->nErr ) return;
6120 }
6121
6122 /* Compute final bounding box, entry and exit points, center
6123 ** point (ptAt) and path for the element
6124 */
 
6125 if( pElem->type->isLine ){
6126 pElem->aPath = malloc( sizeof(PPoint)*p->nTPath );
6127 if( pElem->aPath==0 ){
6128 pik_error(p, 0, 0);
6129 pElem->nPath = 0;
@@ -6996,6 +6972,6 @@
6972 printf("</body></html>\n");
6973 return 0;
6974 }
6975 #endif /* PIKCHR_SHELL */
6976
6977 #line 7002 "pikchr.c"
6978

Keyboard Shortcuts

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