Fossil SCM
Latest pikchr.c fixes a variable initialization problem and adds the xmlns attribute to the SVG markup.
Commit
7de85417dee9c28bd4ae8997f987b37dc7749c41d90d635725d2741dc7c84098
Parent
cab87e342005b3a…
1 file changed
+240
-239
+240
-239
| --- src/pikchr.c | ||
| +++ src/pikchr.c | ||
| @@ -200,10 +200,11 @@ | ||
| 200 | 200 | |
| 201 | 201 | /* An object to hold a position in 2-D space */ |
| 202 | 202 | struct PPoint { |
| 203 | 203 | PNum x, y; /* X and Y coordinates */ |
| 204 | 204 | }; |
| 205 | +static const PPoint cZeroPoint = {0.0,0.0}; | |
| 205 | 206 | |
| 206 | 207 | /* A bounding box */ |
| 207 | 208 | struct PBox { |
| 208 | 209 | PPoint sw, ne; /* Lower-left and top-right corners */ |
| 209 | 210 | }; |
| @@ -447,11 +448,11 @@ | ||
| 447 | 448 | static PElem *pik_assert(Pik*,PNum,PToken*,PNum); |
| 448 | 449 | static PElem *pik_position_assert(Pik*,PPoint*,PToken*,PPoint*); |
| 449 | 450 | static PNum pik_dist(PPoint*,PPoint*); |
| 450 | 451 | |
| 451 | 452 | |
| 452 | -#line 478 "pikchr.c" | |
| 453 | +#line 479 "pikchr.c" | |
| 453 | 454 | /**************** End of %include directives **********************************/ |
| 454 | 455 | /* These constants specify the various numeric values for terminal symbols. |
| 455 | 456 | ***************** Begin token definitions *************************************/ |
| 456 | 457 | #ifndef T_ID |
| 457 | 458 | #define T_ID 1 |
| @@ -1648,22 +1649,22 @@ | ||
| 1648 | 1649 | ** inside the C code. |
| 1649 | 1650 | */ |
| 1650 | 1651 | /********* Begin destructor definitions ***************************************/ |
| 1651 | 1652 | case 95: /* element_list */ |
| 1652 | 1653 | { |
| 1653 | -#line 467 "pikchr.y" | |
| 1654 | +#line 468 "pikchr.y" | |
| 1654 | 1655 | pik_elist_free(p,(yypminor->yy56)); |
| 1655 | -#line 1680 "pikchr.c" | |
| 1656 | +#line 1681 "pikchr.c" | |
| 1656 | 1657 | } |
| 1657 | 1658 | break; |
| 1658 | 1659 | case 96: /* element */ |
| 1659 | 1660 | case 97: /* unnamed_element */ |
| 1660 | 1661 | case 98: /* basetype */ |
| 1661 | 1662 | { |
| 1662 | -#line 469 "pikchr.y" | |
| 1663 | +#line 470 "pikchr.y" | |
| 1663 | 1664 | pik_elem_free(p,(yypminor->yy226)); |
| 1664 | -#line 1689 "pikchr.c" | |
| 1665 | +#line 1690 "pikchr.c" | |
| 1665 | 1666 | } |
| 1666 | 1667 | break; |
| 1667 | 1668 | /********* End destructor definitions *****************************************/ |
| 1668 | 1669 | default: break; /* If no destructor action specified: do nothing */ |
| 1669 | 1670 | } |
| @@ -1877,14 +1878,14 @@ | ||
| 1877 | 1878 | #endif |
| 1878 | 1879 | while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser); |
| 1879 | 1880 | /* Here code is inserted which will execute if the parser |
| 1880 | 1881 | ** stack every overflows */ |
| 1881 | 1882 | /******** Begin %stack_overflow code ******************************************/ |
| 1882 | -#line 501 "pikchr.y" | |
| 1883 | +#line 502 "pikchr.y" | |
| 1883 | 1884 | |
| 1884 | 1885 | pik_error(p, 0, "parser stack overflow"); |
| 1885 | -#line 1910 "pikchr.c" | |
| 1886 | +#line 1911 "pikchr.c" | |
| 1886 | 1887 | /******** End %stack_overflow code ********************************************/ |
| 1887 | 1888 | pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */ |
| 1888 | 1889 | pik_parserCTX_STORE |
| 1889 | 1890 | } |
| 1890 | 1891 | |
| @@ -2354,603 +2355,603 @@ | ||
| 2354 | 2355 | ** break; |
| 2355 | 2356 | */ |
| 2356 | 2357 | /********** Begin reduce actions **********************************************/ |
| 2357 | 2358 | YYMINORTYPE yylhsminor; |
| 2358 | 2359 | case 0: /* document ::= element_list */ |
| 2359 | -#line 505 "pikchr.y" | |
| 2360 | +#line 506 "pikchr.y" | |
| 2360 | 2361 | {pik_render(p,yymsp[0].minor.yy56);} |
| 2361 | -#line 2386 "pikchr.c" | |
| 2362 | +#line 2387 "pikchr.c" | |
| 2362 | 2363 | break; |
| 2363 | 2364 | case 1: /* element_list ::= element */ |
| 2364 | -#line 508 "pikchr.y" | |
| 2365 | +#line 509 "pikchr.y" | |
| 2365 | 2366 | { yylhsminor.yy56 = pik_elist_append(p,0,yymsp[0].minor.yy226); } |
| 2366 | -#line 2391 "pikchr.c" | |
| 2367 | +#line 2392 "pikchr.c" | |
| 2367 | 2368 | yymsp[0].minor.yy56 = yylhsminor.yy56; |
| 2368 | 2369 | break; |
| 2369 | 2370 | case 2: /* element_list ::= element_list EOL element */ |
| 2370 | -#line 510 "pikchr.y" | |
| 2371 | +#line 511 "pikchr.y" | |
| 2371 | 2372 | { yylhsminor.yy56 = pik_elist_append(p,yymsp[-2].minor.yy56,yymsp[0].minor.yy226); } |
| 2372 | -#line 2397 "pikchr.c" | |
| 2373 | +#line 2398 "pikchr.c" | |
| 2373 | 2374 | yymsp[-2].minor.yy56 = yylhsminor.yy56; |
| 2374 | 2375 | break; |
| 2375 | 2376 | case 3: /* element ::= */ |
| 2376 | -#line 513 "pikchr.y" | |
| 2377 | +#line 514 "pikchr.y" | |
| 2377 | 2378 | { yymsp[1].minor.yy226 = 0; } |
| 2378 | -#line 2403 "pikchr.c" | |
| 2379 | +#line 2404 "pikchr.c" | |
| 2379 | 2380 | break; |
| 2380 | 2381 | case 4: /* element ::= direction */ |
| 2381 | -#line 514 "pikchr.y" | |
| 2382 | +#line 515 "pikchr.y" | |
| 2382 | 2383 | { pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy226=0; } |
| 2383 | -#line 2408 "pikchr.c" | |
| 2384 | +#line 2409 "pikchr.c" | |
| 2384 | 2385 | yymsp[0].minor.yy226 = yylhsminor.yy226; |
| 2385 | 2386 | break; |
| 2386 | 2387 | case 5: /* element ::= lvalue ASSIGN rvalue */ |
| 2387 | -#line 515 "pikchr.y" | |
| 2388 | +#line 516 "pikchr.y" | |
| 2388 | 2389 | {pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy257,&yymsp[-1].minor.yy0); yylhsminor.yy226=0;} |
| 2389 | -#line 2414 "pikchr.c" | |
| 2390 | +#line 2415 "pikchr.c" | |
| 2390 | 2391 | yymsp[-2].minor.yy226 = yylhsminor.yy226; |
| 2391 | 2392 | break; |
| 2392 | 2393 | case 6: /* element ::= PLACENAME COLON unnamed_element */ |
| 2393 | -#line 517 "pikchr.y" | |
| 2394 | +#line 518 "pikchr.y" | |
| 2394 | 2395 | { yylhsminor.yy226 = yymsp[0].minor.yy226; pik_elem_setname(p,yymsp[0].minor.yy226,&yymsp[-2].minor.yy0); } |
| 2395 | -#line 2420 "pikchr.c" | |
| 2396 | +#line 2421 "pikchr.c" | |
| 2396 | 2397 | yymsp[-2].minor.yy226 = yylhsminor.yy226; |
| 2397 | 2398 | break; |
| 2398 | 2399 | case 7: /* element ::= PLACENAME COLON position */ |
| 2399 | -#line 519 "pikchr.y" | |
| 2400 | +#line 520 "pikchr.y" | |
| 2400 | 2401 | { yylhsminor.yy226 = pik_elem_new(p,0,0,0); |
| 2401 | 2402 | if(yylhsminor.yy226){ yylhsminor.yy226->ptAt = yymsp[0].minor.yy175; pik_elem_setname(p,yylhsminor.yy226,&yymsp[-2].minor.yy0); }} |
| 2402 | -#line 2427 "pikchr.c" | |
| 2403 | +#line 2428 "pikchr.c" | |
| 2403 | 2404 | yymsp[-2].minor.yy226 = yylhsminor.yy226; |
| 2404 | 2405 | break; |
| 2405 | 2406 | case 8: /* element ::= unnamed_element */ |
| 2406 | -#line 521 "pikchr.y" | |
| 2407 | +#line 522 "pikchr.y" | |
| 2407 | 2408 | {yylhsminor.yy226 = yymsp[0].minor.yy226;} |
| 2408 | -#line 2433 "pikchr.c" | |
| 2409 | +#line 2434 "pikchr.c" | |
| 2409 | 2410 | yymsp[0].minor.yy226 = yylhsminor.yy226; |
| 2410 | 2411 | break; |
| 2411 | 2412 | case 9: /* element ::= print prlist */ |
| 2412 | -#line 522 "pikchr.y" | |
| 2413 | +#line 523 "pikchr.y" | |
| 2413 | 2414 | {pik_append(p,"<br>\n",5); yymsp[-1].minor.yy226=0;} |
| 2414 | -#line 2439 "pikchr.c" | |
| 2415 | +#line 2440 "pikchr.c" | |
| 2415 | 2416 | break; |
| 2416 | 2417 | case 10: /* element ::= ASSERT LP expr EQ expr RP */ |
| 2417 | -#line 527 "pikchr.y" | |
| 2418 | +#line 528 "pikchr.y" | |
| 2418 | 2419 | {yymsp[-5].minor.yy226=pik_assert(p,yymsp[-3].minor.yy257,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy257);} |
| 2419 | -#line 2444 "pikchr.c" | |
| 2420 | +#line 2445 "pikchr.c" | |
| 2420 | 2421 | break; |
| 2421 | 2422 | case 11: /* element ::= ASSERT LP position EQ position RP */ |
| 2422 | -#line 529 "pikchr.y" | |
| 2423 | +#line 530 "pikchr.y" | |
| 2423 | 2424 | {yymsp[-5].minor.yy226=pik_position_assert(p,&yymsp[-3].minor.yy175,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy175);} |
| 2424 | -#line 2449 "pikchr.c" | |
| 2425 | +#line 2450 "pikchr.c" | |
| 2425 | 2426 | break; |
| 2426 | 2427 | case 12: /* rvalue ::= PLACENAME */ |
| 2427 | -#line 540 "pikchr.y" | |
| 2428 | +#line 541 "pikchr.y" | |
| 2428 | 2429 | {yylhsminor.yy257 = pik_lookup_color(p,&yymsp[0].minor.yy0);} |
| 2429 | -#line 2454 "pikchr.c" | |
| 2430 | +#line 2455 "pikchr.c" | |
| 2430 | 2431 | yymsp[0].minor.yy257 = yylhsminor.yy257; |
| 2431 | 2432 | break; |
| 2432 | 2433 | case 13: /* pritem ::= FILL */ |
| 2433 | 2434 | case 14: /* pritem ::= COLOR */ yytestcase(yyruleno==14); |
| 2434 | 2435 | case 15: /* pritem ::= THICKNESS */ yytestcase(yyruleno==15); |
| 2435 | -#line 545 "pikchr.y" | |
| 2436 | +#line 546 "pikchr.y" | |
| 2436 | 2437 | {pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));} |
| 2437 | -#line 2462 "pikchr.c" | |
| 2438 | +#line 2463 "pikchr.c" | |
| 2438 | 2439 | break; |
| 2439 | 2440 | case 16: /* pritem ::= rvalue */ |
| 2440 | -#line 548 "pikchr.y" | |
| 2441 | +#line 549 "pikchr.y" | |
| 2441 | 2442 | {pik_append_num(p,"",yymsp[0].minor.yy257);} |
| 2442 | -#line 2467 "pikchr.c" | |
| 2443 | +#line 2468 "pikchr.c" | |
| 2443 | 2444 | break; |
| 2444 | 2445 | case 17: /* pritem ::= STRING */ |
| 2445 | -#line 549 "pikchr.y" | |
| 2446 | +#line 550 "pikchr.y" | |
| 2446 | 2447 | {pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);} |
| 2447 | -#line 2472 "pikchr.c" | |
| 2448 | +#line 2473 "pikchr.c" | |
| 2448 | 2449 | break; |
| 2449 | 2450 | case 18: /* prsep ::= COMMA */ |
| 2450 | -#line 550 "pikchr.y" | |
| 2451 | +#line 551 "pikchr.y" | |
| 2451 | 2452 | {pik_append(p, " ", 1);} |
| 2452 | -#line 2477 "pikchr.c" | |
| 2453 | +#line 2478 "pikchr.c" | |
| 2453 | 2454 | break; |
| 2454 | 2455 | case 19: /* unnamed_element ::= basetype attribute_list */ |
| 2455 | -#line 553 "pikchr.y" | |
| 2456 | +#line 554 "pikchr.y" | |
| 2456 | 2457 | {yylhsminor.yy226 = yymsp[-1].minor.yy226; pik_after_adding_attributes(p,yylhsminor.yy226);} |
| 2457 | -#line 2482 "pikchr.c" | |
| 2458 | +#line 2483 "pikchr.c" | |
| 2458 | 2459 | yymsp[-1].minor.yy226 = yylhsminor.yy226; |
| 2459 | 2460 | break; |
| 2460 | 2461 | case 20: /* basetype ::= CLASSNAME */ |
| 2461 | -#line 555 "pikchr.y" | |
| 2462 | +#line 556 "pikchr.y" | |
| 2462 | 2463 | {yylhsminor.yy226 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); } |
| 2463 | -#line 2488 "pikchr.c" | |
| 2464 | +#line 2489 "pikchr.c" | |
| 2464 | 2465 | yymsp[0].minor.yy226 = yylhsminor.yy226; |
| 2465 | 2466 | break; |
| 2466 | 2467 | case 21: /* basetype ::= STRING textposition */ |
| 2467 | -#line 557 "pikchr.y" | |
| 2468 | +#line 558 "pikchr.y" | |
| 2468 | 2469 | {yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy116; yylhsminor.yy226 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); } |
| 2469 | -#line 2494 "pikchr.c" | |
| 2470 | +#line 2495 "pikchr.c" | |
| 2470 | 2471 | yymsp[-1].minor.yy226 = yylhsminor.yy226; |
| 2471 | 2472 | break; |
| 2472 | 2473 | case 22: /* basetype ::= LB savelist element_list RB */ |
| 2473 | -#line 559 "pikchr.y" | |
| 2474 | +#line 560 "pikchr.y" | |
| 2474 | 2475 | { p->list = yymsp[-2].minor.yy56; yymsp[-3].minor.yy226 = pik_elem_new(p,0,0,yymsp[-1].minor.yy56); if(yymsp[-3].minor.yy226) yymsp[-3].minor.yy226->errTok = yymsp[0].minor.yy0; } |
| 2475 | -#line 2500 "pikchr.c" | |
| 2476 | +#line 2501 "pikchr.c" | |
| 2476 | 2477 | break; |
| 2477 | 2478 | case 23: /* savelist ::= */ |
| 2478 | -#line 564 "pikchr.y" | |
| 2479 | +#line 565 "pikchr.y" | |
| 2479 | 2480 | {yymsp[1].minor.yy56 = p->list; p->list = 0;} |
| 2480 | -#line 2505 "pikchr.c" | |
| 2481 | +#line 2506 "pikchr.c" | |
| 2481 | 2482 | break; |
| 2482 | 2483 | case 24: /* relexpr ::= expr */ |
| 2483 | -#line 571 "pikchr.y" | |
| 2484 | +#line 572 "pikchr.y" | |
| 2484 | 2485 | {yylhsminor.yy164.rAbs = yymsp[0].minor.yy257; yylhsminor.yy164.rRel = 0;} |
| 2485 | -#line 2510 "pikchr.c" | |
| 2486 | +#line 2511 "pikchr.c" | |
| 2486 | 2487 | yymsp[0].minor.yy164 = yylhsminor.yy164; |
| 2487 | 2488 | break; |
| 2488 | 2489 | case 25: /* relexpr ::= expr PERCENT */ |
| 2489 | -#line 572 "pikchr.y" | |
| 2490 | +#line 573 "pikchr.y" | |
| 2490 | 2491 | {yylhsminor.yy164.rAbs = 0; yylhsminor.yy164.rRel = yymsp[-1].minor.yy257/100;} |
| 2491 | -#line 2516 "pikchr.c" | |
| 2492 | +#line 2517 "pikchr.c" | |
| 2492 | 2493 | yymsp[-1].minor.yy164 = yylhsminor.yy164; |
| 2493 | 2494 | break; |
| 2494 | 2495 | case 26: /* optrelexpr ::= */ |
| 2495 | -#line 574 "pikchr.y" | |
| 2496 | +#line 575 "pikchr.y" | |
| 2496 | 2497 | {yymsp[1].minor.yy164.rAbs = 0; yymsp[1].minor.yy164.rRel = 1.0;} |
| 2497 | -#line 2522 "pikchr.c" | |
| 2498 | +#line 2523 "pikchr.c" | |
| 2498 | 2499 | break; |
| 2499 | 2500 | case 27: /* attribute_list ::= relexpr alist */ |
| 2500 | -#line 576 "pikchr.y" | |
| 2501 | +#line 577 "pikchr.y" | |
| 2501 | 2502 | {pik_add_direction(p,0,&yymsp[-1].minor.yy164);} |
| 2502 | -#line 2527 "pikchr.c" | |
| 2503 | +#line 2528 "pikchr.c" | |
| 2503 | 2504 | break; |
| 2504 | 2505 | case 28: /* attribute ::= numproperty relexpr */ |
| 2505 | -#line 580 "pikchr.y" | |
| 2506 | +#line 581 "pikchr.y" | |
| 2506 | 2507 | { pik_set_numprop(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy164); } |
| 2507 | -#line 2532 "pikchr.c" | |
| 2508 | +#line 2533 "pikchr.c" | |
| 2508 | 2509 | break; |
| 2509 | 2510 | case 29: /* attribute ::= dashproperty expr */ |
| 2510 | -#line 581 "pikchr.y" | |
| 2511 | +#line 582 "pikchr.y" | |
| 2511 | 2512 | { pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy257); } |
| 2512 | -#line 2537 "pikchr.c" | |
| 2513 | +#line 2538 "pikchr.c" | |
| 2513 | 2514 | break; |
| 2514 | 2515 | case 30: /* attribute ::= dashproperty */ |
| 2515 | -#line 582 "pikchr.y" | |
| 2516 | +#line 583 "pikchr.y" | |
| 2516 | 2517 | { pik_set_dashed(p,&yymsp[0].minor.yy0,0); } |
| 2517 | -#line 2542 "pikchr.c" | |
| 2518 | +#line 2543 "pikchr.c" | |
| 2518 | 2519 | break; |
| 2519 | 2520 | case 31: /* attribute ::= colorproperty rvalue */ |
| 2520 | -#line 583 "pikchr.y" | |
| 2521 | +#line 584 "pikchr.y" | |
| 2521 | 2522 | { pik_set_clrprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy257); } |
| 2522 | -#line 2547 "pikchr.c" | |
| 2523 | +#line 2548 "pikchr.c" | |
| 2523 | 2524 | break; |
| 2524 | 2525 | case 32: /* attribute ::= go direction optrelexpr */ |
| 2525 | -#line 584 "pikchr.y" | |
| 2526 | +#line 585 "pikchr.y" | |
| 2526 | 2527 | { pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy164);} |
| 2527 | -#line 2552 "pikchr.c" | |
| 2528 | +#line 2553 "pikchr.c" | |
| 2528 | 2529 | break; |
| 2529 | 2530 | case 33: /* attribute ::= go direction even position */ |
| 2530 | -#line 585 "pikchr.y" | |
| 2531 | +#line 586 "pikchr.y" | |
| 2531 | 2532 | {pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy175);} |
| 2532 | -#line 2557 "pikchr.c" | |
| 2533 | +#line 2558 "pikchr.c" | |
| 2533 | 2534 | break; |
| 2534 | 2535 | case 34: /* attribute ::= CLOSE */ |
| 2535 | -#line 586 "pikchr.y" | |
| 2536 | +#line 587 "pikchr.y" | |
| 2536 | 2537 | { pik_close_path(p,&yymsp[0].minor.yy0); } |
| 2537 | -#line 2562 "pikchr.c" | |
| 2538 | +#line 2563 "pikchr.c" | |
| 2538 | 2539 | break; |
| 2539 | 2540 | case 35: /* attribute ::= CHOP */ |
| 2540 | -#line 587 "pikchr.y" | |
| 2541 | +#line 588 "pikchr.y" | |
| 2541 | 2542 | { p->cur->bChop = 1; } |
| 2542 | -#line 2567 "pikchr.c" | |
| 2543 | +#line 2568 "pikchr.c" | |
| 2543 | 2544 | break; |
| 2544 | 2545 | case 36: /* attribute ::= FROM position */ |
| 2545 | -#line 588 "pikchr.y" | |
| 2546 | +#line 589 "pikchr.y" | |
| 2546 | 2547 | { pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy175); } |
| 2547 | -#line 2572 "pikchr.c" | |
| 2548 | +#line 2573 "pikchr.c" | |
| 2548 | 2549 | break; |
| 2549 | 2550 | case 37: /* attribute ::= TO position */ |
| 2550 | -#line 589 "pikchr.y" | |
| 2551 | +#line 590 "pikchr.y" | |
| 2551 | 2552 | { pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy175); } |
| 2552 | -#line 2577 "pikchr.c" | |
| 2553 | +#line 2578 "pikchr.c" | |
| 2553 | 2554 | break; |
| 2554 | 2555 | case 38: /* attribute ::= THEN */ |
| 2555 | -#line 590 "pikchr.y" | |
| 2556 | +#line 591 "pikchr.y" | |
| 2556 | 2557 | { pik_then(p, &yymsp[0].minor.yy0, p->cur); } |
| 2557 | -#line 2582 "pikchr.c" | |
| 2558 | +#line 2583 "pikchr.c" | |
| 2558 | 2559 | break; |
| 2559 | 2560 | case 39: /* attribute ::= THEN optrelexpr HEADING expr */ |
| 2560 | 2561 | case 41: /* attribute ::= GO optrelexpr HEADING expr */ yytestcase(yyruleno==41); |
| 2561 | -#line 592 "pikchr.y" | |
| 2562 | +#line 593 "pikchr.y" | |
| 2562 | 2563 | {pik_move_hdg(p,&yymsp[-2].minor.yy164,&yymsp[-1].minor.yy0,yymsp[0].minor.yy257,0,&yymsp[-3].minor.yy0);} |
| 2563 | -#line 2588 "pikchr.c" | |
| 2564 | +#line 2589 "pikchr.c" | |
| 2564 | 2565 | break; |
| 2565 | 2566 | case 40: /* attribute ::= THEN optrelexpr EDGEPT */ |
| 2566 | 2567 | case 42: /* attribute ::= GO optrelexpr EDGEPT */ yytestcase(yyruleno==42); |
| 2567 | -#line 593 "pikchr.y" | |
| 2568 | +#line 594 "pikchr.y" | |
| 2568 | 2569 | {pik_move_hdg(p,&yymsp[-1].minor.yy164,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);} |
| 2569 | -#line 2594 "pikchr.c" | |
| 2570 | +#line 2595 "pikchr.c" | |
| 2570 | 2571 | break; |
| 2571 | 2572 | case 43: /* attribute ::= AT position */ |
| 2572 | -#line 598 "pikchr.y" | |
| 2573 | +#line 599 "pikchr.y" | |
| 2573 | 2574 | { pik_set_at(p,0,&yymsp[0].minor.yy175,&yymsp[-1].minor.yy0); } |
| 2574 | -#line 2599 "pikchr.c" | |
| 2575 | +#line 2600 "pikchr.c" | |
| 2575 | 2576 | break; |
| 2576 | 2577 | case 44: /* attribute ::= SAME */ |
| 2577 | -#line 600 "pikchr.y" | |
| 2578 | +#line 601 "pikchr.y" | |
| 2578 | 2579 | {pik_same(p,0,&yymsp[0].minor.yy0);} |
| 2579 | -#line 2604 "pikchr.c" | |
| 2580 | +#line 2605 "pikchr.c" | |
| 2580 | 2581 | break; |
| 2581 | 2582 | case 45: /* attribute ::= SAME AS object */ |
| 2582 | -#line 601 "pikchr.y" | |
| 2583 | +#line 602 "pikchr.y" | |
| 2583 | 2584 | {pik_same(p,yymsp[0].minor.yy226,&yymsp[-2].minor.yy0);} |
| 2584 | -#line 2609 "pikchr.c" | |
| 2585 | +#line 2610 "pikchr.c" | |
| 2585 | 2586 | break; |
| 2586 | 2587 | case 46: /* attribute ::= STRING textposition */ |
| 2587 | -#line 602 "pikchr.y" | |
| 2588 | +#line 603 "pikchr.y" | |
| 2588 | 2589 | {pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy116);} |
| 2589 | -#line 2614 "pikchr.c" | |
| 2590 | +#line 2615 "pikchr.c" | |
| 2590 | 2591 | break; |
| 2591 | 2592 | case 47: /* attribute ::= FIT */ |
| 2592 | -#line 603 "pikchr.y" | |
| 2593 | +#line 604 "pikchr.y" | |
| 2593 | 2594 | {pik_size_to_fit(p,&yymsp[0].minor.yy0); } |
| 2594 | -#line 2619 "pikchr.c" | |
| 2595 | +#line 2620 "pikchr.c" | |
| 2595 | 2596 | break; |
| 2596 | 2597 | case 48: /* attribute ::= BEHIND object */ |
| 2597 | -#line 604 "pikchr.y" | |
| 2598 | +#line 605 "pikchr.y" | |
| 2598 | 2599 | {pik_behind(p,yymsp[0].minor.yy226);} |
| 2599 | -#line 2624 "pikchr.c" | |
| 2600 | +#line 2625 "pikchr.c" | |
| 2600 | 2601 | break; |
| 2601 | 2602 | case 49: /* withclause ::= DOT_E edge AT position */ |
| 2602 | 2603 | case 50: /* withclause ::= edge AT position */ yytestcase(yyruleno==50); |
| 2603 | -#line 612 "pikchr.y" | |
| 2604 | +#line 613 "pikchr.y" | |
| 2604 | 2605 | { pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy175,&yymsp[-1].minor.yy0); } |
| 2605 | -#line 2630 "pikchr.c" | |
| 2606 | +#line 2631 "pikchr.c" | |
| 2606 | 2607 | break; |
| 2607 | 2608 | case 51: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */ |
| 2608 | -#line 616 "pikchr.y" | |
| 2609 | +#line 617 "pikchr.y" | |
| 2609 | 2610 | {yylhsminor.yy0 = yymsp[0].minor.yy0;} |
| 2610 | -#line 2635 "pikchr.c" | |
| 2611 | +#line 2636 "pikchr.c" | |
| 2611 | 2612 | yymsp[0].minor.yy0 = yylhsminor.yy0; |
| 2612 | 2613 | break; |
| 2613 | 2614 | case 52: /* boolproperty ::= CW */ |
| 2614 | -#line 627 "pikchr.y" | |
| 2615 | +#line 628 "pikchr.y" | |
| 2615 | 2616 | {p->cur->cw = 1;} |
| 2616 | -#line 2641 "pikchr.c" | |
| 2617 | +#line 2642 "pikchr.c" | |
| 2617 | 2618 | break; |
| 2618 | 2619 | case 53: /* boolproperty ::= CCW */ |
| 2619 | -#line 628 "pikchr.y" | |
| 2620 | +#line 629 "pikchr.y" | |
| 2620 | 2621 | {p->cur->cw = 0;} |
| 2621 | -#line 2646 "pikchr.c" | |
| 2622 | +#line 2647 "pikchr.c" | |
| 2622 | 2623 | break; |
| 2623 | 2624 | case 54: /* boolproperty ::= LARROW */ |
| 2624 | -#line 629 "pikchr.y" | |
| 2625 | +#line 630 "pikchr.y" | |
| 2625 | 2626 | {p->cur->larrow=1; p->cur->rarrow=0; } |
| 2626 | -#line 2651 "pikchr.c" | |
| 2627 | +#line 2652 "pikchr.c" | |
| 2627 | 2628 | break; |
| 2628 | 2629 | case 55: /* boolproperty ::= RARROW */ |
| 2629 | -#line 630 "pikchr.y" | |
| 2630 | +#line 631 "pikchr.y" | |
| 2630 | 2631 | {p->cur->larrow=0; p->cur->rarrow=1; } |
| 2631 | -#line 2656 "pikchr.c" | |
| 2632 | +#line 2657 "pikchr.c" | |
| 2632 | 2633 | break; |
| 2633 | 2634 | case 56: /* boolproperty ::= LRARROW */ |
| 2634 | -#line 631 "pikchr.y" | |
| 2635 | +#line 632 "pikchr.y" | |
| 2635 | 2636 | {p->cur->larrow=1; p->cur->rarrow=1; } |
| 2636 | -#line 2661 "pikchr.c" | |
| 2637 | +#line 2662 "pikchr.c" | |
| 2637 | 2638 | break; |
| 2638 | 2639 | case 57: /* boolproperty ::= INVIS */ |
| 2639 | -#line 632 "pikchr.y" | |
| 2640 | +#line 633 "pikchr.y" | |
| 2640 | 2641 | {p->cur->sw = 0.0;} |
| 2641 | -#line 2666 "pikchr.c" | |
| 2642 | +#line 2667 "pikchr.c" | |
| 2642 | 2643 | break; |
| 2643 | 2644 | case 58: /* boolproperty ::= THICK */ |
| 2644 | -#line 633 "pikchr.y" | |
| 2645 | +#line 634 "pikchr.y" | |
| 2645 | 2646 | {p->cur->sw *= 1.5;} |
| 2646 | -#line 2671 "pikchr.c" | |
| 2647 | +#line 2672 "pikchr.c" | |
| 2647 | 2648 | break; |
| 2648 | 2649 | case 59: /* boolproperty ::= THIN */ |
| 2649 | -#line 634 "pikchr.y" | |
| 2650 | +#line 635 "pikchr.y" | |
| 2650 | 2651 | {p->cur->sw *= 0.67;} |
| 2651 | -#line 2676 "pikchr.c" | |
| 2652 | +#line 2677 "pikchr.c" | |
| 2652 | 2653 | break; |
| 2653 | 2654 | case 60: /* textposition ::= */ |
| 2654 | -#line 636 "pikchr.y" | |
| 2655 | +#line 637 "pikchr.y" | |
| 2655 | 2656 | {yymsp[1].minor.yy116 = 0;} |
| 2656 | -#line 2681 "pikchr.c" | |
| 2657 | +#line 2682 "pikchr.c" | |
| 2657 | 2658 | break; |
| 2658 | 2659 | case 61: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */ |
| 2659 | -#line 639 "pikchr.y" | |
| 2660 | +#line 640 "pikchr.y" | |
| 2660 | 2661 | {yylhsminor.yy116 = pik_text_position(yymsp[-1].minor.yy116,&yymsp[0].minor.yy0);} |
| 2661 | -#line 2686 "pikchr.c" | |
| 2662 | +#line 2687 "pikchr.c" | |
| 2662 | 2663 | yymsp[-1].minor.yy116 = yylhsminor.yy116; |
| 2663 | 2664 | break; |
| 2664 | 2665 | case 62: /* position ::= expr COMMA expr */ |
| 2665 | -#line 642 "pikchr.y" | |
| 2666 | +#line 643 "pikchr.y" | |
| 2666 | 2667 | {yylhsminor.yy175.x=yymsp[-2].minor.yy257; yylhsminor.yy175.y=yymsp[0].minor.yy257;} |
| 2667 | -#line 2692 "pikchr.c" | |
| 2668 | +#line 2693 "pikchr.c" | |
| 2668 | 2669 | yymsp[-2].minor.yy175 = yylhsminor.yy175; |
| 2669 | 2670 | break; |
| 2670 | 2671 | case 63: /* position ::= place PLUS expr COMMA expr */ |
| 2671 | -#line 644 "pikchr.y" | |
| 2672 | +#line 645 "pikchr.y" | |
| 2672 | 2673 | {yylhsminor.yy175.x=yymsp[-4].minor.yy175.x+yymsp[-2].minor.yy257; yylhsminor.yy175.y=yymsp[-4].minor.yy175.y+yymsp[0].minor.yy257;} |
| 2673 | -#line 2698 "pikchr.c" | |
| 2674 | +#line 2699 "pikchr.c" | |
| 2674 | 2675 | yymsp[-4].minor.yy175 = yylhsminor.yy175; |
| 2675 | 2676 | break; |
| 2676 | 2677 | case 64: /* position ::= place MINUS expr COMMA expr */ |
| 2677 | -#line 645 "pikchr.y" | |
| 2678 | +#line 646 "pikchr.y" | |
| 2678 | 2679 | {yylhsminor.yy175.x=yymsp[-4].minor.yy175.x-yymsp[-2].minor.yy257; yylhsminor.yy175.y=yymsp[-4].minor.yy175.y-yymsp[0].minor.yy257;} |
| 2679 | -#line 2704 "pikchr.c" | |
| 2680 | +#line 2705 "pikchr.c" | |
| 2680 | 2681 | yymsp[-4].minor.yy175 = yylhsminor.yy175; |
| 2681 | 2682 | break; |
| 2682 | 2683 | case 65: /* position ::= place PLUS LP expr COMMA expr RP */ |
| 2683 | -#line 647 "pikchr.y" | |
| 2684 | +#line 648 "pikchr.y" | |
| 2684 | 2685 | {yylhsminor.yy175.x=yymsp[-6].minor.yy175.x+yymsp[-3].minor.yy257; yylhsminor.yy175.y=yymsp[-6].minor.yy175.y+yymsp[-1].minor.yy257;} |
| 2685 | -#line 2710 "pikchr.c" | |
| 2686 | +#line 2711 "pikchr.c" | |
| 2686 | 2687 | yymsp[-6].minor.yy175 = yylhsminor.yy175; |
| 2687 | 2688 | break; |
| 2688 | 2689 | case 66: /* position ::= place MINUS LP expr COMMA expr RP */ |
| 2689 | -#line 649 "pikchr.y" | |
| 2690 | +#line 650 "pikchr.y" | |
| 2690 | 2691 | {yylhsminor.yy175.x=yymsp[-6].minor.yy175.x-yymsp[-3].minor.yy257; yylhsminor.yy175.y=yymsp[-6].minor.yy175.y-yymsp[-1].minor.yy257;} |
| 2691 | -#line 2716 "pikchr.c" | |
| 2692 | +#line 2717 "pikchr.c" | |
| 2692 | 2693 | yymsp[-6].minor.yy175 = yylhsminor.yy175; |
| 2693 | 2694 | break; |
| 2694 | 2695 | case 67: /* position ::= LP position COMMA position RP */ |
| 2695 | -#line 650 "pikchr.y" | |
| 2696 | +#line 651 "pikchr.y" | |
| 2696 | 2697 | {yymsp[-4].minor.yy175.x=yymsp[-3].minor.yy175.x; yymsp[-4].minor.yy175.y=yymsp[-1].minor.yy175.y;} |
| 2697 | -#line 2722 "pikchr.c" | |
| 2698 | +#line 2723 "pikchr.c" | |
| 2698 | 2699 | break; |
| 2699 | 2700 | case 68: /* position ::= LP position RP */ |
| 2700 | -#line 651 "pikchr.y" | |
| 2701 | +#line 652 "pikchr.y" | |
| 2701 | 2702 | {yymsp[-2].minor.yy175=yymsp[-1].minor.yy175;} |
| 2702 | -#line 2727 "pikchr.c" | |
| 2703 | +#line 2728 "pikchr.c" | |
| 2703 | 2704 | break; |
| 2704 | 2705 | case 69: /* position ::= expr between position AND position */ |
| 2705 | -#line 653 "pikchr.y" | |
| 2706 | +#line 654 "pikchr.y" | |
| 2706 | 2707 | {yylhsminor.yy175 = pik_position_between(yymsp[-4].minor.yy257,yymsp[-2].minor.yy175,yymsp[0].minor.yy175);} |
| 2707 | -#line 2732 "pikchr.c" | |
| 2708 | +#line 2733 "pikchr.c" | |
| 2708 | 2709 | yymsp[-4].minor.yy175 = yylhsminor.yy175; |
| 2709 | 2710 | break; |
| 2710 | 2711 | case 70: /* position ::= expr LT position COMMA position GT */ |
| 2711 | -#line 655 "pikchr.y" | |
| 2712 | +#line 656 "pikchr.y" | |
| 2712 | 2713 | {yylhsminor.yy175 = pik_position_between(yymsp[-5].minor.yy257,yymsp[-3].minor.yy175,yymsp[-1].minor.yy175);} |
| 2713 | -#line 2738 "pikchr.c" | |
| 2714 | +#line 2739 "pikchr.c" | |
| 2714 | 2715 | yymsp[-5].minor.yy175 = yylhsminor.yy175; |
| 2715 | 2716 | break; |
| 2716 | 2717 | case 71: /* position ::= expr ABOVE position */ |
| 2717 | -#line 656 "pikchr.y" | |
| 2718 | +#line 657 "pikchr.y" | |
| 2718 | 2719 | {yylhsminor.yy175=yymsp[0].minor.yy175; yylhsminor.yy175.y += yymsp[-2].minor.yy257;} |
| 2719 | -#line 2744 "pikchr.c" | |
| 2720 | +#line 2745 "pikchr.c" | |
| 2720 | 2721 | yymsp[-2].minor.yy175 = yylhsminor.yy175; |
| 2721 | 2722 | break; |
| 2722 | 2723 | case 72: /* position ::= expr BELOW position */ |
| 2723 | -#line 657 "pikchr.y" | |
| 2724 | +#line 658 "pikchr.y" | |
| 2724 | 2725 | {yylhsminor.yy175=yymsp[0].minor.yy175; yylhsminor.yy175.y -= yymsp[-2].minor.yy257;} |
| 2725 | -#line 2750 "pikchr.c" | |
| 2726 | +#line 2751 "pikchr.c" | |
| 2726 | 2727 | yymsp[-2].minor.yy175 = yylhsminor.yy175; |
| 2727 | 2728 | break; |
| 2728 | 2729 | case 73: /* position ::= expr LEFT OF position */ |
| 2729 | -#line 658 "pikchr.y" | |
| 2730 | +#line 659 "pikchr.y" | |
| 2730 | 2731 | {yylhsminor.yy175=yymsp[0].minor.yy175; yylhsminor.yy175.x -= yymsp[-3].minor.yy257;} |
| 2731 | -#line 2756 "pikchr.c" | |
| 2732 | +#line 2757 "pikchr.c" | |
| 2732 | 2733 | yymsp[-3].minor.yy175 = yylhsminor.yy175; |
| 2733 | 2734 | break; |
| 2734 | 2735 | case 74: /* position ::= expr RIGHT OF position */ |
| 2735 | -#line 659 "pikchr.y" | |
| 2736 | +#line 660 "pikchr.y" | |
| 2736 | 2737 | {yylhsminor.yy175=yymsp[0].minor.yy175; yylhsminor.yy175.x += yymsp[-3].minor.yy257;} |
| 2737 | -#line 2762 "pikchr.c" | |
| 2738 | +#line 2763 "pikchr.c" | |
| 2738 | 2739 | yymsp[-3].minor.yy175 = yylhsminor.yy175; |
| 2739 | 2740 | break; |
| 2740 | 2741 | case 75: /* position ::= expr ON HEADING EDGEPT OF position */ |
| 2741 | -#line 661 "pikchr.y" | |
| 2742 | +#line 662 "pikchr.y" | |
| 2742 | 2743 | {yylhsminor.yy175 = pik_position_at_hdg(yymsp[-5].minor.yy257,&yymsp[-2].minor.yy0,yymsp[0].minor.yy175);} |
| 2743 | -#line 2768 "pikchr.c" | |
| 2744 | +#line 2769 "pikchr.c" | |
| 2744 | 2745 | yymsp[-5].minor.yy175 = yylhsminor.yy175; |
| 2745 | 2746 | break; |
| 2746 | 2747 | case 76: /* position ::= expr HEADING EDGEPT OF position */ |
| 2747 | -#line 663 "pikchr.y" | |
| 2748 | +#line 664 "pikchr.y" | |
| 2748 | 2749 | {yylhsminor.yy175 = pik_position_at_hdg(yymsp[-4].minor.yy257,&yymsp[-2].minor.yy0,yymsp[0].minor.yy175);} |
| 2749 | -#line 2774 "pikchr.c" | |
| 2750 | +#line 2775 "pikchr.c" | |
| 2750 | 2751 | yymsp[-4].minor.yy175 = yylhsminor.yy175; |
| 2751 | 2752 | break; |
| 2752 | 2753 | case 77: /* position ::= expr EDGEPT OF position */ |
| 2753 | -#line 665 "pikchr.y" | |
| 2754 | +#line 666 "pikchr.y" | |
| 2754 | 2755 | {yylhsminor.yy175 = pik_position_at_hdg(yymsp[-3].minor.yy257,&yymsp[-2].minor.yy0,yymsp[0].minor.yy175);} |
| 2755 | -#line 2780 "pikchr.c" | |
| 2756 | +#line 2781 "pikchr.c" | |
| 2756 | 2757 | yymsp[-3].minor.yy175 = yylhsminor.yy175; |
| 2757 | 2758 | break; |
| 2758 | 2759 | case 78: /* position ::= expr ON HEADING expr FROM position */ |
| 2759 | -#line 667 "pikchr.y" | |
| 2760 | +#line 668 "pikchr.y" | |
| 2760 | 2761 | {yylhsminor.yy175 = pik_position_at_angle(yymsp[-5].minor.yy257,yymsp[-2].minor.yy257,yymsp[0].minor.yy175);} |
| 2761 | -#line 2786 "pikchr.c" | |
| 2762 | +#line 2787 "pikchr.c" | |
| 2762 | 2763 | yymsp[-5].minor.yy175 = yylhsminor.yy175; |
| 2763 | 2764 | break; |
| 2764 | 2765 | case 79: /* position ::= expr HEADING expr FROM position */ |
| 2765 | -#line 669 "pikchr.y" | |
| 2766 | +#line 670 "pikchr.y" | |
| 2766 | 2767 | {yylhsminor.yy175 = pik_position_at_angle(yymsp[-4].minor.yy257,yymsp[-2].minor.yy257,yymsp[0].minor.yy175);} |
| 2767 | -#line 2792 "pikchr.c" | |
| 2768 | +#line 2793 "pikchr.c" | |
| 2768 | 2769 | yymsp[-4].minor.yy175 = yylhsminor.yy175; |
| 2769 | 2770 | break; |
| 2770 | 2771 | case 80: /* place ::= edge OF object */ |
| 2771 | -#line 681 "pikchr.y" | |
| 2772 | +#line 682 "pikchr.y" | |
| 2772 | 2773 | {yylhsminor.yy175 = pik_place_of_elem(p,yymsp[0].minor.yy226,&yymsp[-2].minor.yy0);} |
| 2773 | -#line 2798 "pikchr.c" | |
| 2774 | +#line 2799 "pikchr.c" | |
| 2774 | 2775 | yymsp[-2].minor.yy175 = yylhsminor.yy175; |
| 2775 | 2776 | break; |
| 2776 | 2777 | case 81: /* place2 ::= object */ |
| 2777 | -#line 682 "pikchr.y" | |
| 2778 | +#line 683 "pikchr.y" | |
| 2778 | 2779 | {yylhsminor.yy175 = pik_place_of_elem(p,yymsp[0].minor.yy226,0);} |
| 2779 | -#line 2804 "pikchr.c" | |
| 2780 | +#line 2805 "pikchr.c" | |
| 2780 | 2781 | yymsp[0].minor.yy175 = yylhsminor.yy175; |
| 2781 | 2782 | break; |
| 2782 | 2783 | case 82: /* place2 ::= object DOT_E edge */ |
| 2783 | -#line 683 "pikchr.y" | |
| 2784 | +#line 684 "pikchr.y" | |
| 2784 | 2785 | {yylhsminor.yy175 = pik_place_of_elem(p,yymsp[-2].minor.yy226,&yymsp[0].minor.yy0);} |
| 2785 | -#line 2810 "pikchr.c" | |
| 2786 | +#line 2811 "pikchr.c" | |
| 2786 | 2787 | yymsp[-2].minor.yy175 = yylhsminor.yy175; |
| 2787 | 2788 | break; |
| 2788 | 2789 | case 83: /* place2 ::= NTH VERTEX OF object */ |
| 2789 | -#line 684 "pikchr.y" | |
| 2790 | +#line 685 "pikchr.y" | |
| 2790 | 2791 | {yylhsminor.yy175 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy226);} |
| 2791 | -#line 2816 "pikchr.c" | |
| 2792 | +#line 2817 "pikchr.c" | |
| 2792 | 2793 | yymsp[-3].minor.yy175 = yylhsminor.yy175; |
| 2793 | 2794 | break; |
| 2794 | 2795 | case 84: /* object ::= nth */ |
| 2795 | -#line 696 "pikchr.y" | |
| 2796 | +#line 697 "pikchr.y" | |
| 2796 | 2797 | {yylhsminor.yy226 = pik_find_nth(p,0,&yymsp[0].minor.yy0);} |
| 2797 | -#line 2822 "pikchr.c" | |
| 2798 | +#line 2823 "pikchr.c" | |
| 2798 | 2799 | yymsp[0].minor.yy226 = yylhsminor.yy226; |
| 2799 | 2800 | break; |
| 2800 | 2801 | case 85: /* object ::= nth OF|IN object */ |
| 2801 | -#line 697 "pikchr.y" | |
| 2802 | +#line 698 "pikchr.y" | |
| 2802 | 2803 | {yylhsminor.yy226 = pik_find_nth(p,yymsp[0].minor.yy226,&yymsp[-2].minor.yy0);} |
| 2803 | -#line 2828 "pikchr.c" | |
| 2804 | +#line 2829 "pikchr.c" | |
| 2804 | 2805 | yymsp[-2].minor.yy226 = yylhsminor.yy226; |
| 2805 | 2806 | break; |
| 2806 | 2807 | case 86: /* objectname ::= PLACENAME */ |
| 2807 | -#line 699 "pikchr.y" | |
| 2808 | +#line 700 "pikchr.y" | |
| 2808 | 2809 | {yylhsminor.yy226 = pik_find_byname(p,0,&yymsp[0].minor.yy0);} |
| 2809 | -#line 2834 "pikchr.c" | |
| 2810 | +#line 2835 "pikchr.c" | |
| 2810 | 2811 | yymsp[0].minor.yy226 = yylhsminor.yy226; |
| 2811 | 2812 | break; |
| 2812 | 2813 | case 87: /* objectname ::= objectname DOT_U PLACENAME */ |
| 2813 | -#line 701 "pikchr.y" | |
| 2814 | +#line 702 "pikchr.y" | |
| 2814 | 2815 | {yylhsminor.yy226 = pik_find_byname(p,yymsp[-2].minor.yy226,&yymsp[0].minor.yy0);} |
| 2815 | -#line 2840 "pikchr.c" | |
| 2816 | +#line 2841 "pikchr.c" | |
| 2816 | 2817 | yymsp[-2].minor.yy226 = yylhsminor.yy226; |
| 2817 | 2818 | break; |
| 2818 | 2819 | case 88: /* nth ::= NTH CLASSNAME */ |
| 2819 | -#line 703 "pikchr.y" | |
| 2820 | +#line 704 "pikchr.y" | |
| 2820 | 2821 | {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); } |
| 2821 | -#line 2846 "pikchr.c" | |
| 2822 | +#line 2847 "pikchr.c" | |
| 2822 | 2823 | yymsp[-1].minor.yy0 = yylhsminor.yy0; |
| 2823 | 2824 | break; |
| 2824 | 2825 | case 89: /* nth ::= NTH LAST CLASSNAME */ |
| 2825 | -#line 704 "pikchr.y" | |
| 2826 | +#line 705 "pikchr.y" | |
| 2826 | 2827 | {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); } |
| 2827 | -#line 2852 "pikchr.c" | |
| 2828 | +#line 2853 "pikchr.c" | |
| 2828 | 2829 | yymsp[-2].minor.yy0 = yylhsminor.yy0; |
| 2829 | 2830 | break; |
| 2830 | 2831 | case 90: /* nth ::= LAST CLASSNAME */ |
| 2831 | -#line 705 "pikchr.y" | |
| 2832 | +#line 706 "pikchr.y" | |
| 2832 | 2833 | {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;} |
| 2833 | -#line 2858 "pikchr.c" | |
| 2834 | +#line 2859 "pikchr.c" | |
| 2834 | 2835 | break; |
| 2835 | 2836 | case 91: /* nth ::= LAST */ |
| 2836 | -#line 706 "pikchr.y" | |
| 2837 | +#line 707 "pikchr.y" | |
| 2837 | 2838 | {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;} |
| 2838 | -#line 2863 "pikchr.c" | |
| 2839 | +#line 2864 "pikchr.c" | |
| 2839 | 2840 | yymsp[0].minor.yy0 = yylhsminor.yy0; |
| 2840 | 2841 | break; |
| 2841 | 2842 | case 92: /* nth ::= NTH LB RB */ |
| 2842 | -#line 707 "pikchr.y" | |
| 2843 | +#line 708 "pikchr.y" | |
| 2843 | 2844 | {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);} |
| 2844 | -#line 2869 "pikchr.c" | |
| 2845 | +#line 2870 "pikchr.c" | |
| 2845 | 2846 | yymsp[-2].minor.yy0 = yylhsminor.yy0; |
| 2846 | 2847 | break; |
| 2847 | 2848 | case 93: /* nth ::= NTH LAST LB RB */ |
| 2848 | -#line 708 "pikchr.y" | |
| 2849 | +#line 709 "pikchr.y" | |
| 2849 | 2850 | {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);} |
| 2850 | -#line 2875 "pikchr.c" | |
| 2851 | +#line 2876 "pikchr.c" | |
| 2851 | 2852 | yymsp[-3].minor.yy0 = yylhsminor.yy0; |
| 2852 | 2853 | break; |
| 2853 | 2854 | case 94: /* nth ::= LAST LB RB */ |
| 2854 | -#line 709 "pikchr.y" | |
| 2855 | +#line 710 "pikchr.y" | |
| 2855 | 2856 | {yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; } |
| 2856 | -#line 2881 "pikchr.c" | |
| 2857 | +#line 2882 "pikchr.c" | |
| 2857 | 2858 | break; |
| 2858 | 2859 | case 95: /* expr ::= expr PLUS expr */ |
| 2859 | -#line 711 "pikchr.y" | |
| 2860 | +#line 712 "pikchr.y" | |
| 2860 | 2861 | {yylhsminor.yy257=yymsp[-2].minor.yy257+yymsp[0].minor.yy257;} |
| 2861 | -#line 2886 "pikchr.c" | |
| 2862 | +#line 2887 "pikchr.c" | |
| 2862 | 2863 | yymsp[-2].minor.yy257 = yylhsminor.yy257; |
| 2863 | 2864 | break; |
| 2864 | 2865 | case 96: /* expr ::= expr MINUS expr */ |
| 2865 | -#line 712 "pikchr.y" | |
| 2866 | +#line 713 "pikchr.y" | |
| 2866 | 2867 | {yylhsminor.yy257=yymsp[-2].minor.yy257-yymsp[0].minor.yy257;} |
| 2867 | -#line 2892 "pikchr.c" | |
| 2868 | +#line 2893 "pikchr.c" | |
| 2868 | 2869 | yymsp[-2].minor.yy257 = yylhsminor.yy257; |
| 2869 | 2870 | break; |
| 2870 | 2871 | case 97: /* expr ::= expr STAR expr */ |
| 2871 | -#line 713 "pikchr.y" | |
| 2872 | +#line 714 "pikchr.y" | |
| 2872 | 2873 | {yylhsminor.yy257=yymsp[-2].minor.yy257*yymsp[0].minor.yy257;} |
| 2873 | -#line 2898 "pikchr.c" | |
| 2874 | +#line 2899 "pikchr.c" | |
| 2874 | 2875 | yymsp[-2].minor.yy257 = yylhsminor.yy257; |
| 2875 | 2876 | break; |
| 2876 | 2877 | case 98: /* expr ::= expr SLASH expr */ |
| 2877 | -#line 714 "pikchr.y" | |
| 2878 | +#line 715 "pikchr.y" | |
| 2878 | 2879 | { |
| 2879 | 2880 | if( yymsp[0].minor.yy257==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy257 = 0.0; } |
| 2880 | 2881 | else{ yylhsminor.yy257 = yymsp[-2].minor.yy257/yymsp[0].minor.yy257; } |
| 2881 | 2882 | } |
| 2882 | -#line 2907 "pikchr.c" | |
| 2883 | +#line 2908 "pikchr.c" | |
| 2883 | 2884 | yymsp[-2].minor.yy257 = yylhsminor.yy257; |
| 2884 | 2885 | break; |
| 2885 | 2886 | case 99: /* expr ::= MINUS expr */ |
| 2886 | -#line 718 "pikchr.y" | |
| 2887 | +#line 719 "pikchr.y" | |
| 2887 | 2888 | {yymsp[-1].minor.yy257=-yymsp[0].minor.yy257;} |
| 2888 | -#line 2913 "pikchr.c" | |
| 2889 | +#line 2914 "pikchr.c" | |
| 2889 | 2890 | break; |
| 2890 | 2891 | case 100: /* expr ::= PLUS expr */ |
| 2891 | -#line 719 "pikchr.y" | |
| 2892 | +#line 720 "pikchr.y" | |
| 2892 | 2893 | {yymsp[-1].minor.yy257=yymsp[0].minor.yy257;} |
| 2893 | -#line 2918 "pikchr.c" | |
| 2894 | +#line 2919 "pikchr.c" | |
| 2894 | 2895 | break; |
| 2895 | 2896 | case 101: /* expr ::= LP expr RP */ |
| 2896 | -#line 720 "pikchr.y" | |
| 2897 | +#line 721 "pikchr.y" | |
| 2897 | 2898 | {yymsp[-2].minor.yy257=yymsp[-1].minor.yy257;} |
| 2898 | -#line 2923 "pikchr.c" | |
| 2899 | +#line 2924 "pikchr.c" | |
| 2899 | 2900 | break; |
| 2900 | 2901 | case 102: /* expr ::= LP FILL|COLOR|THICKNESS RP */ |
| 2901 | -#line 721 "pikchr.y" | |
| 2902 | +#line 722 "pikchr.y" | |
| 2902 | 2903 | {yymsp[-2].minor.yy257=pik_get_var(p,&yymsp[-1].minor.yy0);} |
| 2903 | -#line 2928 "pikchr.c" | |
| 2904 | +#line 2929 "pikchr.c" | |
| 2904 | 2905 | break; |
| 2905 | 2906 | case 103: /* expr ::= NUMBER */ |
| 2906 | -#line 722 "pikchr.y" | |
| 2907 | +#line 723 "pikchr.y" | |
| 2907 | 2908 | {yylhsminor.yy257=pik_atof(&yymsp[0].minor.yy0);} |
| 2908 | -#line 2933 "pikchr.c" | |
| 2909 | +#line 2934 "pikchr.c" | |
| 2909 | 2910 | yymsp[0].minor.yy257 = yylhsminor.yy257; |
| 2910 | 2911 | break; |
| 2911 | 2912 | case 104: /* expr ::= ID */ |
| 2912 | -#line 723 "pikchr.y" | |
| 2913 | +#line 724 "pikchr.y" | |
| 2913 | 2914 | {yylhsminor.yy257=pik_get_var(p,&yymsp[0].minor.yy0);} |
| 2914 | -#line 2939 "pikchr.c" | |
| 2915 | +#line 2940 "pikchr.c" | |
| 2915 | 2916 | yymsp[0].minor.yy257 = yylhsminor.yy257; |
| 2916 | 2917 | break; |
| 2917 | 2918 | case 105: /* expr ::= FUNC1 LP expr RP */ |
| 2918 | -#line 724 "pikchr.y" | |
| 2919 | +#line 725 "pikchr.y" | |
| 2919 | 2920 | {yylhsminor.yy257 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy257,0.0);} |
| 2920 | -#line 2945 "pikchr.c" | |
| 2921 | +#line 2946 "pikchr.c" | |
| 2921 | 2922 | yymsp[-3].minor.yy257 = yylhsminor.yy257; |
| 2922 | 2923 | break; |
| 2923 | 2924 | case 106: /* expr ::= FUNC2 LP expr COMMA expr RP */ |
| 2924 | -#line 725 "pikchr.y" | |
| 2925 | +#line 726 "pikchr.y" | |
| 2925 | 2926 | {yylhsminor.yy257 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy257,yymsp[-1].minor.yy257);} |
| 2926 | -#line 2951 "pikchr.c" | |
| 2927 | +#line 2952 "pikchr.c" | |
| 2927 | 2928 | yymsp[-5].minor.yy257 = yylhsminor.yy257; |
| 2928 | 2929 | break; |
| 2929 | 2930 | case 107: /* expr ::= DIST LP position COMMA position RP */ |
| 2930 | -#line 726 "pikchr.y" | |
| 2931 | +#line 727 "pikchr.y" | |
| 2931 | 2932 | {yymsp[-5].minor.yy257 = pik_dist(&yymsp[-3].minor.yy175,&yymsp[-1].minor.yy175);} |
| 2932 | -#line 2957 "pikchr.c" | |
| 2933 | +#line 2958 "pikchr.c" | |
| 2933 | 2934 | break; |
| 2934 | 2935 | case 108: /* expr ::= place2 DOT_XY X */ |
| 2935 | -#line 727 "pikchr.y" | |
| 2936 | +#line 728 "pikchr.y" | |
| 2936 | 2937 | {yylhsminor.yy257 = yymsp[-2].minor.yy175.x;} |
| 2937 | -#line 2962 "pikchr.c" | |
| 2938 | +#line 2963 "pikchr.c" | |
| 2938 | 2939 | yymsp[-2].minor.yy257 = yylhsminor.yy257; |
| 2939 | 2940 | break; |
| 2940 | 2941 | case 109: /* expr ::= place2 DOT_XY Y */ |
| 2941 | -#line 728 "pikchr.y" | |
| 2942 | +#line 729 "pikchr.y" | |
| 2942 | 2943 | {yylhsminor.yy257 = yymsp[-2].minor.yy175.y;} |
| 2943 | -#line 2968 "pikchr.c" | |
| 2944 | +#line 2969 "pikchr.c" | |
| 2944 | 2945 | yymsp[-2].minor.yy257 = yylhsminor.yy257; |
| 2945 | 2946 | break; |
| 2946 | 2947 | case 110: /* expr ::= object DOT_L numproperty */ |
| 2947 | 2948 | case 111: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==111); |
| 2948 | 2949 | case 112: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==112); |
| 2949 | -#line 729 "pikchr.y" | |
| 2950 | +#line 730 "pikchr.y" | |
| 2950 | 2951 | {yylhsminor.yy257=pik_property_of(yymsp[-2].minor.yy226,&yymsp[0].minor.yy0);} |
| 2951 | -#line 2976 "pikchr.c" | |
| 2952 | +#line 2977 "pikchr.c" | |
| 2952 | 2953 | yymsp[-2].minor.yy257 = yylhsminor.yy257; |
| 2953 | 2954 | break; |
| 2954 | 2955 | default: |
| 2955 | 2956 | /* (113) lvalue ::= ID */ yytestcase(yyruleno==113); |
| 2956 | 2957 | /* (114) lvalue ::= FILL */ yytestcase(yyruleno==114); |
| @@ -3049,19 +3050,19 @@ | ||
| 3049 | 3050 | ){ |
| 3050 | 3051 | pik_parserARG_FETCH |
| 3051 | 3052 | pik_parserCTX_FETCH |
| 3052 | 3053 | #define TOKEN yyminor |
| 3053 | 3054 | /************ Begin %syntax_error code ****************************************/ |
| 3054 | -#line 493 "pikchr.y" | |
| 3055 | +#line 494 "pikchr.y" | |
| 3055 | 3056 | |
| 3056 | 3057 | if( TOKEN.z && TOKEN.z[0] ){ |
| 3057 | 3058 | pik_error(p, &TOKEN, "syntax error"); |
| 3058 | 3059 | }else{ |
| 3059 | 3060 | pik_error(p, 0, "syntax error"); |
| 3060 | 3061 | } |
| 3061 | 3062 | UNUSED_PARAMETER(yymajor); |
| 3062 | -#line 3087 "pikchr.c" | |
| 3063 | +#line 3088 "pikchr.c" | |
| 3063 | 3064 | /************ End %syntax_error code ******************************************/ |
| 3064 | 3065 | pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */ |
| 3065 | 3066 | pik_parserCTX_STORE |
| 3066 | 3067 | } |
| 3067 | 3068 | |
| @@ -3290,11 +3291,11 @@ | ||
| 3290 | 3291 | #else |
| 3291 | 3292 | (void)iToken; |
| 3292 | 3293 | return 0; |
| 3293 | 3294 | #endif |
| 3294 | 3295 | } |
| 3295 | -#line 734 "pikchr.y" | |
| 3296 | +#line 735 "pikchr.y" | |
| 3296 | 3297 | |
| 3297 | 3298 | |
| 3298 | 3299 | |
| 3299 | 3300 | /* Chart of the 140 official HTML color names with their |
| 3300 | 3301 | ** corresponding RGB value. |
| @@ -3573,11 +3574,11 @@ | ||
| 3573 | 3574 | pElem->rad = pik_value(p, "boxrad",6,0); |
| 3574 | 3575 | } |
| 3575 | 3576 | /* Return offset from the center of the box to the compass point |
| 3576 | 3577 | ** given by parameter cp */ |
| 3577 | 3578 | static PPoint boxOffset(Pik *p, PElem *pElem, int cp){ |
| 3578 | - PPoint pt; | |
| 3579 | + PPoint pt = cZeroPoint; | |
| 3579 | 3580 | PNum w2 = 0.5*pElem->w; |
| 3580 | 3581 | PNum h2 = 0.5*pElem->h; |
| 3581 | 3582 | PNum rad = pElem->rad; |
| 3582 | 3583 | PNum rx; |
| 3583 | 3584 | if( rad<=0.0 ){ |
| @@ -3585,21 +3586,21 @@ | ||
| 3585 | 3586 | }else{ |
| 3586 | 3587 | if( rad>w2 ) rad = w2; |
| 3587 | 3588 | if( rad>h2 ) rad = h2; |
| 3588 | 3589 | rx = 0.29289321881345252392*rad; |
| 3589 | 3590 | } |
| 3590 | - pt.x = pt.y = 0.0; | |
| 3591 | 3591 | switch( cp ){ |
| 3592 | - case CP_C: pt.x = 0.0; pt.y = 0.0; break; | |
| 3592 | + case CP_C: break; | |
| 3593 | 3593 | case CP_N: pt.x = 0.0; pt.y = h2; break; |
| 3594 | 3594 | case CP_NE: pt.x = w2-rx; pt.y = h2-rx; break; |
| 3595 | 3595 | case CP_E: pt.x = w2; pt.y = 0.0; break; |
| 3596 | 3596 | case CP_SE: pt.x = w2-rx; pt.y = rx-h2; break; |
| 3597 | 3597 | case CP_S: pt.x = 0.0; pt.y = -h2; break; |
| 3598 | 3598 | case CP_SW: pt.x = rx-w2; pt.y = rx-h2; break; |
| 3599 | 3599 | case CP_W: pt.x = -w2; pt.y = 0.0; break; |
| 3600 | 3600 | case CP_NW: pt.x = rx-w2; pt.y = h2-rx; break; |
| 3601 | + default: assert(0); | |
| 3601 | 3602 | } |
| 3602 | 3603 | UNUSED_PARAMETER(p); |
| 3603 | 3604 | return pt; |
| 3604 | 3605 | } |
| 3605 | 3606 | static PPoint boxChop(Pik *p, PElem *pElem, PPoint *pPt){ |
| @@ -3789,24 +3790,25 @@ | ||
| 3789 | 3790 | pik_append(p,"\" />\n", -1); |
| 3790 | 3791 | } |
| 3791 | 3792 | pik_append_txt(p, pElem, 0); |
| 3792 | 3793 | } |
| 3793 | 3794 | static PPoint cylinderOffset(Pik *p, PElem *pElem, int cp){ |
| 3794 | - PPoint pt; | |
| 3795 | + PPoint pt = cZeroPoint; | |
| 3795 | 3796 | PNum w2 = pElem->w*0.5; |
| 3796 | 3797 | PNum h1 = pElem->h*0.5; |
| 3797 | 3798 | PNum h2 = h1 - pElem->rad; |
| 3798 | 3799 | switch( cp ){ |
| 3799 | - case CP_C: pt.x = 0.0; pt.y = 0.0; break; | |
| 3800 | + case CP_C: break; | |
| 3800 | 3801 | case CP_N: pt.x = 0.0; pt.y = h1; break; |
| 3801 | 3802 | case CP_NE: pt.x = w2; pt.y = h2; break; |
| 3802 | 3803 | case CP_E: pt.x = w2; pt.y = 0.0; break; |
| 3803 | 3804 | case CP_SE: pt.x = w2; pt.y = -h2; break; |
| 3804 | 3805 | case CP_S: pt.x = 0.0; pt.y = -h1; break; |
| 3805 | 3806 | case CP_SW: pt.x = -w2; pt.y = -h2; break; |
| 3806 | 3807 | case CP_W: pt.x = -w2; pt.y = 0.0; break; |
| 3807 | 3808 | case CP_NW: pt.x = -w2; pt.y = h2; break; |
| 3809 | + default: assert(0); | |
| 3808 | 3810 | } |
| 3809 | 3811 | UNUSED_PARAMETER(p); |
| 3810 | 3812 | return pt; |
| 3811 | 3813 | } |
| 3812 | 3814 | |
| @@ -3832,16 +3834,14 @@ | ||
| 3832 | 3834 | pik_bbox_addellipse(&pElem->bbox, pElem->ptAt.x, pElem->ptAt.y, |
| 3833 | 3835 | pElem->rad, pElem->rad); |
| 3834 | 3836 | UNUSED_PARAMETER(p); |
| 3835 | 3837 | } |
| 3836 | 3838 | static PPoint dotOffset(Pik *p, PElem *pElem, int cp){ |
| 3837 | - PPoint zero; | |
| 3838 | - zero.x = zero.y = 0; | |
| 3839 | 3839 | UNUSED_PARAMETER(p); |
| 3840 | 3840 | UNUSED_PARAMETER(pElem); |
| 3841 | 3841 | UNUSED_PARAMETER(cp); |
| 3842 | - return zero; | |
| 3842 | + return cZeroPoint; | |
| 3843 | 3843 | } |
| 3844 | 3844 | static void dotRender(Pik *p, PElem *pElem){ |
| 3845 | 3845 | PNum r = pElem->rad; |
| 3846 | 3846 | PPoint pt = pElem->ptAt; |
| 3847 | 3847 | if( pElem->sw>0.0 ){ |
| @@ -3876,25 +3876,26 @@ | ||
| 3876 | 3876 | chop.y = pElem->ptAt.y + 0.5*dy*pElem->h/dist; |
| 3877 | 3877 | UNUSED_PARAMETER(p); |
| 3878 | 3878 | return chop; |
| 3879 | 3879 | } |
| 3880 | 3880 | static PPoint ellipseOffset(Pik *p, PElem *pElem, int cp){ |
| 3881 | - PPoint pt; | |
| 3881 | + PPoint pt = cZeroPoint; | |
| 3882 | 3882 | PNum w = pElem->w*0.5; |
| 3883 | 3883 | PNum w2 = w*0.70710678118654747608; |
| 3884 | 3884 | PNum h = pElem->h*0.5; |
| 3885 | 3885 | PNum h2 = h*0.70710678118654747608; |
| 3886 | 3886 | switch( cp ){ |
| 3887 | - case CP_C: pt.x = 0.0; pt.y = 0.0; break; | |
| 3887 | + case CP_C: break; | |
| 3888 | 3888 | case CP_N: pt.x = 0.0; pt.y = h; break; |
| 3889 | 3889 | case CP_NE: pt.x = w2; pt.y = h2; break; |
| 3890 | 3890 | case CP_E: pt.x = w; pt.y = 0.0; break; |
| 3891 | 3891 | case CP_SE: pt.x = w2; pt.y = -h2; break; |
| 3892 | 3892 | case CP_S: pt.x = 0.0; pt.y = -h; break; |
| 3893 | 3893 | case CP_SW: pt.x = -w2; pt.y = -h2; break; |
| 3894 | 3894 | case CP_W: pt.x = -w; pt.y = 0.0; break; |
| 3895 | 3895 | case CP_NW: pt.x = -w2; pt.y = h2; break; |
| 3896 | + default: assert(0); | |
| 3896 | 3897 | } |
| 3897 | 3898 | UNUSED_PARAMETER(p); |
| 3898 | 3899 | return pt; |
| 3899 | 3900 | } |
| 3900 | 3901 | static void ellipseRender(Pik *p, PElem *pElem){ |
| @@ -3919,29 +3920,30 @@ | ||
| 3919 | 3920 | pElem->rad = pik_value(p, "filerad",7,0); |
| 3920 | 3921 | } |
| 3921 | 3922 | /* Return offset from the center of the file to the compass point |
| 3922 | 3923 | ** given by parameter cp */ |
| 3923 | 3924 | static PPoint fileOffset(Pik *p, PElem *pElem, int cp){ |
| 3924 | - PPoint pt; | |
| 3925 | + PPoint pt = cZeroPoint; | |
| 3925 | 3926 | PNum w2 = 0.5*pElem->w; |
| 3926 | 3927 | PNum h2 = 0.5*pElem->h; |
| 3927 | 3928 | PNum rx = pElem->rad; |
| 3928 | 3929 | PNum mn = w2<h2 ? w2 : h2; |
| 3929 | 3930 | if( rx>mn ) rx = mn; |
| 3930 | 3931 | if( rx<mn*0.25 ) rx = mn*0.25; |
| 3931 | 3932 | pt.x = pt.y = 0.0; |
| 3932 | 3933 | rx *= 0.5; |
| 3933 | 3934 | switch( cp ){ |
| 3934 | - case CP_C: pt.x = 0.0; pt.y = 0.0; break; | |
| 3935 | + case CP_C: break; | |
| 3935 | 3936 | case CP_N: pt.x = 0.0; pt.y = h2; break; |
| 3936 | 3937 | case CP_NE: pt.x = w2-rx; pt.y = h2-rx; break; |
| 3937 | 3938 | case CP_E: pt.x = w2; pt.y = 0.0; break; |
| 3938 | 3939 | case CP_SE: pt.x = w2; pt.y = -h2; break; |
| 3939 | 3940 | case CP_S: pt.x = 0.0; pt.y = -h2; break; |
| 3940 | 3941 | case CP_SW: pt.x = -w2; pt.y = -h2; break; |
| 3941 | 3942 | case CP_W: pt.x = -w2; pt.y = 0.0; break; |
| 3942 | 3943 | case CP_NW: pt.x = -w2; pt.y = h2; break; |
| 3944 | + default: assert(0); | |
| 3943 | 3945 | } |
| 3944 | 3946 | UNUSED_PARAMETER(p); |
| 3945 | 3947 | return pt; |
| 3946 | 3948 | } |
| 3947 | 3949 | static void fileFit(Pik *p, PElem *pElem, PNum w, PNum h){ |
| @@ -5086,10 +5088,11 @@ | ||
| 5086 | 5088 | p->cur = pNew; |
| 5087 | 5089 | p->nTPath = 1; |
| 5088 | 5090 | p->thenFlag = 0; |
| 5089 | 5091 | if( p->list==0 || p->list->n==0 ){ |
| 5090 | 5092 | pNew->ptAt.x = pNew->ptAt.y = 0.0; |
| 5093 | + pNew->eWith = CP_C; | |
| 5091 | 5094 | }else{ |
| 5092 | 5095 | PElem *pPrior = p->list->a[p->list->n-1]; |
| 5093 | 5096 | pNew->ptAt = pPrior->ptExit; |
| 5094 | 5097 | switch( p->eDir ){ |
| 5095 | 5098 | default: pNew->eWith = CP_W; break; |
| @@ -6135,14 +6138,12 @@ | ||
| 6135 | 6138 | /* Return a "Place" associated with element pElem. If pEdge is NULL |
| 6136 | 6139 | ** return the center of the object. Otherwise, return the corner |
| 6137 | 6140 | ** described by pEdge. |
| 6138 | 6141 | */ |
| 6139 | 6142 | static PPoint pik_place_of_elem(Pik *p, PElem *pElem, PToken *pEdge){ |
| 6140 | - PPoint pt; | |
| 6143 | + PPoint pt = cZeroPoint; | |
| 6141 | 6144 | const PClass *pClass; |
| 6142 | - pt.x = 0.0; | |
| 6143 | - pt.y = 0.0; | |
| 6144 | 6145 | if( pElem==0 ) return pt; |
| 6145 | 6146 | if( pEdge==0 ){ |
| 6146 | 6147 | return pElem->ptAt; |
| 6147 | 6148 | } |
| 6148 | 6149 | pClass = pElem->type; |
| @@ -6576,11 +6577,11 @@ | ||
| 6576 | 6577 | p->bbox.ne.y += margin + pik_value(p,"topmargin",9,0); |
| 6577 | 6578 | p->bbox.sw.x -= margin + pik_value(p,"leftmargin",10,0); |
| 6578 | 6579 | p->bbox.sw.y -= margin + pik_value(p,"bottommargin",12,0); |
| 6579 | 6580 | |
| 6580 | 6581 | /* Output the SVG */ |
| 6581 | - pik_append(p, "<svg",4); | |
| 6582 | + pik_append(p, "<svg xmlns='http://www.w3.org/2000/svg'",-1); | |
| 6582 | 6583 | if( p->zClass ){ |
| 6583 | 6584 | pik_append(p, " class=\"", -1); |
| 6584 | 6585 | pik_append(p, p->zClass, -1); |
| 6585 | 6586 | pik_append(p, "\"", 1); |
| 6586 | 6587 | } |
| @@ -7283,6 +7284,6 @@ | ||
| 7283 | 7284 | } |
| 7284 | 7285 | return 0; |
| 7285 | 7286 | } |
| 7286 | 7287 | #endif /* PIKCHR_SHELL */ |
| 7287 | 7288 | |
| 7288 | -#line 7313 "pikchr.c" | |
| 7289 | +#line 7314 "pikchr.c" | |
| 7289 | 7290 |
| --- src/pikchr.c | |
| +++ src/pikchr.c | |
| @@ -200,10 +200,11 @@ | |
| 200 | |
| 201 | /* An object to hold a position in 2-D space */ |
| 202 | struct PPoint { |
| 203 | PNum x, y; /* X and Y coordinates */ |
| 204 | }; |
| 205 | |
| 206 | /* A bounding box */ |
| 207 | struct PBox { |
| 208 | PPoint sw, ne; /* Lower-left and top-right corners */ |
| 209 | }; |
| @@ -447,11 +448,11 @@ | |
| 447 | static PElem *pik_assert(Pik*,PNum,PToken*,PNum); |
| 448 | static PElem *pik_position_assert(Pik*,PPoint*,PToken*,PPoint*); |
| 449 | static PNum pik_dist(PPoint*,PPoint*); |
| 450 | |
| 451 | |
| 452 | #line 478 "pikchr.c" |
| 453 | /**************** End of %include directives **********************************/ |
| 454 | /* These constants specify the various numeric values for terminal symbols. |
| 455 | ***************** Begin token definitions *************************************/ |
| 456 | #ifndef T_ID |
| 457 | #define T_ID 1 |
| @@ -1648,22 +1649,22 @@ | |
| 1648 | ** inside the C code. |
| 1649 | */ |
| 1650 | /********* Begin destructor definitions ***************************************/ |
| 1651 | case 95: /* element_list */ |
| 1652 | { |
| 1653 | #line 467 "pikchr.y" |
| 1654 | pik_elist_free(p,(yypminor->yy56)); |
| 1655 | #line 1680 "pikchr.c" |
| 1656 | } |
| 1657 | break; |
| 1658 | case 96: /* element */ |
| 1659 | case 97: /* unnamed_element */ |
| 1660 | case 98: /* basetype */ |
| 1661 | { |
| 1662 | #line 469 "pikchr.y" |
| 1663 | pik_elem_free(p,(yypminor->yy226)); |
| 1664 | #line 1689 "pikchr.c" |
| 1665 | } |
| 1666 | break; |
| 1667 | /********* End destructor definitions *****************************************/ |
| 1668 | default: break; /* If no destructor action specified: do nothing */ |
| 1669 | } |
| @@ -1877,14 +1878,14 @@ | |
| 1877 | #endif |
| 1878 | while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser); |
| 1879 | /* Here code is inserted which will execute if the parser |
| 1880 | ** stack every overflows */ |
| 1881 | /******** Begin %stack_overflow code ******************************************/ |
| 1882 | #line 501 "pikchr.y" |
| 1883 | |
| 1884 | pik_error(p, 0, "parser stack overflow"); |
| 1885 | #line 1910 "pikchr.c" |
| 1886 | /******** End %stack_overflow code ********************************************/ |
| 1887 | pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */ |
| 1888 | pik_parserCTX_STORE |
| 1889 | } |
| 1890 | |
| @@ -2354,603 +2355,603 @@ | |
| 2354 | ** break; |
| 2355 | */ |
| 2356 | /********** Begin reduce actions **********************************************/ |
| 2357 | YYMINORTYPE yylhsminor; |
| 2358 | case 0: /* document ::= element_list */ |
| 2359 | #line 505 "pikchr.y" |
| 2360 | {pik_render(p,yymsp[0].minor.yy56);} |
| 2361 | #line 2386 "pikchr.c" |
| 2362 | break; |
| 2363 | case 1: /* element_list ::= element */ |
| 2364 | #line 508 "pikchr.y" |
| 2365 | { yylhsminor.yy56 = pik_elist_append(p,0,yymsp[0].minor.yy226); } |
| 2366 | #line 2391 "pikchr.c" |
| 2367 | yymsp[0].minor.yy56 = yylhsminor.yy56; |
| 2368 | break; |
| 2369 | case 2: /* element_list ::= element_list EOL element */ |
| 2370 | #line 510 "pikchr.y" |
| 2371 | { yylhsminor.yy56 = pik_elist_append(p,yymsp[-2].minor.yy56,yymsp[0].minor.yy226); } |
| 2372 | #line 2397 "pikchr.c" |
| 2373 | yymsp[-2].minor.yy56 = yylhsminor.yy56; |
| 2374 | break; |
| 2375 | case 3: /* element ::= */ |
| 2376 | #line 513 "pikchr.y" |
| 2377 | { yymsp[1].minor.yy226 = 0; } |
| 2378 | #line 2403 "pikchr.c" |
| 2379 | break; |
| 2380 | case 4: /* element ::= direction */ |
| 2381 | #line 514 "pikchr.y" |
| 2382 | { pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy226=0; } |
| 2383 | #line 2408 "pikchr.c" |
| 2384 | yymsp[0].minor.yy226 = yylhsminor.yy226; |
| 2385 | break; |
| 2386 | case 5: /* element ::= lvalue ASSIGN rvalue */ |
| 2387 | #line 515 "pikchr.y" |
| 2388 | {pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy257,&yymsp[-1].minor.yy0); yylhsminor.yy226=0;} |
| 2389 | #line 2414 "pikchr.c" |
| 2390 | yymsp[-2].minor.yy226 = yylhsminor.yy226; |
| 2391 | break; |
| 2392 | case 6: /* element ::= PLACENAME COLON unnamed_element */ |
| 2393 | #line 517 "pikchr.y" |
| 2394 | { yylhsminor.yy226 = yymsp[0].minor.yy226; pik_elem_setname(p,yymsp[0].minor.yy226,&yymsp[-2].minor.yy0); } |
| 2395 | #line 2420 "pikchr.c" |
| 2396 | yymsp[-2].minor.yy226 = yylhsminor.yy226; |
| 2397 | break; |
| 2398 | case 7: /* element ::= PLACENAME COLON position */ |
| 2399 | #line 519 "pikchr.y" |
| 2400 | { yylhsminor.yy226 = pik_elem_new(p,0,0,0); |
| 2401 | if(yylhsminor.yy226){ yylhsminor.yy226->ptAt = yymsp[0].minor.yy175; pik_elem_setname(p,yylhsminor.yy226,&yymsp[-2].minor.yy0); }} |
| 2402 | #line 2427 "pikchr.c" |
| 2403 | yymsp[-2].minor.yy226 = yylhsminor.yy226; |
| 2404 | break; |
| 2405 | case 8: /* element ::= unnamed_element */ |
| 2406 | #line 521 "pikchr.y" |
| 2407 | {yylhsminor.yy226 = yymsp[0].minor.yy226;} |
| 2408 | #line 2433 "pikchr.c" |
| 2409 | yymsp[0].minor.yy226 = yylhsminor.yy226; |
| 2410 | break; |
| 2411 | case 9: /* element ::= print prlist */ |
| 2412 | #line 522 "pikchr.y" |
| 2413 | {pik_append(p,"<br>\n",5); yymsp[-1].minor.yy226=0;} |
| 2414 | #line 2439 "pikchr.c" |
| 2415 | break; |
| 2416 | case 10: /* element ::= ASSERT LP expr EQ expr RP */ |
| 2417 | #line 527 "pikchr.y" |
| 2418 | {yymsp[-5].minor.yy226=pik_assert(p,yymsp[-3].minor.yy257,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy257);} |
| 2419 | #line 2444 "pikchr.c" |
| 2420 | break; |
| 2421 | case 11: /* element ::= ASSERT LP position EQ position RP */ |
| 2422 | #line 529 "pikchr.y" |
| 2423 | {yymsp[-5].minor.yy226=pik_position_assert(p,&yymsp[-3].minor.yy175,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy175);} |
| 2424 | #line 2449 "pikchr.c" |
| 2425 | break; |
| 2426 | case 12: /* rvalue ::= PLACENAME */ |
| 2427 | #line 540 "pikchr.y" |
| 2428 | {yylhsminor.yy257 = pik_lookup_color(p,&yymsp[0].minor.yy0);} |
| 2429 | #line 2454 "pikchr.c" |
| 2430 | yymsp[0].minor.yy257 = yylhsminor.yy257; |
| 2431 | break; |
| 2432 | case 13: /* pritem ::= FILL */ |
| 2433 | case 14: /* pritem ::= COLOR */ yytestcase(yyruleno==14); |
| 2434 | case 15: /* pritem ::= THICKNESS */ yytestcase(yyruleno==15); |
| 2435 | #line 545 "pikchr.y" |
| 2436 | {pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));} |
| 2437 | #line 2462 "pikchr.c" |
| 2438 | break; |
| 2439 | case 16: /* pritem ::= rvalue */ |
| 2440 | #line 548 "pikchr.y" |
| 2441 | {pik_append_num(p,"",yymsp[0].minor.yy257);} |
| 2442 | #line 2467 "pikchr.c" |
| 2443 | break; |
| 2444 | case 17: /* pritem ::= STRING */ |
| 2445 | #line 549 "pikchr.y" |
| 2446 | {pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);} |
| 2447 | #line 2472 "pikchr.c" |
| 2448 | break; |
| 2449 | case 18: /* prsep ::= COMMA */ |
| 2450 | #line 550 "pikchr.y" |
| 2451 | {pik_append(p, " ", 1);} |
| 2452 | #line 2477 "pikchr.c" |
| 2453 | break; |
| 2454 | case 19: /* unnamed_element ::= basetype attribute_list */ |
| 2455 | #line 553 "pikchr.y" |
| 2456 | {yylhsminor.yy226 = yymsp[-1].minor.yy226; pik_after_adding_attributes(p,yylhsminor.yy226);} |
| 2457 | #line 2482 "pikchr.c" |
| 2458 | yymsp[-1].minor.yy226 = yylhsminor.yy226; |
| 2459 | break; |
| 2460 | case 20: /* basetype ::= CLASSNAME */ |
| 2461 | #line 555 "pikchr.y" |
| 2462 | {yylhsminor.yy226 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); } |
| 2463 | #line 2488 "pikchr.c" |
| 2464 | yymsp[0].minor.yy226 = yylhsminor.yy226; |
| 2465 | break; |
| 2466 | case 21: /* basetype ::= STRING textposition */ |
| 2467 | #line 557 "pikchr.y" |
| 2468 | {yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy116; yylhsminor.yy226 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); } |
| 2469 | #line 2494 "pikchr.c" |
| 2470 | yymsp[-1].minor.yy226 = yylhsminor.yy226; |
| 2471 | break; |
| 2472 | case 22: /* basetype ::= LB savelist element_list RB */ |
| 2473 | #line 559 "pikchr.y" |
| 2474 | { p->list = yymsp[-2].minor.yy56; yymsp[-3].minor.yy226 = pik_elem_new(p,0,0,yymsp[-1].minor.yy56); if(yymsp[-3].minor.yy226) yymsp[-3].minor.yy226->errTok = yymsp[0].minor.yy0; } |
| 2475 | #line 2500 "pikchr.c" |
| 2476 | break; |
| 2477 | case 23: /* savelist ::= */ |
| 2478 | #line 564 "pikchr.y" |
| 2479 | {yymsp[1].minor.yy56 = p->list; p->list = 0;} |
| 2480 | #line 2505 "pikchr.c" |
| 2481 | break; |
| 2482 | case 24: /* relexpr ::= expr */ |
| 2483 | #line 571 "pikchr.y" |
| 2484 | {yylhsminor.yy164.rAbs = yymsp[0].minor.yy257; yylhsminor.yy164.rRel = 0;} |
| 2485 | #line 2510 "pikchr.c" |
| 2486 | yymsp[0].minor.yy164 = yylhsminor.yy164; |
| 2487 | break; |
| 2488 | case 25: /* relexpr ::= expr PERCENT */ |
| 2489 | #line 572 "pikchr.y" |
| 2490 | {yylhsminor.yy164.rAbs = 0; yylhsminor.yy164.rRel = yymsp[-1].minor.yy257/100;} |
| 2491 | #line 2516 "pikchr.c" |
| 2492 | yymsp[-1].minor.yy164 = yylhsminor.yy164; |
| 2493 | break; |
| 2494 | case 26: /* optrelexpr ::= */ |
| 2495 | #line 574 "pikchr.y" |
| 2496 | {yymsp[1].minor.yy164.rAbs = 0; yymsp[1].minor.yy164.rRel = 1.0;} |
| 2497 | #line 2522 "pikchr.c" |
| 2498 | break; |
| 2499 | case 27: /* attribute_list ::= relexpr alist */ |
| 2500 | #line 576 "pikchr.y" |
| 2501 | {pik_add_direction(p,0,&yymsp[-1].minor.yy164);} |
| 2502 | #line 2527 "pikchr.c" |
| 2503 | break; |
| 2504 | case 28: /* attribute ::= numproperty relexpr */ |
| 2505 | #line 580 "pikchr.y" |
| 2506 | { pik_set_numprop(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy164); } |
| 2507 | #line 2532 "pikchr.c" |
| 2508 | break; |
| 2509 | case 29: /* attribute ::= dashproperty expr */ |
| 2510 | #line 581 "pikchr.y" |
| 2511 | { pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy257); } |
| 2512 | #line 2537 "pikchr.c" |
| 2513 | break; |
| 2514 | case 30: /* attribute ::= dashproperty */ |
| 2515 | #line 582 "pikchr.y" |
| 2516 | { pik_set_dashed(p,&yymsp[0].minor.yy0,0); } |
| 2517 | #line 2542 "pikchr.c" |
| 2518 | break; |
| 2519 | case 31: /* attribute ::= colorproperty rvalue */ |
| 2520 | #line 583 "pikchr.y" |
| 2521 | { pik_set_clrprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy257); } |
| 2522 | #line 2547 "pikchr.c" |
| 2523 | break; |
| 2524 | case 32: /* attribute ::= go direction optrelexpr */ |
| 2525 | #line 584 "pikchr.y" |
| 2526 | { pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy164);} |
| 2527 | #line 2552 "pikchr.c" |
| 2528 | break; |
| 2529 | case 33: /* attribute ::= go direction even position */ |
| 2530 | #line 585 "pikchr.y" |
| 2531 | {pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy175);} |
| 2532 | #line 2557 "pikchr.c" |
| 2533 | break; |
| 2534 | case 34: /* attribute ::= CLOSE */ |
| 2535 | #line 586 "pikchr.y" |
| 2536 | { pik_close_path(p,&yymsp[0].minor.yy0); } |
| 2537 | #line 2562 "pikchr.c" |
| 2538 | break; |
| 2539 | case 35: /* attribute ::= CHOP */ |
| 2540 | #line 587 "pikchr.y" |
| 2541 | { p->cur->bChop = 1; } |
| 2542 | #line 2567 "pikchr.c" |
| 2543 | break; |
| 2544 | case 36: /* attribute ::= FROM position */ |
| 2545 | #line 588 "pikchr.y" |
| 2546 | { pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy175); } |
| 2547 | #line 2572 "pikchr.c" |
| 2548 | break; |
| 2549 | case 37: /* attribute ::= TO position */ |
| 2550 | #line 589 "pikchr.y" |
| 2551 | { pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy175); } |
| 2552 | #line 2577 "pikchr.c" |
| 2553 | break; |
| 2554 | case 38: /* attribute ::= THEN */ |
| 2555 | #line 590 "pikchr.y" |
| 2556 | { pik_then(p, &yymsp[0].minor.yy0, p->cur); } |
| 2557 | #line 2582 "pikchr.c" |
| 2558 | break; |
| 2559 | case 39: /* attribute ::= THEN optrelexpr HEADING expr */ |
| 2560 | case 41: /* attribute ::= GO optrelexpr HEADING expr */ yytestcase(yyruleno==41); |
| 2561 | #line 592 "pikchr.y" |
| 2562 | {pik_move_hdg(p,&yymsp[-2].minor.yy164,&yymsp[-1].minor.yy0,yymsp[0].minor.yy257,0,&yymsp[-3].minor.yy0);} |
| 2563 | #line 2588 "pikchr.c" |
| 2564 | break; |
| 2565 | case 40: /* attribute ::= THEN optrelexpr EDGEPT */ |
| 2566 | case 42: /* attribute ::= GO optrelexpr EDGEPT */ yytestcase(yyruleno==42); |
| 2567 | #line 593 "pikchr.y" |
| 2568 | {pik_move_hdg(p,&yymsp[-1].minor.yy164,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);} |
| 2569 | #line 2594 "pikchr.c" |
| 2570 | break; |
| 2571 | case 43: /* attribute ::= AT position */ |
| 2572 | #line 598 "pikchr.y" |
| 2573 | { pik_set_at(p,0,&yymsp[0].minor.yy175,&yymsp[-1].minor.yy0); } |
| 2574 | #line 2599 "pikchr.c" |
| 2575 | break; |
| 2576 | case 44: /* attribute ::= SAME */ |
| 2577 | #line 600 "pikchr.y" |
| 2578 | {pik_same(p,0,&yymsp[0].minor.yy0);} |
| 2579 | #line 2604 "pikchr.c" |
| 2580 | break; |
| 2581 | case 45: /* attribute ::= SAME AS object */ |
| 2582 | #line 601 "pikchr.y" |
| 2583 | {pik_same(p,yymsp[0].minor.yy226,&yymsp[-2].minor.yy0);} |
| 2584 | #line 2609 "pikchr.c" |
| 2585 | break; |
| 2586 | case 46: /* attribute ::= STRING textposition */ |
| 2587 | #line 602 "pikchr.y" |
| 2588 | {pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy116);} |
| 2589 | #line 2614 "pikchr.c" |
| 2590 | break; |
| 2591 | case 47: /* attribute ::= FIT */ |
| 2592 | #line 603 "pikchr.y" |
| 2593 | {pik_size_to_fit(p,&yymsp[0].minor.yy0); } |
| 2594 | #line 2619 "pikchr.c" |
| 2595 | break; |
| 2596 | case 48: /* attribute ::= BEHIND object */ |
| 2597 | #line 604 "pikchr.y" |
| 2598 | {pik_behind(p,yymsp[0].minor.yy226);} |
| 2599 | #line 2624 "pikchr.c" |
| 2600 | break; |
| 2601 | case 49: /* withclause ::= DOT_E edge AT position */ |
| 2602 | case 50: /* withclause ::= edge AT position */ yytestcase(yyruleno==50); |
| 2603 | #line 612 "pikchr.y" |
| 2604 | { pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy175,&yymsp[-1].minor.yy0); } |
| 2605 | #line 2630 "pikchr.c" |
| 2606 | break; |
| 2607 | case 51: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */ |
| 2608 | #line 616 "pikchr.y" |
| 2609 | {yylhsminor.yy0 = yymsp[0].minor.yy0;} |
| 2610 | #line 2635 "pikchr.c" |
| 2611 | yymsp[0].minor.yy0 = yylhsminor.yy0; |
| 2612 | break; |
| 2613 | case 52: /* boolproperty ::= CW */ |
| 2614 | #line 627 "pikchr.y" |
| 2615 | {p->cur->cw = 1;} |
| 2616 | #line 2641 "pikchr.c" |
| 2617 | break; |
| 2618 | case 53: /* boolproperty ::= CCW */ |
| 2619 | #line 628 "pikchr.y" |
| 2620 | {p->cur->cw = 0;} |
| 2621 | #line 2646 "pikchr.c" |
| 2622 | break; |
| 2623 | case 54: /* boolproperty ::= LARROW */ |
| 2624 | #line 629 "pikchr.y" |
| 2625 | {p->cur->larrow=1; p->cur->rarrow=0; } |
| 2626 | #line 2651 "pikchr.c" |
| 2627 | break; |
| 2628 | case 55: /* boolproperty ::= RARROW */ |
| 2629 | #line 630 "pikchr.y" |
| 2630 | {p->cur->larrow=0; p->cur->rarrow=1; } |
| 2631 | #line 2656 "pikchr.c" |
| 2632 | break; |
| 2633 | case 56: /* boolproperty ::= LRARROW */ |
| 2634 | #line 631 "pikchr.y" |
| 2635 | {p->cur->larrow=1; p->cur->rarrow=1; } |
| 2636 | #line 2661 "pikchr.c" |
| 2637 | break; |
| 2638 | case 57: /* boolproperty ::= INVIS */ |
| 2639 | #line 632 "pikchr.y" |
| 2640 | {p->cur->sw = 0.0;} |
| 2641 | #line 2666 "pikchr.c" |
| 2642 | break; |
| 2643 | case 58: /* boolproperty ::= THICK */ |
| 2644 | #line 633 "pikchr.y" |
| 2645 | {p->cur->sw *= 1.5;} |
| 2646 | #line 2671 "pikchr.c" |
| 2647 | break; |
| 2648 | case 59: /* boolproperty ::= THIN */ |
| 2649 | #line 634 "pikchr.y" |
| 2650 | {p->cur->sw *= 0.67;} |
| 2651 | #line 2676 "pikchr.c" |
| 2652 | break; |
| 2653 | case 60: /* textposition ::= */ |
| 2654 | #line 636 "pikchr.y" |
| 2655 | {yymsp[1].minor.yy116 = 0;} |
| 2656 | #line 2681 "pikchr.c" |
| 2657 | break; |
| 2658 | case 61: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */ |
| 2659 | #line 639 "pikchr.y" |
| 2660 | {yylhsminor.yy116 = pik_text_position(yymsp[-1].minor.yy116,&yymsp[0].minor.yy0);} |
| 2661 | #line 2686 "pikchr.c" |
| 2662 | yymsp[-1].minor.yy116 = yylhsminor.yy116; |
| 2663 | break; |
| 2664 | case 62: /* position ::= expr COMMA expr */ |
| 2665 | #line 642 "pikchr.y" |
| 2666 | {yylhsminor.yy175.x=yymsp[-2].minor.yy257; yylhsminor.yy175.y=yymsp[0].minor.yy257;} |
| 2667 | #line 2692 "pikchr.c" |
| 2668 | yymsp[-2].minor.yy175 = yylhsminor.yy175; |
| 2669 | break; |
| 2670 | case 63: /* position ::= place PLUS expr COMMA expr */ |
| 2671 | #line 644 "pikchr.y" |
| 2672 | {yylhsminor.yy175.x=yymsp[-4].minor.yy175.x+yymsp[-2].minor.yy257; yylhsminor.yy175.y=yymsp[-4].minor.yy175.y+yymsp[0].minor.yy257;} |
| 2673 | #line 2698 "pikchr.c" |
| 2674 | yymsp[-4].minor.yy175 = yylhsminor.yy175; |
| 2675 | break; |
| 2676 | case 64: /* position ::= place MINUS expr COMMA expr */ |
| 2677 | #line 645 "pikchr.y" |
| 2678 | {yylhsminor.yy175.x=yymsp[-4].minor.yy175.x-yymsp[-2].minor.yy257; yylhsminor.yy175.y=yymsp[-4].minor.yy175.y-yymsp[0].minor.yy257;} |
| 2679 | #line 2704 "pikchr.c" |
| 2680 | yymsp[-4].minor.yy175 = yylhsminor.yy175; |
| 2681 | break; |
| 2682 | case 65: /* position ::= place PLUS LP expr COMMA expr RP */ |
| 2683 | #line 647 "pikchr.y" |
| 2684 | {yylhsminor.yy175.x=yymsp[-6].minor.yy175.x+yymsp[-3].minor.yy257; yylhsminor.yy175.y=yymsp[-6].minor.yy175.y+yymsp[-1].minor.yy257;} |
| 2685 | #line 2710 "pikchr.c" |
| 2686 | yymsp[-6].minor.yy175 = yylhsminor.yy175; |
| 2687 | break; |
| 2688 | case 66: /* position ::= place MINUS LP expr COMMA expr RP */ |
| 2689 | #line 649 "pikchr.y" |
| 2690 | {yylhsminor.yy175.x=yymsp[-6].minor.yy175.x-yymsp[-3].minor.yy257; yylhsminor.yy175.y=yymsp[-6].minor.yy175.y-yymsp[-1].minor.yy257;} |
| 2691 | #line 2716 "pikchr.c" |
| 2692 | yymsp[-6].minor.yy175 = yylhsminor.yy175; |
| 2693 | break; |
| 2694 | case 67: /* position ::= LP position COMMA position RP */ |
| 2695 | #line 650 "pikchr.y" |
| 2696 | {yymsp[-4].minor.yy175.x=yymsp[-3].minor.yy175.x; yymsp[-4].minor.yy175.y=yymsp[-1].minor.yy175.y;} |
| 2697 | #line 2722 "pikchr.c" |
| 2698 | break; |
| 2699 | case 68: /* position ::= LP position RP */ |
| 2700 | #line 651 "pikchr.y" |
| 2701 | {yymsp[-2].minor.yy175=yymsp[-1].minor.yy175;} |
| 2702 | #line 2727 "pikchr.c" |
| 2703 | break; |
| 2704 | case 69: /* position ::= expr between position AND position */ |
| 2705 | #line 653 "pikchr.y" |
| 2706 | {yylhsminor.yy175 = pik_position_between(yymsp[-4].minor.yy257,yymsp[-2].minor.yy175,yymsp[0].minor.yy175);} |
| 2707 | #line 2732 "pikchr.c" |
| 2708 | yymsp[-4].minor.yy175 = yylhsminor.yy175; |
| 2709 | break; |
| 2710 | case 70: /* position ::= expr LT position COMMA position GT */ |
| 2711 | #line 655 "pikchr.y" |
| 2712 | {yylhsminor.yy175 = pik_position_between(yymsp[-5].minor.yy257,yymsp[-3].minor.yy175,yymsp[-1].minor.yy175);} |
| 2713 | #line 2738 "pikchr.c" |
| 2714 | yymsp[-5].minor.yy175 = yylhsminor.yy175; |
| 2715 | break; |
| 2716 | case 71: /* position ::= expr ABOVE position */ |
| 2717 | #line 656 "pikchr.y" |
| 2718 | {yylhsminor.yy175=yymsp[0].minor.yy175; yylhsminor.yy175.y += yymsp[-2].minor.yy257;} |
| 2719 | #line 2744 "pikchr.c" |
| 2720 | yymsp[-2].minor.yy175 = yylhsminor.yy175; |
| 2721 | break; |
| 2722 | case 72: /* position ::= expr BELOW position */ |
| 2723 | #line 657 "pikchr.y" |
| 2724 | {yylhsminor.yy175=yymsp[0].minor.yy175; yylhsminor.yy175.y -= yymsp[-2].minor.yy257;} |
| 2725 | #line 2750 "pikchr.c" |
| 2726 | yymsp[-2].minor.yy175 = yylhsminor.yy175; |
| 2727 | break; |
| 2728 | case 73: /* position ::= expr LEFT OF position */ |
| 2729 | #line 658 "pikchr.y" |
| 2730 | {yylhsminor.yy175=yymsp[0].minor.yy175; yylhsminor.yy175.x -= yymsp[-3].minor.yy257;} |
| 2731 | #line 2756 "pikchr.c" |
| 2732 | yymsp[-3].minor.yy175 = yylhsminor.yy175; |
| 2733 | break; |
| 2734 | case 74: /* position ::= expr RIGHT OF position */ |
| 2735 | #line 659 "pikchr.y" |
| 2736 | {yylhsminor.yy175=yymsp[0].minor.yy175; yylhsminor.yy175.x += yymsp[-3].minor.yy257;} |
| 2737 | #line 2762 "pikchr.c" |
| 2738 | yymsp[-3].minor.yy175 = yylhsminor.yy175; |
| 2739 | break; |
| 2740 | case 75: /* position ::= expr ON HEADING EDGEPT OF position */ |
| 2741 | #line 661 "pikchr.y" |
| 2742 | {yylhsminor.yy175 = pik_position_at_hdg(yymsp[-5].minor.yy257,&yymsp[-2].minor.yy0,yymsp[0].minor.yy175);} |
| 2743 | #line 2768 "pikchr.c" |
| 2744 | yymsp[-5].minor.yy175 = yylhsminor.yy175; |
| 2745 | break; |
| 2746 | case 76: /* position ::= expr HEADING EDGEPT OF position */ |
| 2747 | #line 663 "pikchr.y" |
| 2748 | {yylhsminor.yy175 = pik_position_at_hdg(yymsp[-4].minor.yy257,&yymsp[-2].minor.yy0,yymsp[0].minor.yy175);} |
| 2749 | #line 2774 "pikchr.c" |
| 2750 | yymsp[-4].minor.yy175 = yylhsminor.yy175; |
| 2751 | break; |
| 2752 | case 77: /* position ::= expr EDGEPT OF position */ |
| 2753 | #line 665 "pikchr.y" |
| 2754 | {yylhsminor.yy175 = pik_position_at_hdg(yymsp[-3].minor.yy257,&yymsp[-2].minor.yy0,yymsp[0].minor.yy175);} |
| 2755 | #line 2780 "pikchr.c" |
| 2756 | yymsp[-3].minor.yy175 = yylhsminor.yy175; |
| 2757 | break; |
| 2758 | case 78: /* position ::= expr ON HEADING expr FROM position */ |
| 2759 | #line 667 "pikchr.y" |
| 2760 | {yylhsminor.yy175 = pik_position_at_angle(yymsp[-5].minor.yy257,yymsp[-2].minor.yy257,yymsp[0].minor.yy175);} |
| 2761 | #line 2786 "pikchr.c" |
| 2762 | yymsp[-5].minor.yy175 = yylhsminor.yy175; |
| 2763 | break; |
| 2764 | case 79: /* position ::= expr HEADING expr FROM position */ |
| 2765 | #line 669 "pikchr.y" |
| 2766 | {yylhsminor.yy175 = pik_position_at_angle(yymsp[-4].minor.yy257,yymsp[-2].minor.yy257,yymsp[0].minor.yy175);} |
| 2767 | #line 2792 "pikchr.c" |
| 2768 | yymsp[-4].minor.yy175 = yylhsminor.yy175; |
| 2769 | break; |
| 2770 | case 80: /* place ::= edge OF object */ |
| 2771 | #line 681 "pikchr.y" |
| 2772 | {yylhsminor.yy175 = pik_place_of_elem(p,yymsp[0].minor.yy226,&yymsp[-2].minor.yy0);} |
| 2773 | #line 2798 "pikchr.c" |
| 2774 | yymsp[-2].minor.yy175 = yylhsminor.yy175; |
| 2775 | break; |
| 2776 | case 81: /* place2 ::= object */ |
| 2777 | #line 682 "pikchr.y" |
| 2778 | {yylhsminor.yy175 = pik_place_of_elem(p,yymsp[0].minor.yy226,0);} |
| 2779 | #line 2804 "pikchr.c" |
| 2780 | yymsp[0].minor.yy175 = yylhsminor.yy175; |
| 2781 | break; |
| 2782 | case 82: /* place2 ::= object DOT_E edge */ |
| 2783 | #line 683 "pikchr.y" |
| 2784 | {yylhsminor.yy175 = pik_place_of_elem(p,yymsp[-2].minor.yy226,&yymsp[0].minor.yy0);} |
| 2785 | #line 2810 "pikchr.c" |
| 2786 | yymsp[-2].minor.yy175 = yylhsminor.yy175; |
| 2787 | break; |
| 2788 | case 83: /* place2 ::= NTH VERTEX OF object */ |
| 2789 | #line 684 "pikchr.y" |
| 2790 | {yylhsminor.yy175 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy226);} |
| 2791 | #line 2816 "pikchr.c" |
| 2792 | yymsp[-3].minor.yy175 = yylhsminor.yy175; |
| 2793 | break; |
| 2794 | case 84: /* object ::= nth */ |
| 2795 | #line 696 "pikchr.y" |
| 2796 | {yylhsminor.yy226 = pik_find_nth(p,0,&yymsp[0].minor.yy0);} |
| 2797 | #line 2822 "pikchr.c" |
| 2798 | yymsp[0].minor.yy226 = yylhsminor.yy226; |
| 2799 | break; |
| 2800 | case 85: /* object ::= nth OF|IN object */ |
| 2801 | #line 697 "pikchr.y" |
| 2802 | {yylhsminor.yy226 = pik_find_nth(p,yymsp[0].minor.yy226,&yymsp[-2].minor.yy0);} |
| 2803 | #line 2828 "pikchr.c" |
| 2804 | yymsp[-2].minor.yy226 = yylhsminor.yy226; |
| 2805 | break; |
| 2806 | case 86: /* objectname ::= PLACENAME */ |
| 2807 | #line 699 "pikchr.y" |
| 2808 | {yylhsminor.yy226 = pik_find_byname(p,0,&yymsp[0].minor.yy0);} |
| 2809 | #line 2834 "pikchr.c" |
| 2810 | yymsp[0].minor.yy226 = yylhsminor.yy226; |
| 2811 | break; |
| 2812 | case 87: /* objectname ::= objectname DOT_U PLACENAME */ |
| 2813 | #line 701 "pikchr.y" |
| 2814 | {yylhsminor.yy226 = pik_find_byname(p,yymsp[-2].minor.yy226,&yymsp[0].minor.yy0);} |
| 2815 | #line 2840 "pikchr.c" |
| 2816 | yymsp[-2].minor.yy226 = yylhsminor.yy226; |
| 2817 | break; |
| 2818 | case 88: /* nth ::= NTH CLASSNAME */ |
| 2819 | #line 703 "pikchr.y" |
| 2820 | {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); } |
| 2821 | #line 2846 "pikchr.c" |
| 2822 | yymsp[-1].minor.yy0 = yylhsminor.yy0; |
| 2823 | break; |
| 2824 | case 89: /* nth ::= NTH LAST CLASSNAME */ |
| 2825 | #line 704 "pikchr.y" |
| 2826 | {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); } |
| 2827 | #line 2852 "pikchr.c" |
| 2828 | yymsp[-2].minor.yy0 = yylhsminor.yy0; |
| 2829 | break; |
| 2830 | case 90: /* nth ::= LAST CLASSNAME */ |
| 2831 | #line 705 "pikchr.y" |
| 2832 | {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;} |
| 2833 | #line 2858 "pikchr.c" |
| 2834 | break; |
| 2835 | case 91: /* nth ::= LAST */ |
| 2836 | #line 706 "pikchr.y" |
| 2837 | {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;} |
| 2838 | #line 2863 "pikchr.c" |
| 2839 | yymsp[0].minor.yy0 = yylhsminor.yy0; |
| 2840 | break; |
| 2841 | case 92: /* nth ::= NTH LB RB */ |
| 2842 | #line 707 "pikchr.y" |
| 2843 | {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);} |
| 2844 | #line 2869 "pikchr.c" |
| 2845 | yymsp[-2].minor.yy0 = yylhsminor.yy0; |
| 2846 | break; |
| 2847 | case 93: /* nth ::= NTH LAST LB RB */ |
| 2848 | #line 708 "pikchr.y" |
| 2849 | {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);} |
| 2850 | #line 2875 "pikchr.c" |
| 2851 | yymsp[-3].minor.yy0 = yylhsminor.yy0; |
| 2852 | break; |
| 2853 | case 94: /* nth ::= LAST LB RB */ |
| 2854 | #line 709 "pikchr.y" |
| 2855 | {yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; } |
| 2856 | #line 2881 "pikchr.c" |
| 2857 | break; |
| 2858 | case 95: /* expr ::= expr PLUS expr */ |
| 2859 | #line 711 "pikchr.y" |
| 2860 | {yylhsminor.yy257=yymsp[-2].minor.yy257+yymsp[0].minor.yy257;} |
| 2861 | #line 2886 "pikchr.c" |
| 2862 | yymsp[-2].minor.yy257 = yylhsminor.yy257; |
| 2863 | break; |
| 2864 | case 96: /* expr ::= expr MINUS expr */ |
| 2865 | #line 712 "pikchr.y" |
| 2866 | {yylhsminor.yy257=yymsp[-2].minor.yy257-yymsp[0].minor.yy257;} |
| 2867 | #line 2892 "pikchr.c" |
| 2868 | yymsp[-2].minor.yy257 = yylhsminor.yy257; |
| 2869 | break; |
| 2870 | case 97: /* expr ::= expr STAR expr */ |
| 2871 | #line 713 "pikchr.y" |
| 2872 | {yylhsminor.yy257=yymsp[-2].minor.yy257*yymsp[0].minor.yy257;} |
| 2873 | #line 2898 "pikchr.c" |
| 2874 | yymsp[-2].minor.yy257 = yylhsminor.yy257; |
| 2875 | break; |
| 2876 | case 98: /* expr ::= expr SLASH expr */ |
| 2877 | #line 714 "pikchr.y" |
| 2878 | { |
| 2879 | if( yymsp[0].minor.yy257==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy257 = 0.0; } |
| 2880 | else{ yylhsminor.yy257 = yymsp[-2].minor.yy257/yymsp[0].minor.yy257; } |
| 2881 | } |
| 2882 | #line 2907 "pikchr.c" |
| 2883 | yymsp[-2].minor.yy257 = yylhsminor.yy257; |
| 2884 | break; |
| 2885 | case 99: /* expr ::= MINUS expr */ |
| 2886 | #line 718 "pikchr.y" |
| 2887 | {yymsp[-1].minor.yy257=-yymsp[0].minor.yy257;} |
| 2888 | #line 2913 "pikchr.c" |
| 2889 | break; |
| 2890 | case 100: /* expr ::= PLUS expr */ |
| 2891 | #line 719 "pikchr.y" |
| 2892 | {yymsp[-1].minor.yy257=yymsp[0].minor.yy257;} |
| 2893 | #line 2918 "pikchr.c" |
| 2894 | break; |
| 2895 | case 101: /* expr ::= LP expr RP */ |
| 2896 | #line 720 "pikchr.y" |
| 2897 | {yymsp[-2].minor.yy257=yymsp[-1].minor.yy257;} |
| 2898 | #line 2923 "pikchr.c" |
| 2899 | break; |
| 2900 | case 102: /* expr ::= LP FILL|COLOR|THICKNESS RP */ |
| 2901 | #line 721 "pikchr.y" |
| 2902 | {yymsp[-2].minor.yy257=pik_get_var(p,&yymsp[-1].minor.yy0);} |
| 2903 | #line 2928 "pikchr.c" |
| 2904 | break; |
| 2905 | case 103: /* expr ::= NUMBER */ |
| 2906 | #line 722 "pikchr.y" |
| 2907 | {yylhsminor.yy257=pik_atof(&yymsp[0].minor.yy0);} |
| 2908 | #line 2933 "pikchr.c" |
| 2909 | yymsp[0].minor.yy257 = yylhsminor.yy257; |
| 2910 | break; |
| 2911 | case 104: /* expr ::= ID */ |
| 2912 | #line 723 "pikchr.y" |
| 2913 | {yylhsminor.yy257=pik_get_var(p,&yymsp[0].minor.yy0);} |
| 2914 | #line 2939 "pikchr.c" |
| 2915 | yymsp[0].minor.yy257 = yylhsminor.yy257; |
| 2916 | break; |
| 2917 | case 105: /* expr ::= FUNC1 LP expr RP */ |
| 2918 | #line 724 "pikchr.y" |
| 2919 | {yylhsminor.yy257 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy257,0.0);} |
| 2920 | #line 2945 "pikchr.c" |
| 2921 | yymsp[-3].minor.yy257 = yylhsminor.yy257; |
| 2922 | break; |
| 2923 | case 106: /* expr ::= FUNC2 LP expr COMMA expr RP */ |
| 2924 | #line 725 "pikchr.y" |
| 2925 | {yylhsminor.yy257 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy257,yymsp[-1].minor.yy257);} |
| 2926 | #line 2951 "pikchr.c" |
| 2927 | yymsp[-5].minor.yy257 = yylhsminor.yy257; |
| 2928 | break; |
| 2929 | case 107: /* expr ::= DIST LP position COMMA position RP */ |
| 2930 | #line 726 "pikchr.y" |
| 2931 | {yymsp[-5].minor.yy257 = pik_dist(&yymsp[-3].minor.yy175,&yymsp[-1].minor.yy175);} |
| 2932 | #line 2957 "pikchr.c" |
| 2933 | break; |
| 2934 | case 108: /* expr ::= place2 DOT_XY X */ |
| 2935 | #line 727 "pikchr.y" |
| 2936 | {yylhsminor.yy257 = yymsp[-2].minor.yy175.x;} |
| 2937 | #line 2962 "pikchr.c" |
| 2938 | yymsp[-2].minor.yy257 = yylhsminor.yy257; |
| 2939 | break; |
| 2940 | case 109: /* expr ::= place2 DOT_XY Y */ |
| 2941 | #line 728 "pikchr.y" |
| 2942 | {yylhsminor.yy257 = yymsp[-2].minor.yy175.y;} |
| 2943 | #line 2968 "pikchr.c" |
| 2944 | yymsp[-2].minor.yy257 = yylhsminor.yy257; |
| 2945 | break; |
| 2946 | case 110: /* expr ::= object DOT_L numproperty */ |
| 2947 | case 111: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==111); |
| 2948 | case 112: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==112); |
| 2949 | #line 729 "pikchr.y" |
| 2950 | {yylhsminor.yy257=pik_property_of(yymsp[-2].minor.yy226,&yymsp[0].minor.yy0);} |
| 2951 | #line 2976 "pikchr.c" |
| 2952 | yymsp[-2].minor.yy257 = yylhsminor.yy257; |
| 2953 | break; |
| 2954 | default: |
| 2955 | /* (113) lvalue ::= ID */ yytestcase(yyruleno==113); |
| 2956 | /* (114) lvalue ::= FILL */ yytestcase(yyruleno==114); |
| @@ -3049,19 +3050,19 @@ | |
| 3049 | ){ |
| 3050 | pik_parserARG_FETCH |
| 3051 | pik_parserCTX_FETCH |
| 3052 | #define TOKEN yyminor |
| 3053 | /************ Begin %syntax_error code ****************************************/ |
| 3054 | #line 493 "pikchr.y" |
| 3055 | |
| 3056 | if( TOKEN.z && TOKEN.z[0] ){ |
| 3057 | pik_error(p, &TOKEN, "syntax error"); |
| 3058 | }else{ |
| 3059 | pik_error(p, 0, "syntax error"); |
| 3060 | } |
| 3061 | UNUSED_PARAMETER(yymajor); |
| 3062 | #line 3087 "pikchr.c" |
| 3063 | /************ End %syntax_error code ******************************************/ |
| 3064 | pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */ |
| 3065 | pik_parserCTX_STORE |
| 3066 | } |
| 3067 | |
| @@ -3290,11 +3291,11 @@ | |
| 3290 | #else |
| 3291 | (void)iToken; |
| 3292 | return 0; |
| 3293 | #endif |
| 3294 | } |
| 3295 | #line 734 "pikchr.y" |
| 3296 | |
| 3297 | |
| 3298 | |
| 3299 | /* Chart of the 140 official HTML color names with their |
| 3300 | ** corresponding RGB value. |
| @@ -3573,11 +3574,11 @@ | |
| 3573 | pElem->rad = pik_value(p, "boxrad",6,0); |
| 3574 | } |
| 3575 | /* Return offset from the center of the box to the compass point |
| 3576 | ** given by parameter cp */ |
| 3577 | static PPoint boxOffset(Pik *p, PElem *pElem, int cp){ |
| 3578 | PPoint pt; |
| 3579 | PNum w2 = 0.5*pElem->w; |
| 3580 | PNum h2 = 0.5*pElem->h; |
| 3581 | PNum rad = pElem->rad; |
| 3582 | PNum rx; |
| 3583 | if( rad<=0.0 ){ |
| @@ -3585,21 +3586,21 @@ | |
| 3585 | }else{ |
| 3586 | if( rad>w2 ) rad = w2; |
| 3587 | if( rad>h2 ) rad = h2; |
| 3588 | rx = 0.29289321881345252392*rad; |
| 3589 | } |
| 3590 | pt.x = pt.y = 0.0; |
| 3591 | switch( cp ){ |
| 3592 | case CP_C: pt.x = 0.0; pt.y = 0.0; break; |
| 3593 | case CP_N: pt.x = 0.0; pt.y = h2; break; |
| 3594 | case CP_NE: pt.x = w2-rx; pt.y = h2-rx; break; |
| 3595 | case CP_E: pt.x = w2; pt.y = 0.0; break; |
| 3596 | case CP_SE: pt.x = w2-rx; pt.y = rx-h2; break; |
| 3597 | case CP_S: pt.x = 0.0; pt.y = -h2; break; |
| 3598 | case CP_SW: pt.x = rx-w2; pt.y = rx-h2; break; |
| 3599 | case CP_W: pt.x = -w2; pt.y = 0.0; break; |
| 3600 | case CP_NW: pt.x = rx-w2; pt.y = h2-rx; break; |
| 3601 | } |
| 3602 | UNUSED_PARAMETER(p); |
| 3603 | return pt; |
| 3604 | } |
| 3605 | static PPoint boxChop(Pik *p, PElem *pElem, PPoint *pPt){ |
| @@ -3789,24 +3790,25 @@ | |
| 3789 | pik_append(p,"\" />\n", -1); |
| 3790 | } |
| 3791 | pik_append_txt(p, pElem, 0); |
| 3792 | } |
| 3793 | static PPoint cylinderOffset(Pik *p, PElem *pElem, int cp){ |
| 3794 | PPoint pt; |
| 3795 | PNum w2 = pElem->w*0.5; |
| 3796 | PNum h1 = pElem->h*0.5; |
| 3797 | PNum h2 = h1 - pElem->rad; |
| 3798 | switch( cp ){ |
| 3799 | case CP_C: pt.x = 0.0; pt.y = 0.0; break; |
| 3800 | case CP_N: pt.x = 0.0; pt.y = h1; break; |
| 3801 | case CP_NE: pt.x = w2; pt.y = h2; break; |
| 3802 | case CP_E: pt.x = w2; pt.y = 0.0; break; |
| 3803 | case CP_SE: pt.x = w2; pt.y = -h2; break; |
| 3804 | case CP_S: pt.x = 0.0; pt.y = -h1; break; |
| 3805 | case CP_SW: pt.x = -w2; pt.y = -h2; break; |
| 3806 | case CP_W: pt.x = -w2; pt.y = 0.0; break; |
| 3807 | case CP_NW: pt.x = -w2; pt.y = h2; break; |
| 3808 | } |
| 3809 | UNUSED_PARAMETER(p); |
| 3810 | return pt; |
| 3811 | } |
| 3812 | |
| @@ -3832,16 +3834,14 @@ | |
| 3832 | pik_bbox_addellipse(&pElem->bbox, pElem->ptAt.x, pElem->ptAt.y, |
| 3833 | pElem->rad, pElem->rad); |
| 3834 | UNUSED_PARAMETER(p); |
| 3835 | } |
| 3836 | static PPoint dotOffset(Pik *p, PElem *pElem, int cp){ |
| 3837 | PPoint zero; |
| 3838 | zero.x = zero.y = 0; |
| 3839 | UNUSED_PARAMETER(p); |
| 3840 | UNUSED_PARAMETER(pElem); |
| 3841 | UNUSED_PARAMETER(cp); |
| 3842 | return zero; |
| 3843 | } |
| 3844 | static void dotRender(Pik *p, PElem *pElem){ |
| 3845 | PNum r = pElem->rad; |
| 3846 | PPoint pt = pElem->ptAt; |
| 3847 | if( pElem->sw>0.0 ){ |
| @@ -3876,25 +3876,26 @@ | |
| 3876 | chop.y = pElem->ptAt.y + 0.5*dy*pElem->h/dist; |
| 3877 | UNUSED_PARAMETER(p); |
| 3878 | return chop; |
| 3879 | } |
| 3880 | static PPoint ellipseOffset(Pik *p, PElem *pElem, int cp){ |
| 3881 | PPoint pt; |
| 3882 | PNum w = pElem->w*0.5; |
| 3883 | PNum w2 = w*0.70710678118654747608; |
| 3884 | PNum h = pElem->h*0.5; |
| 3885 | PNum h2 = h*0.70710678118654747608; |
| 3886 | switch( cp ){ |
| 3887 | case CP_C: pt.x = 0.0; pt.y = 0.0; break; |
| 3888 | case CP_N: pt.x = 0.0; pt.y = h; break; |
| 3889 | case CP_NE: pt.x = w2; pt.y = h2; break; |
| 3890 | case CP_E: pt.x = w; pt.y = 0.0; break; |
| 3891 | case CP_SE: pt.x = w2; pt.y = -h2; break; |
| 3892 | case CP_S: pt.x = 0.0; pt.y = -h; break; |
| 3893 | case CP_SW: pt.x = -w2; pt.y = -h2; break; |
| 3894 | case CP_W: pt.x = -w; pt.y = 0.0; break; |
| 3895 | case CP_NW: pt.x = -w2; pt.y = h2; break; |
| 3896 | } |
| 3897 | UNUSED_PARAMETER(p); |
| 3898 | return pt; |
| 3899 | } |
| 3900 | static void ellipseRender(Pik *p, PElem *pElem){ |
| @@ -3919,29 +3920,30 @@ | |
| 3919 | pElem->rad = pik_value(p, "filerad",7,0); |
| 3920 | } |
| 3921 | /* Return offset from the center of the file to the compass point |
| 3922 | ** given by parameter cp */ |
| 3923 | static PPoint fileOffset(Pik *p, PElem *pElem, int cp){ |
| 3924 | PPoint pt; |
| 3925 | PNum w2 = 0.5*pElem->w; |
| 3926 | PNum h2 = 0.5*pElem->h; |
| 3927 | PNum rx = pElem->rad; |
| 3928 | PNum mn = w2<h2 ? w2 : h2; |
| 3929 | if( rx>mn ) rx = mn; |
| 3930 | if( rx<mn*0.25 ) rx = mn*0.25; |
| 3931 | pt.x = pt.y = 0.0; |
| 3932 | rx *= 0.5; |
| 3933 | switch( cp ){ |
| 3934 | case CP_C: pt.x = 0.0; pt.y = 0.0; break; |
| 3935 | case CP_N: pt.x = 0.0; pt.y = h2; break; |
| 3936 | case CP_NE: pt.x = w2-rx; pt.y = h2-rx; break; |
| 3937 | case CP_E: pt.x = w2; pt.y = 0.0; break; |
| 3938 | case CP_SE: pt.x = w2; pt.y = -h2; break; |
| 3939 | case CP_S: pt.x = 0.0; pt.y = -h2; break; |
| 3940 | case CP_SW: pt.x = -w2; pt.y = -h2; break; |
| 3941 | case CP_W: pt.x = -w2; pt.y = 0.0; break; |
| 3942 | case CP_NW: pt.x = -w2; pt.y = h2; break; |
| 3943 | } |
| 3944 | UNUSED_PARAMETER(p); |
| 3945 | return pt; |
| 3946 | } |
| 3947 | static void fileFit(Pik *p, PElem *pElem, PNum w, PNum h){ |
| @@ -5086,10 +5088,11 @@ | |
| 5086 | p->cur = pNew; |
| 5087 | p->nTPath = 1; |
| 5088 | p->thenFlag = 0; |
| 5089 | if( p->list==0 || p->list->n==0 ){ |
| 5090 | pNew->ptAt.x = pNew->ptAt.y = 0.0; |
| 5091 | }else{ |
| 5092 | PElem *pPrior = p->list->a[p->list->n-1]; |
| 5093 | pNew->ptAt = pPrior->ptExit; |
| 5094 | switch( p->eDir ){ |
| 5095 | default: pNew->eWith = CP_W; break; |
| @@ -6135,14 +6138,12 @@ | |
| 6135 | /* Return a "Place" associated with element pElem. If pEdge is NULL |
| 6136 | ** return the center of the object. Otherwise, return the corner |
| 6137 | ** described by pEdge. |
| 6138 | */ |
| 6139 | static PPoint pik_place_of_elem(Pik *p, PElem *pElem, PToken *pEdge){ |
| 6140 | PPoint pt; |
| 6141 | const PClass *pClass; |
| 6142 | pt.x = 0.0; |
| 6143 | pt.y = 0.0; |
| 6144 | if( pElem==0 ) return pt; |
| 6145 | if( pEdge==0 ){ |
| 6146 | return pElem->ptAt; |
| 6147 | } |
| 6148 | pClass = pElem->type; |
| @@ -6576,11 +6577,11 @@ | |
| 6576 | p->bbox.ne.y += margin + pik_value(p,"topmargin",9,0); |
| 6577 | p->bbox.sw.x -= margin + pik_value(p,"leftmargin",10,0); |
| 6578 | p->bbox.sw.y -= margin + pik_value(p,"bottommargin",12,0); |
| 6579 | |
| 6580 | /* Output the SVG */ |
| 6581 | pik_append(p, "<svg",4); |
| 6582 | if( p->zClass ){ |
| 6583 | pik_append(p, " class=\"", -1); |
| 6584 | pik_append(p, p->zClass, -1); |
| 6585 | pik_append(p, "\"", 1); |
| 6586 | } |
| @@ -7283,6 +7284,6 @@ | |
| 7283 | } |
| 7284 | return 0; |
| 7285 | } |
| 7286 | #endif /* PIKCHR_SHELL */ |
| 7287 | |
| 7288 | #line 7313 "pikchr.c" |
| 7289 |
| --- src/pikchr.c | |
| +++ src/pikchr.c | |
| @@ -200,10 +200,11 @@ | |
| 200 | |
| 201 | /* An object to hold a position in 2-D space */ |
| 202 | struct PPoint { |
| 203 | PNum x, y; /* X and Y coordinates */ |
| 204 | }; |
| 205 | static const PPoint cZeroPoint = {0.0,0.0}; |
| 206 | |
| 207 | /* A bounding box */ |
| 208 | struct PBox { |
| 209 | PPoint sw, ne; /* Lower-left and top-right corners */ |
| 210 | }; |
| @@ -447,11 +448,11 @@ | |
| 448 | static PElem *pik_assert(Pik*,PNum,PToken*,PNum); |
| 449 | static PElem *pik_position_assert(Pik*,PPoint*,PToken*,PPoint*); |
| 450 | static PNum pik_dist(PPoint*,PPoint*); |
| 451 | |
| 452 | |
| 453 | #line 479 "pikchr.c" |
| 454 | /**************** End of %include directives **********************************/ |
| 455 | /* These constants specify the various numeric values for terminal symbols. |
| 456 | ***************** Begin token definitions *************************************/ |
| 457 | #ifndef T_ID |
| 458 | #define T_ID 1 |
| @@ -1648,22 +1649,22 @@ | |
| 1649 | ** inside the C code. |
| 1650 | */ |
| 1651 | /********* Begin destructor definitions ***************************************/ |
| 1652 | case 95: /* element_list */ |
| 1653 | { |
| 1654 | #line 468 "pikchr.y" |
| 1655 | pik_elist_free(p,(yypminor->yy56)); |
| 1656 | #line 1681 "pikchr.c" |
| 1657 | } |
| 1658 | break; |
| 1659 | case 96: /* element */ |
| 1660 | case 97: /* unnamed_element */ |
| 1661 | case 98: /* basetype */ |
| 1662 | { |
| 1663 | #line 470 "pikchr.y" |
| 1664 | pik_elem_free(p,(yypminor->yy226)); |
| 1665 | #line 1690 "pikchr.c" |
| 1666 | } |
| 1667 | break; |
| 1668 | /********* End destructor definitions *****************************************/ |
| 1669 | default: break; /* If no destructor action specified: do nothing */ |
| 1670 | } |
| @@ -1877,14 +1878,14 @@ | |
| 1878 | #endif |
| 1879 | while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser); |
| 1880 | /* Here code is inserted which will execute if the parser |
| 1881 | ** stack every overflows */ |
| 1882 | /******** Begin %stack_overflow code ******************************************/ |
| 1883 | #line 502 "pikchr.y" |
| 1884 | |
| 1885 | pik_error(p, 0, "parser stack overflow"); |
| 1886 | #line 1911 "pikchr.c" |
| 1887 | /******** End %stack_overflow code ********************************************/ |
| 1888 | pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */ |
| 1889 | pik_parserCTX_STORE |
| 1890 | } |
| 1891 | |
| @@ -2354,603 +2355,603 @@ | |
| 2355 | ** break; |
| 2356 | */ |
| 2357 | /********** Begin reduce actions **********************************************/ |
| 2358 | YYMINORTYPE yylhsminor; |
| 2359 | case 0: /* document ::= element_list */ |
| 2360 | #line 506 "pikchr.y" |
| 2361 | {pik_render(p,yymsp[0].minor.yy56);} |
| 2362 | #line 2387 "pikchr.c" |
| 2363 | break; |
| 2364 | case 1: /* element_list ::= element */ |
| 2365 | #line 509 "pikchr.y" |
| 2366 | { yylhsminor.yy56 = pik_elist_append(p,0,yymsp[0].minor.yy226); } |
| 2367 | #line 2392 "pikchr.c" |
| 2368 | yymsp[0].minor.yy56 = yylhsminor.yy56; |
| 2369 | break; |
| 2370 | case 2: /* element_list ::= element_list EOL element */ |
| 2371 | #line 511 "pikchr.y" |
| 2372 | { yylhsminor.yy56 = pik_elist_append(p,yymsp[-2].minor.yy56,yymsp[0].minor.yy226); } |
| 2373 | #line 2398 "pikchr.c" |
| 2374 | yymsp[-2].minor.yy56 = yylhsminor.yy56; |
| 2375 | break; |
| 2376 | case 3: /* element ::= */ |
| 2377 | #line 514 "pikchr.y" |
| 2378 | { yymsp[1].minor.yy226 = 0; } |
| 2379 | #line 2404 "pikchr.c" |
| 2380 | break; |
| 2381 | case 4: /* element ::= direction */ |
| 2382 | #line 515 "pikchr.y" |
| 2383 | { pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy226=0; } |
| 2384 | #line 2409 "pikchr.c" |
| 2385 | yymsp[0].minor.yy226 = yylhsminor.yy226; |
| 2386 | break; |
| 2387 | case 5: /* element ::= lvalue ASSIGN rvalue */ |
| 2388 | #line 516 "pikchr.y" |
| 2389 | {pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy257,&yymsp[-1].minor.yy0); yylhsminor.yy226=0;} |
| 2390 | #line 2415 "pikchr.c" |
| 2391 | yymsp[-2].minor.yy226 = yylhsminor.yy226; |
| 2392 | break; |
| 2393 | case 6: /* element ::= PLACENAME COLON unnamed_element */ |
| 2394 | #line 518 "pikchr.y" |
| 2395 | { yylhsminor.yy226 = yymsp[0].minor.yy226; pik_elem_setname(p,yymsp[0].minor.yy226,&yymsp[-2].minor.yy0); } |
| 2396 | #line 2421 "pikchr.c" |
| 2397 | yymsp[-2].minor.yy226 = yylhsminor.yy226; |
| 2398 | break; |
| 2399 | case 7: /* element ::= PLACENAME COLON position */ |
| 2400 | #line 520 "pikchr.y" |
| 2401 | { yylhsminor.yy226 = pik_elem_new(p,0,0,0); |
| 2402 | if(yylhsminor.yy226){ yylhsminor.yy226->ptAt = yymsp[0].minor.yy175; pik_elem_setname(p,yylhsminor.yy226,&yymsp[-2].minor.yy0); }} |
| 2403 | #line 2428 "pikchr.c" |
| 2404 | yymsp[-2].minor.yy226 = yylhsminor.yy226; |
| 2405 | break; |
| 2406 | case 8: /* element ::= unnamed_element */ |
| 2407 | #line 522 "pikchr.y" |
| 2408 | {yylhsminor.yy226 = yymsp[0].minor.yy226;} |
| 2409 | #line 2434 "pikchr.c" |
| 2410 | yymsp[0].minor.yy226 = yylhsminor.yy226; |
| 2411 | break; |
| 2412 | case 9: /* element ::= print prlist */ |
| 2413 | #line 523 "pikchr.y" |
| 2414 | {pik_append(p,"<br>\n",5); yymsp[-1].minor.yy226=0;} |
| 2415 | #line 2440 "pikchr.c" |
| 2416 | break; |
| 2417 | case 10: /* element ::= ASSERT LP expr EQ expr RP */ |
| 2418 | #line 528 "pikchr.y" |
| 2419 | {yymsp[-5].minor.yy226=pik_assert(p,yymsp[-3].minor.yy257,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy257);} |
| 2420 | #line 2445 "pikchr.c" |
| 2421 | break; |
| 2422 | case 11: /* element ::= ASSERT LP position EQ position RP */ |
| 2423 | #line 530 "pikchr.y" |
| 2424 | {yymsp[-5].minor.yy226=pik_position_assert(p,&yymsp[-3].minor.yy175,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy175);} |
| 2425 | #line 2450 "pikchr.c" |
| 2426 | break; |
| 2427 | case 12: /* rvalue ::= PLACENAME */ |
| 2428 | #line 541 "pikchr.y" |
| 2429 | {yylhsminor.yy257 = pik_lookup_color(p,&yymsp[0].minor.yy0);} |
| 2430 | #line 2455 "pikchr.c" |
| 2431 | yymsp[0].minor.yy257 = yylhsminor.yy257; |
| 2432 | break; |
| 2433 | case 13: /* pritem ::= FILL */ |
| 2434 | case 14: /* pritem ::= COLOR */ yytestcase(yyruleno==14); |
| 2435 | case 15: /* pritem ::= THICKNESS */ yytestcase(yyruleno==15); |
| 2436 | #line 546 "pikchr.y" |
| 2437 | {pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));} |
| 2438 | #line 2463 "pikchr.c" |
| 2439 | break; |
| 2440 | case 16: /* pritem ::= rvalue */ |
| 2441 | #line 549 "pikchr.y" |
| 2442 | {pik_append_num(p,"",yymsp[0].minor.yy257);} |
| 2443 | #line 2468 "pikchr.c" |
| 2444 | break; |
| 2445 | case 17: /* pritem ::= STRING */ |
| 2446 | #line 550 "pikchr.y" |
| 2447 | {pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);} |
| 2448 | #line 2473 "pikchr.c" |
| 2449 | break; |
| 2450 | case 18: /* prsep ::= COMMA */ |
| 2451 | #line 551 "pikchr.y" |
| 2452 | {pik_append(p, " ", 1);} |
| 2453 | #line 2478 "pikchr.c" |
| 2454 | break; |
| 2455 | case 19: /* unnamed_element ::= basetype attribute_list */ |
| 2456 | #line 554 "pikchr.y" |
| 2457 | {yylhsminor.yy226 = yymsp[-1].minor.yy226; pik_after_adding_attributes(p,yylhsminor.yy226);} |
| 2458 | #line 2483 "pikchr.c" |
| 2459 | yymsp[-1].minor.yy226 = yylhsminor.yy226; |
| 2460 | break; |
| 2461 | case 20: /* basetype ::= CLASSNAME */ |
| 2462 | #line 556 "pikchr.y" |
| 2463 | {yylhsminor.yy226 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); } |
| 2464 | #line 2489 "pikchr.c" |
| 2465 | yymsp[0].minor.yy226 = yylhsminor.yy226; |
| 2466 | break; |
| 2467 | case 21: /* basetype ::= STRING textposition */ |
| 2468 | #line 558 "pikchr.y" |
| 2469 | {yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy116; yylhsminor.yy226 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); } |
| 2470 | #line 2495 "pikchr.c" |
| 2471 | yymsp[-1].minor.yy226 = yylhsminor.yy226; |
| 2472 | break; |
| 2473 | case 22: /* basetype ::= LB savelist element_list RB */ |
| 2474 | #line 560 "pikchr.y" |
| 2475 | { p->list = yymsp[-2].minor.yy56; yymsp[-3].minor.yy226 = pik_elem_new(p,0,0,yymsp[-1].minor.yy56); if(yymsp[-3].minor.yy226) yymsp[-3].minor.yy226->errTok = yymsp[0].minor.yy0; } |
| 2476 | #line 2501 "pikchr.c" |
| 2477 | break; |
| 2478 | case 23: /* savelist ::= */ |
| 2479 | #line 565 "pikchr.y" |
| 2480 | {yymsp[1].minor.yy56 = p->list; p->list = 0;} |
| 2481 | #line 2506 "pikchr.c" |
| 2482 | break; |
| 2483 | case 24: /* relexpr ::= expr */ |
| 2484 | #line 572 "pikchr.y" |
| 2485 | {yylhsminor.yy164.rAbs = yymsp[0].minor.yy257; yylhsminor.yy164.rRel = 0;} |
| 2486 | #line 2511 "pikchr.c" |
| 2487 | yymsp[0].minor.yy164 = yylhsminor.yy164; |
| 2488 | break; |
| 2489 | case 25: /* relexpr ::= expr PERCENT */ |
| 2490 | #line 573 "pikchr.y" |
| 2491 | {yylhsminor.yy164.rAbs = 0; yylhsminor.yy164.rRel = yymsp[-1].minor.yy257/100;} |
| 2492 | #line 2517 "pikchr.c" |
| 2493 | yymsp[-1].minor.yy164 = yylhsminor.yy164; |
| 2494 | break; |
| 2495 | case 26: /* optrelexpr ::= */ |
| 2496 | #line 575 "pikchr.y" |
| 2497 | {yymsp[1].minor.yy164.rAbs = 0; yymsp[1].minor.yy164.rRel = 1.0;} |
| 2498 | #line 2523 "pikchr.c" |
| 2499 | break; |
| 2500 | case 27: /* attribute_list ::= relexpr alist */ |
| 2501 | #line 577 "pikchr.y" |
| 2502 | {pik_add_direction(p,0,&yymsp[-1].minor.yy164);} |
| 2503 | #line 2528 "pikchr.c" |
| 2504 | break; |
| 2505 | case 28: /* attribute ::= numproperty relexpr */ |
| 2506 | #line 581 "pikchr.y" |
| 2507 | { pik_set_numprop(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy164); } |
| 2508 | #line 2533 "pikchr.c" |
| 2509 | break; |
| 2510 | case 29: /* attribute ::= dashproperty expr */ |
| 2511 | #line 582 "pikchr.y" |
| 2512 | { pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy257); } |
| 2513 | #line 2538 "pikchr.c" |
| 2514 | break; |
| 2515 | case 30: /* attribute ::= dashproperty */ |
| 2516 | #line 583 "pikchr.y" |
| 2517 | { pik_set_dashed(p,&yymsp[0].minor.yy0,0); } |
| 2518 | #line 2543 "pikchr.c" |
| 2519 | break; |
| 2520 | case 31: /* attribute ::= colorproperty rvalue */ |
| 2521 | #line 584 "pikchr.y" |
| 2522 | { pik_set_clrprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy257); } |
| 2523 | #line 2548 "pikchr.c" |
| 2524 | break; |
| 2525 | case 32: /* attribute ::= go direction optrelexpr */ |
| 2526 | #line 585 "pikchr.y" |
| 2527 | { pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy164);} |
| 2528 | #line 2553 "pikchr.c" |
| 2529 | break; |
| 2530 | case 33: /* attribute ::= go direction even position */ |
| 2531 | #line 586 "pikchr.y" |
| 2532 | {pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy175);} |
| 2533 | #line 2558 "pikchr.c" |
| 2534 | break; |
| 2535 | case 34: /* attribute ::= CLOSE */ |
| 2536 | #line 587 "pikchr.y" |
| 2537 | { pik_close_path(p,&yymsp[0].minor.yy0); } |
| 2538 | #line 2563 "pikchr.c" |
| 2539 | break; |
| 2540 | case 35: /* attribute ::= CHOP */ |
| 2541 | #line 588 "pikchr.y" |
| 2542 | { p->cur->bChop = 1; } |
| 2543 | #line 2568 "pikchr.c" |
| 2544 | break; |
| 2545 | case 36: /* attribute ::= FROM position */ |
| 2546 | #line 589 "pikchr.y" |
| 2547 | { pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy175); } |
| 2548 | #line 2573 "pikchr.c" |
| 2549 | break; |
| 2550 | case 37: /* attribute ::= TO position */ |
| 2551 | #line 590 "pikchr.y" |
| 2552 | { pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy175); } |
| 2553 | #line 2578 "pikchr.c" |
| 2554 | break; |
| 2555 | case 38: /* attribute ::= THEN */ |
| 2556 | #line 591 "pikchr.y" |
| 2557 | { pik_then(p, &yymsp[0].minor.yy0, p->cur); } |
| 2558 | #line 2583 "pikchr.c" |
| 2559 | break; |
| 2560 | case 39: /* attribute ::= THEN optrelexpr HEADING expr */ |
| 2561 | case 41: /* attribute ::= GO optrelexpr HEADING expr */ yytestcase(yyruleno==41); |
| 2562 | #line 593 "pikchr.y" |
| 2563 | {pik_move_hdg(p,&yymsp[-2].minor.yy164,&yymsp[-1].minor.yy0,yymsp[0].minor.yy257,0,&yymsp[-3].minor.yy0);} |
| 2564 | #line 2589 "pikchr.c" |
| 2565 | break; |
| 2566 | case 40: /* attribute ::= THEN optrelexpr EDGEPT */ |
| 2567 | case 42: /* attribute ::= GO optrelexpr EDGEPT */ yytestcase(yyruleno==42); |
| 2568 | #line 594 "pikchr.y" |
| 2569 | {pik_move_hdg(p,&yymsp[-1].minor.yy164,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);} |
| 2570 | #line 2595 "pikchr.c" |
| 2571 | break; |
| 2572 | case 43: /* attribute ::= AT position */ |
| 2573 | #line 599 "pikchr.y" |
| 2574 | { pik_set_at(p,0,&yymsp[0].minor.yy175,&yymsp[-1].minor.yy0); } |
| 2575 | #line 2600 "pikchr.c" |
| 2576 | break; |
| 2577 | case 44: /* attribute ::= SAME */ |
| 2578 | #line 601 "pikchr.y" |
| 2579 | {pik_same(p,0,&yymsp[0].minor.yy0);} |
| 2580 | #line 2605 "pikchr.c" |
| 2581 | break; |
| 2582 | case 45: /* attribute ::= SAME AS object */ |
| 2583 | #line 602 "pikchr.y" |
| 2584 | {pik_same(p,yymsp[0].minor.yy226,&yymsp[-2].minor.yy0);} |
| 2585 | #line 2610 "pikchr.c" |
| 2586 | break; |
| 2587 | case 46: /* attribute ::= STRING textposition */ |
| 2588 | #line 603 "pikchr.y" |
| 2589 | {pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy116);} |
| 2590 | #line 2615 "pikchr.c" |
| 2591 | break; |
| 2592 | case 47: /* attribute ::= FIT */ |
| 2593 | #line 604 "pikchr.y" |
| 2594 | {pik_size_to_fit(p,&yymsp[0].minor.yy0); } |
| 2595 | #line 2620 "pikchr.c" |
| 2596 | break; |
| 2597 | case 48: /* attribute ::= BEHIND object */ |
| 2598 | #line 605 "pikchr.y" |
| 2599 | {pik_behind(p,yymsp[0].minor.yy226);} |
| 2600 | #line 2625 "pikchr.c" |
| 2601 | break; |
| 2602 | case 49: /* withclause ::= DOT_E edge AT position */ |
| 2603 | case 50: /* withclause ::= edge AT position */ yytestcase(yyruleno==50); |
| 2604 | #line 613 "pikchr.y" |
| 2605 | { pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy175,&yymsp[-1].minor.yy0); } |
| 2606 | #line 2631 "pikchr.c" |
| 2607 | break; |
| 2608 | case 51: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */ |
| 2609 | #line 617 "pikchr.y" |
| 2610 | {yylhsminor.yy0 = yymsp[0].minor.yy0;} |
| 2611 | #line 2636 "pikchr.c" |
| 2612 | yymsp[0].minor.yy0 = yylhsminor.yy0; |
| 2613 | break; |
| 2614 | case 52: /* boolproperty ::= CW */ |
| 2615 | #line 628 "pikchr.y" |
| 2616 | {p->cur->cw = 1;} |
| 2617 | #line 2642 "pikchr.c" |
| 2618 | break; |
| 2619 | case 53: /* boolproperty ::= CCW */ |
| 2620 | #line 629 "pikchr.y" |
| 2621 | {p->cur->cw = 0;} |
| 2622 | #line 2647 "pikchr.c" |
| 2623 | break; |
| 2624 | case 54: /* boolproperty ::= LARROW */ |
| 2625 | #line 630 "pikchr.y" |
| 2626 | {p->cur->larrow=1; p->cur->rarrow=0; } |
| 2627 | #line 2652 "pikchr.c" |
| 2628 | break; |
| 2629 | case 55: /* boolproperty ::= RARROW */ |
| 2630 | #line 631 "pikchr.y" |
| 2631 | {p->cur->larrow=0; p->cur->rarrow=1; } |
| 2632 | #line 2657 "pikchr.c" |
| 2633 | break; |
| 2634 | case 56: /* boolproperty ::= LRARROW */ |
| 2635 | #line 632 "pikchr.y" |
| 2636 | {p->cur->larrow=1; p->cur->rarrow=1; } |
| 2637 | #line 2662 "pikchr.c" |
| 2638 | break; |
| 2639 | case 57: /* boolproperty ::= INVIS */ |
| 2640 | #line 633 "pikchr.y" |
| 2641 | {p->cur->sw = 0.0;} |
| 2642 | #line 2667 "pikchr.c" |
| 2643 | break; |
| 2644 | case 58: /* boolproperty ::= THICK */ |
| 2645 | #line 634 "pikchr.y" |
| 2646 | {p->cur->sw *= 1.5;} |
| 2647 | #line 2672 "pikchr.c" |
| 2648 | break; |
| 2649 | case 59: /* boolproperty ::= THIN */ |
| 2650 | #line 635 "pikchr.y" |
| 2651 | {p->cur->sw *= 0.67;} |
| 2652 | #line 2677 "pikchr.c" |
| 2653 | break; |
| 2654 | case 60: /* textposition ::= */ |
| 2655 | #line 637 "pikchr.y" |
| 2656 | {yymsp[1].minor.yy116 = 0;} |
| 2657 | #line 2682 "pikchr.c" |
| 2658 | break; |
| 2659 | case 61: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */ |
| 2660 | #line 640 "pikchr.y" |
| 2661 | {yylhsminor.yy116 = pik_text_position(yymsp[-1].minor.yy116,&yymsp[0].minor.yy0);} |
| 2662 | #line 2687 "pikchr.c" |
| 2663 | yymsp[-1].minor.yy116 = yylhsminor.yy116; |
| 2664 | break; |
| 2665 | case 62: /* position ::= expr COMMA expr */ |
| 2666 | #line 643 "pikchr.y" |
| 2667 | {yylhsminor.yy175.x=yymsp[-2].minor.yy257; yylhsminor.yy175.y=yymsp[0].minor.yy257;} |
| 2668 | #line 2693 "pikchr.c" |
| 2669 | yymsp[-2].minor.yy175 = yylhsminor.yy175; |
| 2670 | break; |
| 2671 | case 63: /* position ::= place PLUS expr COMMA expr */ |
| 2672 | #line 645 "pikchr.y" |
| 2673 | {yylhsminor.yy175.x=yymsp[-4].minor.yy175.x+yymsp[-2].minor.yy257; yylhsminor.yy175.y=yymsp[-4].minor.yy175.y+yymsp[0].minor.yy257;} |
| 2674 | #line 2699 "pikchr.c" |
| 2675 | yymsp[-4].minor.yy175 = yylhsminor.yy175; |
| 2676 | break; |
| 2677 | case 64: /* position ::= place MINUS expr COMMA expr */ |
| 2678 | #line 646 "pikchr.y" |
| 2679 | {yylhsminor.yy175.x=yymsp[-4].minor.yy175.x-yymsp[-2].minor.yy257; yylhsminor.yy175.y=yymsp[-4].minor.yy175.y-yymsp[0].minor.yy257;} |
| 2680 | #line 2705 "pikchr.c" |
| 2681 | yymsp[-4].minor.yy175 = yylhsminor.yy175; |
| 2682 | break; |
| 2683 | case 65: /* position ::= place PLUS LP expr COMMA expr RP */ |
| 2684 | #line 648 "pikchr.y" |
| 2685 | {yylhsminor.yy175.x=yymsp[-6].minor.yy175.x+yymsp[-3].minor.yy257; yylhsminor.yy175.y=yymsp[-6].minor.yy175.y+yymsp[-1].minor.yy257;} |
| 2686 | #line 2711 "pikchr.c" |
| 2687 | yymsp[-6].minor.yy175 = yylhsminor.yy175; |
| 2688 | break; |
| 2689 | case 66: /* position ::= place MINUS LP expr COMMA expr RP */ |
| 2690 | #line 650 "pikchr.y" |
| 2691 | {yylhsminor.yy175.x=yymsp[-6].minor.yy175.x-yymsp[-3].minor.yy257; yylhsminor.yy175.y=yymsp[-6].minor.yy175.y-yymsp[-1].minor.yy257;} |
| 2692 | #line 2717 "pikchr.c" |
| 2693 | yymsp[-6].minor.yy175 = yylhsminor.yy175; |
| 2694 | break; |
| 2695 | case 67: /* position ::= LP position COMMA position RP */ |
| 2696 | #line 651 "pikchr.y" |
| 2697 | {yymsp[-4].minor.yy175.x=yymsp[-3].minor.yy175.x; yymsp[-4].minor.yy175.y=yymsp[-1].minor.yy175.y;} |
| 2698 | #line 2723 "pikchr.c" |
| 2699 | break; |
| 2700 | case 68: /* position ::= LP position RP */ |
| 2701 | #line 652 "pikchr.y" |
| 2702 | {yymsp[-2].minor.yy175=yymsp[-1].minor.yy175;} |
| 2703 | #line 2728 "pikchr.c" |
| 2704 | break; |
| 2705 | case 69: /* position ::= expr between position AND position */ |
| 2706 | #line 654 "pikchr.y" |
| 2707 | {yylhsminor.yy175 = pik_position_between(yymsp[-4].minor.yy257,yymsp[-2].minor.yy175,yymsp[0].minor.yy175);} |
| 2708 | #line 2733 "pikchr.c" |
| 2709 | yymsp[-4].minor.yy175 = yylhsminor.yy175; |
| 2710 | break; |
| 2711 | case 70: /* position ::= expr LT position COMMA position GT */ |
| 2712 | #line 656 "pikchr.y" |
| 2713 | {yylhsminor.yy175 = pik_position_between(yymsp[-5].minor.yy257,yymsp[-3].minor.yy175,yymsp[-1].minor.yy175);} |
| 2714 | #line 2739 "pikchr.c" |
| 2715 | yymsp[-5].minor.yy175 = yylhsminor.yy175; |
| 2716 | break; |
| 2717 | case 71: /* position ::= expr ABOVE position */ |
| 2718 | #line 657 "pikchr.y" |
| 2719 | {yylhsminor.yy175=yymsp[0].minor.yy175; yylhsminor.yy175.y += yymsp[-2].minor.yy257;} |
| 2720 | #line 2745 "pikchr.c" |
| 2721 | yymsp[-2].minor.yy175 = yylhsminor.yy175; |
| 2722 | break; |
| 2723 | case 72: /* position ::= expr BELOW position */ |
| 2724 | #line 658 "pikchr.y" |
| 2725 | {yylhsminor.yy175=yymsp[0].minor.yy175; yylhsminor.yy175.y -= yymsp[-2].minor.yy257;} |
| 2726 | #line 2751 "pikchr.c" |
| 2727 | yymsp[-2].minor.yy175 = yylhsminor.yy175; |
| 2728 | break; |
| 2729 | case 73: /* position ::= expr LEFT OF position */ |
| 2730 | #line 659 "pikchr.y" |
| 2731 | {yylhsminor.yy175=yymsp[0].minor.yy175; yylhsminor.yy175.x -= yymsp[-3].minor.yy257;} |
| 2732 | #line 2757 "pikchr.c" |
| 2733 | yymsp[-3].minor.yy175 = yylhsminor.yy175; |
| 2734 | break; |
| 2735 | case 74: /* position ::= expr RIGHT OF position */ |
| 2736 | #line 660 "pikchr.y" |
| 2737 | {yylhsminor.yy175=yymsp[0].minor.yy175; yylhsminor.yy175.x += yymsp[-3].minor.yy257;} |
| 2738 | #line 2763 "pikchr.c" |
| 2739 | yymsp[-3].minor.yy175 = yylhsminor.yy175; |
| 2740 | break; |
| 2741 | case 75: /* position ::= expr ON HEADING EDGEPT OF position */ |
| 2742 | #line 662 "pikchr.y" |
| 2743 | {yylhsminor.yy175 = pik_position_at_hdg(yymsp[-5].minor.yy257,&yymsp[-2].minor.yy0,yymsp[0].minor.yy175);} |
| 2744 | #line 2769 "pikchr.c" |
| 2745 | yymsp[-5].minor.yy175 = yylhsminor.yy175; |
| 2746 | break; |
| 2747 | case 76: /* position ::= expr HEADING EDGEPT OF position */ |
| 2748 | #line 664 "pikchr.y" |
| 2749 | {yylhsminor.yy175 = pik_position_at_hdg(yymsp[-4].minor.yy257,&yymsp[-2].minor.yy0,yymsp[0].minor.yy175);} |
| 2750 | #line 2775 "pikchr.c" |
| 2751 | yymsp[-4].minor.yy175 = yylhsminor.yy175; |
| 2752 | break; |
| 2753 | case 77: /* position ::= expr EDGEPT OF position */ |
| 2754 | #line 666 "pikchr.y" |
| 2755 | {yylhsminor.yy175 = pik_position_at_hdg(yymsp[-3].minor.yy257,&yymsp[-2].minor.yy0,yymsp[0].minor.yy175);} |
| 2756 | #line 2781 "pikchr.c" |
| 2757 | yymsp[-3].minor.yy175 = yylhsminor.yy175; |
| 2758 | break; |
| 2759 | case 78: /* position ::= expr ON HEADING expr FROM position */ |
| 2760 | #line 668 "pikchr.y" |
| 2761 | {yylhsminor.yy175 = pik_position_at_angle(yymsp[-5].minor.yy257,yymsp[-2].minor.yy257,yymsp[0].minor.yy175);} |
| 2762 | #line 2787 "pikchr.c" |
| 2763 | yymsp[-5].minor.yy175 = yylhsminor.yy175; |
| 2764 | break; |
| 2765 | case 79: /* position ::= expr HEADING expr FROM position */ |
| 2766 | #line 670 "pikchr.y" |
| 2767 | {yylhsminor.yy175 = pik_position_at_angle(yymsp[-4].minor.yy257,yymsp[-2].minor.yy257,yymsp[0].minor.yy175);} |
| 2768 | #line 2793 "pikchr.c" |
| 2769 | yymsp[-4].minor.yy175 = yylhsminor.yy175; |
| 2770 | break; |
| 2771 | case 80: /* place ::= edge OF object */ |
| 2772 | #line 682 "pikchr.y" |
| 2773 | {yylhsminor.yy175 = pik_place_of_elem(p,yymsp[0].minor.yy226,&yymsp[-2].minor.yy0);} |
| 2774 | #line 2799 "pikchr.c" |
| 2775 | yymsp[-2].minor.yy175 = yylhsminor.yy175; |
| 2776 | break; |
| 2777 | case 81: /* place2 ::= object */ |
| 2778 | #line 683 "pikchr.y" |
| 2779 | {yylhsminor.yy175 = pik_place_of_elem(p,yymsp[0].minor.yy226,0);} |
| 2780 | #line 2805 "pikchr.c" |
| 2781 | yymsp[0].minor.yy175 = yylhsminor.yy175; |
| 2782 | break; |
| 2783 | case 82: /* place2 ::= object DOT_E edge */ |
| 2784 | #line 684 "pikchr.y" |
| 2785 | {yylhsminor.yy175 = pik_place_of_elem(p,yymsp[-2].minor.yy226,&yymsp[0].minor.yy0);} |
| 2786 | #line 2811 "pikchr.c" |
| 2787 | yymsp[-2].minor.yy175 = yylhsminor.yy175; |
| 2788 | break; |
| 2789 | case 83: /* place2 ::= NTH VERTEX OF object */ |
| 2790 | #line 685 "pikchr.y" |
| 2791 | {yylhsminor.yy175 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy226);} |
| 2792 | #line 2817 "pikchr.c" |
| 2793 | yymsp[-3].minor.yy175 = yylhsminor.yy175; |
| 2794 | break; |
| 2795 | case 84: /* object ::= nth */ |
| 2796 | #line 697 "pikchr.y" |
| 2797 | {yylhsminor.yy226 = pik_find_nth(p,0,&yymsp[0].minor.yy0);} |
| 2798 | #line 2823 "pikchr.c" |
| 2799 | yymsp[0].minor.yy226 = yylhsminor.yy226; |
| 2800 | break; |
| 2801 | case 85: /* object ::= nth OF|IN object */ |
| 2802 | #line 698 "pikchr.y" |
| 2803 | {yylhsminor.yy226 = pik_find_nth(p,yymsp[0].minor.yy226,&yymsp[-2].minor.yy0);} |
| 2804 | #line 2829 "pikchr.c" |
| 2805 | yymsp[-2].minor.yy226 = yylhsminor.yy226; |
| 2806 | break; |
| 2807 | case 86: /* objectname ::= PLACENAME */ |
| 2808 | #line 700 "pikchr.y" |
| 2809 | {yylhsminor.yy226 = pik_find_byname(p,0,&yymsp[0].minor.yy0);} |
| 2810 | #line 2835 "pikchr.c" |
| 2811 | yymsp[0].minor.yy226 = yylhsminor.yy226; |
| 2812 | break; |
| 2813 | case 87: /* objectname ::= objectname DOT_U PLACENAME */ |
| 2814 | #line 702 "pikchr.y" |
| 2815 | {yylhsminor.yy226 = pik_find_byname(p,yymsp[-2].minor.yy226,&yymsp[0].minor.yy0);} |
| 2816 | #line 2841 "pikchr.c" |
| 2817 | yymsp[-2].minor.yy226 = yylhsminor.yy226; |
| 2818 | break; |
| 2819 | case 88: /* nth ::= NTH CLASSNAME */ |
| 2820 | #line 704 "pikchr.y" |
| 2821 | {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); } |
| 2822 | #line 2847 "pikchr.c" |
| 2823 | yymsp[-1].minor.yy0 = yylhsminor.yy0; |
| 2824 | break; |
| 2825 | case 89: /* nth ::= NTH LAST CLASSNAME */ |
| 2826 | #line 705 "pikchr.y" |
| 2827 | {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); } |
| 2828 | #line 2853 "pikchr.c" |
| 2829 | yymsp[-2].minor.yy0 = yylhsminor.yy0; |
| 2830 | break; |
| 2831 | case 90: /* nth ::= LAST CLASSNAME */ |
| 2832 | #line 706 "pikchr.y" |
| 2833 | {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;} |
| 2834 | #line 2859 "pikchr.c" |
| 2835 | break; |
| 2836 | case 91: /* nth ::= LAST */ |
| 2837 | #line 707 "pikchr.y" |
| 2838 | {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;} |
| 2839 | #line 2864 "pikchr.c" |
| 2840 | yymsp[0].minor.yy0 = yylhsminor.yy0; |
| 2841 | break; |
| 2842 | case 92: /* nth ::= NTH LB RB */ |
| 2843 | #line 708 "pikchr.y" |
| 2844 | {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);} |
| 2845 | #line 2870 "pikchr.c" |
| 2846 | yymsp[-2].minor.yy0 = yylhsminor.yy0; |
| 2847 | break; |
| 2848 | case 93: /* nth ::= NTH LAST LB RB */ |
| 2849 | #line 709 "pikchr.y" |
| 2850 | {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);} |
| 2851 | #line 2876 "pikchr.c" |
| 2852 | yymsp[-3].minor.yy0 = yylhsminor.yy0; |
| 2853 | break; |
| 2854 | case 94: /* nth ::= LAST LB RB */ |
| 2855 | #line 710 "pikchr.y" |
| 2856 | {yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; } |
| 2857 | #line 2882 "pikchr.c" |
| 2858 | break; |
| 2859 | case 95: /* expr ::= expr PLUS expr */ |
| 2860 | #line 712 "pikchr.y" |
| 2861 | {yylhsminor.yy257=yymsp[-2].minor.yy257+yymsp[0].minor.yy257;} |
| 2862 | #line 2887 "pikchr.c" |
| 2863 | yymsp[-2].minor.yy257 = yylhsminor.yy257; |
| 2864 | break; |
| 2865 | case 96: /* expr ::= expr MINUS expr */ |
| 2866 | #line 713 "pikchr.y" |
| 2867 | {yylhsminor.yy257=yymsp[-2].minor.yy257-yymsp[0].minor.yy257;} |
| 2868 | #line 2893 "pikchr.c" |
| 2869 | yymsp[-2].minor.yy257 = yylhsminor.yy257; |
| 2870 | break; |
| 2871 | case 97: /* expr ::= expr STAR expr */ |
| 2872 | #line 714 "pikchr.y" |
| 2873 | {yylhsminor.yy257=yymsp[-2].minor.yy257*yymsp[0].minor.yy257;} |
| 2874 | #line 2899 "pikchr.c" |
| 2875 | yymsp[-2].minor.yy257 = yylhsminor.yy257; |
| 2876 | break; |
| 2877 | case 98: /* expr ::= expr SLASH expr */ |
| 2878 | #line 715 "pikchr.y" |
| 2879 | { |
| 2880 | if( yymsp[0].minor.yy257==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy257 = 0.0; } |
| 2881 | else{ yylhsminor.yy257 = yymsp[-2].minor.yy257/yymsp[0].minor.yy257; } |
| 2882 | } |
| 2883 | #line 2908 "pikchr.c" |
| 2884 | yymsp[-2].minor.yy257 = yylhsminor.yy257; |
| 2885 | break; |
| 2886 | case 99: /* expr ::= MINUS expr */ |
| 2887 | #line 719 "pikchr.y" |
| 2888 | {yymsp[-1].minor.yy257=-yymsp[0].minor.yy257;} |
| 2889 | #line 2914 "pikchr.c" |
| 2890 | break; |
| 2891 | case 100: /* expr ::= PLUS expr */ |
| 2892 | #line 720 "pikchr.y" |
| 2893 | {yymsp[-1].minor.yy257=yymsp[0].minor.yy257;} |
| 2894 | #line 2919 "pikchr.c" |
| 2895 | break; |
| 2896 | case 101: /* expr ::= LP expr RP */ |
| 2897 | #line 721 "pikchr.y" |
| 2898 | {yymsp[-2].minor.yy257=yymsp[-1].minor.yy257;} |
| 2899 | #line 2924 "pikchr.c" |
| 2900 | break; |
| 2901 | case 102: /* expr ::= LP FILL|COLOR|THICKNESS RP */ |
| 2902 | #line 722 "pikchr.y" |
| 2903 | {yymsp[-2].minor.yy257=pik_get_var(p,&yymsp[-1].minor.yy0);} |
| 2904 | #line 2929 "pikchr.c" |
| 2905 | break; |
| 2906 | case 103: /* expr ::= NUMBER */ |
| 2907 | #line 723 "pikchr.y" |
| 2908 | {yylhsminor.yy257=pik_atof(&yymsp[0].minor.yy0);} |
| 2909 | #line 2934 "pikchr.c" |
| 2910 | yymsp[0].minor.yy257 = yylhsminor.yy257; |
| 2911 | break; |
| 2912 | case 104: /* expr ::= ID */ |
| 2913 | #line 724 "pikchr.y" |
| 2914 | {yylhsminor.yy257=pik_get_var(p,&yymsp[0].minor.yy0);} |
| 2915 | #line 2940 "pikchr.c" |
| 2916 | yymsp[0].minor.yy257 = yylhsminor.yy257; |
| 2917 | break; |
| 2918 | case 105: /* expr ::= FUNC1 LP expr RP */ |
| 2919 | #line 725 "pikchr.y" |
| 2920 | {yylhsminor.yy257 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy257,0.0);} |
| 2921 | #line 2946 "pikchr.c" |
| 2922 | yymsp[-3].minor.yy257 = yylhsminor.yy257; |
| 2923 | break; |
| 2924 | case 106: /* expr ::= FUNC2 LP expr COMMA expr RP */ |
| 2925 | #line 726 "pikchr.y" |
| 2926 | {yylhsminor.yy257 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy257,yymsp[-1].minor.yy257);} |
| 2927 | #line 2952 "pikchr.c" |
| 2928 | yymsp[-5].minor.yy257 = yylhsminor.yy257; |
| 2929 | break; |
| 2930 | case 107: /* expr ::= DIST LP position COMMA position RP */ |
| 2931 | #line 727 "pikchr.y" |
| 2932 | {yymsp[-5].minor.yy257 = pik_dist(&yymsp[-3].minor.yy175,&yymsp[-1].minor.yy175);} |
| 2933 | #line 2958 "pikchr.c" |
| 2934 | break; |
| 2935 | case 108: /* expr ::= place2 DOT_XY X */ |
| 2936 | #line 728 "pikchr.y" |
| 2937 | {yylhsminor.yy257 = yymsp[-2].minor.yy175.x;} |
| 2938 | #line 2963 "pikchr.c" |
| 2939 | yymsp[-2].minor.yy257 = yylhsminor.yy257; |
| 2940 | break; |
| 2941 | case 109: /* expr ::= place2 DOT_XY Y */ |
| 2942 | #line 729 "pikchr.y" |
| 2943 | {yylhsminor.yy257 = yymsp[-2].minor.yy175.y;} |
| 2944 | #line 2969 "pikchr.c" |
| 2945 | yymsp[-2].minor.yy257 = yylhsminor.yy257; |
| 2946 | break; |
| 2947 | case 110: /* expr ::= object DOT_L numproperty */ |
| 2948 | case 111: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==111); |
| 2949 | case 112: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==112); |
| 2950 | #line 730 "pikchr.y" |
| 2951 | {yylhsminor.yy257=pik_property_of(yymsp[-2].minor.yy226,&yymsp[0].minor.yy0);} |
| 2952 | #line 2977 "pikchr.c" |
| 2953 | yymsp[-2].minor.yy257 = yylhsminor.yy257; |
| 2954 | break; |
| 2955 | default: |
| 2956 | /* (113) lvalue ::= ID */ yytestcase(yyruleno==113); |
| 2957 | /* (114) lvalue ::= FILL */ yytestcase(yyruleno==114); |
| @@ -3049,19 +3050,19 @@ | |
| 3050 | ){ |
| 3051 | pik_parserARG_FETCH |
| 3052 | pik_parserCTX_FETCH |
| 3053 | #define TOKEN yyminor |
| 3054 | /************ Begin %syntax_error code ****************************************/ |
| 3055 | #line 494 "pikchr.y" |
| 3056 | |
| 3057 | if( TOKEN.z && TOKEN.z[0] ){ |
| 3058 | pik_error(p, &TOKEN, "syntax error"); |
| 3059 | }else{ |
| 3060 | pik_error(p, 0, "syntax error"); |
| 3061 | } |
| 3062 | UNUSED_PARAMETER(yymajor); |
| 3063 | #line 3088 "pikchr.c" |
| 3064 | /************ End %syntax_error code ******************************************/ |
| 3065 | pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */ |
| 3066 | pik_parserCTX_STORE |
| 3067 | } |
| 3068 | |
| @@ -3290,11 +3291,11 @@ | |
| 3291 | #else |
| 3292 | (void)iToken; |
| 3293 | return 0; |
| 3294 | #endif |
| 3295 | } |
| 3296 | #line 735 "pikchr.y" |
| 3297 | |
| 3298 | |
| 3299 | |
| 3300 | /* Chart of the 140 official HTML color names with their |
| 3301 | ** corresponding RGB value. |
| @@ -3573,11 +3574,11 @@ | |
| 3574 | pElem->rad = pik_value(p, "boxrad",6,0); |
| 3575 | } |
| 3576 | /* Return offset from the center of the box to the compass point |
| 3577 | ** given by parameter cp */ |
| 3578 | static PPoint boxOffset(Pik *p, PElem *pElem, int cp){ |
| 3579 | PPoint pt = cZeroPoint; |
| 3580 | PNum w2 = 0.5*pElem->w; |
| 3581 | PNum h2 = 0.5*pElem->h; |
| 3582 | PNum rad = pElem->rad; |
| 3583 | PNum rx; |
| 3584 | if( rad<=0.0 ){ |
| @@ -3585,21 +3586,21 @@ | |
| 3586 | }else{ |
| 3587 | if( rad>w2 ) rad = w2; |
| 3588 | if( rad>h2 ) rad = h2; |
| 3589 | rx = 0.29289321881345252392*rad; |
| 3590 | } |
| 3591 | switch( cp ){ |
| 3592 | case CP_C: break; |
| 3593 | case CP_N: pt.x = 0.0; pt.y = h2; break; |
| 3594 | case CP_NE: pt.x = w2-rx; pt.y = h2-rx; break; |
| 3595 | case CP_E: pt.x = w2; pt.y = 0.0; break; |
| 3596 | case CP_SE: pt.x = w2-rx; pt.y = rx-h2; break; |
| 3597 | case CP_S: pt.x = 0.0; pt.y = -h2; break; |
| 3598 | case CP_SW: pt.x = rx-w2; pt.y = rx-h2; break; |
| 3599 | case CP_W: pt.x = -w2; pt.y = 0.0; break; |
| 3600 | case CP_NW: pt.x = rx-w2; pt.y = h2-rx; break; |
| 3601 | default: assert(0); |
| 3602 | } |
| 3603 | UNUSED_PARAMETER(p); |
| 3604 | return pt; |
| 3605 | } |
| 3606 | static PPoint boxChop(Pik *p, PElem *pElem, PPoint *pPt){ |
| @@ -3789,24 +3790,25 @@ | |
| 3790 | pik_append(p,"\" />\n", -1); |
| 3791 | } |
| 3792 | pik_append_txt(p, pElem, 0); |
| 3793 | } |
| 3794 | static PPoint cylinderOffset(Pik *p, PElem *pElem, int cp){ |
| 3795 | PPoint pt = cZeroPoint; |
| 3796 | PNum w2 = pElem->w*0.5; |
| 3797 | PNum h1 = pElem->h*0.5; |
| 3798 | PNum h2 = h1 - pElem->rad; |
| 3799 | switch( cp ){ |
| 3800 | case CP_C: break; |
| 3801 | case CP_N: pt.x = 0.0; pt.y = h1; break; |
| 3802 | case CP_NE: pt.x = w2; pt.y = h2; break; |
| 3803 | case CP_E: pt.x = w2; pt.y = 0.0; break; |
| 3804 | case CP_SE: pt.x = w2; pt.y = -h2; break; |
| 3805 | case CP_S: pt.x = 0.0; pt.y = -h1; break; |
| 3806 | case CP_SW: pt.x = -w2; pt.y = -h2; break; |
| 3807 | case CP_W: pt.x = -w2; pt.y = 0.0; break; |
| 3808 | case CP_NW: pt.x = -w2; pt.y = h2; break; |
| 3809 | default: assert(0); |
| 3810 | } |
| 3811 | UNUSED_PARAMETER(p); |
| 3812 | return pt; |
| 3813 | } |
| 3814 | |
| @@ -3832,16 +3834,14 @@ | |
| 3834 | pik_bbox_addellipse(&pElem->bbox, pElem->ptAt.x, pElem->ptAt.y, |
| 3835 | pElem->rad, pElem->rad); |
| 3836 | UNUSED_PARAMETER(p); |
| 3837 | } |
| 3838 | static PPoint dotOffset(Pik *p, PElem *pElem, int cp){ |
| 3839 | UNUSED_PARAMETER(p); |
| 3840 | UNUSED_PARAMETER(pElem); |
| 3841 | UNUSED_PARAMETER(cp); |
| 3842 | return cZeroPoint; |
| 3843 | } |
| 3844 | static void dotRender(Pik *p, PElem *pElem){ |
| 3845 | PNum r = pElem->rad; |
| 3846 | PPoint pt = pElem->ptAt; |
| 3847 | if( pElem->sw>0.0 ){ |
| @@ -3876,25 +3876,26 @@ | |
| 3876 | chop.y = pElem->ptAt.y + 0.5*dy*pElem->h/dist; |
| 3877 | UNUSED_PARAMETER(p); |
| 3878 | return chop; |
| 3879 | } |
| 3880 | static PPoint ellipseOffset(Pik *p, PElem *pElem, int cp){ |
| 3881 | PPoint pt = cZeroPoint; |
| 3882 | PNum w = pElem->w*0.5; |
| 3883 | PNum w2 = w*0.70710678118654747608; |
| 3884 | PNum h = pElem->h*0.5; |
| 3885 | PNum h2 = h*0.70710678118654747608; |
| 3886 | switch( cp ){ |
| 3887 | case CP_C: break; |
| 3888 | case CP_N: pt.x = 0.0; pt.y = h; break; |
| 3889 | case CP_NE: pt.x = w2; pt.y = h2; break; |
| 3890 | case CP_E: pt.x = w; pt.y = 0.0; break; |
| 3891 | case CP_SE: pt.x = w2; pt.y = -h2; break; |
| 3892 | case CP_S: pt.x = 0.0; pt.y = -h; break; |
| 3893 | case CP_SW: pt.x = -w2; pt.y = -h2; break; |
| 3894 | case CP_W: pt.x = -w; pt.y = 0.0; break; |
| 3895 | case CP_NW: pt.x = -w2; pt.y = h2; break; |
| 3896 | default: assert(0); |
| 3897 | } |
| 3898 | UNUSED_PARAMETER(p); |
| 3899 | return pt; |
| 3900 | } |
| 3901 | static void ellipseRender(Pik *p, PElem *pElem){ |
| @@ -3919,29 +3920,30 @@ | |
| 3920 | pElem->rad = pik_value(p, "filerad",7,0); |
| 3921 | } |
| 3922 | /* Return offset from the center of the file to the compass point |
| 3923 | ** given by parameter cp */ |
| 3924 | static PPoint fileOffset(Pik *p, PElem *pElem, int cp){ |
| 3925 | PPoint pt = cZeroPoint; |
| 3926 | PNum w2 = 0.5*pElem->w; |
| 3927 | PNum h2 = 0.5*pElem->h; |
| 3928 | PNum rx = pElem->rad; |
| 3929 | PNum mn = w2<h2 ? w2 : h2; |
| 3930 | if( rx>mn ) rx = mn; |
| 3931 | if( rx<mn*0.25 ) rx = mn*0.25; |
| 3932 | pt.x = pt.y = 0.0; |
| 3933 | rx *= 0.5; |
| 3934 | switch( cp ){ |
| 3935 | case CP_C: break; |
| 3936 | case CP_N: pt.x = 0.0; pt.y = h2; break; |
| 3937 | case CP_NE: pt.x = w2-rx; pt.y = h2-rx; break; |
| 3938 | case CP_E: pt.x = w2; pt.y = 0.0; break; |
| 3939 | case CP_SE: pt.x = w2; pt.y = -h2; break; |
| 3940 | case CP_S: pt.x = 0.0; pt.y = -h2; break; |
| 3941 | case CP_SW: pt.x = -w2; pt.y = -h2; break; |
| 3942 | case CP_W: pt.x = -w2; pt.y = 0.0; break; |
| 3943 | case CP_NW: pt.x = -w2; pt.y = h2; break; |
| 3944 | default: assert(0); |
| 3945 | } |
| 3946 | UNUSED_PARAMETER(p); |
| 3947 | return pt; |
| 3948 | } |
| 3949 | static void fileFit(Pik *p, PElem *pElem, PNum w, PNum h){ |
| @@ -5086,10 +5088,11 @@ | |
| 5088 | p->cur = pNew; |
| 5089 | p->nTPath = 1; |
| 5090 | p->thenFlag = 0; |
| 5091 | if( p->list==0 || p->list->n==0 ){ |
| 5092 | pNew->ptAt.x = pNew->ptAt.y = 0.0; |
| 5093 | pNew->eWith = CP_C; |
| 5094 | }else{ |
| 5095 | PElem *pPrior = p->list->a[p->list->n-1]; |
| 5096 | pNew->ptAt = pPrior->ptExit; |
| 5097 | switch( p->eDir ){ |
| 5098 | default: pNew->eWith = CP_W; break; |
| @@ -6135,14 +6138,12 @@ | |
| 6138 | /* Return a "Place" associated with element pElem. If pEdge is NULL |
| 6139 | ** return the center of the object. Otherwise, return the corner |
| 6140 | ** described by pEdge. |
| 6141 | */ |
| 6142 | static PPoint pik_place_of_elem(Pik *p, PElem *pElem, PToken *pEdge){ |
| 6143 | PPoint pt = cZeroPoint; |
| 6144 | const PClass *pClass; |
| 6145 | if( pElem==0 ) return pt; |
| 6146 | if( pEdge==0 ){ |
| 6147 | return pElem->ptAt; |
| 6148 | } |
| 6149 | pClass = pElem->type; |
| @@ -6576,11 +6577,11 @@ | |
| 6577 | p->bbox.ne.y += margin + pik_value(p,"topmargin",9,0); |
| 6578 | p->bbox.sw.x -= margin + pik_value(p,"leftmargin",10,0); |
| 6579 | p->bbox.sw.y -= margin + pik_value(p,"bottommargin",12,0); |
| 6580 | |
| 6581 | /* Output the SVG */ |
| 6582 | pik_append(p, "<svg xmlns='http://www.w3.org/2000/svg'",-1); |
| 6583 | if( p->zClass ){ |
| 6584 | pik_append(p, " class=\"", -1); |
| 6585 | pik_append(p, p->zClass, -1); |
| 6586 | pik_append(p, "\"", 1); |
| 6587 | } |
| @@ -7283,6 +7284,6 @@ | |
| 7284 | } |
| 7285 | return 0; |
| 7286 | } |
| 7287 | #endif /* PIKCHR_SHELL */ |
| 7288 | |
| 7289 | #line 7314 "pikchr.c" |
| 7290 |