Fossil SCM
The "pikchr-foreground" color is applied directly and is not translated into dark-mode even if the "white-foreground" boolean is true.
Commit
569a99322754f1d6ef453e0627a61f81a3e0463b91415db1537616939a98189b
Parent
0853ab7447a4a63…
2 files changed
+1
-1
+242
-229
+1
-1
| --- src/markdown_html.c | ||
| +++ src/markdown_html.c | ||
| @@ -376,11 +376,11 @@ | ||
| 376 | 376 | if( skin_detail_boolean("white-foreground") ){ |
| 377 | 377 | pikFlags |= 0x02; /* PIKCHR_DARK_MODE */ |
| 378 | 378 | } |
| 379 | 379 | zFgColor = skin_detail("pikchr-foreground"); |
| 380 | 380 | if( zFgColor && zFgColor[0] ){ |
| 381 | - blob_appendf(&bSrc, "color = %s\n", zFgColor); | |
| 381 | + blob_appendf(&bSrc, "fgcolor = %s\n", zFgColor); | |
| 382 | 382 | } |
| 383 | 383 | blob_append(&bSrc, zSrc, nSrc) |
| 384 | 384 | /*have to dup input to ensure a NUL-terminated source string */; |
| 385 | 385 | pikchr_process(blob_str(&bSrc), pikFlags, 0, ob); |
| 386 | 386 | blob_reset(&bSrc); |
| 387 | 387 |
| --- src/markdown_html.c | |
| +++ src/markdown_html.c | |
| @@ -376,11 +376,11 @@ | |
| 376 | if( skin_detail_boolean("white-foreground") ){ |
| 377 | pikFlags |= 0x02; /* PIKCHR_DARK_MODE */ |
| 378 | } |
| 379 | zFgColor = skin_detail("pikchr-foreground"); |
| 380 | if( zFgColor && zFgColor[0] ){ |
| 381 | blob_appendf(&bSrc, "color = %s\n", zFgColor); |
| 382 | } |
| 383 | blob_append(&bSrc, zSrc, nSrc) |
| 384 | /*have to dup input to ensure a NUL-terminated source string */; |
| 385 | pikchr_process(blob_str(&bSrc), pikFlags, 0, ob); |
| 386 | blob_reset(&bSrc); |
| 387 |
| --- src/markdown_html.c | |
| +++ src/markdown_html.c | |
| @@ -376,11 +376,11 @@ | |
| 376 | if( skin_detail_boolean("white-foreground") ){ |
| 377 | pikFlags |= 0x02; /* PIKCHR_DARK_MODE */ |
| 378 | } |
| 379 | zFgColor = skin_detail("pikchr-foreground"); |
| 380 | if( zFgColor && zFgColor[0] ){ |
| 381 | blob_appendf(&bSrc, "fgcolor = %s\n", zFgColor); |
| 382 | } |
| 383 | blob_append(&bSrc, zSrc, nSrc) |
| 384 | /*have to dup input to ensure a NUL-terminated source string */; |
| 385 | pikchr_process(blob_str(&bSrc), pikFlags, 0, ob); |
| 386 | blob_reset(&bSrc); |
| 387 |
+242
-229
| --- src/pikchr.c | ||
| +++ src/pikchr.c | ||
| @@ -363,10 +363,11 @@ | ||
| 363 | 363 | char bLayoutVars; /* True if cache is valid */ |
| 364 | 364 | char thenFlag; /* True if "then" seen */ |
| 365 | 365 | char samePath; /* aTPath copied by "same" */ |
| 366 | 366 | const char *zClass; /* Class name for the <svg> */ |
| 367 | 367 | int wSVG, hSVG; /* Width and height of the <svg> */ |
| 368 | + int fgcolor; /* fgcolor value, or -1 for none */ | |
| 368 | 369 | /* Paths for lines are constructed here first, then transferred into |
| 369 | 370 | ** the PObj object at the end: */ |
| 370 | 371 | int nTPath; /* Number of entries on aTPath[] */ |
| 371 | 372 | int mTPath; /* For last entry, 1: x set, 2: y set */ |
| 372 | 373 | PPoint aTPath[1000]; /* Path under construction */ |
| @@ -472,11 +473,11 @@ | ||
| 472 | 473 | static PObj *pik_position_assert(Pik*,PPoint*,PToken*,PPoint*); |
| 473 | 474 | static PNum pik_dist(PPoint*,PPoint*); |
| 474 | 475 | static void pik_add_macro(Pik*,PToken *pId,PToken *pCode); |
| 475 | 476 | |
| 476 | 477 | |
| 477 | -#line 503 "pikchr.c" | |
| 478 | +#line 504 "pikchr.c" | |
| 478 | 479 | /**************** End of %include directives **********************************/ |
| 479 | 480 | /* These constants specify the various numeric values for terminal symbols. |
| 480 | 481 | ***************** Begin token definitions *************************************/ |
| 481 | 482 | #ifndef T_ID |
| 482 | 483 | #define T_ID 1 |
| @@ -1689,22 +1690,22 @@ | ||
| 1689 | 1690 | ** inside the C code. |
| 1690 | 1691 | */ |
| 1691 | 1692 | /********* Begin destructor definitions ***************************************/ |
| 1692 | 1693 | case 98: /* statement_list */ |
| 1693 | 1694 | { |
| 1694 | -#line 492 "pikchr.y" | |
| 1695 | +#line 493 "pikchr.y" | |
| 1695 | 1696 | pik_elist_free(p,(yypminor->yy119)); |
| 1696 | -#line 1721 "pikchr.c" | |
| 1697 | +#line 1722 "pikchr.c" | |
| 1697 | 1698 | } |
| 1698 | 1699 | break; |
| 1699 | 1700 | case 99: /* statement */ |
| 1700 | 1701 | case 100: /* unnamed_statement */ |
| 1701 | 1702 | case 101: /* basetype */ |
| 1702 | 1703 | { |
| 1703 | -#line 494 "pikchr.y" | |
| 1704 | +#line 495 "pikchr.y" | |
| 1704 | 1705 | pik_elem_free(p,(yypminor->yy38)); |
| 1705 | -#line 1730 "pikchr.c" | |
| 1706 | +#line 1731 "pikchr.c" | |
| 1706 | 1707 | } |
| 1707 | 1708 | break; |
| 1708 | 1709 | /********* End destructor definitions *****************************************/ |
| 1709 | 1710 | default: break; /* If no destructor action specified: do nothing */ |
| 1710 | 1711 | } |
| @@ -1918,14 +1919,14 @@ | ||
| 1918 | 1919 | #endif |
| 1919 | 1920 | while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser); |
| 1920 | 1921 | /* Here code is inserted which will execute if the parser |
| 1921 | 1922 | ** stack every overflows */ |
| 1922 | 1923 | /******** Begin %stack_overflow code ******************************************/ |
| 1923 | -#line 526 "pikchr.y" | |
| 1924 | +#line 527 "pikchr.y" | |
| 1924 | 1925 | |
| 1925 | 1926 | pik_error(p, 0, "parser stack overflow"); |
| 1926 | -#line 1951 "pikchr.c" | |
| 1927 | +#line 1952 "pikchr.c" | |
| 1927 | 1928 | /******** End %stack_overflow code ********************************************/ |
| 1928 | 1929 | pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */ |
| 1929 | 1930 | pik_parserCTX_STORE |
| 1930 | 1931 | } |
| 1931 | 1932 | |
| @@ -2399,614 +2400,614 @@ | ||
| 2399 | 2400 | ** break; |
| 2400 | 2401 | */ |
| 2401 | 2402 | /********** Begin reduce actions **********************************************/ |
| 2402 | 2403 | YYMINORTYPE yylhsminor; |
| 2403 | 2404 | case 0: /* document ::= statement_list */ |
| 2404 | -#line 530 "pikchr.y" | |
| 2405 | +#line 531 "pikchr.y" | |
| 2405 | 2406 | {pik_render(p,yymsp[0].minor.yy119);} |
| 2406 | -#line 2431 "pikchr.c" | |
| 2407 | +#line 2432 "pikchr.c" | |
| 2407 | 2408 | break; |
| 2408 | 2409 | case 1: /* statement_list ::= statement */ |
| 2409 | -#line 533 "pikchr.y" | |
| 2410 | +#line 534 "pikchr.y" | |
| 2410 | 2411 | { yylhsminor.yy119 = pik_elist_append(p,0,yymsp[0].minor.yy38); } |
| 2411 | -#line 2436 "pikchr.c" | |
| 2412 | +#line 2437 "pikchr.c" | |
| 2412 | 2413 | yymsp[0].minor.yy119 = yylhsminor.yy119; |
| 2413 | 2414 | break; |
| 2414 | 2415 | case 2: /* statement_list ::= statement_list EOL statement */ |
| 2415 | -#line 535 "pikchr.y" | |
| 2416 | +#line 536 "pikchr.y" | |
| 2416 | 2417 | { yylhsminor.yy119 = pik_elist_append(p,yymsp[-2].minor.yy119,yymsp[0].minor.yy38); } |
| 2417 | -#line 2442 "pikchr.c" | |
| 2418 | +#line 2443 "pikchr.c" | |
| 2418 | 2419 | yymsp[-2].minor.yy119 = yylhsminor.yy119; |
| 2419 | 2420 | break; |
| 2420 | 2421 | case 3: /* statement ::= */ |
| 2421 | -#line 538 "pikchr.y" | |
| 2422 | +#line 539 "pikchr.y" | |
| 2422 | 2423 | { yymsp[1].minor.yy38 = 0; } |
| 2423 | -#line 2448 "pikchr.c" | |
| 2424 | +#line 2449 "pikchr.c" | |
| 2424 | 2425 | break; |
| 2425 | 2426 | case 4: /* statement ::= direction */ |
| 2426 | -#line 539 "pikchr.y" | |
| 2427 | +#line 540 "pikchr.y" | |
| 2427 | 2428 | { pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy38=0; } |
| 2428 | -#line 2453 "pikchr.c" | |
| 2429 | +#line 2454 "pikchr.c" | |
| 2429 | 2430 | yymsp[0].minor.yy38 = yylhsminor.yy38; |
| 2430 | 2431 | break; |
| 2431 | 2432 | case 5: /* statement ::= lvalue ASSIGN rvalue */ |
| 2432 | -#line 540 "pikchr.y" | |
| 2433 | +#line 541 "pikchr.y" | |
| 2433 | 2434 | {pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy265,&yymsp[-1].minor.yy0); yylhsminor.yy38=0;} |
| 2434 | -#line 2459 "pikchr.c" | |
| 2435 | +#line 2460 "pikchr.c" | |
| 2435 | 2436 | yymsp[-2].minor.yy38 = yylhsminor.yy38; |
| 2436 | 2437 | break; |
| 2437 | 2438 | case 6: /* statement ::= PLACENAME COLON unnamed_statement */ |
| 2438 | -#line 542 "pikchr.y" | |
| 2439 | +#line 543 "pikchr.y" | |
| 2439 | 2440 | { yylhsminor.yy38 = yymsp[0].minor.yy38; pik_elem_setname(p,yymsp[0].minor.yy38,&yymsp[-2].minor.yy0); } |
| 2440 | -#line 2465 "pikchr.c" | |
| 2441 | +#line 2466 "pikchr.c" | |
| 2441 | 2442 | yymsp[-2].minor.yy38 = yylhsminor.yy38; |
| 2442 | 2443 | break; |
| 2443 | 2444 | case 7: /* statement ::= PLACENAME COLON position */ |
| 2444 | -#line 544 "pikchr.y" | |
| 2445 | +#line 545 "pikchr.y" | |
| 2445 | 2446 | { yylhsminor.yy38 = pik_elem_new(p,0,0,0); |
| 2446 | 2447 | if(yylhsminor.yy38){ yylhsminor.yy38->ptAt = yymsp[0].minor.yy43; pik_elem_setname(p,yylhsminor.yy38,&yymsp[-2].minor.yy0); }} |
| 2447 | -#line 2472 "pikchr.c" | |
| 2448 | +#line 2473 "pikchr.c" | |
| 2448 | 2449 | yymsp[-2].minor.yy38 = yylhsminor.yy38; |
| 2449 | 2450 | break; |
| 2450 | 2451 | case 8: /* statement ::= unnamed_statement */ |
| 2451 | -#line 546 "pikchr.y" | |
| 2452 | +#line 547 "pikchr.y" | |
| 2452 | 2453 | {yylhsminor.yy38 = yymsp[0].minor.yy38;} |
| 2453 | -#line 2478 "pikchr.c" | |
| 2454 | +#line 2479 "pikchr.c" | |
| 2454 | 2455 | yymsp[0].minor.yy38 = yylhsminor.yy38; |
| 2455 | 2456 | break; |
| 2456 | 2457 | case 9: /* statement ::= print prlist */ |
| 2457 | -#line 547 "pikchr.y" | |
| 2458 | +#line 548 "pikchr.y" | |
| 2458 | 2459 | {pik_append(p,"<br>\n",5); yymsp[-1].minor.yy38=0;} |
| 2459 | -#line 2484 "pikchr.c" | |
| 2460 | +#line 2485 "pikchr.c" | |
| 2460 | 2461 | break; |
| 2461 | 2462 | case 10: /* statement ::= ASSERT LP expr EQ expr RP */ |
| 2462 | -#line 552 "pikchr.y" | |
| 2463 | +#line 553 "pikchr.y" | |
| 2463 | 2464 | {yymsp[-5].minor.yy38=pik_assert(p,yymsp[-3].minor.yy265,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy265);} |
| 2464 | -#line 2489 "pikchr.c" | |
| 2465 | +#line 2490 "pikchr.c" | |
| 2465 | 2466 | break; |
| 2466 | 2467 | case 11: /* statement ::= ASSERT LP position EQ position RP */ |
| 2467 | -#line 554 "pikchr.y" | |
| 2468 | +#line 555 "pikchr.y" | |
| 2468 | 2469 | {yymsp[-5].minor.yy38=pik_position_assert(p,&yymsp[-3].minor.yy43,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy43);} |
| 2469 | -#line 2494 "pikchr.c" | |
| 2470 | +#line 2495 "pikchr.c" | |
| 2470 | 2471 | break; |
| 2471 | 2472 | case 12: /* statement ::= DEFINE ID CODEBLOCK */ |
| 2472 | -#line 555 "pikchr.y" | |
| 2473 | +#line 556 "pikchr.y" | |
| 2473 | 2474 | {yymsp[-2].minor.yy38=0; pik_add_macro(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);} |
| 2474 | -#line 2499 "pikchr.c" | |
| 2475 | +#line 2500 "pikchr.c" | |
| 2475 | 2476 | break; |
| 2476 | 2477 | case 13: /* rvalue ::= PLACENAME */ |
| 2477 | -#line 566 "pikchr.y" | |
| 2478 | +#line 567 "pikchr.y" | |
| 2478 | 2479 | {yylhsminor.yy265 = pik_lookup_color(p,&yymsp[0].minor.yy0);} |
| 2479 | -#line 2504 "pikchr.c" | |
| 2480 | +#line 2505 "pikchr.c" | |
| 2480 | 2481 | yymsp[0].minor.yy265 = yylhsminor.yy265; |
| 2481 | 2482 | break; |
| 2482 | 2483 | case 14: /* pritem ::= FILL */ |
| 2483 | 2484 | case 15: /* pritem ::= COLOR */ yytestcase(yyruleno==15); |
| 2484 | 2485 | case 16: /* pritem ::= THICKNESS */ yytestcase(yyruleno==16); |
| 2485 | -#line 571 "pikchr.y" | |
| 2486 | +#line 572 "pikchr.y" | |
| 2486 | 2487 | {pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));} |
| 2487 | -#line 2512 "pikchr.c" | |
| 2488 | +#line 2513 "pikchr.c" | |
| 2488 | 2489 | break; |
| 2489 | 2490 | case 17: /* pritem ::= rvalue */ |
| 2490 | -#line 574 "pikchr.y" | |
| 2491 | +#line 575 "pikchr.y" | |
| 2491 | 2492 | {pik_append_num(p,"",yymsp[0].minor.yy265);} |
| 2492 | -#line 2517 "pikchr.c" | |
| 2493 | +#line 2518 "pikchr.c" | |
| 2493 | 2494 | break; |
| 2494 | 2495 | case 18: /* pritem ::= STRING */ |
| 2495 | -#line 575 "pikchr.y" | |
| 2496 | +#line 576 "pikchr.y" | |
| 2496 | 2497 | {pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);} |
| 2497 | -#line 2522 "pikchr.c" | |
| 2498 | +#line 2523 "pikchr.c" | |
| 2498 | 2499 | break; |
| 2499 | 2500 | case 19: /* prsep ::= COMMA */ |
| 2500 | -#line 576 "pikchr.y" | |
| 2501 | +#line 577 "pikchr.y" | |
| 2501 | 2502 | {pik_append(p, " ", 1);} |
| 2502 | -#line 2527 "pikchr.c" | |
| 2503 | +#line 2528 "pikchr.c" | |
| 2503 | 2504 | break; |
| 2504 | 2505 | case 20: /* unnamed_statement ::= basetype attribute_list */ |
| 2505 | -#line 579 "pikchr.y" | |
| 2506 | +#line 580 "pikchr.y" | |
| 2506 | 2507 | {yylhsminor.yy38 = yymsp[-1].minor.yy38; pik_after_adding_attributes(p,yylhsminor.yy38);} |
| 2507 | -#line 2532 "pikchr.c" | |
| 2508 | +#line 2533 "pikchr.c" | |
| 2508 | 2509 | yymsp[-1].minor.yy38 = yylhsminor.yy38; |
| 2509 | 2510 | break; |
| 2510 | 2511 | case 21: /* basetype ::= CLASSNAME */ |
| 2511 | -#line 581 "pikchr.y" | |
| 2512 | +#line 582 "pikchr.y" | |
| 2512 | 2513 | {yylhsminor.yy38 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); } |
| 2513 | -#line 2538 "pikchr.c" | |
| 2514 | +#line 2539 "pikchr.c" | |
| 2514 | 2515 | yymsp[0].minor.yy38 = yylhsminor.yy38; |
| 2515 | 2516 | break; |
| 2516 | 2517 | case 22: /* basetype ::= STRING textposition */ |
| 2517 | -#line 583 "pikchr.y" | |
| 2518 | +#line 584 "pikchr.y" | |
| 2518 | 2519 | {yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy196; yylhsminor.yy38 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); } |
| 2519 | -#line 2544 "pikchr.c" | |
| 2520 | +#line 2545 "pikchr.c" | |
| 2520 | 2521 | yymsp[-1].minor.yy38 = yylhsminor.yy38; |
| 2521 | 2522 | break; |
| 2522 | 2523 | case 23: /* basetype ::= LB savelist statement_list RB */ |
| 2523 | -#line 585 "pikchr.y" | |
| 2524 | +#line 586 "pikchr.y" | |
| 2524 | 2525 | { p->list = yymsp[-2].minor.yy119; yymsp[-3].minor.yy38 = pik_elem_new(p,0,0,yymsp[-1].minor.yy119); if(yymsp[-3].minor.yy38) yymsp[-3].minor.yy38->errTok = yymsp[0].minor.yy0; } |
| 2525 | -#line 2550 "pikchr.c" | |
| 2526 | +#line 2551 "pikchr.c" | |
| 2526 | 2527 | break; |
| 2527 | 2528 | case 24: /* savelist ::= */ |
| 2528 | -#line 590 "pikchr.y" | |
| 2529 | +#line 591 "pikchr.y" | |
| 2529 | 2530 | {yymsp[1].minor.yy119 = p->list; p->list = 0;} |
| 2530 | -#line 2555 "pikchr.c" | |
| 2531 | +#line 2556 "pikchr.c" | |
| 2531 | 2532 | break; |
| 2532 | 2533 | case 25: /* relexpr ::= expr */ |
| 2533 | -#line 597 "pikchr.y" | |
| 2534 | +#line 598 "pikchr.y" | |
| 2534 | 2535 | {yylhsminor.yy200.rAbs = yymsp[0].minor.yy265; yylhsminor.yy200.rRel = 0;} |
| 2535 | -#line 2560 "pikchr.c" | |
| 2536 | +#line 2561 "pikchr.c" | |
| 2536 | 2537 | yymsp[0].minor.yy200 = yylhsminor.yy200; |
| 2537 | 2538 | break; |
| 2538 | 2539 | case 26: /* relexpr ::= expr PERCENT */ |
| 2539 | -#line 598 "pikchr.y" | |
| 2540 | +#line 599 "pikchr.y" | |
| 2540 | 2541 | {yylhsminor.yy200.rAbs = 0; yylhsminor.yy200.rRel = yymsp[-1].minor.yy265/100;} |
| 2541 | -#line 2566 "pikchr.c" | |
| 2542 | +#line 2567 "pikchr.c" | |
| 2542 | 2543 | yymsp[-1].minor.yy200 = yylhsminor.yy200; |
| 2543 | 2544 | break; |
| 2544 | 2545 | case 27: /* optrelexpr ::= */ |
| 2545 | -#line 600 "pikchr.y" | |
| 2546 | +#line 601 "pikchr.y" | |
| 2546 | 2547 | {yymsp[1].minor.yy200.rAbs = 0; yymsp[1].minor.yy200.rRel = 1.0;} |
| 2547 | -#line 2572 "pikchr.c" | |
| 2548 | +#line 2573 "pikchr.c" | |
| 2548 | 2549 | break; |
| 2549 | 2550 | case 28: /* attribute_list ::= relexpr alist */ |
| 2550 | -#line 602 "pikchr.y" | |
| 2551 | +#line 603 "pikchr.y" | |
| 2551 | 2552 | {pik_add_direction(p,0,&yymsp[-1].minor.yy200);} |
| 2552 | -#line 2577 "pikchr.c" | |
| 2553 | +#line 2578 "pikchr.c" | |
| 2553 | 2554 | break; |
| 2554 | 2555 | case 29: /* attribute ::= numproperty relexpr */ |
| 2555 | -#line 606 "pikchr.y" | |
| 2556 | +#line 607 "pikchr.y" | |
| 2556 | 2557 | { pik_set_numprop(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy200); } |
| 2557 | -#line 2582 "pikchr.c" | |
| 2558 | +#line 2583 "pikchr.c" | |
| 2558 | 2559 | break; |
| 2559 | 2560 | case 30: /* attribute ::= dashproperty expr */ |
| 2560 | -#line 607 "pikchr.y" | |
| 2561 | +#line 608 "pikchr.y" | |
| 2561 | 2562 | { pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy265); } |
| 2562 | -#line 2587 "pikchr.c" | |
| 2563 | +#line 2588 "pikchr.c" | |
| 2563 | 2564 | break; |
| 2564 | 2565 | case 31: /* attribute ::= dashproperty */ |
| 2565 | -#line 608 "pikchr.y" | |
| 2566 | +#line 609 "pikchr.y" | |
| 2566 | 2567 | { pik_set_dashed(p,&yymsp[0].minor.yy0,0); } |
| 2567 | -#line 2592 "pikchr.c" | |
| 2568 | +#line 2593 "pikchr.c" | |
| 2568 | 2569 | break; |
| 2569 | 2570 | case 32: /* attribute ::= colorproperty rvalue */ |
| 2570 | -#line 609 "pikchr.y" | |
| 2571 | +#line 610 "pikchr.y" | |
| 2571 | 2572 | { pik_set_clrprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy265); } |
| 2572 | -#line 2597 "pikchr.c" | |
| 2573 | +#line 2598 "pikchr.c" | |
| 2573 | 2574 | break; |
| 2574 | 2575 | case 33: /* attribute ::= go direction optrelexpr */ |
| 2575 | -#line 610 "pikchr.y" | |
| 2576 | +#line 611 "pikchr.y" | |
| 2576 | 2577 | { pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy200);} |
| 2577 | -#line 2602 "pikchr.c" | |
| 2578 | +#line 2603 "pikchr.c" | |
| 2578 | 2579 | break; |
| 2579 | 2580 | case 34: /* attribute ::= go direction even position */ |
| 2580 | -#line 611 "pikchr.y" | |
| 2581 | +#line 612 "pikchr.y" | |
| 2581 | 2582 | {pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy43);} |
| 2582 | -#line 2607 "pikchr.c" | |
| 2583 | +#line 2608 "pikchr.c" | |
| 2583 | 2584 | break; |
| 2584 | 2585 | case 35: /* attribute ::= CLOSE */ |
| 2585 | -#line 612 "pikchr.y" | |
| 2586 | +#line 613 "pikchr.y" | |
| 2586 | 2587 | { pik_close_path(p,&yymsp[0].minor.yy0); } |
| 2587 | -#line 2612 "pikchr.c" | |
| 2588 | +#line 2613 "pikchr.c" | |
| 2588 | 2589 | break; |
| 2589 | 2590 | case 36: /* attribute ::= CHOP */ |
| 2590 | -#line 613 "pikchr.y" | |
| 2591 | +#line 614 "pikchr.y" | |
| 2591 | 2592 | { p->cur->bChop = 1; } |
| 2592 | -#line 2617 "pikchr.c" | |
| 2593 | +#line 2618 "pikchr.c" | |
| 2593 | 2594 | break; |
| 2594 | 2595 | case 37: /* attribute ::= FROM position */ |
| 2595 | -#line 614 "pikchr.y" | |
| 2596 | +#line 615 "pikchr.y" | |
| 2596 | 2597 | { pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy43); } |
| 2597 | -#line 2622 "pikchr.c" | |
| 2598 | +#line 2623 "pikchr.c" | |
| 2598 | 2599 | break; |
| 2599 | 2600 | case 38: /* attribute ::= TO position */ |
| 2600 | -#line 615 "pikchr.y" | |
| 2601 | +#line 616 "pikchr.y" | |
| 2601 | 2602 | { pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy43); } |
| 2602 | -#line 2627 "pikchr.c" | |
| 2603 | +#line 2628 "pikchr.c" | |
| 2603 | 2604 | break; |
| 2604 | 2605 | case 39: /* attribute ::= THEN */ |
| 2605 | -#line 616 "pikchr.y" | |
| 2606 | +#line 617 "pikchr.y" | |
| 2606 | 2607 | { pik_then(p, &yymsp[0].minor.yy0, p->cur); } |
| 2607 | -#line 2632 "pikchr.c" | |
| 2608 | +#line 2633 "pikchr.c" | |
| 2608 | 2609 | break; |
| 2609 | 2610 | case 40: /* attribute ::= THEN optrelexpr HEADING expr */ |
| 2610 | 2611 | case 42: /* attribute ::= GO optrelexpr HEADING expr */ yytestcase(yyruleno==42); |
| 2611 | -#line 618 "pikchr.y" | |
| 2612 | +#line 619 "pikchr.y" | |
| 2612 | 2613 | {pik_move_hdg(p,&yymsp[-2].minor.yy200,&yymsp[-1].minor.yy0,yymsp[0].minor.yy265,0,&yymsp[-3].minor.yy0);} |
| 2613 | -#line 2638 "pikchr.c" | |
| 2614 | +#line 2639 "pikchr.c" | |
| 2614 | 2615 | break; |
| 2615 | 2616 | case 41: /* attribute ::= THEN optrelexpr EDGEPT */ |
| 2616 | 2617 | case 43: /* attribute ::= GO optrelexpr EDGEPT */ yytestcase(yyruleno==43); |
| 2617 | -#line 619 "pikchr.y" | |
| 2618 | +#line 620 "pikchr.y" | |
| 2618 | 2619 | {pik_move_hdg(p,&yymsp[-1].minor.yy200,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);} |
| 2619 | -#line 2644 "pikchr.c" | |
| 2620 | +#line 2645 "pikchr.c" | |
| 2620 | 2621 | break; |
| 2621 | 2622 | case 44: /* attribute ::= AT position */ |
| 2622 | -#line 624 "pikchr.y" | |
| 2623 | +#line 625 "pikchr.y" | |
| 2623 | 2624 | { pik_set_at(p,0,&yymsp[0].minor.yy43,&yymsp[-1].minor.yy0); } |
| 2624 | -#line 2649 "pikchr.c" | |
| 2625 | +#line 2650 "pikchr.c" | |
| 2625 | 2626 | break; |
| 2626 | 2627 | case 45: /* attribute ::= SAME */ |
| 2627 | -#line 626 "pikchr.y" | |
| 2628 | +#line 627 "pikchr.y" | |
| 2628 | 2629 | {pik_same(p,0,&yymsp[0].minor.yy0);} |
| 2629 | -#line 2654 "pikchr.c" | |
| 2630 | +#line 2655 "pikchr.c" | |
| 2630 | 2631 | break; |
| 2631 | 2632 | case 46: /* attribute ::= SAME AS object */ |
| 2632 | -#line 627 "pikchr.y" | |
| 2633 | +#line 628 "pikchr.y" | |
| 2633 | 2634 | {pik_same(p,yymsp[0].minor.yy38,&yymsp[-2].minor.yy0);} |
| 2634 | -#line 2659 "pikchr.c" | |
| 2635 | +#line 2660 "pikchr.c" | |
| 2635 | 2636 | break; |
| 2636 | 2637 | case 47: /* attribute ::= STRING textposition */ |
| 2637 | -#line 628 "pikchr.y" | |
| 2638 | +#line 629 "pikchr.y" | |
| 2638 | 2639 | {pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy196);} |
| 2639 | -#line 2664 "pikchr.c" | |
| 2640 | +#line 2665 "pikchr.c" | |
| 2640 | 2641 | break; |
| 2641 | 2642 | case 48: /* attribute ::= FIT */ |
| 2642 | -#line 629 "pikchr.y" | |
| 2643 | +#line 630 "pikchr.y" | |
| 2643 | 2644 | {pik_size_to_fit(p,&yymsp[0].minor.yy0,3); } |
| 2644 | -#line 2669 "pikchr.c" | |
| 2645 | +#line 2670 "pikchr.c" | |
| 2645 | 2646 | break; |
| 2646 | 2647 | case 49: /* attribute ::= BEHIND object */ |
| 2647 | -#line 630 "pikchr.y" | |
| 2648 | +#line 631 "pikchr.y" | |
| 2648 | 2649 | {pik_behind(p,yymsp[0].minor.yy38);} |
| 2649 | -#line 2674 "pikchr.c" | |
| 2650 | +#line 2675 "pikchr.c" | |
| 2650 | 2651 | break; |
| 2651 | 2652 | case 50: /* withclause ::= DOT_E edge AT position */ |
| 2652 | 2653 | case 51: /* withclause ::= edge AT position */ yytestcase(yyruleno==51); |
| 2653 | -#line 638 "pikchr.y" | |
| 2654 | +#line 639 "pikchr.y" | |
| 2654 | 2655 | { pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy43,&yymsp[-1].minor.yy0); } |
| 2655 | -#line 2680 "pikchr.c" | |
| 2656 | +#line 2681 "pikchr.c" | |
| 2656 | 2657 | break; |
| 2657 | 2658 | case 52: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */ |
| 2658 | -#line 642 "pikchr.y" | |
| 2659 | +#line 643 "pikchr.y" | |
| 2659 | 2660 | {yylhsminor.yy0 = yymsp[0].minor.yy0;} |
| 2660 | -#line 2685 "pikchr.c" | |
| 2661 | +#line 2686 "pikchr.c" | |
| 2661 | 2662 | yymsp[0].minor.yy0 = yylhsminor.yy0; |
| 2662 | 2663 | break; |
| 2663 | 2664 | case 53: /* boolproperty ::= CW */ |
| 2664 | -#line 653 "pikchr.y" | |
| 2665 | +#line 654 "pikchr.y" | |
| 2665 | 2666 | {p->cur->cw = 1;} |
| 2666 | -#line 2691 "pikchr.c" | |
| 2667 | +#line 2692 "pikchr.c" | |
| 2667 | 2668 | break; |
| 2668 | 2669 | case 54: /* boolproperty ::= CCW */ |
| 2669 | -#line 654 "pikchr.y" | |
| 2670 | +#line 655 "pikchr.y" | |
| 2670 | 2671 | {p->cur->cw = 0;} |
| 2671 | -#line 2696 "pikchr.c" | |
| 2672 | +#line 2697 "pikchr.c" | |
| 2672 | 2673 | break; |
| 2673 | 2674 | case 55: /* boolproperty ::= LARROW */ |
| 2674 | -#line 655 "pikchr.y" | |
| 2675 | +#line 656 "pikchr.y" | |
| 2675 | 2676 | {p->cur->larrow=1; p->cur->rarrow=0; } |
| 2676 | -#line 2701 "pikchr.c" | |
| 2677 | +#line 2702 "pikchr.c" | |
| 2677 | 2678 | break; |
| 2678 | 2679 | case 56: /* boolproperty ::= RARROW */ |
| 2679 | -#line 656 "pikchr.y" | |
| 2680 | +#line 657 "pikchr.y" | |
| 2680 | 2681 | {p->cur->larrow=0; p->cur->rarrow=1; } |
| 2681 | -#line 2706 "pikchr.c" | |
| 2682 | +#line 2707 "pikchr.c" | |
| 2682 | 2683 | break; |
| 2683 | 2684 | case 57: /* boolproperty ::= LRARROW */ |
| 2684 | -#line 657 "pikchr.y" | |
| 2685 | +#line 658 "pikchr.y" | |
| 2685 | 2686 | {p->cur->larrow=1; p->cur->rarrow=1; } |
| 2686 | -#line 2711 "pikchr.c" | |
| 2687 | +#line 2712 "pikchr.c" | |
| 2687 | 2688 | break; |
| 2688 | 2689 | case 58: /* boolproperty ::= INVIS */ |
| 2689 | -#line 658 "pikchr.y" | |
| 2690 | +#line 659 "pikchr.y" | |
| 2690 | 2691 | {p->cur->sw = 0.0;} |
| 2691 | -#line 2716 "pikchr.c" | |
| 2692 | +#line 2717 "pikchr.c" | |
| 2692 | 2693 | break; |
| 2693 | 2694 | case 59: /* boolproperty ::= THICK */ |
| 2694 | -#line 659 "pikchr.y" | |
| 2695 | +#line 660 "pikchr.y" | |
| 2695 | 2696 | {p->cur->sw *= 1.5;} |
| 2696 | -#line 2721 "pikchr.c" | |
| 2697 | +#line 2722 "pikchr.c" | |
| 2697 | 2698 | break; |
| 2698 | 2699 | case 60: /* boolproperty ::= THIN */ |
| 2699 | -#line 660 "pikchr.y" | |
| 2700 | +#line 661 "pikchr.y" | |
| 2700 | 2701 | {p->cur->sw *= 0.67;} |
| 2701 | -#line 2726 "pikchr.c" | |
| 2702 | +#line 2727 "pikchr.c" | |
| 2702 | 2703 | break; |
| 2703 | 2704 | case 61: /* boolproperty ::= SOLID */ |
| 2704 | -#line 661 "pikchr.y" | |
| 2705 | +#line 662 "pikchr.y" | |
| 2705 | 2706 | {p->cur->sw = pik_value(p,"thickness",9,0); |
| 2706 | 2707 | p->cur->dotted = p->cur->dashed = 0.0;} |
| 2707 | -#line 2732 "pikchr.c" | |
| 2708 | +#line 2733 "pikchr.c" | |
| 2708 | 2709 | break; |
| 2709 | 2710 | case 62: /* textposition ::= */ |
| 2710 | -#line 664 "pikchr.y" | |
| 2711 | +#line 665 "pikchr.y" | |
| 2711 | 2712 | {yymsp[1].minor.yy196 = 0;} |
| 2712 | -#line 2737 "pikchr.c" | |
| 2713 | +#line 2738 "pikchr.c" | |
| 2713 | 2714 | break; |
| 2714 | 2715 | case 63: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */ |
| 2715 | -#line 667 "pikchr.y" | |
| 2716 | +#line 668 "pikchr.y" | |
| 2716 | 2717 | {yylhsminor.yy196 = pik_text_position(yymsp[-1].minor.yy196,&yymsp[0].minor.yy0);} |
| 2717 | -#line 2742 "pikchr.c" | |
| 2718 | +#line 2743 "pikchr.c" | |
| 2718 | 2719 | yymsp[-1].minor.yy196 = yylhsminor.yy196; |
| 2719 | 2720 | break; |
| 2720 | 2721 | case 64: /* position ::= expr COMMA expr */ |
| 2721 | -#line 670 "pikchr.y" | |
| 2722 | +#line 671 "pikchr.y" | |
| 2722 | 2723 | {yylhsminor.yy43.x=yymsp[-2].minor.yy265; yylhsminor.yy43.y=yymsp[0].minor.yy265;} |
| 2723 | -#line 2748 "pikchr.c" | |
| 2724 | +#line 2749 "pikchr.c" | |
| 2724 | 2725 | yymsp[-2].minor.yy43 = yylhsminor.yy43; |
| 2725 | 2726 | break; |
| 2726 | 2727 | case 65: /* position ::= place PLUS expr COMMA expr */ |
| 2727 | -#line 672 "pikchr.y" | |
| 2728 | +#line 673 "pikchr.y" | |
| 2728 | 2729 | {yylhsminor.yy43.x=yymsp[-4].minor.yy43.x+yymsp[-2].minor.yy265; yylhsminor.yy43.y=yymsp[-4].minor.yy43.y+yymsp[0].minor.yy265;} |
| 2729 | -#line 2754 "pikchr.c" | |
| 2730 | +#line 2755 "pikchr.c" | |
| 2730 | 2731 | yymsp[-4].minor.yy43 = yylhsminor.yy43; |
| 2731 | 2732 | break; |
| 2732 | 2733 | case 66: /* position ::= place MINUS expr COMMA expr */ |
| 2733 | -#line 673 "pikchr.y" | |
| 2734 | +#line 674 "pikchr.y" | |
| 2734 | 2735 | {yylhsminor.yy43.x=yymsp[-4].minor.yy43.x-yymsp[-2].minor.yy265; yylhsminor.yy43.y=yymsp[-4].minor.yy43.y-yymsp[0].minor.yy265;} |
| 2735 | -#line 2760 "pikchr.c" | |
| 2736 | +#line 2761 "pikchr.c" | |
| 2736 | 2737 | yymsp[-4].minor.yy43 = yylhsminor.yy43; |
| 2737 | 2738 | break; |
| 2738 | 2739 | case 67: /* position ::= place PLUS LP expr COMMA expr RP */ |
| 2739 | -#line 675 "pikchr.y" | |
| 2740 | +#line 676 "pikchr.y" | |
| 2740 | 2741 | {yylhsminor.yy43.x=yymsp[-6].minor.yy43.x+yymsp[-3].minor.yy265; yylhsminor.yy43.y=yymsp[-6].minor.yy43.y+yymsp[-1].minor.yy265;} |
| 2741 | -#line 2766 "pikchr.c" | |
| 2742 | +#line 2767 "pikchr.c" | |
| 2742 | 2743 | yymsp[-6].minor.yy43 = yylhsminor.yy43; |
| 2743 | 2744 | break; |
| 2744 | 2745 | case 68: /* position ::= place MINUS LP expr COMMA expr RP */ |
| 2745 | -#line 677 "pikchr.y" | |
| 2746 | +#line 678 "pikchr.y" | |
| 2746 | 2747 | {yylhsminor.yy43.x=yymsp[-6].minor.yy43.x-yymsp[-3].minor.yy265; yylhsminor.yy43.y=yymsp[-6].minor.yy43.y-yymsp[-1].minor.yy265;} |
| 2747 | -#line 2772 "pikchr.c" | |
| 2748 | +#line 2773 "pikchr.c" | |
| 2748 | 2749 | yymsp[-6].minor.yy43 = yylhsminor.yy43; |
| 2749 | 2750 | break; |
| 2750 | 2751 | case 69: /* position ::= LP position COMMA position RP */ |
| 2751 | -#line 678 "pikchr.y" | |
| 2752 | +#line 679 "pikchr.y" | |
| 2752 | 2753 | {yymsp[-4].minor.yy43.x=yymsp[-3].minor.yy43.x; yymsp[-4].minor.yy43.y=yymsp[-1].minor.yy43.y;} |
| 2753 | -#line 2778 "pikchr.c" | |
| 2754 | +#line 2779 "pikchr.c" | |
| 2754 | 2755 | break; |
| 2755 | 2756 | case 70: /* position ::= LP position RP */ |
| 2756 | -#line 679 "pikchr.y" | |
| 2757 | +#line 680 "pikchr.y" | |
| 2757 | 2758 | {yymsp[-2].minor.yy43=yymsp[-1].minor.yy43;} |
| 2758 | -#line 2783 "pikchr.c" | |
| 2759 | +#line 2784 "pikchr.c" | |
| 2759 | 2760 | break; |
| 2760 | 2761 | case 71: /* position ::= expr between position AND position */ |
| 2761 | -#line 681 "pikchr.y" | |
| 2762 | +#line 682 "pikchr.y" | |
| 2762 | 2763 | {yylhsminor.yy43 = pik_position_between(yymsp[-4].minor.yy265,yymsp[-2].minor.yy43,yymsp[0].minor.yy43);} |
| 2763 | -#line 2788 "pikchr.c" | |
| 2764 | +#line 2789 "pikchr.c" | |
| 2764 | 2765 | yymsp[-4].minor.yy43 = yylhsminor.yy43; |
| 2765 | 2766 | break; |
| 2766 | 2767 | case 72: /* position ::= expr LT position COMMA position GT */ |
| 2767 | -#line 683 "pikchr.y" | |
| 2768 | +#line 684 "pikchr.y" | |
| 2768 | 2769 | {yylhsminor.yy43 = pik_position_between(yymsp[-5].minor.yy265,yymsp[-3].minor.yy43,yymsp[-1].minor.yy43);} |
| 2769 | -#line 2794 "pikchr.c" | |
| 2770 | +#line 2795 "pikchr.c" | |
| 2770 | 2771 | yymsp[-5].minor.yy43 = yylhsminor.yy43; |
| 2771 | 2772 | break; |
| 2772 | 2773 | case 73: /* position ::= expr ABOVE position */ |
| 2773 | -#line 684 "pikchr.y" | |
| 2774 | +#line 685 "pikchr.y" | |
| 2774 | 2775 | {yylhsminor.yy43=yymsp[0].minor.yy43; yylhsminor.yy43.y += yymsp[-2].minor.yy265;} |
| 2775 | -#line 2800 "pikchr.c" | |
| 2776 | +#line 2801 "pikchr.c" | |
| 2776 | 2777 | yymsp[-2].minor.yy43 = yylhsminor.yy43; |
| 2777 | 2778 | break; |
| 2778 | 2779 | case 74: /* position ::= expr BELOW position */ |
| 2779 | -#line 685 "pikchr.y" | |
| 2780 | +#line 686 "pikchr.y" | |
| 2780 | 2781 | {yylhsminor.yy43=yymsp[0].minor.yy43; yylhsminor.yy43.y -= yymsp[-2].minor.yy265;} |
| 2781 | -#line 2806 "pikchr.c" | |
| 2782 | +#line 2807 "pikchr.c" | |
| 2782 | 2783 | yymsp[-2].minor.yy43 = yylhsminor.yy43; |
| 2783 | 2784 | break; |
| 2784 | 2785 | case 75: /* position ::= expr LEFT OF position */ |
| 2785 | -#line 686 "pikchr.y" | |
| 2786 | +#line 687 "pikchr.y" | |
| 2786 | 2787 | {yylhsminor.yy43=yymsp[0].minor.yy43; yylhsminor.yy43.x -= yymsp[-3].minor.yy265;} |
| 2787 | -#line 2812 "pikchr.c" | |
| 2788 | +#line 2813 "pikchr.c" | |
| 2788 | 2789 | yymsp[-3].minor.yy43 = yylhsminor.yy43; |
| 2789 | 2790 | break; |
| 2790 | 2791 | case 76: /* position ::= expr RIGHT OF position */ |
| 2791 | -#line 687 "pikchr.y" | |
| 2792 | +#line 688 "pikchr.y" | |
| 2792 | 2793 | {yylhsminor.yy43=yymsp[0].minor.yy43; yylhsminor.yy43.x += yymsp[-3].minor.yy265;} |
| 2793 | -#line 2818 "pikchr.c" | |
| 2794 | +#line 2819 "pikchr.c" | |
| 2794 | 2795 | yymsp[-3].minor.yy43 = yylhsminor.yy43; |
| 2795 | 2796 | break; |
| 2796 | 2797 | case 77: /* position ::= expr ON HEADING EDGEPT OF position */ |
| 2797 | -#line 689 "pikchr.y" | |
| 2798 | +#line 690 "pikchr.y" | |
| 2798 | 2799 | {yylhsminor.yy43 = pik_position_at_hdg(yymsp[-5].minor.yy265,&yymsp[-2].minor.yy0,yymsp[0].minor.yy43);} |
| 2799 | -#line 2824 "pikchr.c" | |
| 2800 | +#line 2825 "pikchr.c" | |
| 2800 | 2801 | yymsp[-5].minor.yy43 = yylhsminor.yy43; |
| 2801 | 2802 | break; |
| 2802 | 2803 | case 78: /* position ::= expr HEADING EDGEPT OF position */ |
| 2803 | -#line 691 "pikchr.y" | |
| 2804 | +#line 692 "pikchr.y" | |
| 2804 | 2805 | {yylhsminor.yy43 = pik_position_at_hdg(yymsp[-4].minor.yy265,&yymsp[-2].minor.yy0,yymsp[0].minor.yy43);} |
| 2805 | -#line 2830 "pikchr.c" | |
| 2806 | +#line 2831 "pikchr.c" | |
| 2806 | 2807 | yymsp[-4].minor.yy43 = yylhsminor.yy43; |
| 2807 | 2808 | break; |
| 2808 | 2809 | case 79: /* position ::= expr EDGEPT OF position */ |
| 2809 | -#line 693 "pikchr.y" | |
| 2810 | +#line 694 "pikchr.y" | |
| 2810 | 2811 | {yylhsminor.yy43 = pik_position_at_hdg(yymsp[-3].minor.yy265,&yymsp[-2].minor.yy0,yymsp[0].minor.yy43);} |
| 2811 | -#line 2836 "pikchr.c" | |
| 2812 | +#line 2837 "pikchr.c" | |
| 2812 | 2813 | yymsp[-3].minor.yy43 = yylhsminor.yy43; |
| 2813 | 2814 | break; |
| 2814 | 2815 | case 80: /* position ::= expr ON HEADING expr FROM position */ |
| 2815 | -#line 695 "pikchr.y" | |
| 2816 | +#line 696 "pikchr.y" | |
| 2816 | 2817 | {yylhsminor.yy43 = pik_position_at_angle(yymsp[-5].minor.yy265,yymsp[-2].minor.yy265,yymsp[0].minor.yy43);} |
| 2817 | -#line 2842 "pikchr.c" | |
| 2818 | +#line 2843 "pikchr.c" | |
| 2818 | 2819 | yymsp[-5].minor.yy43 = yylhsminor.yy43; |
| 2819 | 2820 | break; |
| 2820 | 2821 | case 81: /* position ::= expr HEADING expr FROM position */ |
| 2821 | -#line 697 "pikchr.y" | |
| 2822 | +#line 698 "pikchr.y" | |
| 2822 | 2823 | {yylhsminor.yy43 = pik_position_at_angle(yymsp[-4].minor.yy265,yymsp[-2].minor.yy265,yymsp[0].minor.yy43);} |
| 2823 | -#line 2848 "pikchr.c" | |
| 2824 | +#line 2849 "pikchr.c" | |
| 2824 | 2825 | yymsp[-4].minor.yy43 = yylhsminor.yy43; |
| 2825 | 2826 | break; |
| 2826 | 2827 | case 82: /* place ::= edge OF object */ |
| 2827 | -#line 709 "pikchr.y" | |
| 2828 | +#line 710 "pikchr.y" | |
| 2828 | 2829 | {yylhsminor.yy43 = pik_place_of_elem(p,yymsp[0].minor.yy38,&yymsp[-2].minor.yy0);} |
| 2829 | -#line 2854 "pikchr.c" | |
| 2830 | +#line 2855 "pikchr.c" | |
| 2830 | 2831 | yymsp[-2].minor.yy43 = yylhsminor.yy43; |
| 2831 | 2832 | break; |
| 2832 | 2833 | case 83: /* place2 ::= object */ |
| 2833 | -#line 710 "pikchr.y" | |
| 2834 | +#line 711 "pikchr.y" | |
| 2834 | 2835 | {yylhsminor.yy43 = pik_place_of_elem(p,yymsp[0].minor.yy38,0);} |
| 2835 | -#line 2860 "pikchr.c" | |
| 2836 | +#line 2861 "pikchr.c" | |
| 2836 | 2837 | yymsp[0].minor.yy43 = yylhsminor.yy43; |
| 2837 | 2838 | break; |
| 2838 | 2839 | case 84: /* place2 ::= object DOT_E edge */ |
| 2839 | -#line 711 "pikchr.y" | |
| 2840 | +#line 712 "pikchr.y" | |
| 2840 | 2841 | {yylhsminor.yy43 = pik_place_of_elem(p,yymsp[-2].minor.yy38,&yymsp[0].minor.yy0);} |
| 2841 | -#line 2866 "pikchr.c" | |
| 2842 | +#line 2867 "pikchr.c" | |
| 2842 | 2843 | yymsp[-2].minor.yy43 = yylhsminor.yy43; |
| 2843 | 2844 | break; |
| 2844 | 2845 | case 85: /* place2 ::= NTH VERTEX OF object */ |
| 2845 | -#line 712 "pikchr.y" | |
| 2846 | +#line 713 "pikchr.y" | |
| 2846 | 2847 | {yylhsminor.yy43 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy38);} |
| 2847 | -#line 2872 "pikchr.c" | |
| 2848 | +#line 2873 "pikchr.c" | |
| 2848 | 2849 | yymsp[-3].minor.yy43 = yylhsminor.yy43; |
| 2849 | 2850 | break; |
| 2850 | 2851 | case 86: /* object ::= nth */ |
| 2851 | -#line 724 "pikchr.y" | |
| 2852 | +#line 725 "pikchr.y" | |
| 2852 | 2853 | {yylhsminor.yy38 = pik_find_nth(p,0,&yymsp[0].minor.yy0);} |
| 2853 | -#line 2878 "pikchr.c" | |
| 2854 | +#line 2879 "pikchr.c" | |
| 2854 | 2855 | yymsp[0].minor.yy38 = yylhsminor.yy38; |
| 2855 | 2856 | break; |
| 2856 | 2857 | case 87: /* object ::= nth OF|IN object */ |
| 2857 | -#line 725 "pikchr.y" | |
| 2858 | +#line 726 "pikchr.y" | |
| 2858 | 2859 | {yylhsminor.yy38 = pik_find_nth(p,yymsp[0].minor.yy38,&yymsp[-2].minor.yy0);} |
| 2859 | -#line 2884 "pikchr.c" | |
| 2860 | +#line 2885 "pikchr.c" | |
| 2860 | 2861 | yymsp[-2].minor.yy38 = yylhsminor.yy38; |
| 2861 | 2862 | break; |
| 2862 | 2863 | case 88: /* objectname ::= PLACENAME */ |
| 2863 | -#line 727 "pikchr.y" | |
| 2864 | +#line 728 "pikchr.y" | |
| 2864 | 2865 | {yylhsminor.yy38 = pik_find_byname(p,0,&yymsp[0].minor.yy0);} |
| 2865 | -#line 2890 "pikchr.c" | |
| 2866 | +#line 2891 "pikchr.c" | |
| 2866 | 2867 | yymsp[0].minor.yy38 = yylhsminor.yy38; |
| 2867 | 2868 | break; |
| 2868 | 2869 | case 89: /* objectname ::= objectname DOT_U PLACENAME */ |
| 2869 | -#line 729 "pikchr.y" | |
| 2870 | +#line 730 "pikchr.y" | |
| 2870 | 2871 | {yylhsminor.yy38 = pik_find_byname(p,yymsp[-2].minor.yy38,&yymsp[0].minor.yy0);} |
| 2871 | -#line 2896 "pikchr.c" | |
| 2872 | +#line 2897 "pikchr.c" | |
| 2872 | 2873 | yymsp[-2].minor.yy38 = yylhsminor.yy38; |
| 2873 | 2874 | break; |
| 2874 | 2875 | case 90: /* nth ::= NTH CLASSNAME */ |
| 2875 | -#line 731 "pikchr.y" | |
| 2876 | +#line 732 "pikchr.y" | |
| 2876 | 2877 | {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); } |
| 2877 | -#line 2902 "pikchr.c" | |
| 2878 | +#line 2903 "pikchr.c" | |
| 2878 | 2879 | yymsp[-1].minor.yy0 = yylhsminor.yy0; |
| 2879 | 2880 | break; |
| 2880 | 2881 | case 91: /* nth ::= NTH LAST CLASSNAME */ |
| 2881 | -#line 732 "pikchr.y" | |
| 2882 | +#line 733 "pikchr.y" | |
| 2882 | 2883 | {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); } |
| 2883 | -#line 2908 "pikchr.c" | |
| 2884 | +#line 2909 "pikchr.c" | |
| 2884 | 2885 | yymsp[-2].minor.yy0 = yylhsminor.yy0; |
| 2885 | 2886 | break; |
| 2886 | 2887 | case 92: /* nth ::= LAST CLASSNAME */ |
| 2887 | -#line 733 "pikchr.y" | |
| 2888 | +#line 734 "pikchr.y" | |
| 2888 | 2889 | {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;} |
| 2889 | -#line 2914 "pikchr.c" | |
| 2890 | +#line 2915 "pikchr.c" | |
| 2890 | 2891 | break; |
| 2891 | 2892 | case 93: /* nth ::= LAST */ |
| 2892 | -#line 734 "pikchr.y" | |
| 2893 | +#line 735 "pikchr.y" | |
| 2893 | 2894 | {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;} |
| 2894 | -#line 2919 "pikchr.c" | |
| 2895 | +#line 2920 "pikchr.c" | |
| 2895 | 2896 | yymsp[0].minor.yy0 = yylhsminor.yy0; |
| 2896 | 2897 | break; |
| 2897 | 2898 | case 94: /* nth ::= NTH LB RB */ |
| 2898 | -#line 735 "pikchr.y" | |
| 2899 | +#line 736 "pikchr.y" | |
| 2899 | 2900 | {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);} |
| 2900 | -#line 2925 "pikchr.c" | |
| 2901 | +#line 2926 "pikchr.c" | |
| 2901 | 2902 | yymsp[-2].minor.yy0 = yylhsminor.yy0; |
| 2902 | 2903 | break; |
| 2903 | 2904 | case 95: /* nth ::= NTH LAST LB RB */ |
| 2904 | -#line 736 "pikchr.y" | |
| 2905 | +#line 737 "pikchr.y" | |
| 2905 | 2906 | {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);} |
| 2906 | -#line 2931 "pikchr.c" | |
| 2907 | +#line 2932 "pikchr.c" | |
| 2907 | 2908 | yymsp[-3].minor.yy0 = yylhsminor.yy0; |
| 2908 | 2909 | break; |
| 2909 | 2910 | case 96: /* nth ::= LAST LB RB */ |
| 2910 | -#line 737 "pikchr.y" | |
| 2911 | +#line 738 "pikchr.y" | |
| 2911 | 2912 | {yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; } |
| 2912 | -#line 2937 "pikchr.c" | |
| 2913 | +#line 2938 "pikchr.c" | |
| 2913 | 2914 | break; |
| 2914 | 2915 | case 97: /* expr ::= expr PLUS expr */ |
| 2915 | -#line 739 "pikchr.y" | |
| 2916 | +#line 740 "pikchr.y" | |
| 2916 | 2917 | {yylhsminor.yy265=yymsp[-2].minor.yy265+yymsp[0].minor.yy265;} |
| 2917 | -#line 2942 "pikchr.c" | |
| 2918 | +#line 2943 "pikchr.c" | |
| 2918 | 2919 | yymsp[-2].minor.yy265 = yylhsminor.yy265; |
| 2919 | 2920 | break; |
| 2920 | 2921 | case 98: /* expr ::= expr MINUS expr */ |
| 2921 | -#line 740 "pikchr.y" | |
| 2922 | +#line 741 "pikchr.y" | |
| 2922 | 2923 | {yylhsminor.yy265=yymsp[-2].minor.yy265-yymsp[0].minor.yy265;} |
| 2923 | -#line 2948 "pikchr.c" | |
| 2924 | +#line 2949 "pikchr.c" | |
| 2924 | 2925 | yymsp[-2].minor.yy265 = yylhsminor.yy265; |
| 2925 | 2926 | break; |
| 2926 | 2927 | case 99: /* expr ::= expr STAR expr */ |
| 2927 | -#line 741 "pikchr.y" | |
| 2928 | +#line 742 "pikchr.y" | |
| 2928 | 2929 | {yylhsminor.yy265=yymsp[-2].minor.yy265*yymsp[0].minor.yy265;} |
| 2929 | -#line 2954 "pikchr.c" | |
| 2930 | +#line 2955 "pikchr.c" | |
| 2930 | 2931 | yymsp[-2].minor.yy265 = yylhsminor.yy265; |
| 2931 | 2932 | break; |
| 2932 | 2933 | case 100: /* expr ::= expr SLASH expr */ |
| 2933 | -#line 742 "pikchr.y" | |
| 2934 | +#line 743 "pikchr.y" | |
| 2934 | 2935 | { |
| 2935 | 2936 | if( yymsp[0].minor.yy265==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy265 = 0.0; } |
| 2936 | 2937 | else{ yylhsminor.yy265 = yymsp[-2].minor.yy265/yymsp[0].minor.yy265; } |
| 2937 | 2938 | } |
| 2938 | -#line 2963 "pikchr.c" | |
| 2939 | +#line 2964 "pikchr.c" | |
| 2939 | 2940 | yymsp[-2].minor.yy265 = yylhsminor.yy265; |
| 2940 | 2941 | break; |
| 2941 | 2942 | case 101: /* expr ::= MINUS expr */ |
| 2942 | -#line 746 "pikchr.y" | |
| 2943 | +#line 747 "pikchr.y" | |
| 2943 | 2944 | {yymsp[-1].minor.yy265=-yymsp[0].minor.yy265;} |
| 2944 | -#line 2969 "pikchr.c" | |
| 2945 | +#line 2970 "pikchr.c" | |
| 2945 | 2946 | break; |
| 2946 | 2947 | case 102: /* expr ::= PLUS expr */ |
| 2947 | -#line 747 "pikchr.y" | |
| 2948 | +#line 748 "pikchr.y" | |
| 2948 | 2949 | {yymsp[-1].minor.yy265=yymsp[0].minor.yy265;} |
| 2949 | -#line 2974 "pikchr.c" | |
| 2950 | +#line 2975 "pikchr.c" | |
| 2950 | 2951 | break; |
| 2951 | 2952 | case 103: /* expr ::= LP expr RP */ |
| 2952 | -#line 748 "pikchr.y" | |
| 2953 | +#line 749 "pikchr.y" | |
| 2953 | 2954 | {yymsp[-2].minor.yy265=yymsp[-1].minor.yy265;} |
| 2954 | -#line 2979 "pikchr.c" | |
| 2955 | +#line 2980 "pikchr.c" | |
| 2955 | 2956 | break; |
| 2956 | 2957 | case 104: /* expr ::= LP FILL|COLOR|THICKNESS RP */ |
| 2957 | -#line 749 "pikchr.y" | |
| 2958 | +#line 750 "pikchr.y" | |
| 2958 | 2959 | {yymsp[-2].minor.yy265=pik_get_var(p,&yymsp[-1].minor.yy0);} |
| 2959 | -#line 2984 "pikchr.c" | |
| 2960 | +#line 2985 "pikchr.c" | |
| 2960 | 2961 | break; |
| 2961 | 2962 | case 105: /* expr ::= NUMBER */ |
| 2962 | -#line 750 "pikchr.y" | |
| 2963 | +#line 751 "pikchr.y" | |
| 2963 | 2964 | {yylhsminor.yy265=pik_atof(&yymsp[0].minor.yy0);} |
| 2964 | -#line 2989 "pikchr.c" | |
| 2965 | +#line 2990 "pikchr.c" | |
| 2965 | 2966 | yymsp[0].minor.yy265 = yylhsminor.yy265; |
| 2966 | 2967 | break; |
| 2967 | 2968 | case 106: /* expr ::= ID */ |
| 2968 | -#line 751 "pikchr.y" | |
| 2969 | +#line 752 "pikchr.y" | |
| 2969 | 2970 | {yylhsminor.yy265=pik_get_var(p,&yymsp[0].minor.yy0);} |
| 2970 | -#line 2995 "pikchr.c" | |
| 2971 | +#line 2996 "pikchr.c" | |
| 2971 | 2972 | yymsp[0].minor.yy265 = yylhsminor.yy265; |
| 2972 | 2973 | break; |
| 2973 | 2974 | case 107: /* expr ::= FUNC1 LP expr RP */ |
| 2974 | -#line 752 "pikchr.y" | |
| 2975 | +#line 753 "pikchr.y" | |
| 2975 | 2976 | {yylhsminor.yy265 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy265,0.0);} |
| 2976 | -#line 3001 "pikchr.c" | |
| 2977 | +#line 3002 "pikchr.c" | |
| 2977 | 2978 | yymsp[-3].minor.yy265 = yylhsminor.yy265; |
| 2978 | 2979 | break; |
| 2979 | 2980 | case 108: /* expr ::= FUNC2 LP expr COMMA expr RP */ |
| 2980 | -#line 753 "pikchr.y" | |
| 2981 | +#line 754 "pikchr.y" | |
| 2981 | 2982 | {yylhsminor.yy265 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy265,yymsp[-1].minor.yy265);} |
| 2982 | -#line 3007 "pikchr.c" | |
| 2983 | +#line 3008 "pikchr.c" | |
| 2983 | 2984 | yymsp[-5].minor.yy265 = yylhsminor.yy265; |
| 2984 | 2985 | break; |
| 2985 | 2986 | case 109: /* expr ::= DIST LP position COMMA position RP */ |
| 2986 | -#line 754 "pikchr.y" | |
| 2987 | +#line 755 "pikchr.y" | |
| 2987 | 2988 | {yymsp[-5].minor.yy265 = pik_dist(&yymsp[-3].minor.yy43,&yymsp[-1].minor.yy43);} |
| 2988 | -#line 3013 "pikchr.c" | |
| 2989 | +#line 3014 "pikchr.c" | |
| 2989 | 2990 | break; |
| 2990 | 2991 | case 110: /* expr ::= place2 DOT_XY X */ |
| 2991 | -#line 755 "pikchr.y" | |
| 2992 | +#line 756 "pikchr.y" | |
| 2992 | 2993 | {yylhsminor.yy265 = yymsp[-2].minor.yy43.x;} |
| 2993 | -#line 3018 "pikchr.c" | |
| 2994 | +#line 3019 "pikchr.c" | |
| 2994 | 2995 | yymsp[-2].minor.yy265 = yylhsminor.yy265; |
| 2995 | 2996 | break; |
| 2996 | 2997 | case 111: /* expr ::= place2 DOT_XY Y */ |
| 2997 | -#line 756 "pikchr.y" | |
| 2998 | +#line 757 "pikchr.y" | |
| 2998 | 2999 | {yylhsminor.yy265 = yymsp[-2].minor.yy43.y;} |
| 2999 | -#line 3024 "pikchr.c" | |
| 3000 | +#line 3025 "pikchr.c" | |
| 3000 | 3001 | yymsp[-2].minor.yy265 = yylhsminor.yy265; |
| 3001 | 3002 | break; |
| 3002 | 3003 | case 112: /* expr ::= object DOT_L numproperty */ |
| 3003 | 3004 | case 113: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==113); |
| 3004 | 3005 | case 114: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==114); |
| 3005 | -#line 757 "pikchr.y" | |
| 3006 | +#line 758 "pikchr.y" | |
| 3006 | 3007 | {yylhsminor.yy265=pik_property_of(yymsp[-2].minor.yy38,&yymsp[0].minor.yy0);} |
| 3007 | -#line 3032 "pikchr.c" | |
| 3008 | +#line 3033 "pikchr.c" | |
| 3008 | 3009 | yymsp[-2].minor.yy265 = yylhsminor.yy265; |
| 3009 | 3010 | break; |
| 3010 | 3011 | default: |
| 3011 | 3012 | /* (115) lvalue ::= ID */ yytestcase(yyruleno==115); |
| 3012 | 3013 | /* (116) lvalue ::= FILL */ yytestcase(yyruleno==116); |
| @@ -3105,19 +3106,19 @@ | ||
| 3105 | 3106 | ){ |
| 3106 | 3107 | pik_parserARG_FETCH |
| 3107 | 3108 | pik_parserCTX_FETCH |
| 3108 | 3109 | #define TOKEN yyminor |
| 3109 | 3110 | /************ Begin %syntax_error code ****************************************/ |
| 3110 | -#line 518 "pikchr.y" | |
| 3111 | +#line 519 "pikchr.y" | |
| 3111 | 3112 | |
| 3112 | 3113 | if( TOKEN.z && TOKEN.z[0] ){ |
| 3113 | 3114 | pik_error(p, &TOKEN, "syntax error"); |
| 3114 | 3115 | }else{ |
| 3115 | 3116 | pik_error(p, 0, "syntax error"); |
| 3116 | 3117 | } |
| 3117 | 3118 | UNUSED_PARAMETER(yymajor); |
| 3118 | -#line 3143 "pikchr.c" | |
| 3119 | +#line 3144 "pikchr.c" | |
| 3119 | 3120 | /************ End %syntax_error code ******************************************/ |
| 3120 | 3121 | pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */ |
| 3121 | 3122 | pik_parserCTX_STORE |
| 3122 | 3123 | } |
| 3123 | 3124 | |
| @@ -3346,11 +3347,11 @@ | ||
| 3346 | 3347 | #else |
| 3347 | 3348 | (void)iToken; |
| 3348 | 3349 | return 0; |
| 3349 | 3350 | #endif |
| 3350 | 3351 | } |
| 3351 | -#line 762 "pikchr.y" | |
| 3352 | +#line 763 "pikchr.y" | |
| 3352 | 3353 | |
| 3353 | 3354 | |
| 3354 | 3355 | |
| 3355 | 3356 | /* Chart of the 148 official CSS color names with their |
| 3356 | 3357 | ** corresponding RGB values thru Color Module Level 4: |
| @@ -4592,11 +4593,11 @@ | ||
| 4592 | 4593 | r = (127*r)/mx; |
| 4593 | 4594 | g = (127*g)/mx; |
| 4594 | 4595 | b = (127*b)/mx; |
| 4595 | 4596 | } |
| 4596 | 4597 | }else{ |
| 4597 | - if( mn<128 ){ | |
| 4598 | + if( mn<128 && mx>mn ){ | |
| 4598 | 4599 | r = 127 + ((r-mn)*128)/(mx-mn); |
| 4599 | 4600 | g = 127 + ((g-mn)*128)/(mx-mn); |
| 4600 | 4601 | b = 127 + ((b-mn)*128)/(mx-mn); |
| 4601 | 4602 | } |
| 4602 | 4603 | } |
| @@ -4637,11 +4638,15 @@ | ||
| 4637 | 4638 | } |
| 4638 | 4639 | static void pik_append_clr(Pik *p,const char *z1,PNum v,const char *z2,int bg){ |
| 4639 | 4640 | char buf[200]; |
| 4640 | 4641 | int x = (int)v; |
| 4641 | 4642 | int r, g, b; |
| 4642 | - if( p->mFlags & PIKCHR_DARK_MODE ) x = pik_color_to_dark_mode(x,bg); | |
| 4643 | + if( x==0 && p->fgcolor>0 && !bg ){ | |
| 4644 | + x = p->fgcolor; | |
| 4645 | + }else if( p->mFlags & PIKCHR_DARK_MODE ){ | |
| 4646 | + x = pik_color_to_dark_mode(x,bg); | |
| 4647 | + } | |
| 4643 | 4648 | r = (x>>16) & 0xff; |
| 4644 | 4649 | g = (x>>8) & 0xff; |
| 4645 | 4650 | b = x & 0xff; |
| 4646 | 4651 | snprintf(buf, sizeof(buf)-1, "%srgb(%d,%d,%d)%s", z1, r, g, b, z2); |
| 4647 | 4652 | buf[sizeof(buf)-1] = 0; |
| @@ -6877,18 +6882,26 @@ | ||
| 6877 | 6882 | PNum thickness; /* Stroke width */ |
| 6878 | 6883 | PNum margin; /* Extra bounding box margin */ |
| 6879 | 6884 | PNum w, h; /* Drawing width and height */ |
| 6880 | 6885 | PNum wArrow; |
| 6881 | 6886 | PNum pikScale; /* Value of the "scale" variable */ |
| 6887 | + int miss = 0; | |
| 6882 | 6888 | |
| 6883 | 6889 | /* Set up rendering parameters */ |
| 6884 | 6890 | pik_compute_layout_settings(p); |
| 6885 | 6891 | thickness = pik_value(p,"thickness",9,0); |
| 6886 | 6892 | if( thickness<=0.01 ) thickness = 0.01; |
| 6887 | 6893 | margin = pik_value(p,"margin",6,0); |
| 6888 | 6894 | margin += thickness; |
| 6889 | 6895 | wArrow = p->wArrow*thickness; |
| 6896 | + p->fgcolor = (int)pik_value(p,"fgcolor",7,&miss); | |
| 6897 | + if( miss ){ | |
| 6898 | + PToken t; | |
| 6899 | + t.z = "fgcolor"; | |
| 6900 | + t.n = 7; | |
| 6901 | + p->fgcolor = (int)pik_lookup_color(0, &t); | |
| 6902 | + } | |
| 6890 | 6903 | |
| 6891 | 6904 | /* Compute a bounding box over all objects so that we can know |
| 6892 | 6905 | ** how big to declare the SVG canvas */ |
| 6893 | 6906 | pik_bbox_init(&p->bbox); |
| 6894 | 6907 | pik_bbox_add_elist(p, pList, wArrow); |
| @@ -7839,6 +7852,6 @@ | ||
| 7839 | 7852 | |
| 7840 | 7853 | |
| 7841 | 7854 | #endif /* PIKCHR_TCL */ |
| 7842 | 7855 | |
| 7843 | 7856 | |
| 7844 | -#line 7869 "pikchr.c" | |
| 7857 | +#line 7882 "pikchr.c" | |
| 7845 | 7858 |
| --- src/pikchr.c | |
| +++ src/pikchr.c | |
| @@ -363,10 +363,11 @@ | |
| 363 | char bLayoutVars; /* True if cache is valid */ |
| 364 | char thenFlag; /* True if "then" seen */ |
| 365 | char samePath; /* aTPath copied by "same" */ |
| 366 | const char *zClass; /* Class name for the <svg> */ |
| 367 | int wSVG, hSVG; /* Width and height of the <svg> */ |
| 368 | /* Paths for lines are constructed here first, then transferred into |
| 369 | ** the PObj object at the end: */ |
| 370 | int nTPath; /* Number of entries on aTPath[] */ |
| 371 | int mTPath; /* For last entry, 1: x set, 2: y set */ |
| 372 | PPoint aTPath[1000]; /* Path under construction */ |
| @@ -472,11 +473,11 @@ | |
| 472 | static PObj *pik_position_assert(Pik*,PPoint*,PToken*,PPoint*); |
| 473 | static PNum pik_dist(PPoint*,PPoint*); |
| 474 | static void pik_add_macro(Pik*,PToken *pId,PToken *pCode); |
| 475 | |
| 476 | |
| 477 | #line 503 "pikchr.c" |
| 478 | /**************** End of %include directives **********************************/ |
| 479 | /* These constants specify the various numeric values for terminal symbols. |
| 480 | ***************** Begin token definitions *************************************/ |
| 481 | #ifndef T_ID |
| 482 | #define T_ID 1 |
| @@ -1689,22 +1690,22 @@ | |
| 1689 | ** inside the C code. |
| 1690 | */ |
| 1691 | /********* Begin destructor definitions ***************************************/ |
| 1692 | case 98: /* statement_list */ |
| 1693 | { |
| 1694 | #line 492 "pikchr.y" |
| 1695 | pik_elist_free(p,(yypminor->yy119)); |
| 1696 | #line 1721 "pikchr.c" |
| 1697 | } |
| 1698 | break; |
| 1699 | case 99: /* statement */ |
| 1700 | case 100: /* unnamed_statement */ |
| 1701 | case 101: /* basetype */ |
| 1702 | { |
| 1703 | #line 494 "pikchr.y" |
| 1704 | pik_elem_free(p,(yypminor->yy38)); |
| 1705 | #line 1730 "pikchr.c" |
| 1706 | } |
| 1707 | break; |
| 1708 | /********* End destructor definitions *****************************************/ |
| 1709 | default: break; /* If no destructor action specified: do nothing */ |
| 1710 | } |
| @@ -1918,14 +1919,14 @@ | |
| 1918 | #endif |
| 1919 | while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser); |
| 1920 | /* Here code is inserted which will execute if the parser |
| 1921 | ** stack every overflows */ |
| 1922 | /******** Begin %stack_overflow code ******************************************/ |
| 1923 | #line 526 "pikchr.y" |
| 1924 | |
| 1925 | pik_error(p, 0, "parser stack overflow"); |
| 1926 | #line 1951 "pikchr.c" |
| 1927 | /******** End %stack_overflow code ********************************************/ |
| 1928 | pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */ |
| 1929 | pik_parserCTX_STORE |
| 1930 | } |
| 1931 | |
| @@ -2399,614 +2400,614 @@ | |
| 2399 | ** break; |
| 2400 | */ |
| 2401 | /********** Begin reduce actions **********************************************/ |
| 2402 | YYMINORTYPE yylhsminor; |
| 2403 | case 0: /* document ::= statement_list */ |
| 2404 | #line 530 "pikchr.y" |
| 2405 | {pik_render(p,yymsp[0].minor.yy119);} |
| 2406 | #line 2431 "pikchr.c" |
| 2407 | break; |
| 2408 | case 1: /* statement_list ::= statement */ |
| 2409 | #line 533 "pikchr.y" |
| 2410 | { yylhsminor.yy119 = pik_elist_append(p,0,yymsp[0].minor.yy38); } |
| 2411 | #line 2436 "pikchr.c" |
| 2412 | yymsp[0].minor.yy119 = yylhsminor.yy119; |
| 2413 | break; |
| 2414 | case 2: /* statement_list ::= statement_list EOL statement */ |
| 2415 | #line 535 "pikchr.y" |
| 2416 | { yylhsminor.yy119 = pik_elist_append(p,yymsp[-2].minor.yy119,yymsp[0].minor.yy38); } |
| 2417 | #line 2442 "pikchr.c" |
| 2418 | yymsp[-2].minor.yy119 = yylhsminor.yy119; |
| 2419 | break; |
| 2420 | case 3: /* statement ::= */ |
| 2421 | #line 538 "pikchr.y" |
| 2422 | { yymsp[1].minor.yy38 = 0; } |
| 2423 | #line 2448 "pikchr.c" |
| 2424 | break; |
| 2425 | case 4: /* statement ::= direction */ |
| 2426 | #line 539 "pikchr.y" |
| 2427 | { pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy38=0; } |
| 2428 | #line 2453 "pikchr.c" |
| 2429 | yymsp[0].minor.yy38 = yylhsminor.yy38; |
| 2430 | break; |
| 2431 | case 5: /* statement ::= lvalue ASSIGN rvalue */ |
| 2432 | #line 540 "pikchr.y" |
| 2433 | {pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy265,&yymsp[-1].minor.yy0); yylhsminor.yy38=0;} |
| 2434 | #line 2459 "pikchr.c" |
| 2435 | yymsp[-2].minor.yy38 = yylhsminor.yy38; |
| 2436 | break; |
| 2437 | case 6: /* statement ::= PLACENAME COLON unnamed_statement */ |
| 2438 | #line 542 "pikchr.y" |
| 2439 | { yylhsminor.yy38 = yymsp[0].minor.yy38; pik_elem_setname(p,yymsp[0].minor.yy38,&yymsp[-2].minor.yy0); } |
| 2440 | #line 2465 "pikchr.c" |
| 2441 | yymsp[-2].minor.yy38 = yylhsminor.yy38; |
| 2442 | break; |
| 2443 | case 7: /* statement ::= PLACENAME COLON position */ |
| 2444 | #line 544 "pikchr.y" |
| 2445 | { yylhsminor.yy38 = pik_elem_new(p,0,0,0); |
| 2446 | if(yylhsminor.yy38){ yylhsminor.yy38->ptAt = yymsp[0].minor.yy43; pik_elem_setname(p,yylhsminor.yy38,&yymsp[-2].minor.yy0); }} |
| 2447 | #line 2472 "pikchr.c" |
| 2448 | yymsp[-2].minor.yy38 = yylhsminor.yy38; |
| 2449 | break; |
| 2450 | case 8: /* statement ::= unnamed_statement */ |
| 2451 | #line 546 "pikchr.y" |
| 2452 | {yylhsminor.yy38 = yymsp[0].minor.yy38;} |
| 2453 | #line 2478 "pikchr.c" |
| 2454 | yymsp[0].minor.yy38 = yylhsminor.yy38; |
| 2455 | break; |
| 2456 | case 9: /* statement ::= print prlist */ |
| 2457 | #line 547 "pikchr.y" |
| 2458 | {pik_append(p,"<br>\n",5); yymsp[-1].minor.yy38=0;} |
| 2459 | #line 2484 "pikchr.c" |
| 2460 | break; |
| 2461 | case 10: /* statement ::= ASSERT LP expr EQ expr RP */ |
| 2462 | #line 552 "pikchr.y" |
| 2463 | {yymsp[-5].minor.yy38=pik_assert(p,yymsp[-3].minor.yy265,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy265);} |
| 2464 | #line 2489 "pikchr.c" |
| 2465 | break; |
| 2466 | case 11: /* statement ::= ASSERT LP position EQ position RP */ |
| 2467 | #line 554 "pikchr.y" |
| 2468 | {yymsp[-5].minor.yy38=pik_position_assert(p,&yymsp[-3].minor.yy43,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy43);} |
| 2469 | #line 2494 "pikchr.c" |
| 2470 | break; |
| 2471 | case 12: /* statement ::= DEFINE ID CODEBLOCK */ |
| 2472 | #line 555 "pikchr.y" |
| 2473 | {yymsp[-2].minor.yy38=0; pik_add_macro(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);} |
| 2474 | #line 2499 "pikchr.c" |
| 2475 | break; |
| 2476 | case 13: /* rvalue ::= PLACENAME */ |
| 2477 | #line 566 "pikchr.y" |
| 2478 | {yylhsminor.yy265 = pik_lookup_color(p,&yymsp[0].minor.yy0);} |
| 2479 | #line 2504 "pikchr.c" |
| 2480 | yymsp[0].minor.yy265 = yylhsminor.yy265; |
| 2481 | break; |
| 2482 | case 14: /* pritem ::= FILL */ |
| 2483 | case 15: /* pritem ::= COLOR */ yytestcase(yyruleno==15); |
| 2484 | case 16: /* pritem ::= THICKNESS */ yytestcase(yyruleno==16); |
| 2485 | #line 571 "pikchr.y" |
| 2486 | {pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));} |
| 2487 | #line 2512 "pikchr.c" |
| 2488 | break; |
| 2489 | case 17: /* pritem ::= rvalue */ |
| 2490 | #line 574 "pikchr.y" |
| 2491 | {pik_append_num(p,"",yymsp[0].minor.yy265);} |
| 2492 | #line 2517 "pikchr.c" |
| 2493 | break; |
| 2494 | case 18: /* pritem ::= STRING */ |
| 2495 | #line 575 "pikchr.y" |
| 2496 | {pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);} |
| 2497 | #line 2522 "pikchr.c" |
| 2498 | break; |
| 2499 | case 19: /* prsep ::= COMMA */ |
| 2500 | #line 576 "pikchr.y" |
| 2501 | {pik_append(p, " ", 1);} |
| 2502 | #line 2527 "pikchr.c" |
| 2503 | break; |
| 2504 | case 20: /* unnamed_statement ::= basetype attribute_list */ |
| 2505 | #line 579 "pikchr.y" |
| 2506 | {yylhsminor.yy38 = yymsp[-1].minor.yy38; pik_after_adding_attributes(p,yylhsminor.yy38);} |
| 2507 | #line 2532 "pikchr.c" |
| 2508 | yymsp[-1].minor.yy38 = yylhsminor.yy38; |
| 2509 | break; |
| 2510 | case 21: /* basetype ::= CLASSNAME */ |
| 2511 | #line 581 "pikchr.y" |
| 2512 | {yylhsminor.yy38 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); } |
| 2513 | #line 2538 "pikchr.c" |
| 2514 | yymsp[0].minor.yy38 = yylhsminor.yy38; |
| 2515 | break; |
| 2516 | case 22: /* basetype ::= STRING textposition */ |
| 2517 | #line 583 "pikchr.y" |
| 2518 | {yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy196; yylhsminor.yy38 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); } |
| 2519 | #line 2544 "pikchr.c" |
| 2520 | yymsp[-1].minor.yy38 = yylhsminor.yy38; |
| 2521 | break; |
| 2522 | case 23: /* basetype ::= LB savelist statement_list RB */ |
| 2523 | #line 585 "pikchr.y" |
| 2524 | { p->list = yymsp[-2].minor.yy119; yymsp[-3].minor.yy38 = pik_elem_new(p,0,0,yymsp[-1].minor.yy119); if(yymsp[-3].minor.yy38) yymsp[-3].minor.yy38->errTok = yymsp[0].minor.yy0; } |
| 2525 | #line 2550 "pikchr.c" |
| 2526 | break; |
| 2527 | case 24: /* savelist ::= */ |
| 2528 | #line 590 "pikchr.y" |
| 2529 | {yymsp[1].minor.yy119 = p->list; p->list = 0;} |
| 2530 | #line 2555 "pikchr.c" |
| 2531 | break; |
| 2532 | case 25: /* relexpr ::= expr */ |
| 2533 | #line 597 "pikchr.y" |
| 2534 | {yylhsminor.yy200.rAbs = yymsp[0].minor.yy265; yylhsminor.yy200.rRel = 0;} |
| 2535 | #line 2560 "pikchr.c" |
| 2536 | yymsp[0].minor.yy200 = yylhsminor.yy200; |
| 2537 | break; |
| 2538 | case 26: /* relexpr ::= expr PERCENT */ |
| 2539 | #line 598 "pikchr.y" |
| 2540 | {yylhsminor.yy200.rAbs = 0; yylhsminor.yy200.rRel = yymsp[-1].minor.yy265/100;} |
| 2541 | #line 2566 "pikchr.c" |
| 2542 | yymsp[-1].minor.yy200 = yylhsminor.yy200; |
| 2543 | break; |
| 2544 | case 27: /* optrelexpr ::= */ |
| 2545 | #line 600 "pikchr.y" |
| 2546 | {yymsp[1].minor.yy200.rAbs = 0; yymsp[1].minor.yy200.rRel = 1.0;} |
| 2547 | #line 2572 "pikchr.c" |
| 2548 | break; |
| 2549 | case 28: /* attribute_list ::= relexpr alist */ |
| 2550 | #line 602 "pikchr.y" |
| 2551 | {pik_add_direction(p,0,&yymsp[-1].minor.yy200);} |
| 2552 | #line 2577 "pikchr.c" |
| 2553 | break; |
| 2554 | case 29: /* attribute ::= numproperty relexpr */ |
| 2555 | #line 606 "pikchr.y" |
| 2556 | { pik_set_numprop(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy200); } |
| 2557 | #line 2582 "pikchr.c" |
| 2558 | break; |
| 2559 | case 30: /* attribute ::= dashproperty expr */ |
| 2560 | #line 607 "pikchr.y" |
| 2561 | { pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy265); } |
| 2562 | #line 2587 "pikchr.c" |
| 2563 | break; |
| 2564 | case 31: /* attribute ::= dashproperty */ |
| 2565 | #line 608 "pikchr.y" |
| 2566 | { pik_set_dashed(p,&yymsp[0].minor.yy0,0); } |
| 2567 | #line 2592 "pikchr.c" |
| 2568 | break; |
| 2569 | case 32: /* attribute ::= colorproperty rvalue */ |
| 2570 | #line 609 "pikchr.y" |
| 2571 | { pik_set_clrprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy265); } |
| 2572 | #line 2597 "pikchr.c" |
| 2573 | break; |
| 2574 | case 33: /* attribute ::= go direction optrelexpr */ |
| 2575 | #line 610 "pikchr.y" |
| 2576 | { pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy200);} |
| 2577 | #line 2602 "pikchr.c" |
| 2578 | break; |
| 2579 | case 34: /* attribute ::= go direction even position */ |
| 2580 | #line 611 "pikchr.y" |
| 2581 | {pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy43);} |
| 2582 | #line 2607 "pikchr.c" |
| 2583 | break; |
| 2584 | case 35: /* attribute ::= CLOSE */ |
| 2585 | #line 612 "pikchr.y" |
| 2586 | { pik_close_path(p,&yymsp[0].minor.yy0); } |
| 2587 | #line 2612 "pikchr.c" |
| 2588 | break; |
| 2589 | case 36: /* attribute ::= CHOP */ |
| 2590 | #line 613 "pikchr.y" |
| 2591 | { p->cur->bChop = 1; } |
| 2592 | #line 2617 "pikchr.c" |
| 2593 | break; |
| 2594 | case 37: /* attribute ::= FROM position */ |
| 2595 | #line 614 "pikchr.y" |
| 2596 | { pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy43); } |
| 2597 | #line 2622 "pikchr.c" |
| 2598 | break; |
| 2599 | case 38: /* attribute ::= TO position */ |
| 2600 | #line 615 "pikchr.y" |
| 2601 | { pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy43); } |
| 2602 | #line 2627 "pikchr.c" |
| 2603 | break; |
| 2604 | case 39: /* attribute ::= THEN */ |
| 2605 | #line 616 "pikchr.y" |
| 2606 | { pik_then(p, &yymsp[0].minor.yy0, p->cur); } |
| 2607 | #line 2632 "pikchr.c" |
| 2608 | break; |
| 2609 | case 40: /* attribute ::= THEN optrelexpr HEADING expr */ |
| 2610 | case 42: /* attribute ::= GO optrelexpr HEADING expr */ yytestcase(yyruleno==42); |
| 2611 | #line 618 "pikchr.y" |
| 2612 | {pik_move_hdg(p,&yymsp[-2].minor.yy200,&yymsp[-1].minor.yy0,yymsp[0].minor.yy265,0,&yymsp[-3].minor.yy0);} |
| 2613 | #line 2638 "pikchr.c" |
| 2614 | break; |
| 2615 | case 41: /* attribute ::= THEN optrelexpr EDGEPT */ |
| 2616 | case 43: /* attribute ::= GO optrelexpr EDGEPT */ yytestcase(yyruleno==43); |
| 2617 | #line 619 "pikchr.y" |
| 2618 | {pik_move_hdg(p,&yymsp[-1].minor.yy200,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);} |
| 2619 | #line 2644 "pikchr.c" |
| 2620 | break; |
| 2621 | case 44: /* attribute ::= AT position */ |
| 2622 | #line 624 "pikchr.y" |
| 2623 | { pik_set_at(p,0,&yymsp[0].minor.yy43,&yymsp[-1].minor.yy0); } |
| 2624 | #line 2649 "pikchr.c" |
| 2625 | break; |
| 2626 | case 45: /* attribute ::= SAME */ |
| 2627 | #line 626 "pikchr.y" |
| 2628 | {pik_same(p,0,&yymsp[0].minor.yy0);} |
| 2629 | #line 2654 "pikchr.c" |
| 2630 | break; |
| 2631 | case 46: /* attribute ::= SAME AS object */ |
| 2632 | #line 627 "pikchr.y" |
| 2633 | {pik_same(p,yymsp[0].minor.yy38,&yymsp[-2].minor.yy0);} |
| 2634 | #line 2659 "pikchr.c" |
| 2635 | break; |
| 2636 | case 47: /* attribute ::= STRING textposition */ |
| 2637 | #line 628 "pikchr.y" |
| 2638 | {pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy196);} |
| 2639 | #line 2664 "pikchr.c" |
| 2640 | break; |
| 2641 | case 48: /* attribute ::= FIT */ |
| 2642 | #line 629 "pikchr.y" |
| 2643 | {pik_size_to_fit(p,&yymsp[0].minor.yy0,3); } |
| 2644 | #line 2669 "pikchr.c" |
| 2645 | break; |
| 2646 | case 49: /* attribute ::= BEHIND object */ |
| 2647 | #line 630 "pikchr.y" |
| 2648 | {pik_behind(p,yymsp[0].minor.yy38);} |
| 2649 | #line 2674 "pikchr.c" |
| 2650 | break; |
| 2651 | case 50: /* withclause ::= DOT_E edge AT position */ |
| 2652 | case 51: /* withclause ::= edge AT position */ yytestcase(yyruleno==51); |
| 2653 | #line 638 "pikchr.y" |
| 2654 | { pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy43,&yymsp[-1].minor.yy0); } |
| 2655 | #line 2680 "pikchr.c" |
| 2656 | break; |
| 2657 | case 52: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */ |
| 2658 | #line 642 "pikchr.y" |
| 2659 | {yylhsminor.yy0 = yymsp[0].minor.yy0;} |
| 2660 | #line 2685 "pikchr.c" |
| 2661 | yymsp[0].minor.yy0 = yylhsminor.yy0; |
| 2662 | break; |
| 2663 | case 53: /* boolproperty ::= CW */ |
| 2664 | #line 653 "pikchr.y" |
| 2665 | {p->cur->cw = 1;} |
| 2666 | #line 2691 "pikchr.c" |
| 2667 | break; |
| 2668 | case 54: /* boolproperty ::= CCW */ |
| 2669 | #line 654 "pikchr.y" |
| 2670 | {p->cur->cw = 0;} |
| 2671 | #line 2696 "pikchr.c" |
| 2672 | break; |
| 2673 | case 55: /* boolproperty ::= LARROW */ |
| 2674 | #line 655 "pikchr.y" |
| 2675 | {p->cur->larrow=1; p->cur->rarrow=0; } |
| 2676 | #line 2701 "pikchr.c" |
| 2677 | break; |
| 2678 | case 56: /* boolproperty ::= RARROW */ |
| 2679 | #line 656 "pikchr.y" |
| 2680 | {p->cur->larrow=0; p->cur->rarrow=1; } |
| 2681 | #line 2706 "pikchr.c" |
| 2682 | break; |
| 2683 | case 57: /* boolproperty ::= LRARROW */ |
| 2684 | #line 657 "pikchr.y" |
| 2685 | {p->cur->larrow=1; p->cur->rarrow=1; } |
| 2686 | #line 2711 "pikchr.c" |
| 2687 | break; |
| 2688 | case 58: /* boolproperty ::= INVIS */ |
| 2689 | #line 658 "pikchr.y" |
| 2690 | {p->cur->sw = 0.0;} |
| 2691 | #line 2716 "pikchr.c" |
| 2692 | break; |
| 2693 | case 59: /* boolproperty ::= THICK */ |
| 2694 | #line 659 "pikchr.y" |
| 2695 | {p->cur->sw *= 1.5;} |
| 2696 | #line 2721 "pikchr.c" |
| 2697 | break; |
| 2698 | case 60: /* boolproperty ::= THIN */ |
| 2699 | #line 660 "pikchr.y" |
| 2700 | {p->cur->sw *= 0.67;} |
| 2701 | #line 2726 "pikchr.c" |
| 2702 | break; |
| 2703 | case 61: /* boolproperty ::= SOLID */ |
| 2704 | #line 661 "pikchr.y" |
| 2705 | {p->cur->sw = pik_value(p,"thickness",9,0); |
| 2706 | p->cur->dotted = p->cur->dashed = 0.0;} |
| 2707 | #line 2732 "pikchr.c" |
| 2708 | break; |
| 2709 | case 62: /* textposition ::= */ |
| 2710 | #line 664 "pikchr.y" |
| 2711 | {yymsp[1].minor.yy196 = 0;} |
| 2712 | #line 2737 "pikchr.c" |
| 2713 | break; |
| 2714 | case 63: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */ |
| 2715 | #line 667 "pikchr.y" |
| 2716 | {yylhsminor.yy196 = pik_text_position(yymsp[-1].minor.yy196,&yymsp[0].minor.yy0);} |
| 2717 | #line 2742 "pikchr.c" |
| 2718 | yymsp[-1].minor.yy196 = yylhsminor.yy196; |
| 2719 | break; |
| 2720 | case 64: /* position ::= expr COMMA expr */ |
| 2721 | #line 670 "pikchr.y" |
| 2722 | {yylhsminor.yy43.x=yymsp[-2].minor.yy265; yylhsminor.yy43.y=yymsp[0].minor.yy265;} |
| 2723 | #line 2748 "pikchr.c" |
| 2724 | yymsp[-2].minor.yy43 = yylhsminor.yy43; |
| 2725 | break; |
| 2726 | case 65: /* position ::= place PLUS expr COMMA expr */ |
| 2727 | #line 672 "pikchr.y" |
| 2728 | {yylhsminor.yy43.x=yymsp[-4].minor.yy43.x+yymsp[-2].minor.yy265; yylhsminor.yy43.y=yymsp[-4].minor.yy43.y+yymsp[0].minor.yy265;} |
| 2729 | #line 2754 "pikchr.c" |
| 2730 | yymsp[-4].minor.yy43 = yylhsminor.yy43; |
| 2731 | break; |
| 2732 | case 66: /* position ::= place MINUS expr COMMA expr */ |
| 2733 | #line 673 "pikchr.y" |
| 2734 | {yylhsminor.yy43.x=yymsp[-4].minor.yy43.x-yymsp[-2].minor.yy265; yylhsminor.yy43.y=yymsp[-4].minor.yy43.y-yymsp[0].minor.yy265;} |
| 2735 | #line 2760 "pikchr.c" |
| 2736 | yymsp[-4].minor.yy43 = yylhsminor.yy43; |
| 2737 | break; |
| 2738 | case 67: /* position ::= place PLUS LP expr COMMA expr RP */ |
| 2739 | #line 675 "pikchr.y" |
| 2740 | {yylhsminor.yy43.x=yymsp[-6].minor.yy43.x+yymsp[-3].minor.yy265; yylhsminor.yy43.y=yymsp[-6].minor.yy43.y+yymsp[-1].minor.yy265;} |
| 2741 | #line 2766 "pikchr.c" |
| 2742 | yymsp[-6].minor.yy43 = yylhsminor.yy43; |
| 2743 | break; |
| 2744 | case 68: /* position ::= place MINUS LP expr COMMA expr RP */ |
| 2745 | #line 677 "pikchr.y" |
| 2746 | {yylhsminor.yy43.x=yymsp[-6].minor.yy43.x-yymsp[-3].minor.yy265; yylhsminor.yy43.y=yymsp[-6].minor.yy43.y-yymsp[-1].minor.yy265;} |
| 2747 | #line 2772 "pikchr.c" |
| 2748 | yymsp[-6].minor.yy43 = yylhsminor.yy43; |
| 2749 | break; |
| 2750 | case 69: /* position ::= LP position COMMA position RP */ |
| 2751 | #line 678 "pikchr.y" |
| 2752 | {yymsp[-4].minor.yy43.x=yymsp[-3].minor.yy43.x; yymsp[-4].minor.yy43.y=yymsp[-1].minor.yy43.y;} |
| 2753 | #line 2778 "pikchr.c" |
| 2754 | break; |
| 2755 | case 70: /* position ::= LP position RP */ |
| 2756 | #line 679 "pikchr.y" |
| 2757 | {yymsp[-2].minor.yy43=yymsp[-1].minor.yy43;} |
| 2758 | #line 2783 "pikchr.c" |
| 2759 | break; |
| 2760 | case 71: /* position ::= expr between position AND position */ |
| 2761 | #line 681 "pikchr.y" |
| 2762 | {yylhsminor.yy43 = pik_position_between(yymsp[-4].minor.yy265,yymsp[-2].minor.yy43,yymsp[0].minor.yy43);} |
| 2763 | #line 2788 "pikchr.c" |
| 2764 | yymsp[-4].minor.yy43 = yylhsminor.yy43; |
| 2765 | break; |
| 2766 | case 72: /* position ::= expr LT position COMMA position GT */ |
| 2767 | #line 683 "pikchr.y" |
| 2768 | {yylhsminor.yy43 = pik_position_between(yymsp[-5].minor.yy265,yymsp[-3].minor.yy43,yymsp[-1].minor.yy43);} |
| 2769 | #line 2794 "pikchr.c" |
| 2770 | yymsp[-5].minor.yy43 = yylhsminor.yy43; |
| 2771 | break; |
| 2772 | case 73: /* position ::= expr ABOVE position */ |
| 2773 | #line 684 "pikchr.y" |
| 2774 | {yylhsminor.yy43=yymsp[0].minor.yy43; yylhsminor.yy43.y += yymsp[-2].minor.yy265;} |
| 2775 | #line 2800 "pikchr.c" |
| 2776 | yymsp[-2].minor.yy43 = yylhsminor.yy43; |
| 2777 | break; |
| 2778 | case 74: /* position ::= expr BELOW position */ |
| 2779 | #line 685 "pikchr.y" |
| 2780 | {yylhsminor.yy43=yymsp[0].minor.yy43; yylhsminor.yy43.y -= yymsp[-2].minor.yy265;} |
| 2781 | #line 2806 "pikchr.c" |
| 2782 | yymsp[-2].minor.yy43 = yylhsminor.yy43; |
| 2783 | break; |
| 2784 | case 75: /* position ::= expr LEFT OF position */ |
| 2785 | #line 686 "pikchr.y" |
| 2786 | {yylhsminor.yy43=yymsp[0].minor.yy43; yylhsminor.yy43.x -= yymsp[-3].minor.yy265;} |
| 2787 | #line 2812 "pikchr.c" |
| 2788 | yymsp[-3].minor.yy43 = yylhsminor.yy43; |
| 2789 | break; |
| 2790 | case 76: /* position ::= expr RIGHT OF position */ |
| 2791 | #line 687 "pikchr.y" |
| 2792 | {yylhsminor.yy43=yymsp[0].minor.yy43; yylhsminor.yy43.x += yymsp[-3].minor.yy265;} |
| 2793 | #line 2818 "pikchr.c" |
| 2794 | yymsp[-3].minor.yy43 = yylhsminor.yy43; |
| 2795 | break; |
| 2796 | case 77: /* position ::= expr ON HEADING EDGEPT OF position */ |
| 2797 | #line 689 "pikchr.y" |
| 2798 | {yylhsminor.yy43 = pik_position_at_hdg(yymsp[-5].minor.yy265,&yymsp[-2].minor.yy0,yymsp[0].minor.yy43);} |
| 2799 | #line 2824 "pikchr.c" |
| 2800 | yymsp[-5].minor.yy43 = yylhsminor.yy43; |
| 2801 | break; |
| 2802 | case 78: /* position ::= expr HEADING EDGEPT OF position */ |
| 2803 | #line 691 "pikchr.y" |
| 2804 | {yylhsminor.yy43 = pik_position_at_hdg(yymsp[-4].minor.yy265,&yymsp[-2].minor.yy0,yymsp[0].minor.yy43);} |
| 2805 | #line 2830 "pikchr.c" |
| 2806 | yymsp[-4].minor.yy43 = yylhsminor.yy43; |
| 2807 | break; |
| 2808 | case 79: /* position ::= expr EDGEPT OF position */ |
| 2809 | #line 693 "pikchr.y" |
| 2810 | {yylhsminor.yy43 = pik_position_at_hdg(yymsp[-3].minor.yy265,&yymsp[-2].minor.yy0,yymsp[0].minor.yy43);} |
| 2811 | #line 2836 "pikchr.c" |
| 2812 | yymsp[-3].minor.yy43 = yylhsminor.yy43; |
| 2813 | break; |
| 2814 | case 80: /* position ::= expr ON HEADING expr FROM position */ |
| 2815 | #line 695 "pikchr.y" |
| 2816 | {yylhsminor.yy43 = pik_position_at_angle(yymsp[-5].minor.yy265,yymsp[-2].minor.yy265,yymsp[0].minor.yy43);} |
| 2817 | #line 2842 "pikchr.c" |
| 2818 | yymsp[-5].minor.yy43 = yylhsminor.yy43; |
| 2819 | break; |
| 2820 | case 81: /* position ::= expr HEADING expr FROM position */ |
| 2821 | #line 697 "pikchr.y" |
| 2822 | {yylhsminor.yy43 = pik_position_at_angle(yymsp[-4].minor.yy265,yymsp[-2].minor.yy265,yymsp[0].minor.yy43);} |
| 2823 | #line 2848 "pikchr.c" |
| 2824 | yymsp[-4].minor.yy43 = yylhsminor.yy43; |
| 2825 | break; |
| 2826 | case 82: /* place ::= edge OF object */ |
| 2827 | #line 709 "pikchr.y" |
| 2828 | {yylhsminor.yy43 = pik_place_of_elem(p,yymsp[0].minor.yy38,&yymsp[-2].minor.yy0);} |
| 2829 | #line 2854 "pikchr.c" |
| 2830 | yymsp[-2].minor.yy43 = yylhsminor.yy43; |
| 2831 | break; |
| 2832 | case 83: /* place2 ::= object */ |
| 2833 | #line 710 "pikchr.y" |
| 2834 | {yylhsminor.yy43 = pik_place_of_elem(p,yymsp[0].minor.yy38,0);} |
| 2835 | #line 2860 "pikchr.c" |
| 2836 | yymsp[0].minor.yy43 = yylhsminor.yy43; |
| 2837 | break; |
| 2838 | case 84: /* place2 ::= object DOT_E edge */ |
| 2839 | #line 711 "pikchr.y" |
| 2840 | {yylhsminor.yy43 = pik_place_of_elem(p,yymsp[-2].minor.yy38,&yymsp[0].minor.yy0);} |
| 2841 | #line 2866 "pikchr.c" |
| 2842 | yymsp[-2].minor.yy43 = yylhsminor.yy43; |
| 2843 | break; |
| 2844 | case 85: /* place2 ::= NTH VERTEX OF object */ |
| 2845 | #line 712 "pikchr.y" |
| 2846 | {yylhsminor.yy43 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy38);} |
| 2847 | #line 2872 "pikchr.c" |
| 2848 | yymsp[-3].minor.yy43 = yylhsminor.yy43; |
| 2849 | break; |
| 2850 | case 86: /* object ::= nth */ |
| 2851 | #line 724 "pikchr.y" |
| 2852 | {yylhsminor.yy38 = pik_find_nth(p,0,&yymsp[0].minor.yy0);} |
| 2853 | #line 2878 "pikchr.c" |
| 2854 | yymsp[0].minor.yy38 = yylhsminor.yy38; |
| 2855 | break; |
| 2856 | case 87: /* object ::= nth OF|IN object */ |
| 2857 | #line 725 "pikchr.y" |
| 2858 | {yylhsminor.yy38 = pik_find_nth(p,yymsp[0].minor.yy38,&yymsp[-2].minor.yy0);} |
| 2859 | #line 2884 "pikchr.c" |
| 2860 | yymsp[-2].minor.yy38 = yylhsminor.yy38; |
| 2861 | break; |
| 2862 | case 88: /* objectname ::= PLACENAME */ |
| 2863 | #line 727 "pikchr.y" |
| 2864 | {yylhsminor.yy38 = pik_find_byname(p,0,&yymsp[0].minor.yy0);} |
| 2865 | #line 2890 "pikchr.c" |
| 2866 | yymsp[0].minor.yy38 = yylhsminor.yy38; |
| 2867 | break; |
| 2868 | case 89: /* objectname ::= objectname DOT_U PLACENAME */ |
| 2869 | #line 729 "pikchr.y" |
| 2870 | {yylhsminor.yy38 = pik_find_byname(p,yymsp[-2].minor.yy38,&yymsp[0].minor.yy0);} |
| 2871 | #line 2896 "pikchr.c" |
| 2872 | yymsp[-2].minor.yy38 = yylhsminor.yy38; |
| 2873 | break; |
| 2874 | case 90: /* nth ::= NTH CLASSNAME */ |
| 2875 | #line 731 "pikchr.y" |
| 2876 | {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); } |
| 2877 | #line 2902 "pikchr.c" |
| 2878 | yymsp[-1].minor.yy0 = yylhsminor.yy0; |
| 2879 | break; |
| 2880 | case 91: /* nth ::= NTH LAST CLASSNAME */ |
| 2881 | #line 732 "pikchr.y" |
| 2882 | {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); } |
| 2883 | #line 2908 "pikchr.c" |
| 2884 | yymsp[-2].minor.yy0 = yylhsminor.yy0; |
| 2885 | break; |
| 2886 | case 92: /* nth ::= LAST CLASSNAME */ |
| 2887 | #line 733 "pikchr.y" |
| 2888 | {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;} |
| 2889 | #line 2914 "pikchr.c" |
| 2890 | break; |
| 2891 | case 93: /* nth ::= LAST */ |
| 2892 | #line 734 "pikchr.y" |
| 2893 | {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;} |
| 2894 | #line 2919 "pikchr.c" |
| 2895 | yymsp[0].minor.yy0 = yylhsminor.yy0; |
| 2896 | break; |
| 2897 | case 94: /* nth ::= NTH LB RB */ |
| 2898 | #line 735 "pikchr.y" |
| 2899 | {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);} |
| 2900 | #line 2925 "pikchr.c" |
| 2901 | yymsp[-2].minor.yy0 = yylhsminor.yy0; |
| 2902 | break; |
| 2903 | case 95: /* nth ::= NTH LAST LB RB */ |
| 2904 | #line 736 "pikchr.y" |
| 2905 | {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);} |
| 2906 | #line 2931 "pikchr.c" |
| 2907 | yymsp[-3].minor.yy0 = yylhsminor.yy0; |
| 2908 | break; |
| 2909 | case 96: /* nth ::= LAST LB RB */ |
| 2910 | #line 737 "pikchr.y" |
| 2911 | {yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; } |
| 2912 | #line 2937 "pikchr.c" |
| 2913 | break; |
| 2914 | case 97: /* expr ::= expr PLUS expr */ |
| 2915 | #line 739 "pikchr.y" |
| 2916 | {yylhsminor.yy265=yymsp[-2].minor.yy265+yymsp[0].minor.yy265;} |
| 2917 | #line 2942 "pikchr.c" |
| 2918 | yymsp[-2].minor.yy265 = yylhsminor.yy265; |
| 2919 | break; |
| 2920 | case 98: /* expr ::= expr MINUS expr */ |
| 2921 | #line 740 "pikchr.y" |
| 2922 | {yylhsminor.yy265=yymsp[-2].minor.yy265-yymsp[0].minor.yy265;} |
| 2923 | #line 2948 "pikchr.c" |
| 2924 | yymsp[-2].minor.yy265 = yylhsminor.yy265; |
| 2925 | break; |
| 2926 | case 99: /* expr ::= expr STAR expr */ |
| 2927 | #line 741 "pikchr.y" |
| 2928 | {yylhsminor.yy265=yymsp[-2].minor.yy265*yymsp[0].minor.yy265;} |
| 2929 | #line 2954 "pikchr.c" |
| 2930 | yymsp[-2].minor.yy265 = yylhsminor.yy265; |
| 2931 | break; |
| 2932 | case 100: /* expr ::= expr SLASH expr */ |
| 2933 | #line 742 "pikchr.y" |
| 2934 | { |
| 2935 | if( yymsp[0].minor.yy265==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy265 = 0.0; } |
| 2936 | else{ yylhsminor.yy265 = yymsp[-2].minor.yy265/yymsp[0].minor.yy265; } |
| 2937 | } |
| 2938 | #line 2963 "pikchr.c" |
| 2939 | yymsp[-2].minor.yy265 = yylhsminor.yy265; |
| 2940 | break; |
| 2941 | case 101: /* expr ::= MINUS expr */ |
| 2942 | #line 746 "pikchr.y" |
| 2943 | {yymsp[-1].minor.yy265=-yymsp[0].minor.yy265;} |
| 2944 | #line 2969 "pikchr.c" |
| 2945 | break; |
| 2946 | case 102: /* expr ::= PLUS expr */ |
| 2947 | #line 747 "pikchr.y" |
| 2948 | {yymsp[-1].minor.yy265=yymsp[0].minor.yy265;} |
| 2949 | #line 2974 "pikchr.c" |
| 2950 | break; |
| 2951 | case 103: /* expr ::= LP expr RP */ |
| 2952 | #line 748 "pikchr.y" |
| 2953 | {yymsp[-2].minor.yy265=yymsp[-1].minor.yy265;} |
| 2954 | #line 2979 "pikchr.c" |
| 2955 | break; |
| 2956 | case 104: /* expr ::= LP FILL|COLOR|THICKNESS RP */ |
| 2957 | #line 749 "pikchr.y" |
| 2958 | {yymsp[-2].minor.yy265=pik_get_var(p,&yymsp[-1].minor.yy0);} |
| 2959 | #line 2984 "pikchr.c" |
| 2960 | break; |
| 2961 | case 105: /* expr ::= NUMBER */ |
| 2962 | #line 750 "pikchr.y" |
| 2963 | {yylhsminor.yy265=pik_atof(&yymsp[0].minor.yy0);} |
| 2964 | #line 2989 "pikchr.c" |
| 2965 | yymsp[0].minor.yy265 = yylhsminor.yy265; |
| 2966 | break; |
| 2967 | case 106: /* expr ::= ID */ |
| 2968 | #line 751 "pikchr.y" |
| 2969 | {yylhsminor.yy265=pik_get_var(p,&yymsp[0].minor.yy0);} |
| 2970 | #line 2995 "pikchr.c" |
| 2971 | yymsp[0].minor.yy265 = yylhsminor.yy265; |
| 2972 | break; |
| 2973 | case 107: /* expr ::= FUNC1 LP expr RP */ |
| 2974 | #line 752 "pikchr.y" |
| 2975 | {yylhsminor.yy265 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy265,0.0);} |
| 2976 | #line 3001 "pikchr.c" |
| 2977 | yymsp[-3].minor.yy265 = yylhsminor.yy265; |
| 2978 | break; |
| 2979 | case 108: /* expr ::= FUNC2 LP expr COMMA expr RP */ |
| 2980 | #line 753 "pikchr.y" |
| 2981 | {yylhsminor.yy265 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy265,yymsp[-1].minor.yy265);} |
| 2982 | #line 3007 "pikchr.c" |
| 2983 | yymsp[-5].minor.yy265 = yylhsminor.yy265; |
| 2984 | break; |
| 2985 | case 109: /* expr ::= DIST LP position COMMA position RP */ |
| 2986 | #line 754 "pikchr.y" |
| 2987 | {yymsp[-5].minor.yy265 = pik_dist(&yymsp[-3].minor.yy43,&yymsp[-1].minor.yy43);} |
| 2988 | #line 3013 "pikchr.c" |
| 2989 | break; |
| 2990 | case 110: /* expr ::= place2 DOT_XY X */ |
| 2991 | #line 755 "pikchr.y" |
| 2992 | {yylhsminor.yy265 = yymsp[-2].minor.yy43.x;} |
| 2993 | #line 3018 "pikchr.c" |
| 2994 | yymsp[-2].minor.yy265 = yylhsminor.yy265; |
| 2995 | break; |
| 2996 | case 111: /* expr ::= place2 DOT_XY Y */ |
| 2997 | #line 756 "pikchr.y" |
| 2998 | {yylhsminor.yy265 = yymsp[-2].minor.yy43.y;} |
| 2999 | #line 3024 "pikchr.c" |
| 3000 | yymsp[-2].minor.yy265 = yylhsminor.yy265; |
| 3001 | break; |
| 3002 | case 112: /* expr ::= object DOT_L numproperty */ |
| 3003 | case 113: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==113); |
| 3004 | case 114: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==114); |
| 3005 | #line 757 "pikchr.y" |
| 3006 | {yylhsminor.yy265=pik_property_of(yymsp[-2].minor.yy38,&yymsp[0].minor.yy0);} |
| 3007 | #line 3032 "pikchr.c" |
| 3008 | yymsp[-2].minor.yy265 = yylhsminor.yy265; |
| 3009 | break; |
| 3010 | default: |
| 3011 | /* (115) lvalue ::= ID */ yytestcase(yyruleno==115); |
| 3012 | /* (116) lvalue ::= FILL */ yytestcase(yyruleno==116); |
| @@ -3105,19 +3106,19 @@ | |
| 3105 | ){ |
| 3106 | pik_parserARG_FETCH |
| 3107 | pik_parserCTX_FETCH |
| 3108 | #define TOKEN yyminor |
| 3109 | /************ Begin %syntax_error code ****************************************/ |
| 3110 | #line 518 "pikchr.y" |
| 3111 | |
| 3112 | if( TOKEN.z && TOKEN.z[0] ){ |
| 3113 | pik_error(p, &TOKEN, "syntax error"); |
| 3114 | }else{ |
| 3115 | pik_error(p, 0, "syntax error"); |
| 3116 | } |
| 3117 | UNUSED_PARAMETER(yymajor); |
| 3118 | #line 3143 "pikchr.c" |
| 3119 | /************ End %syntax_error code ******************************************/ |
| 3120 | pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */ |
| 3121 | pik_parserCTX_STORE |
| 3122 | } |
| 3123 | |
| @@ -3346,11 +3347,11 @@ | |
| 3346 | #else |
| 3347 | (void)iToken; |
| 3348 | return 0; |
| 3349 | #endif |
| 3350 | } |
| 3351 | #line 762 "pikchr.y" |
| 3352 | |
| 3353 | |
| 3354 | |
| 3355 | /* Chart of the 148 official CSS color names with their |
| 3356 | ** corresponding RGB values thru Color Module Level 4: |
| @@ -4592,11 +4593,11 @@ | |
| 4592 | r = (127*r)/mx; |
| 4593 | g = (127*g)/mx; |
| 4594 | b = (127*b)/mx; |
| 4595 | } |
| 4596 | }else{ |
| 4597 | if( mn<128 ){ |
| 4598 | r = 127 + ((r-mn)*128)/(mx-mn); |
| 4599 | g = 127 + ((g-mn)*128)/(mx-mn); |
| 4600 | b = 127 + ((b-mn)*128)/(mx-mn); |
| 4601 | } |
| 4602 | } |
| @@ -4637,11 +4638,15 @@ | |
| 4637 | } |
| 4638 | static void pik_append_clr(Pik *p,const char *z1,PNum v,const char *z2,int bg){ |
| 4639 | char buf[200]; |
| 4640 | int x = (int)v; |
| 4641 | int r, g, b; |
| 4642 | if( p->mFlags & PIKCHR_DARK_MODE ) x = pik_color_to_dark_mode(x,bg); |
| 4643 | r = (x>>16) & 0xff; |
| 4644 | g = (x>>8) & 0xff; |
| 4645 | b = x & 0xff; |
| 4646 | snprintf(buf, sizeof(buf)-1, "%srgb(%d,%d,%d)%s", z1, r, g, b, z2); |
| 4647 | buf[sizeof(buf)-1] = 0; |
| @@ -6877,18 +6882,26 @@ | |
| 6877 | PNum thickness; /* Stroke width */ |
| 6878 | PNum margin; /* Extra bounding box margin */ |
| 6879 | PNum w, h; /* Drawing width and height */ |
| 6880 | PNum wArrow; |
| 6881 | PNum pikScale; /* Value of the "scale" variable */ |
| 6882 | |
| 6883 | /* Set up rendering parameters */ |
| 6884 | pik_compute_layout_settings(p); |
| 6885 | thickness = pik_value(p,"thickness",9,0); |
| 6886 | if( thickness<=0.01 ) thickness = 0.01; |
| 6887 | margin = pik_value(p,"margin",6,0); |
| 6888 | margin += thickness; |
| 6889 | wArrow = p->wArrow*thickness; |
| 6890 | |
| 6891 | /* Compute a bounding box over all objects so that we can know |
| 6892 | ** how big to declare the SVG canvas */ |
| 6893 | pik_bbox_init(&p->bbox); |
| 6894 | pik_bbox_add_elist(p, pList, wArrow); |
| @@ -7839,6 +7852,6 @@ | |
| 7839 | |
| 7840 | |
| 7841 | #endif /* PIKCHR_TCL */ |
| 7842 | |
| 7843 | |
| 7844 | #line 7869 "pikchr.c" |
| 7845 |
| --- src/pikchr.c | |
| +++ src/pikchr.c | |
| @@ -363,10 +363,11 @@ | |
| 363 | char bLayoutVars; /* True if cache is valid */ |
| 364 | char thenFlag; /* True if "then" seen */ |
| 365 | char samePath; /* aTPath copied by "same" */ |
| 366 | const char *zClass; /* Class name for the <svg> */ |
| 367 | int wSVG, hSVG; /* Width and height of the <svg> */ |
| 368 | int fgcolor; /* fgcolor value, or -1 for none */ |
| 369 | /* Paths for lines are constructed here first, then transferred into |
| 370 | ** the PObj object at the end: */ |
| 371 | int nTPath; /* Number of entries on aTPath[] */ |
| 372 | int mTPath; /* For last entry, 1: x set, 2: y set */ |
| 373 | PPoint aTPath[1000]; /* Path under construction */ |
| @@ -472,11 +473,11 @@ | |
| 473 | static PObj *pik_position_assert(Pik*,PPoint*,PToken*,PPoint*); |
| 474 | static PNum pik_dist(PPoint*,PPoint*); |
| 475 | static void pik_add_macro(Pik*,PToken *pId,PToken *pCode); |
| 476 | |
| 477 | |
| 478 | #line 504 "pikchr.c" |
| 479 | /**************** End of %include directives **********************************/ |
| 480 | /* These constants specify the various numeric values for terminal symbols. |
| 481 | ***************** Begin token definitions *************************************/ |
| 482 | #ifndef T_ID |
| 483 | #define T_ID 1 |
| @@ -1689,22 +1690,22 @@ | |
| 1690 | ** inside the C code. |
| 1691 | */ |
| 1692 | /********* Begin destructor definitions ***************************************/ |
| 1693 | case 98: /* statement_list */ |
| 1694 | { |
| 1695 | #line 493 "pikchr.y" |
| 1696 | pik_elist_free(p,(yypminor->yy119)); |
| 1697 | #line 1722 "pikchr.c" |
| 1698 | } |
| 1699 | break; |
| 1700 | case 99: /* statement */ |
| 1701 | case 100: /* unnamed_statement */ |
| 1702 | case 101: /* basetype */ |
| 1703 | { |
| 1704 | #line 495 "pikchr.y" |
| 1705 | pik_elem_free(p,(yypminor->yy38)); |
| 1706 | #line 1731 "pikchr.c" |
| 1707 | } |
| 1708 | break; |
| 1709 | /********* End destructor definitions *****************************************/ |
| 1710 | default: break; /* If no destructor action specified: do nothing */ |
| 1711 | } |
| @@ -1918,14 +1919,14 @@ | |
| 1919 | #endif |
| 1920 | while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser); |
| 1921 | /* Here code is inserted which will execute if the parser |
| 1922 | ** stack every overflows */ |
| 1923 | /******** Begin %stack_overflow code ******************************************/ |
| 1924 | #line 527 "pikchr.y" |
| 1925 | |
| 1926 | pik_error(p, 0, "parser stack overflow"); |
| 1927 | #line 1952 "pikchr.c" |
| 1928 | /******** End %stack_overflow code ********************************************/ |
| 1929 | pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */ |
| 1930 | pik_parserCTX_STORE |
| 1931 | } |
| 1932 | |
| @@ -2399,614 +2400,614 @@ | |
| 2400 | ** break; |
| 2401 | */ |
| 2402 | /********** Begin reduce actions **********************************************/ |
| 2403 | YYMINORTYPE yylhsminor; |
| 2404 | case 0: /* document ::= statement_list */ |
| 2405 | #line 531 "pikchr.y" |
| 2406 | {pik_render(p,yymsp[0].minor.yy119);} |
| 2407 | #line 2432 "pikchr.c" |
| 2408 | break; |
| 2409 | case 1: /* statement_list ::= statement */ |
| 2410 | #line 534 "pikchr.y" |
| 2411 | { yylhsminor.yy119 = pik_elist_append(p,0,yymsp[0].minor.yy38); } |
| 2412 | #line 2437 "pikchr.c" |
| 2413 | yymsp[0].minor.yy119 = yylhsminor.yy119; |
| 2414 | break; |
| 2415 | case 2: /* statement_list ::= statement_list EOL statement */ |
| 2416 | #line 536 "pikchr.y" |
| 2417 | { yylhsminor.yy119 = pik_elist_append(p,yymsp[-2].minor.yy119,yymsp[0].minor.yy38); } |
| 2418 | #line 2443 "pikchr.c" |
| 2419 | yymsp[-2].minor.yy119 = yylhsminor.yy119; |
| 2420 | break; |
| 2421 | case 3: /* statement ::= */ |
| 2422 | #line 539 "pikchr.y" |
| 2423 | { yymsp[1].minor.yy38 = 0; } |
| 2424 | #line 2449 "pikchr.c" |
| 2425 | break; |
| 2426 | case 4: /* statement ::= direction */ |
| 2427 | #line 540 "pikchr.y" |
| 2428 | { pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy38=0; } |
| 2429 | #line 2454 "pikchr.c" |
| 2430 | yymsp[0].minor.yy38 = yylhsminor.yy38; |
| 2431 | break; |
| 2432 | case 5: /* statement ::= lvalue ASSIGN rvalue */ |
| 2433 | #line 541 "pikchr.y" |
| 2434 | {pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy265,&yymsp[-1].minor.yy0); yylhsminor.yy38=0;} |
| 2435 | #line 2460 "pikchr.c" |
| 2436 | yymsp[-2].minor.yy38 = yylhsminor.yy38; |
| 2437 | break; |
| 2438 | case 6: /* statement ::= PLACENAME COLON unnamed_statement */ |
| 2439 | #line 543 "pikchr.y" |
| 2440 | { yylhsminor.yy38 = yymsp[0].minor.yy38; pik_elem_setname(p,yymsp[0].minor.yy38,&yymsp[-2].minor.yy0); } |
| 2441 | #line 2466 "pikchr.c" |
| 2442 | yymsp[-2].minor.yy38 = yylhsminor.yy38; |
| 2443 | break; |
| 2444 | case 7: /* statement ::= PLACENAME COLON position */ |
| 2445 | #line 545 "pikchr.y" |
| 2446 | { yylhsminor.yy38 = pik_elem_new(p,0,0,0); |
| 2447 | if(yylhsminor.yy38){ yylhsminor.yy38->ptAt = yymsp[0].minor.yy43; pik_elem_setname(p,yylhsminor.yy38,&yymsp[-2].minor.yy0); }} |
| 2448 | #line 2473 "pikchr.c" |
| 2449 | yymsp[-2].minor.yy38 = yylhsminor.yy38; |
| 2450 | break; |
| 2451 | case 8: /* statement ::= unnamed_statement */ |
| 2452 | #line 547 "pikchr.y" |
| 2453 | {yylhsminor.yy38 = yymsp[0].minor.yy38;} |
| 2454 | #line 2479 "pikchr.c" |
| 2455 | yymsp[0].minor.yy38 = yylhsminor.yy38; |
| 2456 | break; |
| 2457 | case 9: /* statement ::= print prlist */ |
| 2458 | #line 548 "pikchr.y" |
| 2459 | {pik_append(p,"<br>\n",5); yymsp[-1].minor.yy38=0;} |
| 2460 | #line 2485 "pikchr.c" |
| 2461 | break; |
| 2462 | case 10: /* statement ::= ASSERT LP expr EQ expr RP */ |
| 2463 | #line 553 "pikchr.y" |
| 2464 | {yymsp[-5].minor.yy38=pik_assert(p,yymsp[-3].minor.yy265,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy265);} |
| 2465 | #line 2490 "pikchr.c" |
| 2466 | break; |
| 2467 | case 11: /* statement ::= ASSERT LP position EQ position RP */ |
| 2468 | #line 555 "pikchr.y" |
| 2469 | {yymsp[-5].minor.yy38=pik_position_assert(p,&yymsp[-3].minor.yy43,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy43);} |
| 2470 | #line 2495 "pikchr.c" |
| 2471 | break; |
| 2472 | case 12: /* statement ::= DEFINE ID CODEBLOCK */ |
| 2473 | #line 556 "pikchr.y" |
| 2474 | {yymsp[-2].minor.yy38=0; pik_add_macro(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);} |
| 2475 | #line 2500 "pikchr.c" |
| 2476 | break; |
| 2477 | case 13: /* rvalue ::= PLACENAME */ |
| 2478 | #line 567 "pikchr.y" |
| 2479 | {yylhsminor.yy265 = pik_lookup_color(p,&yymsp[0].minor.yy0);} |
| 2480 | #line 2505 "pikchr.c" |
| 2481 | yymsp[0].minor.yy265 = yylhsminor.yy265; |
| 2482 | break; |
| 2483 | case 14: /* pritem ::= FILL */ |
| 2484 | case 15: /* pritem ::= COLOR */ yytestcase(yyruleno==15); |
| 2485 | case 16: /* pritem ::= THICKNESS */ yytestcase(yyruleno==16); |
| 2486 | #line 572 "pikchr.y" |
| 2487 | {pik_append_num(p,"",pik_value(p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.n,0));} |
| 2488 | #line 2513 "pikchr.c" |
| 2489 | break; |
| 2490 | case 17: /* pritem ::= rvalue */ |
| 2491 | #line 575 "pikchr.y" |
| 2492 | {pik_append_num(p,"",yymsp[0].minor.yy265);} |
| 2493 | #line 2518 "pikchr.c" |
| 2494 | break; |
| 2495 | case 18: /* pritem ::= STRING */ |
| 2496 | #line 576 "pikchr.y" |
| 2497 | {pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);} |
| 2498 | #line 2523 "pikchr.c" |
| 2499 | break; |
| 2500 | case 19: /* prsep ::= COMMA */ |
| 2501 | #line 577 "pikchr.y" |
| 2502 | {pik_append(p, " ", 1);} |
| 2503 | #line 2528 "pikchr.c" |
| 2504 | break; |
| 2505 | case 20: /* unnamed_statement ::= basetype attribute_list */ |
| 2506 | #line 580 "pikchr.y" |
| 2507 | {yylhsminor.yy38 = yymsp[-1].minor.yy38; pik_after_adding_attributes(p,yylhsminor.yy38);} |
| 2508 | #line 2533 "pikchr.c" |
| 2509 | yymsp[-1].minor.yy38 = yylhsminor.yy38; |
| 2510 | break; |
| 2511 | case 21: /* basetype ::= CLASSNAME */ |
| 2512 | #line 582 "pikchr.y" |
| 2513 | {yylhsminor.yy38 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); } |
| 2514 | #line 2539 "pikchr.c" |
| 2515 | yymsp[0].minor.yy38 = yylhsminor.yy38; |
| 2516 | break; |
| 2517 | case 22: /* basetype ::= STRING textposition */ |
| 2518 | #line 584 "pikchr.y" |
| 2519 | {yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy196; yylhsminor.yy38 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); } |
| 2520 | #line 2545 "pikchr.c" |
| 2521 | yymsp[-1].minor.yy38 = yylhsminor.yy38; |
| 2522 | break; |
| 2523 | case 23: /* basetype ::= LB savelist statement_list RB */ |
| 2524 | #line 586 "pikchr.y" |
| 2525 | { p->list = yymsp[-2].minor.yy119; yymsp[-3].minor.yy38 = pik_elem_new(p,0,0,yymsp[-1].minor.yy119); if(yymsp[-3].minor.yy38) yymsp[-3].minor.yy38->errTok = yymsp[0].minor.yy0; } |
| 2526 | #line 2551 "pikchr.c" |
| 2527 | break; |
| 2528 | case 24: /* savelist ::= */ |
| 2529 | #line 591 "pikchr.y" |
| 2530 | {yymsp[1].minor.yy119 = p->list; p->list = 0;} |
| 2531 | #line 2556 "pikchr.c" |
| 2532 | break; |
| 2533 | case 25: /* relexpr ::= expr */ |
| 2534 | #line 598 "pikchr.y" |
| 2535 | {yylhsminor.yy200.rAbs = yymsp[0].minor.yy265; yylhsminor.yy200.rRel = 0;} |
| 2536 | #line 2561 "pikchr.c" |
| 2537 | yymsp[0].minor.yy200 = yylhsminor.yy200; |
| 2538 | break; |
| 2539 | case 26: /* relexpr ::= expr PERCENT */ |
| 2540 | #line 599 "pikchr.y" |
| 2541 | {yylhsminor.yy200.rAbs = 0; yylhsminor.yy200.rRel = yymsp[-1].minor.yy265/100;} |
| 2542 | #line 2567 "pikchr.c" |
| 2543 | yymsp[-1].minor.yy200 = yylhsminor.yy200; |
| 2544 | break; |
| 2545 | case 27: /* optrelexpr ::= */ |
| 2546 | #line 601 "pikchr.y" |
| 2547 | {yymsp[1].minor.yy200.rAbs = 0; yymsp[1].minor.yy200.rRel = 1.0;} |
| 2548 | #line 2573 "pikchr.c" |
| 2549 | break; |
| 2550 | case 28: /* attribute_list ::= relexpr alist */ |
| 2551 | #line 603 "pikchr.y" |
| 2552 | {pik_add_direction(p,0,&yymsp[-1].minor.yy200);} |
| 2553 | #line 2578 "pikchr.c" |
| 2554 | break; |
| 2555 | case 29: /* attribute ::= numproperty relexpr */ |
| 2556 | #line 607 "pikchr.y" |
| 2557 | { pik_set_numprop(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy200); } |
| 2558 | #line 2583 "pikchr.c" |
| 2559 | break; |
| 2560 | case 30: /* attribute ::= dashproperty expr */ |
| 2561 | #line 608 "pikchr.y" |
| 2562 | { pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy265); } |
| 2563 | #line 2588 "pikchr.c" |
| 2564 | break; |
| 2565 | case 31: /* attribute ::= dashproperty */ |
| 2566 | #line 609 "pikchr.y" |
| 2567 | { pik_set_dashed(p,&yymsp[0].minor.yy0,0); } |
| 2568 | #line 2593 "pikchr.c" |
| 2569 | break; |
| 2570 | case 32: /* attribute ::= colorproperty rvalue */ |
| 2571 | #line 610 "pikchr.y" |
| 2572 | { pik_set_clrprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy265); } |
| 2573 | #line 2598 "pikchr.c" |
| 2574 | break; |
| 2575 | case 33: /* attribute ::= go direction optrelexpr */ |
| 2576 | #line 611 "pikchr.y" |
| 2577 | { pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy200);} |
| 2578 | #line 2603 "pikchr.c" |
| 2579 | break; |
| 2580 | case 34: /* attribute ::= go direction even position */ |
| 2581 | #line 612 "pikchr.y" |
| 2582 | {pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy43);} |
| 2583 | #line 2608 "pikchr.c" |
| 2584 | break; |
| 2585 | case 35: /* attribute ::= CLOSE */ |
| 2586 | #line 613 "pikchr.y" |
| 2587 | { pik_close_path(p,&yymsp[0].minor.yy0); } |
| 2588 | #line 2613 "pikchr.c" |
| 2589 | break; |
| 2590 | case 36: /* attribute ::= CHOP */ |
| 2591 | #line 614 "pikchr.y" |
| 2592 | { p->cur->bChop = 1; } |
| 2593 | #line 2618 "pikchr.c" |
| 2594 | break; |
| 2595 | case 37: /* attribute ::= FROM position */ |
| 2596 | #line 615 "pikchr.y" |
| 2597 | { pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy43); } |
| 2598 | #line 2623 "pikchr.c" |
| 2599 | break; |
| 2600 | case 38: /* attribute ::= TO position */ |
| 2601 | #line 616 "pikchr.y" |
| 2602 | { pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy43); } |
| 2603 | #line 2628 "pikchr.c" |
| 2604 | break; |
| 2605 | case 39: /* attribute ::= THEN */ |
| 2606 | #line 617 "pikchr.y" |
| 2607 | { pik_then(p, &yymsp[0].minor.yy0, p->cur); } |
| 2608 | #line 2633 "pikchr.c" |
| 2609 | break; |
| 2610 | case 40: /* attribute ::= THEN optrelexpr HEADING expr */ |
| 2611 | case 42: /* attribute ::= GO optrelexpr HEADING expr */ yytestcase(yyruleno==42); |
| 2612 | #line 619 "pikchr.y" |
| 2613 | {pik_move_hdg(p,&yymsp[-2].minor.yy200,&yymsp[-1].minor.yy0,yymsp[0].minor.yy265,0,&yymsp[-3].minor.yy0);} |
| 2614 | #line 2639 "pikchr.c" |
| 2615 | break; |
| 2616 | case 41: /* attribute ::= THEN optrelexpr EDGEPT */ |
| 2617 | case 43: /* attribute ::= GO optrelexpr EDGEPT */ yytestcase(yyruleno==43); |
| 2618 | #line 620 "pikchr.y" |
| 2619 | {pik_move_hdg(p,&yymsp[-1].minor.yy200,0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0);} |
| 2620 | #line 2645 "pikchr.c" |
| 2621 | break; |
| 2622 | case 44: /* attribute ::= AT position */ |
| 2623 | #line 625 "pikchr.y" |
| 2624 | { pik_set_at(p,0,&yymsp[0].minor.yy43,&yymsp[-1].minor.yy0); } |
| 2625 | #line 2650 "pikchr.c" |
| 2626 | break; |
| 2627 | case 45: /* attribute ::= SAME */ |
| 2628 | #line 627 "pikchr.y" |
| 2629 | {pik_same(p,0,&yymsp[0].minor.yy0);} |
| 2630 | #line 2655 "pikchr.c" |
| 2631 | break; |
| 2632 | case 46: /* attribute ::= SAME AS object */ |
| 2633 | #line 628 "pikchr.y" |
| 2634 | {pik_same(p,yymsp[0].minor.yy38,&yymsp[-2].minor.yy0);} |
| 2635 | #line 2660 "pikchr.c" |
| 2636 | break; |
| 2637 | case 47: /* attribute ::= STRING textposition */ |
| 2638 | #line 629 "pikchr.y" |
| 2639 | {pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy196);} |
| 2640 | #line 2665 "pikchr.c" |
| 2641 | break; |
| 2642 | case 48: /* attribute ::= FIT */ |
| 2643 | #line 630 "pikchr.y" |
| 2644 | {pik_size_to_fit(p,&yymsp[0].minor.yy0,3); } |
| 2645 | #line 2670 "pikchr.c" |
| 2646 | break; |
| 2647 | case 49: /* attribute ::= BEHIND object */ |
| 2648 | #line 631 "pikchr.y" |
| 2649 | {pik_behind(p,yymsp[0].minor.yy38);} |
| 2650 | #line 2675 "pikchr.c" |
| 2651 | break; |
| 2652 | case 50: /* withclause ::= DOT_E edge AT position */ |
| 2653 | case 51: /* withclause ::= edge AT position */ yytestcase(yyruleno==51); |
| 2654 | #line 639 "pikchr.y" |
| 2655 | { pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy43,&yymsp[-1].minor.yy0); } |
| 2656 | #line 2681 "pikchr.c" |
| 2657 | break; |
| 2658 | case 52: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */ |
| 2659 | #line 643 "pikchr.y" |
| 2660 | {yylhsminor.yy0 = yymsp[0].minor.yy0;} |
| 2661 | #line 2686 "pikchr.c" |
| 2662 | yymsp[0].minor.yy0 = yylhsminor.yy0; |
| 2663 | break; |
| 2664 | case 53: /* boolproperty ::= CW */ |
| 2665 | #line 654 "pikchr.y" |
| 2666 | {p->cur->cw = 1;} |
| 2667 | #line 2692 "pikchr.c" |
| 2668 | break; |
| 2669 | case 54: /* boolproperty ::= CCW */ |
| 2670 | #line 655 "pikchr.y" |
| 2671 | {p->cur->cw = 0;} |
| 2672 | #line 2697 "pikchr.c" |
| 2673 | break; |
| 2674 | case 55: /* boolproperty ::= LARROW */ |
| 2675 | #line 656 "pikchr.y" |
| 2676 | {p->cur->larrow=1; p->cur->rarrow=0; } |
| 2677 | #line 2702 "pikchr.c" |
| 2678 | break; |
| 2679 | case 56: /* boolproperty ::= RARROW */ |
| 2680 | #line 657 "pikchr.y" |
| 2681 | {p->cur->larrow=0; p->cur->rarrow=1; } |
| 2682 | #line 2707 "pikchr.c" |
| 2683 | break; |
| 2684 | case 57: /* boolproperty ::= LRARROW */ |
| 2685 | #line 658 "pikchr.y" |
| 2686 | {p->cur->larrow=1; p->cur->rarrow=1; } |
| 2687 | #line 2712 "pikchr.c" |
| 2688 | break; |
| 2689 | case 58: /* boolproperty ::= INVIS */ |
| 2690 | #line 659 "pikchr.y" |
| 2691 | {p->cur->sw = 0.0;} |
| 2692 | #line 2717 "pikchr.c" |
| 2693 | break; |
| 2694 | case 59: /* boolproperty ::= THICK */ |
| 2695 | #line 660 "pikchr.y" |
| 2696 | {p->cur->sw *= 1.5;} |
| 2697 | #line 2722 "pikchr.c" |
| 2698 | break; |
| 2699 | case 60: /* boolproperty ::= THIN */ |
| 2700 | #line 661 "pikchr.y" |
| 2701 | {p->cur->sw *= 0.67;} |
| 2702 | #line 2727 "pikchr.c" |
| 2703 | break; |
| 2704 | case 61: /* boolproperty ::= SOLID */ |
| 2705 | #line 662 "pikchr.y" |
| 2706 | {p->cur->sw = pik_value(p,"thickness",9,0); |
| 2707 | p->cur->dotted = p->cur->dashed = 0.0;} |
| 2708 | #line 2733 "pikchr.c" |
| 2709 | break; |
| 2710 | case 62: /* textposition ::= */ |
| 2711 | #line 665 "pikchr.y" |
| 2712 | {yymsp[1].minor.yy196 = 0;} |
| 2713 | #line 2738 "pikchr.c" |
| 2714 | break; |
| 2715 | case 63: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED|BIG|SMALL */ |
| 2716 | #line 668 "pikchr.y" |
| 2717 | {yylhsminor.yy196 = pik_text_position(yymsp[-1].minor.yy196,&yymsp[0].minor.yy0);} |
| 2718 | #line 2743 "pikchr.c" |
| 2719 | yymsp[-1].minor.yy196 = yylhsminor.yy196; |
| 2720 | break; |
| 2721 | case 64: /* position ::= expr COMMA expr */ |
| 2722 | #line 671 "pikchr.y" |
| 2723 | {yylhsminor.yy43.x=yymsp[-2].minor.yy265; yylhsminor.yy43.y=yymsp[0].minor.yy265;} |
| 2724 | #line 2749 "pikchr.c" |
| 2725 | yymsp[-2].minor.yy43 = yylhsminor.yy43; |
| 2726 | break; |
| 2727 | case 65: /* position ::= place PLUS expr COMMA expr */ |
| 2728 | #line 673 "pikchr.y" |
| 2729 | {yylhsminor.yy43.x=yymsp[-4].minor.yy43.x+yymsp[-2].minor.yy265; yylhsminor.yy43.y=yymsp[-4].minor.yy43.y+yymsp[0].minor.yy265;} |
| 2730 | #line 2755 "pikchr.c" |
| 2731 | yymsp[-4].minor.yy43 = yylhsminor.yy43; |
| 2732 | break; |
| 2733 | case 66: /* position ::= place MINUS expr COMMA expr */ |
| 2734 | #line 674 "pikchr.y" |
| 2735 | {yylhsminor.yy43.x=yymsp[-4].minor.yy43.x-yymsp[-2].minor.yy265; yylhsminor.yy43.y=yymsp[-4].minor.yy43.y-yymsp[0].minor.yy265;} |
| 2736 | #line 2761 "pikchr.c" |
| 2737 | yymsp[-4].minor.yy43 = yylhsminor.yy43; |
| 2738 | break; |
| 2739 | case 67: /* position ::= place PLUS LP expr COMMA expr RP */ |
| 2740 | #line 676 "pikchr.y" |
| 2741 | {yylhsminor.yy43.x=yymsp[-6].minor.yy43.x+yymsp[-3].minor.yy265; yylhsminor.yy43.y=yymsp[-6].minor.yy43.y+yymsp[-1].minor.yy265;} |
| 2742 | #line 2767 "pikchr.c" |
| 2743 | yymsp[-6].minor.yy43 = yylhsminor.yy43; |
| 2744 | break; |
| 2745 | case 68: /* position ::= place MINUS LP expr COMMA expr RP */ |
| 2746 | #line 678 "pikchr.y" |
| 2747 | {yylhsminor.yy43.x=yymsp[-6].minor.yy43.x-yymsp[-3].minor.yy265; yylhsminor.yy43.y=yymsp[-6].minor.yy43.y-yymsp[-1].minor.yy265;} |
| 2748 | #line 2773 "pikchr.c" |
| 2749 | yymsp[-6].minor.yy43 = yylhsminor.yy43; |
| 2750 | break; |
| 2751 | case 69: /* position ::= LP position COMMA position RP */ |
| 2752 | #line 679 "pikchr.y" |
| 2753 | {yymsp[-4].minor.yy43.x=yymsp[-3].minor.yy43.x; yymsp[-4].minor.yy43.y=yymsp[-1].minor.yy43.y;} |
| 2754 | #line 2779 "pikchr.c" |
| 2755 | break; |
| 2756 | case 70: /* position ::= LP position RP */ |
| 2757 | #line 680 "pikchr.y" |
| 2758 | {yymsp[-2].minor.yy43=yymsp[-1].minor.yy43;} |
| 2759 | #line 2784 "pikchr.c" |
| 2760 | break; |
| 2761 | case 71: /* position ::= expr between position AND position */ |
| 2762 | #line 682 "pikchr.y" |
| 2763 | {yylhsminor.yy43 = pik_position_between(yymsp[-4].minor.yy265,yymsp[-2].minor.yy43,yymsp[0].minor.yy43);} |
| 2764 | #line 2789 "pikchr.c" |
| 2765 | yymsp[-4].minor.yy43 = yylhsminor.yy43; |
| 2766 | break; |
| 2767 | case 72: /* position ::= expr LT position COMMA position GT */ |
| 2768 | #line 684 "pikchr.y" |
| 2769 | {yylhsminor.yy43 = pik_position_between(yymsp[-5].minor.yy265,yymsp[-3].minor.yy43,yymsp[-1].minor.yy43);} |
| 2770 | #line 2795 "pikchr.c" |
| 2771 | yymsp[-5].minor.yy43 = yylhsminor.yy43; |
| 2772 | break; |
| 2773 | case 73: /* position ::= expr ABOVE position */ |
| 2774 | #line 685 "pikchr.y" |
| 2775 | {yylhsminor.yy43=yymsp[0].minor.yy43; yylhsminor.yy43.y += yymsp[-2].minor.yy265;} |
| 2776 | #line 2801 "pikchr.c" |
| 2777 | yymsp[-2].minor.yy43 = yylhsminor.yy43; |
| 2778 | break; |
| 2779 | case 74: /* position ::= expr BELOW position */ |
| 2780 | #line 686 "pikchr.y" |
| 2781 | {yylhsminor.yy43=yymsp[0].minor.yy43; yylhsminor.yy43.y -= yymsp[-2].minor.yy265;} |
| 2782 | #line 2807 "pikchr.c" |
| 2783 | yymsp[-2].minor.yy43 = yylhsminor.yy43; |
| 2784 | break; |
| 2785 | case 75: /* position ::= expr LEFT OF position */ |
| 2786 | #line 687 "pikchr.y" |
| 2787 | {yylhsminor.yy43=yymsp[0].minor.yy43; yylhsminor.yy43.x -= yymsp[-3].minor.yy265;} |
| 2788 | #line 2813 "pikchr.c" |
| 2789 | yymsp[-3].minor.yy43 = yylhsminor.yy43; |
| 2790 | break; |
| 2791 | case 76: /* position ::= expr RIGHT OF position */ |
| 2792 | #line 688 "pikchr.y" |
| 2793 | {yylhsminor.yy43=yymsp[0].minor.yy43; yylhsminor.yy43.x += yymsp[-3].minor.yy265;} |
| 2794 | #line 2819 "pikchr.c" |
| 2795 | yymsp[-3].minor.yy43 = yylhsminor.yy43; |
| 2796 | break; |
| 2797 | case 77: /* position ::= expr ON HEADING EDGEPT OF position */ |
| 2798 | #line 690 "pikchr.y" |
| 2799 | {yylhsminor.yy43 = pik_position_at_hdg(yymsp[-5].minor.yy265,&yymsp[-2].minor.yy0,yymsp[0].minor.yy43);} |
| 2800 | #line 2825 "pikchr.c" |
| 2801 | yymsp[-5].minor.yy43 = yylhsminor.yy43; |
| 2802 | break; |
| 2803 | case 78: /* position ::= expr HEADING EDGEPT OF position */ |
| 2804 | #line 692 "pikchr.y" |
| 2805 | {yylhsminor.yy43 = pik_position_at_hdg(yymsp[-4].minor.yy265,&yymsp[-2].minor.yy0,yymsp[0].minor.yy43);} |
| 2806 | #line 2831 "pikchr.c" |
| 2807 | yymsp[-4].minor.yy43 = yylhsminor.yy43; |
| 2808 | break; |
| 2809 | case 79: /* position ::= expr EDGEPT OF position */ |
| 2810 | #line 694 "pikchr.y" |
| 2811 | {yylhsminor.yy43 = pik_position_at_hdg(yymsp[-3].minor.yy265,&yymsp[-2].minor.yy0,yymsp[0].minor.yy43);} |
| 2812 | #line 2837 "pikchr.c" |
| 2813 | yymsp[-3].minor.yy43 = yylhsminor.yy43; |
| 2814 | break; |
| 2815 | case 80: /* position ::= expr ON HEADING expr FROM position */ |
| 2816 | #line 696 "pikchr.y" |
| 2817 | {yylhsminor.yy43 = pik_position_at_angle(yymsp[-5].minor.yy265,yymsp[-2].minor.yy265,yymsp[0].minor.yy43);} |
| 2818 | #line 2843 "pikchr.c" |
| 2819 | yymsp[-5].minor.yy43 = yylhsminor.yy43; |
| 2820 | break; |
| 2821 | case 81: /* position ::= expr HEADING expr FROM position */ |
| 2822 | #line 698 "pikchr.y" |
| 2823 | {yylhsminor.yy43 = pik_position_at_angle(yymsp[-4].minor.yy265,yymsp[-2].minor.yy265,yymsp[0].minor.yy43);} |
| 2824 | #line 2849 "pikchr.c" |
| 2825 | yymsp[-4].minor.yy43 = yylhsminor.yy43; |
| 2826 | break; |
| 2827 | case 82: /* place ::= edge OF object */ |
| 2828 | #line 710 "pikchr.y" |
| 2829 | {yylhsminor.yy43 = pik_place_of_elem(p,yymsp[0].minor.yy38,&yymsp[-2].minor.yy0);} |
| 2830 | #line 2855 "pikchr.c" |
| 2831 | yymsp[-2].minor.yy43 = yylhsminor.yy43; |
| 2832 | break; |
| 2833 | case 83: /* place2 ::= object */ |
| 2834 | #line 711 "pikchr.y" |
| 2835 | {yylhsminor.yy43 = pik_place_of_elem(p,yymsp[0].minor.yy38,0);} |
| 2836 | #line 2861 "pikchr.c" |
| 2837 | yymsp[0].minor.yy43 = yylhsminor.yy43; |
| 2838 | break; |
| 2839 | case 84: /* place2 ::= object DOT_E edge */ |
| 2840 | #line 712 "pikchr.y" |
| 2841 | {yylhsminor.yy43 = pik_place_of_elem(p,yymsp[-2].minor.yy38,&yymsp[0].minor.yy0);} |
| 2842 | #line 2867 "pikchr.c" |
| 2843 | yymsp[-2].minor.yy43 = yylhsminor.yy43; |
| 2844 | break; |
| 2845 | case 85: /* place2 ::= NTH VERTEX OF object */ |
| 2846 | #line 713 "pikchr.y" |
| 2847 | {yylhsminor.yy43 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy38);} |
| 2848 | #line 2873 "pikchr.c" |
| 2849 | yymsp[-3].minor.yy43 = yylhsminor.yy43; |
| 2850 | break; |
| 2851 | case 86: /* object ::= nth */ |
| 2852 | #line 725 "pikchr.y" |
| 2853 | {yylhsminor.yy38 = pik_find_nth(p,0,&yymsp[0].minor.yy0);} |
| 2854 | #line 2879 "pikchr.c" |
| 2855 | yymsp[0].minor.yy38 = yylhsminor.yy38; |
| 2856 | break; |
| 2857 | case 87: /* object ::= nth OF|IN object */ |
| 2858 | #line 726 "pikchr.y" |
| 2859 | {yylhsminor.yy38 = pik_find_nth(p,yymsp[0].minor.yy38,&yymsp[-2].minor.yy0);} |
| 2860 | #line 2885 "pikchr.c" |
| 2861 | yymsp[-2].minor.yy38 = yylhsminor.yy38; |
| 2862 | break; |
| 2863 | case 88: /* objectname ::= PLACENAME */ |
| 2864 | #line 728 "pikchr.y" |
| 2865 | {yylhsminor.yy38 = pik_find_byname(p,0,&yymsp[0].minor.yy0);} |
| 2866 | #line 2891 "pikchr.c" |
| 2867 | yymsp[0].minor.yy38 = yylhsminor.yy38; |
| 2868 | break; |
| 2869 | case 89: /* objectname ::= objectname DOT_U PLACENAME */ |
| 2870 | #line 730 "pikchr.y" |
| 2871 | {yylhsminor.yy38 = pik_find_byname(p,yymsp[-2].minor.yy38,&yymsp[0].minor.yy0);} |
| 2872 | #line 2897 "pikchr.c" |
| 2873 | yymsp[-2].minor.yy38 = yylhsminor.yy38; |
| 2874 | break; |
| 2875 | case 90: /* nth ::= NTH CLASSNAME */ |
| 2876 | #line 732 "pikchr.y" |
| 2877 | {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); } |
| 2878 | #line 2903 "pikchr.c" |
| 2879 | yymsp[-1].minor.yy0 = yylhsminor.yy0; |
| 2880 | break; |
| 2881 | case 91: /* nth ::= NTH LAST CLASSNAME */ |
| 2882 | #line 733 "pikchr.y" |
| 2883 | {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); } |
| 2884 | #line 2909 "pikchr.c" |
| 2885 | yymsp[-2].minor.yy0 = yylhsminor.yy0; |
| 2886 | break; |
| 2887 | case 92: /* nth ::= LAST CLASSNAME */ |
| 2888 | #line 734 "pikchr.y" |
| 2889 | {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;} |
| 2890 | #line 2915 "pikchr.c" |
| 2891 | break; |
| 2892 | case 93: /* nth ::= LAST */ |
| 2893 | #line 735 "pikchr.y" |
| 2894 | {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;} |
| 2895 | #line 2920 "pikchr.c" |
| 2896 | yymsp[0].minor.yy0 = yylhsminor.yy0; |
| 2897 | break; |
| 2898 | case 94: /* nth ::= NTH LB RB */ |
| 2899 | #line 736 "pikchr.y" |
| 2900 | {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);} |
| 2901 | #line 2926 "pikchr.c" |
| 2902 | yymsp[-2].minor.yy0 = yylhsminor.yy0; |
| 2903 | break; |
| 2904 | case 95: /* nth ::= NTH LAST LB RB */ |
| 2905 | #line 737 "pikchr.y" |
| 2906 | {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);} |
| 2907 | #line 2932 "pikchr.c" |
| 2908 | yymsp[-3].minor.yy0 = yylhsminor.yy0; |
| 2909 | break; |
| 2910 | case 96: /* nth ::= LAST LB RB */ |
| 2911 | #line 738 "pikchr.y" |
| 2912 | {yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; } |
| 2913 | #line 2938 "pikchr.c" |
| 2914 | break; |
| 2915 | case 97: /* expr ::= expr PLUS expr */ |
| 2916 | #line 740 "pikchr.y" |
| 2917 | {yylhsminor.yy265=yymsp[-2].minor.yy265+yymsp[0].minor.yy265;} |
| 2918 | #line 2943 "pikchr.c" |
| 2919 | yymsp[-2].minor.yy265 = yylhsminor.yy265; |
| 2920 | break; |
| 2921 | case 98: /* expr ::= expr MINUS expr */ |
| 2922 | #line 741 "pikchr.y" |
| 2923 | {yylhsminor.yy265=yymsp[-2].minor.yy265-yymsp[0].minor.yy265;} |
| 2924 | #line 2949 "pikchr.c" |
| 2925 | yymsp[-2].minor.yy265 = yylhsminor.yy265; |
| 2926 | break; |
| 2927 | case 99: /* expr ::= expr STAR expr */ |
| 2928 | #line 742 "pikchr.y" |
| 2929 | {yylhsminor.yy265=yymsp[-2].minor.yy265*yymsp[0].minor.yy265;} |
| 2930 | #line 2955 "pikchr.c" |
| 2931 | yymsp[-2].minor.yy265 = yylhsminor.yy265; |
| 2932 | break; |
| 2933 | case 100: /* expr ::= expr SLASH expr */ |
| 2934 | #line 743 "pikchr.y" |
| 2935 | { |
| 2936 | if( yymsp[0].minor.yy265==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy265 = 0.0; } |
| 2937 | else{ yylhsminor.yy265 = yymsp[-2].minor.yy265/yymsp[0].minor.yy265; } |
| 2938 | } |
| 2939 | #line 2964 "pikchr.c" |
| 2940 | yymsp[-2].minor.yy265 = yylhsminor.yy265; |
| 2941 | break; |
| 2942 | case 101: /* expr ::= MINUS expr */ |
| 2943 | #line 747 "pikchr.y" |
| 2944 | {yymsp[-1].minor.yy265=-yymsp[0].minor.yy265;} |
| 2945 | #line 2970 "pikchr.c" |
| 2946 | break; |
| 2947 | case 102: /* expr ::= PLUS expr */ |
| 2948 | #line 748 "pikchr.y" |
| 2949 | {yymsp[-1].minor.yy265=yymsp[0].minor.yy265;} |
| 2950 | #line 2975 "pikchr.c" |
| 2951 | break; |
| 2952 | case 103: /* expr ::= LP expr RP */ |
| 2953 | #line 749 "pikchr.y" |
| 2954 | {yymsp[-2].minor.yy265=yymsp[-1].minor.yy265;} |
| 2955 | #line 2980 "pikchr.c" |
| 2956 | break; |
| 2957 | case 104: /* expr ::= LP FILL|COLOR|THICKNESS RP */ |
| 2958 | #line 750 "pikchr.y" |
| 2959 | {yymsp[-2].minor.yy265=pik_get_var(p,&yymsp[-1].minor.yy0);} |
| 2960 | #line 2985 "pikchr.c" |
| 2961 | break; |
| 2962 | case 105: /* expr ::= NUMBER */ |
| 2963 | #line 751 "pikchr.y" |
| 2964 | {yylhsminor.yy265=pik_atof(&yymsp[0].minor.yy0);} |
| 2965 | #line 2990 "pikchr.c" |
| 2966 | yymsp[0].minor.yy265 = yylhsminor.yy265; |
| 2967 | break; |
| 2968 | case 106: /* expr ::= ID */ |
| 2969 | #line 752 "pikchr.y" |
| 2970 | {yylhsminor.yy265=pik_get_var(p,&yymsp[0].minor.yy0);} |
| 2971 | #line 2996 "pikchr.c" |
| 2972 | yymsp[0].minor.yy265 = yylhsminor.yy265; |
| 2973 | break; |
| 2974 | case 107: /* expr ::= FUNC1 LP expr RP */ |
| 2975 | #line 753 "pikchr.y" |
| 2976 | {yylhsminor.yy265 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy265,0.0);} |
| 2977 | #line 3002 "pikchr.c" |
| 2978 | yymsp[-3].minor.yy265 = yylhsminor.yy265; |
| 2979 | break; |
| 2980 | case 108: /* expr ::= FUNC2 LP expr COMMA expr RP */ |
| 2981 | #line 754 "pikchr.y" |
| 2982 | {yylhsminor.yy265 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy265,yymsp[-1].minor.yy265);} |
| 2983 | #line 3008 "pikchr.c" |
| 2984 | yymsp[-5].minor.yy265 = yylhsminor.yy265; |
| 2985 | break; |
| 2986 | case 109: /* expr ::= DIST LP position COMMA position RP */ |
| 2987 | #line 755 "pikchr.y" |
| 2988 | {yymsp[-5].minor.yy265 = pik_dist(&yymsp[-3].minor.yy43,&yymsp[-1].minor.yy43);} |
| 2989 | #line 3014 "pikchr.c" |
| 2990 | break; |
| 2991 | case 110: /* expr ::= place2 DOT_XY X */ |
| 2992 | #line 756 "pikchr.y" |
| 2993 | {yylhsminor.yy265 = yymsp[-2].minor.yy43.x;} |
| 2994 | #line 3019 "pikchr.c" |
| 2995 | yymsp[-2].minor.yy265 = yylhsminor.yy265; |
| 2996 | break; |
| 2997 | case 111: /* expr ::= place2 DOT_XY Y */ |
| 2998 | #line 757 "pikchr.y" |
| 2999 | {yylhsminor.yy265 = yymsp[-2].minor.yy43.y;} |
| 3000 | #line 3025 "pikchr.c" |
| 3001 | yymsp[-2].minor.yy265 = yylhsminor.yy265; |
| 3002 | break; |
| 3003 | case 112: /* expr ::= object DOT_L numproperty */ |
| 3004 | case 113: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==113); |
| 3005 | case 114: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==114); |
| 3006 | #line 758 "pikchr.y" |
| 3007 | {yylhsminor.yy265=pik_property_of(yymsp[-2].minor.yy38,&yymsp[0].minor.yy0);} |
| 3008 | #line 3033 "pikchr.c" |
| 3009 | yymsp[-2].minor.yy265 = yylhsminor.yy265; |
| 3010 | break; |
| 3011 | default: |
| 3012 | /* (115) lvalue ::= ID */ yytestcase(yyruleno==115); |
| 3013 | /* (116) lvalue ::= FILL */ yytestcase(yyruleno==116); |
| @@ -3105,19 +3106,19 @@ | |
| 3106 | ){ |
| 3107 | pik_parserARG_FETCH |
| 3108 | pik_parserCTX_FETCH |
| 3109 | #define TOKEN yyminor |
| 3110 | /************ Begin %syntax_error code ****************************************/ |
| 3111 | #line 519 "pikchr.y" |
| 3112 | |
| 3113 | if( TOKEN.z && TOKEN.z[0] ){ |
| 3114 | pik_error(p, &TOKEN, "syntax error"); |
| 3115 | }else{ |
| 3116 | pik_error(p, 0, "syntax error"); |
| 3117 | } |
| 3118 | UNUSED_PARAMETER(yymajor); |
| 3119 | #line 3144 "pikchr.c" |
| 3120 | /************ End %syntax_error code ******************************************/ |
| 3121 | pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */ |
| 3122 | pik_parserCTX_STORE |
| 3123 | } |
| 3124 | |
| @@ -3346,11 +3347,11 @@ | |
| 3347 | #else |
| 3348 | (void)iToken; |
| 3349 | return 0; |
| 3350 | #endif |
| 3351 | } |
| 3352 | #line 763 "pikchr.y" |
| 3353 | |
| 3354 | |
| 3355 | |
| 3356 | /* Chart of the 148 official CSS color names with their |
| 3357 | ** corresponding RGB values thru Color Module Level 4: |
| @@ -4592,11 +4593,11 @@ | |
| 4593 | r = (127*r)/mx; |
| 4594 | g = (127*g)/mx; |
| 4595 | b = (127*b)/mx; |
| 4596 | } |
| 4597 | }else{ |
| 4598 | if( mn<128 && mx>mn ){ |
| 4599 | r = 127 + ((r-mn)*128)/(mx-mn); |
| 4600 | g = 127 + ((g-mn)*128)/(mx-mn); |
| 4601 | b = 127 + ((b-mn)*128)/(mx-mn); |
| 4602 | } |
| 4603 | } |
| @@ -4637,11 +4638,15 @@ | |
| 4638 | } |
| 4639 | static void pik_append_clr(Pik *p,const char *z1,PNum v,const char *z2,int bg){ |
| 4640 | char buf[200]; |
| 4641 | int x = (int)v; |
| 4642 | int r, g, b; |
| 4643 | if( x==0 && p->fgcolor>0 && !bg ){ |
| 4644 | x = p->fgcolor; |
| 4645 | }else if( p->mFlags & PIKCHR_DARK_MODE ){ |
| 4646 | x = pik_color_to_dark_mode(x,bg); |
| 4647 | } |
| 4648 | r = (x>>16) & 0xff; |
| 4649 | g = (x>>8) & 0xff; |
| 4650 | b = x & 0xff; |
| 4651 | snprintf(buf, sizeof(buf)-1, "%srgb(%d,%d,%d)%s", z1, r, g, b, z2); |
| 4652 | buf[sizeof(buf)-1] = 0; |
| @@ -6877,18 +6882,26 @@ | |
| 6882 | PNum thickness; /* Stroke width */ |
| 6883 | PNum margin; /* Extra bounding box margin */ |
| 6884 | PNum w, h; /* Drawing width and height */ |
| 6885 | PNum wArrow; |
| 6886 | PNum pikScale; /* Value of the "scale" variable */ |
| 6887 | int miss = 0; |
| 6888 | |
| 6889 | /* Set up rendering parameters */ |
| 6890 | pik_compute_layout_settings(p); |
| 6891 | thickness = pik_value(p,"thickness",9,0); |
| 6892 | if( thickness<=0.01 ) thickness = 0.01; |
| 6893 | margin = pik_value(p,"margin",6,0); |
| 6894 | margin += thickness; |
| 6895 | wArrow = p->wArrow*thickness; |
| 6896 | p->fgcolor = (int)pik_value(p,"fgcolor",7,&miss); |
| 6897 | if( miss ){ |
| 6898 | PToken t; |
| 6899 | t.z = "fgcolor"; |
| 6900 | t.n = 7; |
| 6901 | p->fgcolor = (int)pik_lookup_color(0, &t); |
| 6902 | } |
| 6903 | |
| 6904 | /* Compute a bounding box over all objects so that we can know |
| 6905 | ** how big to declare the SVG canvas */ |
| 6906 | pik_bbox_init(&p->bbox); |
| 6907 | pik_bbox_add_elist(p, pList, wArrow); |
| @@ -7839,6 +7852,6 @@ | |
| 7852 | |
| 7853 | |
| 7854 | #endif /* PIKCHR_TCL */ |
| 7855 | |
| 7856 | |
| 7857 | #line 7882 "pikchr.c" |
| 7858 |