2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
|
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
|
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
|
** { ... } // User supplied code
** #line <lineno> <thisfile>
** break;
*/
/********** Begin reduce actions **********************************************/
YYMINORTYPE yylhsminor;
case 0: /* document ::= statement_list */
#line 521 "pikchr.y"
#line 526 "pikchr.y"
{pik_render(p,yymsp[0].minor.yy119);}
#line 2422 "pikchr.c"
#line 2427 "pikchr.c"
break;
case 1: /* statement_list ::= statement */
#line 524 "pikchr.y"
#line 529 "pikchr.y"
{ yylhsminor.yy119 = pik_elist_append(p,0,yymsp[0].minor.yy38); }
#line 2427 "pikchr.c"
#line 2432 "pikchr.c"
yymsp[0].minor.yy119 = yylhsminor.yy119;
break;
case 2: /* statement_list ::= statement_list EOL statement */
#line 526 "pikchr.y"
#line 531 "pikchr.y"
{ yylhsminor.yy119 = pik_elist_append(p,yymsp[-2].minor.yy119,yymsp[0].minor.yy38); }
#line 2433 "pikchr.c"
#line 2438 "pikchr.c"
yymsp[-2].minor.yy119 = yylhsminor.yy119;
break;
case 3: /* statement ::= */
#line 529 "pikchr.y"
#line 534 "pikchr.y"
{ yymsp[1].minor.yy38 = 0; }
#line 2439 "pikchr.c"
#line 2444 "pikchr.c"
break;
case 4: /* statement ::= direction */
#line 530 "pikchr.y"
#line 535 "pikchr.y"
{ pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy38=0; }
#line 2444 "pikchr.c"
#line 2449 "pikchr.c"
yymsp[0].minor.yy38 = yylhsminor.yy38;
break;
case 5: /* statement ::= lvalue ASSIGN rvalue */
#line 531 "pikchr.y"
#line 536 "pikchr.y"
{pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy265,&yymsp[-1].minor.yy0); yylhsminor.yy38=0;}
#line 2450 "pikchr.c"
#line 2455 "pikchr.c"
yymsp[-2].minor.yy38 = yylhsminor.yy38;
break;
case 6: /* statement ::= PLACENAME COLON unnamed_statement */
#line 533 "pikchr.y"
#line 538 "pikchr.y"
{ yylhsminor.yy38 = yymsp[0].minor.yy38; pik_elem_setname(p,yymsp[0].minor.yy38,&yymsp[-2].minor.yy0); }
#line 2456 "pikchr.c"
#line 2461 "pikchr.c"
yymsp[-2].minor.yy38 = yylhsminor.yy38;
break;
case 7: /* statement ::= PLACENAME COLON position */
#line 535 "pikchr.y"
#line 540 "pikchr.y"
{ yylhsminor.yy38 = pik_elem_new(p,0,0,0);
if(yylhsminor.yy38){ yylhsminor.yy38->ptAt = yymsp[0].minor.yy43; pik_elem_setname(p,yylhsminor.yy38,&yymsp[-2].minor.yy0); }}
#line 2463 "pikchr.c"
#line 2468 "pikchr.c"
yymsp[-2].minor.yy38 = yylhsminor.yy38;
break;
case 8: /* statement ::= unnamed_statement */
#line 537 "pikchr.y"
#line 542 "pikchr.y"
{yylhsminor.yy38 = yymsp[0].minor.yy38;}
#line 2469 "pikchr.c"
#line 2474 "pikchr.c"
yymsp[0].minor.yy38 = yylhsminor.yy38;
break;
case 9: /* statement ::= print prlist */
#line 538 "pikchr.y"
#line 543 "pikchr.y"
{pik_append(p,"<br>\n",5); yymsp[-1].minor.yy38=0;}
#line 2475 "pikchr.c"
#line 2480 "pikchr.c"
break;
case 10: /* statement ::= ASSERT LP expr EQ expr RP */
#line 543 "pikchr.y"
#line 548 "pikchr.y"
{yymsp[-5].minor.yy38=pik_assert(p,yymsp[-3].minor.yy265,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy265);}
#line 2480 "pikchr.c"
#line 2485 "pikchr.c"
break;
case 11: /* statement ::= ASSERT LP position EQ position RP */
#line 545 "pikchr.y"
#line 550 "pikchr.y"
{yymsp[-5].minor.yy38=pik_position_assert(p,&yymsp[-3].minor.yy43,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy43);}
#line 2485 "pikchr.c"
#line 2490 "pikchr.c"
break;
case 12: /* statement ::= DEFINE ID CODEBLOCK */
#line 546 "pikchr.y"
#line 551 "pikchr.y"
{yymsp[-2].minor.yy38=0; pik_add_macro(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);}
#line 2490 "pikchr.c"
#line 2495 "pikchr.c"
break;
case 13: /* rvalue ::= PLACENAME */
#line 557 "pikchr.y"
#line 562 "pikchr.y"
{yylhsminor.yy265 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
#line 2495 "pikchr.c"
#line 2500 "pikchr.c"
yymsp[0].minor.yy265 = yylhsminor.yy265;
break;
case 14: /* pritem ::= FILL */
case 15: /* pritem ::= COLOR */ yytestcase(yyruleno==15);
case 16: /* pritem ::= THICKNESS */ yytestcase(yyruleno==16);
#line 562 "pikchr.y"
#line 567 "pikchr.y"
{pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));}
#line 2503 "pikchr.c"
#line 2508 "pikchr.c"
break;
case 17: /* pritem ::= rvalue */
#line 565 "pikchr.y"
#line 570 "pikchr.y"
{pik_append_num(p,"",yymsp[0].minor.yy265);}
#line 2508 "pikchr.c"
#line 2513 "pikchr.c"
break;
case 18: /* pritem ::= STRING */
#line 566 "pikchr.y"
#line 571 "pikchr.y"
{pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
#line 2513 "pikchr.c"
#line 2518 "pikchr.c"
break;
case 19: /* prsep ::= COMMA */
#line 567 "pikchr.y"
#line 572 "pikchr.y"
{pik_append(p, " ", 1);}
#line 2518 "pikchr.c"
#line 2523 "pikchr.c"
break;
case 20: /* unnamed_statement ::= basetype attribute_list */
#line 570 "pikchr.y"
#line 575 "pikchr.y"
{yylhsminor.yy38 = yymsp[-1].minor.yy38; pik_after_adding_attributes(p,yylhsminor.yy38);}
#line 2523 "pikchr.c"
#line 2528 "pikchr.c"
yymsp[-1].minor.yy38 = yylhsminor.yy38;
break;
case 21: /* basetype ::= CLASSNAME */
#line 572 "pikchr.y"
#line 577 "pikchr.y"
{yylhsminor.yy38 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
#line 2529 "pikchr.c"
#line 2534 "pikchr.c"
yymsp[0].minor.yy38 = yylhsminor.yy38;
break;
case 22: /* basetype ::= STRING textposition */
#line 574 "pikchr.y"
#line 579 "pikchr.y"
{yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy196; yylhsminor.yy38 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
#line 2535 "pikchr.c"
#line 2540 "pikchr.c"
yymsp[-1].minor.yy38 = yylhsminor.yy38;
break;
case 23: /* basetype ::= LB savelist statement_list RB */
#line 576 "pikchr.y"
#line 581 "pikchr.y"
{ p->list = yymsp[-2].minor.yy119; yymsp[-3].minor.yy38 = pik_elem_new(p,0,0,yymsp[-1].minor.yy119); if(yymsp[-3].minor.yy38) yymsp[-3].minor.yy38->errTok = yymsp[0].minor.yy0; }
#line 2541 "pikchr.c"
#line 2546 "pikchr.c"
break;
case 24: /* savelist ::= */
#line 581 "pikchr.y"
#line 586 "pikchr.y"
{yymsp[1].minor.yy119 = p->list; p->list = 0;}
#line 2546 "pikchr.c"
#line 2551 "pikchr.c"
break;
case 25: /* relexpr ::= expr */
#line 588 "pikchr.y"
#line 593 "pikchr.y"
{yylhsminor.yy200.rAbs = yymsp[0].minor.yy265; yylhsminor.yy200.rRel = 0;}
#line 2551 "pikchr.c"
#line 2556 "pikchr.c"
yymsp[0].minor.yy200 = yylhsminor.yy200;
break;
case 26: /* relexpr ::= expr PERCENT */
#line 589 "pikchr.y"
#line 594 "pikchr.y"
{yylhsminor.yy200.rAbs = 0; yylhsminor.yy200.rRel = yymsp[-1].minor.yy265/100;}
#line 2557 "pikchr.c"
#line 2562 "pikchr.c"
yymsp[-1].minor.yy200 = yylhsminor.yy200;
break;
case 27: /* optrelexpr ::= */
#line 591 "pikchr.y"
#line 596 "pikchr.y"
{yymsp[1].minor.yy200.rAbs = 0; yymsp[1].minor.yy200.rRel = 1.0;}
#line 2563 "pikchr.c"
#line 2568 "pikchr.c"
break;
case 28: /* attribute_list ::= relexpr alist */
#line 593 "pikchr.y"
#line 598 "pikchr.y"
{pik_add_direction(p,0,&yymsp[-1].minor.yy200);}
#line 2568 "pikchr.c"
#line 2573 "pikchr.c"
break;
case 29: /* attribute ::= numproperty relexpr */
#line 597 "pikchr.y"
#line 602 "pikchr.y"
{ pik_set_numprop(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy200); }
#line 2573 "pikchr.c"
#line 2578 "pikchr.c"
break;
case 30: /* attribute ::= dashproperty expr */
#line 598 "pikchr.y"
#line 603 "pikchr.y"
{ pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy265); }
#line 2578 "pikchr.c"
#line 2583 "pikchr.c"
break;
case 31: /* attribute ::= dashproperty */
#line 599 "pikchr.y"
#line 604 "pikchr.y"
{ pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
#line 2583 "pikchr.c"
#line 2588 "pikchr.c"
break;
case 32: /* attribute ::= colorproperty rvalue */
#line 600 "pikchr.y"
#line 605 "pikchr.y"
{ pik_set_clrprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy265); }
#line 2588 "pikchr.c"
#line 2593 "pikchr.c"
break;
case 33: /* attribute ::= go direction optrelexpr */
#line 601 "pikchr.y"
#line 606 "pikchr.y"
{ pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy200);}
#line 2593 "pikchr.c"
#line 2598 "pikchr.c"
break;
case 34: /* attribute ::= go direction even position */
#line 602 "pikchr.y"
#line 607 "pikchr.y"
{pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy43);}
#line 2598 "pikchr.c"
#line 2603 "pikchr.c"
break;
case 35: /* attribute ::= CLOSE */
#line 603 "pikchr.y"
#line 608 "pikchr.y"
{ pik_close_path(p,&yymsp[0].minor.yy0); }
#line 2603 "pikchr.c"
#line 2608 "pikchr.c"
break;
case 36: /* attribute ::= CHOP */
#line 604 "pikchr.y"
#line 609 "pikchr.y"
{ p->cur->bChop = 1; }
#line 2608 "pikchr.c"
#line 2613 "pikchr.c"
break;
case 37: /* attribute ::= FROM position */
#line 605 "pikchr.y"
#line 610 "pikchr.y"
{ pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy43); }
#line 2613 "pikchr.c"
#line 2618 "pikchr.c"
break;
case 38: /* attribute ::= TO position */
#line 606 "pikchr.y"
#line 611 "pikchr.y"
{ pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy43); }
#line 2618 "pikchr.c"
#line 2623 "pikchr.c"
break;
case 39: /* attribute ::= THEN */
#line 607 "pikchr.y"
#line 612 "pikchr.y"
{ pik_then(p, &yymsp[0].minor.yy0, p->cur); }
#line 2623 "pikchr.c"
#line 2628 "pikchr.c"
break;
case 40: /* attribute ::= THEN optrelexpr HEADING expr */
case 42: /* attribute ::= GO optrelexpr HEADING expr */ yytestcase(yyruleno==42);
#line 609 "pikchr.y"
#line 614 "pikchr.y"
{pik_move_hdg(p,&yymsp[-2].minor.yy200,&yymsp[-1].minor.yy0,yymsp[0].minor.yy265,0,&yymsp[-3].minor.yy0);}
#line 2629 "pikchr.c"
#line 2634 "pikchr.c"
break;
case 41: /* attribute ::= THEN optrelexpr EDGEPT */
case 43: /* attribute ::= GO optrelexpr EDGEPT */ yytestcase(yyruleno==43);
#line 610 "pikchr.y"
#line 615 "pikchr.y"
{pik_move_hdg(p,&yymsp[-1].minor.yy200,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);}
#line 2635 "pikchr.c"
#line 2640 "pikchr.c"
break;
case 44: /* attribute ::= AT position */
#line 615 "pikchr.y"
#line 620 "pikchr.y"
{ pik_set_at(p,0,&yymsp[0].minor.yy43,&yymsp[-1].minor.yy0); }
#line 2640 "pikchr.c"
#line 2645 "pikchr.c"
break;
case 45: /* attribute ::= SAME */
#line 617 "pikchr.y"
#line 622 "pikchr.y"
{pik_same(p,0,&yymsp[0].minor.yy0);}
#line 2645 "pikchr.c"
#line 2650 "pikchr.c"
break;
case 46: /* attribute ::= SAME AS object */
#line 618 "pikchr.y"
#line 623 "pikchr.y"
{pik_same(p,yymsp[0].minor.yy38,&yymsp[-2].minor.yy0);}
#line 2650 "pikchr.c"
#line 2655 "pikchr.c"
break;
case 47: /* attribute ::= STRING textposition */
#line 619 "pikchr.y"
#line 624 "pikchr.y"
{pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy196);}
#line 2655 "pikchr.c"
#line 2660 "pikchr.c"
break;
case 48: /* attribute ::= FIT */
#line 620 "pikchr.y"
#line 625 "pikchr.y"
{pik_size_to_fit(p,&yymsp[0].minor.yy0,3); }
#line 2660 "pikchr.c"
#line 2665 "pikchr.c"
break;
case 49: /* attribute ::= BEHIND object */
#line 621 "pikchr.y"
#line 626 "pikchr.y"
{pik_behind(p,yymsp[0].minor.yy38);}
#line 2665 "pikchr.c"
#line 2670 "pikchr.c"
break;
case 50: /* withclause ::= DOT_E edge AT position */
case 51: /* withclause ::= edge AT position */ yytestcase(yyruleno==51);
#line 629 "pikchr.y"
#line 634 "pikchr.y"
{ pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy43,&yymsp[-1].minor.yy0); }
#line 2671 "pikchr.c"
#line 2676 "pikchr.c"
break;
case 52: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
#line 633 "pikchr.y"
#line 638 "pikchr.y"
{yylhsminor.yy0 = yymsp[0].minor.yy0;}
#line 2676 "pikchr.c"
#line 2681 "pikchr.c"
yymsp[0].minor.yy0 = yylhsminor.yy0;
break;
case 53: /* boolproperty ::= CW */
#line 644 "pikchr.y"
#line 649 "pikchr.y"
{p->cur->cw = 1;}
#line 2682 "pikchr.c"
#line 2687 "pikchr.c"
break;
case 54: /* boolproperty ::= CCW */
#line 645 "pikchr.y"
#line 650 "pikchr.y"
{p->cur->cw = 0;}
#line 2687 "pikchr.c"
#line 2692 "pikchr.c"
break;
case 55: /* boolproperty ::= LARROW */
#line 646 "pikchr.y"
#line 651 "pikchr.y"
{p->cur->larrow=1; p->cur->rarrow=0; }
#line 2692 "pikchr.c"
#line 2697 "pikchr.c"
break;
case 56: /* boolproperty ::= RARROW */
#line 647 "pikchr.y"
#line 652 "pikchr.y"
{p->cur->larrow=0; p->cur->rarrow=1; }
#line 2697 "pikchr.c"
#line 2702 "pikchr.c"
break;
case 57: /* boolproperty ::= LRARROW */
#line 648 "pikchr.y"
#line 653 "pikchr.y"
{p->cur->larrow=1; p->cur->rarrow=1; }
#line 2702 "pikchr.c"
#line 2707 "pikchr.c"
break;
case 58: /* boolproperty ::= INVIS */
#line 649 "pikchr.y"
#line 654 "pikchr.y"
{p->cur->sw = 0.0;}
#line 2707 "pikchr.c"
#line 2712 "pikchr.c"
break;
case 59: /* boolproperty ::= THICK */
#line 650 "pikchr.y"
#line 655 "pikchr.y"
{p->cur->sw *= 1.5;}
#line 2712 "pikchr.c"
#line 2717 "pikchr.c"
break;
case 60: /* boolproperty ::= THIN */
#line 651 "pikchr.y"
#line 656 "pikchr.y"
{p->cur->sw *= 0.67;}
#line 2717 "pikchr.c"
#line 2722 "pikchr.c"
break;
case 61: /* boolproperty ::= SOLID */
#line 652 "pikchr.y"
#line 657 "pikchr.y"
{p->cur->sw = pik_value(p,"thickness",9,0);
p->cur->dotted = p->cur->dashed = 0.0;}
#line 2723 "pikchr.c"
#line 2728 "pikchr.c"
break;
case 62: /* textposition ::= */
#line 655 "pikchr.y"
#line 660 "pikchr.y"
{yymsp[1].minor.yy196 = 0;}
#line 2728 "pikchr.c"
#line 2733 "pikchr.c"
break;
case 63: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */
#line 658 "pikchr.y"
#line 663 "pikchr.y"
{yylhsminor.yy196 = pik_text_position(yymsp[-1].minor.yy196,&yymsp[0].minor.yy0);}
#line 2733 "pikchr.c"
#line 2738 "pikchr.c"
yymsp[-1].minor.yy196 = yylhsminor.yy196;
break;
case 64: /* position ::= expr COMMA expr */
#line 661 "pikchr.y"
#line 666 "pikchr.y"
{yylhsminor.yy43.x=yymsp[-2].minor.yy265; yylhsminor.yy43.y=yymsp[0].minor.yy265;}
#line 2739 "pikchr.c"
#line 2744 "pikchr.c"
yymsp[-2].minor.yy43 = yylhsminor.yy43;
break;
case 65: /* position ::= place PLUS expr COMMA expr */
#line 663 "pikchr.y"
#line 668 "pikchr.y"
{yylhsminor.yy43.x=yymsp[-4].minor.yy43.x+yymsp[-2].minor.yy265; yylhsminor.yy43.y=yymsp[-4].minor.yy43.y+yymsp[0].minor.yy265;}
#line 2745 "pikchr.c"
#line 2750 "pikchr.c"
yymsp[-4].minor.yy43 = yylhsminor.yy43;
break;
case 66: /* position ::= place MINUS expr COMMA expr */
#line 664 "pikchr.y"
#line 669 "pikchr.y"
{yylhsminor.yy43.x=yymsp[-4].minor.yy43.x-yymsp[-2].minor.yy265; yylhsminor.yy43.y=yymsp[-4].minor.yy43.y-yymsp[0].minor.yy265;}
#line 2751 "pikchr.c"
#line 2756 "pikchr.c"
yymsp[-4].minor.yy43 = yylhsminor.yy43;
break;
case 67: /* position ::= place PLUS LP expr COMMA expr RP */
#line 666 "pikchr.y"
#line 671 "pikchr.y"
{yylhsminor.yy43.x=yymsp[-6].minor.yy43.x+yymsp[-3].minor.yy265; yylhsminor.yy43.y=yymsp[-6].minor.yy43.y+yymsp[-1].minor.yy265;}
#line 2757 "pikchr.c"
#line 2762 "pikchr.c"
yymsp[-6].minor.yy43 = yylhsminor.yy43;
break;
case 68: /* position ::= place MINUS LP expr COMMA expr RP */
#line 668 "pikchr.y"
#line 673 "pikchr.y"
{yylhsminor.yy43.x=yymsp[-6].minor.yy43.x-yymsp[-3].minor.yy265; yylhsminor.yy43.y=yymsp[-6].minor.yy43.y-yymsp[-1].minor.yy265;}
#line 2763 "pikchr.c"
#line 2768 "pikchr.c"
yymsp[-6].minor.yy43 = yylhsminor.yy43;
break;
case 69: /* position ::= LP position COMMA position RP */
#line 669 "pikchr.y"
#line 674 "pikchr.y"
{yymsp[-4].minor.yy43.x=yymsp[-3].minor.yy43.x; yymsp[-4].minor.yy43.y=yymsp[-1].minor.yy43.y;}
#line 2769 "pikchr.c"
#line 2774 "pikchr.c"
break;
case 70: /* position ::= LP position RP */
#line 670 "pikchr.y"
#line 675 "pikchr.y"
{yymsp[-2].minor.yy43=yymsp[-1].minor.yy43;}
#line 2774 "pikchr.c"
#line 2779 "pikchr.c"
break;
case 71: /* position ::= expr between position AND position */
#line 672 "pikchr.y"
#line 677 "pikchr.y"
{yylhsminor.yy43 = pik_position_between(yymsp[-4].minor.yy265,yymsp[-2].minor.yy43,yymsp[0].minor.yy43);}
#line 2779 "pikchr.c"
#line 2784 "pikchr.c"
yymsp[-4].minor.yy43 = yylhsminor.yy43;
break;
case 72: /* position ::= expr LT position COMMA position GT */
#line 674 "pikchr.y"
#line 679 "pikchr.y"
{yylhsminor.yy43 = pik_position_between(yymsp[-5].minor.yy265,yymsp[-3].minor.yy43,yymsp[-1].minor.yy43);}
#line 2785 "pikchr.c"
#line 2790 "pikchr.c"
yymsp[-5].minor.yy43 = yylhsminor.yy43;
break;
case 73: /* position ::= expr ABOVE position */
#line 675 "pikchr.y"
#line 680 "pikchr.y"
{yylhsminor.yy43=yymsp[0].minor.yy43; yylhsminor.yy43.y += yymsp[-2].minor.yy265;}
#line 2791 "pikchr.c"
#line 2796 "pikchr.c"
yymsp[-2].minor.yy43 = yylhsminor.yy43;
break;
case 74: /* position ::= expr BELOW position */
#line 676 "pikchr.y"
#line 681 "pikchr.y"
{yylhsminor.yy43=yymsp[0].minor.yy43; yylhsminor.yy43.y -= yymsp[-2].minor.yy265;}
#line 2797 "pikchr.c"
#line 2802 "pikchr.c"
yymsp[-2].minor.yy43 = yylhsminor.yy43;
break;
case 75: /* position ::= expr LEFT OF position */
#line 677 "pikchr.y"
#line 682 "pikchr.y"
{yylhsminor.yy43=yymsp[0].minor.yy43; yylhsminor.yy43.x -= yymsp[-3].minor.yy265;}
#line 2803 "pikchr.c"
#line 2808 "pikchr.c"
yymsp[-3].minor.yy43 = yylhsminor.yy43;
break;
case 76: /* position ::= expr RIGHT OF position */
#line 678 "pikchr.y"
#line 683 "pikchr.y"
{yylhsminor.yy43=yymsp[0].minor.yy43; yylhsminor.yy43.x += yymsp[-3].minor.yy265;}
#line 2809 "pikchr.c"
#line 2814 "pikchr.c"
yymsp[-3].minor.yy43 = yylhsminor.yy43;
break;
case 77: /* position ::= expr ON HEADING EDGEPT OF position */
#line 680 "pikchr.y"
#line 685 "pikchr.y"
{yylhsminor.yy43 = pik_position_at_hdg(yymsp[-5].minor.yy265,&yymsp[-2].minor.yy0,yymsp[0].minor.yy43);}
#line 2815 "pikchr.c"
#line 2820 "pikchr.c"
yymsp[-5].minor.yy43 = yylhsminor.yy43;
break;
case 78: /* position ::= expr HEADING EDGEPT OF position */
#line 682 "pikchr.y"
#line 687 "pikchr.y"
{yylhsminor.yy43 = pik_position_at_hdg(yymsp[-4].minor.yy265,&yymsp[-2].minor.yy0,yymsp[0].minor.yy43);}
#line 2821 "pikchr.c"
#line 2826 "pikchr.c"
yymsp[-4].minor.yy43 = yylhsminor.yy43;
break;
case 79: /* position ::= expr EDGEPT OF position */
#line 684 "pikchr.y"
#line 689 "pikchr.y"
{yylhsminor.yy43 = pik_position_at_hdg(yymsp[-3].minor.yy265,&yymsp[-2].minor.yy0,yymsp[0].minor.yy43);}
#line 2827 "pikchr.c"
#line 2832 "pikchr.c"
yymsp[-3].minor.yy43 = yylhsminor.yy43;
break;
case 80: /* position ::= expr ON HEADING expr FROM position */
#line 686 "pikchr.y"
#line 691 "pikchr.y"
{yylhsminor.yy43 = pik_position_at_angle(yymsp[-5].minor.yy265,yymsp[-2].minor.yy265,yymsp[0].minor.yy43);}
#line 2833 "pikchr.c"
#line 2838 "pikchr.c"
yymsp[-5].minor.yy43 = yylhsminor.yy43;
break;
case 81: /* position ::= expr HEADING expr FROM position */
#line 688 "pikchr.y"
#line 693 "pikchr.y"
{yylhsminor.yy43 = pik_position_at_angle(yymsp[-4].minor.yy265,yymsp[-2].minor.yy265,yymsp[0].minor.yy43);}
#line 2839 "pikchr.c"
#line 2844 "pikchr.c"
yymsp[-4].minor.yy43 = yylhsminor.yy43;
break;
case 82: /* place ::= edge OF object */
#line 700 "pikchr.y"
#line 705 "pikchr.y"
{yylhsminor.yy43 = pik_place_of_elem(p,yymsp[0].minor.yy38,&yymsp[-2].minor.yy0);}
#line 2845 "pikchr.c"
#line 2850 "pikchr.c"
yymsp[-2].minor.yy43 = yylhsminor.yy43;
break;
case 83: /* place2 ::= object */
#line 701 "pikchr.y"
#line 706 "pikchr.y"
{yylhsminor.yy43 = pik_place_of_elem(p,yymsp[0].minor.yy38,0);}
#line 2851 "pikchr.c"
#line 2856 "pikchr.c"
yymsp[0].minor.yy43 = yylhsminor.yy43;
break;
case 84: /* place2 ::= object DOT_E edge */
#line 702 "pikchr.y"
#line 707 "pikchr.y"
{yylhsminor.yy43 = pik_place_of_elem(p,yymsp[-2].minor.yy38,&yymsp[0].minor.yy0);}
#line 2857 "pikchr.c"
#line 2862 "pikchr.c"
yymsp[-2].minor.yy43 = yylhsminor.yy43;
break;
case 85: /* place2 ::= NTH VERTEX OF object */
#line 703 "pikchr.y"
#line 708 "pikchr.y"
{yylhsminor.yy43 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy38);}
#line 2863 "pikchr.c"
#line 2868 "pikchr.c"
yymsp[-3].minor.yy43 = yylhsminor.yy43;
break;
case 86: /* object ::= nth */
#line 715 "pikchr.y"
#line 720 "pikchr.y"
{yylhsminor.yy38 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
#line 2869 "pikchr.c"
#line 2874 "pikchr.c"
yymsp[0].minor.yy38 = yylhsminor.yy38;
break;
case 87: /* object ::= nth OF|IN object */
#line 716 "pikchr.y"
#line 721 "pikchr.y"
{yylhsminor.yy38 = pik_find_nth(p,yymsp[0].minor.yy38,&yymsp[-2].minor.yy0);}
#line 2875 "pikchr.c"
#line 2880 "pikchr.c"
yymsp[-2].minor.yy38 = yylhsminor.yy38;
break;
case 88: /* objectname ::= PLACENAME */
#line 718 "pikchr.y"
#line 723 "pikchr.y"
{yylhsminor.yy38 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
#line 2881 "pikchr.c"
#line 2886 "pikchr.c"
yymsp[0].minor.yy38 = yylhsminor.yy38;
break;
case 89: /* objectname ::= objectname DOT_U PLACENAME */
#line 720 "pikchr.y"
#line 725 "pikchr.y"
{yylhsminor.yy38 = pik_find_byname(p,yymsp[-2].minor.yy38,&yymsp[0].minor.yy0);}
#line 2887 "pikchr.c"
#line 2892 "pikchr.c"
yymsp[-2].minor.yy38 = yylhsminor.yy38;
break;
case 90: /* nth ::= NTH CLASSNAME */
#line 722 "pikchr.y"
#line 727 "pikchr.y"
{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
#line 2893 "pikchr.c"
#line 2898 "pikchr.c"
yymsp[-1].minor.yy0 = yylhsminor.yy0;
break;
case 91: /* nth ::= NTH LAST CLASSNAME */
#line 723 "pikchr.y"
#line 728 "pikchr.y"
{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
#line 2899 "pikchr.c"
#line 2904 "pikchr.c"
yymsp[-2].minor.yy0 = yylhsminor.yy0;
break;
case 92: /* nth ::= LAST CLASSNAME */
#line 724 "pikchr.y"
#line 729 "pikchr.y"
{yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
#line 2905 "pikchr.c"
#line 2910 "pikchr.c"
break;
case 93: /* nth ::= LAST */
#line 725 "pikchr.y"
#line 730 "pikchr.y"
{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
#line 2910 "pikchr.c"
#line 2915 "pikchr.c"
yymsp[0].minor.yy0 = yylhsminor.yy0;
break;
case 94: /* nth ::= NTH LB RB */
#line 726 "pikchr.y"
#line 731 "pikchr.y"
{yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
#line 2916 "pikchr.c"
#line 2921 "pikchr.c"
yymsp[-2].minor.yy0 = yylhsminor.yy0;
break;
case 95: /* nth ::= NTH LAST LB RB */
#line 727 "pikchr.y"
#line 732 "pikchr.y"
{yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
#line 2922 "pikchr.c"
#line 2927 "pikchr.c"
yymsp[-3].minor.yy0 = yylhsminor.yy0;
break;
case 96: /* nth ::= LAST LB RB */
#line 728 "pikchr.y"
#line 733 "pikchr.y"
{yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
#line 2928 "pikchr.c"
#line 2933 "pikchr.c"
break;
case 97: /* expr ::= expr PLUS expr */
#line 730 "pikchr.y"
#line 735 "pikchr.y"
{yylhsminor.yy265=yymsp[-2].minor.yy265+yymsp[0].minor.yy265;}
#line 2933 "pikchr.c"
#line 2938 "pikchr.c"
yymsp[-2].minor.yy265 = yylhsminor.yy265;
break;
case 98: /* expr ::= expr MINUS expr */
#line 731 "pikchr.y"
#line 736 "pikchr.y"
{yylhsminor.yy265=yymsp[-2].minor.yy265-yymsp[0].minor.yy265;}
#line 2939 "pikchr.c"
#line 2944 "pikchr.c"
yymsp[-2].minor.yy265 = yylhsminor.yy265;
break;
case 99: /* expr ::= expr STAR expr */
#line 732 "pikchr.y"
#line 737 "pikchr.y"
{yylhsminor.yy265=yymsp[-2].minor.yy265*yymsp[0].minor.yy265;}
#line 2945 "pikchr.c"
#line 2950 "pikchr.c"
yymsp[-2].minor.yy265 = yylhsminor.yy265;
break;
case 100: /* expr ::= expr SLASH expr */
#line 733 "pikchr.y"
#line 738 "pikchr.y"
{
if( yymsp[0].minor.yy265==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy265 = 0.0; }
else{ yylhsminor.yy265 = yymsp[-2].minor.yy265/yymsp[0].minor.yy265; }
}
#line 2954 "pikchr.c"
#line 2959 "pikchr.c"
yymsp[-2].minor.yy265 = yylhsminor.yy265;
break;
case 101: /* expr ::= MINUS expr */
#line 737 "pikchr.y"
#line 742 "pikchr.y"
{yymsp[-1].minor.yy265=-yymsp[0].minor.yy265;}
#line 2960 "pikchr.c"
#line 2965 "pikchr.c"
break;
case 102: /* expr ::= PLUS expr */
#line 738 "pikchr.y"
#line 743 "pikchr.y"
{yymsp[-1].minor.yy265=yymsp[0].minor.yy265;}
#line 2965 "pikchr.c"
#line 2970 "pikchr.c"
break;
case 103: /* expr ::= LP expr RP */
#line 739 "pikchr.y"
#line 744 "pikchr.y"
{yymsp[-2].minor.yy265=yymsp[-1].minor.yy265;}
#line 2970 "pikchr.c"
#line 2975 "pikchr.c"
break;
case 104: /* expr ::= LP FILL|COLOR|THICKNESS RP */
#line 740 "pikchr.y"
#line 745 "pikchr.y"
{yymsp[-2].minor.yy265=pik_get_var(p,&yymsp[-1].minor.yy0);}
#line 2975 "pikchr.c"
#line 2980 "pikchr.c"
break;
case 105: /* expr ::= NUMBER */
#line 741 "pikchr.y"
#line 746 "pikchr.y"
{yylhsminor.yy265=pik_atof(&yymsp[0].minor.yy0);}
#line 2980 "pikchr.c"
#line 2985 "pikchr.c"
yymsp[0].minor.yy265 = yylhsminor.yy265;
break;
case 106: /* expr ::= ID */
#line 742 "pikchr.y"
#line 747 "pikchr.y"
{yylhsminor.yy265=pik_get_var(p,&yymsp[0].minor.yy0);}
#line 2986 "pikchr.c"
#line 2991 "pikchr.c"
yymsp[0].minor.yy265 = yylhsminor.yy265;
break;
case 107: /* expr ::= FUNC1 LP expr RP */
#line 743 "pikchr.y"
#line 748 "pikchr.y"
{yylhsminor.yy265 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy265,0.0);}
#line 2992 "pikchr.c"
#line 2997 "pikchr.c"
yymsp[-3].minor.yy265 = yylhsminor.yy265;
break;
case 108: /* expr ::= FUNC2 LP expr COMMA expr RP */
#line 744 "pikchr.y"
#line 749 "pikchr.y"
{yylhsminor.yy265 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy265,yymsp[-1].minor.yy265);}
#line 2998 "pikchr.c"
#line 3003 "pikchr.c"
yymsp[-5].minor.yy265 = yylhsminor.yy265;
break;
case 109: /* expr ::= DIST LP position COMMA position RP */
#line 745 "pikchr.y"
#line 750 "pikchr.y"
{yymsp[-5].minor.yy265 = pik_dist(&yymsp[-3].minor.yy43,&yymsp[-1].minor.yy43);}
#line 3004 "pikchr.c"
#line 3009 "pikchr.c"
break;
case 110: /* expr ::= place2 DOT_XY X */
#line 746 "pikchr.y"
#line 751 "pikchr.y"
{yylhsminor.yy265 = yymsp[-2].minor.yy43.x;}
#line 3009 "pikchr.c"
#line 3014 "pikchr.c"
yymsp[-2].minor.yy265 = yylhsminor.yy265;
break;
case 111: /* expr ::= place2 DOT_XY Y */
#line 747 "pikchr.y"
#line 752 "pikchr.y"
{yylhsminor.yy265 = yymsp[-2].minor.yy43.y;}
#line 3015 "pikchr.c"
#line 3020 "pikchr.c"
yymsp[-2].minor.yy265 = yylhsminor.yy265;
break;
case 112: /* expr ::= object DOT_L numproperty */
case 113: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==113);
case 114: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==114);
#line 748 "pikchr.y"
#line 753 "pikchr.y"
{yylhsminor.yy265=pik_property_of(yymsp[-2].minor.yy38,&yymsp[0].minor.yy0);}
#line 3023 "pikchr.c"
#line 3028 "pikchr.c"
yymsp[-2].minor.yy265 = yylhsminor.yy265;
break;
default:
/* (115) lvalue ::= ID */ yytestcase(yyruleno==115);
/* (116) lvalue ::= FILL */ yytestcase(yyruleno==116);
/* (117) lvalue ::= COLOR */ yytestcase(yyruleno==117);
/* (118) lvalue ::= THICKNESS */ yytestcase(yyruleno==118);
|
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
|
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
|
+
+
+
-
+
+
-
+
+
-
+
+
-
+
+
-
+
+
|
*/
static void pik_error(Pik *p, PToken *pErr, const char *zMsg){
int i;
if( p==0 ) return;
if( p->nErr ) return;
p->nErr++;
if( zMsg==0 ){
if( p->mFlags & PIKCHR_PLAINTEXT_ERRORS ){
pik_append(p, "\nOut of memory\n", -1);
}else{
pik_append(p, "\n<div><p>Out of memory</p></div>\n", -1);
pik_append(p, "\n<div><p>Out of memory</p></div>\n", -1);
}
return;
}
if( pErr==0 ){
pik_append(p, "\n", 1);
pik_append_text(p, zMsg, -1, 0);
pik_append_errtxt(p, zMsg, -1);
return;
}
if( (p->mFlags & PIKCHR_PLAINTEXT_ERRORS)==0 ){
pik_append(p, "<div><pre>\n", -1);
pik_append(p, "<div><pre>\n", -1);
}
pik_error_context(p, pErr, 5);
pik_append(p, "ERROR: ", -1);
pik_append_text(p, zMsg, -1, 0);
pik_append_errtxt(p, zMsg, -1);
pik_append(p, "\n", 1);
for(i=p->nCtx-1; i>=0; i--){
pik_append(p, "Called from:\n", -1);
pik_error_context(p, &p->aCtx[i], 0);
}
if( (p->mFlags & PIKCHR_PLAINTEXT_ERRORS)==0 ){
pik_append(p, "</pre></div>\n", -1);
pik_append(p, "</pre></div>\n", -1);
}
}
/*
** Process an "assert( e1 == e2 )" statement. Always return NULL.
*/
static PObj *pik_assert(Pik *p, PNum e1, PToken *pEq, PNum e2){
char zE1[100], zE2[100], zMsg[300];
|
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613
7614
7615
7616
7617
7618
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
|
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651
7652
7653
7654
7655
7656
7657
7658
7659
7660
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673
7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
7690
7691
7692
7693
7694
7695
7696
7697
7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
7728
7729
7730
7731
|
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
|
fprintf(stderr, "cannot allocate space for file \"%s\"\n", argv[i]);
fclose(in);
continue;
}
sz = fread(zIn, 1, sz, in);
fclose(in);
zIn[sz] = 0;
zOut = pikchr(zIn, "pikchr", 0, &w, &h);
zOut = pikchr(zIn, "pikchr", mFlags, &w, &h);
if( zOut==0 ){
fprintf(stderr, "pikchr() returns NULL. Out of memory?\n");
if( !bDontStop ) exit(1);
}else if( bSvgOnly ){
printf("%s\n", zOut);
}else{
if( zHtmlHdr ){
printf("%s", zHtmlHdr);
zHtmlHdr = 0;
}
printf("<h1>File %s</h1>\n", argv[i]);
if( w<0 ){
printf("<p>ERROR</p>\n%s\n", zOut);
exitCode = 1;
}else{
printf("<div id=\"svg-%d\" onclick=\"toggleHidden('svg-%d')\">\n",i,i);
printf("<div style='border:3px solid lightgray;max-width:%dpx;'>\n",w);
printf("%s</div>\n", zOut);
printf("<pre class='hidden'>");
print_escape_html(zIn);
printf("</pre>\n</div>\n");
}
}
free(zOut);
free(zIn);
}
if( !bSvgOnly ){
printf("</body></html>\n");
}
return 0;
return exitCode;
}
#endif /* PIKCHR_SHELL */
#ifdef PIKCHR_TCL
#include <tcl.h>
/*
** An interface to TCL
**
** TCL command: pikchr $INPUTTEXT
**
** Returns a list of 3 elements which are the output text, the width, and
** the height.
**
** Register the "pikchr" command by invoking Pikchr_Init(Tcl_Interp*). Or
** compile this source file as a shared library and load it using the
** "load" command of Tcl.
**
** Compile this source-code file into a shared library using a command
** similar to this:
**
** gcc -c pikchr.so -DPIKCHR_TCL -shared pikchr.c
*/
static int pik_tcl_command(
ClientData clientData, /* Not Used */
Tcl_Interp *interp, /* The TCL interpreter that invoked this command */
int objc, /* Number of arguments */
Tcl_Obj *CONST objv[] /* Command arguments */
){
int w, h; /* Width and height of the pikchr */
const char *zIn; /* Source text input */
char *zOut; /* SVG output text */
Tcl_Obj *pRes; /* The result TCL object */
if( objc!=2 ){
Tcl_WrongNumArgs(interp, 1, objv, "PIKCHR_SOURCE_TEXT");
return TCL_ERROR;
}
zIn = Tcl_GetString(objv[1]);
w = h = 0;
zOut = pikchr(zIn, "pikchr", 0, &w, &h);
if( zOut==0 ){
return TCL_ERROR; /* Out of memory */
}
pRes = Tcl_NewObj();
Tcl_ListObjAppendElement(0, pRes, Tcl_NewStringObj(zOut, -1));
free(zOut);
Tcl_ListObjAppendElement(0, pRes, Tcl_NewIntObj(w));
Tcl_ListObjAppendElement(0, pRes, Tcl_NewIntObj(h));
Tcl_SetObjResult(interp, pRes);
return TCL_OK;
}
/* Invoke this routine to register the "pikchr" command with the interpreter
** given in the argument */
int Pikchr_Init(Tcl_Interp *interp){
Tcl_CreateObjCommand(interp, "pikchr", pik_tcl_command, 0, 0);
return TCL_OK;
}
#endif /* PIKCHR_TCL */
#line 7666 "pikchr.c"
#line 7756 "pikchr.c"
|