Fossil SCM

Add the latest pikchr.c that supports the "go ... heading ..." syntax for specifying line paths.

drh 2020-09-12 03:59 trunk
Commit be125040540e605d57cc7f7eee8390cf8be5caca2b70075560e434b62772fc26
1 file changed +1416 -1276
+1416 -1276
--- src/pikchr.c
+++ src/pikchr.c
@@ -394,10 +394,11 @@
394394
static void pik_elist_move(PEList*,PNum dx, PNum dy);
395395
static void pik_set_numprop(Pik*,PToken*,PNum,PNum);
396396
static void pik_set_dashed(Pik*,PToken*,PNum*);
397397
static void pik_then(Pik*,PToken*,PElem*);
398398
static void pik_add_direction(Pik*,PToken*,PNum*,int);
399
+static void pik_move_hdg(Pik*,PNum*,PToken*,PNum,PToken*,PToken*);
399400
static void pik_evenwith(Pik*,PToken*,PPoint*);
400401
static void pik_set_from(Pik*,PElem*,PToken*,PPoint*);
401402
static void pik_add_to(Pik*,PElem*,PToken*,PPoint*);
402403
static void pik_close_path(Pik*,PToken*);
403404
static void pik_set_at(Pik*,PToken*,PPoint*,PToken*);
@@ -423,11 +424,11 @@
423424
static PPoint pik_nth_vertex(Pik *p, PToken *pNth, PToken *pErr, PElem *pElem);
424425
static PToken pik_next_semantic_token(Pik *p, PToken *pThis);
425426
static void pik_compute_layout_settings(Pik*);
426427
427428
428
-#line 454 "pikchr.c"
429
+#line 455 "pikchr.c"
429430
/**************** End of %include directives **********************************/
430431
/* These constants specify the various numeric values for terminal symbols.
431432
***************** Begin token definitions *************************************/
432433
#ifndef T_ID
433434
#define T_ID 1
@@ -459,64 +460,65 @@
459460
#define T_CLOSE 27
460461
#define T_CHOP 28
461462
#define T_FROM 29
462463
#define T_TO 30
463464
#define T_THEN 31
464
-#define T_AT 32
465
-#define T_WITH 33
466
-#define T_SAME 34
467
-#define T_AS 35
468
-#define T_FIT 36
469
-#define T_UNTIL 37
470
-#define T_EVEN 38
471
-#define T_AND 39
472
-#define T_DOT_E 40
473
-#define T_HEIGHT 41
474
-#define T_WIDTH 42
475
-#define T_RADIUS 43
476
-#define T_DIAMETER 44
477
-#define T_DOTTED 45
478
-#define T_DASHED 46
479
-#define T_CW 47
480
-#define T_CCW 48
481
-#define T_LARROW 49
482
-#define T_RARROW 50
483
-#define T_LRARROW 51
484
-#define T_INVIS 52
485
-#define T_THICK 53
486
-#define T_THIN 54
487
-#define T_CENTER 55
488
-#define T_LJUST 56
489
-#define T_RJUST 57
490
-#define T_ABOVE 58
491
-#define T_BELOW 59
492
-#define T_ITALIC 60
493
-#define T_BOLD 61
494
-#define T_ALIGNED 62
495
-#define T_BIG 63
496
-#define T_SMALL 64
497
-#define T_LP 65
498
-#define T_RP 66
499
-#define T_HEADING 67
500
-#define T_WAY 68
501
-#define T_BETWEEN 69
502
-#define T_THE 70
503
-#define T_DOT_L 71
504
-#define T_START 72
505
-#define T_END 73
506
-#define T_NTH 74
507
-#define T_VERTEX 75
508
-#define T_IN 76
509
-#define T_DOT_U 77
510
-#define T_LAST 78
511
-#define T_NUMBER 79
512
-#define T_FUNC1 80
513
-#define T_FUNC2 81
514
-#define T_X 82
515
-#define T_Y 83
516
-#define T_TOP 84
517
-#define T_BOTTOM 85
465
+#define T_HEADING 32
466
+#define T_GO 33
467
+#define T_AT 34
468
+#define T_WITH 35
469
+#define T_SAME 36
470
+#define T_AS 37
471
+#define T_FIT 38
472
+#define T_UNTIL 39
473
+#define T_EVEN 40
474
+#define T_AND 41
475
+#define T_DOT_E 42
476
+#define T_HEIGHT 43
477
+#define T_WIDTH 44
478
+#define T_RADIUS 45
479
+#define T_DIAMETER 46
480
+#define T_DOTTED 47
481
+#define T_DASHED 48
482
+#define T_CW 49
483
+#define T_CCW 50
484
+#define T_LARROW 51
485
+#define T_RARROW 52
486
+#define T_LRARROW 53
487
+#define T_INVIS 54
488
+#define T_THICK 55
489
+#define T_THIN 56
490
+#define T_CENTER 57
491
+#define T_LJUST 58
492
+#define T_RJUST 59
493
+#define T_ABOVE 60
494
+#define T_BELOW 61
495
+#define T_ITALIC 62
496
+#define T_BOLD 63
497
+#define T_ALIGNED 64
498
+#define T_BIG 65
499
+#define T_SMALL 66
500
+#define T_LP 67
501
+#define T_RP 68
502
+#define T_WAY 69
503
+#define T_BETWEEN 70
504
+#define T_THE 71
505
+#define T_DOT_L 72
506
+#define T_START 73
507
+#define T_END 74
508
+#define T_NTH 75
509
+#define T_VERTEX 76
510
+#define T_IN 77
511
+#define T_DOT_U 78
512
+#define T_LAST 79
513
+#define T_NUMBER 80
514
+#define T_FUNC1 81
515
+#define T_FUNC2 82
516
+#define T_X 83
517
+#define T_Y 84
518
+#define T_TOP 85
519
+#define T_BOTTOM 86
518520
#endif
519521
/**************** End token definitions ***************************************/
520522
521523
/* The next sections is a series of control #defines.
522524
** various aspects of the generated parser.
@@ -572,21 +574,21 @@
572574
#ifndef INTERFACE
573575
# define INTERFACE 1
574576
#endif
575577
/************* Begin control #defines *****************************************/
576578
#define YYCODETYPE unsigned char
577
-#define YYNOCODE 119
579
+#define YYNOCODE 121
578580
#define YYACTIONTYPE unsigned short int
579581
#define pik_parserTOKENTYPE PToken
580582
typedef union {
581583
int yyinit;
582584
pik_parserTOKENTYPE yy0;
583
- PElem* yy26;
584
- int yy60;
585
- PEList* yy120;
586
- PPoint yy131;
587
- PNum yy191;
585
+ PElem* yy2;
586
+ PEList* yy66;
587
+ int yy86;
588
+ PPoint yy187;
589
+ PNum yy241;
588590
} YYMINORTYPE;
589591
#ifndef YYSTACKDEPTH
590592
#define YYSTACKDEPTH 100
591593
#endif
592594
#define pik_parserARG_SDECL
@@ -598,22 +600,22 @@
598600
#define pik_parserCTX_PDECL ,Pik *p
599601
#define pik_parserCTX_PARAM ,p
600602
#define pik_parserCTX_FETCH Pik *p=yypParser->p;
601603
#define pik_parserCTX_STORE yypParser->p=p;
602604
#define YYFALLBACK 1
603
-#define YYNSTATE 153
604
-#define YYNRULE 148
605
-#define YYNRULE_WITH_ACTION 112
606
-#define YYNTOKEN 86
607
-#define YY_MAX_SHIFT 152
608
-#define YY_MIN_SHIFTREDUCE 270
609
-#define YY_MAX_SHIFTREDUCE 417
610
-#define YY_ERROR_ACTION 418
611
-#define YY_ACCEPT_ACTION 419
612
-#define YY_NO_ACTION 420
613
-#define YY_MIN_REDUCE 421
614
-#define YY_MAX_REDUCE 568
605
+#define YYNSTATE 166
606
+#define YYNRULE 158
607
+#define YYNRULE_WITH_ACTION 120
608
+#define YYNTOKEN 87
609
+#define YY_MAX_SHIFT 165
610
+#define YY_MIN_SHIFTREDUCE 286
611
+#define YY_MAX_SHIFTREDUCE 443
612
+#define YY_ERROR_ACTION 444
613
+#define YY_ACCEPT_ACTION 445
614
+#define YY_NO_ACTION 446
615
+#define YY_MIN_REDUCE 447
616
+#define YY_MAX_REDUCE 604
615617
/************* End control #defines *******************************************/
616618
#define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
617619
618620
/* Define the yytestcase() macro to be a no-op if is not already defined
619621
** otherwise.
@@ -676,247 +678,265 @@
676678
** yy_reduce_ofst[] For each state, the offset into yy_action for
677679
** shifting non-terminals after a reduce.
678680
** yy_default[] Default action for each state.
679681
**
680682
*********** Begin parsing tables **********************************************/
681
-#define YY_ACTTAB_COUNT (859)
683
+#define YY_ACTTAB_COUNT (936)
682684
static const YYACTIONTYPE yy_action[] = {
683
- /* 0 */ 64, 137, 129, 19, 139, 135, 141, 99, 101, 100,
684
- /* 10 */ 151, 109, 38, 35, 405, 406, 315, 522, 72, 113,
685
- /* 20 */ 523, 524, 521, 390, 391, 392, 393, 303, 304, 10,
686
- /* 30 */ 9, 307, 8, 51, 111, 132, 312, 50, 49, 48,
687
- /* 40 */ 47, 315, 315, 315, 315, 403, 404, 316, 317, 318,
688
- /* 50 */ 319, 320, 321, 322, 323, 367, 413, 142, 45, 46,
689
- /* 60 */ 352, 148, 405, 406, 315, 25, 350, 62, 405, 406,
690
- /* 70 */ 315, 286, 427, 26, 65, 12, 129, 290, 112, 416,
691
- /* 80 */ 417, 428, 101, 100, 151, 109, 413, 24, 112, 315,
692
- /* 90 */ 315, 315, 315, 403, 404, 315, 315, 315, 315, 403,
693
- /* 100 */ 404, 367, 114, 114, 45, 46, 461, 151, 109, 416,
694
- /* 110 */ 417, 22, 350, 553, 405, 406, 315, 73, 108, 1,
695
- /* 120 */ 342, 343, 332, 74, 66, 67, 131, 130, 89, 52,
696
- /* 130 */ 412, 412, 107, 366, 144, 143, 412, 412, 414, 415,
697
- /* 140 */ 62, 315, 315, 315, 315, 403, 404, 367, 413, 6,
698
- /* 150 */ 45, 46, 50, 49, 48, 47, 30, 7, 350, 50,
699
- /* 160 */ 49, 48, 47, 68, 71, 5, 288, 70, 414, 415,
700
- /* 170 */ 63, 416, 417, 400, 94, 374, 375, 13, 107, 366,
701
- /* 180 */ 144, 143, 412, 412, 367, 413, 421, 45, 46, 41,
702
- /* 190 */ 399, 27, 40, 28, 31, 350, 25, 325, 325, 325,
703
- /* 200 */ 325, 325, 325, 325, 325, 325, 325, 116, 416, 417,
704
- /* 210 */ 11, 1, 547, 547, 50, 49, 48, 47, 131, 130,
705
- /* 220 */ 89, 330, 48, 47, 107, 366, 144, 143, 77, 33,
706
- /* 230 */ 414, 415, 367, 354, 147, 45, 46, 103, 151, 109,
707
- /* 240 */ 331, 95, 410, 96, 120, 281, 282, 283, 1, 285,
708
- /* 250 */ 103, 151, 109, 408, 435, 131, 130, 89, 121, 69,
709
- /* 260 */ 69, 107, 366, 144, 143, 14, 382, 414, 415, 15,
710
- /* 270 */ 124, 122, 50, 49, 48, 47, 365, 133, 16, 383,
711
- /* 280 */ 384, 385, 387, 71, 53, 288, 70, 39, 390, 391,
712
- /* 290 */ 392, 393, 106, 126, 125, 54, 5, 124, 122, 50,
713
- /* 300 */ 49, 48, 47, 350, 367, 94, 102, 45, 46, 107,
714
- /* 310 */ 366, 144, 143, 2, 39, 350, 50, 49, 48, 47,
715
- /* 320 */ 126, 125, 380, 381, 353, 149, 18, 17, 55, 405,
716
- /* 330 */ 406, 315, 56, 379, 365, 32, 123, 409, 95, 367,
717
- /* 340 */ 117, 115, 45, 46, 378, 377, 57, 103, 151, 109,
718
- /* 350 */ 350, 449, 58, 18, 17, 59, 315, 315, 315, 315,
719
- /* 360 */ 403, 404, 32, 123, 409, 97, 60, 376, 5, 107,
720
- /* 370 */ 43, 501, 110, 422, 429, 26, 44, 94, 329, 425,
721
- /* 380 */ 61, 107, 366, 144, 143, 367, 358, 356, 45, 46,
722
- /* 390 */ 152, 357, 419, 21, 150, 351, 96, 412, 412, 29,
723
- /* 400 */ 75, 137, 501, 5, 139, 135, 141, 420, 501, 103,
724
- /* 410 */ 151, 109, 94, 352, 148, 420, 107, 366, 144, 143,
725
- /* 420 */ 367, 420, 420, 45, 46, 420, 420, 98, 422, 429,
726
- /* 430 */ 26, 350, 76, 137, 425, 420, 139, 135, 141, 420,
727
- /* 440 */ 420, 103, 151, 109, 420, 152, 420, 420, 21, 5,
728
- /* 450 */ 88, 137, 420, 420, 139, 135, 141, 420, 94, 103,
729
- /* 460 */ 151, 109, 107, 366, 144, 143, 367, 420, 128, 45,
730
- /* 470 */ 46, 108, 65, 420, 129, 420, 95, 350, 420, 465,
731
- /* 480 */ 101, 100, 151, 109, 3, 103, 151, 109, 420, 435,
732
- /* 490 */ 127, 151, 109, 94, 65, 540, 129, 107, 366, 144,
733
- /* 500 */ 143, 464, 101, 100, 151, 109, 420, 65, 420, 129,
734
- /* 510 */ 82, 497, 151, 109, 459, 101, 100, 151, 109, 103,
735
- /* 520 */ 151, 109, 420, 420, 65, 20, 129, 78, 420, 420,
736
- /* 530 */ 4, 457, 101, 100, 151, 109, 103, 151, 109, 94,
737
- /* 540 */ 65, 420, 129, 107, 366, 144, 143, 456, 101, 100,
738
- /* 550 */ 151, 109, 65, 420, 129, 496, 151, 109, 420, 484,
739
- /* 560 */ 101, 100, 151, 109, 420, 65, 420, 129, 420, 420,
740
- /* 570 */ 95, 420, 119, 101, 100, 151, 109, 420, 84, 103,
741
- /* 580 */ 151, 109, 420, 426, 65, 420, 129, 103, 151, 109,
742
- /* 590 */ 420, 490, 101, 100, 151, 109, 65, 420, 129, 438,
743
- /* 600 */ 420, 23, 420, 489, 101, 100, 151, 109, 65, 420,
744
- /* 610 */ 129, 50, 49, 48, 47, 488, 101, 100, 151, 109,
745
- /* 620 */ 420, 65, 420, 129, 420, 420, 36, 420, 487, 101,
746
- /* 630 */ 100, 151, 109, 65, 420, 129, 420, 420, 413, 420,
747
- /* 640 */ 486, 101, 100, 151, 109, 65, 420, 129, 50, 49,
748
- /* 650 */ 48, 47, 485, 101, 100, 151, 109, 420, 65, 420,
749
- /* 660 */ 129, 416, 417, 34, 420, 118, 101, 100, 151, 109,
750
- /* 670 */ 495, 151, 109, 365, 420, 65, 420, 129, 50, 49,
751
- /* 680 */ 48, 47, 453, 101, 100, 151, 109, 50, 49, 48,
752
- /* 690 */ 47, 423, 429, 26, 134, 151, 109, 425, 50, 49,
753
- /* 700 */ 48, 47, 37, 50, 49, 48, 47, 420, 152, 420,
754
- /* 710 */ 420, 21, 420, 50, 49, 48, 47, 299, 420, 420,
755
- /* 720 */ 414, 415, 50, 49, 48, 47, 294, 50, 49, 48,
756
- /* 730 */ 47, 293, 50, 49, 48, 47, 420, 352, 148, 90,
757
- /* 740 */ 369, 420, 79, 420, 420, 80, 420, 42, 103, 151,
758
- /* 750 */ 109, 103, 151, 109, 103, 151, 109, 91, 420, 420,
759
- /* 760 */ 368, 136, 151, 109, 420, 365, 103, 151, 109, 81,
760
- /* 770 */ 420, 420, 92, 420, 420, 93, 420, 420, 103, 151,
761
- /* 780 */ 109, 103, 151, 109, 103, 151, 109, 420, 83, 420,
762
- /* 790 */ 420, 85, 146, 420, 86, 108, 420, 103, 151, 109,
763
- /* 800 */ 103, 151, 109, 103, 151, 109, 87, 420, 420, 420,
764
- /* 810 */ 420, 515, 420, 420, 514, 103, 151, 109, 420, 513,
765
- /* 820 */ 103, 151, 109, 103, 151, 109, 512, 420, 103, 151,
766
- /* 830 */ 109, 104, 138, 151, 109, 103, 151, 109, 105, 420,
767
- /* 840 */ 103, 151, 109, 420, 420, 420, 420, 103, 151, 109,
768
- /* 850 */ 140, 151, 109, 145, 151, 109, 500, 151, 109,
685
+ /* 0 */ 579, 495, 164, 122, 19, 123, 448, 455, 26, 447,
686
+ /* 10 */ 579, 68, 451, 125, 431, 432, 339, 47, 79, 25,
687
+ /* 20 */ 46, 28, 579, 165, 126, 445, 21, 319, 320, 10,
688
+ /* 30 */ 9, 32, 145, 31, 8, 57, 124, 155, 336, 589,
689
+ /* 40 */ 581, 75, 581, 339, 339, 339, 339, 429, 430, 340,
690
+ /* 50 */ 341, 342, 343, 344, 345, 346, 347, 391, 439, 556,
691
+ /* 60 */ 51, 52, 557, 558, 555, 453, 26, 71, 374, 142,
692
+ /* 70 */ 431, 432, 339, 406, 454, 114, 113, 164, 122, 44,
693
+ /* 80 */ 41, 442, 443, 12, 146, 68, 407, 408, 409, 411,
694
+ /* 90 */ 78, 535, 304, 77, 24, 414, 415, 416, 417, 339,
695
+ /* 100 */ 339, 339, 339, 429, 430, 391, 398, 399, 51, 52,
696
+ /* 110 */ 414, 415, 416, 417, 27, 108, 374, 302, 431, 432,
697
+ /* 120 */ 339, 535, 80, 1, 116, 164, 122, 535, 461, 144,
698
+ /* 130 */ 143, 102, 356, 76, 76, 120, 390, 157, 156, 438,
699
+ /* 140 */ 438, 440, 441, 56, 55, 54, 53, 339, 339, 339,
700
+ /* 150 */ 339, 429, 430, 391, 439, 125, 51, 52, 71, 22,
701
+ /* 160 */ 142, 374, 54, 53, 374, 499, 114, 113, 164, 122,
702
+ /* 170 */ 78, 5, 304, 77, 140, 164, 122, 442, 443, 107,
703
+ /* 180 */ 127, 127, 81, 120, 390, 157, 156, 438, 438, 391,
704
+ /* 190 */ 439, 58, 51, 52, 531, 164, 122, 70, 150, 142,
705
+ /* 200 */ 374, 152, 148, 154, 112, 114, 113, 164, 122, 404,
706
+ /* 210 */ 405, 84, 150, 442, 443, 152, 148, 154, 73, 1,
707
+ /* 220 */ 116, 164, 122, 25, 110, 144, 143, 102, 120, 376,
708
+ /* 230 */ 161, 120, 390, 157, 156, 306, 391, 440, 441, 51,
709
+ /* 240 */ 52, 137, 135, 56, 55, 54, 53, 109, 30, 297,
710
+ /* 250 */ 298, 299, 6, 301, 129, 1, 7, 74, 45, 426,
711
+ /* 260 */ 69, 144, 143, 102, 139, 138, 439, 120, 390, 157,
712
+ /* 270 */ 156, 38, 425, 440, 441, 11, 355, 349, 349, 349,
713
+ /* 280 */ 349, 349, 349, 349, 349, 349, 349, 33, 121, 442,
714
+ /* 290 */ 443, 56, 55, 54, 53, 315, 530, 164, 122, 18,
715
+ /* 300 */ 17, 391, 5, 436, 51, 52, 72, 389, 136, 435,
716
+ /* 310 */ 107, 133, 374, 434, 120, 390, 157, 156, 137, 135,
717
+ /* 320 */ 56, 55, 54, 53, 431, 432, 339, 56, 55, 54,
718
+ /* 330 */ 53, 56, 55, 54, 53, 45, 71, 134, 142, 130,
719
+ /* 340 */ 128, 139, 138, 498, 114, 113, 164, 122, 38, 440,
720
+ /* 350 */ 441, 119, 13, 339, 339, 339, 339, 429, 430, 391,
721
+ /* 360 */ 331, 115, 51, 52, 378, 160, 14, 5, 377, 162,
722
+ /* 370 */ 374, 529, 164, 122, 15, 107, 18, 17, 16, 120,
723
+ /* 380 */ 390, 157, 156, 366, 367, 136, 435, 59, 391, 327,
724
+ /* 390 */ 34, 51, 52, 438, 438, 354, 85, 150, 60, 374,
725
+ /* 400 */ 152, 148, 154, 2, 61, 116, 164, 122, 147, 164,
726
+ /* 410 */ 122, 149, 164, 122, 431, 432, 339, 97, 150, 36,
727
+ /* 420 */ 82, 152, 148, 154, 62, 5, 116, 164, 122, 116,
728
+ /* 430 */ 164, 122, 403, 107, 151, 164, 122, 120, 390, 157,
729
+ /* 440 */ 156, 439, 402, 339, 339, 339, 339, 429, 430, 391,
730
+ /* 450 */ 63, 401, 51, 52, 5, 153, 164, 122, 64, 65,
731
+ /* 460 */ 374, 400, 107, 66, 442, 443, 120, 390, 157, 156,
732
+ /* 470 */ 391, 49, 50, 51, 52, 56, 55, 54, 53, 310,
733
+ /* 480 */ 67, 109, 446, 438, 438, 71, 391, 142, 382, 51,
734
+ /* 490 */ 52, 375, 493, 114, 113, 164, 122, 374, 71, 29,
735
+ /* 500 */ 142, 56, 55, 54, 53, 483, 114, 113, 164, 122,
736
+ /* 510 */ 71, 380, 142, 381, 163, 5, 40, 482, 114, 113,
737
+ /* 520 */ 164, 122, 446, 107, 440, 441, 446, 120, 390, 157,
738
+ /* 530 */ 156, 391, 446, 446, 51, 52, 5, 449, 455, 26,
739
+ /* 540 */ 446, 446, 374, 451, 107, 158, 164, 122, 120, 390,
740
+ /* 550 */ 157, 156, 3, 446, 165, 446, 446, 21, 446, 446,
741
+ /* 560 */ 107, 71, 446, 142, 120, 390, 157, 156, 518, 114,
742
+ /* 570 */ 113, 164, 122, 71, 330, 142, 56, 55, 54, 53,
743
+ /* 580 */ 132, 114, 113, 164, 122, 71, 446, 142, 446, 108,
744
+ /* 590 */ 446, 446, 524, 114, 113, 164, 122, 4, 116, 164,
745
+ /* 600 */ 122, 446, 461, 446, 35, 107, 446, 446, 574, 120,
746
+ /* 610 */ 390, 157, 156, 71, 326, 142, 56, 55, 54, 53,
747
+ /* 620 */ 523, 114, 113, 164, 122, 446, 71, 446, 142, 56,
748
+ /* 630 */ 55, 54, 53, 522, 114, 113, 164, 122, 446, 446,
749
+ /* 640 */ 71, 446, 142, 446, 37, 446, 93, 521, 114, 113,
750
+ /* 650 */ 164, 122, 71, 446, 142, 116, 164, 122, 446, 520,
751
+ /* 660 */ 114, 113, 164, 122, 71, 446, 142, 464, 446, 23,
752
+ /* 670 */ 446, 519, 114, 113, 164, 122, 71, 446, 142, 56,
753
+ /* 680 */ 55, 54, 53, 131, 114, 113, 164, 122, 71, 446,
754
+ /* 690 */ 142, 446, 446, 353, 39, 479, 114, 113, 164, 122,
755
+ /* 700 */ 111, 448, 455, 26, 446, 91, 446, 451, 56, 55,
756
+ /* 710 */ 54, 53, 446, 446, 116, 164, 122, 446, 165, 446,
757
+ /* 720 */ 20, 21, 446, 42, 446, 108, 56, 55, 54, 53,
758
+ /* 730 */ 56, 55, 54, 53, 116, 164, 122, 446, 475, 108,
759
+ /* 740 */ 446, 43, 446, 389, 56, 55, 54, 53, 116, 164,
760
+ /* 750 */ 122, 446, 452, 56, 55, 54, 53, 309, 446, 48,
761
+ /* 760 */ 56, 55, 54, 53, 56, 55, 54, 53, 83, 446,
762
+ /* 770 */ 446, 98, 389, 446, 99, 446, 446, 116, 164, 122,
763
+ /* 780 */ 116, 164, 122, 116, 164, 122, 100, 446, 446, 101,
764
+ /* 790 */ 446, 446, 86, 446, 393, 116, 164, 122, 116, 164,
765
+ /* 800 */ 122, 116, 164, 122, 446, 446, 87, 446, 446, 446,
766
+ /* 810 */ 103, 534, 164, 122, 446, 116, 164, 122, 446, 116,
767
+ /* 820 */ 164, 122, 88, 446, 392, 89, 446, 446, 389, 446,
768
+ /* 830 */ 104, 116, 164, 122, 116, 164, 122, 90, 446, 116,
769
+ /* 840 */ 164, 122, 105, 446, 446, 106, 116, 164, 122, 92,
770
+ /* 850 */ 446, 116, 164, 122, 116, 164, 122, 94, 116, 164,
771
+ /* 860 */ 122, 446, 446, 95, 446, 446, 116, 164, 122, 96,
772
+ /* 870 */ 376, 161, 116, 164, 122, 549, 376, 161, 116, 164,
773
+ /* 880 */ 122, 548, 446, 446, 116, 164, 122, 547, 446, 446,
774
+ /* 890 */ 116, 164, 122, 546, 446, 446, 116, 164, 122, 446,
775
+ /* 900 */ 446, 446, 116, 164, 122, 446, 446, 117, 446, 446,
776
+ /* 910 */ 446, 118, 446, 446, 446, 446, 116, 164, 122, 446,
777
+ /* 920 */ 116, 164, 122, 446, 446, 446, 141, 446, 446, 121,
778
+ /* 930 */ 446, 446, 159, 446, 446, 121,
769779
};
770780
static const YYCODETYPE yy_lookahead[] = {
771
- /* 0 */ 90, 91, 92, 118, 94, 95, 96, 97, 98, 99,
772
- /* 10 */ 100, 101, 4, 5, 14, 15, 16, 91, 18, 92,
773
- /* 20 */ 94, 95, 96, 23, 24, 25, 26, 27, 28, 29,
774
- /* 30 */ 30, 31, 32, 33, 34, 92, 36, 4, 5, 6,
775
- /* 40 */ 7, 41, 42, 43, 44, 45, 46, 47, 48, 49,
776
- /* 50 */ 50, 51, 52, 53, 54, 1, 2, 92, 4, 5,
777
- /* 60 */ 20, 21, 14, 15, 16, 10, 12, 3, 14, 15,
778
- /* 70 */ 16, 19, 88, 89, 90, 19, 92, 22, 92, 25,
779
- /* 80 */ 26, 97, 98, 99, 100, 101, 2, 110, 92, 41,
780
- /* 90 */ 42, 43, 44, 45, 46, 41, 42, 43, 44, 45,
781
- /* 100 */ 46, 1, 116, 117, 4, 5, 99, 100, 101, 25,
782
- /* 110 */ 26, 112, 12, 117, 14, 15, 16, 102, 78, 65,
783
- /* 120 */ 72, 73, 66, 102, 40, 40, 72, 73, 74, 35,
784
- /* 130 */ 82, 83, 78, 79, 80, 81, 82, 83, 84, 85,
785
- /* 140 */ 76, 41, 42, 43, 44, 45, 46, 1, 2, 32,
786
- /* 150 */ 4, 5, 4, 5, 6, 7, 71, 32, 12, 4,
787
- /* 160 */ 5, 6, 7, 40, 18, 65, 20, 21, 84, 85,
788
- /* 170 */ 39, 25, 26, 33, 74, 82, 83, 29, 78, 79,
789
- /* 180 */ 80, 81, 82, 83, 1, 2, 0, 4, 5, 91,
790
- /* 190 */ 33, 93, 94, 95, 71, 12, 10, 55, 56, 57,
791
- /* 200 */ 58, 59, 60, 61, 62, 63, 64, 38, 25, 26,
792
- /* 210 */ 39, 65, 114, 115, 4, 5, 6, 7, 72, 73,
793
- /* 220 */ 74, 66, 6, 7, 78, 79, 80, 81, 90, 19,
794
- /* 230 */ 84, 85, 1, 20, 21, 4, 5, 99, 100, 101,
795
- /* 240 */ 66, 90, 69, 12, 68, 14, 15, 16, 65, 18,
796
- /* 250 */ 99, 100, 101, 69, 103, 72, 73, 74, 70, 108,
797
- /* 260 */ 109, 78, 79, 80, 81, 3, 1, 84, 85, 3,
798
- /* 270 */ 2, 3, 4, 5, 6, 7, 66, 12, 3, 14,
799
- /* 280 */ 15, 16, 17, 18, 3, 20, 21, 19, 23, 24,
800
- /* 290 */ 25, 26, 71, 25, 26, 3, 65, 2, 3, 4,
801
- /* 300 */ 5, 6, 7, 12, 1, 74, 71, 4, 5, 78,
802
- /* 310 */ 79, 80, 81, 13, 19, 12, 4, 5, 6, 7,
803
- /* 320 */ 25, 26, 82, 83, 20, 21, 58, 59, 3, 14,
804
- /* 330 */ 15, 16, 3, 66, 66, 67, 68, 69, 90, 1,
805
- /* 340 */ 37, 38, 4, 5, 66, 66, 3, 99, 100, 101,
806
- /* 350 */ 12, 103, 3, 58, 59, 3, 41, 42, 43, 44,
807
- /* 360 */ 45, 46, 67, 68, 69, 74, 3, 66, 65, 78,
808
- /* 370 */ 65, 40, 86, 87, 88, 89, 65, 74, 66, 93,
809
- /* 380 */ 3, 78, 79, 80, 81, 1, 22, 22, 4, 5,
810
- /* 390 */ 104, 22, 106, 107, 77, 12, 12, 82, 83, 11,
811
- /* 400 */ 90, 91, 71, 65, 94, 95, 96, 119, 77, 99,
812
- /* 410 */ 100, 101, 74, 20, 21, 119, 78, 79, 80, 81,
813
- /* 420 */ 1, 119, 119, 4, 5, 119, 119, 86, 87, 88,
814
- /* 430 */ 89, 12, 90, 91, 93, 119, 94, 95, 96, 119,
815
- /* 440 */ 119, 99, 100, 101, 119, 104, 119, 119, 107, 65,
816
- /* 450 */ 90, 91, 119, 119, 94, 95, 96, 119, 74, 99,
817
- /* 460 */ 100, 101, 78, 79, 80, 81, 1, 119, 75, 4,
818
- /* 470 */ 5, 78, 90, 119, 92, 119, 90, 12, 119, 97,
819
- /* 480 */ 98, 99, 100, 101, 65, 99, 100, 101, 119, 103,
820
- /* 490 */ 99, 100, 101, 74, 90, 109, 92, 78, 79, 80,
821
- /* 500 */ 81, 97, 98, 99, 100, 101, 119, 90, 119, 92,
822
- /* 510 */ 90, 99, 100, 101, 97, 98, 99, 100, 101, 99,
823
- /* 520 */ 100, 101, 119, 119, 90, 105, 92, 90, 119, 119,
824
- /* 530 */ 65, 97, 98, 99, 100, 101, 99, 100, 101, 74,
825
- /* 540 */ 90, 119, 92, 78, 79, 80, 81, 97, 98, 99,
826
- /* 550 */ 100, 101, 90, 119, 92, 99, 100, 101, 119, 97,
827
- /* 560 */ 98, 99, 100, 101, 119, 90, 119, 92, 119, 119,
828
- /* 570 */ 90, 119, 97, 98, 99, 100, 101, 119, 90, 99,
829
- /* 580 */ 100, 101, 119, 103, 90, 119, 92, 99, 100, 101,
830
- /* 590 */ 119, 97, 98, 99, 100, 101, 90, 119, 92, 111,
831
- /* 600 */ 119, 113, 119, 97, 98, 99, 100, 101, 90, 119,
832
- /* 610 */ 92, 4, 5, 6, 7, 97, 98, 99, 100, 101,
833
- /* 620 */ 119, 90, 119, 92, 119, 119, 19, 119, 97, 98,
834
- /* 630 */ 99, 100, 101, 90, 119, 92, 119, 119, 2, 119,
835
- /* 640 */ 97, 98, 99, 100, 101, 90, 119, 92, 4, 5,
836
- /* 650 */ 6, 7, 97, 98, 99, 100, 101, 119, 90, 119,
837
- /* 660 */ 92, 25, 26, 19, 119, 97, 98, 99, 100, 101,
838
- /* 670 */ 99, 100, 101, 66, 119, 90, 119, 92, 4, 5,
839
- /* 680 */ 6, 7, 97, 98, 99, 100, 101, 4, 5, 6,
840
- /* 690 */ 7, 87, 88, 89, 99, 100, 101, 93, 4, 5,
841
- /* 700 */ 6, 7, 19, 4, 5, 6, 7, 119, 104, 119,
842
- /* 710 */ 119, 107, 119, 4, 5, 6, 7, 8, 119, 119,
843
- /* 720 */ 84, 85, 4, 5, 6, 7, 8, 4, 5, 6,
844
- /* 730 */ 7, 8, 4, 5, 6, 7, 119, 20, 21, 90,
845
- /* 740 */ 66, 119, 90, 119, 119, 90, 119, 19, 99, 100,
846
- /* 750 */ 101, 99, 100, 101, 99, 100, 101, 90, 119, 119,
847
- /* 760 */ 66, 99, 100, 101, 119, 66, 99, 100, 101, 90,
848
- /* 770 */ 119, 119, 90, 119, 119, 90, 119, 119, 99, 100,
849
- /* 780 */ 101, 99, 100, 101, 99, 100, 101, 119, 90, 119,
850
- /* 790 */ 119, 90, 75, 119, 90, 78, 119, 99, 100, 101,
851
- /* 800 */ 99, 100, 101, 99, 100, 101, 90, 119, 119, 119,
852
- /* 810 */ 119, 90, 119, 119, 90, 99, 100, 101, 119, 90,
853
- /* 820 */ 99, 100, 101, 99, 100, 101, 90, 119, 99, 100,
854
- /* 830 */ 101, 90, 99, 100, 101, 99, 100, 101, 90, 119,
855
- /* 840 */ 99, 100, 101, 119, 119, 119, 119, 99, 100, 101,
856
- /* 850 */ 99, 100, 101, 99, 100, 101, 99, 100, 101, 86,
857
- /* 860 */ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
858
- /* 870 */ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
859
- /* 880 */ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
860
- /* 890 */ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
861
- /* 900 */ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
862
- /* 910 */ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
863
- /* 920 */ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
864
- /* 930 */ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
865
- /* 940 */ 86, 86, 86, 86, 86,
781
+ /* 0 */ 0, 100, 101, 102, 120, 87, 88, 89, 90, 0,
782
+ /* 10 */ 10, 3, 94, 93, 14, 15, 16, 92, 18, 10,
783
+ /* 20 */ 95, 96, 22, 105, 93, 107, 108, 27, 28, 29,
784
+ /* 30 */ 30, 31, 93, 33, 34, 35, 36, 93, 38, 119,
785
+ /* 40 */ 115, 116, 117, 43, 44, 45, 46, 47, 48, 49,
786
+ /* 50 */ 50, 51, 52, 53, 54, 55, 56, 1, 2, 92,
787
+ /* 60 */ 4, 5, 95, 96, 97, 89, 90, 91, 12, 93,
788
+ /* 70 */ 14, 15, 16, 1, 98, 99, 100, 101, 102, 4,
789
+ /* 80 */ 5, 25, 26, 19, 12, 77, 14, 15, 16, 17,
790
+ /* 90 */ 18, 42, 20, 21, 111, 23, 24, 25, 26, 43,
791
+ /* 100 */ 44, 45, 46, 47, 48, 1, 83, 84, 4, 5,
792
+ /* 110 */ 23, 24, 25, 26, 94, 91, 12, 19, 14, 15,
793
+ /* 120 */ 16, 72, 103, 67, 100, 101, 102, 78, 104, 73,
794
+ /* 130 */ 74, 75, 68, 109, 110, 79, 80, 81, 82, 83,
795
+ /* 140 */ 84, 85, 86, 4, 5, 6, 7, 43, 44, 45,
796
+ /* 150 */ 46, 47, 48, 1, 2, 93, 4, 5, 91, 113,
797
+ /* 160 */ 93, 12, 6, 7, 12, 98, 99, 100, 101, 102,
798
+ /* 170 */ 18, 67, 20, 21, 100, 101, 102, 25, 26, 75,
799
+ /* 180 */ 118, 119, 103, 79, 80, 81, 82, 83, 84, 1,
800
+ /* 190 */ 2, 37, 4, 5, 100, 101, 102, 91, 92, 93,
801
+ /* 200 */ 12, 95, 96, 97, 98, 99, 100, 101, 102, 83,
802
+ /* 210 */ 84, 91, 92, 25, 26, 95, 96, 97, 42, 67,
803
+ /* 220 */ 100, 101, 102, 10, 75, 73, 74, 75, 79, 20,
804
+ /* 230 */ 21, 79, 80, 81, 82, 22, 1, 85, 86, 4,
805
+ /* 240 */ 5, 2, 3, 4, 5, 6, 7, 12, 72, 14,
806
+ /* 250 */ 15, 16, 34, 18, 40, 67, 34, 42, 19, 35,
807
+ /* 260 */ 41, 73, 74, 75, 25, 26, 2, 79, 80, 81,
808
+ /* 270 */ 82, 32, 35, 85, 86, 41, 68, 57, 58, 59,
809
+ /* 280 */ 60, 61, 62, 63, 64, 65, 66, 72, 79, 25,
810
+ /* 290 */ 26, 4, 5, 6, 7, 8, 100, 101, 102, 60,
811
+ /* 300 */ 61, 1, 67, 70, 4, 5, 42, 68, 69, 70,
812
+ /* 310 */ 75, 69, 12, 70, 79, 80, 81, 82, 2, 3,
813
+ /* 320 */ 4, 5, 6, 7, 14, 15, 16, 4, 5, 6,
814
+ /* 330 */ 7, 4, 5, 6, 7, 19, 91, 71, 93, 39,
815
+ /* 340 */ 40, 25, 26, 98, 99, 100, 101, 102, 32, 85,
816
+ /* 350 */ 86, 72, 29, 43, 44, 45, 46, 47, 48, 1,
817
+ /* 360 */ 2, 72, 4, 5, 20, 21, 3, 67, 20, 21,
818
+ /* 370 */ 12, 100, 101, 102, 3, 75, 60, 61, 3, 79,
819
+ /* 380 */ 80, 81, 82, 73, 74, 69, 70, 3, 1, 2,
820
+ /* 390 */ 32, 4, 5, 83, 84, 68, 91, 92, 3, 12,
821
+ /* 400 */ 95, 96, 97, 13, 3, 100, 101, 102, 100, 101,
822
+ /* 410 */ 102, 100, 101, 102, 14, 15, 16, 91, 92, 32,
823
+ /* 420 */ 91, 95, 96, 97, 3, 67, 100, 101, 102, 100,
824
+ /* 430 */ 101, 102, 68, 75, 100, 101, 102, 79, 80, 81,
825
+ /* 440 */ 82, 2, 68, 43, 44, 45, 46, 47, 48, 1,
826
+ /* 450 */ 3, 68, 4, 5, 67, 100, 101, 102, 3, 3,
827
+ /* 460 */ 12, 68, 75, 3, 25, 26, 79, 80, 81, 82,
828
+ /* 470 */ 1, 67, 67, 4, 5, 4, 5, 6, 7, 8,
829
+ /* 480 */ 3, 12, 121, 83, 84, 91, 1, 93, 22, 4,
830
+ /* 490 */ 5, 12, 98, 99, 100, 101, 102, 12, 91, 11,
831
+ /* 500 */ 93, 4, 5, 6, 7, 98, 99, 100, 101, 102,
832
+ /* 510 */ 91, 22, 93, 22, 78, 67, 19, 98, 99, 100,
833
+ /* 520 */ 101, 102, 121, 75, 85, 86, 121, 79, 80, 81,
834
+ /* 530 */ 82, 1, 121, 121, 4, 5, 67, 88, 89, 90,
835
+ /* 540 */ 121, 121, 12, 94, 75, 100, 101, 102, 79, 80,
836
+ /* 550 */ 81, 82, 67, 121, 105, 121, 121, 108, 121, 121,
837
+ /* 560 */ 75, 91, 121, 93, 79, 80, 81, 82, 98, 99,
838
+ /* 570 */ 100, 101, 102, 91, 2, 93, 4, 5, 6, 7,
839
+ /* 580 */ 98, 99, 100, 101, 102, 91, 121, 93, 121, 91,
840
+ /* 590 */ 121, 121, 98, 99, 100, 101, 102, 67, 100, 101,
841
+ /* 600 */ 102, 121, 104, 121, 32, 75, 121, 121, 110, 79,
842
+ /* 610 */ 80, 81, 82, 91, 2, 93, 4, 5, 6, 7,
843
+ /* 620 */ 98, 99, 100, 101, 102, 121, 91, 121, 93, 4,
844
+ /* 630 */ 5, 6, 7, 98, 99, 100, 101, 102, 121, 121,
845
+ /* 640 */ 91, 121, 93, 121, 32, 121, 91, 98, 99, 100,
846
+ /* 650 */ 101, 102, 91, 121, 93, 100, 101, 102, 121, 98,
847
+ /* 660 */ 99, 100, 101, 102, 91, 121, 93, 112, 121, 114,
848
+ /* 670 */ 121, 98, 99, 100, 101, 102, 91, 121, 93, 4,
849
+ /* 680 */ 5, 6, 7, 98, 99, 100, 101, 102, 91, 121,
850
+ /* 690 */ 93, 121, 121, 68, 19, 98, 99, 100, 101, 102,
851
+ /* 700 */ 87, 88, 89, 90, 121, 91, 121, 94, 4, 5,
852
+ /* 710 */ 6, 7, 121, 121, 100, 101, 102, 121, 105, 121,
853
+ /* 720 */ 106, 108, 121, 19, 121, 91, 4, 5, 6, 7,
854
+ /* 730 */ 4, 5, 6, 7, 100, 101, 102, 121, 104, 91,
855
+ /* 740 */ 121, 19, 121, 68, 4, 5, 6, 7, 100, 101,
856
+ /* 750 */ 102, 121, 104, 4, 5, 6, 7, 8, 121, 19,
857
+ /* 760 */ 4, 5, 6, 7, 4, 5, 6, 7, 91, 121,
858
+ /* 770 */ 121, 91, 68, 121, 91, 121, 121, 100, 101, 102,
859
+ /* 780 */ 100, 101, 102, 100, 101, 102, 91, 121, 121, 91,
860
+ /* 790 */ 121, 121, 91, 121, 68, 100, 101, 102, 100, 101,
861
+ /* 800 */ 102, 100, 101, 102, 121, 121, 91, 121, 121, 121,
862
+ /* 810 */ 91, 100, 101, 102, 121, 100, 101, 102, 121, 100,
863
+ /* 820 */ 101, 102, 91, 121, 68, 91, 121, 121, 68, 121,
864
+ /* 830 */ 91, 100, 101, 102, 100, 101, 102, 91, 121, 100,
865
+ /* 840 */ 101, 102, 91, 121, 121, 91, 100, 101, 102, 91,
866
+ /* 850 */ 121, 100, 101, 102, 100, 101, 102, 91, 100, 101,
867
+ /* 860 */ 102, 121, 121, 91, 121, 121, 100, 101, 102, 91,
868
+ /* 870 */ 20, 21, 100, 101, 102, 91, 20, 21, 100, 101,
869
+ /* 880 */ 102, 91, 121, 121, 100, 101, 102, 91, 121, 121,
870
+ /* 890 */ 100, 101, 102, 91, 121, 121, 100, 101, 102, 121,
871
+ /* 900 */ 121, 121, 100, 101, 102, 121, 121, 91, 121, 121,
872
+ /* 910 */ 121, 91, 121, 121, 121, 121, 100, 101, 102, 121,
873
+ /* 920 */ 100, 101, 102, 121, 121, 121, 76, 121, 121, 79,
874
+ /* 930 */ 121, 121, 76, 121, 121, 79, 121, 121, 121, 121,
875
+ /* 940 */ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
876
+ /* 950 */ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
877
+ /* 960 */ 121, 121, 121, 121, 87, 87, 87, 87, 87, 87,
878
+ /* 970 */ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
879
+ /* 980 */ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
880
+ /* 990 */ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
881
+ /* 1000 */ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
882
+ /* 1010 */ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
883
+ /* 1020 */ 87, 87, 87,
866884
};
867
-#define YY_SHIFT_COUNT (152)
885
+#define YY_SHIFT_COUNT (165)
868886
#define YY_SHIFT_MIN (0)
869
-#define YY_SHIFT_MAX (728)
887
+#define YY_SHIFT_MAX (856)
870888
static const unsigned short int yy_shift_ofst[] = {
871
- /* 0 */ 265, 54, 146, 100, 100, 100, 183, 183, 183, 183,
872
- /* 10 */ 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
873
- /* 20 */ 183, 231, 265, 0, 231, 265, 338, 303, 384, 384,
874
- /* 30 */ 48, 315, 338, 338, 338, 419, 338, 338, 465, 338,
875
- /* 40 */ 338, 338, 338, 338, 338, 338, 338, 338, 338, 338,
876
- /* 50 */ 338, 84, 291, 291, 291, 291, 291, 291, 291, 291,
877
- /* 60 */ 291, 291, 291, 84, 268, 295, 636, 636, 636, 52,
878
- /* 70 */ 859, 859, 859, 142, 142, 210, 607, 148, 155, 644,
879
- /* 80 */ 312, 683, 709, 718, 723, 674, 728, 694, 699, 393,
880
- /* 90 */ 33, 33, 33, 33, 717, 33, 331, 40, 55, 56,
881
- /* 100 */ 85, 8, 93, 123, 216, 216, 240, 213, 304, 64,
882
- /* 110 */ 186, 94, 117, 125, 131, 140, 157, 169, 171, 174,
883
- /* 120 */ 173, 176, 188, 184, 262, 266, 275, 221, 281, 292,
884
- /* 130 */ 325, 329, 235, 300, 267, 343, 278, 349, 279, 352,
885
- /* 140 */ 301, 363, 235, 305, 311, 221, 377, 364, 365, 369,
886
- /* 150 */ 383, 317, 388,
889
+ /* 0 */ 72, 56, 152, 104, 104, 104, 188, 188, 188, 188,
890
+ /* 10 */ 188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
891
+ /* 20 */ 188, 235, 72, 0, 235, 72, 448, 300, 469, 469,
892
+ /* 30 */ 310, 358, 387, 400, 448, 448, 448, 448, 448, 448,
893
+ /* 40 */ 448, 485, 448, 448, 530, 448, 448, 448, 448, 448,
894
+ /* 50 */ 448, 448, 448, 448, 448, 448, 448, 264, 149, 149,
895
+ /* 60 */ 149, 149, 149, 149, 149, 149, 149, 149, 149, 264,
896
+ /* 70 */ 239, 316, 439, 439, 439, 87, 98, 936, 936, 936,
897
+ /* 80 */ 220, 220, 572, 612, 675, 704, 323, 327, 497, 625,
898
+ /* 90 */ 722, 287, 471, 749, 726, 740, 756, 760, 139, 139,
899
+ /* 100 */ 139, 139, 850, 139, 139, 139, 139, 856, 139, 49,
900
+ /* 110 */ 209, 213, 64, 176, 75, 23, 215, 156, 156, 126,
901
+ /* 120 */ 344, 348, 8, 9, 154, 218, 222, 219, 224, 237,
902
+ /* 130 */ 214, 234, 208, 233, 242, 266, 243, 363, 371, 375,
903
+ /* 140 */ 279, 384, 395, 401, 421, 289, 390, 364, 447, 374,
904
+ /* 150 */ 455, 383, 456, 393, 460, 289, 404, 405, 279, 477,
905
+ /* 160 */ 466, 489, 491, 479, 436, 488,
887906
};
888
-#define YY_REDUCE_COUNT (72)
889
-#define YY_REDUCE_MIN (-115)
890
-#define YY_REDUCE_MAX (757)
907
+#define YY_REDUCE_COUNT (79)
908
+#define YY_REDUCE_MIN (-116)
909
+#define YY_REDUCE_MAX (820)
891910
static const short yy_reduce_ofst[] = {
892
- /* 0 */ 286, -90, -16, 310, 342, 360, 382, 404, 417, 434,
893
- /* 10 */ 450, 462, 475, 494, 506, 518, 531, 543, 555, 568,
894
- /* 20 */ 585, 151, 341, 98, 386, 604, 488, 420, 248, 480,
895
- /* 30 */ -74, -74, 138, 437, 649, 652, 655, 667, 679, 682,
896
- /* 40 */ 685, 698, 701, 704, 716, 721, 724, 729, 736, 741,
897
- /* 50 */ 748, -14, 7, 391, 412, 456, 571, 595, 662, 733,
898
- /* 60 */ 751, 754, 757, -4, -115, -115, -73, -57, -35, -23,
899
- /* 70 */ -1, 15, 21,
911
+ /* 0 */ -82, 106, -24, 120, 305, 326, 67, 245, 394, 407,
912
+ /* 10 */ 419, 470, 482, 494, 522, 535, 549, 561, 573, 585,
913
+ /* 20 */ 597, 24, 613, -75, 498, 449, 555, 614, 634, 648,
914
+ /* 30 */ -33, 329, 677, -33, 680, 683, 695, 698, 701, 715,
915
+ /* 40 */ 719, 731, 734, 739, 746, 751, 754, 758, 766, 772,
916
+ /* 50 */ 778, 784, 790, 796, 802, 816, 820, 62, -99, 74,
917
+ /* 60 */ 94, 196, 271, 308, 311, 334, 355, 445, 711, -80,
918
+ /* 70 */ -116, -116, -69, -61, -56, 20, -17, 46, 19, 79,
900919
};
901920
static const YYACTIONTYPE yy_default[] = {
902
- /* 0 */ 424, 418, 418, 418, 418, 418, 418, 418, 418, 418,
903
- /* 10 */ 418, 418, 418, 418, 418, 418, 418, 418, 418, 418,
904
- /* 20 */ 418, 418, 424, 545, 418, 424, 546, 452, 418, 418,
905
- /* 30 */ 418, 418, 418, 418, 418, 418, 418, 418, 418, 418,
906
- /* 40 */ 448, 418, 418, 418, 418, 418, 418, 418, 418, 418,
907
- /* 50 */ 418, 418, 418, 418, 418, 418, 418, 418, 418, 418,
908
- /* 60 */ 418, 418, 418, 418, 418, 418, 418, 418, 418, 430,
909
- /* 70 */ 442, 475, 475, 440, 462, 418, 418, 418, 418, 418,
910
- /* 80 */ 418, 418, 451, 446, 443, 418, 418, 418, 418, 418,
911
- /* 90 */ 479, 478, 477, 447, 418, 537, 431, 418, 418, 418,
912
- /* 100 */ 491, 558, 418, 418, 511, 510, 418, 506, 418, 499,
913
- /* 110 */ 418, 460, 418, 418, 549, 418, 418, 418, 418, 418,
914
- /* 120 */ 418, 418, 418, 418, 418, 418, 418, 498, 418, 418,
915
- /* 130 */ 418, 418, 492, 418, 418, 418, 418, 418, 418, 418,
916
- /* 140 */ 418, 418, 418, 418, 418, 418, 418, 418, 418, 418,
917
- /* 150 */ 418, 562, 418,
921
+ /* 0 */ 450, 444, 444, 444, 444, 444, 444, 444, 444, 444,
922
+ /* 10 */ 444, 444, 444, 444, 444, 444, 444, 444, 444, 444,
923
+ /* 20 */ 444, 444, 450, 585, 444, 450, 580, 478, 444, 444,
924
+ /* 30 */ 444, 584, 484, 444, 444, 444, 444, 444, 444, 444,
925
+ /* 40 */ 444, 444, 444, 444, 444, 444, 474, 444, 444, 444,
926
+ /* 50 */ 444, 444, 444, 444, 444, 444, 444, 444, 444, 444,
927
+ /* 60 */ 444, 444, 444, 444, 444, 444, 444, 444, 444, 444,
928
+ /* 70 */ 444, 444, 444, 444, 444, 444, 456, 468, 509, 509,
929
+ /* 80 */ 466, 496, 444, 444, 444, 444, 444, 444, 444, 444,
930
+ /* 90 */ 444, 477, 472, 469, 444, 444, 444, 444, 490, 489,
931
+ /* 100 */ 486, 485, 444, 513, 512, 511, 473, 444, 571, 457,
932
+ /* 110 */ 444, 444, 444, 525, 594, 444, 444, 545, 544, 444,
933
+ /* 120 */ 540, 444, 533, 444, 494, 444, 444, 583, 444, 444,
934
+ /* 130 */ 444, 444, 444, 444, 444, 444, 444, 444, 444, 444,
935
+ /* 140 */ 532, 444, 444, 444, 444, 526, 444, 444, 444, 444,
936
+ /* 150 */ 444, 444, 444, 444, 444, 444, 444, 444, 444, 444,
937
+ /* 160 */ 444, 444, 444, 444, 598, 444,
918938
};
919939
/********** End of lemon-generated parsing tables *****************************/
920940
921941
/* The next table maps tokens (terminal symbols) into fallback tokens.
922942
** If a construct like the following:
@@ -964,10 +984,12 @@
964984
0, /* CLOSE => nothing */
965985
0, /* CHOP => nothing */
966986
0, /* FROM => nothing */
967987
0, /* TO => nothing */
968988
0, /* THEN => nothing */
989
+ 0, /* HEADING => nothing */
990
+ 0, /* GO => nothing */
969991
0, /* AT => nothing */
970992
0, /* WITH => nothing */
971993
0, /* SAME => nothing */
972994
0, /* AS => nothing */
973995
0, /* FIT => nothing */
@@ -999,11 +1021,10 @@
9991021
0, /* ALIGNED => nothing */
10001022
0, /* BIG => nothing */
10011023
0, /* SMALL => nothing */
10021024
0, /* LP => nothing */
10031025
0, /* RP => nothing */
1004
- 0, /* HEADING => nothing */
10051026
0, /* WAY => nothing */
10061027
0, /* BETWEEN => nothing */
10071028
0, /* THE => nothing */
10081029
0, /* DOT_L => nothing */
10091030
0, /* START => nothing */
@@ -1138,97 +1159,99 @@
11381159
/* 27 */ "CLOSE",
11391160
/* 28 */ "CHOP",
11401161
/* 29 */ "FROM",
11411162
/* 30 */ "TO",
11421163
/* 31 */ "THEN",
1143
- /* 32 */ "AT",
1144
- /* 33 */ "WITH",
1145
- /* 34 */ "SAME",
1146
- /* 35 */ "AS",
1147
- /* 36 */ "FIT",
1148
- /* 37 */ "UNTIL",
1149
- /* 38 */ "EVEN",
1150
- /* 39 */ "AND",
1151
- /* 40 */ "DOT_E",
1152
- /* 41 */ "HEIGHT",
1153
- /* 42 */ "WIDTH",
1154
- /* 43 */ "RADIUS",
1155
- /* 44 */ "DIAMETER",
1156
- /* 45 */ "DOTTED",
1157
- /* 46 */ "DASHED",
1158
- /* 47 */ "CW",
1159
- /* 48 */ "CCW",
1160
- /* 49 */ "LARROW",
1161
- /* 50 */ "RARROW",
1162
- /* 51 */ "LRARROW",
1163
- /* 52 */ "INVIS",
1164
- /* 53 */ "THICK",
1165
- /* 54 */ "THIN",
1166
- /* 55 */ "CENTER",
1167
- /* 56 */ "LJUST",
1168
- /* 57 */ "RJUST",
1169
- /* 58 */ "ABOVE",
1170
- /* 59 */ "BELOW",
1171
- /* 60 */ "ITALIC",
1172
- /* 61 */ "BOLD",
1173
- /* 62 */ "ALIGNED",
1174
- /* 63 */ "BIG",
1175
- /* 64 */ "SMALL",
1176
- /* 65 */ "LP",
1177
- /* 66 */ "RP",
1178
- /* 67 */ "HEADING",
1179
- /* 68 */ "WAY",
1180
- /* 69 */ "BETWEEN",
1181
- /* 70 */ "THE",
1182
- /* 71 */ "DOT_L",
1183
- /* 72 */ "START",
1184
- /* 73 */ "END",
1185
- /* 74 */ "NTH",
1186
- /* 75 */ "VERTEX",
1187
- /* 76 */ "IN",
1188
- /* 77 */ "DOT_U",
1189
- /* 78 */ "LAST",
1190
- /* 79 */ "NUMBER",
1191
- /* 80 */ "FUNC1",
1192
- /* 81 */ "FUNC2",
1193
- /* 82 */ "X",
1194
- /* 83 */ "Y",
1195
- /* 84 */ "TOP",
1196
- /* 85 */ "BOTTOM",
1197
- /* 86 */ "element_list",
1198
- /* 87 */ "element",
1199
- /* 88 */ "unnamed_element",
1200
- /* 89 */ "basetype",
1201
- /* 90 */ "expr",
1202
- /* 91 */ "numproperty",
1203
- /* 92 */ "edge",
1204
- /* 93 */ "direction",
1205
- /* 94 */ "dashproperty",
1206
- /* 95 */ "colorproperty",
1207
- /* 96 */ "locproperty",
1208
- /* 97 */ "position",
1209
- /* 98 */ "place",
1210
- /* 99 */ "object",
1211
- /* 100 */ "objectname",
1212
- /* 101 */ "nth",
1213
- /* 102 */ "textposition",
1214
- /* 103 */ "rvalue",
1215
- /* 104 */ "lvalue",
1216
- /* 105 */ "even",
1217
- /* 106 */ "document",
1218
- /* 107 */ "print",
1219
- /* 108 */ "prlist",
1220
- /* 109 */ "pritem",
1221
- /* 110 */ "prsep",
1222
- /* 111 */ "attribute_list",
1223
- /* 112 */ "savelist",
1224
- /* 113 */ "alist",
1225
- /* 114 */ "attribute",
1226
- /* 115 */ "boolproperty",
1227
- /* 116 */ "withclause",
1228
- /* 117 */ "with",
1229
- /* 118 */ "between",
1164
+ /* 32 */ "HEADING",
1165
+ /* 33 */ "GO",
1166
+ /* 34 */ "AT",
1167
+ /* 35 */ "WITH",
1168
+ /* 36 */ "SAME",
1169
+ /* 37 */ "AS",
1170
+ /* 38 */ "FIT",
1171
+ /* 39 */ "UNTIL",
1172
+ /* 40 */ "EVEN",
1173
+ /* 41 */ "AND",
1174
+ /* 42 */ "DOT_E",
1175
+ /* 43 */ "HEIGHT",
1176
+ /* 44 */ "WIDTH",
1177
+ /* 45 */ "RADIUS",
1178
+ /* 46 */ "DIAMETER",
1179
+ /* 47 */ "DOTTED",
1180
+ /* 48 */ "DASHED",
1181
+ /* 49 */ "CW",
1182
+ /* 50 */ "CCW",
1183
+ /* 51 */ "LARROW",
1184
+ /* 52 */ "RARROW",
1185
+ /* 53 */ "LRARROW",
1186
+ /* 54 */ "INVIS",
1187
+ /* 55 */ "THICK",
1188
+ /* 56 */ "THIN",
1189
+ /* 57 */ "CENTER",
1190
+ /* 58 */ "LJUST",
1191
+ /* 59 */ "RJUST",
1192
+ /* 60 */ "ABOVE",
1193
+ /* 61 */ "BELOW",
1194
+ /* 62 */ "ITALIC",
1195
+ /* 63 */ "BOLD",
1196
+ /* 64 */ "ALIGNED",
1197
+ /* 65 */ "BIG",
1198
+ /* 66 */ "SMALL",
1199
+ /* 67 */ "LP",
1200
+ /* 68 */ "RP",
1201
+ /* 69 */ "WAY",
1202
+ /* 70 */ "BETWEEN",
1203
+ /* 71 */ "THE",
1204
+ /* 72 */ "DOT_L",
1205
+ /* 73 */ "START",
1206
+ /* 74 */ "END",
1207
+ /* 75 */ "NTH",
1208
+ /* 76 */ "VERTEX",
1209
+ /* 77 */ "IN",
1210
+ /* 78 */ "DOT_U",
1211
+ /* 79 */ "LAST",
1212
+ /* 80 */ "NUMBER",
1213
+ /* 81 */ "FUNC1",
1214
+ /* 82 */ "FUNC2",
1215
+ /* 83 */ "X",
1216
+ /* 84 */ "Y",
1217
+ /* 85 */ "TOP",
1218
+ /* 86 */ "BOTTOM",
1219
+ /* 87 */ "element_list",
1220
+ /* 88 */ "element",
1221
+ /* 89 */ "unnamed_element",
1222
+ /* 90 */ "basetype",
1223
+ /* 91 */ "expr",
1224
+ /* 92 */ "numproperty",
1225
+ /* 93 */ "edge",
1226
+ /* 94 */ "direction",
1227
+ /* 95 */ "dashproperty",
1228
+ /* 96 */ "colorproperty",
1229
+ /* 97 */ "locproperty",
1230
+ /* 98 */ "position",
1231
+ /* 99 */ "place",
1232
+ /* 100 */ "object",
1233
+ /* 101 */ "objectname",
1234
+ /* 102 */ "nth",
1235
+ /* 103 */ "textposition",
1236
+ /* 104 */ "rvalue",
1237
+ /* 105 */ "lvalue",
1238
+ /* 106 */ "even",
1239
+ /* 107 */ "document",
1240
+ /* 108 */ "print",
1241
+ /* 109 */ "prlist",
1242
+ /* 110 */ "pritem",
1243
+ /* 111 */ "prsep",
1244
+ /* 112 */ "attribute_list",
1245
+ /* 113 */ "savelist",
1246
+ /* 114 */ "alist",
1247
+ /* 115 */ "attribute",
1248
+ /* 116 */ "go",
1249
+ /* 117 */ "boolproperty",
1250
+ /* 118 */ "withclause",
1251
+ /* 119 */ "with",
1252
+ /* 120 */ "between",
12301253
};
12311254
#endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
12321255
12331256
#ifndef NDEBUG
12341257
/* For tracing reduce actions, the names of all rules are required.
@@ -1261,129 +1284,139 @@
12611284
/* 24 */ "attribute ::= numproperty expr PERCENT",
12621285
/* 25 */ "attribute ::= numproperty expr",
12631286
/* 26 */ "attribute ::= dashproperty expr",
12641287
/* 27 */ "attribute ::= dashproperty",
12651288
/* 28 */ "attribute ::= colorproperty rvalue",
1266
- /* 29 */ "attribute ::= direction expr PERCENT",
1267
- /* 30 */ "attribute ::= direction expr",
1268
- /* 31 */ "attribute ::= direction",
1269
- /* 32 */ "attribute ::= direction even position",
1289
+ /* 29 */ "attribute ::= go direction expr PERCENT",
1290
+ /* 30 */ "attribute ::= go direction expr",
1291
+ /* 31 */ "attribute ::= go direction",
1292
+ /* 32 */ "attribute ::= go direction even position",
12701293
/* 33 */ "attribute ::= CLOSE",
12711294
/* 34 */ "attribute ::= CHOP",
12721295
/* 35 */ "attribute ::= FROM position",
12731296
/* 36 */ "attribute ::= TO position",
12741297
/* 37 */ "attribute ::= THEN",
1275
- /* 38 */ "attribute ::= AT position",
1276
- /* 39 */ "attribute ::= SAME",
1277
- /* 40 */ "attribute ::= SAME AS object",
1278
- /* 41 */ "attribute ::= STRING textposition",
1279
- /* 42 */ "attribute ::= FIT",
1280
- /* 43 */ "with ::= DOT_E edge AT position",
1281
- /* 44 */ "with ::= edge AT position",
1282
- /* 45 */ "numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS",
1283
- /* 46 */ "boolproperty ::= CW",
1284
- /* 47 */ "boolproperty ::= CCW",
1285
- /* 48 */ "boolproperty ::= LARROW",
1286
- /* 49 */ "boolproperty ::= RARROW",
1287
- /* 50 */ "boolproperty ::= LRARROW",
1288
- /* 51 */ "boolproperty ::= INVIS",
1289
- /* 52 */ "boolproperty ::= THICK",
1290
- /* 53 */ "boolproperty ::= THIN",
1291
- /* 54 */ "textposition ::=",
1292
- /* 55 */ "textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL",
1293
- /* 56 */ "position ::= expr COMMA expr",
1294
- /* 57 */ "position ::= place PLUS expr COMMA expr",
1295
- /* 58 */ "position ::= place MINUS expr COMMA expr",
1296
- /* 59 */ "position ::= place PLUS LP expr COMMA expr RP",
1297
- /* 60 */ "position ::= place MINUS LP expr COMMA expr RP",
1298
- /* 61 */ "position ::= LP position COMMA position RP",
1299
- /* 62 */ "position ::= LP position RP",
1300
- /* 63 */ "position ::= expr between position AND position",
1301
- /* 64 */ "position ::= expr ABOVE position",
1302
- /* 65 */ "position ::= expr BELOW position",
1303
- /* 66 */ "position ::= expr LEFT OF position",
1304
- /* 67 */ "position ::= expr RIGHT OF position",
1305
- /* 68 */ "position ::= expr EDGEPT OF position",
1306
- /* 69 */ "position ::= expr HEADING expr FROM position",
1307
- /* 70 */ "place ::= object",
1308
- /* 71 */ "place ::= object DOT_E edge",
1309
- /* 72 */ "place ::= object DOT_L START",
1310
- /* 73 */ "place ::= object DOT_L END",
1311
- /* 74 */ "place ::= START OF object",
1312
- /* 75 */ "place ::= END OF object",
1313
- /* 76 */ "place ::= edge OF object",
1314
- /* 77 */ "place ::= NTH VERTEX OF object",
1315
- /* 78 */ "object ::= nth",
1316
- /* 79 */ "object ::= nth OF|IN object",
1317
- /* 80 */ "objectname ::= PLACENAME",
1318
- /* 81 */ "objectname ::= objectname DOT_U PLACENAME",
1319
- /* 82 */ "nth ::= NTH CLASSNAME",
1320
- /* 83 */ "nth ::= NTH LAST CLASSNAME",
1321
- /* 84 */ "nth ::= LAST CLASSNAME",
1322
- /* 85 */ "nth ::= LAST",
1323
- /* 86 */ "nth ::= NTH LB RB",
1324
- /* 87 */ "nth ::= NTH LAST LB RB",
1325
- /* 88 */ "nth ::= LAST LB RB",
1326
- /* 89 */ "expr ::= expr PLUS expr",
1327
- /* 90 */ "expr ::= expr MINUS expr",
1328
- /* 91 */ "expr ::= expr STAR expr",
1329
- /* 92 */ "expr ::= expr SLASH expr",
1330
- /* 93 */ "expr ::= MINUS expr",
1331
- /* 94 */ "expr ::= PLUS expr",
1332
- /* 95 */ "expr ::= LP expr RP",
1333
- /* 96 */ "expr ::= NUMBER",
1334
- /* 97 */ "expr ::= ID",
1335
- /* 98 */ "expr ::= FUNC1 LP expr RP",
1336
- /* 99 */ "expr ::= FUNC2 LP expr COMMA expr RP",
1337
- /* 100 */ "expr ::= object DOT_L locproperty",
1338
- /* 101 */ "expr ::= object DOT_L numproperty",
1339
- /* 102 */ "expr ::= object DOT_L dashproperty",
1340
- /* 103 */ "expr ::= object DOT_L colorproperty",
1341
- /* 104 */ "expr ::= object DOT_E edge DOT_L X",
1342
- /* 105 */ "expr ::= object DOT_E edge DOT_L Y",
1343
- /* 106 */ "expr ::= LP locproperty OF object RP",
1344
- /* 107 */ "expr ::= LP dashproperty OF object RP",
1345
- /* 108 */ "expr ::= LP numproperty OF object RP",
1346
- /* 109 */ "expr ::= LP colorproperty OF object RP",
1347
- /* 110 */ "expr ::= NTH VERTEX OF object DOT_L X",
1348
- /* 111 */ "expr ::= NTH VERTEX OF object DOT_L Y",
1349
- /* 112 */ "lvalue ::= ID",
1350
- /* 113 */ "lvalue ::= FILL",
1351
- /* 114 */ "lvalue ::= COLOR",
1352
- /* 115 */ "lvalue ::= THICKNESS",
1353
- /* 116 */ "rvalue ::= expr",
1354
- /* 117 */ "print ::= PRINT",
1355
- /* 118 */ "prlist ::= pritem",
1356
- /* 119 */ "prlist ::= prlist prsep pritem",
1357
- /* 120 */ "direction ::= UP",
1358
- /* 121 */ "direction ::= DOWN",
1359
- /* 122 */ "direction ::= LEFT",
1360
- /* 123 */ "direction ::= RIGHT",
1361
- /* 124 */ "attribute_list ::= alist",
1362
- /* 125 */ "alist ::=",
1363
- /* 126 */ "alist ::= alist attribute",
1364
- /* 127 */ "attribute ::= boolproperty",
1365
- /* 128 */ "attribute ::= WITH withclause",
1366
- /* 129 */ "even ::= UNTIL EVEN WITH",
1367
- /* 130 */ "even ::= EVEN WITH",
1368
- /* 131 */ "withclause ::= with",
1369
- /* 132 */ "withclause ::= withclause AND with",
1370
- /* 133 */ "dashproperty ::= DOTTED",
1371
- /* 134 */ "dashproperty ::= DASHED",
1372
- /* 135 */ "colorproperty ::= FILL",
1373
- /* 136 */ "colorproperty ::= COLOR",
1374
- /* 137 */ "position ::= place",
1375
- /* 138 */ "between ::= WAY BETWEEN",
1376
- /* 139 */ "between ::= BETWEEN",
1377
- /* 140 */ "between ::= OF THE WAY BETWEEN",
1378
- /* 141 */ "object ::= objectname",
1379
- /* 142 */ "locproperty ::= X|Y",
1380
- /* 143 */ "edge ::= EDGEPT",
1381
- /* 144 */ "edge ::= TOP",
1382
- /* 145 */ "edge ::= BOTTOM",
1383
- /* 146 */ "edge ::= LEFT",
1384
- /* 147 */ "edge ::= RIGHT",
1298
+ /* 38 */ "attribute ::= THEN expr HEADING expr",
1299
+ /* 39 */ "attribute ::= THEN HEADING expr",
1300
+ /* 40 */ "attribute ::= THEN expr EDGEPT",
1301
+ /* 41 */ "attribute ::= THEN EDGEPT",
1302
+ /* 42 */ "attribute ::= GO expr HEADING expr",
1303
+ /* 43 */ "attribute ::= GO HEADING expr",
1304
+ /* 44 */ "attribute ::= GO expr EDGEPT",
1305
+ /* 45 */ "attribute ::= GO EDGEPT",
1306
+ /* 46 */ "attribute ::= AT position",
1307
+ /* 47 */ "attribute ::= SAME",
1308
+ /* 48 */ "attribute ::= SAME AS object",
1309
+ /* 49 */ "attribute ::= STRING textposition",
1310
+ /* 50 */ "attribute ::= FIT",
1311
+ /* 51 */ "with ::= DOT_E edge AT position",
1312
+ /* 52 */ "with ::= edge AT position",
1313
+ /* 53 */ "numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS",
1314
+ /* 54 */ "boolproperty ::= CW",
1315
+ /* 55 */ "boolproperty ::= CCW",
1316
+ /* 56 */ "boolproperty ::= LARROW",
1317
+ /* 57 */ "boolproperty ::= RARROW",
1318
+ /* 58 */ "boolproperty ::= LRARROW",
1319
+ /* 59 */ "boolproperty ::= INVIS",
1320
+ /* 60 */ "boolproperty ::= THICK",
1321
+ /* 61 */ "boolproperty ::= THIN",
1322
+ /* 62 */ "textposition ::=",
1323
+ /* 63 */ "textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL",
1324
+ /* 64 */ "position ::= expr COMMA expr",
1325
+ /* 65 */ "position ::= place PLUS expr COMMA expr",
1326
+ /* 66 */ "position ::= place MINUS expr COMMA expr",
1327
+ /* 67 */ "position ::= place PLUS LP expr COMMA expr RP",
1328
+ /* 68 */ "position ::= place MINUS LP expr COMMA expr RP",
1329
+ /* 69 */ "position ::= LP position COMMA position RP",
1330
+ /* 70 */ "position ::= LP position RP",
1331
+ /* 71 */ "position ::= expr between position AND position",
1332
+ /* 72 */ "position ::= expr ABOVE position",
1333
+ /* 73 */ "position ::= expr BELOW position",
1334
+ /* 74 */ "position ::= expr LEFT OF position",
1335
+ /* 75 */ "position ::= expr RIGHT OF position",
1336
+ /* 76 */ "position ::= expr EDGEPT OF position",
1337
+ /* 77 */ "position ::= expr HEADING expr FROM position",
1338
+ /* 78 */ "place ::= object",
1339
+ /* 79 */ "place ::= object DOT_E edge",
1340
+ /* 80 */ "place ::= object DOT_L START",
1341
+ /* 81 */ "place ::= object DOT_L END",
1342
+ /* 82 */ "place ::= START OF object",
1343
+ /* 83 */ "place ::= END OF object",
1344
+ /* 84 */ "place ::= edge OF object",
1345
+ /* 85 */ "place ::= NTH VERTEX OF object",
1346
+ /* 86 */ "object ::= nth",
1347
+ /* 87 */ "object ::= nth OF|IN object",
1348
+ /* 88 */ "objectname ::= PLACENAME",
1349
+ /* 89 */ "objectname ::= objectname DOT_U PLACENAME",
1350
+ /* 90 */ "nth ::= NTH CLASSNAME",
1351
+ /* 91 */ "nth ::= NTH LAST CLASSNAME",
1352
+ /* 92 */ "nth ::= LAST CLASSNAME",
1353
+ /* 93 */ "nth ::= LAST",
1354
+ /* 94 */ "nth ::= NTH LB RB",
1355
+ /* 95 */ "nth ::= NTH LAST LB RB",
1356
+ /* 96 */ "nth ::= LAST LB RB",
1357
+ /* 97 */ "expr ::= expr PLUS expr",
1358
+ /* 98 */ "expr ::= expr MINUS expr",
1359
+ /* 99 */ "expr ::= expr STAR expr",
1360
+ /* 100 */ "expr ::= expr SLASH expr",
1361
+ /* 101 */ "expr ::= MINUS expr",
1362
+ /* 102 */ "expr ::= PLUS expr",
1363
+ /* 103 */ "expr ::= LP expr RP",
1364
+ /* 104 */ "expr ::= NUMBER",
1365
+ /* 105 */ "expr ::= ID",
1366
+ /* 106 */ "expr ::= FUNC1 LP expr RP",
1367
+ /* 107 */ "expr ::= FUNC2 LP expr COMMA expr RP",
1368
+ /* 108 */ "expr ::= object DOT_L locproperty",
1369
+ /* 109 */ "expr ::= object DOT_L numproperty",
1370
+ /* 110 */ "expr ::= object DOT_L dashproperty",
1371
+ /* 111 */ "expr ::= object DOT_L colorproperty",
1372
+ /* 112 */ "expr ::= object DOT_E edge DOT_L X",
1373
+ /* 113 */ "expr ::= object DOT_E edge DOT_L Y",
1374
+ /* 114 */ "expr ::= LP locproperty OF object RP",
1375
+ /* 115 */ "expr ::= LP dashproperty OF object RP",
1376
+ /* 116 */ "expr ::= LP numproperty OF object RP",
1377
+ /* 117 */ "expr ::= LP colorproperty OF object RP",
1378
+ /* 118 */ "expr ::= NTH VERTEX OF object DOT_L X",
1379
+ /* 119 */ "expr ::= NTH VERTEX OF object DOT_L Y",
1380
+ /* 120 */ "lvalue ::= ID",
1381
+ /* 121 */ "lvalue ::= FILL",
1382
+ /* 122 */ "lvalue ::= COLOR",
1383
+ /* 123 */ "lvalue ::= THICKNESS",
1384
+ /* 124 */ "rvalue ::= expr",
1385
+ /* 125 */ "print ::= PRINT",
1386
+ /* 126 */ "prlist ::= pritem",
1387
+ /* 127 */ "prlist ::= prlist prsep pritem",
1388
+ /* 128 */ "direction ::= UP",
1389
+ /* 129 */ "direction ::= DOWN",
1390
+ /* 130 */ "direction ::= LEFT",
1391
+ /* 131 */ "direction ::= RIGHT",
1392
+ /* 132 */ "attribute_list ::= alist",
1393
+ /* 133 */ "alist ::=",
1394
+ /* 134 */ "alist ::= alist attribute",
1395
+ /* 135 */ "attribute ::= boolproperty",
1396
+ /* 136 */ "attribute ::= WITH withclause",
1397
+ /* 137 */ "go ::= GO",
1398
+ /* 138 */ "go ::=",
1399
+ /* 139 */ "even ::= UNTIL EVEN WITH",
1400
+ /* 140 */ "even ::= EVEN WITH",
1401
+ /* 141 */ "withclause ::= with",
1402
+ /* 142 */ "withclause ::= withclause AND with",
1403
+ /* 143 */ "dashproperty ::= DOTTED",
1404
+ /* 144 */ "dashproperty ::= DASHED",
1405
+ /* 145 */ "colorproperty ::= FILL",
1406
+ /* 146 */ "colorproperty ::= COLOR",
1407
+ /* 147 */ "position ::= place",
1408
+ /* 148 */ "between ::= WAY BETWEEN",
1409
+ /* 149 */ "between ::= BETWEEN",
1410
+ /* 150 */ "between ::= OF THE WAY BETWEEN",
1411
+ /* 151 */ "object ::= objectname",
1412
+ /* 152 */ "locproperty ::= X|Y",
1413
+ /* 153 */ "edge ::= EDGEPT",
1414
+ /* 154 */ "edge ::= TOP",
1415
+ /* 155 */ "edge ::= BOTTOM",
1416
+ /* 156 */ "edge ::= LEFT",
1417
+ /* 157 */ "edge ::= RIGHT",
13851418
};
13861419
#endif /* NDEBUG */
13871420
13881421
13891422
#if YYSTACKDEPTH<=0
@@ -1505,24 +1538,24 @@
15051538
** Note: during a reduce, the only symbols destroyed are those
15061539
** which appear on the RHS of the rule, but which are *not* used
15071540
** inside the C code.
15081541
*/
15091542
/********* Begin destructor definitions ***************************************/
1510
- case 86: /* element_list */
1511
-{
1512
-#line 443 "pikchr.y"
1513
-pik_elist_free(p,(yypminor->yy120));
1514
-#line 1539 "pikchr.c"
1515
-}
1516
- break;
1517
- case 87: /* element */
1518
- case 88: /* unnamed_element */
1519
- case 89: /* basetype */
1520
-{
1521
-#line 445 "pikchr.y"
1522
-pik_elem_free(p,(yypminor->yy26));
1523
-#line 1548 "pikchr.c"
1543
+ case 87: /* element_list */
1544
+{
1545
+#line 444 "pikchr.y"
1546
+pik_elist_free(p,(yypminor->yy66));
1547
+#line 1572 "pikchr.c"
1548
+}
1549
+ break;
1550
+ case 88: /* element */
1551
+ case 89: /* unnamed_element */
1552
+ case 90: /* basetype */
1553
+{
1554
+#line 446 "pikchr.y"
1555
+pik_elem_free(p,(yypminor->yy2));
1556
+#line 1581 "pikchr.c"
15241557
}
15251558
break;
15261559
/********* End destructor definitions *****************************************/
15271560
default: break; /* If no destructor action specified: do nothing */
15281561
}
@@ -1736,14 +1769,14 @@
17361769
#endif
17371770
while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
17381771
/* Here code is inserted which will execute if the parser
17391772
** stack every overflows */
17401773
/******** Begin %stack_overflow code ******************************************/
1741
-#line 474 "pikchr.y"
1774
+#line 475 "pikchr.y"
17421775
17431776
pik_error(p, 0, "parser stack overflow");
1744
-#line 1769 "pikchr.c"
1777
+#line 1802 "pikchr.c"
17451778
/******** End %stack_overflow code ********************************************/
17461779
pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */
17471780
pik_parserCTX_STORE
17481781
}
17491782
@@ -1811,158 +1844,168 @@
18111844
}
18121845
18131846
/* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side
18141847
** of that rule */
18151848
static const YYCODETYPE yyRuleInfoLhs[] = {
1816
- 106, /* (0) document ::= element_list */
1817
- 86, /* (1) element_list ::= element */
1818
- 86, /* (2) element_list ::= element_list EOL element */
1819
- 87, /* (3) element ::= */
1820
- 87, /* (4) element ::= direction */
1821
- 87, /* (5) element ::= lvalue ASSIGN rvalue */
1822
- 87, /* (6) element ::= PLACENAME COLON unnamed_element */
1823
- 87, /* (7) element ::= PLACENAME COLON position */
1824
- 87, /* (8) element ::= unnamed_element */
1825
- 87, /* (9) element ::= print prlist */
1826
- 103, /* (10) rvalue ::= PLACENAME */
1827
- 109, /* (11) pritem ::= FILL */
1828
- 109, /* (12) pritem ::= COLOR */
1829
- 109, /* (13) pritem ::= THICKNESS */
1830
- 109, /* (14) pritem ::= rvalue */
1831
- 109, /* (15) pritem ::= STRING */
1832
- 110, /* (16) prsep ::= COMMA */
1833
- 88, /* (17) unnamed_element ::= basetype attribute_list */
1834
- 89, /* (18) basetype ::= CLASSNAME */
1835
- 89, /* (19) basetype ::= STRING textposition */
1836
- 89, /* (20) basetype ::= LB savelist element_list RB */
1837
- 112, /* (21) savelist ::= */
1838
- 111, /* (22) attribute_list ::= expr */
1839
- 111, /* (23) attribute_list ::= expr PERCENT */
1840
- 114, /* (24) attribute ::= numproperty expr PERCENT */
1841
- 114, /* (25) attribute ::= numproperty expr */
1842
- 114, /* (26) attribute ::= dashproperty expr */
1843
- 114, /* (27) attribute ::= dashproperty */
1844
- 114, /* (28) attribute ::= colorproperty rvalue */
1845
- 114, /* (29) attribute ::= direction expr PERCENT */
1846
- 114, /* (30) attribute ::= direction expr */
1847
- 114, /* (31) attribute ::= direction */
1848
- 114, /* (32) attribute ::= direction even position */
1849
- 114, /* (33) attribute ::= CLOSE */
1850
- 114, /* (34) attribute ::= CHOP */
1851
- 114, /* (35) attribute ::= FROM position */
1852
- 114, /* (36) attribute ::= TO position */
1853
- 114, /* (37) attribute ::= THEN */
1854
- 114, /* (38) attribute ::= AT position */
1855
- 114, /* (39) attribute ::= SAME */
1856
- 114, /* (40) attribute ::= SAME AS object */
1857
- 114, /* (41) attribute ::= STRING textposition */
1858
- 114, /* (42) attribute ::= FIT */
1859
- 117, /* (43) with ::= DOT_E edge AT position */
1860
- 117, /* (44) with ::= edge AT position */
1861
- 91, /* (45) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
1862
- 115, /* (46) boolproperty ::= CW */
1863
- 115, /* (47) boolproperty ::= CCW */
1864
- 115, /* (48) boolproperty ::= LARROW */
1865
- 115, /* (49) boolproperty ::= RARROW */
1866
- 115, /* (50) boolproperty ::= LRARROW */
1867
- 115, /* (51) boolproperty ::= INVIS */
1868
- 115, /* (52) boolproperty ::= THICK */
1869
- 115, /* (53) boolproperty ::= THIN */
1870
- 102, /* (54) textposition ::= */
1871
- 102, /* (55) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
1872
- 97, /* (56) position ::= expr COMMA expr */
1873
- 97, /* (57) position ::= place PLUS expr COMMA expr */
1874
- 97, /* (58) position ::= place MINUS expr COMMA expr */
1875
- 97, /* (59) position ::= place PLUS LP expr COMMA expr RP */
1876
- 97, /* (60) position ::= place MINUS LP expr COMMA expr RP */
1877
- 97, /* (61) position ::= LP position COMMA position RP */
1878
- 97, /* (62) position ::= LP position RP */
1879
- 97, /* (63) position ::= expr between position AND position */
1880
- 97, /* (64) position ::= expr ABOVE position */
1881
- 97, /* (65) position ::= expr BELOW position */
1882
- 97, /* (66) position ::= expr LEFT OF position */
1883
- 97, /* (67) position ::= expr RIGHT OF position */
1884
- 97, /* (68) position ::= expr EDGEPT OF position */
1885
- 97, /* (69) position ::= expr HEADING expr FROM position */
1886
- 98, /* (70) place ::= object */
1887
- 98, /* (71) place ::= object DOT_E edge */
1888
- 98, /* (72) place ::= object DOT_L START */
1889
- 98, /* (73) place ::= object DOT_L END */
1890
- 98, /* (74) place ::= START OF object */
1891
- 98, /* (75) place ::= END OF object */
1892
- 98, /* (76) place ::= edge OF object */
1893
- 98, /* (77) place ::= NTH VERTEX OF object */
1894
- 99, /* (78) object ::= nth */
1895
- 99, /* (79) object ::= nth OF|IN object */
1896
- 100, /* (80) objectname ::= PLACENAME */
1897
- 100, /* (81) objectname ::= objectname DOT_U PLACENAME */
1898
- 101, /* (82) nth ::= NTH CLASSNAME */
1899
- 101, /* (83) nth ::= NTH LAST CLASSNAME */
1900
- 101, /* (84) nth ::= LAST CLASSNAME */
1901
- 101, /* (85) nth ::= LAST */
1902
- 101, /* (86) nth ::= NTH LB RB */
1903
- 101, /* (87) nth ::= NTH LAST LB RB */
1904
- 101, /* (88) nth ::= LAST LB RB */
1905
- 90, /* (89) expr ::= expr PLUS expr */
1906
- 90, /* (90) expr ::= expr MINUS expr */
1907
- 90, /* (91) expr ::= expr STAR expr */
1908
- 90, /* (92) expr ::= expr SLASH expr */
1909
- 90, /* (93) expr ::= MINUS expr */
1910
- 90, /* (94) expr ::= PLUS expr */
1911
- 90, /* (95) expr ::= LP expr RP */
1912
- 90, /* (96) expr ::= NUMBER */
1913
- 90, /* (97) expr ::= ID */
1914
- 90, /* (98) expr ::= FUNC1 LP expr RP */
1915
- 90, /* (99) expr ::= FUNC2 LP expr COMMA expr RP */
1916
- 90, /* (100) expr ::= object DOT_L locproperty */
1917
- 90, /* (101) expr ::= object DOT_L numproperty */
1918
- 90, /* (102) expr ::= object DOT_L dashproperty */
1919
- 90, /* (103) expr ::= object DOT_L colorproperty */
1920
- 90, /* (104) expr ::= object DOT_E edge DOT_L X */
1921
- 90, /* (105) expr ::= object DOT_E edge DOT_L Y */
1922
- 90, /* (106) expr ::= LP locproperty OF object RP */
1923
- 90, /* (107) expr ::= LP dashproperty OF object RP */
1924
- 90, /* (108) expr ::= LP numproperty OF object RP */
1925
- 90, /* (109) expr ::= LP colorproperty OF object RP */
1926
- 90, /* (110) expr ::= NTH VERTEX OF object DOT_L X */
1927
- 90, /* (111) expr ::= NTH VERTEX OF object DOT_L Y */
1928
- 104, /* (112) lvalue ::= ID */
1929
- 104, /* (113) lvalue ::= FILL */
1930
- 104, /* (114) lvalue ::= COLOR */
1931
- 104, /* (115) lvalue ::= THICKNESS */
1932
- 103, /* (116) rvalue ::= expr */
1933
- 107, /* (117) print ::= PRINT */
1934
- 108, /* (118) prlist ::= pritem */
1935
- 108, /* (119) prlist ::= prlist prsep pritem */
1936
- 93, /* (120) direction ::= UP */
1937
- 93, /* (121) direction ::= DOWN */
1938
- 93, /* (122) direction ::= LEFT */
1939
- 93, /* (123) direction ::= RIGHT */
1940
- 111, /* (124) attribute_list ::= alist */
1941
- 113, /* (125) alist ::= */
1942
- 113, /* (126) alist ::= alist attribute */
1943
- 114, /* (127) attribute ::= boolproperty */
1944
- 114, /* (128) attribute ::= WITH withclause */
1945
- 105, /* (129) even ::= UNTIL EVEN WITH */
1946
- 105, /* (130) even ::= EVEN WITH */
1947
- 116, /* (131) withclause ::= with */
1948
- 116, /* (132) withclause ::= withclause AND with */
1949
- 94, /* (133) dashproperty ::= DOTTED */
1950
- 94, /* (134) dashproperty ::= DASHED */
1951
- 95, /* (135) colorproperty ::= FILL */
1952
- 95, /* (136) colorproperty ::= COLOR */
1953
- 97, /* (137) position ::= place */
1954
- 118, /* (138) between ::= WAY BETWEEN */
1955
- 118, /* (139) between ::= BETWEEN */
1956
- 118, /* (140) between ::= OF THE WAY BETWEEN */
1957
- 99, /* (141) object ::= objectname */
1958
- 96, /* (142) locproperty ::= X|Y */
1959
- 92, /* (143) edge ::= EDGEPT */
1960
- 92, /* (144) edge ::= TOP */
1961
- 92, /* (145) edge ::= BOTTOM */
1962
- 92, /* (146) edge ::= LEFT */
1963
- 92, /* (147) edge ::= RIGHT */
1849
+ 107, /* (0) document ::= element_list */
1850
+ 87, /* (1) element_list ::= element */
1851
+ 87, /* (2) element_list ::= element_list EOL element */
1852
+ 88, /* (3) element ::= */
1853
+ 88, /* (4) element ::= direction */
1854
+ 88, /* (5) element ::= lvalue ASSIGN rvalue */
1855
+ 88, /* (6) element ::= PLACENAME COLON unnamed_element */
1856
+ 88, /* (7) element ::= PLACENAME COLON position */
1857
+ 88, /* (8) element ::= unnamed_element */
1858
+ 88, /* (9) element ::= print prlist */
1859
+ 104, /* (10) rvalue ::= PLACENAME */
1860
+ 110, /* (11) pritem ::= FILL */
1861
+ 110, /* (12) pritem ::= COLOR */
1862
+ 110, /* (13) pritem ::= THICKNESS */
1863
+ 110, /* (14) pritem ::= rvalue */
1864
+ 110, /* (15) pritem ::= STRING */
1865
+ 111, /* (16) prsep ::= COMMA */
1866
+ 89, /* (17) unnamed_element ::= basetype attribute_list */
1867
+ 90, /* (18) basetype ::= CLASSNAME */
1868
+ 90, /* (19) basetype ::= STRING textposition */
1869
+ 90, /* (20) basetype ::= LB savelist element_list RB */
1870
+ 113, /* (21) savelist ::= */
1871
+ 112, /* (22) attribute_list ::= expr */
1872
+ 112, /* (23) attribute_list ::= expr PERCENT */
1873
+ 115, /* (24) attribute ::= numproperty expr PERCENT */
1874
+ 115, /* (25) attribute ::= numproperty expr */
1875
+ 115, /* (26) attribute ::= dashproperty expr */
1876
+ 115, /* (27) attribute ::= dashproperty */
1877
+ 115, /* (28) attribute ::= colorproperty rvalue */
1878
+ 115, /* (29) attribute ::= go direction expr PERCENT */
1879
+ 115, /* (30) attribute ::= go direction expr */
1880
+ 115, /* (31) attribute ::= go direction */
1881
+ 115, /* (32) attribute ::= go direction even position */
1882
+ 115, /* (33) attribute ::= CLOSE */
1883
+ 115, /* (34) attribute ::= CHOP */
1884
+ 115, /* (35) attribute ::= FROM position */
1885
+ 115, /* (36) attribute ::= TO position */
1886
+ 115, /* (37) attribute ::= THEN */
1887
+ 115, /* (38) attribute ::= THEN expr HEADING expr */
1888
+ 115, /* (39) attribute ::= THEN HEADING expr */
1889
+ 115, /* (40) attribute ::= THEN expr EDGEPT */
1890
+ 115, /* (41) attribute ::= THEN EDGEPT */
1891
+ 115, /* (42) attribute ::= GO expr HEADING expr */
1892
+ 115, /* (43) attribute ::= GO HEADING expr */
1893
+ 115, /* (44) attribute ::= GO expr EDGEPT */
1894
+ 115, /* (45) attribute ::= GO EDGEPT */
1895
+ 115, /* (46) attribute ::= AT position */
1896
+ 115, /* (47) attribute ::= SAME */
1897
+ 115, /* (48) attribute ::= SAME AS object */
1898
+ 115, /* (49) attribute ::= STRING textposition */
1899
+ 115, /* (50) attribute ::= FIT */
1900
+ 119, /* (51) with ::= DOT_E edge AT position */
1901
+ 119, /* (52) with ::= edge AT position */
1902
+ 92, /* (53) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
1903
+ 117, /* (54) boolproperty ::= CW */
1904
+ 117, /* (55) boolproperty ::= CCW */
1905
+ 117, /* (56) boolproperty ::= LARROW */
1906
+ 117, /* (57) boolproperty ::= RARROW */
1907
+ 117, /* (58) boolproperty ::= LRARROW */
1908
+ 117, /* (59) boolproperty ::= INVIS */
1909
+ 117, /* (60) boolproperty ::= THICK */
1910
+ 117, /* (61) boolproperty ::= THIN */
1911
+ 103, /* (62) textposition ::= */
1912
+ 103, /* (63) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
1913
+ 98, /* (64) position ::= expr COMMA expr */
1914
+ 98, /* (65) position ::= place PLUS expr COMMA expr */
1915
+ 98, /* (66) position ::= place MINUS expr COMMA expr */
1916
+ 98, /* (67) position ::= place PLUS LP expr COMMA expr RP */
1917
+ 98, /* (68) position ::= place MINUS LP expr COMMA expr RP */
1918
+ 98, /* (69) position ::= LP position COMMA position RP */
1919
+ 98, /* (70) position ::= LP position RP */
1920
+ 98, /* (71) position ::= expr between position AND position */
1921
+ 98, /* (72) position ::= expr ABOVE position */
1922
+ 98, /* (73) position ::= expr BELOW position */
1923
+ 98, /* (74) position ::= expr LEFT OF position */
1924
+ 98, /* (75) position ::= expr RIGHT OF position */
1925
+ 98, /* (76) position ::= expr EDGEPT OF position */
1926
+ 98, /* (77) position ::= expr HEADING expr FROM position */
1927
+ 99, /* (78) place ::= object */
1928
+ 99, /* (79) place ::= object DOT_E edge */
1929
+ 99, /* (80) place ::= object DOT_L START */
1930
+ 99, /* (81) place ::= object DOT_L END */
1931
+ 99, /* (82) place ::= START OF object */
1932
+ 99, /* (83) place ::= END OF object */
1933
+ 99, /* (84) place ::= edge OF object */
1934
+ 99, /* (85) place ::= NTH VERTEX OF object */
1935
+ 100, /* (86) object ::= nth */
1936
+ 100, /* (87) object ::= nth OF|IN object */
1937
+ 101, /* (88) objectname ::= PLACENAME */
1938
+ 101, /* (89) objectname ::= objectname DOT_U PLACENAME */
1939
+ 102, /* (90) nth ::= NTH CLASSNAME */
1940
+ 102, /* (91) nth ::= NTH LAST CLASSNAME */
1941
+ 102, /* (92) nth ::= LAST CLASSNAME */
1942
+ 102, /* (93) nth ::= LAST */
1943
+ 102, /* (94) nth ::= NTH LB RB */
1944
+ 102, /* (95) nth ::= NTH LAST LB RB */
1945
+ 102, /* (96) nth ::= LAST LB RB */
1946
+ 91, /* (97) expr ::= expr PLUS expr */
1947
+ 91, /* (98) expr ::= expr MINUS expr */
1948
+ 91, /* (99) expr ::= expr STAR expr */
1949
+ 91, /* (100) expr ::= expr SLASH expr */
1950
+ 91, /* (101) expr ::= MINUS expr */
1951
+ 91, /* (102) expr ::= PLUS expr */
1952
+ 91, /* (103) expr ::= LP expr RP */
1953
+ 91, /* (104) expr ::= NUMBER */
1954
+ 91, /* (105) expr ::= ID */
1955
+ 91, /* (106) expr ::= FUNC1 LP expr RP */
1956
+ 91, /* (107) expr ::= FUNC2 LP expr COMMA expr RP */
1957
+ 91, /* (108) expr ::= object DOT_L locproperty */
1958
+ 91, /* (109) expr ::= object DOT_L numproperty */
1959
+ 91, /* (110) expr ::= object DOT_L dashproperty */
1960
+ 91, /* (111) expr ::= object DOT_L colorproperty */
1961
+ 91, /* (112) expr ::= object DOT_E edge DOT_L X */
1962
+ 91, /* (113) expr ::= object DOT_E edge DOT_L Y */
1963
+ 91, /* (114) expr ::= LP locproperty OF object RP */
1964
+ 91, /* (115) expr ::= LP dashproperty OF object RP */
1965
+ 91, /* (116) expr ::= LP numproperty OF object RP */
1966
+ 91, /* (117) expr ::= LP colorproperty OF object RP */
1967
+ 91, /* (118) expr ::= NTH VERTEX OF object DOT_L X */
1968
+ 91, /* (119) expr ::= NTH VERTEX OF object DOT_L Y */
1969
+ 105, /* (120) lvalue ::= ID */
1970
+ 105, /* (121) lvalue ::= FILL */
1971
+ 105, /* (122) lvalue ::= COLOR */
1972
+ 105, /* (123) lvalue ::= THICKNESS */
1973
+ 104, /* (124) rvalue ::= expr */
1974
+ 108, /* (125) print ::= PRINT */
1975
+ 109, /* (126) prlist ::= pritem */
1976
+ 109, /* (127) prlist ::= prlist prsep pritem */
1977
+ 94, /* (128) direction ::= UP */
1978
+ 94, /* (129) direction ::= DOWN */
1979
+ 94, /* (130) direction ::= LEFT */
1980
+ 94, /* (131) direction ::= RIGHT */
1981
+ 112, /* (132) attribute_list ::= alist */
1982
+ 114, /* (133) alist ::= */
1983
+ 114, /* (134) alist ::= alist attribute */
1984
+ 115, /* (135) attribute ::= boolproperty */
1985
+ 115, /* (136) attribute ::= WITH withclause */
1986
+ 116, /* (137) go ::= GO */
1987
+ 116, /* (138) go ::= */
1988
+ 106, /* (139) even ::= UNTIL EVEN WITH */
1989
+ 106, /* (140) even ::= EVEN WITH */
1990
+ 118, /* (141) withclause ::= with */
1991
+ 118, /* (142) withclause ::= withclause AND with */
1992
+ 95, /* (143) dashproperty ::= DOTTED */
1993
+ 95, /* (144) dashproperty ::= DASHED */
1994
+ 96, /* (145) colorproperty ::= FILL */
1995
+ 96, /* (146) colorproperty ::= COLOR */
1996
+ 98, /* (147) position ::= place */
1997
+ 120, /* (148) between ::= WAY BETWEEN */
1998
+ 120, /* (149) between ::= BETWEEN */
1999
+ 120, /* (150) between ::= OF THE WAY BETWEEN */
2000
+ 100, /* (151) object ::= objectname */
2001
+ 97, /* (152) locproperty ::= X|Y */
2002
+ 93, /* (153) edge ::= EDGEPT */
2003
+ 93, /* (154) edge ::= TOP */
2004
+ 93, /* (155) edge ::= BOTTOM */
2005
+ 93, /* (156) edge ::= LEFT */
2006
+ 93, /* (157) edge ::= RIGHT */
19642007
};
19652008
19662009
/* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
19672010
** of symbols on the right-hand side of that rule. */
19682011
static const signed char yyRuleInfoNRhs[] = {
@@ -1993,129 +2036,139 @@
19932036
-3, /* (24) attribute ::= numproperty expr PERCENT */
19942037
-2, /* (25) attribute ::= numproperty expr */
19952038
-2, /* (26) attribute ::= dashproperty expr */
19962039
-1, /* (27) attribute ::= dashproperty */
19972040
-2, /* (28) attribute ::= colorproperty rvalue */
1998
- -3, /* (29) attribute ::= direction expr PERCENT */
1999
- -2, /* (30) attribute ::= direction expr */
2000
- -1, /* (31) attribute ::= direction */
2001
- -3, /* (32) attribute ::= direction even position */
2041
+ -4, /* (29) attribute ::= go direction expr PERCENT */
2042
+ -3, /* (30) attribute ::= go direction expr */
2043
+ -2, /* (31) attribute ::= go direction */
2044
+ -4, /* (32) attribute ::= go direction even position */
20022045
-1, /* (33) attribute ::= CLOSE */
20032046
-1, /* (34) attribute ::= CHOP */
20042047
-2, /* (35) attribute ::= FROM position */
20052048
-2, /* (36) attribute ::= TO position */
20062049
-1, /* (37) attribute ::= THEN */
2007
- -2, /* (38) attribute ::= AT position */
2008
- -1, /* (39) attribute ::= SAME */
2009
- -3, /* (40) attribute ::= SAME AS object */
2010
- -2, /* (41) attribute ::= STRING textposition */
2011
- -1, /* (42) attribute ::= FIT */
2012
- -4, /* (43) with ::= DOT_E edge AT position */
2013
- -3, /* (44) with ::= edge AT position */
2014
- -1, /* (45) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2015
- -1, /* (46) boolproperty ::= CW */
2016
- -1, /* (47) boolproperty ::= CCW */
2017
- -1, /* (48) boolproperty ::= LARROW */
2018
- -1, /* (49) boolproperty ::= RARROW */
2019
- -1, /* (50) boolproperty ::= LRARROW */
2020
- -1, /* (51) boolproperty ::= INVIS */
2021
- -1, /* (52) boolproperty ::= THICK */
2022
- -1, /* (53) boolproperty ::= THIN */
2023
- 0, /* (54) textposition ::= */
2024
- -2, /* (55) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2025
- -3, /* (56) position ::= expr COMMA expr */
2026
- -5, /* (57) position ::= place PLUS expr COMMA expr */
2027
- -5, /* (58) position ::= place MINUS expr COMMA expr */
2028
- -7, /* (59) position ::= place PLUS LP expr COMMA expr RP */
2029
- -7, /* (60) position ::= place MINUS LP expr COMMA expr RP */
2030
- -5, /* (61) position ::= LP position COMMA position RP */
2031
- -3, /* (62) position ::= LP position RP */
2032
- -5, /* (63) position ::= expr between position AND position */
2033
- -3, /* (64) position ::= expr ABOVE position */
2034
- -3, /* (65) position ::= expr BELOW position */
2035
- -4, /* (66) position ::= expr LEFT OF position */
2036
- -4, /* (67) position ::= expr RIGHT OF position */
2037
- -4, /* (68) position ::= expr EDGEPT OF position */
2038
- -5, /* (69) position ::= expr HEADING expr FROM position */
2039
- -1, /* (70) place ::= object */
2040
- -3, /* (71) place ::= object DOT_E edge */
2041
- -3, /* (72) place ::= object DOT_L START */
2042
- -3, /* (73) place ::= object DOT_L END */
2043
- -3, /* (74) place ::= START OF object */
2044
- -3, /* (75) place ::= END OF object */
2045
- -3, /* (76) place ::= edge OF object */
2046
- -4, /* (77) place ::= NTH VERTEX OF object */
2047
- -1, /* (78) object ::= nth */
2048
- -3, /* (79) object ::= nth OF|IN object */
2049
- -1, /* (80) objectname ::= PLACENAME */
2050
- -3, /* (81) objectname ::= objectname DOT_U PLACENAME */
2051
- -2, /* (82) nth ::= NTH CLASSNAME */
2052
- -3, /* (83) nth ::= NTH LAST CLASSNAME */
2053
- -2, /* (84) nth ::= LAST CLASSNAME */
2054
- -1, /* (85) nth ::= LAST */
2055
- -3, /* (86) nth ::= NTH LB RB */
2056
- -4, /* (87) nth ::= NTH LAST LB RB */
2057
- -3, /* (88) nth ::= LAST LB RB */
2058
- -3, /* (89) expr ::= expr PLUS expr */
2059
- -3, /* (90) expr ::= expr MINUS expr */
2060
- -3, /* (91) expr ::= expr STAR expr */
2061
- -3, /* (92) expr ::= expr SLASH expr */
2062
- -2, /* (93) expr ::= MINUS expr */
2063
- -2, /* (94) expr ::= PLUS expr */
2064
- -3, /* (95) expr ::= LP expr RP */
2065
- -1, /* (96) expr ::= NUMBER */
2066
- -1, /* (97) expr ::= ID */
2067
- -4, /* (98) expr ::= FUNC1 LP expr RP */
2068
- -6, /* (99) expr ::= FUNC2 LP expr COMMA expr RP */
2069
- -3, /* (100) expr ::= object DOT_L locproperty */
2070
- -3, /* (101) expr ::= object DOT_L numproperty */
2071
- -3, /* (102) expr ::= object DOT_L dashproperty */
2072
- -3, /* (103) expr ::= object DOT_L colorproperty */
2073
- -5, /* (104) expr ::= object DOT_E edge DOT_L X */
2074
- -5, /* (105) expr ::= object DOT_E edge DOT_L Y */
2075
- -5, /* (106) expr ::= LP locproperty OF object RP */
2076
- -5, /* (107) expr ::= LP dashproperty OF object RP */
2077
- -5, /* (108) expr ::= LP numproperty OF object RP */
2078
- -5, /* (109) expr ::= LP colorproperty OF object RP */
2079
- -6, /* (110) expr ::= NTH VERTEX OF object DOT_L X */
2080
- -6, /* (111) expr ::= NTH VERTEX OF object DOT_L Y */
2081
- -1, /* (112) lvalue ::= ID */
2082
- -1, /* (113) lvalue ::= FILL */
2083
- -1, /* (114) lvalue ::= COLOR */
2084
- -1, /* (115) lvalue ::= THICKNESS */
2085
- -1, /* (116) rvalue ::= expr */
2086
- -1, /* (117) print ::= PRINT */
2087
- -1, /* (118) prlist ::= pritem */
2088
- -3, /* (119) prlist ::= prlist prsep pritem */
2089
- -1, /* (120) direction ::= UP */
2090
- -1, /* (121) direction ::= DOWN */
2091
- -1, /* (122) direction ::= LEFT */
2092
- -1, /* (123) direction ::= RIGHT */
2093
- -1, /* (124) attribute_list ::= alist */
2094
- 0, /* (125) alist ::= */
2095
- -2, /* (126) alist ::= alist attribute */
2096
- -1, /* (127) attribute ::= boolproperty */
2097
- -2, /* (128) attribute ::= WITH withclause */
2098
- -3, /* (129) even ::= UNTIL EVEN WITH */
2099
- -2, /* (130) even ::= EVEN WITH */
2100
- -1, /* (131) withclause ::= with */
2101
- -3, /* (132) withclause ::= withclause AND with */
2102
- -1, /* (133) dashproperty ::= DOTTED */
2103
- -1, /* (134) dashproperty ::= DASHED */
2104
- -1, /* (135) colorproperty ::= FILL */
2105
- -1, /* (136) colorproperty ::= COLOR */
2106
- -1, /* (137) position ::= place */
2107
- -2, /* (138) between ::= WAY BETWEEN */
2108
- -1, /* (139) between ::= BETWEEN */
2109
- -4, /* (140) between ::= OF THE WAY BETWEEN */
2110
- -1, /* (141) object ::= objectname */
2111
- -1, /* (142) locproperty ::= X|Y */
2112
- -1, /* (143) edge ::= EDGEPT */
2113
- -1, /* (144) edge ::= TOP */
2114
- -1, /* (145) edge ::= BOTTOM */
2115
- -1, /* (146) edge ::= LEFT */
2116
- -1, /* (147) edge ::= RIGHT */
2050
+ -4, /* (38) attribute ::= THEN expr HEADING expr */
2051
+ -3, /* (39) attribute ::= THEN HEADING expr */
2052
+ -3, /* (40) attribute ::= THEN expr EDGEPT */
2053
+ -2, /* (41) attribute ::= THEN EDGEPT */
2054
+ -4, /* (42) attribute ::= GO expr HEADING expr */
2055
+ -3, /* (43) attribute ::= GO HEADING expr */
2056
+ -3, /* (44) attribute ::= GO expr EDGEPT */
2057
+ -2, /* (45) attribute ::= GO EDGEPT */
2058
+ -2, /* (46) attribute ::= AT position */
2059
+ -1, /* (47) attribute ::= SAME */
2060
+ -3, /* (48) attribute ::= SAME AS object */
2061
+ -2, /* (49) attribute ::= STRING textposition */
2062
+ -1, /* (50) attribute ::= FIT */
2063
+ -4, /* (51) with ::= DOT_E edge AT position */
2064
+ -3, /* (52) with ::= edge AT position */
2065
+ -1, /* (53) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2066
+ -1, /* (54) boolproperty ::= CW */
2067
+ -1, /* (55) boolproperty ::= CCW */
2068
+ -1, /* (56) boolproperty ::= LARROW */
2069
+ -1, /* (57) boolproperty ::= RARROW */
2070
+ -1, /* (58) boolproperty ::= LRARROW */
2071
+ -1, /* (59) boolproperty ::= INVIS */
2072
+ -1, /* (60) boolproperty ::= THICK */
2073
+ -1, /* (61) boolproperty ::= THIN */
2074
+ 0, /* (62) textposition ::= */
2075
+ -2, /* (63) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2076
+ -3, /* (64) position ::= expr COMMA expr */
2077
+ -5, /* (65) position ::= place PLUS expr COMMA expr */
2078
+ -5, /* (66) position ::= place MINUS expr COMMA expr */
2079
+ -7, /* (67) position ::= place PLUS LP expr COMMA expr RP */
2080
+ -7, /* (68) position ::= place MINUS LP expr COMMA expr RP */
2081
+ -5, /* (69) position ::= LP position COMMA position RP */
2082
+ -3, /* (70) position ::= LP position RP */
2083
+ -5, /* (71) position ::= expr between position AND position */
2084
+ -3, /* (72) position ::= expr ABOVE position */
2085
+ -3, /* (73) position ::= expr BELOW position */
2086
+ -4, /* (74) position ::= expr LEFT OF position */
2087
+ -4, /* (75) position ::= expr RIGHT OF position */
2088
+ -4, /* (76) position ::= expr EDGEPT OF position */
2089
+ -5, /* (77) position ::= expr HEADING expr FROM position */
2090
+ -1, /* (78) place ::= object */
2091
+ -3, /* (79) place ::= object DOT_E edge */
2092
+ -3, /* (80) place ::= object DOT_L START */
2093
+ -3, /* (81) place ::= object DOT_L END */
2094
+ -3, /* (82) place ::= START OF object */
2095
+ -3, /* (83) place ::= END OF object */
2096
+ -3, /* (84) place ::= edge OF object */
2097
+ -4, /* (85) place ::= NTH VERTEX OF object */
2098
+ -1, /* (86) object ::= nth */
2099
+ -3, /* (87) object ::= nth OF|IN object */
2100
+ -1, /* (88) objectname ::= PLACENAME */
2101
+ -3, /* (89) objectname ::= objectname DOT_U PLACENAME */
2102
+ -2, /* (90) nth ::= NTH CLASSNAME */
2103
+ -3, /* (91) nth ::= NTH LAST CLASSNAME */
2104
+ -2, /* (92) nth ::= LAST CLASSNAME */
2105
+ -1, /* (93) nth ::= LAST */
2106
+ -3, /* (94) nth ::= NTH LB RB */
2107
+ -4, /* (95) nth ::= NTH LAST LB RB */
2108
+ -3, /* (96) nth ::= LAST LB RB */
2109
+ -3, /* (97) expr ::= expr PLUS expr */
2110
+ -3, /* (98) expr ::= expr MINUS expr */
2111
+ -3, /* (99) expr ::= expr STAR expr */
2112
+ -3, /* (100) expr ::= expr SLASH expr */
2113
+ -2, /* (101) expr ::= MINUS expr */
2114
+ -2, /* (102) expr ::= PLUS expr */
2115
+ -3, /* (103) expr ::= LP expr RP */
2116
+ -1, /* (104) expr ::= NUMBER */
2117
+ -1, /* (105) expr ::= ID */
2118
+ -4, /* (106) expr ::= FUNC1 LP expr RP */
2119
+ -6, /* (107) expr ::= FUNC2 LP expr COMMA expr RP */
2120
+ -3, /* (108) expr ::= object DOT_L locproperty */
2121
+ -3, /* (109) expr ::= object DOT_L numproperty */
2122
+ -3, /* (110) expr ::= object DOT_L dashproperty */
2123
+ -3, /* (111) expr ::= object DOT_L colorproperty */
2124
+ -5, /* (112) expr ::= object DOT_E edge DOT_L X */
2125
+ -5, /* (113) expr ::= object DOT_E edge DOT_L Y */
2126
+ -5, /* (114) expr ::= LP locproperty OF object RP */
2127
+ -5, /* (115) expr ::= LP dashproperty OF object RP */
2128
+ -5, /* (116) expr ::= LP numproperty OF object RP */
2129
+ -5, /* (117) expr ::= LP colorproperty OF object RP */
2130
+ -6, /* (118) expr ::= NTH VERTEX OF object DOT_L X */
2131
+ -6, /* (119) expr ::= NTH VERTEX OF object DOT_L Y */
2132
+ -1, /* (120) lvalue ::= ID */
2133
+ -1, /* (121) lvalue ::= FILL */
2134
+ -1, /* (122) lvalue ::= COLOR */
2135
+ -1, /* (123) lvalue ::= THICKNESS */
2136
+ -1, /* (124) rvalue ::= expr */
2137
+ -1, /* (125) print ::= PRINT */
2138
+ -1, /* (126) prlist ::= pritem */
2139
+ -3, /* (127) prlist ::= prlist prsep pritem */
2140
+ -1, /* (128) direction ::= UP */
2141
+ -1, /* (129) direction ::= DOWN */
2142
+ -1, /* (130) direction ::= LEFT */
2143
+ -1, /* (131) direction ::= RIGHT */
2144
+ -1, /* (132) attribute_list ::= alist */
2145
+ 0, /* (133) alist ::= */
2146
+ -2, /* (134) alist ::= alist attribute */
2147
+ -1, /* (135) attribute ::= boolproperty */
2148
+ -2, /* (136) attribute ::= WITH withclause */
2149
+ -1, /* (137) go ::= GO */
2150
+ 0, /* (138) go ::= */
2151
+ -3, /* (139) even ::= UNTIL EVEN WITH */
2152
+ -2, /* (140) even ::= EVEN WITH */
2153
+ -1, /* (141) withclause ::= with */
2154
+ -3, /* (142) withclause ::= withclause AND with */
2155
+ -1, /* (143) dashproperty ::= DOTTED */
2156
+ -1, /* (144) dashproperty ::= DASHED */
2157
+ -1, /* (145) colorproperty ::= FILL */
2158
+ -1, /* (146) colorproperty ::= COLOR */
2159
+ -1, /* (147) position ::= place */
2160
+ -2, /* (148) between ::= WAY BETWEEN */
2161
+ -1, /* (149) between ::= BETWEEN */
2162
+ -4, /* (150) between ::= OF THE WAY BETWEEN */
2163
+ -1, /* (151) object ::= objectname */
2164
+ -1, /* (152) locproperty ::= X|Y */
2165
+ -1, /* (153) edge ::= EDGEPT */
2166
+ -1, /* (154) edge ::= TOP */
2167
+ -1, /* (155) edge ::= BOTTOM */
2168
+ -1, /* (156) edge ::= LEFT */
2169
+ -1, /* (157) edge ::= RIGHT */
21172170
};
21182171
21192172
static void yy_accept(yyParser*); /* Forward Declaration */
21202173
21212174
/*
@@ -2202,605 +2255,631 @@
22022255
** break;
22032256
*/
22042257
/********** Begin reduce actions **********************************************/
22052258
YYMINORTYPE yylhsminor;
22062259
case 0: /* document ::= element_list */
2207
-#line 478 "pikchr.y"
2208
-{pik_render(p,yymsp[0].minor.yy120);}
2209
-#line 2234 "pikchr.c"
2260
+#line 479 "pikchr.y"
2261
+{pik_render(p,yymsp[0].minor.yy66);}
2262
+#line 2287 "pikchr.c"
22102263
break;
22112264
case 1: /* element_list ::= element */
2212
-#line 481 "pikchr.y"
2213
-{ yylhsminor.yy120 = pik_elist_append(p,0,yymsp[0].minor.yy26); }
2214
-#line 2239 "pikchr.c"
2215
- yymsp[0].minor.yy120 = yylhsminor.yy120;
2265
+#line 482 "pikchr.y"
2266
+{ yylhsminor.yy66 = pik_elist_append(p,0,yymsp[0].minor.yy2); }
2267
+#line 2292 "pikchr.c"
2268
+ yymsp[0].minor.yy66 = yylhsminor.yy66;
22162269
break;
22172270
case 2: /* element_list ::= element_list EOL element */
2218
-#line 483 "pikchr.y"
2219
-{ yylhsminor.yy120 = pik_elist_append(p,yymsp[-2].minor.yy120,yymsp[0].minor.yy26); }
2220
-#line 2245 "pikchr.c"
2221
- yymsp[-2].minor.yy120 = yylhsminor.yy120;
2271
+#line 484 "pikchr.y"
2272
+{ yylhsminor.yy66 = pik_elist_append(p,yymsp[-2].minor.yy66,yymsp[0].minor.yy2); }
2273
+#line 2298 "pikchr.c"
2274
+ yymsp[-2].minor.yy66 = yylhsminor.yy66;
22222275
break;
22232276
case 3: /* element ::= */
2224
-#line 486 "pikchr.y"
2225
-{ yymsp[1].minor.yy26 = 0; }
2226
-#line 2251 "pikchr.c"
2277
+#line 487 "pikchr.y"
2278
+{ yymsp[1].minor.yy2 = 0; }
2279
+#line 2304 "pikchr.c"
22272280
break;
22282281
case 4: /* element ::= direction */
2229
-#line 487 "pikchr.y"
2230
-{ pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy26=0; }
2231
-#line 2256 "pikchr.c"
2232
- yymsp[0].minor.yy26 = yylhsminor.yy26;
2282
+#line 488 "pikchr.y"
2283
+{ pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy2=0; }
2284
+#line 2309 "pikchr.c"
2285
+ yymsp[0].minor.yy2 = yylhsminor.yy2;
22332286
break;
22342287
case 5: /* element ::= lvalue ASSIGN rvalue */
2235
-#line 488 "pikchr.y"
2236
-{pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy191,&yymsp[-1].minor.yy0); yylhsminor.yy26=0;}
2237
-#line 2262 "pikchr.c"
2238
- yymsp[-2].minor.yy26 = yylhsminor.yy26;
2288
+#line 489 "pikchr.y"
2289
+{pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy241,&yymsp[-1].minor.yy0); yylhsminor.yy2=0;}
2290
+#line 2315 "pikchr.c"
2291
+ yymsp[-2].minor.yy2 = yylhsminor.yy2;
22392292
break;
22402293
case 6: /* element ::= PLACENAME COLON unnamed_element */
2241
-#line 490 "pikchr.y"
2242
-{ yylhsminor.yy26 = yymsp[0].minor.yy26; pik_elem_setname(p,yymsp[0].minor.yy26,&yymsp[-2].minor.yy0); }
2243
-#line 2268 "pikchr.c"
2244
- yymsp[-2].minor.yy26 = yylhsminor.yy26;
2294
+#line 491 "pikchr.y"
2295
+{ yylhsminor.yy2 = yymsp[0].minor.yy2; pik_elem_setname(p,yymsp[0].minor.yy2,&yymsp[-2].minor.yy0); }
2296
+#line 2321 "pikchr.c"
2297
+ yymsp[-2].minor.yy2 = yylhsminor.yy2;
22452298
break;
22462299
case 7: /* element ::= PLACENAME COLON position */
2247
-#line 492 "pikchr.y"
2248
-{ yylhsminor.yy26 = pik_elem_new(p,0,0,0);
2249
- if(yylhsminor.yy26){ yylhsminor.yy26->ptAt = yymsp[0].minor.yy131; pik_elem_setname(p,yylhsminor.yy26,&yymsp[-2].minor.yy0); }}
2250
-#line 2275 "pikchr.c"
2251
- yymsp[-2].minor.yy26 = yylhsminor.yy26;
2300
+#line 493 "pikchr.y"
2301
+{ yylhsminor.yy2 = pik_elem_new(p,0,0,0);
2302
+ if(yylhsminor.yy2){ yylhsminor.yy2->ptAt = yymsp[0].minor.yy187; pik_elem_setname(p,yylhsminor.yy2,&yymsp[-2].minor.yy0); }}
2303
+#line 2328 "pikchr.c"
2304
+ yymsp[-2].minor.yy2 = yylhsminor.yy2;
22522305
break;
22532306
case 8: /* element ::= unnamed_element */
2254
-#line 494 "pikchr.y"
2255
-{yylhsminor.yy26 = yymsp[0].minor.yy26;}
2256
-#line 2281 "pikchr.c"
2257
- yymsp[0].minor.yy26 = yylhsminor.yy26;
2307
+#line 495 "pikchr.y"
2308
+{yylhsminor.yy2 = yymsp[0].minor.yy2;}
2309
+#line 2334 "pikchr.c"
2310
+ yymsp[0].minor.yy2 = yylhsminor.yy2;
22582311
break;
22592312
case 9: /* element ::= print prlist */
2260
-#line 495 "pikchr.y"
2261
-{pik_append(p,"<br>\n",5); yymsp[-1].minor.yy26=0;}
2262
-#line 2287 "pikchr.c"
2313
+#line 496 "pikchr.y"
2314
+{pik_append(p,"<br>\n",5); yymsp[-1].minor.yy2=0;}
2315
+#line 2340 "pikchr.c"
22632316
break;
22642317
case 10: /* rvalue ::= PLACENAME */
2265
-#line 506 "pikchr.y"
2266
-{yylhsminor.yy191 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2267
-#line 2292 "pikchr.c"
2268
- yymsp[0].minor.yy191 = yylhsminor.yy191;
2318
+#line 507 "pikchr.y"
2319
+{yylhsminor.yy241 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2320
+#line 2345 "pikchr.c"
2321
+ yymsp[0].minor.yy241 = yylhsminor.yy241;
22692322
break;
22702323
case 11: /* pritem ::= FILL */
22712324
case 12: /* pritem ::= COLOR */ yytestcase(yyruleno==12);
22722325
case 13: /* pritem ::= THICKNESS */ yytestcase(yyruleno==13);
2273
-#line 511 "pikchr.y"
2326
+#line 512 "pikchr.y"
22742327
{pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));}
2275
-#line 2300 "pikchr.c"
2328
+#line 2353 "pikchr.c"
22762329
break;
22772330
case 14: /* pritem ::= rvalue */
2278
-#line 514 "pikchr.y"
2279
-{pik_append_num(p,"",yymsp[0].minor.yy191);}
2280
-#line 2305 "pikchr.c"
2331
+#line 515 "pikchr.y"
2332
+{pik_append_num(p,"",yymsp[0].minor.yy241);}
2333
+#line 2358 "pikchr.c"
22812334
break;
22822335
case 15: /* pritem ::= STRING */
2283
-#line 515 "pikchr.y"
2336
+#line 516 "pikchr.y"
22842337
{pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2285
-#line 2310 "pikchr.c"
2338
+#line 2363 "pikchr.c"
22862339
break;
22872340
case 16: /* prsep ::= COMMA */
2288
-#line 516 "pikchr.y"
2341
+#line 517 "pikchr.y"
22892342
{pik_append(p, " ", 1);}
2290
-#line 2315 "pikchr.c"
2343
+#line 2368 "pikchr.c"
22912344
break;
22922345
case 17: /* unnamed_element ::= basetype attribute_list */
2293
-#line 519 "pikchr.y"
2294
-{yylhsminor.yy26 = yymsp[-1].minor.yy26; pik_after_adding_attributes(p,yylhsminor.yy26);}
2295
-#line 2320 "pikchr.c"
2296
- yymsp[-1].minor.yy26 = yylhsminor.yy26;
2346
+#line 520 "pikchr.y"
2347
+{yylhsminor.yy2 = yymsp[-1].minor.yy2; pik_after_adding_attributes(p,yylhsminor.yy2);}
2348
+#line 2373 "pikchr.c"
2349
+ yymsp[-1].minor.yy2 = yylhsminor.yy2;
22972350
break;
22982351
case 18: /* basetype ::= CLASSNAME */
2299
-#line 521 "pikchr.y"
2300
-{yylhsminor.yy26 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2301
-#line 2326 "pikchr.c"
2302
- yymsp[0].minor.yy26 = yylhsminor.yy26;
2352
+#line 522 "pikchr.y"
2353
+{yylhsminor.yy2 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2354
+#line 2379 "pikchr.c"
2355
+ yymsp[0].minor.yy2 = yylhsminor.yy2;
23032356
break;
23042357
case 19: /* basetype ::= STRING textposition */
2305
-#line 523 "pikchr.y"
2306
-{yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy60; yylhsminor.yy26 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2307
-#line 2332 "pikchr.c"
2308
- yymsp[-1].minor.yy26 = yylhsminor.yy26;
2358
+#line 524 "pikchr.y"
2359
+{yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy86; yylhsminor.yy2 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2360
+#line 2385 "pikchr.c"
2361
+ yymsp[-1].minor.yy2 = yylhsminor.yy2;
23092362
break;
23102363
case 20: /* basetype ::= LB savelist element_list RB */
2311
-#line 525 "pikchr.y"
2312
-{ p->list = yymsp[-2].minor.yy120; yymsp[-3].minor.yy26 = pik_elem_new(p,0,0,yymsp[-1].minor.yy120); if(yymsp[-3].minor.yy26) yymsp[-3].minor.yy26->errTok = yymsp[0].minor.yy0; }
2313
-#line 2338 "pikchr.c"
2364
+#line 526 "pikchr.y"
2365
+{ p->list = yymsp[-2].minor.yy66; yymsp[-3].minor.yy2 = pik_elem_new(p,0,0,yymsp[-1].minor.yy66); if(yymsp[-3].minor.yy2) yymsp[-3].minor.yy2->errTok = yymsp[0].minor.yy0; }
2366
+#line 2391 "pikchr.c"
23142367
break;
23152368
case 21: /* savelist ::= */
2316
-#line 530 "pikchr.y"
2317
-{yymsp[1].minor.yy120 = p->list; p->list = 0;}
2318
-#line 2343 "pikchr.c"
2369
+#line 531 "pikchr.y"
2370
+{yymsp[1].minor.yy66 = p->list; p->list = 0;}
2371
+#line 2396 "pikchr.c"
23192372
break;
23202373
case 22: /* attribute_list ::= expr */
2321
-#line 537 "pikchr.y"
2322
-{ pik_add_direction(p,0,&yymsp[0].minor.yy191,0);}
2323
-#line 2348 "pikchr.c"
2374
+#line 538 "pikchr.y"
2375
+{ pik_add_direction(p,0,&yymsp[0].minor.yy241,0);}
2376
+#line 2401 "pikchr.c"
23242377
break;
23252378
case 23: /* attribute_list ::= expr PERCENT */
2326
-#line 538 "pikchr.y"
2327
-{ pik_add_direction(p,0,&yymsp[-1].minor.yy191,1);}
2328
-#line 2353 "pikchr.c"
2379
+#line 539 "pikchr.y"
2380
+{ pik_add_direction(p,0,&yymsp[-1].minor.yy241,1);}
2381
+#line 2406 "pikchr.c"
23292382
break;
23302383
case 24: /* attribute ::= numproperty expr PERCENT */
2331
-#line 543 "pikchr.y"
2332
-{ pik_set_numprop(p,&yymsp[-2].minor.yy0,0.0,yymsp[-1].minor.yy191/100.0); }
2333
-#line 2358 "pikchr.c"
2384
+#line 544 "pikchr.y"
2385
+{ pik_set_numprop(p,&yymsp[-2].minor.yy0,0.0,yymsp[-1].minor.yy241/100.0); }
2386
+#line 2411 "pikchr.c"
23342387
break;
23352388
case 25: /* attribute ::= numproperty expr */
23362389
case 28: /* attribute ::= colorproperty rvalue */ yytestcase(yyruleno==28);
2337
-#line 544 "pikchr.y"
2338
-{ pik_set_numprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy191,0.0); }
2339
-#line 2364 "pikchr.c"
2390
+#line 545 "pikchr.y"
2391
+{ pik_set_numprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy241,0.0); }
2392
+#line 2417 "pikchr.c"
23402393
break;
23412394
case 26: /* attribute ::= dashproperty expr */
2342
-#line 545 "pikchr.y"
2343
-{ pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy191); }
2344
-#line 2369 "pikchr.c"
2395
+#line 546 "pikchr.y"
2396
+{ pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy241); }
2397
+#line 2422 "pikchr.c"
23452398
break;
23462399
case 27: /* attribute ::= dashproperty */
2347
-#line 546 "pikchr.y"
2400
+#line 547 "pikchr.y"
23482401
{ pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2349
-#line 2374 "pikchr.c"
2350
- break;
2351
- case 29: /* attribute ::= direction expr PERCENT */
2352
-#line 549 "pikchr.y"
2353
-{ pik_add_direction(p,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy191,1);}
2354
-#line 2379 "pikchr.c"
2355
- break;
2356
- case 30: /* attribute ::= direction expr */
2402
+#line 2427 "pikchr.c"
2403
+ break;
2404
+ case 29: /* attribute ::= go direction expr PERCENT */
23572405
#line 550 "pikchr.y"
2358
-{ pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy191,0);}
2359
-#line 2384 "pikchr.c"
2406
+{ pik_add_direction(p,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy241,1);}
2407
+#line 2432 "pikchr.c"
23602408
break;
2361
- case 31: /* attribute ::= direction */
2409
+ case 30: /* attribute ::= go direction expr */
23622410
#line 551 "pikchr.y"
2411
+{ pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy241,0);}
2412
+#line 2437 "pikchr.c"
2413
+ break;
2414
+ case 31: /* attribute ::= go direction */
2415
+#line 552 "pikchr.y"
23632416
{ pik_add_direction(p,&yymsp[0].minor.yy0,0,0); }
2364
-#line 2389 "pikchr.c"
2417
+#line 2442 "pikchr.c"
23652418
break;
2366
- case 32: /* attribute ::= direction even position */
2367
-#line 552 "pikchr.y"
2368
-{pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy131);}
2369
-#line 2394 "pikchr.c"
2419
+ case 32: /* attribute ::= go direction even position */
2420
+#line 553 "pikchr.y"
2421
+{pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy187);}
2422
+#line 2447 "pikchr.c"
23702423
break;
23712424
case 33: /* attribute ::= CLOSE */
2372
-#line 553 "pikchr.y"
2425
+#line 554 "pikchr.y"
23732426
{ pik_close_path(p,&yymsp[0].minor.yy0); }
2374
-#line 2399 "pikchr.c"
2427
+#line 2452 "pikchr.c"
23752428
break;
23762429
case 34: /* attribute ::= CHOP */
2377
-#line 554 "pikchr.y"
2430
+#line 555 "pikchr.y"
23782431
{ p->cur->bChop = 1; }
2379
-#line 2404 "pikchr.c"
2432
+#line 2457 "pikchr.c"
23802433
break;
23812434
case 35: /* attribute ::= FROM position */
2382
-#line 555 "pikchr.y"
2383
-{ pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy131); }
2384
-#line 2409 "pikchr.c"
2435
+#line 556 "pikchr.y"
2436
+{ pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy187); }
2437
+#line 2462 "pikchr.c"
23852438
break;
23862439
case 36: /* attribute ::= TO position */
2387
-#line 556 "pikchr.y"
2388
-{ pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy131); }
2389
-#line 2414 "pikchr.c"
2440
+#line 557 "pikchr.y"
2441
+{ pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy187); }
2442
+#line 2467 "pikchr.c"
23902443
break;
23912444
case 37: /* attribute ::= THEN */
2392
-#line 557 "pikchr.y"
2445
+#line 558 "pikchr.y"
23932446
{ pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2394
-#line 2419 "pikchr.c"
2395
- break;
2396
- case 38: /* attribute ::= AT position */
2397
-#line 559 "pikchr.y"
2398
-{ pik_set_at(p,0,&yymsp[0].minor.yy131,&yymsp[-1].minor.yy0); }
2399
-#line 2424 "pikchr.c"
2400
- break;
2401
- case 39: /* attribute ::= SAME */
2447
+#line 2472 "pikchr.c"
2448
+ break;
2449
+ case 38: /* attribute ::= THEN expr HEADING expr */
2450
+ case 42: /* attribute ::= GO expr HEADING expr */ yytestcase(yyruleno==42);
2451
+#line 560 "pikchr.y"
2452
+{pik_move_hdg(p,&yymsp[-2].minor.yy241,&yymsp[-1].minor.yy0,yymsp[0].minor.yy241,0,&yymsp[-3].minor.yy0);}
2453
+#line 2478 "pikchr.c"
2454
+ break;
2455
+ case 39: /* attribute ::= THEN HEADING expr */
2456
+ case 43: /* attribute ::= GO HEADING expr */ yytestcase(yyruleno==43);
24022457
#line 561 "pikchr.y"
2403
-{pik_same(p,0,&yymsp[0].minor.yy0);}
2404
-#line 2429 "pikchr.c"
2458
+{pik_move_hdg(p,0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy241,0,&yymsp[-2].minor.yy0);}
2459
+#line 2484 "pikchr.c"
24052460
break;
2406
- case 40: /* attribute ::= SAME AS object */
2461
+ case 40: /* attribute ::= THEN expr EDGEPT */
2462
+ case 44: /* attribute ::= GO expr EDGEPT */ yytestcase(yyruleno==44);
24072463
#line 562 "pikchr.y"
2408
-{pik_same(p,yymsp[0].minor.yy26,&yymsp[-2].minor.yy0);}
2409
-#line 2434 "pikchr.c"
2464
+{pik_move_hdg(p,&yymsp[-1].minor.yy241,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);}
2465
+#line 2490 "pikchr.c"
24102466
break;
2411
- case 41: /* attribute ::= STRING textposition */
2467
+ case 41: /* attribute ::= THEN EDGEPT */
2468
+ case 45: /* attribute ::= GO EDGEPT */ yytestcase(yyruleno==45);
24122469
#line 563 "pikchr.y"
2413
-{pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy60);}
2414
-#line 2439 "pikchr.c"
2415
- break;
2416
- case 42: /* attribute ::= FIT */
2417
-#line 564 "pikchr.y"
2418
-{pik_size_to_fit(p,&yymsp[0].minor.yy0); }
2419
-#line 2444 "pikchr.c"
2420
- break;
2421
- case 43: /* with ::= DOT_E edge AT position */
2422
- case 44: /* with ::= edge AT position */ yytestcase(yyruleno==44);
2423
-#line 571 "pikchr.y"
2424
-{ pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy131,&yymsp[-1].minor.yy0); }
2425
-#line 2450 "pikchr.c"
2426
- break;
2427
- case 45: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2428
-#line 575 "pikchr.y"
2429
-{yylhsminor.yy0 = yymsp[0].minor.yy0;}
2430
-#line 2455 "pikchr.c"
2431
- yymsp[0].minor.yy0 = yylhsminor.yy0;
2432
- break;
2433
- case 46: /* boolproperty ::= CW */
2434
-#line 586 "pikchr.y"
2435
-{p->cur->cw = 1;}
2436
-#line 2461 "pikchr.c"
2437
- break;
2438
- case 47: /* boolproperty ::= CCW */
2439
-#line 587 "pikchr.y"
2440
-{p->cur->cw = 0;}
2441
-#line 2466 "pikchr.c"
2442
- break;
2443
- case 48: /* boolproperty ::= LARROW */
2444
-#line 588 "pikchr.y"
2445
-{p->cur->larrow=1; p->cur->rarrow=0; }
2446
-#line 2471 "pikchr.c"
2447
- break;
2448
- case 49: /* boolproperty ::= RARROW */
2449
-#line 589 "pikchr.y"
2450
-{p->cur->larrow=0; p->cur->rarrow=1; }
2451
-#line 2476 "pikchr.c"
2452
- break;
2453
- case 50: /* boolproperty ::= LRARROW */
2454
-#line 590 "pikchr.y"
2455
-{p->cur->larrow=1; p->cur->rarrow=1; }
2456
-#line 2481 "pikchr.c"
2457
- break;
2458
- case 51: /* boolproperty ::= INVIS */
2459
-#line 591 "pikchr.y"
2460
-{p->cur->sw = 0.0;}
2461
-#line 2486 "pikchr.c"
2462
- break;
2463
- case 52: /* boolproperty ::= THICK */
2464
-#line 592 "pikchr.y"
2465
-{p->cur->sw *= 1.5;}
2466
-#line 2491 "pikchr.c"
2467
- break;
2468
- case 53: /* boolproperty ::= THIN */
2469
-#line 593 "pikchr.y"
2470
-{p->cur->sw *= 0.67;}
2470
+{pik_move_hdg(p,0,0,0,&yymsp[0].minor.yy0,&yymsp[-1].minor.yy0);}
24712471
#line 2496 "pikchr.c"
24722472
break;
2473
- case 54: /* textposition ::= */
2474
-#line 595 "pikchr.y"
2475
-{yymsp[1].minor.yy60 = 0;}
2473
+ case 46: /* attribute ::= AT position */
2474
+#line 569 "pikchr.y"
2475
+{ pik_set_at(p,0,&yymsp[0].minor.yy187,&yymsp[-1].minor.yy0); }
24762476
#line 2501 "pikchr.c"
24772477
break;
2478
- case 55: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2479
-#line 598 "pikchr.y"
2480
-{yylhsminor.yy60 = pik_text_position(p,yymsp[-1].minor.yy60,&yymsp[0].minor.yy0);}
2478
+ case 47: /* attribute ::= SAME */
2479
+#line 571 "pikchr.y"
2480
+{pik_same(p,0,&yymsp[0].minor.yy0);}
24812481
#line 2506 "pikchr.c"
2482
- yymsp[-1].minor.yy60 = yylhsminor.yy60;
2482
+ break;
2483
+ case 48: /* attribute ::= SAME AS object */
2484
+#line 572 "pikchr.y"
2485
+{pik_same(p,yymsp[0].minor.yy2,&yymsp[-2].minor.yy0);}
2486
+#line 2511 "pikchr.c"
2487
+ break;
2488
+ case 49: /* attribute ::= STRING textposition */
2489
+#line 573 "pikchr.y"
2490
+{pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy86);}
2491
+#line 2516 "pikchr.c"
2492
+ break;
2493
+ case 50: /* attribute ::= FIT */
2494
+#line 574 "pikchr.y"
2495
+{pik_size_to_fit(p,&yymsp[0].minor.yy0); }
2496
+#line 2521 "pikchr.c"
2497
+ break;
2498
+ case 51: /* with ::= DOT_E edge AT position */
2499
+ case 52: /* with ::= edge AT position */ yytestcase(yyruleno==52);
2500
+#line 584 "pikchr.y"
2501
+{ pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy187,&yymsp[-1].minor.yy0); }
2502
+#line 2527 "pikchr.c"
2503
+ break;
2504
+ case 53: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2505
+#line 588 "pikchr.y"
2506
+{yylhsminor.yy0 = yymsp[0].minor.yy0;}
2507
+#line 2532 "pikchr.c"
2508
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
2509
+ break;
2510
+ case 54: /* boolproperty ::= CW */
2511
+#line 599 "pikchr.y"
2512
+{p->cur->cw = 1;}
2513
+#line 2538 "pikchr.c"
2514
+ break;
2515
+ case 55: /* boolproperty ::= CCW */
2516
+#line 600 "pikchr.y"
2517
+{p->cur->cw = 0;}
2518
+#line 2543 "pikchr.c"
24832519
break;
2484
- case 56: /* position ::= expr COMMA expr */
2520
+ case 56: /* boolproperty ::= LARROW */
24852521
#line 601 "pikchr.y"
2486
-{yylhsminor.yy131.x=yymsp[-2].minor.yy191; yylhsminor.yy131.y=yymsp[0].minor.yy191;}
2487
-#line 2512 "pikchr.c"
2488
- yymsp[-2].minor.yy131 = yylhsminor.yy131;
2522
+{p->cur->larrow=1; p->cur->rarrow=0; }
2523
+#line 2548 "pikchr.c"
2524
+ break;
2525
+ case 57: /* boolproperty ::= RARROW */
2526
+#line 602 "pikchr.y"
2527
+{p->cur->larrow=0; p->cur->rarrow=1; }
2528
+#line 2553 "pikchr.c"
24892529
break;
2490
- case 57: /* position ::= place PLUS expr COMMA expr */
2530
+ case 58: /* boolproperty ::= LRARROW */
24912531
#line 603 "pikchr.y"
2492
-{yylhsminor.yy131.x=yymsp[-4].minor.yy131.x+yymsp[-2].minor.yy191; yylhsminor.yy131.y=yymsp[-4].minor.yy131.y+yymsp[0].minor.yy191;}
2493
-#line 2518 "pikchr.c"
2494
- yymsp[-4].minor.yy131 = yylhsminor.yy131;
2495
- break;
2496
- case 58: /* position ::= place MINUS expr COMMA expr */
2497
-#line 604 "pikchr.y"
2498
-{yylhsminor.yy131.x=yymsp[-4].minor.yy131.x-yymsp[-2].minor.yy191; yylhsminor.yy131.y=yymsp[-4].minor.yy131.y-yymsp[0].minor.yy191;}
2499
-#line 2524 "pikchr.c"
2500
- yymsp[-4].minor.yy131 = yylhsminor.yy131;
2501
- break;
2502
- case 59: /* position ::= place PLUS LP expr COMMA expr RP */
2503
-#line 606 "pikchr.y"
2504
-{yylhsminor.yy131.x=yymsp[-6].minor.yy131.x+yymsp[-3].minor.yy191; yylhsminor.yy131.y=yymsp[-6].minor.yy131.y+yymsp[-1].minor.yy191;}
2505
-#line 2530 "pikchr.c"
2506
- yymsp[-6].minor.yy131 = yylhsminor.yy131;
2507
- break;
2508
- case 60: /* position ::= place MINUS LP expr COMMA expr RP */
2509
-#line 608 "pikchr.y"
2510
-{yylhsminor.yy131.x=yymsp[-6].minor.yy131.x-yymsp[-3].minor.yy191; yylhsminor.yy131.y=yymsp[-6].minor.yy131.y-yymsp[-1].minor.yy191;}
2511
-#line 2536 "pikchr.c"
2512
- yymsp[-6].minor.yy131 = yylhsminor.yy131;
2513
- break;
2514
- case 61: /* position ::= LP position COMMA position RP */
2515
-#line 609 "pikchr.y"
2516
-{yymsp[-4].minor.yy131.x=yymsp[-3].minor.yy131.x; yymsp[-4].minor.yy131.y=yymsp[-1].minor.yy131.y;}
2517
-#line 2542 "pikchr.c"
2518
- break;
2519
- case 62: /* position ::= LP position RP */
2520
-#line 610 "pikchr.y"
2521
-{yymsp[-2].minor.yy131=yymsp[-1].minor.yy131;}
2522
-#line 2547 "pikchr.c"
2523
- break;
2524
- case 63: /* position ::= expr between position AND position */
2525
-#line 612 "pikchr.y"
2526
-{yylhsminor.yy131 = pik_position_between(p,yymsp[-4].minor.yy191,yymsp[-2].minor.yy131,yymsp[0].minor.yy131);}
2527
-#line 2552 "pikchr.c"
2528
- yymsp[-4].minor.yy131 = yylhsminor.yy131;
2529
- break;
2530
- case 64: /* position ::= expr ABOVE position */
2531
-#line 613 "pikchr.y"
2532
-{yylhsminor.yy131=yymsp[0].minor.yy131; yylhsminor.yy131.y += yymsp[-2].minor.yy191;}
2532
+{p->cur->larrow=1; p->cur->rarrow=1; }
25332533
#line 2558 "pikchr.c"
2534
- yymsp[-2].minor.yy131 = yylhsminor.yy131;
2534
+ break;
2535
+ case 59: /* boolproperty ::= INVIS */
2536
+#line 604 "pikchr.y"
2537
+{p->cur->sw = 0.0;}
2538
+#line 2563 "pikchr.c"
2539
+ break;
2540
+ case 60: /* boolproperty ::= THICK */
2541
+#line 605 "pikchr.y"
2542
+{p->cur->sw *= 1.5;}
2543
+#line 2568 "pikchr.c"
2544
+ break;
2545
+ case 61: /* boolproperty ::= THIN */
2546
+#line 606 "pikchr.y"
2547
+{p->cur->sw *= 0.67;}
2548
+#line 2573 "pikchr.c"
2549
+ break;
2550
+ case 62: /* textposition ::= */
2551
+#line 608 "pikchr.y"
2552
+{yymsp[1].minor.yy86 = 0;}
2553
+#line 2578 "pikchr.c"
2554
+ break;
2555
+ case 63: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2556
+#line 611 "pikchr.y"
2557
+{yylhsminor.yy86 = pik_text_position(p,yymsp[-1].minor.yy86,&yymsp[0].minor.yy0);}
2558
+#line 2583 "pikchr.c"
2559
+ yymsp[-1].minor.yy86 = yylhsminor.yy86;
25352560
break;
2536
- case 65: /* position ::= expr BELOW position */
2561
+ case 64: /* position ::= expr COMMA expr */
25372562
#line 614 "pikchr.y"
2538
-{yylhsminor.yy131=yymsp[0].minor.yy131; yylhsminor.yy131.y -= yymsp[-2].minor.yy191;}
2539
-#line 2564 "pikchr.c"
2540
- yymsp[-2].minor.yy131 = yylhsminor.yy131;
2541
- break;
2542
- case 66: /* position ::= expr LEFT OF position */
2543
-#line 615 "pikchr.y"
2544
-{yylhsminor.yy131=yymsp[0].minor.yy131; yylhsminor.yy131.x -= yymsp[-3].minor.yy191;}
2545
-#line 2570 "pikchr.c"
2546
- yymsp[-3].minor.yy131 = yylhsminor.yy131;
2547
- break;
2548
- case 67: /* position ::= expr RIGHT OF position */
2563
+{yylhsminor.yy187.x=yymsp[-2].minor.yy241; yylhsminor.yy187.y=yymsp[0].minor.yy241;}
2564
+#line 2589 "pikchr.c"
2565
+ yymsp[-2].minor.yy187 = yylhsminor.yy187;
2566
+ break;
2567
+ case 65: /* position ::= place PLUS expr COMMA expr */
25492568
#line 616 "pikchr.y"
2550
-{yylhsminor.yy131=yymsp[0].minor.yy131; yylhsminor.yy131.x += yymsp[-3].minor.yy191;}
2551
-#line 2576 "pikchr.c"
2552
- yymsp[-3].minor.yy131 = yylhsminor.yy131;
2553
- break;
2554
- case 68: /* position ::= expr EDGEPT OF position */
2555
-#line 618 "pikchr.y"
2556
-{yylhsminor.yy131 = pik_position_at_hdg(p,yymsp[-3].minor.yy191,&yymsp[-2].minor.yy0,yymsp[0].minor.yy131);}
2557
-#line 2582 "pikchr.c"
2558
- yymsp[-3].minor.yy131 = yylhsminor.yy131;
2559
- break;
2560
- case 69: /* position ::= expr HEADING expr FROM position */
2561
-#line 620 "pikchr.y"
2562
-{yylhsminor.yy131 = pik_position_at_angle(p,yymsp[-4].minor.yy191,yymsp[-2].minor.yy191,yymsp[0].minor.yy131);}
2563
-#line 2588 "pikchr.c"
2564
- yymsp[-4].minor.yy131 = yylhsminor.yy131;
2565
- break;
2566
- case 70: /* place ::= object */
2569
+{yylhsminor.yy187.x=yymsp[-4].minor.yy187.x+yymsp[-2].minor.yy241; yylhsminor.yy187.y=yymsp[-4].minor.yy187.y+yymsp[0].minor.yy241;}
2570
+#line 2595 "pikchr.c"
2571
+ yymsp[-4].minor.yy187 = yylhsminor.yy187;
2572
+ break;
2573
+ case 66: /* position ::= place MINUS expr COMMA expr */
2574
+#line 617 "pikchr.y"
2575
+{yylhsminor.yy187.x=yymsp[-4].minor.yy187.x-yymsp[-2].minor.yy241; yylhsminor.yy187.y=yymsp[-4].minor.yy187.y-yymsp[0].minor.yy241;}
2576
+#line 2601 "pikchr.c"
2577
+ yymsp[-4].minor.yy187 = yylhsminor.yy187;
2578
+ break;
2579
+ case 67: /* position ::= place PLUS LP expr COMMA expr RP */
2580
+#line 619 "pikchr.y"
2581
+{yylhsminor.yy187.x=yymsp[-6].minor.yy187.x+yymsp[-3].minor.yy241; yylhsminor.yy187.y=yymsp[-6].minor.yy187.y+yymsp[-1].minor.yy241;}
2582
+#line 2607 "pikchr.c"
2583
+ yymsp[-6].minor.yy187 = yylhsminor.yy187;
2584
+ break;
2585
+ case 68: /* position ::= place MINUS LP expr COMMA expr RP */
2586
+#line 621 "pikchr.y"
2587
+{yylhsminor.yy187.x=yymsp[-6].minor.yy187.x-yymsp[-3].minor.yy241; yylhsminor.yy187.y=yymsp[-6].minor.yy187.y-yymsp[-1].minor.yy241;}
2588
+#line 2613 "pikchr.c"
2589
+ yymsp[-6].minor.yy187 = yylhsminor.yy187;
2590
+ break;
2591
+ case 69: /* position ::= LP position COMMA position RP */
2592
+#line 622 "pikchr.y"
2593
+{yymsp[-4].minor.yy187.x=yymsp[-3].minor.yy187.x; yymsp[-4].minor.yy187.y=yymsp[-1].minor.yy187.y;}
2594
+#line 2619 "pikchr.c"
2595
+ break;
2596
+ case 70: /* position ::= LP position RP */
2597
+#line 623 "pikchr.y"
2598
+{yymsp[-2].minor.yy187=yymsp[-1].minor.yy187;}
2599
+#line 2624 "pikchr.c"
2600
+ break;
2601
+ case 71: /* position ::= expr between position AND position */
2602
+#line 625 "pikchr.y"
2603
+{yylhsminor.yy187 = pik_position_between(p,yymsp[-4].minor.yy241,yymsp[-2].minor.yy187,yymsp[0].minor.yy187);}
2604
+#line 2629 "pikchr.c"
2605
+ yymsp[-4].minor.yy187 = yylhsminor.yy187;
2606
+ break;
2607
+ case 72: /* position ::= expr ABOVE position */
25672608
#line 626 "pikchr.y"
2568
-{yylhsminor.yy131 = pik_place_of_elem(p,yymsp[0].minor.yy26,0);}
2569
-#line 2594 "pikchr.c"
2570
- yymsp[0].minor.yy131 = yylhsminor.yy131;
2609
+{yylhsminor.yy187=yymsp[0].minor.yy187; yylhsminor.yy187.y += yymsp[-2].minor.yy241;}
2610
+#line 2635 "pikchr.c"
2611
+ yymsp[-2].minor.yy187 = yylhsminor.yy187;
25712612
break;
2572
- case 71: /* place ::= object DOT_E edge */
2573
- case 72: /* place ::= object DOT_L START */ yytestcase(yyruleno==72);
2574
- case 73: /* place ::= object DOT_L END */ yytestcase(yyruleno==73);
2613
+ case 73: /* position ::= expr BELOW position */
25752614
#line 627 "pikchr.y"
2576
-{yylhsminor.yy131 = pik_place_of_elem(p,yymsp[-2].minor.yy26,&yymsp[0].minor.yy0);}
2577
-#line 2602 "pikchr.c"
2578
- yymsp[-2].minor.yy131 = yylhsminor.yy131;
2579
- break;
2580
- case 74: /* place ::= START OF object */
2581
- case 75: /* place ::= END OF object */ yytestcase(yyruleno==75);
2582
- case 76: /* place ::= edge OF object */ yytestcase(yyruleno==76);
2583
-#line 630 "pikchr.y"
2584
-{yylhsminor.yy131 = pik_place_of_elem(p,yymsp[0].minor.yy26,&yymsp[-2].minor.yy0);}
2585
-#line 2610 "pikchr.c"
2586
- yymsp[-2].minor.yy131 = yylhsminor.yy131;
2587
- break;
2588
- case 77: /* place ::= NTH VERTEX OF object */
2615
+{yylhsminor.yy187=yymsp[0].minor.yy187; yylhsminor.yy187.y -= yymsp[-2].minor.yy241;}
2616
+#line 2641 "pikchr.c"
2617
+ yymsp[-2].minor.yy187 = yylhsminor.yy187;
2618
+ break;
2619
+ case 74: /* position ::= expr LEFT OF position */
2620
+#line 628 "pikchr.y"
2621
+{yylhsminor.yy187=yymsp[0].minor.yy187; yylhsminor.yy187.x -= yymsp[-3].minor.yy241;}
2622
+#line 2647 "pikchr.c"
2623
+ yymsp[-3].minor.yy187 = yylhsminor.yy187;
2624
+ break;
2625
+ case 75: /* position ::= expr RIGHT OF position */
2626
+#line 629 "pikchr.y"
2627
+{yylhsminor.yy187=yymsp[0].minor.yy187; yylhsminor.yy187.x += yymsp[-3].minor.yy241;}
2628
+#line 2653 "pikchr.c"
2629
+ yymsp[-3].minor.yy187 = yylhsminor.yy187;
2630
+ break;
2631
+ case 76: /* position ::= expr EDGEPT OF position */
2632
+#line 631 "pikchr.y"
2633
+{yylhsminor.yy187 = pik_position_at_hdg(p,yymsp[-3].minor.yy241,&yymsp[-2].minor.yy0,yymsp[0].minor.yy187);}
2634
+#line 2659 "pikchr.c"
2635
+ yymsp[-3].minor.yy187 = yylhsminor.yy187;
2636
+ break;
2637
+ case 77: /* position ::= expr HEADING expr FROM position */
25892638
#line 633 "pikchr.y"
2590
-{yylhsminor.yy131 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy26);}
2591
-#line 2616 "pikchr.c"
2592
- yymsp[-3].minor.yy131 = yylhsminor.yy131;
2593
- break;
2594
- case 78: /* object ::= nth */
2595
-#line 636 "pikchr.y"
2596
-{yylhsminor.yy26 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2597
-#line 2622 "pikchr.c"
2598
- yymsp[0].minor.yy26 = yylhsminor.yy26;
2599
- break;
2600
- case 79: /* object ::= nth OF|IN object */
2601
-#line 637 "pikchr.y"
2602
-{yylhsminor.yy26 = pik_find_nth(p,yymsp[0].minor.yy26,&yymsp[-2].minor.yy0);}
2603
-#line 2628 "pikchr.c"
2604
- yymsp[-2].minor.yy26 = yylhsminor.yy26;
2605
- break;
2606
- case 80: /* objectname ::= PLACENAME */
2639
+{yylhsminor.yy187 = pik_position_at_angle(p,yymsp[-4].minor.yy241,yymsp[-2].minor.yy241,yymsp[0].minor.yy187);}
2640
+#line 2665 "pikchr.c"
2641
+ yymsp[-4].minor.yy187 = yylhsminor.yy187;
2642
+ break;
2643
+ case 78: /* place ::= object */
26072644
#line 639 "pikchr.y"
2608
-{yylhsminor.yy26 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2609
-#line 2634 "pikchr.c"
2610
- yymsp[0].minor.yy26 = yylhsminor.yy26;
2611
- break;
2612
- case 81: /* objectname ::= objectname DOT_U PLACENAME */
2613
-#line 641 "pikchr.y"
2614
-{yylhsminor.yy26 = pik_find_byname(p,yymsp[-2].minor.yy26,&yymsp[0].minor.yy0);}
2615
-#line 2640 "pikchr.c"
2616
- yymsp[-2].minor.yy26 = yylhsminor.yy26;
2617
- break;
2618
- case 82: /* nth ::= NTH CLASSNAME */
2645
+{yylhsminor.yy187 = pik_place_of_elem(p,yymsp[0].minor.yy2,0);}
2646
+#line 2671 "pikchr.c"
2647
+ yymsp[0].minor.yy187 = yylhsminor.yy187;
2648
+ break;
2649
+ case 79: /* place ::= object DOT_E edge */
2650
+ case 80: /* place ::= object DOT_L START */ yytestcase(yyruleno==80);
2651
+ case 81: /* place ::= object DOT_L END */ yytestcase(yyruleno==81);
2652
+#line 640 "pikchr.y"
2653
+{yylhsminor.yy187 = pik_place_of_elem(p,yymsp[-2].minor.yy2,&yymsp[0].minor.yy0);}
2654
+#line 2679 "pikchr.c"
2655
+ yymsp[-2].minor.yy187 = yylhsminor.yy187;
2656
+ break;
2657
+ case 82: /* place ::= START OF object */
2658
+ case 83: /* place ::= END OF object */ yytestcase(yyruleno==83);
2659
+ case 84: /* place ::= edge OF object */ yytestcase(yyruleno==84);
26192660
#line 643 "pikchr.y"
2661
+{yylhsminor.yy187 = pik_place_of_elem(p,yymsp[0].minor.yy2,&yymsp[-2].minor.yy0);}
2662
+#line 2687 "pikchr.c"
2663
+ yymsp[-2].minor.yy187 = yylhsminor.yy187;
2664
+ break;
2665
+ case 85: /* place ::= NTH VERTEX OF object */
2666
+#line 646 "pikchr.y"
2667
+{yylhsminor.yy187 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy2);}
2668
+#line 2693 "pikchr.c"
2669
+ yymsp[-3].minor.yy187 = yylhsminor.yy187;
2670
+ break;
2671
+ case 86: /* object ::= nth */
2672
+#line 649 "pikchr.y"
2673
+{yylhsminor.yy2 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2674
+#line 2699 "pikchr.c"
2675
+ yymsp[0].minor.yy2 = yylhsminor.yy2;
2676
+ break;
2677
+ case 87: /* object ::= nth OF|IN object */
2678
+#line 650 "pikchr.y"
2679
+{yylhsminor.yy2 = pik_find_nth(p,yymsp[0].minor.yy2,&yymsp[-2].minor.yy0);}
2680
+#line 2705 "pikchr.c"
2681
+ yymsp[-2].minor.yy2 = yylhsminor.yy2;
2682
+ break;
2683
+ case 88: /* objectname ::= PLACENAME */
2684
+#line 652 "pikchr.y"
2685
+{yylhsminor.yy2 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2686
+#line 2711 "pikchr.c"
2687
+ yymsp[0].minor.yy2 = yylhsminor.yy2;
2688
+ break;
2689
+ case 89: /* objectname ::= objectname DOT_U PLACENAME */
2690
+#line 654 "pikchr.y"
2691
+{yylhsminor.yy2 = pik_find_byname(p,yymsp[-2].minor.yy2,&yymsp[0].minor.yy0);}
2692
+#line 2717 "pikchr.c"
2693
+ yymsp[-2].minor.yy2 = yylhsminor.yy2;
2694
+ break;
2695
+ case 90: /* nth ::= NTH CLASSNAME */
2696
+#line 656 "pikchr.y"
26202697
{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2621
-#line 2646 "pikchr.c"
2698
+#line 2723 "pikchr.c"
26222699
yymsp[-1].minor.yy0 = yylhsminor.yy0;
26232700
break;
2624
- case 83: /* nth ::= NTH LAST CLASSNAME */
2625
-#line 644 "pikchr.y"
2626
-{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2627
-#line 2652 "pikchr.c"
2628
- yymsp[-2].minor.yy0 = yylhsminor.yy0;
2629
- break;
2630
- case 84: /* nth ::= LAST CLASSNAME */
2631
-#line 645 "pikchr.y"
2632
-{yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2633
-#line 2658 "pikchr.c"
2634
- break;
2635
- case 85: /* nth ::= LAST */
2636
-#line 646 "pikchr.y"
2637
-{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2638
-#line 2663 "pikchr.c"
2639
- yymsp[0].minor.yy0 = yylhsminor.yy0;
2640
- break;
2641
- case 86: /* nth ::= NTH LB RB */
2642
-#line 647 "pikchr.y"
2643
-{yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2644
-#line 2669 "pikchr.c"
2645
- yymsp[-2].minor.yy0 = yylhsminor.yy0;
2646
- break;
2647
- case 87: /* nth ::= NTH LAST LB RB */
2648
-#line 648 "pikchr.y"
2649
-{yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2650
-#line 2675 "pikchr.c"
2701
+ case 91: /* nth ::= NTH LAST CLASSNAME */
2702
+#line 657 "pikchr.y"
2703
+{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2704
+#line 2729 "pikchr.c"
2705
+ yymsp[-2].minor.yy0 = yylhsminor.yy0;
2706
+ break;
2707
+ case 92: /* nth ::= LAST CLASSNAME */
2708
+#line 658 "pikchr.y"
2709
+{yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2710
+#line 2735 "pikchr.c"
2711
+ break;
2712
+ case 93: /* nth ::= LAST */
2713
+#line 659 "pikchr.y"
2714
+{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2715
+#line 2740 "pikchr.c"
2716
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
2717
+ break;
2718
+ case 94: /* nth ::= NTH LB RB */
2719
+#line 660 "pikchr.y"
2720
+{yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2721
+#line 2746 "pikchr.c"
2722
+ yymsp[-2].minor.yy0 = yylhsminor.yy0;
2723
+ break;
2724
+ case 95: /* nth ::= NTH LAST LB RB */
2725
+#line 661 "pikchr.y"
2726
+{yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2727
+#line 2752 "pikchr.c"
26512728
yymsp[-3].minor.yy0 = yylhsminor.yy0;
26522729
break;
2653
- case 88: /* nth ::= LAST LB RB */
2654
-#line 649 "pikchr.y"
2655
-{yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2656
-#line 2681 "pikchr.c"
2657
- break;
2658
- case 89: /* expr ::= expr PLUS expr */
2659
-#line 651 "pikchr.y"
2660
-{yylhsminor.yy191=yymsp[-2].minor.yy191+yymsp[0].minor.yy191;}
2661
-#line 2686 "pikchr.c"
2662
- yymsp[-2].minor.yy191 = yylhsminor.yy191;
2663
- break;
2664
- case 90: /* expr ::= expr MINUS expr */
2665
-#line 652 "pikchr.y"
2666
-{yylhsminor.yy191=yymsp[-2].minor.yy191-yymsp[0].minor.yy191;}
2667
-#line 2692 "pikchr.c"
2668
- yymsp[-2].minor.yy191 = yylhsminor.yy191;
2669
- break;
2670
- case 91: /* expr ::= expr STAR expr */
2671
-#line 653 "pikchr.y"
2672
-{yylhsminor.yy191=yymsp[-2].minor.yy191*yymsp[0].minor.yy191;}
2673
-#line 2698 "pikchr.c"
2674
- yymsp[-2].minor.yy191 = yylhsminor.yy191;
2675
- break;
2676
- case 92: /* expr ::= expr SLASH expr */
2677
-#line 654 "pikchr.y"
2678
-{
2679
- if( yymsp[0].minor.yy191==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy191 = 0.0; }
2680
- else{ yylhsminor.yy191 = yymsp[-2].minor.yy191/yymsp[0].minor.yy191; }
2681
-}
2682
-#line 2707 "pikchr.c"
2683
- yymsp[-2].minor.yy191 = yylhsminor.yy191;
2684
- break;
2685
- case 93: /* expr ::= MINUS expr */
2686
-#line 658 "pikchr.y"
2687
-{yymsp[-1].minor.yy191=-yymsp[0].minor.yy191;}
2688
-#line 2713 "pikchr.c"
2689
- break;
2690
- case 94: /* expr ::= PLUS expr */
2691
-#line 659 "pikchr.y"
2692
-{yymsp[-1].minor.yy191=yymsp[0].minor.yy191;}
2693
-#line 2718 "pikchr.c"
2694
- break;
2695
- case 95: /* expr ::= LP expr RP */
2696
-#line 660 "pikchr.y"
2697
-{yymsp[-2].minor.yy191=yymsp[-1].minor.yy191;}
2698
-#line 2723 "pikchr.c"
2699
- break;
2700
- case 96: /* expr ::= NUMBER */
2701
-#line 661 "pikchr.y"
2702
-{yylhsminor.yy191=pik_atof(p,&yymsp[0].minor.yy0);}
2703
-#line 2728 "pikchr.c"
2704
- yymsp[0].minor.yy191 = yylhsminor.yy191;
2705
- break;
2706
- case 97: /* expr ::= ID */
2707
-#line 662 "pikchr.y"
2708
-{yylhsminor.yy191=pik_get_var(p,&yymsp[0].minor.yy0);}
2709
-#line 2734 "pikchr.c"
2710
- yymsp[0].minor.yy191 = yylhsminor.yy191;
2711
- break;
2712
- case 98: /* expr ::= FUNC1 LP expr RP */
2713
-#line 663 "pikchr.y"
2714
-{yylhsminor.yy191 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy191,0.0);}
2715
-#line 2740 "pikchr.c"
2716
- yymsp[-3].minor.yy191 = yylhsminor.yy191;
2717
- break;
2718
- case 99: /* expr ::= FUNC2 LP expr COMMA expr RP */
2719
-#line 664 "pikchr.y"
2720
-{yylhsminor.yy191 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy191,yymsp[-1].minor.yy191);}
2721
-#line 2746 "pikchr.c"
2722
- yymsp[-5].minor.yy191 = yylhsminor.yy191;
2723
- break;
2724
- case 100: /* expr ::= object DOT_L locproperty */
2725
- case 101: /* expr ::= object DOT_L numproperty */ yytestcase(yyruleno==101);
2726
- case 102: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==102);
2727
- case 103: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==103);
2728
-#line 666 "pikchr.y"
2729
-{yylhsminor.yy191=pik_property_of(p,yymsp[-2].minor.yy26,&yymsp[0].minor.yy0);}
2730
-#line 2755 "pikchr.c"
2731
- yymsp[-2].minor.yy191 = yylhsminor.yy191;
2732
- break;
2733
- case 104: /* expr ::= object DOT_E edge DOT_L X */
2734
-#line 670 "pikchr.y"
2735
-{yylhsminor.yy191=pik_place_of_elem(p,yymsp[-4].minor.yy26,&yymsp[-2].minor.yy0).x;}
2736
-#line 2761 "pikchr.c"
2737
- yymsp[-4].minor.yy191 = yylhsminor.yy191;
2738
- break;
2739
- case 105: /* expr ::= object DOT_E edge DOT_L Y */
2740
-#line 671 "pikchr.y"
2741
-{yylhsminor.yy191=pik_place_of_elem(p,yymsp[-4].minor.yy26,&yymsp[-2].minor.yy0).y;}
2742
-#line 2767 "pikchr.c"
2743
- yymsp[-4].minor.yy191 = yylhsminor.yy191;
2744
- break;
2745
- case 106: /* expr ::= LP locproperty OF object RP */
2746
- case 107: /* expr ::= LP dashproperty OF object RP */ yytestcase(yyruleno==107);
2747
- case 108: /* expr ::= LP numproperty OF object RP */ yytestcase(yyruleno==108);
2748
- case 109: /* expr ::= LP colorproperty OF object RP */ yytestcase(yyruleno==109);
2749
-#line 672 "pikchr.y"
2750
-{yymsp[-4].minor.yy191=pik_property_of(p,yymsp[-1].minor.yy26,&yymsp[-3].minor.yy0);}
2751
-#line 2776 "pikchr.c"
2752
- break;
2753
- case 110: /* expr ::= NTH VERTEX OF object DOT_L X */
2754
-#line 678 "pikchr.y"
2755
-{yylhsminor.yy191 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy26).x;}
2756
-#line 2781 "pikchr.c"
2757
- yymsp[-5].minor.yy191 = yylhsminor.yy191;
2758
- break;
2759
- case 111: /* expr ::= NTH VERTEX OF object DOT_L Y */
2760
-#line 680 "pikchr.y"
2761
-{yylhsminor.yy191 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy26).y;}
2762
-#line 2787 "pikchr.c"
2763
- yymsp[-5].minor.yy191 = yylhsminor.yy191;
2730
+ case 96: /* nth ::= LAST LB RB */
2731
+#line 662 "pikchr.y"
2732
+{yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2733
+#line 2758 "pikchr.c"
2734
+ break;
2735
+ case 97: /* expr ::= expr PLUS expr */
2736
+#line 664 "pikchr.y"
2737
+{yylhsminor.yy241=yymsp[-2].minor.yy241+yymsp[0].minor.yy241;}
2738
+#line 2763 "pikchr.c"
2739
+ yymsp[-2].minor.yy241 = yylhsminor.yy241;
2740
+ break;
2741
+ case 98: /* expr ::= expr MINUS expr */
2742
+#line 665 "pikchr.y"
2743
+{yylhsminor.yy241=yymsp[-2].minor.yy241-yymsp[0].minor.yy241;}
2744
+#line 2769 "pikchr.c"
2745
+ yymsp[-2].minor.yy241 = yylhsminor.yy241;
2746
+ break;
2747
+ case 99: /* expr ::= expr STAR expr */
2748
+#line 666 "pikchr.y"
2749
+{yylhsminor.yy241=yymsp[-2].minor.yy241*yymsp[0].minor.yy241;}
2750
+#line 2775 "pikchr.c"
2751
+ yymsp[-2].minor.yy241 = yylhsminor.yy241;
2752
+ break;
2753
+ case 100: /* expr ::= expr SLASH expr */
2754
+#line 667 "pikchr.y"
2755
+{
2756
+ if( yymsp[0].minor.yy241==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy241 = 0.0; }
2757
+ else{ yylhsminor.yy241 = yymsp[-2].minor.yy241/yymsp[0].minor.yy241; }
2758
+}
2759
+#line 2784 "pikchr.c"
2760
+ yymsp[-2].minor.yy241 = yylhsminor.yy241;
2761
+ break;
2762
+ case 101: /* expr ::= MINUS expr */
2763
+#line 671 "pikchr.y"
2764
+{yymsp[-1].minor.yy241=-yymsp[0].minor.yy241;}
2765
+#line 2790 "pikchr.c"
2766
+ break;
2767
+ case 102: /* expr ::= PLUS expr */
2768
+#line 672 "pikchr.y"
2769
+{yymsp[-1].minor.yy241=yymsp[0].minor.yy241;}
2770
+#line 2795 "pikchr.c"
2771
+ break;
2772
+ case 103: /* expr ::= LP expr RP */
2773
+#line 673 "pikchr.y"
2774
+{yymsp[-2].minor.yy241=yymsp[-1].minor.yy241;}
2775
+#line 2800 "pikchr.c"
2776
+ break;
2777
+ case 104: /* expr ::= NUMBER */
2778
+#line 674 "pikchr.y"
2779
+{yylhsminor.yy241=pik_atof(p,&yymsp[0].minor.yy0);}
2780
+#line 2805 "pikchr.c"
2781
+ yymsp[0].minor.yy241 = yylhsminor.yy241;
2782
+ break;
2783
+ case 105: /* expr ::= ID */
2784
+#line 675 "pikchr.y"
2785
+{yylhsminor.yy241=pik_get_var(p,&yymsp[0].minor.yy0);}
2786
+#line 2811 "pikchr.c"
2787
+ yymsp[0].minor.yy241 = yylhsminor.yy241;
2788
+ break;
2789
+ case 106: /* expr ::= FUNC1 LP expr RP */
2790
+#line 676 "pikchr.y"
2791
+{yylhsminor.yy241 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy241,0.0);}
2792
+#line 2817 "pikchr.c"
2793
+ yymsp[-3].minor.yy241 = yylhsminor.yy241;
2794
+ break;
2795
+ case 107: /* expr ::= FUNC2 LP expr COMMA expr RP */
2796
+#line 677 "pikchr.y"
2797
+{yylhsminor.yy241 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy241,yymsp[-1].minor.yy241);}
2798
+#line 2823 "pikchr.c"
2799
+ yymsp[-5].minor.yy241 = yylhsminor.yy241;
2800
+ break;
2801
+ case 108: /* expr ::= object DOT_L locproperty */
2802
+ case 109: /* expr ::= object DOT_L numproperty */ yytestcase(yyruleno==109);
2803
+ case 110: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==110);
2804
+ case 111: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==111);
2805
+#line 679 "pikchr.y"
2806
+{yylhsminor.yy241=pik_property_of(p,yymsp[-2].minor.yy2,&yymsp[0].minor.yy0);}
2807
+#line 2832 "pikchr.c"
2808
+ yymsp[-2].minor.yy241 = yylhsminor.yy241;
2809
+ break;
2810
+ case 112: /* expr ::= object DOT_E edge DOT_L X */
2811
+#line 683 "pikchr.y"
2812
+{yylhsminor.yy241=pik_place_of_elem(p,yymsp[-4].minor.yy2,&yymsp[-2].minor.yy0).x;}
2813
+#line 2838 "pikchr.c"
2814
+ yymsp[-4].minor.yy241 = yylhsminor.yy241;
2815
+ break;
2816
+ case 113: /* expr ::= object DOT_E edge DOT_L Y */
2817
+#line 684 "pikchr.y"
2818
+{yylhsminor.yy241=pik_place_of_elem(p,yymsp[-4].minor.yy2,&yymsp[-2].minor.yy0).y;}
2819
+#line 2844 "pikchr.c"
2820
+ yymsp[-4].minor.yy241 = yylhsminor.yy241;
2821
+ break;
2822
+ case 114: /* expr ::= LP locproperty OF object RP */
2823
+ case 115: /* expr ::= LP dashproperty OF object RP */ yytestcase(yyruleno==115);
2824
+ case 116: /* expr ::= LP numproperty OF object RP */ yytestcase(yyruleno==116);
2825
+ case 117: /* expr ::= LP colorproperty OF object RP */ yytestcase(yyruleno==117);
2826
+#line 685 "pikchr.y"
2827
+{yymsp[-4].minor.yy241=pik_property_of(p,yymsp[-1].minor.yy2,&yymsp[-3].minor.yy0);}
2828
+#line 2853 "pikchr.c"
2829
+ break;
2830
+ case 118: /* expr ::= NTH VERTEX OF object DOT_L X */
2831
+#line 691 "pikchr.y"
2832
+{yylhsminor.yy241 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy2).x;}
2833
+#line 2858 "pikchr.c"
2834
+ yymsp[-5].minor.yy241 = yylhsminor.yy241;
2835
+ break;
2836
+ case 119: /* expr ::= NTH VERTEX OF object DOT_L Y */
2837
+#line 693 "pikchr.y"
2838
+{yylhsminor.yy241 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy2).y;}
2839
+#line 2864 "pikchr.c"
2840
+ yymsp[-5].minor.yy241 = yylhsminor.yy241;
27642841
break;
27652842
default:
2766
- /* (112) lvalue ::= ID */ yytestcase(yyruleno==112);
2767
- /* (113) lvalue ::= FILL */ yytestcase(yyruleno==113);
2768
- /* (114) lvalue ::= COLOR */ yytestcase(yyruleno==114);
2769
- /* (115) lvalue ::= THICKNESS */ yytestcase(yyruleno==115);
2770
- /* (116) rvalue ::= expr */ yytestcase(yyruleno==116);
2771
- /* (117) print ::= PRINT */ yytestcase(yyruleno==117);
2772
- /* (118) prlist ::= pritem (OPTIMIZED OUT) */ assert(yyruleno!=118);
2773
- /* (119) prlist ::= prlist prsep pritem */ yytestcase(yyruleno==119);
2774
- /* (120) direction ::= UP */ yytestcase(yyruleno==120);
2775
- /* (121) direction ::= DOWN */ yytestcase(yyruleno==121);
2776
- /* (122) direction ::= LEFT */ yytestcase(yyruleno==122);
2777
- /* (123) direction ::= RIGHT */ yytestcase(yyruleno==123);
2778
- /* (124) attribute_list ::= alist */ yytestcase(yyruleno==124);
2779
- /* (125) alist ::= */ yytestcase(yyruleno==125);
2780
- /* (126) alist ::= alist attribute */ yytestcase(yyruleno==126);
2781
- /* (127) attribute ::= boolproperty (OPTIMIZED OUT) */ assert(yyruleno!=127);
2782
- /* (128) attribute ::= WITH withclause */ yytestcase(yyruleno==128);
2783
- /* (129) even ::= UNTIL EVEN WITH */ yytestcase(yyruleno==129);
2784
- /* (130) even ::= EVEN WITH */ yytestcase(yyruleno==130);
2785
- /* (131) withclause ::= with (OPTIMIZED OUT) */ assert(yyruleno!=131);
2786
- /* (132) withclause ::= withclause AND with */ yytestcase(yyruleno==132);
2787
- /* (133) dashproperty ::= DOTTED */ yytestcase(yyruleno==133);
2788
- /* (134) dashproperty ::= DASHED */ yytestcase(yyruleno==134);
2789
- /* (135) colorproperty ::= FILL */ yytestcase(yyruleno==135);
2790
- /* (136) colorproperty ::= COLOR */ yytestcase(yyruleno==136);
2791
- /* (137) position ::= place */ yytestcase(yyruleno==137);
2792
- /* (138) between ::= WAY BETWEEN */ yytestcase(yyruleno==138);
2793
- /* (139) between ::= BETWEEN */ yytestcase(yyruleno==139);
2794
- /* (140) between ::= OF THE WAY BETWEEN */ yytestcase(yyruleno==140);
2795
- /* (141) object ::= objectname */ yytestcase(yyruleno==141);
2796
- /* (142) locproperty ::= X|Y */ yytestcase(yyruleno==142);
2797
- /* (143) edge ::= EDGEPT */ yytestcase(yyruleno==143);
2798
- /* (144) edge ::= TOP */ yytestcase(yyruleno==144);
2799
- /* (145) edge ::= BOTTOM */ yytestcase(yyruleno==145);
2800
- /* (146) edge ::= LEFT */ yytestcase(yyruleno==146);
2801
- /* (147) edge ::= RIGHT */ yytestcase(yyruleno==147);
2843
+ /* (120) lvalue ::= ID */ yytestcase(yyruleno==120);
2844
+ /* (121) lvalue ::= FILL */ yytestcase(yyruleno==121);
2845
+ /* (122) lvalue ::= COLOR */ yytestcase(yyruleno==122);
2846
+ /* (123) lvalue ::= THICKNESS */ yytestcase(yyruleno==123);
2847
+ /* (124) rvalue ::= expr */ yytestcase(yyruleno==124);
2848
+ /* (125) print ::= PRINT */ yytestcase(yyruleno==125);
2849
+ /* (126) prlist ::= pritem (OPTIMIZED OUT) */ assert(yyruleno!=126);
2850
+ /* (127) prlist ::= prlist prsep pritem */ yytestcase(yyruleno==127);
2851
+ /* (128) direction ::= UP */ yytestcase(yyruleno==128);
2852
+ /* (129) direction ::= DOWN */ yytestcase(yyruleno==129);
2853
+ /* (130) direction ::= LEFT */ yytestcase(yyruleno==130);
2854
+ /* (131) direction ::= RIGHT */ yytestcase(yyruleno==131);
2855
+ /* (132) attribute_list ::= alist */ yytestcase(yyruleno==132);
2856
+ /* (133) alist ::= */ yytestcase(yyruleno==133);
2857
+ /* (134) alist ::= alist attribute */ yytestcase(yyruleno==134);
2858
+ /* (135) attribute ::= boolproperty (OPTIMIZED OUT) */ assert(yyruleno!=135);
2859
+ /* (136) attribute ::= WITH withclause */ yytestcase(yyruleno==136);
2860
+ /* (137) go ::= GO */ yytestcase(yyruleno==137);
2861
+ /* (138) go ::= */ yytestcase(yyruleno==138);
2862
+ /* (139) even ::= UNTIL EVEN WITH */ yytestcase(yyruleno==139);
2863
+ /* (140) even ::= EVEN WITH */ yytestcase(yyruleno==140);
2864
+ /* (141) withclause ::= with (OPTIMIZED OUT) */ assert(yyruleno!=141);
2865
+ /* (142) withclause ::= withclause AND with */ yytestcase(yyruleno==142);
2866
+ /* (143) dashproperty ::= DOTTED */ yytestcase(yyruleno==143);
2867
+ /* (144) dashproperty ::= DASHED */ yytestcase(yyruleno==144);
2868
+ /* (145) colorproperty ::= FILL */ yytestcase(yyruleno==145);
2869
+ /* (146) colorproperty ::= COLOR */ yytestcase(yyruleno==146);
2870
+ /* (147) position ::= place */ yytestcase(yyruleno==147);
2871
+ /* (148) between ::= WAY BETWEEN */ yytestcase(yyruleno==148);
2872
+ /* (149) between ::= BETWEEN */ yytestcase(yyruleno==149);
2873
+ /* (150) between ::= OF THE WAY BETWEEN */ yytestcase(yyruleno==150);
2874
+ /* (151) object ::= objectname */ yytestcase(yyruleno==151);
2875
+ /* (152) locproperty ::= X|Y */ yytestcase(yyruleno==152);
2876
+ /* (153) edge ::= EDGEPT */ yytestcase(yyruleno==153);
2877
+ /* (154) edge ::= TOP */ yytestcase(yyruleno==154);
2878
+ /* (155) edge ::= BOTTOM */ yytestcase(yyruleno==155);
2879
+ /* (156) edge ::= LEFT */ yytestcase(yyruleno==156);
2880
+ /* (157) edge ::= RIGHT */ yytestcase(yyruleno==157);
28022881
break;
28032882
/********** End reduce actions ************************************************/
28042883
};
28052884
assert( yyruleno<sizeof(yyRuleInfoLhs)/sizeof(yyRuleInfoLhs[0]) );
28062885
yygoto = yyRuleInfoLhs[yyruleno];
@@ -2856,18 +2935,18 @@
28562935
){
28572936
pik_parserARG_FETCH
28582937
pik_parserCTX_FETCH
28592938
#define TOKEN yyminor
28602939
/************ Begin %syntax_error code ****************************************/
2861
-#line 467 "pikchr.y"
2940
+#line 468 "pikchr.y"
28622941
28632942
if( TOKEN.z && TOKEN.z[0] ){
28642943
pik_error(p, &TOKEN, "syntax error");
28652944
}else{
28662945
pik_error(p, 0, "syntax error");
28672946
}
2868
-#line 2893 "pikchr.c"
2947
+#line 2972 "pikchr.c"
28692948
/************ End %syntax_error code ******************************************/
28702949
pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
28712950
pik_parserCTX_STORE
28722951
}
28732952
@@ -3096,11 +3175,11 @@
30963175
#else
30973176
(void)iToken;
30983177
return 0;
30993178
#endif
31003179
}
3101
-#line 690 "pikchr.y"
3180
+#line 703 "pikchr.y"
31023181
31033182
31043183
31053184
/* Chart of the 140 official HTML color names with their
31063185
** corresponding RGB value.
@@ -4972,11 +5051,11 @@
49725051
** resetting the ptTo.
49735052
*/
49745053
static void pik_then(Pik *p, PToken *pToken, PElem *pElem){
49755054
int n;
49765055
if( !pElem->type->isLine ){
4977
- pik_error(p, pToken, "use with line-oriented elements only");
5056
+ pik_error(p, pToken, "use with line-oriented objects only");
49785057
return;
49795058
}
49805059
n = p->nTPath - 1;
49815060
if( n<1 ){
49825061
pik_error(p, pToken, "no prior path points");
@@ -5021,11 +5100,11 @@
50215100
int n;
50225101
int dir;
50235102
PNum scale = 1.0;
50245103
if( !pElem->type->isLine ){
50255104
if( pDir ){
5026
- pik_error(p, pDir, "use with line-oriented elements only");
5105
+ pik_error(p, pDir, "use with line-oriented objects only");
50275106
}else{
50285107
PToken x = pik_next_semantic_token(p, &pElem->errTok);
50295108
pik_error(p, &x, "syntax error");
50305109
}
50315110
return;
@@ -5069,10 +5148,70 @@
50695148
p->mTPath |= 1;
50705149
break;
50715150
}
50725151
pElem->outDir = dir;
50735152
}
5153
+
5154
+/* Process a movement attribute of one of these forms:
5155
+**
5156
+** pDist pHdgKW rHdg pEdgept
5157
+** GO distance HEADING angle
5158
+** GO HEADING angle
5159
+** GO distance compasspoint
5160
+** GO compasspoint
5161
+*/
5162
+static void pik_move_hdg(
5163
+ Pik *p, /* The Pikchr context */
5164
+ PNum *pDist, /* Distance to move. NULL means standard distance */
5165
+ PToken *pHeading, /* "heading" keyword if present */
5166
+ PNum rHdg, /* Angle argument to "heading" keyword */
5167
+ PToken *pEdgept, /* EDGEPT keyword "ne", "sw", etc... */
5168
+ PToken *pErr /* Token to use for error messages */
5169
+){
5170
+ PElem *pElem = p->cur;
5171
+ int n;
5172
+ PNum rDist;
5173
+ if( !pElem->type->isLine ){
5174
+ pik_error(p, pErr, "use with line-oriented objects only");
5175
+ return;
5176
+ }
5177
+ if( pDist ){
5178
+ rDist = *pDist;
5179
+ }else{
5180
+ rDist = pik_value(p, "linewid", 7, 0);
5181
+ }
5182
+ do{
5183
+ n = pik_next_rpath(p, pErr);
5184
+ }while( n<1 );
5185
+ if( pHeading ){
5186
+ if( rHdg<0.0 || rHdg>360.0 ){
5187
+ pik_error(p, pHeading, "headings should be between 0 and 360");
5188
+ return;
5189
+ }
5190
+ }else if( pEdgept->eEdge==CP_C ){
5191
+ pik_error(p, pEdgept, "syntax error");
5192
+ return;
5193
+ }else{
5194
+ rHdg = pik_hdg_angle[pEdgept->eEdge];
5195
+ }
5196
+ if( rHdg<=45.0 ){
5197
+ pElem->outDir = DIR_UP;
5198
+ }else if( rHdg<=135.0 ){
5199
+ pElem->outDir = DIR_RIGHT;
5200
+ }else if( rHdg<=225.0 ){
5201
+ pElem->outDir = DIR_DOWN;
5202
+ }else if( rHdg<=315.0 ){
5203
+ pElem->outDir = DIR_LEFT;
5204
+ }else{
5205
+ pElem->outDir = DIR_UP;
5206
+ }
5207
+ rHdg *= 0.017453292519943295769; /* degrees to radians */
5208
+ p->aTPath[n].x += rDist*sin(rHdg);
5209
+ p->aTPath[n].y += rDist*cos(rHdg);
5210
+ p->mTPath = 2;
5211
+}
5212
+
50745213
50755214
/* Process a movement attribute of the form "right until even with ..."
50765215
**
50775216
** pDir is the first keyword, "right" or "left" or "up" or "down".
50785217
** The movement is in that direction until its closest approach to
@@ -5080,11 +5219,11 @@
50805219
*/
50815220
static void pik_evenwith(Pik *p, PToken *pDir, PPoint *pPlace){
50825221
PElem *pElem = p->cur;
50835222
int n;
50845223
if( !pElem->type->isLine ){
5085
- pik_error(p, pDir, "use with line-oriented elements only");
5224
+ pik_error(p, pDir, "use with line-oriented objects only");
50865225
return;
50875226
}
50885227
n = p->nTPath - 1;
50895228
if( p->thenFlag || p->mTPath==3 || n==0 ){
50905229
n = pik_next_rpath(p, pDir);
@@ -6137,10 +6276,11 @@
61376276
{ "even", 4, T_EVEN, 0, 0 },
61386277
{ "fill", 4, T_FILL, 0, 0 },
61396278
{ "first", 5, T_NTH, 0, 0 },
61406279
{ "fit", 3, T_FIT, 0, 0 },
61416280
{ "from", 4, T_FROM, 0, 0 },
6281
+ { "go", 2, T_GO, 0, 0 },
61426282
{ "heading", 7, T_HEADING, 0, 0 },
61436283
{ "height", 6, T_HEIGHT, 0, 0 },
61446284
{ "ht", 2, T_HEIGHT, 0, 0 },
61456285
{ "in", 2, T_IN, 0, 0 },
61466286
{ "int", 3, T_FUNC1, FN_INT, 0 },
@@ -6663,6 +6803,6 @@
66636803
printf("</body></html>\n");
66646804
return 0;
66656805
}
66666806
#endif /* PIKCHR_SHELL */
66676807
6668
-#line 6693 "pikchr.c"
6808
+#line 6833 "pikchr.c"
66696809
--- src/pikchr.c
+++ src/pikchr.c
@@ -394,10 +394,11 @@
394 static void pik_elist_move(PEList*,PNum dx, PNum dy);
395 static void pik_set_numprop(Pik*,PToken*,PNum,PNum);
396 static void pik_set_dashed(Pik*,PToken*,PNum*);
397 static void pik_then(Pik*,PToken*,PElem*);
398 static void pik_add_direction(Pik*,PToken*,PNum*,int);
 
399 static void pik_evenwith(Pik*,PToken*,PPoint*);
400 static void pik_set_from(Pik*,PElem*,PToken*,PPoint*);
401 static void pik_add_to(Pik*,PElem*,PToken*,PPoint*);
402 static void pik_close_path(Pik*,PToken*);
403 static void pik_set_at(Pik*,PToken*,PPoint*,PToken*);
@@ -423,11 +424,11 @@
423 static PPoint pik_nth_vertex(Pik *p, PToken *pNth, PToken *pErr, PElem *pElem);
424 static PToken pik_next_semantic_token(Pik *p, PToken *pThis);
425 static void pik_compute_layout_settings(Pik*);
426
427
428 #line 454 "pikchr.c"
429 /**************** End of %include directives **********************************/
430 /* These constants specify the various numeric values for terminal symbols.
431 ***************** Begin token definitions *************************************/
432 #ifndef T_ID
433 #define T_ID 1
@@ -459,64 +460,65 @@
459 #define T_CLOSE 27
460 #define T_CHOP 28
461 #define T_FROM 29
462 #define T_TO 30
463 #define T_THEN 31
464 #define T_AT 32
465 #define T_WITH 33
466 #define T_SAME 34
467 #define T_AS 35
468 #define T_FIT 36
469 #define T_UNTIL 37
470 #define T_EVEN 38
471 #define T_AND 39
472 #define T_DOT_E 40
473 #define T_HEIGHT 41
474 #define T_WIDTH 42
475 #define T_RADIUS 43
476 #define T_DIAMETER 44
477 #define T_DOTTED 45
478 #define T_DASHED 46
479 #define T_CW 47
480 #define T_CCW 48
481 #define T_LARROW 49
482 #define T_RARROW 50
483 #define T_LRARROW 51
484 #define T_INVIS 52
485 #define T_THICK 53
486 #define T_THIN 54
487 #define T_CENTER 55
488 #define T_LJUST 56
489 #define T_RJUST 57
490 #define T_ABOVE 58
491 #define T_BELOW 59
492 #define T_ITALIC 60
493 #define T_BOLD 61
494 #define T_ALIGNED 62
495 #define T_BIG 63
496 #define T_SMALL 64
497 #define T_LP 65
498 #define T_RP 66
499 #define T_HEADING 67
500 #define T_WAY 68
501 #define T_BETWEEN 69
502 #define T_THE 70
503 #define T_DOT_L 71
504 #define T_START 72
505 #define T_END 73
506 #define T_NTH 74
507 #define T_VERTEX 75
508 #define T_IN 76
509 #define T_DOT_U 77
510 #define T_LAST 78
511 #define T_NUMBER 79
512 #define T_FUNC1 80
513 #define T_FUNC2 81
514 #define T_X 82
515 #define T_Y 83
516 #define T_TOP 84
517 #define T_BOTTOM 85
 
518 #endif
519 /**************** End token definitions ***************************************/
520
521 /* The next sections is a series of control #defines.
522 ** various aspects of the generated parser.
@@ -572,21 +574,21 @@
572 #ifndef INTERFACE
573 # define INTERFACE 1
574 #endif
575 /************* Begin control #defines *****************************************/
576 #define YYCODETYPE unsigned char
577 #define YYNOCODE 119
578 #define YYACTIONTYPE unsigned short int
579 #define pik_parserTOKENTYPE PToken
580 typedef union {
581 int yyinit;
582 pik_parserTOKENTYPE yy0;
583 PElem* yy26;
584 int yy60;
585 PEList* yy120;
586 PPoint yy131;
587 PNum yy191;
588 } YYMINORTYPE;
589 #ifndef YYSTACKDEPTH
590 #define YYSTACKDEPTH 100
591 #endif
592 #define pik_parserARG_SDECL
@@ -598,22 +600,22 @@
598 #define pik_parserCTX_PDECL ,Pik *p
599 #define pik_parserCTX_PARAM ,p
600 #define pik_parserCTX_FETCH Pik *p=yypParser->p;
601 #define pik_parserCTX_STORE yypParser->p=p;
602 #define YYFALLBACK 1
603 #define YYNSTATE 153
604 #define YYNRULE 148
605 #define YYNRULE_WITH_ACTION 112
606 #define YYNTOKEN 86
607 #define YY_MAX_SHIFT 152
608 #define YY_MIN_SHIFTREDUCE 270
609 #define YY_MAX_SHIFTREDUCE 417
610 #define YY_ERROR_ACTION 418
611 #define YY_ACCEPT_ACTION 419
612 #define YY_NO_ACTION 420
613 #define YY_MIN_REDUCE 421
614 #define YY_MAX_REDUCE 568
615 /************* End control #defines *******************************************/
616 #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
617
618 /* Define the yytestcase() macro to be a no-op if is not already defined
619 ** otherwise.
@@ -676,247 +678,265 @@
676 ** yy_reduce_ofst[] For each state, the offset into yy_action for
677 ** shifting non-terminals after a reduce.
678 ** yy_default[] Default action for each state.
679 **
680 *********** Begin parsing tables **********************************************/
681 #define YY_ACTTAB_COUNT (859)
682 static const YYACTIONTYPE yy_action[] = {
683 /* 0 */ 64, 137, 129, 19, 139, 135, 141, 99, 101, 100,
684 /* 10 */ 151, 109, 38, 35, 405, 406, 315, 522, 72, 113,
685 /* 20 */ 523, 524, 521, 390, 391, 392, 393, 303, 304, 10,
686 /* 30 */ 9, 307, 8, 51, 111, 132, 312, 50, 49, 48,
687 /* 40 */ 47, 315, 315, 315, 315, 403, 404, 316, 317, 318,
688 /* 50 */ 319, 320, 321, 322, 323, 367, 413, 142, 45, 46,
689 /* 60 */ 352, 148, 405, 406, 315, 25, 350, 62, 405, 406,
690 /* 70 */ 315, 286, 427, 26, 65, 12, 129, 290, 112, 416,
691 /* 80 */ 417, 428, 101, 100, 151, 109, 413, 24, 112, 315,
692 /* 90 */ 315, 315, 315, 403, 404, 315, 315, 315, 315, 403,
693 /* 100 */ 404, 367, 114, 114, 45, 46, 461, 151, 109, 416,
694 /* 110 */ 417, 22, 350, 553, 405, 406, 315, 73, 108, 1,
695 /* 120 */ 342, 343, 332, 74, 66, 67, 131, 130, 89, 52,
696 /* 130 */ 412, 412, 107, 366, 144, 143, 412, 412, 414, 415,
697 /* 140 */ 62, 315, 315, 315, 315, 403, 404, 367, 413, 6,
698 /* 150 */ 45, 46, 50, 49, 48, 47, 30, 7, 350, 50,
699 /* 160 */ 49, 48, 47, 68, 71, 5, 288, 70, 414, 415,
700 /* 170 */ 63, 416, 417, 400, 94, 374, 375, 13, 107, 366,
701 /* 180 */ 144, 143, 412, 412, 367, 413, 421, 45, 46, 41,
702 /* 190 */ 399, 27, 40, 28, 31, 350, 25, 325, 325, 325,
703 /* 200 */ 325, 325, 325, 325, 325, 325, 325, 116, 416, 417,
704 /* 210 */ 11, 1, 547, 547, 50, 49, 48, 47, 131, 130,
705 /* 220 */ 89, 330, 48, 47, 107, 366, 144, 143, 77, 33,
706 /* 230 */ 414, 415, 367, 354, 147, 45, 46, 103, 151, 109,
707 /* 240 */ 331, 95, 410, 96, 120, 281, 282, 283, 1, 285,
708 /* 250 */ 103, 151, 109, 408, 435, 131, 130, 89, 121, 69,
709 /* 260 */ 69, 107, 366, 144, 143, 14, 382, 414, 415, 15,
710 /* 270 */ 124, 122, 50, 49, 48, 47, 365, 133, 16, 383,
711 /* 280 */ 384, 385, 387, 71, 53, 288, 70, 39, 390, 391,
712 /* 290 */ 392, 393, 106, 126, 125, 54, 5, 124, 122, 50,
713 /* 300 */ 49, 48, 47, 350, 367, 94, 102, 45, 46, 107,
714 /* 310 */ 366, 144, 143, 2, 39, 350, 50, 49, 48, 47,
715 /* 320 */ 126, 125, 380, 381, 353, 149, 18, 17, 55, 405,
716 /* 330 */ 406, 315, 56, 379, 365, 32, 123, 409, 95, 367,
717 /* 340 */ 117, 115, 45, 46, 378, 377, 57, 103, 151, 109,
718 /* 350 */ 350, 449, 58, 18, 17, 59, 315, 315, 315, 315,
719 /* 360 */ 403, 404, 32, 123, 409, 97, 60, 376, 5, 107,
720 /* 370 */ 43, 501, 110, 422, 429, 26, 44, 94, 329, 425,
721 /* 380 */ 61, 107, 366, 144, 143, 367, 358, 356, 45, 46,
722 /* 390 */ 152, 357, 419, 21, 150, 351, 96, 412, 412, 29,
723 /* 400 */ 75, 137, 501, 5, 139, 135, 141, 420, 501, 103,
724 /* 410 */ 151, 109, 94, 352, 148, 420, 107, 366, 144, 143,
725 /* 420 */ 367, 420, 420, 45, 46, 420, 420, 98, 422, 429,
726 /* 430 */ 26, 350, 76, 137, 425, 420, 139, 135, 141, 420,
727 /* 440 */ 420, 103, 151, 109, 420, 152, 420, 420, 21, 5,
728 /* 450 */ 88, 137, 420, 420, 139, 135, 141, 420, 94, 103,
729 /* 460 */ 151, 109, 107, 366, 144, 143, 367, 420, 128, 45,
730 /* 470 */ 46, 108, 65, 420, 129, 420, 95, 350, 420, 465,
731 /* 480 */ 101, 100, 151, 109, 3, 103, 151, 109, 420, 435,
732 /* 490 */ 127, 151, 109, 94, 65, 540, 129, 107, 366, 144,
733 /* 500 */ 143, 464, 101, 100, 151, 109, 420, 65, 420, 129,
734 /* 510 */ 82, 497, 151, 109, 459, 101, 100, 151, 109, 103,
735 /* 520 */ 151, 109, 420, 420, 65, 20, 129, 78, 420, 420,
736 /* 530 */ 4, 457, 101, 100, 151, 109, 103, 151, 109, 94,
737 /* 540 */ 65, 420, 129, 107, 366, 144, 143, 456, 101, 100,
738 /* 550 */ 151, 109, 65, 420, 129, 496, 151, 109, 420, 484,
739 /* 560 */ 101, 100, 151, 109, 420, 65, 420, 129, 420, 420,
740 /* 570 */ 95, 420, 119, 101, 100, 151, 109, 420, 84, 103,
741 /* 580 */ 151, 109, 420, 426, 65, 420, 129, 103, 151, 109,
742 /* 590 */ 420, 490, 101, 100, 151, 109, 65, 420, 129, 438,
743 /* 600 */ 420, 23, 420, 489, 101, 100, 151, 109, 65, 420,
744 /* 610 */ 129, 50, 49, 48, 47, 488, 101, 100, 151, 109,
745 /* 620 */ 420, 65, 420, 129, 420, 420, 36, 420, 487, 101,
746 /* 630 */ 100, 151, 109, 65, 420, 129, 420, 420, 413, 420,
747 /* 640 */ 486, 101, 100, 151, 109, 65, 420, 129, 50, 49,
748 /* 650 */ 48, 47, 485, 101, 100, 151, 109, 420, 65, 420,
749 /* 660 */ 129, 416, 417, 34, 420, 118, 101, 100, 151, 109,
750 /* 670 */ 495, 151, 109, 365, 420, 65, 420, 129, 50, 49,
751 /* 680 */ 48, 47, 453, 101, 100, 151, 109, 50, 49, 48,
752 /* 690 */ 47, 423, 429, 26, 134, 151, 109, 425, 50, 49,
753 /* 700 */ 48, 47, 37, 50, 49, 48, 47, 420, 152, 420,
754 /* 710 */ 420, 21, 420, 50, 49, 48, 47, 299, 420, 420,
755 /* 720 */ 414, 415, 50, 49, 48, 47, 294, 50, 49, 48,
756 /* 730 */ 47, 293, 50, 49, 48, 47, 420, 352, 148, 90,
757 /* 740 */ 369, 420, 79, 420, 420, 80, 420, 42, 103, 151,
758 /* 750 */ 109, 103, 151, 109, 103, 151, 109, 91, 420, 420,
759 /* 760 */ 368, 136, 151, 109, 420, 365, 103, 151, 109, 81,
760 /* 770 */ 420, 420, 92, 420, 420, 93, 420, 420, 103, 151,
761 /* 780 */ 109, 103, 151, 109, 103, 151, 109, 420, 83, 420,
762 /* 790 */ 420, 85, 146, 420, 86, 108, 420, 103, 151, 109,
763 /* 800 */ 103, 151, 109, 103, 151, 109, 87, 420, 420, 420,
764 /* 810 */ 420, 515, 420, 420, 514, 103, 151, 109, 420, 513,
765 /* 820 */ 103, 151, 109, 103, 151, 109, 512, 420, 103, 151,
766 /* 830 */ 109, 104, 138, 151, 109, 103, 151, 109, 105, 420,
767 /* 840 */ 103, 151, 109, 420, 420, 420, 420, 103, 151, 109,
768 /* 850 */ 140, 151, 109, 145, 151, 109, 500, 151, 109,
 
 
 
 
 
 
 
 
769 };
770 static const YYCODETYPE yy_lookahead[] = {
771 /* 0 */ 90, 91, 92, 118, 94, 95, 96, 97, 98, 99,
772 /* 10 */ 100, 101, 4, 5, 14, 15, 16, 91, 18, 92,
773 /* 20 */ 94, 95, 96, 23, 24, 25, 26, 27, 28, 29,
774 /* 30 */ 30, 31, 32, 33, 34, 92, 36, 4, 5, 6,
775 /* 40 */ 7, 41, 42, 43, 44, 45, 46, 47, 48, 49,
776 /* 50 */ 50, 51, 52, 53, 54, 1, 2, 92, 4, 5,
777 /* 60 */ 20, 21, 14, 15, 16, 10, 12, 3, 14, 15,
778 /* 70 */ 16, 19, 88, 89, 90, 19, 92, 22, 92, 25,
779 /* 80 */ 26, 97, 98, 99, 100, 101, 2, 110, 92, 41,
780 /* 90 */ 42, 43, 44, 45, 46, 41, 42, 43, 44, 45,
781 /* 100 */ 46, 1, 116, 117, 4, 5, 99, 100, 101, 25,
782 /* 110 */ 26, 112, 12, 117, 14, 15, 16, 102, 78, 65,
783 /* 120 */ 72, 73, 66, 102, 40, 40, 72, 73, 74, 35,
784 /* 130 */ 82, 83, 78, 79, 80, 81, 82, 83, 84, 85,
785 /* 140 */ 76, 41, 42, 43, 44, 45, 46, 1, 2, 32,
786 /* 150 */ 4, 5, 4, 5, 6, 7, 71, 32, 12, 4,
787 /* 160 */ 5, 6, 7, 40, 18, 65, 20, 21, 84, 85,
788 /* 170 */ 39, 25, 26, 33, 74, 82, 83, 29, 78, 79,
789 /* 180 */ 80, 81, 82, 83, 1, 2, 0, 4, 5, 91,
790 /* 190 */ 33, 93, 94, 95, 71, 12, 10, 55, 56, 57,
791 /* 200 */ 58, 59, 60, 61, 62, 63, 64, 38, 25, 26,
792 /* 210 */ 39, 65, 114, 115, 4, 5, 6, 7, 72, 73,
793 /* 220 */ 74, 66, 6, 7, 78, 79, 80, 81, 90, 19,
794 /* 230 */ 84, 85, 1, 20, 21, 4, 5, 99, 100, 101,
795 /* 240 */ 66, 90, 69, 12, 68, 14, 15, 16, 65, 18,
796 /* 250 */ 99, 100, 101, 69, 103, 72, 73, 74, 70, 108,
797 /* 260 */ 109, 78, 79, 80, 81, 3, 1, 84, 85, 3,
798 /* 270 */ 2, 3, 4, 5, 6, 7, 66, 12, 3, 14,
799 /* 280 */ 15, 16, 17, 18, 3, 20, 21, 19, 23, 24,
800 /* 290 */ 25, 26, 71, 25, 26, 3, 65, 2, 3, 4,
801 /* 300 */ 5, 6, 7, 12, 1, 74, 71, 4, 5, 78,
802 /* 310 */ 79, 80, 81, 13, 19, 12, 4, 5, 6, 7,
803 /* 320 */ 25, 26, 82, 83, 20, 21, 58, 59, 3, 14,
804 /* 330 */ 15, 16, 3, 66, 66, 67, 68, 69, 90, 1,
805 /* 340 */ 37, 38, 4, 5, 66, 66, 3, 99, 100, 101,
806 /* 350 */ 12, 103, 3, 58, 59, 3, 41, 42, 43, 44,
807 /* 360 */ 45, 46, 67, 68, 69, 74, 3, 66, 65, 78,
808 /* 370 */ 65, 40, 86, 87, 88, 89, 65, 74, 66, 93,
809 /* 380 */ 3, 78, 79, 80, 81, 1, 22, 22, 4, 5,
810 /* 390 */ 104, 22, 106, 107, 77, 12, 12, 82, 83, 11,
811 /* 400 */ 90, 91, 71, 65, 94, 95, 96, 119, 77, 99,
812 /* 410 */ 100, 101, 74, 20, 21, 119, 78, 79, 80, 81,
813 /* 420 */ 1, 119, 119, 4, 5, 119, 119, 86, 87, 88,
814 /* 430 */ 89, 12, 90, 91, 93, 119, 94, 95, 96, 119,
815 /* 440 */ 119, 99, 100, 101, 119, 104, 119, 119, 107, 65,
816 /* 450 */ 90, 91, 119, 119, 94, 95, 96, 119, 74, 99,
817 /* 460 */ 100, 101, 78, 79, 80, 81, 1, 119, 75, 4,
818 /* 470 */ 5, 78, 90, 119, 92, 119, 90, 12, 119, 97,
819 /* 480 */ 98, 99, 100, 101, 65, 99, 100, 101, 119, 103,
820 /* 490 */ 99, 100, 101, 74, 90, 109, 92, 78, 79, 80,
821 /* 500 */ 81, 97, 98, 99, 100, 101, 119, 90, 119, 92,
822 /* 510 */ 90, 99, 100, 101, 97, 98, 99, 100, 101, 99,
823 /* 520 */ 100, 101, 119, 119, 90, 105, 92, 90, 119, 119,
824 /* 530 */ 65, 97, 98, 99, 100, 101, 99, 100, 101, 74,
825 /* 540 */ 90, 119, 92, 78, 79, 80, 81, 97, 98, 99,
826 /* 550 */ 100, 101, 90, 119, 92, 99, 100, 101, 119, 97,
827 /* 560 */ 98, 99, 100, 101, 119, 90, 119, 92, 119, 119,
828 /* 570 */ 90, 119, 97, 98, 99, 100, 101, 119, 90, 99,
829 /* 580 */ 100, 101, 119, 103, 90, 119, 92, 99, 100, 101,
830 /* 590 */ 119, 97, 98, 99, 100, 101, 90, 119, 92, 111,
831 /* 600 */ 119, 113, 119, 97, 98, 99, 100, 101, 90, 119,
832 /* 610 */ 92, 4, 5, 6, 7, 97, 98, 99, 100, 101,
833 /* 620 */ 119, 90, 119, 92, 119, 119, 19, 119, 97, 98,
834 /* 630 */ 99, 100, 101, 90, 119, 92, 119, 119, 2, 119,
835 /* 640 */ 97, 98, 99, 100, 101, 90, 119, 92, 4, 5,
836 /* 650 */ 6, 7, 97, 98, 99, 100, 101, 119, 90, 119,
837 /* 660 */ 92, 25, 26, 19, 119, 97, 98, 99, 100, 101,
838 /* 670 */ 99, 100, 101, 66, 119, 90, 119, 92, 4, 5,
839 /* 680 */ 6, 7, 97, 98, 99, 100, 101, 4, 5, 6,
840 /* 690 */ 7, 87, 88, 89, 99, 100, 101, 93, 4, 5,
841 /* 700 */ 6, 7, 19, 4, 5, 6, 7, 119, 104, 119,
842 /* 710 */ 119, 107, 119, 4, 5, 6, 7, 8, 119, 119,
843 /* 720 */ 84, 85, 4, 5, 6, 7, 8, 4, 5, 6,
844 /* 730 */ 7, 8, 4, 5, 6, 7, 119, 20, 21, 90,
845 /* 740 */ 66, 119, 90, 119, 119, 90, 119, 19, 99, 100,
846 /* 750 */ 101, 99, 100, 101, 99, 100, 101, 90, 119, 119,
847 /* 760 */ 66, 99, 100, 101, 119, 66, 99, 100, 101, 90,
848 /* 770 */ 119, 119, 90, 119, 119, 90, 119, 119, 99, 100,
849 /* 780 */ 101, 99, 100, 101, 99, 100, 101, 119, 90, 119,
850 /* 790 */ 119, 90, 75, 119, 90, 78, 119, 99, 100, 101,
851 /* 800 */ 99, 100, 101, 99, 100, 101, 90, 119, 119, 119,
852 /* 810 */ 119, 90, 119, 119, 90, 99, 100, 101, 119, 90,
853 /* 820 */ 99, 100, 101, 99, 100, 101, 90, 119, 99, 100,
854 /* 830 */ 101, 90, 99, 100, 101, 99, 100, 101, 90, 119,
855 /* 840 */ 99, 100, 101, 119, 119, 119, 119, 99, 100, 101,
856 /* 850 */ 99, 100, 101, 99, 100, 101, 99, 100, 101, 86,
857 /* 860 */ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
858 /* 870 */ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
859 /* 880 */ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
860 /* 890 */ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
861 /* 900 */ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
862 /* 910 */ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
863 /* 920 */ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
864 /* 930 */ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
865 /* 940 */ 86, 86, 86, 86, 86,
 
 
 
 
 
 
 
 
866 };
867 #define YY_SHIFT_COUNT (152)
868 #define YY_SHIFT_MIN (0)
869 #define YY_SHIFT_MAX (728)
870 static const unsigned short int yy_shift_ofst[] = {
871 /* 0 */ 265, 54, 146, 100, 100, 100, 183, 183, 183, 183,
872 /* 10 */ 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
873 /* 20 */ 183, 231, 265, 0, 231, 265, 338, 303, 384, 384,
874 /* 30 */ 48, 315, 338, 338, 338, 419, 338, 338, 465, 338,
875 /* 40 */ 338, 338, 338, 338, 338, 338, 338, 338, 338, 338,
876 /* 50 */ 338, 84, 291, 291, 291, 291, 291, 291, 291, 291,
877 /* 60 */ 291, 291, 291, 84, 268, 295, 636, 636, 636, 52,
878 /* 70 */ 859, 859, 859, 142, 142, 210, 607, 148, 155, 644,
879 /* 80 */ 312, 683, 709, 718, 723, 674, 728, 694, 699, 393,
880 /* 90 */ 33, 33, 33, 33, 717, 33, 331, 40, 55, 56,
881 /* 100 */ 85, 8, 93, 123, 216, 216, 240, 213, 304, 64,
882 /* 110 */ 186, 94, 117, 125, 131, 140, 157, 169, 171, 174,
883 /* 120 */ 173, 176, 188, 184, 262, 266, 275, 221, 281, 292,
884 /* 130 */ 325, 329, 235, 300, 267, 343, 278, 349, 279, 352,
885 /* 140 */ 301, 363, 235, 305, 311, 221, 377, 364, 365, 369,
886 /* 150 */ 383, 317, 388,
 
887 };
888 #define YY_REDUCE_COUNT (72)
889 #define YY_REDUCE_MIN (-115)
890 #define YY_REDUCE_MAX (757)
891 static const short yy_reduce_ofst[] = {
892 /* 0 */ 286, -90, -16, 310, 342, 360, 382, 404, 417, 434,
893 /* 10 */ 450, 462, 475, 494, 506, 518, 531, 543, 555, 568,
894 /* 20 */ 585, 151, 341, 98, 386, 604, 488, 420, 248, 480,
895 /* 30 */ -74, -74, 138, 437, 649, 652, 655, 667, 679, 682,
896 /* 40 */ 685, 698, 701, 704, 716, 721, 724, 729, 736, 741,
897 /* 50 */ 748, -14, 7, 391, 412, 456, 571, 595, 662, 733,
898 /* 60 */ 751, 754, 757, -4, -115, -115, -73, -57, -35, -23,
899 /* 70 */ -1, 15, 21,
900 };
901 static const YYACTIONTYPE yy_default[] = {
902 /* 0 */ 424, 418, 418, 418, 418, 418, 418, 418, 418, 418,
903 /* 10 */ 418, 418, 418, 418, 418, 418, 418, 418, 418, 418,
904 /* 20 */ 418, 418, 424, 545, 418, 424, 546, 452, 418, 418,
905 /* 30 */ 418, 418, 418, 418, 418, 418, 418, 418, 418, 418,
906 /* 40 */ 448, 418, 418, 418, 418, 418, 418, 418, 418, 418,
907 /* 50 */ 418, 418, 418, 418, 418, 418, 418, 418, 418, 418,
908 /* 60 */ 418, 418, 418, 418, 418, 418, 418, 418, 418, 430,
909 /* 70 */ 442, 475, 475, 440, 462, 418, 418, 418, 418, 418,
910 /* 80 */ 418, 418, 451, 446, 443, 418, 418, 418, 418, 418,
911 /* 90 */ 479, 478, 477, 447, 418, 537, 431, 418, 418, 418,
912 /* 100 */ 491, 558, 418, 418, 511, 510, 418, 506, 418, 499,
913 /* 110 */ 418, 460, 418, 418, 549, 418, 418, 418, 418, 418,
914 /* 120 */ 418, 418, 418, 418, 418, 418, 418, 498, 418, 418,
915 /* 130 */ 418, 418, 492, 418, 418, 418, 418, 418, 418, 418,
916 /* 140 */ 418, 418, 418, 418, 418, 418, 418, 418, 418, 418,
917 /* 150 */ 418, 562, 418,
 
918 };
919 /********** End of lemon-generated parsing tables *****************************/
920
921 /* The next table maps tokens (terminal symbols) into fallback tokens.
922 ** If a construct like the following:
@@ -964,10 +984,12 @@
964 0, /* CLOSE => nothing */
965 0, /* CHOP => nothing */
966 0, /* FROM => nothing */
967 0, /* TO => nothing */
968 0, /* THEN => nothing */
 
 
969 0, /* AT => nothing */
970 0, /* WITH => nothing */
971 0, /* SAME => nothing */
972 0, /* AS => nothing */
973 0, /* FIT => nothing */
@@ -999,11 +1021,10 @@
999 0, /* ALIGNED => nothing */
1000 0, /* BIG => nothing */
1001 0, /* SMALL => nothing */
1002 0, /* LP => nothing */
1003 0, /* RP => nothing */
1004 0, /* HEADING => nothing */
1005 0, /* WAY => nothing */
1006 0, /* BETWEEN => nothing */
1007 0, /* THE => nothing */
1008 0, /* DOT_L => nothing */
1009 0, /* START => nothing */
@@ -1138,97 +1159,99 @@
1138 /* 27 */ "CLOSE",
1139 /* 28 */ "CHOP",
1140 /* 29 */ "FROM",
1141 /* 30 */ "TO",
1142 /* 31 */ "THEN",
1143 /* 32 */ "AT",
1144 /* 33 */ "WITH",
1145 /* 34 */ "SAME",
1146 /* 35 */ "AS",
1147 /* 36 */ "FIT",
1148 /* 37 */ "UNTIL",
1149 /* 38 */ "EVEN",
1150 /* 39 */ "AND",
1151 /* 40 */ "DOT_E",
1152 /* 41 */ "HEIGHT",
1153 /* 42 */ "WIDTH",
1154 /* 43 */ "RADIUS",
1155 /* 44 */ "DIAMETER",
1156 /* 45 */ "DOTTED",
1157 /* 46 */ "DASHED",
1158 /* 47 */ "CW",
1159 /* 48 */ "CCW",
1160 /* 49 */ "LARROW",
1161 /* 50 */ "RARROW",
1162 /* 51 */ "LRARROW",
1163 /* 52 */ "INVIS",
1164 /* 53 */ "THICK",
1165 /* 54 */ "THIN",
1166 /* 55 */ "CENTER",
1167 /* 56 */ "LJUST",
1168 /* 57 */ "RJUST",
1169 /* 58 */ "ABOVE",
1170 /* 59 */ "BELOW",
1171 /* 60 */ "ITALIC",
1172 /* 61 */ "BOLD",
1173 /* 62 */ "ALIGNED",
1174 /* 63 */ "BIG",
1175 /* 64 */ "SMALL",
1176 /* 65 */ "LP",
1177 /* 66 */ "RP",
1178 /* 67 */ "HEADING",
1179 /* 68 */ "WAY",
1180 /* 69 */ "BETWEEN",
1181 /* 70 */ "THE",
1182 /* 71 */ "DOT_L",
1183 /* 72 */ "START",
1184 /* 73 */ "END",
1185 /* 74 */ "NTH",
1186 /* 75 */ "VERTEX",
1187 /* 76 */ "IN",
1188 /* 77 */ "DOT_U",
1189 /* 78 */ "LAST",
1190 /* 79 */ "NUMBER",
1191 /* 80 */ "FUNC1",
1192 /* 81 */ "FUNC2",
1193 /* 82 */ "X",
1194 /* 83 */ "Y",
1195 /* 84 */ "TOP",
1196 /* 85 */ "BOTTOM",
1197 /* 86 */ "element_list",
1198 /* 87 */ "element",
1199 /* 88 */ "unnamed_element",
1200 /* 89 */ "basetype",
1201 /* 90 */ "expr",
1202 /* 91 */ "numproperty",
1203 /* 92 */ "edge",
1204 /* 93 */ "direction",
1205 /* 94 */ "dashproperty",
1206 /* 95 */ "colorproperty",
1207 /* 96 */ "locproperty",
1208 /* 97 */ "position",
1209 /* 98 */ "place",
1210 /* 99 */ "object",
1211 /* 100 */ "objectname",
1212 /* 101 */ "nth",
1213 /* 102 */ "textposition",
1214 /* 103 */ "rvalue",
1215 /* 104 */ "lvalue",
1216 /* 105 */ "even",
1217 /* 106 */ "document",
1218 /* 107 */ "print",
1219 /* 108 */ "prlist",
1220 /* 109 */ "pritem",
1221 /* 110 */ "prsep",
1222 /* 111 */ "attribute_list",
1223 /* 112 */ "savelist",
1224 /* 113 */ "alist",
1225 /* 114 */ "attribute",
1226 /* 115 */ "boolproperty",
1227 /* 116 */ "withclause",
1228 /* 117 */ "with",
1229 /* 118 */ "between",
 
 
1230 };
1231 #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
1232
1233 #ifndef NDEBUG
1234 /* For tracing reduce actions, the names of all rules are required.
@@ -1261,129 +1284,139 @@
1261 /* 24 */ "attribute ::= numproperty expr PERCENT",
1262 /* 25 */ "attribute ::= numproperty expr",
1263 /* 26 */ "attribute ::= dashproperty expr",
1264 /* 27 */ "attribute ::= dashproperty",
1265 /* 28 */ "attribute ::= colorproperty rvalue",
1266 /* 29 */ "attribute ::= direction expr PERCENT",
1267 /* 30 */ "attribute ::= direction expr",
1268 /* 31 */ "attribute ::= direction",
1269 /* 32 */ "attribute ::= direction even position",
1270 /* 33 */ "attribute ::= CLOSE",
1271 /* 34 */ "attribute ::= CHOP",
1272 /* 35 */ "attribute ::= FROM position",
1273 /* 36 */ "attribute ::= TO position",
1274 /* 37 */ "attribute ::= THEN",
1275 /* 38 */ "attribute ::= AT position",
1276 /* 39 */ "attribute ::= SAME",
1277 /* 40 */ "attribute ::= SAME AS object",
1278 /* 41 */ "attribute ::= STRING textposition",
1279 /* 42 */ "attribute ::= FIT",
1280 /* 43 */ "with ::= DOT_E edge AT position",
1281 /* 44 */ "with ::= edge AT position",
1282 /* 45 */ "numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS",
1283 /* 46 */ "boolproperty ::= CW",
1284 /* 47 */ "boolproperty ::= CCW",
1285 /* 48 */ "boolproperty ::= LARROW",
1286 /* 49 */ "boolproperty ::= RARROW",
1287 /* 50 */ "boolproperty ::= LRARROW",
1288 /* 51 */ "boolproperty ::= INVIS",
1289 /* 52 */ "boolproperty ::= THICK",
1290 /* 53 */ "boolproperty ::= THIN",
1291 /* 54 */ "textposition ::=",
1292 /* 55 */ "textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL",
1293 /* 56 */ "position ::= expr COMMA expr",
1294 /* 57 */ "position ::= place PLUS expr COMMA expr",
1295 /* 58 */ "position ::= place MINUS expr COMMA expr",
1296 /* 59 */ "position ::= place PLUS LP expr COMMA expr RP",
1297 /* 60 */ "position ::= place MINUS LP expr COMMA expr RP",
1298 /* 61 */ "position ::= LP position COMMA position RP",
1299 /* 62 */ "position ::= LP position RP",
1300 /* 63 */ "position ::= expr between position AND position",
1301 /* 64 */ "position ::= expr ABOVE position",
1302 /* 65 */ "position ::= expr BELOW position",
1303 /* 66 */ "position ::= expr LEFT OF position",
1304 /* 67 */ "position ::= expr RIGHT OF position",
1305 /* 68 */ "position ::= expr EDGEPT OF position",
1306 /* 69 */ "position ::= expr HEADING expr FROM position",
1307 /* 70 */ "place ::= object",
1308 /* 71 */ "place ::= object DOT_E edge",
1309 /* 72 */ "place ::= object DOT_L START",
1310 /* 73 */ "place ::= object DOT_L END",
1311 /* 74 */ "place ::= START OF object",
1312 /* 75 */ "place ::= END OF object",
1313 /* 76 */ "place ::= edge OF object",
1314 /* 77 */ "place ::= NTH VERTEX OF object",
1315 /* 78 */ "object ::= nth",
1316 /* 79 */ "object ::= nth OF|IN object",
1317 /* 80 */ "objectname ::= PLACENAME",
1318 /* 81 */ "objectname ::= objectname DOT_U PLACENAME",
1319 /* 82 */ "nth ::= NTH CLASSNAME",
1320 /* 83 */ "nth ::= NTH LAST CLASSNAME",
1321 /* 84 */ "nth ::= LAST CLASSNAME",
1322 /* 85 */ "nth ::= LAST",
1323 /* 86 */ "nth ::= NTH LB RB",
1324 /* 87 */ "nth ::= NTH LAST LB RB",
1325 /* 88 */ "nth ::= LAST LB RB",
1326 /* 89 */ "expr ::= expr PLUS expr",
1327 /* 90 */ "expr ::= expr MINUS expr",
1328 /* 91 */ "expr ::= expr STAR expr",
1329 /* 92 */ "expr ::= expr SLASH expr",
1330 /* 93 */ "expr ::= MINUS expr",
1331 /* 94 */ "expr ::= PLUS expr",
1332 /* 95 */ "expr ::= LP expr RP",
1333 /* 96 */ "expr ::= NUMBER",
1334 /* 97 */ "expr ::= ID",
1335 /* 98 */ "expr ::= FUNC1 LP expr RP",
1336 /* 99 */ "expr ::= FUNC2 LP expr COMMA expr RP",
1337 /* 100 */ "expr ::= object DOT_L locproperty",
1338 /* 101 */ "expr ::= object DOT_L numproperty",
1339 /* 102 */ "expr ::= object DOT_L dashproperty",
1340 /* 103 */ "expr ::= object DOT_L colorproperty",
1341 /* 104 */ "expr ::= object DOT_E edge DOT_L X",
1342 /* 105 */ "expr ::= object DOT_E edge DOT_L Y",
1343 /* 106 */ "expr ::= LP locproperty OF object RP",
1344 /* 107 */ "expr ::= LP dashproperty OF object RP",
1345 /* 108 */ "expr ::= LP numproperty OF object RP",
1346 /* 109 */ "expr ::= LP colorproperty OF object RP",
1347 /* 110 */ "expr ::= NTH VERTEX OF object DOT_L X",
1348 /* 111 */ "expr ::= NTH VERTEX OF object DOT_L Y",
1349 /* 112 */ "lvalue ::= ID",
1350 /* 113 */ "lvalue ::= FILL",
1351 /* 114 */ "lvalue ::= COLOR",
1352 /* 115 */ "lvalue ::= THICKNESS",
1353 /* 116 */ "rvalue ::= expr",
1354 /* 117 */ "print ::= PRINT",
1355 /* 118 */ "prlist ::= pritem",
1356 /* 119 */ "prlist ::= prlist prsep pritem",
1357 /* 120 */ "direction ::= UP",
1358 /* 121 */ "direction ::= DOWN",
1359 /* 122 */ "direction ::= LEFT",
1360 /* 123 */ "direction ::= RIGHT",
1361 /* 124 */ "attribute_list ::= alist",
1362 /* 125 */ "alist ::=",
1363 /* 126 */ "alist ::= alist attribute",
1364 /* 127 */ "attribute ::= boolproperty",
1365 /* 128 */ "attribute ::= WITH withclause",
1366 /* 129 */ "even ::= UNTIL EVEN WITH",
1367 /* 130 */ "even ::= EVEN WITH",
1368 /* 131 */ "withclause ::= with",
1369 /* 132 */ "withclause ::= withclause AND with",
1370 /* 133 */ "dashproperty ::= DOTTED",
1371 /* 134 */ "dashproperty ::= DASHED",
1372 /* 135 */ "colorproperty ::= FILL",
1373 /* 136 */ "colorproperty ::= COLOR",
1374 /* 137 */ "position ::= place",
1375 /* 138 */ "between ::= WAY BETWEEN",
1376 /* 139 */ "between ::= BETWEEN",
1377 /* 140 */ "between ::= OF THE WAY BETWEEN",
1378 /* 141 */ "object ::= objectname",
1379 /* 142 */ "locproperty ::= X|Y",
1380 /* 143 */ "edge ::= EDGEPT",
1381 /* 144 */ "edge ::= TOP",
1382 /* 145 */ "edge ::= BOTTOM",
1383 /* 146 */ "edge ::= LEFT",
1384 /* 147 */ "edge ::= RIGHT",
 
 
 
 
 
 
 
 
 
 
1385 };
1386 #endif /* NDEBUG */
1387
1388
1389 #if YYSTACKDEPTH<=0
@@ -1505,24 +1538,24 @@
1505 ** Note: during a reduce, the only symbols destroyed are those
1506 ** which appear on the RHS of the rule, but which are *not* used
1507 ** inside the C code.
1508 */
1509 /********* Begin destructor definitions ***************************************/
1510 case 86: /* element_list */
1511 {
1512 #line 443 "pikchr.y"
1513 pik_elist_free(p,(yypminor->yy120));
1514 #line 1539 "pikchr.c"
1515 }
1516 break;
1517 case 87: /* element */
1518 case 88: /* unnamed_element */
1519 case 89: /* basetype */
1520 {
1521 #line 445 "pikchr.y"
1522 pik_elem_free(p,(yypminor->yy26));
1523 #line 1548 "pikchr.c"
1524 }
1525 break;
1526 /********* End destructor definitions *****************************************/
1527 default: break; /* If no destructor action specified: do nothing */
1528 }
@@ -1736,14 +1769,14 @@
1736 #endif
1737 while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
1738 /* Here code is inserted which will execute if the parser
1739 ** stack every overflows */
1740 /******** Begin %stack_overflow code ******************************************/
1741 #line 474 "pikchr.y"
1742
1743 pik_error(p, 0, "parser stack overflow");
1744 #line 1769 "pikchr.c"
1745 /******** End %stack_overflow code ********************************************/
1746 pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */
1747 pik_parserCTX_STORE
1748 }
1749
@@ -1811,158 +1844,168 @@
1811 }
1812
1813 /* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side
1814 ** of that rule */
1815 static const YYCODETYPE yyRuleInfoLhs[] = {
1816 106, /* (0) document ::= element_list */
1817 86, /* (1) element_list ::= element */
1818 86, /* (2) element_list ::= element_list EOL element */
1819 87, /* (3) element ::= */
1820 87, /* (4) element ::= direction */
1821 87, /* (5) element ::= lvalue ASSIGN rvalue */
1822 87, /* (6) element ::= PLACENAME COLON unnamed_element */
1823 87, /* (7) element ::= PLACENAME COLON position */
1824 87, /* (8) element ::= unnamed_element */
1825 87, /* (9) element ::= print prlist */
1826 103, /* (10) rvalue ::= PLACENAME */
1827 109, /* (11) pritem ::= FILL */
1828 109, /* (12) pritem ::= COLOR */
1829 109, /* (13) pritem ::= THICKNESS */
1830 109, /* (14) pritem ::= rvalue */
1831 109, /* (15) pritem ::= STRING */
1832 110, /* (16) prsep ::= COMMA */
1833 88, /* (17) unnamed_element ::= basetype attribute_list */
1834 89, /* (18) basetype ::= CLASSNAME */
1835 89, /* (19) basetype ::= STRING textposition */
1836 89, /* (20) basetype ::= LB savelist element_list RB */
1837 112, /* (21) savelist ::= */
1838 111, /* (22) attribute_list ::= expr */
1839 111, /* (23) attribute_list ::= expr PERCENT */
1840 114, /* (24) attribute ::= numproperty expr PERCENT */
1841 114, /* (25) attribute ::= numproperty expr */
1842 114, /* (26) attribute ::= dashproperty expr */
1843 114, /* (27) attribute ::= dashproperty */
1844 114, /* (28) attribute ::= colorproperty rvalue */
1845 114, /* (29) attribute ::= direction expr PERCENT */
1846 114, /* (30) attribute ::= direction expr */
1847 114, /* (31) attribute ::= direction */
1848 114, /* (32) attribute ::= direction even position */
1849 114, /* (33) attribute ::= CLOSE */
1850 114, /* (34) attribute ::= CHOP */
1851 114, /* (35) attribute ::= FROM position */
1852 114, /* (36) attribute ::= TO position */
1853 114, /* (37) attribute ::= THEN */
1854 114, /* (38) attribute ::= AT position */
1855 114, /* (39) attribute ::= SAME */
1856 114, /* (40) attribute ::= SAME AS object */
1857 114, /* (41) attribute ::= STRING textposition */
1858 114, /* (42) attribute ::= FIT */
1859 117, /* (43) with ::= DOT_E edge AT position */
1860 117, /* (44) with ::= edge AT position */
1861 91, /* (45) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
1862 115, /* (46) boolproperty ::= CW */
1863 115, /* (47) boolproperty ::= CCW */
1864 115, /* (48) boolproperty ::= LARROW */
1865 115, /* (49) boolproperty ::= RARROW */
1866 115, /* (50) boolproperty ::= LRARROW */
1867 115, /* (51) boolproperty ::= INVIS */
1868 115, /* (52) boolproperty ::= THICK */
1869 115, /* (53) boolproperty ::= THIN */
1870 102, /* (54) textposition ::= */
1871 102, /* (55) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
1872 97, /* (56) position ::= expr COMMA expr */
1873 97, /* (57) position ::= place PLUS expr COMMA expr */
1874 97, /* (58) position ::= place MINUS expr COMMA expr */
1875 97, /* (59) position ::= place PLUS LP expr COMMA expr RP */
1876 97, /* (60) position ::= place MINUS LP expr COMMA expr RP */
1877 97, /* (61) position ::= LP position COMMA position RP */
1878 97, /* (62) position ::= LP position RP */
1879 97, /* (63) position ::= expr between position AND position */
1880 97, /* (64) position ::= expr ABOVE position */
1881 97, /* (65) position ::= expr BELOW position */
1882 97, /* (66) position ::= expr LEFT OF position */
1883 97, /* (67) position ::= expr RIGHT OF position */
1884 97, /* (68) position ::= expr EDGEPT OF position */
1885 97, /* (69) position ::= expr HEADING expr FROM position */
1886 98, /* (70) place ::= object */
1887 98, /* (71) place ::= object DOT_E edge */
1888 98, /* (72) place ::= object DOT_L START */
1889 98, /* (73) place ::= object DOT_L END */
1890 98, /* (74) place ::= START OF object */
1891 98, /* (75) place ::= END OF object */
1892 98, /* (76) place ::= edge OF object */
1893 98, /* (77) place ::= NTH VERTEX OF object */
1894 99, /* (78) object ::= nth */
1895 99, /* (79) object ::= nth OF|IN object */
1896 100, /* (80) objectname ::= PLACENAME */
1897 100, /* (81) objectname ::= objectname DOT_U PLACENAME */
1898 101, /* (82) nth ::= NTH CLASSNAME */
1899 101, /* (83) nth ::= NTH LAST CLASSNAME */
1900 101, /* (84) nth ::= LAST CLASSNAME */
1901 101, /* (85) nth ::= LAST */
1902 101, /* (86) nth ::= NTH LB RB */
1903 101, /* (87) nth ::= NTH LAST LB RB */
1904 101, /* (88) nth ::= LAST LB RB */
1905 90, /* (89) expr ::= expr PLUS expr */
1906 90, /* (90) expr ::= expr MINUS expr */
1907 90, /* (91) expr ::= expr STAR expr */
1908 90, /* (92) expr ::= expr SLASH expr */
1909 90, /* (93) expr ::= MINUS expr */
1910 90, /* (94) expr ::= PLUS expr */
1911 90, /* (95) expr ::= LP expr RP */
1912 90, /* (96) expr ::= NUMBER */
1913 90, /* (97) expr ::= ID */
1914 90, /* (98) expr ::= FUNC1 LP expr RP */
1915 90, /* (99) expr ::= FUNC2 LP expr COMMA expr RP */
1916 90, /* (100) expr ::= object DOT_L locproperty */
1917 90, /* (101) expr ::= object DOT_L numproperty */
1918 90, /* (102) expr ::= object DOT_L dashproperty */
1919 90, /* (103) expr ::= object DOT_L colorproperty */
1920 90, /* (104) expr ::= object DOT_E edge DOT_L X */
1921 90, /* (105) expr ::= object DOT_E edge DOT_L Y */
1922 90, /* (106) expr ::= LP locproperty OF object RP */
1923 90, /* (107) expr ::= LP dashproperty OF object RP */
1924 90, /* (108) expr ::= LP numproperty OF object RP */
1925 90, /* (109) expr ::= LP colorproperty OF object RP */
1926 90, /* (110) expr ::= NTH VERTEX OF object DOT_L X */
1927 90, /* (111) expr ::= NTH VERTEX OF object DOT_L Y */
1928 104, /* (112) lvalue ::= ID */
1929 104, /* (113) lvalue ::= FILL */
1930 104, /* (114) lvalue ::= COLOR */
1931 104, /* (115) lvalue ::= THICKNESS */
1932 103, /* (116) rvalue ::= expr */
1933 107, /* (117) print ::= PRINT */
1934 108, /* (118) prlist ::= pritem */
1935 108, /* (119) prlist ::= prlist prsep pritem */
1936 93, /* (120) direction ::= UP */
1937 93, /* (121) direction ::= DOWN */
1938 93, /* (122) direction ::= LEFT */
1939 93, /* (123) direction ::= RIGHT */
1940 111, /* (124) attribute_list ::= alist */
1941 113, /* (125) alist ::= */
1942 113, /* (126) alist ::= alist attribute */
1943 114, /* (127) attribute ::= boolproperty */
1944 114, /* (128) attribute ::= WITH withclause */
1945 105, /* (129) even ::= UNTIL EVEN WITH */
1946 105, /* (130) even ::= EVEN WITH */
1947 116, /* (131) withclause ::= with */
1948 116, /* (132) withclause ::= withclause AND with */
1949 94, /* (133) dashproperty ::= DOTTED */
1950 94, /* (134) dashproperty ::= DASHED */
1951 95, /* (135) colorproperty ::= FILL */
1952 95, /* (136) colorproperty ::= COLOR */
1953 97, /* (137) position ::= place */
1954 118, /* (138) between ::= WAY BETWEEN */
1955 118, /* (139) between ::= BETWEEN */
1956 118, /* (140) between ::= OF THE WAY BETWEEN */
1957 99, /* (141) object ::= objectname */
1958 96, /* (142) locproperty ::= X|Y */
1959 92, /* (143) edge ::= EDGEPT */
1960 92, /* (144) edge ::= TOP */
1961 92, /* (145) edge ::= BOTTOM */
1962 92, /* (146) edge ::= LEFT */
1963 92, /* (147) edge ::= RIGHT */
 
 
 
 
 
 
 
 
 
 
1964 };
1965
1966 /* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
1967 ** of symbols on the right-hand side of that rule. */
1968 static const signed char yyRuleInfoNRhs[] = {
@@ -1993,129 +2036,139 @@
1993 -3, /* (24) attribute ::= numproperty expr PERCENT */
1994 -2, /* (25) attribute ::= numproperty expr */
1995 -2, /* (26) attribute ::= dashproperty expr */
1996 -1, /* (27) attribute ::= dashproperty */
1997 -2, /* (28) attribute ::= colorproperty rvalue */
1998 -3, /* (29) attribute ::= direction expr PERCENT */
1999 -2, /* (30) attribute ::= direction expr */
2000 -1, /* (31) attribute ::= direction */
2001 -3, /* (32) attribute ::= direction even position */
2002 -1, /* (33) attribute ::= CLOSE */
2003 -1, /* (34) attribute ::= CHOP */
2004 -2, /* (35) attribute ::= FROM position */
2005 -2, /* (36) attribute ::= TO position */
2006 -1, /* (37) attribute ::= THEN */
2007 -2, /* (38) attribute ::= AT position */
2008 -1, /* (39) attribute ::= SAME */
2009 -3, /* (40) attribute ::= SAME AS object */
2010 -2, /* (41) attribute ::= STRING textposition */
2011 -1, /* (42) attribute ::= FIT */
2012 -4, /* (43) with ::= DOT_E edge AT position */
2013 -3, /* (44) with ::= edge AT position */
2014 -1, /* (45) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2015 -1, /* (46) boolproperty ::= CW */
2016 -1, /* (47) boolproperty ::= CCW */
2017 -1, /* (48) boolproperty ::= LARROW */
2018 -1, /* (49) boolproperty ::= RARROW */
2019 -1, /* (50) boolproperty ::= LRARROW */
2020 -1, /* (51) boolproperty ::= INVIS */
2021 -1, /* (52) boolproperty ::= THICK */
2022 -1, /* (53) boolproperty ::= THIN */
2023 0, /* (54) textposition ::= */
2024 -2, /* (55) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2025 -3, /* (56) position ::= expr COMMA expr */
2026 -5, /* (57) position ::= place PLUS expr COMMA expr */
2027 -5, /* (58) position ::= place MINUS expr COMMA expr */
2028 -7, /* (59) position ::= place PLUS LP expr COMMA expr RP */
2029 -7, /* (60) position ::= place MINUS LP expr COMMA expr RP */
2030 -5, /* (61) position ::= LP position COMMA position RP */
2031 -3, /* (62) position ::= LP position RP */
2032 -5, /* (63) position ::= expr between position AND position */
2033 -3, /* (64) position ::= expr ABOVE position */
2034 -3, /* (65) position ::= expr BELOW position */
2035 -4, /* (66) position ::= expr LEFT OF position */
2036 -4, /* (67) position ::= expr RIGHT OF position */
2037 -4, /* (68) position ::= expr EDGEPT OF position */
2038 -5, /* (69) position ::= expr HEADING expr FROM position */
2039 -1, /* (70) place ::= object */
2040 -3, /* (71) place ::= object DOT_E edge */
2041 -3, /* (72) place ::= object DOT_L START */
2042 -3, /* (73) place ::= object DOT_L END */
2043 -3, /* (74) place ::= START OF object */
2044 -3, /* (75) place ::= END OF object */
2045 -3, /* (76) place ::= edge OF object */
2046 -4, /* (77) place ::= NTH VERTEX OF object */
2047 -1, /* (78) object ::= nth */
2048 -3, /* (79) object ::= nth OF|IN object */
2049 -1, /* (80) objectname ::= PLACENAME */
2050 -3, /* (81) objectname ::= objectname DOT_U PLACENAME */
2051 -2, /* (82) nth ::= NTH CLASSNAME */
2052 -3, /* (83) nth ::= NTH LAST CLASSNAME */
2053 -2, /* (84) nth ::= LAST CLASSNAME */
2054 -1, /* (85) nth ::= LAST */
2055 -3, /* (86) nth ::= NTH LB RB */
2056 -4, /* (87) nth ::= NTH LAST LB RB */
2057 -3, /* (88) nth ::= LAST LB RB */
2058 -3, /* (89) expr ::= expr PLUS expr */
2059 -3, /* (90) expr ::= expr MINUS expr */
2060 -3, /* (91) expr ::= expr STAR expr */
2061 -3, /* (92) expr ::= expr SLASH expr */
2062 -2, /* (93) expr ::= MINUS expr */
2063 -2, /* (94) expr ::= PLUS expr */
2064 -3, /* (95) expr ::= LP expr RP */
2065 -1, /* (96) expr ::= NUMBER */
2066 -1, /* (97) expr ::= ID */
2067 -4, /* (98) expr ::= FUNC1 LP expr RP */
2068 -6, /* (99) expr ::= FUNC2 LP expr COMMA expr RP */
2069 -3, /* (100) expr ::= object DOT_L locproperty */
2070 -3, /* (101) expr ::= object DOT_L numproperty */
2071 -3, /* (102) expr ::= object DOT_L dashproperty */
2072 -3, /* (103) expr ::= object DOT_L colorproperty */
2073 -5, /* (104) expr ::= object DOT_E edge DOT_L X */
2074 -5, /* (105) expr ::= object DOT_E edge DOT_L Y */
2075 -5, /* (106) expr ::= LP locproperty OF object RP */
2076 -5, /* (107) expr ::= LP dashproperty OF object RP */
2077 -5, /* (108) expr ::= LP numproperty OF object RP */
2078 -5, /* (109) expr ::= LP colorproperty OF object RP */
2079 -6, /* (110) expr ::= NTH VERTEX OF object DOT_L X */
2080 -6, /* (111) expr ::= NTH VERTEX OF object DOT_L Y */
2081 -1, /* (112) lvalue ::= ID */
2082 -1, /* (113) lvalue ::= FILL */
2083 -1, /* (114) lvalue ::= COLOR */
2084 -1, /* (115) lvalue ::= THICKNESS */
2085 -1, /* (116) rvalue ::= expr */
2086 -1, /* (117) print ::= PRINT */
2087 -1, /* (118) prlist ::= pritem */
2088 -3, /* (119) prlist ::= prlist prsep pritem */
2089 -1, /* (120) direction ::= UP */
2090 -1, /* (121) direction ::= DOWN */
2091 -1, /* (122) direction ::= LEFT */
2092 -1, /* (123) direction ::= RIGHT */
2093 -1, /* (124) attribute_list ::= alist */
2094 0, /* (125) alist ::= */
2095 -2, /* (126) alist ::= alist attribute */
2096 -1, /* (127) attribute ::= boolproperty */
2097 -2, /* (128) attribute ::= WITH withclause */
2098 -3, /* (129) even ::= UNTIL EVEN WITH */
2099 -2, /* (130) even ::= EVEN WITH */
2100 -1, /* (131) withclause ::= with */
2101 -3, /* (132) withclause ::= withclause AND with */
2102 -1, /* (133) dashproperty ::= DOTTED */
2103 -1, /* (134) dashproperty ::= DASHED */
2104 -1, /* (135) colorproperty ::= FILL */
2105 -1, /* (136) colorproperty ::= COLOR */
2106 -1, /* (137) position ::= place */
2107 -2, /* (138) between ::= WAY BETWEEN */
2108 -1, /* (139) between ::= BETWEEN */
2109 -4, /* (140) between ::= OF THE WAY BETWEEN */
2110 -1, /* (141) object ::= objectname */
2111 -1, /* (142) locproperty ::= X|Y */
2112 -1, /* (143) edge ::= EDGEPT */
2113 -1, /* (144) edge ::= TOP */
2114 -1, /* (145) edge ::= BOTTOM */
2115 -1, /* (146) edge ::= LEFT */
2116 -1, /* (147) edge ::= RIGHT */
 
 
 
 
 
 
 
 
 
 
2117 };
2118
2119 static void yy_accept(yyParser*); /* Forward Declaration */
2120
2121 /*
@@ -2202,605 +2255,631 @@
2202 ** break;
2203 */
2204 /********** Begin reduce actions **********************************************/
2205 YYMINORTYPE yylhsminor;
2206 case 0: /* document ::= element_list */
2207 #line 478 "pikchr.y"
2208 {pik_render(p,yymsp[0].minor.yy120);}
2209 #line 2234 "pikchr.c"
2210 break;
2211 case 1: /* element_list ::= element */
2212 #line 481 "pikchr.y"
2213 { yylhsminor.yy120 = pik_elist_append(p,0,yymsp[0].minor.yy26); }
2214 #line 2239 "pikchr.c"
2215 yymsp[0].minor.yy120 = yylhsminor.yy120;
2216 break;
2217 case 2: /* element_list ::= element_list EOL element */
2218 #line 483 "pikchr.y"
2219 { yylhsminor.yy120 = pik_elist_append(p,yymsp[-2].minor.yy120,yymsp[0].minor.yy26); }
2220 #line 2245 "pikchr.c"
2221 yymsp[-2].minor.yy120 = yylhsminor.yy120;
2222 break;
2223 case 3: /* element ::= */
2224 #line 486 "pikchr.y"
2225 { yymsp[1].minor.yy26 = 0; }
2226 #line 2251 "pikchr.c"
2227 break;
2228 case 4: /* element ::= direction */
2229 #line 487 "pikchr.y"
2230 { pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy26=0; }
2231 #line 2256 "pikchr.c"
2232 yymsp[0].minor.yy26 = yylhsminor.yy26;
2233 break;
2234 case 5: /* element ::= lvalue ASSIGN rvalue */
2235 #line 488 "pikchr.y"
2236 {pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy191,&yymsp[-1].minor.yy0); yylhsminor.yy26=0;}
2237 #line 2262 "pikchr.c"
2238 yymsp[-2].minor.yy26 = yylhsminor.yy26;
2239 break;
2240 case 6: /* element ::= PLACENAME COLON unnamed_element */
2241 #line 490 "pikchr.y"
2242 { yylhsminor.yy26 = yymsp[0].minor.yy26; pik_elem_setname(p,yymsp[0].minor.yy26,&yymsp[-2].minor.yy0); }
2243 #line 2268 "pikchr.c"
2244 yymsp[-2].minor.yy26 = yylhsminor.yy26;
2245 break;
2246 case 7: /* element ::= PLACENAME COLON position */
2247 #line 492 "pikchr.y"
2248 { yylhsminor.yy26 = pik_elem_new(p,0,0,0);
2249 if(yylhsminor.yy26){ yylhsminor.yy26->ptAt = yymsp[0].minor.yy131; pik_elem_setname(p,yylhsminor.yy26,&yymsp[-2].minor.yy0); }}
2250 #line 2275 "pikchr.c"
2251 yymsp[-2].minor.yy26 = yylhsminor.yy26;
2252 break;
2253 case 8: /* element ::= unnamed_element */
2254 #line 494 "pikchr.y"
2255 {yylhsminor.yy26 = yymsp[0].minor.yy26;}
2256 #line 2281 "pikchr.c"
2257 yymsp[0].minor.yy26 = yylhsminor.yy26;
2258 break;
2259 case 9: /* element ::= print prlist */
2260 #line 495 "pikchr.y"
2261 {pik_append(p,"<br>\n",5); yymsp[-1].minor.yy26=0;}
2262 #line 2287 "pikchr.c"
2263 break;
2264 case 10: /* rvalue ::= PLACENAME */
2265 #line 506 "pikchr.y"
2266 {yylhsminor.yy191 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2267 #line 2292 "pikchr.c"
2268 yymsp[0].minor.yy191 = yylhsminor.yy191;
2269 break;
2270 case 11: /* pritem ::= FILL */
2271 case 12: /* pritem ::= COLOR */ yytestcase(yyruleno==12);
2272 case 13: /* pritem ::= THICKNESS */ yytestcase(yyruleno==13);
2273 #line 511 "pikchr.y"
2274 {pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));}
2275 #line 2300 "pikchr.c"
2276 break;
2277 case 14: /* pritem ::= rvalue */
2278 #line 514 "pikchr.y"
2279 {pik_append_num(p,"",yymsp[0].minor.yy191);}
2280 #line 2305 "pikchr.c"
2281 break;
2282 case 15: /* pritem ::= STRING */
2283 #line 515 "pikchr.y"
2284 {pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2285 #line 2310 "pikchr.c"
2286 break;
2287 case 16: /* prsep ::= COMMA */
2288 #line 516 "pikchr.y"
2289 {pik_append(p, " ", 1);}
2290 #line 2315 "pikchr.c"
2291 break;
2292 case 17: /* unnamed_element ::= basetype attribute_list */
2293 #line 519 "pikchr.y"
2294 {yylhsminor.yy26 = yymsp[-1].minor.yy26; pik_after_adding_attributes(p,yylhsminor.yy26);}
2295 #line 2320 "pikchr.c"
2296 yymsp[-1].minor.yy26 = yylhsminor.yy26;
2297 break;
2298 case 18: /* basetype ::= CLASSNAME */
2299 #line 521 "pikchr.y"
2300 {yylhsminor.yy26 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2301 #line 2326 "pikchr.c"
2302 yymsp[0].minor.yy26 = yylhsminor.yy26;
2303 break;
2304 case 19: /* basetype ::= STRING textposition */
2305 #line 523 "pikchr.y"
2306 {yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy60; yylhsminor.yy26 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2307 #line 2332 "pikchr.c"
2308 yymsp[-1].minor.yy26 = yylhsminor.yy26;
2309 break;
2310 case 20: /* basetype ::= LB savelist element_list RB */
2311 #line 525 "pikchr.y"
2312 { p->list = yymsp[-2].minor.yy120; yymsp[-3].minor.yy26 = pik_elem_new(p,0,0,yymsp[-1].minor.yy120); if(yymsp[-3].minor.yy26) yymsp[-3].minor.yy26->errTok = yymsp[0].minor.yy0; }
2313 #line 2338 "pikchr.c"
2314 break;
2315 case 21: /* savelist ::= */
2316 #line 530 "pikchr.y"
2317 {yymsp[1].minor.yy120 = p->list; p->list = 0;}
2318 #line 2343 "pikchr.c"
2319 break;
2320 case 22: /* attribute_list ::= expr */
2321 #line 537 "pikchr.y"
2322 { pik_add_direction(p,0,&yymsp[0].minor.yy191,0);}
2323 #line 2348 "pikchr.c"
2324 break;
2325 case 23: /* attribute_list ::= expr PERCENT */
2326 #line 538 "pikchr.y"
2327 { pik_add_direction(p,0,&yymsp[-1].minor.yy191,1);}
2328 #line 2353 "pikchr.c"
2329 break;
2330 case 24: /* attribute ::= numproperty expr PERCENT */
2331 #line 543 "pikchr.y"
2332 { pik_set_numprop(p,&yymsp[-2].minor.yy0,0.0,yymsp[-1].minor.yy191/100.0); }
2333 #line 2358 "pikchr.c"
2334 break;
2335 case 25: /* attribute ::= numproperty expr */
2336 case 28: /* attribute ::= colorproperty rvalue */ yytestcase(yyruleno==28);
2337 #line 544 "pikchr.y"
2338 { pik_set_numprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy191,0.0); }
2339 #line 2364 "pikchr.c"
2340 break;
2341 case 26: /* attribute ::= dashproperty expr */
2342 #line 545 "pikchr.y"
2343 { pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy191); }
2344 #line 2369 "pikchr.c"
2345 break;
2346 case 27: /* attribute ::= dashproperty */
2347 #line 546 "pikchr.y"
2348 { pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2349 #line 2374 "pikchr.c"
2350 break;
2351 case 29: /* attribute ::= direction expr PERCENT */
2352 #line 549 "pikchr.y"
2353 { pik_add_direction(p,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy191,1);}
2354 #line 2379 "pikchr.c"
2355 break;
2356 case 30: /* attribute ::= direction expr */
2357 #line 550 "pikchr.y"
2358 { pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy191,0);}
2359 #line 2384 "pikchr.c"
2360 break;
2361 case 31: /* attribute ::= direction */
2362 #line 551 "pikchr.y"
 
 
 
 
 
2363 { pik_add_direction(p,&yymsp[0].minor.yy0,0,0); }
2364 #line 2389 "pikchr.c"
2365 break;
2366 case 32: /* attribute ::= direction even position */
2367 #line 552 "pikchr.y"
2368 {pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy131);}
2369 #line 2394 "pikchr.c"
2370 break;
2371 case 33: /* attribute ::= CLOSE */
2372 #line 553 "pikchr.y"
2373 { pik_close_path(p,&yymsp[0].minor.yy0); }
2374 #line 2399 "pikchr.c"
2375 break;
2376 case 34: /* attribute ::= CHOP */
2377 #line 554 "pikchr.y"
2378 { p->cur->bChop = 1; }
2379 #line 2404 "pikchr.c"
2380 break;
2381 case 35: /* attribute ::= FROM position */
2382 #line 555 "pikchr.y"
2383 { pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy131); }
2384 #line 2409 "pikchr.c"
2385 break;
2386 case 36: /* attribute ::= TO position */
2387 #line 556 "pikchr.y"
2388 { pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy131); }
2389 #line 2414 "pikchr.c"
2390 break;
2391 case 37: /* attribute ::= THEN */
2392 #line 557 "pikchr.y"
2393 { pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2394 #line 2419 "pikchr.c"
2395 break;
2396 case 38: /* attribute ::= AT position */
2397 #line 559 "pikchr.y"
2398 { pik_set_at(p,0,&yymsp[0].minor.yy131,&yymsp[-1].minor.yy0); }
2399 #line 2424 "pikchr.c"
2400 break;
2401 case 39: /* attribute ::= SAME */
 
 
2402 #line 561 "pikchr.y"
2403 {pik_same(p,0,&yymsp[0].minor.yy0);}
2404 #line 2429 "pikchr.c"
2405 break;
2406 case 40: /* attribute ::= SAME AS object */
 
2407 #line 562 "pikchr.y"
2408 {pik_same(p,yymsp[0].minor.yy26,&yymsp[-2].minor.yy0);}
2409 #line 2434 "pikchr.c"
2410 break;
2411 case 41: /* attribute ::= STRING textposition */
 
2412 #line 563 "pikchr.y"
2413 {pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy60);}
2414 #line 2439 "pikchr.c"
2415 break;
2416 case 42: /* attribute ::= FIT */
2417 #line 564 "pikchr.y"
2418 {pik_size_to_fit(p,&yymsp[0].minor.yy0); }
2419 #line 2444 "pikchr.c"
2420 break;
2421 case 43: /* with ::= DOT_E edge AT position */
2422 case 44: /* with ::= edge AT position */ yytestcase(yyruleno==44);
2423 #line 571 "pikchr.y"
2424 { pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy131,&yymsp[-1].minor.yy0); }
2425 #line 2450 "pikchr.c"
2426 break;
2427 case 45: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2428 #line 575 "pikchr.y"
2429 {yylhsminor.yy0 = yymsp[0].minor.yy0;}
2430 #line 2455 "pikchr.c"
2431 yymsp[0].minor.yy0 = yylhsminor.yy0;
2432 break;
2433 case 46: /* boolproperty ::= CW */
2434 #line 586 "pikchr.y"
2435 {p->cur->cw = 1;}
2436 #line 2461 "pikchr.c"
2437 break;
2438 case 47: /* boolproperty ::= CCW */
2439 #line 587 "pikchr.y"
2440 {p->cur->cw = 0;}
2441 #line 2466 "pikchr.c"
2442 break;
2443 case 48: /* boolproperty ::= LARROW */
2444 #line 588 "pikchr.y"
2445 {p->cur->larrow=1; p->cur->rarrow=0; }
2446 #line 2471 "pikchr.c"
2447 break;
2448 case 49: /* boolproperty ::= RARROW */
2449 #line 589 "pikchr.y"
2450 {p->cur->larrow=0; p->cur->rarrow=1; }
2451 #line 2476 "pikchr.c"
2452 break;
2453 case 50: /* boolproperty ::= LRARROW */
2454 #line 590 "pikchr.y"
2455 {p->cur->larrow=1; p->cur->rarrow=1; }
2456 #line 2481 "pikchr.c"
2457 break;
2458 case 51: /* boolproperty ::= INVIS */
2459 #line 591 "pikchr.y"
2460 {p->cur->sw = 0.0;}
2461 #line 2486 "pikchr.c"
2462 break;
2463 case 52: /* boolproperty ::= THICK */
2464 #line 592 "pikchr.y"
2465 {p->cur->sw *= 1.5;}
2466 #line 2491 "pikchr.c"
2467 break;
2468 case 53: /* boolproperty ::= THIN */
2469 #line 593 "pikchr.y"
2470 {p->cur->sw *= 0.67;}
2471 #line 2496 "pikchr.c"
2472 break;
2473 case 54: /* textposition ::= */
2474 #line 595 "pikchr.y"
2475 {yymsp[1].minor.yy60 = 0;}
2476 #line 2501 "pikchr.c"
2477 break;
2478 case 55: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2479 #line 598 "pikchr.y"
2480 {yylhsminor.yy60 = pik_text_position(p,yymsp[-1].minor.yy60,&yymsp[0].minor.yy0);}
2481 #line 2506 "pikchr.c"
2482 yymsp[-1].minor.yy60 = yylhsminor.yy60;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2483 break;
2484 case 56: /* position ::= expr COMMA expr */
2485 #line 601 "pikchr.y"
2486 {yylhsminor.yy131.x=yymsp[-2].minor.yy191; yylhsminor.yy131.y=yymsp[0].minor.yy191;}
2487 #line 2512 "pikchr.c"
2488 yymsp[-2].minor.yy131 = yylhsminor.yy131;
 
 
 
 
2489 break;
2490 case 57: /* position ::= place PLUS expr COMMA expr */
2491 #line 603 "pikchr.y"
2492 {yylhsminor.yy131.x=yymsp[-4].minor.yy131.x+yymsp[-2].minor.yy191; yylhsminor.yy131.y=yymsp[-4].minor.yy131.y+yymsp[0].minor.yy191;}
2493 #line 2518 "pikchr.c"
2494 yymsp[-4].minor.yy131 = yylhsminor.yy131;
2495 break;
2496 case 58: /* position ::= place MINUS expr COMMA expr */
2497 #line 604 "pikchr.y"
2498 {yylhsminor.yy131.x=yymsp[-4].minor.yy131.x-yymsp[-2].minor.yy191; yylhsminor.yy131.y=yymsp[-4].minor.yy131.y-yymsp[0].minor.yy191;}
2499 #line 2524 "pikchr.c"
2500 yymsp[-4].minor.yy131 = yylhsminor.yy131;
2501 break;
2502 case 59: /* position ::= place PLUS LP expr COMMA expr RP */
2503 #line 606 "pikchr.y"
2504 {yylhsminor.yy131.x=yymsp[-6].minor.yy131.x+yymsp[-3].minor.yy191; yylhsminor.yy131.y=yymsp[-6].minor.yy131.y+yymsp[-1].minor.yy191;}
2505 #line 2530 "pikchr.c"
2506 yymsp[-6].minor.yy131 = yylhsminor.yy131;
2507 break;
2508 case 60: /* position ::= place MINUS LP expr COMMA expr RP */
2509 #line 608 "pikchr.y"
2510 {yylhsminor.yy131.x=yymsp[-6].minor.yy131.x-yymsp[-3].minor.yy191; yylhsminor.yy131.y=yymsp[-6].minor.yy131.y-yymsp[-1].minor.yy191;}
2511 #line 2536 "pikchr.c"
2512 yymsp[-6].minor.yy131 = yylhsminor.yy131;
2513 break;
2514 case 61: /* position ::= LP position COMMA position RP */
2515 #line 609 "pikchr.y"
2516 {yymsp[-4].minor.yy131.x=yymsp[-3].minor.yy131.x; yymsp[-4].minor.yy131.y=yymsp[-1].minor.yy131.y;}
2517 #line 2542 "pikchr.c"
2518 break;
2519 case 62: /* position ::= LP position RP */
2520 #line 610 "pikchr.y"
2521 {yymsp[-2].minor.yy131=yymsp[-1].minor.yy131;}
2522 #line 2547 "pikchr.c"
2523 break;
2524 case 63: /* position ::= expr between position AND position */
2525 #line 612 "pikchr.y"
2526 {yylhsminor.yy131 = pik_position_between(p,yymsp[-4].minor.yy191,yymsp[-2].minor.yy131,yymsp[0].minor.yy131);}
2527 #line 2552 "pikchr.c"
2528 yymsp[-4].minor.yy131 = yylhsminor.yy131;
2529 break;
2530 case 64: /* position ::= expr ABOVE position */
2531 #line 613 "pikchr.y"
2532 {yylhsminor.yy131=yymsp[0].minor.yy131; yylhsminor.yy131.y += yymsp[-2].minor.yy191;}
2533 #line 2558 "pikchr.c"
2534 yymsp[-2].minor.yy131 = yylhsminor.yy131;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2535 break;
2536 case 65: /* position ::= expr BELOW position */
2537 #line 614 "pikchr.y"
2538 {yylhsminor.yy131=yymsp[0].minor.yy131; yylhsminor.yy131.y -= yymsp[-2].minor.yy191;}
2539 #line 2564 "pikchr.c"
2540 yymsp[-2].minor.yy131 = yylhsminor.yy131;
2541 break;
2542 case 66: /* position ::= expr LEFT OF position */
2543 #line 615 "pikchr.y"
2544 {yylhsminor.yy131=yymsp[0].minor.yy131; yylhsminor.yy131.x -= yymsp[-3].minor.yy191;}
2545 #line 2570 "pikchr.c"
2546 yymsp[-3].minor.yy131 = yylhsminor.yy131;
2547 break;
2548 case 67: /* position ::= expr RIGHT OF position */
2549 #line 616 "pikchr.y"
2550 {yylhsminor.yy131=yymsp[0].minor.yy131; yylhsminor.yy131.x += yymsp[-3].minor.yy191;}
2551 #line 2576 "pikchr.c"
2552 yymsp[-3].minor.yy131 = yylhsminor.yy131;
2553 break;
2554 case 68: /* position ::= expr EDGEPT OF position */
2555 #line 618 "pikchr.y"
2556 {yylhsminor.yy131 = pik_position_at_hdg(p,yymsp[-3].minor.yy191,&yymsp[-2].minor.yy0,yymsp[0].minor.yy131);}
2557 #line 2582 "pikchr.c"
2558 yymsp[-3].minor.yy131 = yylhsminor.yy131;
2559 break;
2560 case 69: /* position ::= expr HEADING expr FROM position */
2561 #line 620 "pikchr.y"
2562 {yylhsminor.yy131 = pik_position_at_angle(p,yymsp[-4].minor.yy191,yymsp[-2].minor.yy191,yymsp[0].minor.yy131);}
2563 #line 2588 "pikchr.c"
2564 yymsp[-4].minor.yy131 = yylhsminor.yy131;
2565 break;
2566 case 70: /* place ::= object */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2567 #line 626 "pikchr.y"
2568 {yylhsminor.yy131 = pik_place_of_elem(p,yymsp[0].minor.yy26,0);}
2569 #line 2594 "pikchr.c"
2570 yymsp[0].minor.yy131 = yylhsminor.yy131;
2571 break;
2572 case 71: /* place ::= object DOT_E edge */
2573 case 72: /* place ::= object DOT_L START */ yytestcase(yyruleno==72);
2574 case 73: /* place ::= object DOT_L END */ yytestcase(yyruleno==73);
2575 #line 627 "pikchr.y"
2576 {yylhsminor.yy131 = pik_place_of_elem(p,yymsp[-2].minor.yy26,&yymsp[0].minor.yy0);}
2577 #line 2602 "pikchr.c"
2578 yymsp[-2].minor.yy131 = yylhsminor.yy131;
2579 break;
2580 case 74: /* place ::= START OF object */
2581 case 75: /* place ::= END OF object */ yytestcase(yyruleno==75);
2582 case 76: /* place ::= edge OF object */ yytestcase(yyruleno==76);
2583 #line 630 "pikchr.y"
2584 {yylhsminor.yy131 = pik_place_of_elem(p,yymsp[0].minor.yy26,&yymsp[-2].minor.yy0);}
2585 #line 2610 "pikchr.c"
2586 yymsp[-2].minor.yy131 = yylhsminor.yy131;
2587 break;
2588 case 77: /* place ::= NTH VERTEX OF object */
 
 
 
 
 
 
 
 
 
 
2589 #line 633 "pikchr.y"
2590 {yylhsminor.yy131 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy26);}
2591 #line 2616 "pikchr.c"
2592 yymsp[-3].minor.yy131 = yylhsminor.yy131;
2593 break;
2594 case 78: /* object ::= nth */
2595 #line 636 "pikchr.y"
2596 {yylhsminor.yy26 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2597 #line 2622 "pikchr.c"
2598 yymsp[0].minor.yy26 = yylhsminor.yy26;
2599 break;
2600 case 79: /* object ::= nth OF|IN object */
2601 #line 637 "pikchr.y"
2602 {yylhsminor.yy26 = pik_find_nth(p,yymsp[0].minor.yy26,&yymsp[-2].minor.yy0);}
2603 #line 2628 "pikchr.c"
2604 yymsp[-2].minor.yy26 = yylhsminor.yy26;
2605 break;
2606 case 80: /* objectname ::= PLACENAME */
2607 #line 639 "pikchr.y"
2608 {yylhsminor.yy26 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2609 #line 2634 "pikchr.c"
2610 yymsp[0].minor.yy26 = yylhsminor.yy26;
2611 break;
2612 case 81: /* objectname ::= objectname DOT_U PLACENAME */
2613 #line 641 "pikchr.y"
2614 {yylhsminor.yy26 = pik_find_byname(p,yymsp[-2].minor.yy26,&yymsp[0].minor.yy0);}
2615 #line 2640 "pikchr.c"
2616 yymsp[-2].minor.yy26 = yylhsminor.yy26;
2617 break;
2618 case 82: /* nth ::= NTH CLASSNAME */
 
 
 
 
2619 #line 643 "pikchr.y"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2620 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2621 #line 2646 "pikchr.c"
2622 yymsp[-1].minor.yy0 = yylhsminor.yy0;
2623 break;
2624 case 83: /* nth ::= NTH LAST CLASSNAME */
2625 #line 644 "pikchr.y"
2626 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2627 #line 2652 "pikchr.c"
2628 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2629 break;
2630 case 84: /* nth ::= LAST CLASSNAME */
2631 #line 645 "pikchr.y"
2632 {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2633 #line 2658 "pikchr.c"
2634 break;
2635 case 85: /* nth ::= LAST */
2636 #line 646 "pikchr.y"
2637 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2638 #line 2663 "pikchr.c"
2639 yymsp[0].minor.yy0 = yylhsminor.yy0;
2640 break;
2641 case 86: /* nth ::= NTH LB RB */
2642 #line 647 "pikchr.y"
2643 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2644 #line 2669 "pikchr.c"
2645 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2646 break;
2647 case 87: /* nth ::= NTH LAST LB RB */
2648 #line 648 "pikchr.y"
2649 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2650 #line 2675 "pikchr.c"
2651 yymsp[-3].minor.yy0 = yylhsminor.yy0;
2652 break;
2653 case 88: /* nth ::= LAST LB RB */
2654 #line 649 "pikchr.y"
2655 {yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2656 #line 2681 "pikchr.c"
2657 break;
2658 case 89: /* expr ::= expr PLUS expr */
2659 #line 651 "pikchr.y"
2660 {yylhsminor.yy191=yymsp[-2].minor.yy191+yymsp[0].minor.yy191;}
2661 #line 2686 "pikchr.c"
2662 yymsp[-2].minor.yy191 = yylhsminor.yy191;
2663 break;
2664 case 90: /* expr ::= expr MINUS expr */
2665 #line 652 "pikchr.y"
2666 {yylhsminor.yy191=yymsp[-2].minor.yy191-yymsp[0].minor.yy191;}
2667 #line 2692 "pikchr.c"
2668 yymsp[-2].minor.yy191 = yylhsminor.yy191;
2669 break;
2670 case 91: /* expr ::= expr STAR expr */
2671 #line 653 "pikchr.y"
2672 {yylhsminor.yy191=yymsp[-2].minor.yy191*yymsp[0].minor.yy191;}
2673 #line 2698 "pikchr.c"
2674 yymsp[-2].minor.yy191 = yylhsminor.yy191;
2675 break;
2676 case 92: /* expr ::= expr SLASH expr */
2677 #line 654 "pikchr.y"
2678 {
2679 if( yymsp[0].minor.yy191==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy191 = 0.0; }
2680 else{ yylhsminor.yy191 = yymsp[-2].minor.yy191/yymsp[0].minor.yy191; }
2681 }
2682 #line 2707 "pikchr.c"
2683 yymsp[-2].minor.yy191 = yylhsminor.yy191;
2684 break;
2685 case 93: /* expr ::= MINUS expr */
2686 #line 658 "pikchr.y"
2687 {yymsp[-1].minor.yy191=-yymsp[0].minor.yy191;}
2688 #line 2713 "pikchr.c"
2689 break;
2690 case 94: /* expr ::= PLUS expr */
2691 #line 659 "pikchr.y"
2692 {yymsp[-1].minor.yy191=yymsp[0].minor.yy191;}
2693 #line 2718 "pikchr.c"
2694 break;
2695 case 95: /* expr ::= LP expr RP */
2696 #line 660 "pikchr.y"
2697 {yymsp[-2].minor.yy191=yymsp[-1].minor.yy191;}
2698 #line 2723 "pikchr.c"
2699 break;
2700 case 96: /* expr ::= NUMBER */
2701 #line 661 "pikchr.y"
2702 {yylhsminor.yy191=pik_atof(p,&yymsp[0].minor.yy0);}
2703 #line 2728 "pikchr.c"
2704 yymsp[0].minor.yy191 = yylhsminor.yy191;
2705 break;
2706 case 97: /* expr ::= ID */
2707 #line 662 "pikchr.y"
2708 {yylhsminor.yy191=pik_get_var(p,&yymsp[0].minor.yy0);}
2709 #line 2734 "pikchr.c"
2710 yymsp[0].minor.yy191 = yylhsminor.yy191;
2711 break;
2712 case 98: /* expr ::= FUNC1 LP expr RP */
2713 #line 663 "pikchr.y"
2714 {yylhsminor.yy191 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy191,0.0);}
2715 #line 2740 "pikchr.c"
2716 yymsp[-3].minor.yy191 = yylhsminor.yy191;
2717 break;
2718 case 99: /* expr ::= FUNC2 LP expr COMMA expr RP */
2719 #line 664 "pikchr.y"
2720 {yylhsminor.yy191 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy191,yymsp[-1].minor.yy191);}
2721 #line 2746 "pikchr.c"
2722 yymsp[-5].minor.yy191 = yylhsminor.yy191;
2723 break;
2724 case 100: /* expr ::= object DOT_L locproperty */
2725 case 101: /* expr ::= object DOT_L numproperty */ yytestcase(yyruleno==101);
2726 case 102: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==102);
2727 case 103: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==103);
2728 #line 666 "pikchr.y"
2729 {yylhsminor.yy191=pik_property_of(p,yymsp[-2].minor.yy26,&yymsp[0].minor.yy0);}
2730 #line 2755 "pikchr.c"
2731 yymsp[-2].minor.yy191 = yylhsminor.yy191;
2732 break;
2733 case 104: /* expr ::= object DOT_E edge DOT_L X */
2734 #line 670 "pikchr.y"
2735 {yylhsminor.yy191=pik_place_of_elem(p,yymsp[-4].minor.yy26,&yymsp[-2].minor.yy0).x;}
2736 #line 2761 "pikchr.c"
2737 yymsp[-4].minor.yy191 = yylhsminor.yy191;
2738 break;
2739 case 105: /* expr ::= object DOT_E edge DOT_L Y */
2740 #line 671 "pikchr.y"
2741 {yylhsminor.yy191=pik_place_of_elem(p,yymsp[-4].minor.yy26,&yymsp[-2].minor.yy0).y;}
2742 #line 2767 "pikchr.c"
2743 yymsp[-4].minor.yy191 = yylhsminor.yy191;
2744 break;
2745 case 106: /* expr ::= LP locproperty OF object RP */
2746 case 107: /* expr ::= LP dashproperty OF object RP */ yytestcase(yyruleno==107);
2747 case 108: /* expr ::= LP numproperty OF object RP */ yytestcase(yyruleno==108);
2748 case 109: /* expr ::= LP colorproperty OF object RP */ yytestcase(yyruleno==109);
2749 #line 672 "pikchr.y"
2750 {yymsp[-4].minor.yy191=pik_property_of(p,yymsp[-1].minor.yy26,&yymsp[-3].minor.yy0);}
2751 #line 2776 "pikchr.c"
2752 break;
2753 case 110: /* expr ::= NTH VERTEX OF object DOT_L X */
2754 #line 678 "pikchr.y"
2755 {yylhsminor.yy191 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy26).x;}
2756 #line 2781 "pikchr.c"
2757 yymsp[-5].minor.yy191 = yylhsminor.yy191;
2758 break;
2759 case 111: /* expr ::= NTH VERTEX OF object DOT_L Y */
2760 #line 680 "pikchr.y"
2761 {yylhsminor.yy191 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy26).y;}
2762 #line 2787 "pikchr.c"
2763 yymsp[-5].minor.yy191 = yylhsminor.yy191;
2764 break;
2765 default:
2766 /* (112) lvalue ::= ID */ yytestcase(yyruleno==112);
2767 /* (113) lvalue ::= FILL */ yytestcase(yyruleno==113);
2768 /* (114) lvalue ::= COLOR */ yytestcase(yyruleno==114);
2769 /* (115) lvalue ::= THICKNESS */ yytestcase(yyruleno==115);
2770 /* (116) rvalue ::= expr */ yytestcase(yyruleno==116);
2771 /* (117) print ::= PRINT */ yytestcase(yyruleno==117);
2772 /* (118) prlist ::= pritem (OPTIMIZED OUT) */ assert(yyruleno!=118);
2773 /* (119) prlist ::= prlist prsep pritem */ yytestcase(yyruleno==119);
2774 /* (120) direction ::= UP */ yytestcase(yyruleno==120);
2775 /* (121) direction ::= DOWN */ yytestcase(yyruleno==121);
2776 /* (122) direction ::= LEFT */ yytestcase(yyruleno==122);
2777 /* (123) direction ::= RIGHT */ yytestcase(yyruleno==123);
2778 /* (124) attribute_list ::= alist */ yytestcase(yyruleno==124);
2779 /* (125) alist ::= */ yytestcase(yyruleno==125);
2780 /* (126) alist ::= alist attribute */ yytestcase(yyruleno==126);
2781 /* (127) attribute ::= boolproperty (OPTIMIZED OUT) */ assert(yyruleno!=127);
2782 /* (128) attribute ::= WITH withclause */ yytestcase(yyruleno==128);
2783 /* (129) even ::= UNTIL EVEN WITH */ yytestcase(yyruleno==129);
2784 /* (130) even ::= EVEN WITH */ yytestcase(yyruleno==130);
2785 /* (131) withclause ::= with (OPTIMIZED OUT) */ assert(yyruleno!=131);
2786 /* (132) withclause ::= withclause AND with */ yytestcase(yyruleno==132);
2787 /* (133) dashproperty ::= DOTTED */ yytestcase(yyruleno==133);
2788 /* (134) dashproperty ::= DASHED */ yytestcase(yyruleno==134);
2789 /* (135) colorproperty ::= FILL */ yytestcase(yyruleno==135);
2790 /* (136) colorproperty ::= COLOR */ yytestcase(yyruleno==136);
2791 /* (137) position ::= place */ yytestcase(yyruleno==137);
2792 /* (138) between ::= WAY BETWEEN */ yytestcase(yyruleno==138);
2793 /* (139) between ::= BETWEEN */ yytestcase(yyruleno==139);
2794 /* (140) between ::= OF THE WAY BETWEEN */ yytestcase(yyruleno==140);
2795 /* (141) object ::= objectname */ yytestcase(yyruleno==141);
2796 /* (142) locproperty ::= X|Y */ yytestcase(yyruleno==142);
2797 /* (143) edge ::= EDGEPT */ yytestcase(yyruleno==143);
2798 /* (144) edge ::= TOP */ yytestcase(yyruleno==144);
2799 /* (145) edge ::= BOTTOM */ yytestcase(yyruleno==145);
2800 /* (146) edge ::= LEFT */ yytestcase(yyruleno==146);
2801 /* (147) edge ::= RIGHT */ yytestcase(yyruleno==147);
 
 
2802 break;
2803 /********** End reduce actions ************************************************/
2804 };
2805 assert( yyruleno<sizeof(yyRuleInfoLhs)/sizeof(yyRuleInfoLhs[0]) );
2806 yygoto = yyRuleInfoLhs[yyruleno];
@@ -2856,18 +2935,18 @@
2856 ){
2857 pik_parserARG_FETCH
2858 pik_parserCTX_FETCH
2859 #define TOKEN yyminor
2860 /************ Begin %syntax_error code ****************************************/
2861 #line 467 "pikchr.y"
2862
2863 if( TOKEN.z && TOKEN.z[0] ){
2864 pik_error(p, &TOKEN, "syntax error");
2865 }else{
2866 pik_error(p, 0, "syntax error");
2867 }
2868 #line 2893 "pikchr.c"
2869 /************ End %syntax_error code ******************************************/
2870 pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
2871 pik_parserCTX_STORE
2872 }
2873
@@ -3096,11 +3175,11 @@
3096 #else
3097 (void)iToken;
3098 return 0;
3099 #endif
3100 }
3101 #line 690 "pikchr.y"
3102
3103
3104
3105 /* Chart of the 140 official HTML color names with their
3106 ** corresponding RGB value.
@@ -4972,11 +5051,11 @@
4972 ** resetting the ptTo.
4973 */
4974 static void pik_then(Pik *p, PToken *pToken, PElem *pElem){
4975 int n;
4976 if( !pElem->type->isLine ){
4977 pik_error(p, pToken, "use with line-oriented elements only");
4978 return;
4979 }
4980 n = p->nTPath - 1;
4981 if( n<1 ){
4982 pik_error(p, pToken, "no prior path points");
@@ -5021,11 +5100,11 @@
5021 int n;
5022 int dir;
5023 PNum scale = 1.0;
5024 if( !pElem->type->isLine ){
5025 if( pDir ){
5026 pik_error(p, pDir, "use with line-oriented elements only");
5027 }else{
5028 PToken x = pik_next_semantic_token(p, &pElem->errTok);
5029 pik_error(p, &x, "syntax error");
5030 }
5031 return;
@@ -5069,10 +5148,70 @@
5069 p->mTPath |= 1;
5070 break;
5071 }
5072 pElem->outDir = dir;
5073 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5074
5075 /* Process a movement attribute of the form "right until even with ..."
5076 **
5077 ** pDir is the first keyword, "right" or "left" or "up" or "down".
5078 ** The movement is in that direction until its closest approach to
@@ -5080,11 +5219,11 @@
5080 */
5081 static void pik_evenwith(Pik *p, PToken *pDir, PPoint *pPlace){
5082 PElem *pElem = p->cur;
5083 int n;
5084 if( !pElem->type->isLine ){
5085 pik_error(p, pDir, "use with line-oriented elements only");
5086 return;
5087 }
5088 n = p->nTPath - 1;
5089 if( p->thenFlag || p->mTPath==3 || n==0 ){
5090 n = pik_next_rpath(p, pDir);
@@ -6137,10 +6276,11 @@
6137 { "even", 4, T_EVEN, 0, 0 },
6138 { "fill", 4, T_FILL, 0, 0 },
6139 { "first", 5, T_NTH, 0, 0 },
6140 { "fit", 3, T_FIT, 0, 0 },
6141 { "from", 4, T_FROM, 0, 0 },
 
6142 { "heading", 7, T_HEADING, 0, 0 },
6143 { "height", 6, T_HEIGHT, 0, 0 },
6144 { "ht", 2, T_HEIGHT, 0, 0 },
6145 { "in", 2, T_IN, 0, 0 },
6146 { "int", 3, T_FUNC1, FN_INT, 0 },
@@ -6663,6 +6803,6 @@
6663 printf("</body></html>\n");
6664 return 0;
6665 }
6666 #endif /* PIKCHR_SHELL */
6667
6668 #line 6693 "pikchr.c"
6669
--- src/pikchr.c
+++ src/pikchr.c
@@ -394,10 +394,11 @@
394 static void pik_elist_move(PEList*,PNum dx, PNum dy);
395 static void pik_set_numprop(Pik*,PToken*,PNum,PNum);
396 static void pik_set_dashed(Pik*,PToken*,PNum*);
397 static void pik_then(Pik*,PToken*,PElem*);
398 static void pik_add_direction(Pik*,PToken*,PNum*,int);
399 static void pik_move_hdg(Pik*,PNum*,PToken*,PNum,PToken*,PToken*);
400 static void pik_evenwith(Pik*,PToken*,PPoint*);
401 static void pik_set_from(Pik*,PElem*,PToken*,PPoint*);
402 static void pik_add_to(Pik*,PElem*,PToken*,PPoint*);
403 static void pik_close_path(Pik*,PToken*);
404 static void pik_set_at(Pik*,PToken*,PPoint*,PToken*);
@@ -423,11 +424,11 @@
424 static PPoint pik_nth_vertex(Pik *p, PToken *pNth, PToken *pErr, PElem *pElem);
425 static PToken pik_next_semantic_token(Pik *p, PToken *pThis);
426 static void pik_compute_layout_settings(Pik*);
427
428
429 #line 455 "pikchr.c"
430 /**************** End of %include directives **********************************/
431 /* These constants specify the various numeric values for terminal symbols.
432 ***************** Begin token definitions *************************************/
433 #ifndef T_ID
434 #define T_ID 1
@@ -459,64 +460,65 @@
460 #define T_CLOSE 27
461 #define T_CHOP 28
462 #define T_FROM 29
463 #define T_TO 30
464 #define T_THEN 31
465 #define T_HEADING 32
466 #define T_GO 33
467 #define T_AT 34
468 #define T_WITH 35
469 #define T_SAME 36
470 #define T_AS 37
471 #define T_FIT 38
472 #define T_UNTIL 39
473 #define T_EVEN 40
474 #define T_AND 41
475 #define T_DOT_E 42
476 #define T_HEIGHT 43
477 #define T_WIDTH 44
478 #define T_RADIUS 45
479 #define T_DIAMETER 46
480 #define T_DOTTED 47
481 #define T_DASHED 48
482 #define T_CW 49
483 #define T_CCW 50
484 #define T_LARROW 51
485 #define T_RARROW 52
486 #define T_LRARROW 53
487 #define T_INVIS 54
488 #define T_THICK 55
489 #define T_THIN 56
490 #define T_CENTER 57
491 #define T_LJUST 58
492 #define T_RJUST 59
493 #define T_ABOVE 60
494 #define T_BELOW 61
495 #define T_ITALIC 62
496 #define T_BOLD 63
497 #define T_ALIGNED 64
498 #define T_BIG 65
499 #define T_SMALL 66
500 #define T_LP 67
501 #define T_RP 68
502 #define T_WAY 69
503 #define T_BETWEEN 70
504 #define T_THE 71
505 #define T_DOT_L 72
506 #define T_START 73
507 #define T_END 74
508 #define T_NTH 75
509 #define T_VERTEX 76
510 #define T_IN 77
511 #define T_DOT_U 78
512 #define T_LAST 79
513 #define T_NUMBER 80
514 #define T_FUNC1 81
515 #define T_FUNC2 82
516 #define T_X 83
517 #define T_Y 84
518 #define T_TOP 85
519 #define T_BOTTOM 86
520 #endif
521 /**************** End token definitions ***************************************/
522
523 /* The next sections is a series of control #defines.
524 ** various aspects of the generated parser.
@@ -572,21 +574,21 @@
574 #ifndef INTERFACE
575 # define INTERFACE 1
576 #endif
577 /************* Begin control #defines *****************************************/
578 #define YYCODETYPE unsigned char
579 #define YYNOCODE 121
580 #define YYACTIONTYPE unsigned short int
581 #define pik_parserTOKENTYPE PToken
582 typedef union {
583 int yyinit;
584 pik_parserTOKENTYPE yy0;
585 PElem* yy2;
586 PEList* yy66;
587 int yy86;
588 PPoint yy187;
589 PNum yy241;
590 } YYMINORTYPE;
591 #ifndef YYSTACKDEPTH
592 #define YYSTACKDEPTH 100
593 #endif
594 #define pik_parserARG_SDECL
@@ -598,22 +600,22 @@
600 #define pik_parserCTX_PDECL ,Pik *p
601 #define pik_parserCTX_PARAM ,p
602 #define pik_parserCTX_FETCH Pik *p=yypParser->p;
603 #define pik_parserCTX_STORE yypParser->p=p;
604 #define YYFALLBACK 1
605 #define YYNSTATE 166
606 #define YYNRULE 158
607 #define YYNRULE_WITH_ACTION 120
608 #define YYNTOKEN 87
609 #define YY_MAX_SHIFT 165
610 #define YY_MIN_SHIFTREDUCE 286
611 #define YY_MAX_SHIFTREDUCE 443
612 #define YY_ERROR_ACTION 444
613 #define YY_ACCEPT_ACTION 445
614 #define YY_NO_ACTION 446
615 #define YY_MIN_REDUCE 447
616 #define YY_MAX_REDUCE 604
617 /************* End control #defines *******************************************/
618 #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
619
620 /* Define the yytestcase() macro to be a no-op if is not already defined
621 ** otherwise.
@@ -676,247 +678,265 @@
678 ** yy_reduce_ofst[] For each state, the offset into yy_action for
679 ** shifting non-terminals after a reduce.
680 ** yy_default[] Default action for each state.
681 **
682 *********** Begin parsing tables **********************************************/
683 #define YY_ACTTAB_COUNT (936)
684 static const YYACTIONTYPE yy_action[] = {
685 /* 0 */ 579, 495, 164, 122, 19, 123, 448, 455, 26, 447,
686 /* 10 */ 579, 68, 451, 125, 431, 432, 339, 47, 79, 25,
687 /* 20 */ 46, 28, 579, 165, 126, 445, 21, 319, 320, 10,
688 /* 30 */ 9, 32, 145, 31, 8, 57, 124, 155, 336, 589,
689 /* 40 */ 581, 75, 581, 339, 339, 339, 339, 429, 430, 340,
690 /* 50 */ 341, 342, 343, 344, 345, 346, 347, 391, 439, 556,
691 /* 60 */ 51, 52, 557, 558, 555, 453, 26, 71, 374, 142,
692 /* 70 */ 431, 432, 339, 406, 454, 114, 113, 164, 122, 44,
693 /* 80 */ 41, 442, 443, 12, 146, 68, 407, 408, 409, 411,
694 /* 90 */ 78, 535, 304, 77, 24, 414, 415, 416, 417, 339,
695 /* 100 */ 339, 339, 339, 429, 430, 391, 398, 399, 51, 52,
696 /* 110 */ 414, 415, 416, 417, 27, 108, 374, 302, 431, 432,
697 /* 120 */ 339, 535, 80, 1, 116, 164, 122, 535, 461, 144,
698 /* 130 */ 143, 102, 356, 76, 76, 120, 390, 157, 156, 438,
699 /* 140 */ 438, 440, 441, 56, 55, 54, 53, 339, 339, 339,
700 /* 150 */ 339, 429, 430, 391, 439, 125, 51, 52, 71, 22,
701 /* 160 */ 142, 374, 54, 53, 374, 499, 114, 113, 164, 122,
702 /* 170 */ 78, 5, 304, 77, 140, 164, 122, 442, 443, 107,
703 /* 180 */ 127, 127, 81, 120, 390, 157, 156, 438, 438, 391,
704 /* 190 */ 439, 58, 51, 52, 531, 164, 122, 70, 150, 142,
705 /* 200 */ 374, 152, 148, 154, 112, 114, 113, 164, 122, 404,
706 /* 210 */ 405, 84, 150, 442, 443, 152, 148, 154, 73, 1,
707 /* 220 */ 116, 164, 122, 25, 110, 144, 143, 102, 120, 376,
708 /* 230 */ 161, 120, 390, 157, 156, 306, 391, 440, 441, 51,
709 /* 240 */ 52, 137, 135, 56, 55, 54, 53, 109, 30, 297,
710 /* 250 */ 298, 299, 6, 301, 129, 1, 7, 74, 45, 426,
711 /* 260 */ 69, 144, 143, 102, 139, 138, 439, 120, 390, 157,
712 /* 270 */ 156, 38, 425, 440, 441, 11, 355, 349, 349, 349,
713 /* 280 */ 349, 349, 349, 349, 349, 349, 349, 33, 121, 442,
714 /* 290 */ 443, 56, 55, 54, 53, 315, 530, 164, 122, 18,
715 /* 300 */ 17, 391, 5, 436, 51, 52, 72, 389, 136, 435,
716 /* 310 */ 107, 133, 374, 434, 120, 390, 157, 156, 137, 135,
717 /* 320 */ 56, 55, 54, 53, 431, 432, 339, 56, 55, 54,
718 /* 330 */ 53, 56, 55, 54, 53, 45, 71, 134, 142, 130,
719 /* 340 */ 128, 139, 138, 498, 114, 113, 164, 122, 38, 440,
720 /* 350 */ 441, 119, 13, 339, 339, 339, 339, 429, 430, 391,
721 /* 360 */ 331, 115, 51, 52, 378, 160, 14, 5, 377, 162,
722 /* 370 */ 374, 529, 164, 122, 15, 107, 18, 17, 16, 120,
723 /* 380 */ 390, 157, 156, 366, 367, 136, 435, 59, 391, 327,
724 /* 390 */ 34, 51, 52, 438, 438, 354, 85, 150, 60, 374,
725 /* 400 */ 152, 148, 154, 2, 61, 116, 164, 122, 147, 164,
726 /* 410 */ 122, 149, 164, 122, 431, 432, 339, 97, 150, 36,
727 /* 420 */ 82, 152, 148, 154, 62, 5, 116, 164, 122, 116,
728 /* 430 */ 164, 122, 403, 107, 151, 164, 122, 120, 390, 157,
729 /* 440 */ 156, 439, 402, 339, 339, 339, 339, 429, 430, 391,
730 /* 450 */ 63, 401, 51, 52, 5, 153, 164, 122, 64, 65,
731 /* 460 */ 374, 400, 107, 66, 442, 443, 120, 390, 157, 156,
732 /* 470 */ 391, 49, 50, 51, 52, 56, 55, 54, 53, 310,
733 /* 480 */ 67, 109, 446, 438, 438, 71, 391, 142, 382, 51,
734 /* 490 */ 52, 375, 493, 114, 113, 164, 122, 374, 71, 29,
735 /* 500 */ 142, 56, 55, 54, 53, 483, 114, 113, 164, 122,
736 /* 510 */ 71, 380, 142, 381, 163, 5, 40, 482, 114, 113,
737 /* 520 */ 164, 122, 446, 107, 440, 441, 446, 120, 390, 157,
738 /* 530 */ 156, 391, 446, 446, 51, 52, 5, 449, 455, 26,
739 /* 540 */ 446, 446, 374, 451, 107, 158, 164, 122, 120, 390,
740 /* 550 */ 157, 156, 3, 446, 165, 446, 446, 21, 446, 446,
741 /* 560 */ 107, 71, 446, 142, 120, 390, 157, 156, 518, 114,
742 /* 570 */ 113, 164, 122, 71, 330, 142, 56, 55, 54, 53,
743 /* 580 */ 132, 114, 113, 164, 122, 71, 446, 142, 446, 108,
744 /* 590 */ 446, 446, 524, 114, 113, 164, 122, 4, 116, 164,
745 /* 600 */ 122, 446, 461, 446, 35, 107, 446, 446, 574, 120,
746 /* 610 */ 390, 157, 156, 71, 326, 142, 56, 55, 54, 53,
747 /* 620 */ 523, 114, 113, 164, 122, 446, 71, 446, 142, 56,
748 /* 630 */ 55, 54, 53, 522, 114, 113, 164, 122, 446, 446,
749 /* 640 */ 71, 446, 142, 446, 37, 446, 93, 521, 114, 113,
750 /* 650 */ 164, 122, 71, 446, 142, 116, 164, 122, 446, 520,
751 /* 660 */ 114, 113, 164, 122, 71, 446, 142, 464, 446, 23,
752 /* 670 */ 446, 519, 114, 113, 164, 122, 71, 446, 142, 56,
753 /* 680 */ 55, 54, 53, 131, 114, 113, 164, 122, 71, 446,
754 /* 690 */ 142, 446, 446, 353, 39, 479, 114, 113, 164, 122,
755 /* 700 */ 111, 448, 455, 26, 446, 91, 446, 451, 56, 55,
756 /* 710 */ 54, 53, 446, 446, 116, 164, 122, 446, 165, 446,
757 /* 720 */ 20, 21, 446, 42, 446, 108, 56, 55, 54, 53,
758 /* 730 */ 56, 55, 54, 53, 116, 164, 122, 446, 475, 108,
759 /* 740 */ 446, 43, 446, 389, 56, 55, 54, 53, 116, 164,
760 /* 750 */ 122, 446, 452, 56, 55, 54, 53, 309, 446, 48,
761 /* 760 */ 56, 55, 54, 53, 56, 55, 54, 53, 83, 446,
762 /* 770 */ 446, 98, 389, 446, 99, 446, 446, 116, 164, 122,
763 /* 780 */ 116, 164, 122, 116, 164, 122, 100, 446, 446, 101,
764 /* 790 */ 446, 446, 86, 446, 393, 116, 164, 122, 116, 164,
765 /* 800 */ 122, 116, 164, 122, 446, 446, 87, 446, 446, 446,
766 /* 810 */ 103, 534, 164, 122, 446, 116, 164, 122, 446, 116,
767 /* 820 */ 164, 122, 88, 446, 392, 89, 446, 446, 389, 446,
768 /* 830 */ 104, 116, 164, 122, 116, 164, 122, 90, 446, 116,
769 /* 840 */ 164, 122, 105, 446, 446, 106, 116, 164, 122, 92,
770 /* 850 */ 446, 116, 164, 122, 116, 164, 122, 94, 116, 164,
771 /* 860 */ 122, 446, 446, 95, 446, 446, 116, 164, 122, 96,
772 /* 870 */ 376, 161, 116, 164, 122, 549, 376, 161, 116, 164,
773 /* 880 */ 122, 548, 446, 446, 116, 164, 122, 547, 446, 446,
774 /* 890 */ 116, 164, 122, 546, 446, 446, 116, 164, 122, 446,
775 /* 900 */ 446, 446, 116, 164, 122, 446, 446, 117, 446, 446,
776 /* 910 */ 446, 118, 446, 446, 446, 446, 116, 164, 122, 446,
777 /* 920 */ 116, 164, 122, 446, 446, 446, 141, 446, 446, 121,
778 /* 930 */ 446, 446, 159, 446, 446, 121,
779 };
780 static const YYCODETYPE yy_lookahead[] = {
781 /* 0 */ 0, 100, 101, 102, 120, 87, 88, 89, 90, 0,
782 /* 10 */ 10, 3, 94, 93, 14, 15, 16, 92, 18, 10,
783 /* 20 */ 95, 96, 22, 105, 93, 107, 108, 27, 28, 29,
784 /* 30 */ 30, 31, 93, 33, 34, 35, 36, 93, 38, 119,
785 /* 40 */ 115, 116, 117, 43, 44, 45, 46, 47, 48, 49,
786 /* 50 */ 50, 51, 52, 53, 54, 55, 56, 1, 2, 92,
787 /* 60 */ 4, 5, 95, 96, 97, 89, 90, 91, 12, 93,
788 /* 70 */ 14, 15, 16, 1, 98, 99, 100, 101, 102, 4,
789 /* 80 */ 5, 25, 26, 19, 12, 77, 14, 15, 16, 17,
790 /* 90 */ 18, 42, 20, 21, 111, 23, 24, 25, 26, 43,
791 /* 100 */ 44, 45, 46, 47, 48, 1, 83, 84, 4, 5,
792 /* 110 */ 23, 24, 25, 26, 94, 91, 12, 19, 14, 15,
793 /* 120 */ 16, 72, 103, 67, 100, 101, 102, 78, 104, 73,
794 /* 130 */ 74, 75, 68, 109, 110, 79, 80, 81, 82, 83,
795 /* 140 */ 84, 85, 86, 4, 5, 6, 7, 43, 44, 45,
796 /* 150 */ 46, 47, 48, 1, 2, 93, 4, 5, 91, 113,
797 /* 160 */ 93, 12, 6, 7, 12, 98, 99, 100, 101, 102,
798 /* 170 */ 18, 67, 20, 21, 100, 101, 102, 25, 26, 75,
799 /* 180 */ 118, 119, 103, 79, 80, 81, 82, 83, 84, 1,
800 /* 190 */ 2, 37, 4, 5, 100, 101, 102, 91, 92, 93,
801 /* 200 */ 12, 95, 96, 97, 98, 99, 100, 101, 102, 83,
802 /* 210 */ 84, 91, 92, 25, 26, 95, 96, 97, 42, 67,
803 /* 220 */ 100, 101, 102, 10, 75, 73, 74, 75, 79, 20,
804 /* 230 */ 21, 79, 80, 81, 82, 22, 1, 85, 86, 4,
805 /* 240 */ 5, 2, 3, 4, 5, 6, 7, 12, 72, 14,
806 /* 250 */ 15, 16, 34, 18, 40, 67, 34, 42, 19, 35,
807 /* 260 */ 41, 73, 74, 75, 25, 26, 2, 79, 80, 81,
808 /* 270 */ 82, 32, 35, 85, 86, 41, 68, 57, 58, 59,
809 /* 280 */ 60, 61, 62, 63, 64, 65, 66, 72, 79, 25,
810 /* 290 */ 26, 4, 5, 6, 7, 8, 100, 101, 102, 60,
811 /* 300 */ 61, 1, 67, 70, 4, 5, 42, 68, 69, 70,
812 /* 310 */ 75, 69, 12, 70, 79, 80, 81, 82, 2, 3,
813 /* 320 */ 4, 5, 6, 7, 14, 15, 16, 4, 5, 6,
814 /* 330 */ 7, 4, 5, 6, 7, 19, 91, 71, 93, 39,
815 /* 340 */ 40, 25, 26, 98, 99, 100, 101, 102, 32, 85,
816 /* 350 */ 86, 72, 29, 43, 44, 45, 46, 47, 48, 1,
817 /* 360 */ 2, 72, 4, 5, 20, 21, 3, 67, 20, 21,
818 /* 370 */ 12, 100, 101, 102, 3, 75, 60, 61, 3, 79,
819 /* 380 */ 80, 81, 82, 73, 74, 69, 70, 3, 1, 2,
820 /* 390 */ 32, 4, 5, 83, 84, 68, 91, 92, 3, 12,
821 /* 400 */ 95, 96, 97, 13, 3, 100, 101, 102, 100, 101,
822 /* 410 */ 102, 100, 101, 102, 14, 15, 16, 91, 92, 32,
823 /* 420 */ 91, 95, 96, 97, 3, 67, 100, 101, 102, 100,
824 /* 430 */ 101, 102, 68, 75, 100, 101, 102, 79, 80, 81,
825 /* 440 */ 82, 2, 68, 43, 44, 45, 46, 47, 48, 1,
826 /* 450 */ 3, 68, 4, 5, 67, 100, 101, 102, 3, 3,
827 /* 460 */ 12, 68, 75, 3, 25, 26, 79, 80, 81, 82,
828 /* 470 */ 1, 67, 67, 4, 5, 4, 5, 6, 7, 8,
829 /* 480 */ 3, 12, 121, 83, 84, 91, 1, 93, 22, 4,
830 /* 490 */ 5, 12, 98, 99, 100, 101, 102, 12, 91, 11,
831 /* 500 */ 93, 4, 5, 6, 7, 98, 99, 100, 101, 102,
832 /* 510 */ 91, 22, 93, 22, 78, 67, 19, 98, 99, 100,
833 /* 520 */ 101, 102, 121, 75, 85, 86, 121, 79, 80, 81,
834 /* 530 */ 82, 1, 121, 121, 4, 5, 67, 88, 89, 90,
835 /* 540 */ 121, 121, 12, 94, 75, 100, 101, 102, 79, 80,
836 /* 550 */ 81, 82, 67, 121, 105, 121, 121, 108, 121, 121,
837 /* 560 */ 75, 91, 121, 93, 79, 80, 81, 82, 98, 99,
838 /* 570 */ 100, 101, 102, 91, 2, 93, 4, 5, 6, 7,
839 /* 580 */ 98, 99, 100, 101, 102, 91, 121, 93, 121, 91,
840 /* 590 */ 121, 121, 98, 99, 100, 101, 102, 67, 100, 101,
841 /* 600 */ 102, 121, 104, 121, 32, 75, 121, 121, 110, 79,
842 /* 610 */ 80, 81, 82, 91, 2, 93, 4, 5, 6, 7,
843 /* 620 */ 98, 99, 100, 101, 102, 121, 91, 121, 93, 4,
844 /* 630 */ 5, 6, 7, 98, 99, 100, 101, 102, 121, 121,
845 /* 640 */ 91, 121, 93, 121, 32, 121, 91, 98, 99, 100,
846 /* 650 */ 101, 102, 91, 121, 93, 100, 101, 102, 121, 98,
847 /* 660 */ 99, 100, 101, 102, 91, 121, 93, 112, 121, 114,
848 /* 670 */ 121, 98, 99, 100, 101, 102, 91, 121, 93, 4,
849 /* 680 */ 5, 6, 7, 98, 99, 100, 101, 102, 91, 121,
850 /* 690 */ 93, 121, 121, 68, 19, 98, 99, 100, 101, 102,
851 /* 700 */ 87, 88, 89, 90, 121, 91, 121, 94, 4, 5,
852 /* 710 */ 6, 7, 121, 121, 100, 101, 102, 121, 105, 121,
853 /* 720 */ 106, 108, 121, 19, 121, 91, 4, 5, 6, 7,
854 /* 730 */ 4, 5, 6, 7, 100, 101, 102, 121, 104, 91,
855 /* 740 */ 121, 19, 121, 68, 4, 5, 6, 7, 100, 101,
856 /* 750 */ 102, 121, 104, 4, 5, 6, 7, 8, 121, 19,
857 /* 760 */ 4, 5, 6, 7, 4, 5, 6, 7, 91, 121,
858 /* 770 */ 121, 91, 68, 121, 91, 121, 121, 100, 101, 102,
859 /* 780 */ 100, 101, 102, 100, 101, 102, 91, 121, 121, 91,
860 /* 790 */ 121, 121, 91, 121, 68, 100, 101, 102, 100, 101,
861 /* 800 */ 102, 100, 101, 102, 121, 121, 91, 121, 121, 121,
862 /* 810 */ 91, 100, 101, 102, 121, 100, 101, 102, 121, 100,
863 /* 820 */ 101, 102, 91, 121, 68, 91, 121, 121, 68, 121,
864 /* 830 */ 91, 100, 101, 102, 100, 101, 102, 91, 121, 100,
865 /* 840 */ 101, 102, 91, 121, 121, 91, 100, 101, 102, 91,
866 /* 850 */ 121, 100, 101, 102, 100, 101, 102, 91, 100, 101,
867 /* 860 */ 102, 121, 121, 91, 121, 121, 100, 101, 102, 91,
868 /* 870 */ 20, 21, 100, 101, 102, 91, 20, 21, 100, 101,
869 /* 880 */ 102, 91, 121, 121, 100, 101, 102, 91, 121, 121,
870 /* 890 */ 100, 101, 102, 91, 121, 121, 100, 101, 102, 121,
871 /* 900 */ 121, 121, 100, 101, 102, 121, 121, 91, 121, 121,
872 /* 910 */ 121, 91, 121, 121, 121, 121, 100, 101, 102, 121,
873 /* 920 */ 100, 101, 102, 121, 121, 121, 76, 121, 121, 79,
874 /* 930 */ 121, 121, 76, 121, 121, 79, 121, 121, 121, 121,
875 /* 940 */ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
876 /* 950 */ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
877 /* 960 */ 121, 121, 121, 121, 87, 87, 87, 87, 87, 87,
878 /* 970 */ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
879 /* 980 */ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
880 /* 990 */ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
881 /* 1000 */ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
882 /* 1010 */ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
883 /* 1020 */ 87, 87, 87,
884 };
885 #define YY_SHIFT_COUNT (165)
886 #define YY_SHIFT_MIN (0)
887 #define YY_SHIFT_MAX (856)
888 static const unsigned short int yy_shift_ofst[] = {
889 /* 0 */ 72, 56, 152, 104, 104, 104, 188, 188, 188, 188,
890 /* 10 */ 188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
891 /* 20 */ 188, 235, 72, 0, 235, 72, 448, 300, 469, 469,
892 /* 30 */ 310, 358, 387, 400, 448, 448, 448, 448, 448, 448,
893 /* 40 */ 448, 485, 448, 448, 530, 448, 448, 448, 448, 448,
894 /* 50 */ 448, 448, 448, 448, 448, 448, 448, 264, 149, 149,
895 /* 60 */ 149, 149, 149, 149, 149, 149, 149, 149, 149, 264,
896 /* 70 */ 239, 316, 439, 439, 439, 87, 98, 936, 936, 936,
897 /* 80 */ 220, 220, 572, 612, 675, 704, 323, 327, 497, 625,
898 /* 90 */ 722, 287, 471, 749, 726, 740, 756, 760, 139, 139,
899 /* 100 */ 139, 139, 850, 139, 139, 139, 139, 856, 139, 49,
900 /* 110 */ 209, 213, 64, 176, 75, 23, 215, 156, 156, 126,
901 /* 120 */ 344, 348, 8, 9, 154, 218, 222, 219, 224, 237,
902 /* 130 */ 214, 234, 208, 233, 242, 266, 243, 363, 371, 375,
903 /* 140 */ 279, 384, 395, 401, 421, 289, 390, 364, 447, 374,
904 /* 150 */ 455, 383, 456, 393, 460, 289, 404, 405, 279, 477,
905 /* 160 */ 466, 489, 491, 479, 436, 488,
906 };
907 #define YY_REDUCE_COUNT (79)
908 #define YY_REDUCE_MIN (-116)
909 #define YY_REDUCE_MAX (820)
910 static const short yy_reduce_ofst[] = {
911 /* 0 */ -82, 106, -24, 120, 305, 326, 67, 245, 394, 407,
912 /* 10 */ 419, 470, 482, 494, 522, 535, 549, 561, 573, 585,
913 /* 20 */ 597, 24, 613, -75, 498, 449, 555, 614, 634, 648,
914 /* 30 */ -33, 329, 677, -33, 680, 683, 695, 698, 701, 715,
915 /* 40 */ 719, 731, 734, 739, 746, 751, 754, 758, 766, 772,
916 /* 50 */ 778, 784, 790, 796, 802, 816, 820, 62, -99, 74,
917 /* 60 */ 94, 196, 271, 308, 311, 334, 355, 445, 711, -80,
918 /* 70 */ -116, -116, -69, -61, -56, 20, -17, 46, 19, 79,
919 };
920 static const YYACTIONTYPE yy_default[] = {
921 /* 0 */ 450, 444, 444, 444, 444, 444, 444, 444, 444, 444,
922 /* 10 */ 444, 444, 444, 444, 444, 444, 444, 444, 444, 444,
923 /* 20 */ 444, 444, 450, 585, 444, 450, 580, 478, 444, 444,
924 /* 30 */ 444, 584, 484, 444, 444, 444, 444, 444, 444, 444,
925 /* 40 */ 444, 444, 444, 444, 444, 444, 474, 444, 444, 444,
926 /* 50 */ 444, 444, 444, 444, 444, 444, 444, 444, 444, 444,
927 /* 60 */ 444, 444, 444, 444, 444, 444, 444, 444, 444, 444,
928 /* 70 */ 444, 444, 444, 444, 444, 444, 456, 468, 509, 509,
929 /* 80 */ 466, 496, 444, 444, 444, 444, 444, 444, 444, 444,
930 /* 90 */ 444, 477, 472, 469, 444, 444, 444, 444, 490, 489,
931 /* 100 */ 486, 485, 444, 513, 512, 511, 473, 444, 571, 457,
932 /* 110 */ 444, 444, 444, 525, 594, 444, 444, 545, 544, 444,
933 /* 120 */ 540, 444, 533, 444, 494, 444, 444, 583, 444, 444,
934 /* 130 */ 444, 444, 444, 444, 444, 444, 444, 444, 444, 444,
935 /* 140 */ 532, 444, 444, 444, 444, 526, 444, 444, 444, 444,
936 /* 150 */ 444, 444, 444, 444, 444, 444, 444, 444, 444, 444,
937 /* 160 */ 444, 444, 444, 444, 598, 444,
938 };
939 /********** End of lemon-generated parsing tables *****************************/
940
941 /* The next table maps tokens (terminal symbols) into fallback tokens.
942 ** If a construct like the following:
@@ -964,10 +984,12 @@
984 0, /* CLOSE => nothing */
985 0, /* CHOP => nothing */
986 0, /* FROM => nothing */
987 0, /* TO => nothing */
988 0, /* THEN => nothing */
989 0, /* HEADING => nothing */
990 0, /* GO => nothing */
991 0, /* AT => nothing */
992 0, /* WITH => nothing */
993 0, /* SAME => nothing */
994 0, /* AS => nothing */
995 0, /* FIT => nothing */
@@ -999,11 +1021,10 @@
1021 0, /* ALIGNED => nothing */
1022 0, /* BIG => nothing */
1023 0, /* SMALL => nothing */
1024 0, /* LP => nothing */
1025 0, /* RP => nothing */
 
1026 0, /* WAY => nothing */
1027 0, /* BETWEEN => nothing */
1028 0, /* THE => nothing */
1029 0, /* DOT_L => nothing */
1030 0, /* START => nothing */
@@ -1138,97 +1159,99 @@
1159 /* 27 */ "CLOSE",
1160 /* 28 */ "CHOP",
1161 /* 29 */ "FROM",
1162 /* 30 */ "TO",
1163 /* 31 */ "THEN",
1164 /* 32 */ "HEADING",
1165 /* 33 */ "GO",
1166 /* 34 */ "AT",
1167 /* 35 */ "WITH",
1168 /* 36 */ "SAME",
1169 /* 37 */ "AS",
1170 /* 38 */ "FIT",
1171 /* 39 */ "UNTIL",
1172 /* 40 */ "EVEN",
1173 /* 41 */ "AND",
1174 /* 42 */ "DOT_E",
1175 /* 43 */ "HEIGHT",
1176 /* 44 */ "WIDTH",
1177 /* 45 */ "RADIUS",
1178 /* 46 */ "DIAMETER",
1179 /* 47 */ "DOTTED",
1180 /* 48 */ "DASHED",
1181 /* 49 */ "CW",
1182 /* 50 */ "CCW",
1183 /* 51 */ "LARROW",
1184 /* 52 */ "RARROW",
1185 /* 53 */ "LRARROW",
1186 /* 54 */ "INVIS",
1187 /* 55 */ "THICK",
1188 /* 56 */ "THIN",
1189 /* 57 */ "CENTER",
1190 /* 58 */ "LJUST",
1191 /* 59 */ "RJUST",
1192 /* 60 */ "ABOVE",
1193 /* 61 */ "BELOW",
1194 /* 62 */ "ITALIC",
1195 /* 63 */ "BOLD",
1196 /* 64 */ "ALIGNED",
1197 /* 65 */ "BIG",
1198 /* 66 */ "SMALL",
1199 /* 67 */ "LP",
1200 /* 68 */ "RP",
1201 /* 69 */ "WAY",
1202 /* 70 */ "BETWEEN",
1203 /* 71 */ "THE",
1204 /* 72 */ "DOT_L",
1205 /* 73 */ "START",
1206 /* 74 */ "END",
1207 /* 75 */ "NTH",
1208 /* 76 */ "VERTEX",
1209 /* 77 */ "IN",
1210 /* 78 */ "DOT_U",
1211 /* 79 */ "LAST",
1212 /* 80 */ "NUMBER",
1213 /* 81 */ "FUNC1",
1214 /* 82 */ "FUNC2",
1215 /* 83 */ "X",
1216 /* 84 */ "Y",
1217 /* 85 */ "TOP",
1218 /* 86 */ "BOTTOM",
1219 /* 87 */ "element_list",
1220 /* 88 */ "element",
1221 /* 89 */ "unnamed_element",
1222 /* 90 */ "basetype",
1223 /* 91 */ "expr",
1224 /* 92 */ "numproperty",
1225 /* 93 */ "edge",
1226 /* 94 */ "direction",
1227 /* 95 */ "dashproperty",
1228 /* 96 */ "colorproperty",
1229 /* 97 */ "locproperty",
1230 /* 98 */ "position",
1231 /* 99 */ "place",
1232 /* 100 */ "object",
1233 /* 101 */ "objectname",
1234 /* 102 */ "nth",
1235 /* 103 */ "textposition",
1236 /* 104 */ "rvalue",
1237 /* 105 */ "lvalue",
1238 /* 106 */ "even",
1239 /* 107 */ "document",
1240 /* 108 */ "print",
1241 /* 109 */ "prlist",
1242 /* 110 */ "pritem",
1243 /* 111 */ "prsep",
1244 /* 112 */ "attribute_list",
1245 /* 113 */ "savelist",
1246 /* 114 */ "alist",
1247 /* 115 */ "attribute",
1248 /* 116 */ "go",
1249 /* 117 */ "boolproperty",
1250 /* 118 */ "withclause",
1251 /* 119 */ "with",
1252 /* 120 */ "between",
1253 };
1254 #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
1255
1256 #ifndef NDEBUG
1257 /* For tracing reduce actions, the names of all rules are required.
@@ -1261,129 +1284,139 @@
1284 /* 24 */ "attribute ::= numproperty expr PERCENT",
1285 /* 25 */ "attribute ::= numproperty expr",
1286 /* 26 */ "attribute ::= dashproperty expr",
1287 /* 27 */ "attribute ::= dashproperty",
1288 /* 28 */ "attribute ::= colorproperty rvalue",
1289 /* 29 */ "attribute ::= go direction expr PERCENT",
1290 /* 30 */ "attribute ::= go direction expr",
1291 /* 31 */ "attribute ::= go direction",
1292 /* 32 */ "attribute ::= go direction even position",
1293 /* 33 */ "attribute ::= CLOSE",
1294 /* 34 */ "attribute ::= CHOP",
1295 /* 35 */ "attribute ::= FROM position",
1296 /* 36 */ "attribute ::= TO position",
1297 /* 37 */ "attribute ::= THEN",
1298 /* 38 */ "attribute ::= THEN expr HEADING expr",
1299 /* 39 */ "attribute ::= THEN HEADING expr",
1300 /* 40 */ "attribute ::= THEN expr EDGEPT",
1301 /* 41 */ "attribute ::= THEN EDGEPT",
1302 /* 42 */ "attribute ::= GO expr HEADING expr",
1303 /* 43 */ "attribute ::= GO HEADING expr",
1304 /* 44 */ "attribute ::= GO expr EDGEPT",
1305 /* 45 */ "attribute ::= GO EDGEPT",
1306 /* 46 */ "attribute ::= AT position",
1307 /* 47 */ "attribute ::= SAME",
1308 /* 48 */ "attribute ::= SAME AS object",
1309 /* 49 */ "attribute ::= STRING textposition",
1310 /* 50 */ "attribute ::= FIT",
1311 /* 51 */ "with ::= DOT_E edge AT position",
1312 /* 52 */ "with ::= edge AT position",
1313 /* 53 */ "numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS",
1314 /* 54 */ "boolproperty ::= CW",
1315 /* 55 */ "boolproperty ::= CCW",
1316 /* 56 */ "boolproperty ::= LARROW",
1317 /* 57 */ "boolproperty ::= RARROW",
1318 /* 58 */ "boolproperty ::= LRARROW",
1319 /* 59 */ "boolproperty ::= INVIS",
1320 /* 60 */ "boolproperty ::= THICK",
1321 /* 61 */ "boolproperty ::= THIN",
1322 /* 62 */ "textposition ::=",
1323 /* 63 */ "textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL",
1324 /* 64 */ "position ::= expr COMMA expr",
1325 /* 65 */ "position ::= place PLUS expr COMMA expr",
1326 /* 66 */ "position ::= place MINUS expr COMMA expr",
1327 /* 67 */ "position ::= place PLUS LP expr COMMA expr RP",
1328 /* 68 */ "position ::= place MINUS LP expr COMMA expr RP",
1329 /* 69 */ "position ::= LP position COMMA position RP",
1330 /* 70 */ "position ::= LP position RP",
1331 /* 71 */ "position ::= expr between position AND position",
1332 /* 72 */ "position ::= expr ABOVE position",
1333 /* 73 */ "position ::= expr BELOW position",
1334 /* 74 */ "position ::= expr LEFT OF position",
1335 /* 75 */ "position ::= expr RIGHT OF position",
1336 /* 76 */ "position ::= expr EDGEPT OF position",
1337 /* 77 */ "position ::= expr HEADING expr FROM position",
1338 /* 78 */ "place ::= object",
1339 /* 79 */ "place ::= object DOT_E edge",
1340 /* 80 */ "place ::= object DOT_L START",
1341 /* 81 */ "place ::= object DOT_L END",
1342 /* 82 */ "place ::= START OF object",
1343 /* 83 */ "place ::= END OF object",
1344 /* 84 */ "place ::= edge OF object",
1345 /* 85 */ "place ::= NTH VERTEX OF object",
1346 /* 86 */ "object ::= nth",
1347 /* 87 */ "object ::= nth OF|IN object",
1348 /* 88 */ "objectname ::= PLACENAME",
1349 /* 89 */ "objectname ::= objectname DOT_U PLACENAME",
1350 /* 90 */ "nth ::= NTH CLASSNAME",
1351 /* 91 */ "nth ::= NTH LAST CLASSNAME",
1352 /* 92 */ "nth ::= LAST CLASSNAME",
1353 /* 93 */ "nth ::= LAST",
1354 /* 94 */ "nth ::= NTH LB RB",
1355 /* 95 */ "nth ::= NTH LAST LB RB",
1356 /* 96 */ "nth ::= LAST LB RB",
1357 /* 97 */ "expr ::= expr PLUS expr",
1358 /* 98 */ "expr ::= expr MINUS expr",
1359 /* 99 */ "expr ::= expr STAR expr",
1360 /* 100 */ "expr ::= expr SLASH expr",
1361 /* 101 */ "expr ::= MINUS expr",
1362 /* 102 */ "expr ::= PLUS expr",
1363 /* 103 */ "expr ::= LP expr RP",
1364 /* 104 */ "expr ::= NUMBER",
1365 /* 105 */ "expr ::= ID",
1366 /* 106 */ "expr ::= FUNC1 LP expr RP",
1367 /* 107 */ "expr ::= FUNC2 LP expr COMMA expr RP",
1368 /* 108 */ "expr ::= object DOT_L locproperty",
1369 /* 109 */ "expr ::= object DOT_L numproperty",
1370 /* 110 */ "expr ::= object DOT_L dashproperty",
1371 /* 111 */ "expr ::= object DOT_L colorproperty",
1372 /* 112 */ "expr ::= object DOT_E edge DOT_L X",
1373 /* 113 */ "expr ::= object DOT_E edge DOT_L Y",
1374 /* 114 */ "expr ::= LP locproperty OF object RP",
1375 /* 115 */ "expr ::= LP dashproperty OF object RP",
1376 /* 116 */ "expr ::= LP numproperty OF object RP",
1377 /* 117 */ "expr ::= LP colorproperty OF object RP",
1378 /* 118 */ "expr ::= NTH VERTEX OF object DOT_L X",
1379 /* 119 */ "expr ::= NTH VERTEX OF object DOT_L Y",
1380 /* 120 */ "lvalue ::= ID",
1381 /* 121 */ "lvalue ::= FILL",
1382 /* 122 */ "lvalue ::= COLOR",
1383 /* 123 */ "lvalue ::= THICKNESS",
1384 /* 124 */ "rvalue ::= expr",
1385 /* 125 */ "print ::= PRINT",
1386 /* 126 */ "prlist ::= pritem",
1387 /* 127 */ "prlist ::= prlist prsep pritem",
1388 /* 128 */ "direction ::= UP",
1389 /* 129 */ "direction ::= DOWN",
1390 /* 130 */ "direction ::= LEFT",
1391 /* 131 */ "direction ::= RIGHT",
1392 /* 132 */ "attribute_list ::= alist",
1393 /* 133 */ "alist ::=",
1394 /* 134 */ "alist ::= alist attribute",
1395 /* 135 */ "attribute ::= boolproperty",
1396 /* 136 */ "attribute ::= WITH withclause",
1397 /* 137 */ "go ::= GO",
1398 /* 138 */ "go ::=",
1399 /* 139 */ "even ::= UNTIL EVEN WITH",
1400 /* 140 */ "even ::= EVEN WITH",
1401 /* 141 */ "withclause ::= with",
1402 /* 142 */ "withclause ::= withclause AND with",
1403 /* 143 */ "dashproperty ::= DOTTED",
1404 /* 144 */ "dashproperty ::= DASHED",
1405 /* 145 */ "colorproperty ::= FILL",
1406 /* 146 */ "colorproperty ::= COLOR",
1407 /* 147 */ "position ::= place",
1408 /* 148 */ "between ::= WAY BETWEEN",
1409 /* 149 */ "between ::= BETWEEN",
1410 /* 150 */ "between ::= OF THE WAY BETWEEN",
1411 /* 151 */ "object ::= objectname",
1412 /* 152 */ "locproperty ::= X|Y",
1413 /* 153 */ "edge ::= EDGEPT",
1414 /* 154 */ "edge ::= TOP",
1415 /* 155 */ "edge ::= BOTTOM",
1416 /* 156 */ "edge ::= LEFT",
1417 /* 157 */ "edge ::= RIGHT",
1418 };
1419 #endif /* NDEBUG */
1420
1421
1422 #if YYSTACKDEPTH<=0
@@ -1505,24 +1538,24 @@
1538 ** Note: during a reduce, the only symbols destroyed are those
1539 ** which appear on the RHS of the rule, but which are *not* used
1540 ** inside the C code.
1541 */
1542 /********* Begin destructor definitions ***************************************/
1543 case 87: /* element_list */
1544 {
1545 #line 444 "pikchr.y"
1546 pik_elist_free(p,(yypminor->yy66));
1547 #line 1572 "pikchr.c"
1548 }
1549 break;
1550 case 88: /* element */
1551 case 89: /* unnamed_element */
1552 case 90: /* basetype */
1553 {
1554 #line 446 "pikchr.y"
1555 pik_elem_free(p,(yypminor->yy2));
1556 #line 1581 "pikchr.c"
1557 }
1558 break;
1559 /********* End destructor definitions *****************************************/
1560 default: break; /* If no destructor action specified: do nothing */
1561 }
@@ -1736,14 +1769,14 @@
1769 #endif
1770 while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
1771 /* Here code is inserted which will execute if the parser
1772 ** stack every overflows */
1773 /******** Begin %stack_overflow code ******************************************/
1774 #line 475 "pikchr.y"
1775
1776 pik_error(p, 0, "parser stack overflow");
1777 #line 1802 "pikchr.c"
1778 /******** End %stack_overflow code ********************************************/
1779 pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */
1780 pik_parserCTX_STORE
1781 }
1782
@@ -1811,158 +1844,168 @@
1844 }
1845
1846 /* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side
1847 ** of that rule */
1848 static const YYCODETYPE yyRuleInfoLhs[] = {
1849 107, /* (0) document ::= element_list */
1850 87, /* (1) element_list ::= element */
1851 87, /* (2) element_list ::= element_list EOL element */
1852 88, /* (3) element ::= */
1853 88, /* (4) element ::= direction */
1854 88, /* (5) element ::= lvalue ASSIGN rvalue */
1855 88, /* (6) element ::= PLACENAME COLON unnamed_element */
1856 88, /* (7) element ::= PLACENAME COLON position */
1857 88, /* (8) element ::= unnamed_element */
1858 88, /* (9) element ::= print prlist */
1859 104, /* (10) rvalue ::= PLACENAME */
1860 110, /* (11) pritem ::= FILL */
1861 110, /* (12) pritem ::= COLOR */
1862 110, /* (13) pritem ::= THICKNESS */
1863 110, /* (14) pritem ::= rvalue */
1864 110, /* (15) pritem ::= STRING */
1865 111, /* (16) prsep ::= COMMA */
1866 89, /* (17) unnamed_element ::= basetype attribute_list */
1867 90, /* (18) basetype ::= CLASSNAME */
1868 90, /* (19) basetype ::= STRING textposition */
1869 90, /* (20) basetype ::= LB savelist element_list RB */
1870 113, /* (21) savelist ::= */
1871 112, /* (22) attribute_list ::= expr */
1872 112, /* (23) attribute_list ::= expr PERCENT */
1873 115, /* (24) attribute ::= numproperty expr PERCENT */
1874 115, /* (25) attribute ::= numproperty expr */
1875 115, /* (26) attribute ::= dashproperty expr */
1876 115, /* (27) attribute ::= dashproperty */
1877 115, /* (28) attribute ::= colorproperty rvalue */
1878 115, /* (29) attribute ::= go direction expr PERCENT */
1879 115, /* (30) attribute ::= go direction expr */
1880 115, /* (31) attribute ::= go direction */
1881 115, /* (32) attribute ::= go direction even position */
1882 115, /* (33) attribute ::= CLOSE */
1883 115, /* (34) attribute ::= CHOP */
1884 115, /* (35) attribute ::= FROM position */
1885 115, /* (36) attribute ::= TO position */
1886 115, /* (37) attribute ::= THEN */
1887 115, /* (38) attribute ::= THEN expr HEADING expr */
1888 115, /* (39) attribute ::= THEN HEADING expr */
1889 115, /* (40) attribute ::= THEN expr EDGEPT */
1890 115, /* (41) attribute ::= THEN EDGEPT */
1891 115, /* (42) attribute ::= GO expr HEADING expr */
1892 115, /* (43) attribute ::= GO HEADING expr */
1893 115, /* (44) attribute ::= GO expr EDGEPT */
1894 115, /* (45) attribute ::= GO EDGEPT */
1895 115, /* (46) attribute ::= AT position */
1896 115, /* (47) attribute ::= SAME */
1897 115, /* (48) attribute ::= SAME AS object */
1898 115, /* (49) attribute ::= STRING textposition */
1899 115, /* (50) attribute ::= FIT */
1900 119, /* (51) with ::= DOT_E edge AT position */
1901 119, /* (52) with ::= edge AT position */
1902 92, /* (53) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
1903 117, /* (54) boolproperty ::= CW */
1904 117, /* (55) boolproperty ::= CCW */
1905 117, /* (56) boolproperty ::= LARROW */
1906 117, /* (57) boolproperty ::= RARROW */
1907 117, /* (58) boolproperty ::= LRARROW */
1908 117, /* (59) boolproperty ::= INVIS */
1909 117, /* (60) boolproperty ::= THICK */
1910 117, /* (61) boolproperty ::= THIN */
1911 103, /* (62) textposition ::= */
1912 103, /* (63) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
1913 98, /* (64) position ::= expr COMMA expr */
1914 98, /* (65) position ::= place PLUS expr COMMA expr */
1915 98, /* (66) position ::= place MINUS expr COMMA expr */
1916 98, /* (67) position ::= place PLUS LP expr COMMA expr RP */
1917 98, /* (68) position ::= place MINUS LP expr COMMA expr RP */
1918 98, /* (69) position ::= LP position COMMA position RP */
1919 98, /* (70) position ::= LP position RP */
1920 98, /* (71) position ::= expr between position AND position */
1921 98, /* (72) position ::= expr ABOVE position */
1922 98, /* (73) position ::= expr BELOW position */
1923 98, /* (74) position ::= expr LEFT OF position */
1924 98, /* (75) position ::= expr RIGHT OF position */
1925 98, /* (76) position ::= expr EDGEPT OF position */
1926 98, /* (77) position ::= expr HEADING expr FROM position */
1927 99, /* (78) place ::= object */
1928 99, /* (79) place ::= object DOT_E edge */
1929 99, /* (80) place ::= object DOT_L START */
1930 99, /* (81) place ::= object DOT_L END */
1931 99, /* (82) place ::= START OF object */
1932 99, /* (83) place ::= END OF object */
1933 99, /* (84) place ::= edge OF object */
1934 99, /* (85) place ::= NTH VERTEX OF object */
1935 100, /* (86) object ::= nth */
1936 100, /* (87) object ::= nth OF|IN object */
1937 101, /* (88) objectname ::= PLACENAME */
1938 101, /* (89) objectname ::= objectname DOT_U PLACENAME */
1939 102, /* (90) nth ::= NTH CLASSNAME */
1940 102, /* (91) nth ::= NTH LAST CLASSNAME */
1941 102, /* (92) nth ::= LAST CLASSNAME */
1942 102, /* (93) nth ::= LAST */
1943 102, /* (94) nth ::= NTH LB RB */
1944 102, /* (95) nth ::= NTH LAST LB RB */
1945 102, /* (96) nth ::= LAST LB RB */
1946 91, /* (97) expr ::= expr PLUS expr */
1947 91, /* (98) expr ::= expr MINUS expr */
1948 91, /* (99) expr ::= expr STAR expr */
1949 91, /* (100) expr ::= expr SLASH expr */
1950 91, /* (101) expr ::= MINUS expr */
1951 91, /* (102) expr ::= PLUS expr */
1952 91, /* (103) expr ::= LP expr RP */
1953 91, /* (104) expr ::= NUMBER */
1954 91, /* (105) expr ::= ID */
1955 91, /* (106) expr ::= FUNC1 LP expr RP */
1956 91, /* (107) expr ::= FUNC2 LP expr COMMA expr RP */
1957 91, /* (108) expr ::= object DOT_L locproperty */
1958 91, /* (109) expr ::= object DOT_L numproperty */
1959 91, /* (110) expr ::= object DOT_L dashproperty */
1960 91, /* (111) expr ::= object DOT_L colorproperty */
1961 91, /* (112) expr ::= object DOT_E edge DOT_L X */
1962 91, /* (113) expr ::= object DOT_E edge DOT_L Y */
1963 91, /* (114) expr ::= LP locproperty OF object RP */
1964 91, /* (115) expr ::= LP dashproperty OF object RP */
1965 91, /* (116) expr ::= LP numproperty OF object RP */
1966 91, /* (117) expr ::= LP colorproperty OF object RP */
1967 91, /* (118) expr ::= NTH VERTEX OF object DOT_L X */
1968 91, /* (119) expr ::= NTH VERTEX OF object DOT_L Y */
1969 105, /* (120) lvalue ::= ID */
1970 105, /* (121) lvalue ::= FILL */
1971 105, /* (122) lvalue ::= COLOR */
1972 105, /* (123) lvalue ::= THICKNESS */
1973 104, /* (124) rvalue ::= expr */
1974 108, /* (125) print ::= PRINT */
1975 109, /* (126) prlist ::= pritem */
1976 109, /* (127) prlist ::= prlist prsep pritem */
1977 94, /* (128) direction ::= UP */
1978 94, /* (129) direction ::= DOWN */
1979 94, /* (130) direction ::= LEFT */
1980 94, /* (131) direction ::= RIGHT */
1981 112, /* (132) attribute_list ::= alist */
1982 114, /* (133) alist ::= */
1983 114, /* (134) alist ::= alist attribute */
1984 115, /* (135) attribute ::= boolproperty */
1985 115, /* (136) attribute ::= WITH withclause */
1986 116, /* (137) go ::= GO */
1987 116, /* (138) go ::= */
1988 106, /* (139) even ::= UNTIL EVEN WITH */
1989 106, /* (140) even ::= EVEN WITH */
1990 118, /* (141) withclause ::= with */
1991 118, /* (142) withclause ::= withclause AND with */
1992 95, /* (143) dashproperty ::= DOTTED */
1993 95, /* (144) dashproperty ::= DASHED */
1994 96, /* (145) colorproperty ::= FILL */
1995 96, /* (146) colorproperty ::= COLOR */
1996 98, /* (147) position ::= place */
1997 120, /* (148) between ::= WAY BETWEEN */
1998 120, /* (149) between ::= BETWEEN */
1999 120, /* (150) between ::= OF THE WAY BETWEEN */
2000 100, /* (151) object ::= objectname */
2001 97, /* (152) locproperty ::= X|Y */
2002 93, /* (153) edge ::= EDGEPT */
2003 93, /* (154) edge ::= TOP */
2004 93, /* (155) edge ::= BOTTOM */
2005 93, /* (156) edge ::= LEFT */
2006 93, /* (157) edge ::= RIGHT */
2007 };
2008
2009 /* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
2010 ** of symbols on the right-hand side of that rule. */
2011 static const signed char yyRuleInfoNRhs[] = {
@@ -1993,129 +2036,139 @@
2036 -3, /* (24) attribute ::= numproperty expr PERCENT */
2037 -2, /* (25) attribute ::= numproperty expr */
2038 -2, /* (26) attribute ::= dashproperty expr */
2039 -1, /* (27) attribute ::= dashproperty */
2040 -2, /* (28) attribute ::= colorproperty rvalue */
2041 -4, /* (29) attribute ::= go direction expr PERCENT */
2042 -3, /* (30) attribute ::= go direction expr */
2043 -2, /* (31) attribute ::= go direction */
2044 -4, /* (32) attribute ::= go direction even position */
2045 -1, /* (33) attribute ::= CLOSE */
2046 -1, /* (34) attribute ::= CHOP */
2047 -2, /* (35) attribute ::= FROM position */
2048 -2, /* (36) attribute ::= TO position */
2049 -1, /* (37) attribute ::= THEN */
2050 -4, /* (38) attribute ::= THEN expr HEADING expr */
2051 -3, /* (39) attribute ::= THEN HEADING expr */
2052 -3, /* (40) attribute ::= THEN expr EDGEPT */
2053 -2, /* (41) attribute ::= THEN EDGEPT */
2054 -4, /* (42) attribute ::= GO expr HEADING expr */
2055 -3, /* (43) attribute ::= GO HEADING expr */
2056 -3, /* (44) attribute ::= GO expr EDGEPT */
2057 -2, /* (45) attribute ::= GO EDGEPT */
2058 -2, /* (46) attribute ::= AT position */
2059 -1, /* (47) attribute ::= SAME */
2060 -3, /* (48) attribute ::= SAME AS object */
2061 -2, /* (49) attribute ::= STRING textposition */
2062 -1, /* (50) attribute ::= FIT */
2063 -4, /* (51) with ::= DOT_E edge AT position */
2064 -3, /* (52) with ::= edge AT position */
2065 -1, /* (53) numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2066 -1, /* (54) boolproperty ::= CW */
2067 -1, /* (55) boolproperty ::= CCW */
2068 -1, /* (56) boolproperty ::= LARROW */
2069 -1, /* (57) boolproperty ::= RARROW */
2070 -1, /* (58) boolproperty ::= LRARROW */
2071 -1, /* (59) boolproperty ::= INVIS */
2072 -1, /* (60) boolproperty ::= THICK */
2073 -1, /* (61) boolproperty ::= THIN */
2074 0, /* (62) textposition ::= */
2075 -2, /* (63) textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2076 -3, /* (64) position ::= expr COMMA expr */
2077 -5, /* (65) position ::= place PLUS expr COMMA expr */
2078 -5, /* (66) position ::= place MINUS expr COMMA expr */
2079 -7, /* (67) position ::= place PLUS LP expr COMMA expr RP */
2080 -7, /* (68) position ::= place MINUS LP expr COMMA expr RP */
2081 -5, /* (69) position ::= LP position COMMA position RP */
2082 -3, /* (70) position ::= LP position RP */
2083 -5, /* (71) position ::= expr between position AND position */
2084 -3, /* (72) position ::= expr ABOVE position */
2085 -3, /* (73) position ::= expr BELOW position */
2086 -4, /* (74) position ::= expr LEFT OF position */
2087 -4, /* (75) position ::= expr RIGHT OF position */
2088 -4, /* (76) position ::= expr EDGEPT OF position */
2089 -5, /* (77) position ::= expr HEADING expr FROM position */
2090 -1, /* (78) place ::= object */
2091 -3, /* (79) place ::= object DOT_E edge */
2092 -3, /* (80) place ::= object DOT_L START */
2093 -3, /* (81) place ::= object DOT_L END */
2094 -3, /* (82) place ::= START OF object */
2095 -3, /* (83) place ::= END OF object */
2096 -3, /* (84) place ::= edge OF object */
2097 -4, /* (85) place ::= NTH VERTEX OF object */
2098 -1, /* (86) object ::= nth */
2099 -3, /* (87) object ::= nth OF|IN object */
2100 -1, /* (88) objectname ::= PLACENAME */
2101 -3, /* (89) objectname ::= objectname DOT_U PLACENAME */
2102 -2, /* (90) nth ::= NTH CLASSNAME */
2103 -3, /* (91) nth ::= NTH LAST CLASSNAME */
2104 -2, /* (92) nth ::= LAST CLASSNAME */
2105 -1, /* (93) nth ::= LAST */
2106 -3, /* (94) nth ::= NTH LB RB */
2107 -4, /* (95) nth ::= NTH LAST LB RB */
2108 -3, /* (96) nth ::= LAST LB RB */
2109 -3, /* (97) expr ::= expr PLUS expr */
2110 -3, /* (98) expr ::= expr MINUS expr */
2111 -3, /* (99) expr ::= expr STAR expr */
2112 -3, /* (100) expr ::= expr SLASH expr */
2113 -2, /* (101) expr ::= MINUS expr */
2114 -2, /* (102) expr ::= PLUS expr */
2115 -3, /* (103) expr ::= LP expr RP */
2116 -1, /* (104) expr ::= NUMBER */
2117 -1, /* (105) expr ::= ID */
2118 -4, /* (106) expr ::= FUNC1 LP expr RP */
2119 -6, /* (107) expr ::= FUNC2 LP expr COMMA expr RP */
2120 -3, /* (108) expr ::= object DOT_L locproperty */
2121 -3, /* (109) expr ::= object DOT_L numproperty */
2122 -3, /* (110) expr ::= object DOT_L dashproperty */
2123 -3, /* (111) expr ::= object DOT_L colorproperty */
2124 -5, /* (112) expr ::= object DOT_E edge DOT_L X */
2125 -5, /* (113) expr ::= object DOT_E edge DOT_L Y */
2126 -5, /* (114) expr ::= LP locproperty OF object RP */
2127 -5, /* (115) expr ::= LP dashproperty OF object RP */
2128 -5, /* (116) expr ::= LP numproperty OF object RP */
2129 -5, /* (117) expr ::= LP colorproperty OF object RP */
2130 -6, /* (118) expr ::= NTH VERTEX OF object DOT_L X */
2131 -6, /* (119) expr ::= NTH VERTEX OF object DOT_L Y */
2132 -1, /* (120) lvalue ::= ID */
2133 -1, /* (121) lvalue ::= FILL */
2134 -1, /* (122) lvalue ::= COLOR */
2135 -1, /* (123) lvalue ::= THICKNESS */
2136 -1, /* (124) rvalue ::= expr */
2137 -1, /* (125) print ::= PRINT */
2138 -1, /* (126) prlist ::= pritem */
2139 -3, /* (127) prlist ::= prlist prsep pritem */
2140 -1, /* (128) direction ::= UP */
2141 -1, /* (129) direction ::= DOWN */
2142 -1, /* (130) direction ::= LEFT */
2143 -1, /* (131) direction ::= RIGHT */
2144 -1, /* (132) attribute_list ::= alist */
2145 0, /* (133) alist ::= */
2146 -2, /* (134) alist ::= alist attribute */
2147 -1, /* (135) attribute ::= boolproperty */
2148 -2, /* (136) attribute ::= WITH withclause */
2149 -1, /* (137) go ::= GO */
2150 0, /* (138) go ::= */
2151 -3, /* (139) even ::= UNTIL EVEN WITH */
2152 -2, /* (140) even ::= EVEN WITH */
2153 -1, /* (141) withclause ::= with */
2154 -3, /* (142) withclause ::= withclause AND with */
2155 -1, /* (143) dashproperty ::= DOTTED */
2156 -1, /* (144) dashproperty ::= DASHED */
2157 -1, /* (145) colorproperty ::= FILL */
2158 -1, /* (146) colorproperty ::= COLOR */
2159 -1, /* (147) position ::= place */
2160 -2, /* (148) between ::= WAY BETWEEN */
2161 -1, /* (149) between ::= BETWEEN */
2162 -4, /* (150) between ::= OF THE WAY BETWEEN */
2163 -1, /* (151) object ::= objectname */
2164 -1, /* (152) locproperty ::= X|Y */
2165 -1, /* (153) edge ::= EDGEPT */
2166 -1, /* (154) edge ::= TOP */
2167 -1, /* (155) edge ::= BOTTOM */
2168 -1, /* (156) edge ::= LEFT */
2169 -1, /* (157) edge ::= RIGHT */
2170 };
2171
2172 static void yy_accept(yyParser*); /* Forward Declaration */
2173
2174 /*
@@ -2202,605 +2255,631 @@
2255 ** break;
2256 */
2257 /********** Begin reduce actions **********************************************/
2258 YYMINORTYPE yylhsminor;
2259 case 0: /* document ::= element_list */
2260 #line 479 "pikchr.y"
2261 {pik_render(p,yymsp[0].minor.yy66);}
2262 #line 2287 "pikchr.c"
2263 break;
2264 case 1: /* element_list ::= element */
2265 #line 482 "pikchr.y"
2266 { yylhsminor.yy66 = pik_elist_append(p,0,yymsp[0].minor.yy2); }
2267 #line 2292 "pikchr.c"
2268 yymsp[0].minor.yy66 = yylhsminor.yy66;
2269 break;
2270 case 2: /* element_list ::= element_list EOL element */
2271 #line 484 "pikchr.y"
2272 { yylhsminor.yy66 = pik_elist_append(p,yymsp[-2].minor.yy66,yymsp[0].minor.yy2); }
2273 #line 2298 "pikchr.c"
2274 yymsp[-2].minor.yy66 = yylhsminor.yy66;
2275 break;
2276 case 3: /* element ::= */
2277 #line 487 "pikchr.y"
2278 { yymsp[1].minor.yy2 = 0; }
2279 #line 2304 "pikchr.c"
2280 break;
2281 case 4: /* element ::= direction */
2282 #line 488 "pikchr.y"
2283 { pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy2=0; }
2284 #line 2309 "pikchr.c"
2285 yymsp[0].minor.yy2 = yylhsminor.yy2;
2286 break;
2287 case 5: /* element ::= lvalue ASSIGN rvalue */
2288 #line 489 "pikchr.y"
2289 {pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy241,&yymsp[-1].minor.yy0); yylhsminor.yy2=0;}
2290 #line 2315 "pikchr.c"
2291 yymsp[-2].minor.yy2 = yylhsminor.yy2;
2292 break;
2293 case 6: /* element ::= PLACENAME COLON unnamed_element */
2294 #line 491 "pikchr.y"
2295 { yylhsminor.yy2 = yymsp[0].minor.yy2; pik_elem_setname(p,yymsp[0].minor.yy2,&yymsp[-2].minor.yy0); }
2296 #line 2321 "pikchr.c"
2297 yymsp[-2].minor.yy2 = yylhsminor.yy2;
2298 break;
2299 case 7: /* element ::= PLACENAME COLON position */
2300 #line 493 "pikchr.y"
2301 { yylhsminor.yy2 = pik_elem_new(p,0,0,0);
2302 if(yylhsminor.yy2){ yylhsminor.yy2->ptAt = yymsp[0].minor.yy187; pik_elem_setname(p,yylhsminor.yy2,&yymsp[-2].minor.yy0); }}
2303 #line 2328 "pikchr.c"
2304 yymsp[-2].minor.yy2 = yylhsminor.yy2;
2305 break;
2306 case 8: /* element ::= unnamed_element */
2307 #line 495 "pikchr.y"
2308 {yylhsminor.yy2 = yymsp[0].minor.yy2;}
2309 #line 2334 "pikchr.c"
2310 yymsp[0].minor.yy2 = yylhsminor.yy2;
2311 break;
2312 case 9: /* element ::= print prlist */
2313 #line 496 "pikchr.y"
2314 {pik_append(p,"<br>\n",5); yymsp[-1].minor.yy2=0;}
2315 #line 2340 "pikchr.c"
2316 break;
2317 case 10: /* rvalue ::= PLACENAME */
2318 #line 507 "pikchr.y"
2319 {yylhsminor.yy241 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2320 #line 2345 "pikchr.c"
2321 yymsp[0].minor.yy241 = yylhsminor.yy241;
2322 break;
2323 case 11: /* pritem ::= FILL */
2324 case 12: /* pritem ::= COLOR */ yytestcase(yyruleno==12);
2325 case 13: /* pritem ::= THICKNESS */ yytestcase(yyruleno==13);
2326 #line 512 "pikchr.y"
2327 {pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));}
2328 #line 2353 "pikchr.c"
2329 break;
2330 case 14: /* pritem ::= rvalue */
2331 #line 515 "pikchr.y"
2332 {pik_append_num(p,"",yymsp[0].minor.yy241);}
2333 #line 2358 "pikchr.c"
2334 break;
2335 case 15: /* pritem ::= STRING */
2336 #line 516 "pikchr.y"
2337 {pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2338 #line 2363 "pikchr.c"
2339 break;
2340 case 16: /* prsep ::= COMMA */
2341 #line 517 "pikchr.y"
2342 {pik_append(p, " ", 1);}
2343 #line 2368 "pikchr.c"
2344 break;
2345 case 17: /* unnamed_element ::= basetype attribute_list */
2346 #line 520 "pikchr.y"
2347 {yylhsminor.yy2 = yymsp[-1].minor.yy2; pik_after_adding_attributes(p,yylhsminor.yy2);}
2348 #line 2373 "pikchr.c"
2349 yymsp[-1].minor.yy2 = yylhsminor.yy2;
2350 break;
2351 case 18: /* basetype ::= CLASSNAME */
2352 #line 522 "pikchr.y"
2353 {yylhsminor.yy2 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2354 #line 2379 "pikchr.c"
2355 yymsp[0].minor.yy2 = yylhsminor.yy2;
2356 break;
2357 case 19: /* basetype ::= STRING textposition */
2358 #line 524 "pikchr.y"
2359 {yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy86; yylhsminor.yy2 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2360 #line 2385 "pikchr.c"
2361 yymsp[-1].minor.yy2 = yylhsminor.yy2;
2362 break;
2363 case 20: /* basetype ::= LB savelist element_list RB */
2364 #line 526 "pikchr.y"
2365 { p->list = yymsp[-2].minor.yy66; yymsp[-3].minor.yy2 = pik_elem_new(p,0,0,yymsp[-1].minor.yy66); if(yymsp[-3].minor.yy2) yymsp[-3].minor.yy2->errTok = yymsp[0].minor.yy0; }
2366 #line 2391 "pikchr.c"
2367 break;
2368 case 21: /* savelist ::= */
2369 #line 531 "pikchr.y"
2370 {yymsp[1].minor.yy66 = p->list; p->list = 0;}
2371 #line 2396 "pikchr.c"
2372 break;
2373 case 22: /* attribute_list ::= expr */
2374 #line 538 "pikchr.y"
2375 { pik_add_direction(p,0,&yymsp[0].minor.yy241,0);}
2376 #line 2401 "pikchr.c"
2377 break;
2378 case 23: /* attribute_list ::= expr PERCENT */
2379 #line 539 "pikchr.y"
2380 { pik_add_direction(p,0,&yymsp[-1].minor.yy241,1);}
2381 #line 2406 "pikchr.c"
2382 break;
2383 case 24: /* attribute ::= numproperty expr PERCENT */
2384 #line 544 "pikchr.y"
2385 { pik_set_numprop(p,&yymsp[-2].minor.yy0,0.0,yymsp[-1].minor.yy241/100.0); }
2386 #line 2411 "pikchr.c"
2387 break;
2388 case 25: /* attribute ::= numproperty expr */
2389 case 28: /* attribute ::= colorproperty rvalue */ yytestcase(yyruleno==28);
2390 #line 545 "pikchr.y"
2391 { pik_set_numprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy241,0.0); }
2392 #line 2417 "pikchr.c"
2393 break;
2394 case 26: /* attribute ::= dashproperty expr */
2395 #line 546 "pikchr.y"
2396 { pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy241); }
2397 #line 2422 "pikchr.c"
2398 break;
2399 case 27: /* attribute ::= dashproperty */
2400 #line 547 "pikchr.y"
2401 { pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2402 #line 2427 "pikchr.c"
2403 break;
2404 case 29: /* attribute ::= go direction expr PERCENT */
 
 
 
 
 
2405 #line 550 "pikchr.y"
2406 { pik_add_direction(p,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy241,1);}
2407 #line 2432 "pikchr.c"
2408 break;
2409 case 30: /* attribute ::= go direction expr */
2410 #line 551 "pikchr.y"
2411 { pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy241,0);}
2412 #line 2437 "pikchr.c"
2413 break;
2414 case 31: /* attribute ::= go direction */
2415 #line 552 "pikchr.y"
2416 { pik_add_direction(p,&yymsp[0].minor.yy0,0,0); }
2417 #line 2442 "pikchr.c"
2418 break;
2419 case 32: /* attribute ::= go direction even position */
2420 #line 553 "pikchr.y"
2421 {pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy187);}
2422 #line 2447 "pikchr.c"
2423 break;
2424 case 33: /* attribute ::= CLOSE */
2425 #line 554 "pikchr.y"
2426 { pik_close_path(p,&yymsp[0].minor.yy0); }
2427 #line 2452 "pikchr.c"
2428 break;
2429 case 34: /* attribute ::= CHOP */
2430 #line 555 "pikchr.y"
2431 { p->cur->bChop = 1; }
2432 #line 2457 "pikchr.c"
2433 break;
2434 case 35: /* attribute ::= FROM position */
2435 #line 556 "pikchr.y"
2436 { pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy187); }
2437 #line 2462 "pikchr.c"
2438 break;
2439 case 36: /* attribute ::= TO position */
2440 #line 557 "pikchr.y"
2441 { pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy187); }
2442 #line 2467 "pikchr.c"
2443 break;
2444 case 37: /* attribute ::= THEN */
2445 #line 558 "pikchr.y"
2446 { pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2447 #line 2472 "pikchr.c"
2448 break;
2449 case 38: /* attribute ::= THEN expr HEADING expr */
2450 case 42: /* attribute ::= GO expr HEADING expr */ yytestcase(yyruleno==42);
2451 #line 560 "pikchr.y"
2452 {pik_move_hdg(p,&yymsp[-2].minor.yy241,&yymsp[-1].minor.yy0,yymsp[0].minor.yy241,0,&yymsp[-3].minor.yy0);}
2453 #line 2478 "pikchr.c"
2454 break;
2455 case 39: /* attribute ::= THEN HEADING expr */
2456 case 43: /* attribute ::= GO HEADING expr */ yytestcase(yyruleno==43);
2457 #line 561 "pikchr.y"
2458 {pik_move_hdg(p,0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy241,0,&yymsp[-2].minor.yy0);}
2459 #line 2484 "pikchr.c"
2460 break;
2461 case 40: /* attribute ::= THEN expr EDGEPT */
2462 case 44: /* attribute ::= GO expr EDGEPT */ yytestcase(yyruleno==44);
2463 #line 562 "pikchr.y"
2464 {pik_move_hdg(p,&yymsp[-1].minor.yy241,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);}
2465 #line 2490 "pikchr.c"
2466 break;
2467 case 41: /* attribute ::= THEN EDGEPT */
2468 case 45: /* attribute ::= GO EDGEPT */ yytestcase(yyruleno==45);
2469 #line 563 "pikchr.y"
2470 {pik_move_hdg(p,0,0,0,&yymsp[0].minor.yy0,&yymsp[-1].minor.yy0);}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2471 #line 2496 "pikchr.c"
2472 break;
2473 case 46: /* attribute ::= AT position */
2474 #line 569 "pikchr.y"
2475 { pik_set_at(p,0,&yymsp[0].minor.yy187,&yymsp[-1].minor.yy0); }
2476 #line 2501 "pikchr.c"
2477 break;
2478 case 47: /* attribute ::= SAME */
2479 #line 571 "pikchr.y"
2480 {pik_same(p,0,&yymsp[0].minor.yy0);}
2481 #line 2506 "pikchr.c"
2482 break;
2483 case 48: /* attribute ::= SAME AS object */
2484 #line 572 "pikchr.y"
2485 {pik_same(p,yymsp[0].minor.yy2,&yymsp[-2].minor.yy0);}
2486 #line 2511 "pikchr.c"
2487 break;
2488 case 49: /* attribute ::= STRING textposition */
2489 #line 573 "pikchr.y"
2490 {pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy86);}
2491 #line 2516 "pikchr.c"
2492 break;
2493 case 50: /* attribute ::= FIT */
2494 #line 574 "pikchr.y"
2495 {pik_size_to_fit(p,&yymsp[0].minor.yy0); }
2496 #line 2521 "pikchr.c"
2497 break;
2498 case 51: /* with ::= DOT_E edge AT position */
2499 case 52: /* with ::= edge AT position */ yytestcase(yyruleno==52);
2500 #line 584 "pikchr.y"
2501 { pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy187,&yymsp[-1].minor.yy0); }
2502 #line 2527 "pikchr.c"
2503 break;
2504 case 53: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2505 #line 588 "pikchr.y"
2506 {yylhsminor.yy0 = yymsp[0].minor.yy0;}
2507 #line 2532 "pikchr.c"
2508 yymsp[0].minor.yy0 = yylhsminor.yy0;
2509 break;
2510 case 54: /* boolproperty ::= CW */
2511 #line 599 "pikchr.y"
2512 {p->cur->cw = 1;}
2513 #line 2538 "pikchr.c"
2514 break;
2515 case 55: /* boolproperty ::= CCW */
2516 #line 600 "pikchr.y"
2517 {p->cur->cw = 0;}
2518 #line 2543 "pikchr.c"
2519 break;
2520 case 56: /* boolproperty ::= LARROW */
2521 #line 601 "pikchr.y"
2522 {p->cur->larrow=1; p->cur->rarrow=0; }
2523 #line 2548 "pikchr.c"
2524 break;
2525 case 57: /* boolproperty ::= RARROW */
2526 #line 602 "pikchr.y"
2527 {p->cur->larrow=0; p->cur->rarrow=1; }
2528 #line 2553 "pikchr.c"
2529 break;
2530 case 58: /* boolproperty ::= LRARROW */
2531 #line 603 "pikchr.y"
2532 {p->cur->larrow=1; p->cur->rarrow=1; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2533 #line 2558 "pikchr.c"
2534 break;
2535 case 59: /* boolproperty ::= INVIS */
2536 #line 604 "pikchr.y"
2537 {p->cur->sw = 0.0;}
2538 #line 2563 "pikchr.c"
2539 break;
2540 case 60: /* boolproperty ::= THICK */
2541 #line 605 "pikchr.y"
2542 {p->cur->sw *= 1.5;}
2543 #line 2568 "pikchr.c"
2544 break;
2545 case 61: /* boolproperty ::= THIN */
2546 #line 606 "pikchr.y"
2547 {p->cur->sw *= 0.67;}
2548 #line 2573 "pikchr.c"
2549 break;
2550 case 62: /* textposition ::= */
2551 #line 608 "pikchr.y"
2552 {yymsp[1].minor.yy86 = 0;}
2553 #line 2578 "pikchr.c"
2554 break;
2555 case 63: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
2556 #line 611 "pikchr.y"
2557 {yylhsminor.yy86 = pik_text_position(p,yymsp[-1].minor.yy86,&yymsp[0].minor.yy0);}
2558 #line 2583 "pikchr.c"
2559 yymsp[-1].minor.yy86 = yylhsminor.yy86;
2560 break;
2561 case 64: /* position ::= expr COMMA expr */
2562 #line 614 "pikchr.y"
2563 {yylhsminor.yy187.x=yymsp[-2].minor.yy241; yylhsminor.yy187.y=yymsp[0].minor.yy241;}
2564 #line 2589 "pikchr.c"
2565 yymsp[-2].minor.yy187 = yylhsminor.yy187;
2566 break;
2567 case 65: /* position ::= place PLUS expr COMMA expr */
 
 
 
 
 
 
2568 #line 616 "pikchr.y"
2569 {yylhsminor.yy187.x=yymsp[-4].minor.yy187.x+yymsp[-2].minor.yy241; yylhsminor.yy187.y=yymsp[-4].minor.yy187.y+yymsp[0].minor.yy241;}
2570 #line 2595 "pikchr.c"
2571 yymsp[-4].minor.yy187 = yylhsminor.yy187;
2572 break;
2573 case 66: /* position ::= place MINUS expr COMMA expr */
2574 #line 617 "pikchr.y"
2575 {yylhsminor.yy187.x=yymsp[-4].minor.yy187.x-yymsp[-2].minor.yy241; yylhsminor.yy187.y=yymsp[-4].minor.yy187.y-yymsp[0].minor.yy241;}
2576 #line 2601 "pikchr.c"
2577 yymsp[-4].minor.yy187 = yylhsminor.yy187;
2578 break;
2579 case 67: /* position ::= place PLUS LP expr COMMA expr RP */
2580 #line 619 "pikchr.y"
2581 {yylhsminor.yy187.x=yymsp[-6].minor.yy187.x+yymsp[-3].minor.yy241; yylhsminor.yy187.y=yymsp[-6].minor.yy187.y+yymsp[-1].minor.yy241;}
2582 #line 2607 "pikchr.c"
2583 yymsp[-6].minor.yy187 = yylhsminor.yy187;
2584 break;
2585 case 68: /* position ::= place MINUS LP expr COMMA expr RP */
2586 #line 621 "pikchr.y"
2587 {yylhsminor.yy187.x=yymsp[-6].minor.yy187.x-yymsp[-3].minor.yy241; yylhsminor.yy187.y=yymsp[-6].minor.yy187.y-yymsp[-1].minor.yy241;}
2588 #line 2613 "pikchr.c"
2589 yymsp[-6].minor.yy187 = yylhsminor.yy187;
2590 break;
2591 case 69: /* position ::= LP position COMMA position RP */
2592 #line 622 "pikchr.y"
2593 {yymsp[-4].minor.yy187.x=yymsp[-3].minor.yy187.x; yymsp[-4].minor.yy187.y=yymsp[-1].minor.yy187.y;}
2594 #line 2619 "pikchr.c"
2595 break;
2596 case 70: /* position ::= LP position RP */
2597 #line 623 "pikchr.y"
2598 {yymsp[-2].minor.yy187=yymsp[-1].minor.yy187;}
2599 #line 2624 "pikchr.c"
2600 break;
2601 case 71: /* position ::= expr between position AND position */
2602 #line 625 "pikchr.y"
2603 {yylhsminor.yy187 = pik_position_between(p,yymsp[-4].minor.yy241,yymsp[-2].minor.yy187,yymsp[0].minor.yy187);}
2604 #line 2629 "pikchr.c"
2605 yymsp[-4].minor.yy187 = yylhsminor.yy187;
2606 break;
2607 case 72: /* position ::= expr ABOVE position */
2608 #line 626 "pikchr.y"
2609 {yylhsminor.yy187=yymsp[0].minor.yy187; yylhsminor.yy187.y += yymsp[-2].minor.yy241;}
2610 #line 2635 "pikchr.c"
2611 yymsp[-2].minor.yy187 = yylhsminor.yy187;
2612 break;
2613 case 73: /* position ::= expr BELOW position */
 
 
2614 #line 627 "pikchr.y"
2615 {yylhsminor.yy187=yymsp[0].minor.yy187; yylhsminor.yy187.y -= yymsp[-2].minor.yy241;}
2616 #line 2641 "pikchr.c"
2617 yymsp[-2].minor.yy187 = yylhsminor.yy187;
2618 break;
2619 case 74: /* position ::= expr LEFT OF position */
2620 #line 628 "pikchr.y"
2621 {yylhsminor.yy187=yymsp[0].minor.yy187; yylhsminor.yy187.x -= yymsp[-3].minor.yy241;}
2622 #line 2647 "pikchr.c"
2623 yymsp[-3].minor.yy187 = yylhsminor.yy187;
2624 break;
2625 case 75: /* position ::= expr RIGHT OF position */
2626 #line 629 "pikchr.y"
2627 {yylhsminor.yy187=yymsp[0].minor.yy187; yylhsminor.yy187.x += yymsp[-3].minor.yy241;}
2628 #line 2653 "pikchr.c"
2629 yymsp[-3].minor.yy187 = yylhsminor.yy187;
2630 break;
2631 case 76: /* position ::= expr EDGEPT OF position */
2632 #line 631 "pikchr.y"
2633 {yylhsminor.yy187 = pik_position_at_hdg(p,yymsp[-3].minor.yy241,&yymsp[-2].minor.yy0,yymsp[0].minor.yy187);}
2634 #line 2659 "pikchr.c"
2635 yymsp[-3].minor.yy187 = yylhsminor.yy187;
2636 break;
2637 case 77: /* position ::= expr HEADING expr FROM position */
2638 #line 633 "pikchr.y"
2639 {yylhsminor.yy187 = pik_position_at_angle(p,yymsp[-4].minor.yy241,yymsp[-2].minor.yy241,yymsp[0].minor.yy187);}
2640 #line 2665 "pikchr.c"
2641 yymsp[-4].minor.yy187 = yylhsminor.yy187;
2642 break;
2643 case 78: /* place ::= object */
 
 
 
 
 
 
 
 
 
 
 
 
2644 #line 639 "pikchr.y"
2645 {yylhsminor.yy187 = pik_place_of_elem(p,yymsp[0].minor.yy2,0);}
2646 #line 2671 "pikchr.c"
2647 yymsp[0].minor.yy187 = yylhsminor.yy187;
2648 break;
2649 case 79: /* place ::= object DOT_E edge */
2650 case 80: /* place ::= object DOT_L START */ yytestcase(yyruleno==80);
2651 case 81: /* place ::= object DOT_L END */ yytestcase(yyruleno==81);
2652 #line 640 "pikchr.y"
2653 {yylhsminor.yy187 = pik_place_of_elem(p,yymsp[-2].minor.yy2,&yymsp[0].minor.yy0);}
2654 #line 2679 "pikchr.c"
2655 yymsp[-2].minor.yy187 = yylhsminor.yy187;
2656 break;
2657 case 82: /* place ::= START OF object */
2658 case 83: /* place ::= END OF object */ yytestcase(yyruleno==83);
2659 case 84: /* place ::= edge OF object */ yytestcase(yyruleno==84);
2660 #line 643 "pikchr.y"
2661 {yylhsminor.yy187 = pik_place_of_elem(p,yymsp[0].minor.yy2,&yymsp[-2].minor.yy0);}
2662 #line 2687 "pikchr.c"
2663 yymsp[-2].minor.yy187 = yylhsminor.yy187;
2664 break;
2665 case 85: /* place ::= NTH VERTEX OF object */
2666 #line 646 "pikchr.y"
2667 {yylhsminor.yy187 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy2);}
2668 #line 2693 "pikchr.c"
2669 yymsp[-3].minor.yy187 = yylhsminor.yy187;
2670 break;
2671 case 86: /* object ::= nth */
2672 #line 649 "pikchr.y"
2673 {yylhsminor.yy2 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2674 #line 2699 "pikchr.c"
2675 yymsp[0].minor.yy2 = yylhsminor.yy2;
2676 break;
2677 case 87: /* object ::= nth OF|IN object */
2678 #line 650 "pikchr.y"
2679 {yylhsminor.yy2 = pik_find_nth(p,yymsp[0].minor.yy2,&yymsp[-2].minor.yy0);}
2680 #line 2705 "pikchr.c"
2681 yymsp[-2].minor.yy2 = yylhsminor.yy2;
2682 break;
2683 case 88: /* objectname ::= PLACENAME */
2684 #line 652 "pikchr.y"
2685 {yylhsminor.yy2 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2686 #line 2711 "pikchr.c"
2687 yymsp[0].minor.yy2 = yylhsminor.yy2;
2688 break;
2689 case 89: /* objectname ::= objectname DOT_U PLACENAME */
2690 #line 654 "pikchr.y"
2691 {yylhsminor.yy2 = pik_find_byname(p,yymsp[-2].minor.yy2,&yymsp[0].minor.yy0);}
2692 #line 2717 "pikchr.c"
2693 yymsp[-2].minor.yy2 = yylhsminor.yy2;
2694 break;
2695 case 90: /* nth ::= NTH CLASSNAME */
2696 #line 656 "pikchr.y"
2697 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2698 #line 2723 "pikchr.c"
2699 yymsp[-1].minor.yy0 = yylhsminor.yy0;
2700 break;
2701 case 91: /* nth ::= NTH LAST CLASSNAME */
2702 #line 657 "pikchr.y"
2703 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2704 #line 2729 "pikchr.c"
2705 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2706 break;
2707 case 92: /* nth ::= LAST CLASSNAME */
2708 #line 658 "pikchr.y"
2709 {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2710 #line 2735 "pikchr.c"
2711 break;
2712 case 93: /* nth ::= LAST */
2713 #line 659 "pikchr.y"
2714 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2715 #line 2740 "pikchr.c"
2716 yymsp[0].minor.yy0 = yylhsminor.yy0;
2717 break;
2718 case 94: /* nth ::= NTH LB RB */
2719 #line 660 "pikchr.y"
2720 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2721 #line 2746 "pikchr.c"
2722 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2723 break;
2724 case 95: /* nth ::= NTH LAST LB RB */
2725 #line 661 "pikchr.y"
2726 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2727 #line 2752 "pikchr.c"
2728 yymsp[-3].minor.yy0 = yylhsminor.yy0;
2729 break;
2730 case 96: /* nth ::= LAST LB RB */
2731 #line 662 "pikchr.y"
2732 {yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2733 #line 2758 "pikchr.c"
2734 break;
2735 case 97: /* expr ::= expr PLUS expr */
2736 #line 664 "pikchr.y"
2737 {yylhsminor.yy241=yymsp[-2].minor.yy241+yymsp[0].minor.yy241;}
2738 #line 2763 "pikchr.c"
2739 yymsp[-2].minor.yy241 = yylhsminor.yy241;
2740 break;
2741 case 98: /* expr ::= expr MINUS expr */
2742 #line 665 "pikchr.y"
2743 {yylhsminor.yy241=yymsp[-2].minor.yy241-yymsp[0].minor.yy241;}
2744 #line 2769 "pikchr.c"
2745 yymsp[-2].minor.yy241 = yylhsminor.yy241;
2746 break;
2747 case 99: /* expr ::= expr STAR expr */
2748 #line 666 "pikchr.y"
2749 {yylhsminor.yy241=yymsp[-2].minor.yy241*yymsp[0].minor.yy241;}
2750 #line 2775 "pikchr.c"
2751 yymsp[-2].minor.yy241 = yylhsminor.yy241;
2752 break;
2753 case 100: /* expr ::= expr SLASH expr */
2754 #line 667 "pikchr.y"
2755 {
2756 if( yymsp[0].minor.yy241==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy241 = 0.0; }
2757 else{ yylhsminor.yy241 = yymsp[-2].minor.yy241/yymsp[0].minor.yy241; }
2758 }
2759 #line 2784 "pikchr.c"
2760 yymsp[-2].minor.yy241 = yylhsminor.yy241;
2761 break;
2762 case 101: /* expr ::= MINUS expr */
2763 #line 671 "pikchr.y"
2764 {yymsp[-1].minor.yy241=-yymsp[0].minor.yy241;}
2765 #line 2790 "pikchr.c"
2766 break;
2767 case 102: /* expr ::= PLUS expr */
2768 #line 672 "pikchr.y"
2769 {yymsp[-1].minor.yy241=yymsp[0].minor.yy241;}
2770 #line 2795 "pikchr.c"
2771 break;
2772 case 103: /* expr ::= LP expr RP */
2773 #line 673 "pikchr.y"
2774 {yymsp[-2].minor.yy241=yymsp[-1].minor.yy241;}
2775 #line 2800 "pikchr.c"
2776 break;
2777 case 104: /* expr ::= NUMBER */
2778 #line 674 "pikchr.y"
2779 {yylhsminor.yy241=pik_atof(p,&yymsp[0].minor.yy0);}
2780 #line 2805 "pikchr.c"
2781 yymsp[0].minor.yy241 = yylhsminor.yy241;
2782 break;
2783 case 105: /* expr ::= ID */
2784 #line 675 "pikchr.y"
2785 {yylhsminor.yy241=pik_get_var(p,&yymsp[0].minor.yy0);}
2786 #line 2811 "pikchr.c"
2787 yymsp[0].minor.yy241 = yylhsminor.yy241;
2788 break;
2789 case 106: /* expr ::= FUNC1 LP expr RP */
2790 #line 676 "pikchr.y"
2791 {yylhsminor.yy241 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy241,0.0);}
2792 #line 2817 "pikchr.c"
2793 yymsp[-3].minor.yy241 = yylhsminor.yy241;
2794 break;
2795 case 107: /* expr ::= FUNC2 LP expr COMMA expr RP */
2796 #line 677 "pikchr.y"
2797 {yylhsminor.yy241 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy241,yymsp[-1].minor.yy241);}
2798 #line 2823 "pikchr.c"
2799 yymsp[-5].minor.yy241 = yylhsminor.yy241;
2800 break;
2801 case 108: /* expr ::= object DOT_L locproperty */
2802 case 109: /* expr ::= object DOT_L numproperty */ yytestcase(yyruleno==109);
2803 case 110: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==110);
2804 case 111: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==111);
2805 #line 679 "pikchr.y"
2806 {yylhsminor.yy241=pik_property_of(p,yymsp[-2].minor.yy2,&yymsp[0].minor.yy0);}
2807 #line 2832 "pikchr.c"
2808 yymsp[-2].minor.yy241 = yylhsminor.yy241;
2809 break;
2810 case 112: /* expr ::= object DOT_E edge DOT_L X */
2811 #line 683 "pikchr.y"
2812 {yylhsminor.yy241=pik_place_of_elem(p,yymsp[-4].minor.yy2,&yymsp[-2].minor.yy0).x;}
2813 #line 2838 "pikchr.c"
2814 yymsp[-4].minor.yy241 = yylhsminor.yy241;
2815 break;
2816 case 113: /* expr ::= object DOT_E edge DOT_L Y */
2817 #line 684 "pikchr.y"
2818 {yylhsminor.yy241=pik_place_of_elem(p,yymsp[-4].minor.yy2,&yymsp[-2].minor.yy0).y;}
2819 #line 2844 "pikchr.c"
2820 yymsp[-4].minor.yy241 = yylhsminor.yy241;
2821 break;
2822 case 114: /* expr ::= LP locproperty OF object RP */
2823 case 115: /* expr ::= LP dashproperty OF object RP */ yytestcase(yyruleno==115);
2824 case 116: /* expr ::= LP numproperty OF object RP */ yytestcase(yyruleno==116);
2825 case 117: /* expr ::= LP colorproperty OF object RP */ yytestcase(yyruleno==117);
2826 #line 685 "pikchr.y"
2827 {yymsp[-4].minor.yy241=pik_property_of(p,yymsp[-1].minor.yy2,&yymsp[-3].minor.yy0);}
2828 #line 2853 "pikchr.c"
2829 break;
2830 case 118: /* expr ::= NTH VERTEX OF object DOT_L X */
2831 #line 691 "pikchr.y"
2832 {yylhsminor.yy241 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy2).x;}
2833 #line 2858 "pikchr.c"
2834 yymsp[-5].minor.yy241 = yylhsminor.yy241;
2835 break;
2836 case 119: /* expr ::= NTH VERTEX OF object DOT_L Y */
2837 #line 693 "pikchr.y"
2838 {yylhsminor.yy241 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy2).y;}
2839 #line 2864 "pikchr.c"
2840 yymsp[-5].minor.yy241 = yylhsminor.yy241;
2841 break;
2842 default:
2843 /* (120) lvalue ::= ID */ yytestcase(yyruleno==120);
2844 /* (121) lvalue ::= FILL */ yytestcase(yyruleno==121);
2845 /* (122) lvalue ::= COLOR */ yytestcase(yyruleno==122);
2846 /* (123) lvalue ::= THICKNESS */ yytestcase(yyruleno==123);
2847 /* (124) rvalue ::= expr */ yytestcase(yyruleno==124);
2848 /* (125) print ::= PRINT */ yytestcase(yyruleno==125);
2849 /* (126) prlist ::= pritem (OPTIMIZED OUT) */ assert(yyruleno!=126);
2850 /* (127) prlist ::= prlist prsep pritem */ yytestcase(yyruleno==127);
2851 /* (128) direction ::= UP */ yytestcase(yyruleno==128);
2852 /* (129) direction ::= DOWN */ yytestcase(yyruleno==129);
2853 /* (130) direction ::= LEFT */ yytestcase(yyruleno==130);
2854 /* (131) direction ::= RIGHT */ yytestcase(yyruleno==131);
2855 /* (132) attribute_list ::= alist */ yytestcase(yyruleno==132);
2856 /* (133) alist ::= */ yytestcase(yyruleno==133);
2857 /* (134) alist ::= alist attribute */ yytestcase(yyruleno==134);
2858 /* (135) attribute ::= boolproperty (OPTIMIZED OUT) */ assert(yyruleno!=135);
2859 /* (136) attribute ::= WITH withclause */ yytestcase(yyruleno==136);
2860 /* (137) go ::= GO */ yytestcase(yyruleno==137);
2861 /* (138) go ::= */ yytestcase(yyruleno==138);
2862 /* (139) even ::= UNTIL EVEN WITH */ yytestcase(yyruleno==139);
2863 /* (140) even ::= EVEN WITH */ yytestcase(yyruleno==140);
2864 /* (141) withclause ::= with (OPTIMIZED OUT) */ assert(yyruleno!=141);
2865 /* (142) withclause ::= withclause AND with */ yytestcase(yyruleno==142);
2866 /* (143) dashproperty ::= DOTTED */ yytestcase(yyruleno==143);
2867 /* (144) dashproperty ::= DASHED */ yytestcase(yyruleno==144);
2868 /* (145) colorproperty ::= FILL */ yytestcase(yyruleno==145);
2869 /* (146) colorproperty ::= COLOR */ yytestcase(yyruleno==146);
2870 /* (147) position ::= place */ yytestcase(yyruleno==147);
2871 /* (148) between ::= WAY BETWEEN */ yytestcase(yyruleno==148);
2872 /* (149) between ::= BETWEEN */ yytestcase(yyruleno==149);
2873 /* (150) between ::= OF THE WAY BETWEEN */ yytestcase(yyruleno==150);
2874 /* (151) object ::= objectname */ yytestcase(yyruleno==151);
2875 /* (152) locproperty ::= X|Y */ yytestcase(yyruleno==152);
2876 /* (153) edge ::= EDGEPT */ yytestcase(yyruleno==153);
2877 /* (154) edge ::= TOP */ yytestcase(yyruleno==154);
2878 /* (155) edge ::= BOTTOM */ yytestcase(yyruleno==155);
2879 /* (156) edge ::= LEFT */ yytestcase(yyruleno==156);
2880 /* (157) edge ::= RIGHT */ yytestcase(yyruleno==157);
2881 break;
2882 /********** End reduce actions ************************************************/
2883 };
2884 assert( yyruleno<sizeof(yyRuleInfoLhs)/sizeof(yyRuleInfoLhs[0]) );
2885 yygoto = yyRuleInfoLhs[yyruleno];
@@ -2856,18 +2935,18 @@
2935 ){
2936 pik_parserARG_FETCH
2937 pik_parserCTX_FETCH
2938 #define TOKEN yyminor
2939 /************ Begin %syntax_error code ****************************************/
2940 #line 468 "pikchr.y"
2941
2942 if( TOKEN.z && TOKEN.z[0] ){
2943 pik_error(p, &TOKEN, "syntax error");
2944 }else{
2945 pik_error(p, 0, "syntax error");
2946 }
2947 #line 2972 "pikchr.c"
2948 /************ End %syntax_error code ******************************************/
2949 pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
2950 pik_parserCTX_STORE
2951 }
2952
@@ -3096,11 +3175,11 @@
3175 #else
3176 (void)iToken;
3177 return 0;
3178 #endif
3179 }
3180 #line 703 "pikchr.y"
3181
3182
3183
3184 /* Chart of the 140 official HTML color names with their
3185 ** corresponding RGB value.
@@ -4972,11 +5051,11 @@
5051 ** resetting the ptTo.
5052 */
5053 static void pik_then(Pik *p, PToken *pToken, PElem *pElem){
5054 int n;
5055 if( !pElem->type->isLine ){
5056 pik_error(p, pToken, "use with line-oriented objects only");
5057 return;
5058 }
5059 n = p->nTPath - 1;
5060 if( n<1 ){
5061 pik_error(p, pToken, "no prior path points");
@@ -5021,11 +5100,11 @@
5100 int n;
5101 int dir;
5102 PNum scale = 1.0;
5103 if( !pElem->type->isLine ){
5104 if( pDir ){
5105 pik_error(p, pDir, "use with line-oriented objects only");
5106 }else{
5107 PToken x = pik_next_semantic_token(p, &pElem->errTok);
5108 pik_error(p, &x, "syntax error");
5109 }
5110 return;
@@ -5069,10 +5148,70 @@
5148 p->mTPath |= 1;
5149 break;
5150 }
5151 pElem->outDir = dir;
5152 }
5153
5154 /* Process a movement attribute of one of these forms:
5155 **
5156 ** pDist pHdgKW rHdg pEdgept
5157 ** GO distance HEADING angle
5158 ** GO HEADING angle
5159 ** GO distance compasspoint
5160 ** GO compasspoint
5161 */
5162 static void pik_move_hdg(
5163 Pik *p, /* The Pikchr context */
5164 PNum *pDist, /* Distance to move. NULL means standard distance */
5165 PToken *pHeading, /* "heading" keyword if present */
5166 PNum rHdg, /* Angle argument to "heading" keyword */
5167 PToken *pEdgept, /* EDGEPT keyword "ne", "sw", etc... */
5168 PToken *pErr /* Token to use for error messages */
5169 ){
5170 PElem *pElem = p->cur;
5171 int n;
5172 PNum rDist;
5173 if( !pElem->type->isLine ){
5174 pik_error(p, pErr, "use with line-oriented objects only");
5175 return;
5176 }
5177 if( pDist ){
5178 rDist = *pDist;
5179 }else{
5180 rDist = pik_value(p, "linewid", 7, 0);
5181 }
5182 do{
5183 n = pik_next_rpath(p, pErr);
5184 }while( n<1 );
5185 if( pHeading ){
5186 if( rHdg<0.0 || rHdg>360.0 ){
5187 pik_error(p, pHeading, "headings should be between 0 and 360");
5188 return;
5189 }
5190 }else if( pEdgept->eEdge==CP_C ){
5191 pik_error(p, pEdgept, "syntax error");
5192 return;
5193 }else{
5194 rHdg = pik_hdg_angle[pEdgept->eEdge];
5195 }
5196 if( rHdg<=45.0 ){
5197 pElem->outDir = DIR_UP;
5198 }else if( rHdg<=135.0 ){
5199 pElem->outDir = DIR_RIGHT;
5200 }else if( rHdg<=225.0 ){
5201 pElem->outDir = DIR_DOWN;
5202 }else if( rHdg<=315.0 ){
5203 pElem->outDir = DIR_LEFT;
5204 }else{
5205 pElem->outDir = DIR_UP;
5206 }
5207 rHdg *= 0.017453292519943295769; /* degrees to radians */
5208 p->aTPath[n].x += rDist*sin(rHdg);
5209 p->aTPath[n].y += rDist*cos(rHdg);
5210 p->mTPath = 2;
5211 }
5212
5213
5214 /* Process a movement attribute of the form "right until even with ..."
5215 **
5216 ** pDir is the first keyword, "right" or "left" or "up" or "down".
5217 ** The movement is in that direction until its closest approach to
@@ -5080,11 +5219,11 @@
5219 */
5220 static void pik_evenwith(Pik *p, PToken *pDir, PPoint *pPlace){
5221 PElem *pElem = p->cur;
5222 int n;
5223 if( !pElem->type->isLine ){
5224 pik_error(p, pDir, "use with line-oriented objects only");
5225 return;
5226 }
5227 n = p->nTPath - 1;
5228 if( p->thenFlag || p->mTPath==3 || n==0 ){
5229 n = pik_next_rpath(p, pDir);
@@ -6137,10 +6276,11 @@
6276 { "even", 4, T_EVEN, 0, 0 },
6277 { "fill", 4, T_FILL, 0, 0 },
6278 { "first", 5, T_NTH, 0, 0 },
6279 { "fit", 3, T_FIT, 0, 0 },
6280 { "from", 4, T_FROM, 0, 0 },
6281 { "go", 2, T_GO, 0, 0 },
6282 { "heading", 7, T_HEADING, 0, 0 },
6283 { "height", 6, T_HEIGHT, 0, 0 },
6284 { "ht", 2, T_HEIGHT, 0, 0 },
6285 { "in", 2, T_IN, 0, 0 },
6286 { "int", 3, T_FUNC1, FN_INT, 0 },
@@ -6663,6 +6803,6 @@
6803 printf("</body></html>\n");
6804 return 0;
6805 }
6806 #endif /* PIKCHR_SHELL */
6807
6808 #line 6833 "pikchr.c"
6809

Keyboard Shortcuts

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