Fossil SCM

Fix the build for Windows by adding macro M_PI if it is missing.

drh 2020-09-09 15:25 pikchr
Commit 0df84add062e7b21938393ee8194a27d868204b917546d5de5de394113a52a4d
1 file changed +204 -201
+204 -201
--- src/pikchr.c
+++ src/pikchr.c
@@ -121,10 +121,13 @@
121121
#include <string.h>
122122
#include <ctype.h>
123123
#include <math.h>
124124
#include <assert.h>
125125
#define count(X) (sizeof(X)/sizeof(X[0]))
126
+#ifndef M_PI
127
+# define M_PI 3.1415926535897932385
128
+#endif
126129
127130
typedef struct Pik Pik; /* Complete parsing context */
128131
typedef struct PToken PToken; /* A single token */
129132
typedef struct PElem PElem; /* A single diagram object or "element" */
130133
typedef struct PEList PEList; /* A list of elements */
@@ -405,11 +408,11 @@
405408
static void pik_same(Pik *p, PElem*, PToken*);
406409
static PPoint pik_nth_vertex(Pik *p, PToken *pNth, PToken *pErr, PElem *pElem);
407410
static PToken pik_next_semantic_token(Pik *p, PToken *pThis);
408411
409412
410
-#line 436 "pikchr.c"
413
+#line 439 "pikchr.c"
411414
/**************** End of %include directives **********************************/
412415
/* These constants specify the various numeric values for terminal symbols.
413416
***************** Begin token definitions *************************************/
414417
#ifndef T_ID
415418
#define T_ID 1
@@ -1470,22 +1473,22 @@
14701473
** inside the C code.
14711474
*/
14721475
/********* Begin destructor definitions ***************************************/
14731476
case 82: /* element_list */
14741477
{
1475
-#line 419 "pikchr.y"
1478
+#line 422 "pikchr.y"
14761479
pik_elist_free(p,(yypminor->yy42));
1477
-#line 1502 "pikchr.c"
1480
+#line 1505 "pikchr.c"
14781481
}
14791482
break;
14801483
case 83: /* element */
14811484
case 84: /* unnamed_element */
14821485
case 85: /* basetype */
14831486
{
1484
-#line 421 "pikchr.y"
1487
+#line 424 "pikchr.y"
14851488
pik_elem_free(p,(yypminor->yy24));
1486
-#line 1511 "pikchr.c"
1489
+#line 1514 "pikchr.c"
14871490
}
14881491
break;
14891492
/********* End destructor definitions *****************************************/
14901493
default: break; /* If no destructor action specified: do nothing */
14911494
}
@@ -1699,14 +1702,14 @@
16991702
#endif
17001703
while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
17011704
/* Here code is inserted which will execute if the parser
17021705
** stack every overflows */
17031706
/******** Begin %stack_overflow code ******************************************/
1704
-#line 450 "pikchr.y"
1707
+#line 453 "pikchr.y"
17051708
17061709
pik_error(p, 0, "parser stack overflow");
1707
-#line 1732 "pikchr.c"
1710
+#line 1735 "pikchr.c"
17081711
/******** End %stack_overflow code ********************************************/
17091712
pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */
17101713
pik_parserCTX_STORE
17111714
}
17121715
@@ -2153,549 +2156,549 @@
21532156
** break;
21542157
*/
21552158
/********** Begin reduce actions **********************************************/
21562159
YYMINORTYPE yylhsminor;
21572160
case 0: /* document ::= element_list */
2158
-#line 454 "pikchr.y"
2161
+#line 457 "pikchr.y"
21592162
{pik_render(p,yymsp[0].minor.yy42);}
2160
-#line 2185 "pikchr.c"
2163
+#line 2188 "pikchr.c"
21612164
break;
21622165
case 1: /* element_list ::= element */
2163
-#line 457 "pikchr.y"
2166
+#line 460 "pikchr.y"
21642167
{ yylhsminor.yy42 = pik_elist_append(p,0,yymsp[0].minor.yy24); }
2165
-#line 2190 "pikchr.c"
2168
+#line 2193 "pikchr.c"
21662169
yymsp[0].minor.yy42 = yylhsminor.yy42;
21672170
break;
21682171
case 2: /* element_list ::= element_list EOL element */
2169
-#line 459 "pikchr.y"
2172
+#line 462 "pikchr.y"
21702173
{ yylhsminor.yy42 = pik_elist_append(p,yymsp[-2].minor.yy42,yymsp[0].minor.yy24); }
2171
-#line 2196 "pikchr.c"
2174
+#line 2199 "pikchr.c"
21722175
yymsp[-2].minor.yy42 = yylhsminor.yy42;
21732176
break;
21742177
case 3: /* element ::= */
2175
-#line 462 "pikchr.y"
2178
+#line 465 "pikchr.y"
21762179
{ yymsp[1].minor.yy24 = 0; }
2177
-#line 2202 "pikchr.c"
2180
+#line 2205 "pikchr.c"
21782181
break;
21792182
case 4: /* element ::= direction */
2180
-#line 463 "pikchr.y"
2183
+#line 466 "pikchr.y"
21812184
{ pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy24=0; }
2182
-#line 2207 "pikchr.c"
2185
+#line 2210 "pikchr.c"
21832186
yymsp[0].minor.yy24 = yylhsminor.yy24;
21842187
break;
21852188
case 5: /* element ::= lvalue ASSIGN rvalue */
2186
-#line 464 "pikchr.y"
2189
+#line 467 "pikchr.y"
21872190
{pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy83,&yymsp[-1].minor.yy0); yylhsminor.yy24=0;}
2188
-#line 2213 "pikchr.c"
2191
+#line 2216 "pikchr.c"
21892192
yymsp[-2].minor.yy24 = yylhsminor.yy24;
21902193
break;
21912194
case 6: /* element ::= PLACENAME COLON unnamed_element */
2192
-#line 466 "pikchr.y"
2195
+#line 469 "pikchr.y"
21932196
{ yylhsminor.yy24 = yymsp[0].minor.yy24; pik_elem_setname(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0); }
2194
-#line 2219 "pikchr.c"
2197
+#line 2222 "pikchr.c"
21952198
yymsp[-2].minor.yy24 = yylhsminor.yy24;
21962199
break;
21972200
case 7: /* element ::= PLACENAME COLON position */
2198
-#line 468 "pikchr.y"
2201
+#line 471 "pikchr.y"
21992202
{ yylhsminor.yy24 = pik_elem_new(p,0,0,0);
22002203
if(yylhsminor.yy24){ yylhsminor.yy24->ptAt = yymsp[0].minor.yy49; pik_elem_setname(p,yylhsminor.yy24,&yymsp[-2].minor.yy0); }}
2201
-#line 2226 "pikchr.c"
2204
+#line 2229 "pikchr.c"
22022205
yymsp[-2].minor.yy24 = yylhsminor.yy24;
22032206
break;
22042207
case 8: /* element ::= unnamed_element */
2205
-#line 470 "pikchr.y"
2208
+#line 473 "pikchr.y"
22062209
{yylhsminor.yy24 = yymsp[0].minor.yy24;}
2207
-#line 2232 "pikchr.c"
2210
+#line 2235 "pikchr.c"
22082211
yymsp[0].minor.yy24 = yylhsminor.yy24;
22092212
break;
22102213
case 9: /* element ::= print prlist */
2211
-#line 471 "pikchr.y"
2214
+#line 474 "pikchr.y"
22122215
{pik_append(p,"<br>\n",5); yymsp[-1].minor.yy24=0;}
2213
-#line 2238 "pikchr.c"
2216
+#line 2241 "pikchr.c"
22142217
break;
22152218
case 10: /* rvalue ::= PLACENAME */
2216
-#line 481 "pikchr.y"
2219
+#line 484 "pikchr.y"
22172220
{yylhsminor.yy83 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2218
-#line 2243 "pikchr.c"
2221
+#line 2246 "pikchr.c"
22192222
yymsp[0].minor.yy83 = yylhsminor.yy83;
22202223
break;
22212224
case 11: /* pritem ::= rvalue */
2222
-#line 486 "pikchr.y"
2225
+#line 489 "pikchr.y"
22232226
{pik_append_num(p,"",yymsp[0].minor.yy83);}
2224
-#line 2249 "pikchr.c"
2227
+#line 2252 "pikchr.c"
22252228
break;
22262229
case 12: /* pritem ::= STRING */
2227
-#line 487 "pikchr.y"
2230
+#line 490 "pikchr.y"
22282231
{pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2229
-#line 2254 "pikchr.c"
2232
+#line 2257 "pikchr.c"
22302233
break;
22312234
case 13: /* prsep ::= COMMA */
2232
-#line 488 "pikchr.y"
2235
+#line 491 "pikchr.y"
22332236
{pik_append(p, " ", 1);}
2234
-#line 2259 "pikchr.c"
2237
+#line 2262 "pikchr.c"
22352238
break;
22362239
case 14: /* unnamed_element ::= basetype attribute_list */
2237
-#line 491 "pikchr.y"
2240
+#line 494 "pikchr.y"
22382241
{yylhsminor.yy24 = yymsp[-1].minor.yy24; pik_after_adding_attributes(p,yylhsminor.yy24);}
2239
-#line 2264 "pikchr.c"
2242
+#line 2267 "pikchr.c"
22402243
yymsp[-1].minor.yy24 = yylhsminor.yy24;
22412244
break;
22422245
case 15: /* basetype ::= CLASSNAME */
2243
-#line 493 "pikchr.y"
2246
+#line 496 "pikchr.y"
22442247
{yylhsminor.yy24 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2245
-#line 2270 "pikchr.c"
2248
+#line 2273 "pikchr.c"
22462249
yymsp[0].minor.yy24 = yylhsminor.yy24;
22472250
break;
22482251
case 16: /* basetype ::= STRING textposition */
2249
-#line 495 "pikchr.y"
2252
+#line 498 "pikchr.y"
22502253
{yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy52; yylhsminor.yy24 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2251
-#line 2276 "pikchr.c"
2254
+#line 2279 "pikchr.c"
22522255
yymsp[-1].minor.yy24 = yylhsminor.yy24;
22532256
break;
22542257
case 17: /* basetype ::= LB savelist element_list RB */
2255
-#line 497 "pikchr.y"
2258
+#line 500 "pikchr.y"
22562259
{ p->list = yymsp[-2].minor.yy42; yymsp[-3].minor.yy24 = pik_elem_new(p,0,0,yymsp[-1].minor.yy42); if(yymsp[-3].minor.yy24) yymsp[-3].minor.yy24->errTok = yymsp[0].minor.yy0; }
2257
-#line 2282 "pikchr.c"
2260
+#line 2285 "pikchr.c"
22582261
break;
22592262
case 18: /* savelist ::= */
2260
-#line 502 "pikchr.y"
2263
+#line 505 "pikchr.y"
22612264
{yymsp[1].minor.yy42 = p->list; p->list = 0;}
2262
-#line 2287 "pikchr.c"
2265
+#line 2290 "pikchr.c"
22632266
break;
22642267
case 19: /* attribute_list ::= expr */
2265
-#line 509 "pikchr.y"
2268
+#line 512 "pikchr.y"
22662269
{ pik_add_direction(p,0,&yymsp[0].minor.yy83,0);}
2267
-#line 2292 "pikchr.c"
2270
+#line 2295 "pikchr.c"
22682271
break;
22692272
case 20: /* attribute_list ::= expr PERCENT */
2270
-#line 510 "pikchr.y"
2273
+#line 513 "pikchr.y"
22712274
{ pik_add_direction(p,0,&yymsp[-1].minor.yy83,1);}
2272
-#line 2297 "pikchr.c"
2275
+#line 2300 "pikchr.c"
22732276
break;
22742277
case 21: /* attribute ::= numproperty expr PERCENT */
2275
-#line 515 "pikchr.y"
2278
+#line 518 "pikchr.y"
22762279
{ pik_set_numprop(p,&yymsp[-2].minor.yy0,0.0,yymsp[-1].minor.yy83/100.0); }
2277
-#line 2302 "pikchr.c"
2280
+#line 2305 "pikchr.c"
22782281
break;
22792282
case 22: /* attribute ::= numproperty expr */
22802283
case 25: /* attribute ::= colorproperty rvalue */ yytestcase(yyruleno==25);
2281
-#line 516 "pikchr.y"
2284
+#line 519 "pikchr.y"
22822285
{ pik_set_numprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy83,0.0); }
2283
-#line 2308 "pikchr.c"
2286
+#line 2311 "pikchr.c"
22842287
break;
22852288
case 23: /* attribute ::= dashproperty expr */
2286
-#line 517 "pikchr.y"
2289
+#line 520 "pikchr.y"
22872290
{ pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy83); }
2288
-#line 2313 "pikchr.c"
2291
+#line 2316 "pikchr.c"
22892292
break;
22902293
case 24: /* attribute ::= dashproperty */
2291
-#line 518 "pikchr.y"
2294
+#line 521 "pikchr.y"
22922295
{ pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2293
-#line 2318 "pikchr.c"
2296
+#line 2321 "pikchr.c"
22942297
break;
22952298
case 26: /* attribute ::= direction expr PERCENT */
2296
-#line 521 "pikchr.y"
2299
+#line 524 "pikchr.y"
22972300
{ pik_add_direction(p,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy83,1);}
2298
-#line 2323 "pikchr.c"
2301
+#line 2326 "pikchr.c"
22992302
break;
23002303
case 27: /* attribute ::= direction expr */
2301
-#line 522 "pikchr.y"
2304
+#line 525 "pikchr.y"
23022305
{ pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy83,0);}
2303
-#line 2328 "pikchr.c"
2306
+#line 2331 "pikchr.c"
23042307
break;
23052308
case 28: /* attribute ::= direction */
2306
-#line 523 "pikchr.y"
2309
+#line 526 "pikchr.y"
23072310
{ pik_add_direction(p,&yymsp[0].minor.yy0,0,0); }
2308
-#line 2333 "pikchr.c"
2311
+#line 2336 "pikchr.c"
23092312
break;
23102313
case 29: /* attribute ::= direction even position */
2311
-#line 524 "pikchr.y"
2314
+#line 527 "pikchr.y"
23122315
{pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy49);}
2313
-#line 2338 "pikchr.c"
2316
+#line 2341 "pikchr.c"
23142317
break;
23152318
case 30: /* attribute ::= CLOSE */
2316
-#line 525 "pikchr.y"
2319
+#line 528 "pikchr.y"
23172320
{ pik_close_path(p,&yymsp[0].minor.yy0); }
2318
-#line 2343 "pikchr.c"
2321
+#line 2346 "pikchr.c"
23192322
break;
23202323
case 31: /* attribute ::= CHOP */
2321
-#line 526 "pikchr.y"
2324
+#line 529 "pikchr.y"
23222325
{ p->cur->bChop = 1; }
2323
-#line 2348 "pikchr.c"
2326
+#line 2351 "pikchr.c"
23242327
break;
23252328
case 32: /* attribute ::= FROM position */
2326
-#line 527 "pikchr.y"
2329
+#line 530 "pikchr.y"
23272330
{ pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy49); }
2328
-#line 2353 "pikchr.c"
2331
+#line 2356 "pikchr.c"
23292332
break;
23302333
case 33: /* attribute ::= TO position */
2331
-#line 528 "pikchr.y"
2334
+#line 531 "pikchr.y"
23322335
{ pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy49); }
2333
-#line 2358 "pikchr.c"
2336
+#line 2361 "pikchr.c"
23342337
break;
23352338
case 34: /* attribute ::= THEN */
2336
-#line 529 "pikchr.y"
2339
+#line 532 "pikchr.y"
23372340
{ pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2338
-#line 2363 "pikchr.c"
2341
+#line 2366 "pikchr.c"
23392342
break;
23402343
case 35: /* attribute ::= AT position */
2341
-#line 531 "pikchr.y"
2344
+#line 534 "pikchr.y"
23422345
{ pik_set_at(p,0,&yymsp[0].minor.yy49,&yymsp[-1].minor.yy0); }
2343
-#line 2368 "pikchr.c"
2346
+#line 2371 "pikchr.c"
23442347
break;
23452348
case 36: /* attribute ::= SAME */
2346
-#line 533 "pikchr.y"
2349
+#line 536 "pikchr.y"
23472350
{pik_same(p,0,&yymsp[0].minor.yy0);}
2348
-#line 2373 "pikchr.c"
2351
+#line 2376 "pikchr.c"
23492352
break;
23502353
case 37: /* attribute ::= SAME AS object */
2351
-#line 534 "pikchr.y"
2354
+#line 537 "pikchr.y"
23522355
{pik_same(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0);}
2353
-#line 2378 "pikchr.c"
2356
+#line 2381 "pikchr.c"
23542357
break;
23552358
case 38: /* attribute ::= STRING textposition */
2356
-#line 535 "pikchr.y"
2359
+#line 538 "pikchr.y"
23572360
{pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy52);}
2358
-#line 2383 "pikchr.c"
2361
+#line 2386 "pikchr.c"
23592362
break;
23602363
case 39: /* attribute ::= FIT */
2361
-#line 536 "pikchr.y"
2364
+#line 539 "pikchr.y"
23622365
{pik_size_to_fit(p,&yymsp[0].minor.yy0); }
2363
-#line 2388 "pikchr.c"
2366
+#line 2391 "pikchr.c"
23642367
break;
23652368
case 40: /* with ::= DOT_E edge AT position */
23662369
case 41: /* with ::= edge AT position */ yytestcase(yyruleno==41);
2367
-#line 543 "pikchr.y"
2370
+#line 546 "pikchr.y"
23682371
{ pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy49,&yymsp[-1].minor.yy0); }
2369
-#line 2394 "pikchr.c"
2372
+#line 2397 "pikchr.c"
23702373
break;
23712374
case 42: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2372
-#line 547 "pikchr.y"
2375
+#line 550 "pikchr.y"
23732376
{yylhsminor.yy0 = yymsp[0].minor.yy0;}
2374
-#line 2399 "pikchr.c"
2377
+#line 2402 "pikchr.c"
23752378
yymsp[0].minor.yy0 = yylhsminor.yy0;
23762379
break;
23772380
case 43: /* boolproperty ::= CW */
2378
-#line 558 "pikchr.y"
2381
+#line 561 "pikchr.y"
23792382
{p->cur->cw = 1;}
2380
-#line 2405 "pikchr.c"
2383
+#line 2408 "pikchr.c"
23812384
break;
23822385
case 44: /* boolproperty ::= CCW */
2383
-#line 559 "pikchr.y"
2386
+#line 562 "pikchr.y"
23842387
{p->cur->cw = 0;}
2385
-#line 2410 "pikchr.c"
2388
+#line 2413 "pikchr.c"
23862389
break;
23872390
case 45: /* boolproperty ::= LARROW */
2388
-#line 560 "pikchr.y"
2391
+#line 563 "pikchr.y"
23892392
{p->cur->larrow=1; p->cur->rarrow=0; }
2390
-#line 2415 "pikchr.c"
2393
+#line 2418 "pikchr.c"
23912394
break;
23922395
case 46: /* boolproperty ::= RARROW */
2393
-#line 561 "pikchr.y"
2396
+#line 564 "pikchr.y"
23942397
{p->cur->larrow=0; p->cur->rarrow=1; }
2395
-#line 2420 "pikchr.c"
2398
+#line 2423 "pikchr.c"
23962399
break;
23972400
case 47: /* boolproperty ::= LRARROW */
2398
-#line 562 "pikchr.y"
2401
+#line 565 "pikchr.y"
23992402
{p->cur->larrow=1; p->cur->rarrow=1; }
2400
-#line 2425 "pikchr.c"
2403
+#line 2428 "pikchr.c"
24012404
break;
24022405
case 48: /* boolproperty ::= INVIS */
2403
-#line 563 "pikchr.y"
2406
+#line 566 "pikchr.y"
24042407
{p->cur->sw = 0.0;}
2405
-#line 2430 "pikchr.c"
2408
+#line 2433 "pikchr.c"
24062409
break;
24072410
case 49: /* textposition ::= */
2408
-#line 565 "pikchr.y"
2411
+#line 568 "pikchr.y"
24092412
{yymsp[1].minor.yy52 = 0;}
2410
-#line 2435 "pikchr.c"
2413
+#line 2438 "pikchr.c"
24112414
break;
24122415
case 50: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED */
2413
-#line 568 "pikchr.y"
2416
+#line 571 "pikchr.y"
24142417
{yylhsminor.yy52 = pik_text_position(p,yymsp[-1].minor.yy52,&yymsp[0].minor.yy0);}
2415
-#line 2440 "pikchr.c"
2418
+#line 2443 "pikchr.c"
24162419
yymsp[-1].minor.yy52 = yylhsminor.yy52;
24172420
break;
24182421
case 51: /* position ::= expr COMMA expr */
2419
-#line 571 "pikchr.y"
2422
+#line 574 "pikchr.y"
24202423
{yylhsminor.yy49.x=yymsp[-2].minor.yy83; yylhsminor.yy49.y=yymsp[0].minor.yy83;}
2421
-#line 2446 "pikchr.c"
2424
+#line 2449 "pikchr.c"
24222425
yymsp[-2].minor.yy49 = yylhsminor.yy49;
24232426
break;
24242427
case 52: /* position ::= place PLUS expr COMMA expr */
2425
-#line 573 "pikchr.y"
2428
+#line 576 "pikchr.y"
24262429
{yylhsminor.yy49.x=yymsp[-4].minor.yy49.x+yymsp[-2].minor.yy83; yylhsminor.yy49.y=yymsp[-4].minor.yy49.y+yymsp[0].minor.yy83;}
2427
-#line 2452 "pikchr.c"
2430
+#line 2455 "pikchr.c"
24282431
yymsp[-4].minor.yy49 = yylhsminor.yy49;
24292432
break;
24302433
case 53: /* position ::= place MINUS expr COMMA expr */
2431
-#line 574 "pikchr.y"
2434
+#line 577 "pikchr.y"
24322435
{yylhsminor.yy49.x=yymsp[-4].minor.yy49.x-yymsp[-2].minor.yy83; yylhsminor.yy49.y=yymsp[-4].minor.yy49.y-yymsp[0].minor.yy83;}
2433
-#line 2458 "pikchr.c"
2436
+#line 2461 "pikchr.c"
24342437
yymsp[-4].minor.yy49 = yylhsminor.yy49;
24352438
break;
24362439
case 54: /* position ::= place PLUS LP expr COMMA expr RP */
2437
-#line 576 "pikchr.y"
2440
+#line 579 "pikchr.y"
24382441
{yylhsminor.yy49.x=yymsp[-6].minor.yy49.x+yymsp[-3].minor.yy83; yylhsminor.yy49.y=yymsp[-6].minor.yy49.y+yymsp[-1].minor.yy83;}
2439
-#line 2464 "pikchr.c"
2442
+#line 2467 "pikchr.c"
24402443
yymsp[-6].minor.yy49 = yylhsminor.yy49;
24412444
break;
24422445
case 55: /* position ::= place MINUS LP expr COMMA expr RP */
2443
-#line 578 "pikchr.y"
2446
+#line 581 "pikchr.y"
24442447
{yylhsminor.yy49.x=yymsp[-6].minor.yy49.x-yymsp[-3].minor.yy83; yylhsminor.yy49.y=yymsp[-6].minor.yy49.y-yymsp[-1].minor.yy83;}
2445
-#line 2470 "pikchr.c"
2448
+#line 2473 "pikchr.c"
24462449
yymsp[-6].minor.yy49 = yylhsminor.yy49;
24472450
break;
24482451
case 56: /* position ::= LP position COMMA position RP */
2449
-#line 579 "pikchr.y"
2452
+#line 582 "pikchr.y"
24502453
{yymsp[-4].minor.yy49.x=yymsp[-3].minor.yy49.x; yymsp[-4].minor.yy49.y=yymsp[-1].minor.yy49.y;}
2451
-#line 2476 "pikchr.c"
2454
+#line 2479 "pikchr.c"
24522455
break;
24532456
case 57: /* position ::= LP position RP */
2454
-#line 580 "pikchr.y"
2457
+#line 583 "pikchr.y"
24552458
{yymsp[-2].minor.yy49=yymsp[-1].minor.yy49;}
2456
-#line 2481 "pikchr.c"
2459
+#line 2484 "pikchr.c"
24572460
break;
24582461
case 58: /* position ::= expr between position AND position */
2459
-#line 582 "pikchr.y"
2462
+#line 585 "pikchr.y"
24602463
{yylhsminor.yy49 = pik_position_between(p,yymsp[-4].minor.yy83,yymsp[-2].minor.yy49,yymsp[0].minor.yy49);}
2461
-#line 2486 "pikchr.c"
2464
+#line 2489 "pikchr.c"
24622465
yymsp[-4].minor.yy49 = yylhsminor.yy49;
24632466
break;
24642467
case 59: /* position ::= expr ABOVE position */
2465
-#line 583 "pikchr.y"
2468
+#line 586 "pikchr.y"
24662469
{yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.y += yymsp[-2].minor.yy83;}
2467
-#line 2492 "pikchr.c"
2470
+#line 2495 "pikchr.c"
24682471
yymsp[-2].minor.yy49 = yylhsminor.yy49;
24692472
break;
24702473
case 60: /* position ::= expr BELOW position */
2471
-#line 584 "pikchr.y"
2474
+#line 587 "pikchr.y"
24722475
{yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.y -= yymsp[-2].minor.yy83;}
2473
-#line 2498 "pikchr.c"
2476
+#line 2501 "pikchr.c"
24742477
yymsp[-2].minor.yy49 = yylhsminor.yy49;
24752478
break;
24762479
case 61: /* position ::= expr LEFT OF position */
2477
-#line 585 "pikchr.y"
2480
+#line 588 "pikchr.y"
24782481
{yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.x -= yymsp[-3].minor.yy83;}
2479
-#line 2504 "pikchr.c"
2482
+#line 2507 "pikchr.c"
24802483
yymsp[-3].minor.yy49 = yylhsminor.yy49;
24812484
break;
24822485
case 62: /* position ::= expr RIGHT OF position */
2483
-#line 586 "pikchr.y"
2486
+#line 589 "pikchr.y"
24842487
{yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.x += yymsp[-3].minor.yy83;}
2485
-#line 2510 "pikchr.c"
2488
+#line 2513 "pikchr.c"
24862489
yymsp[-3].minor.yy49 = yylhsminor.yy49;
24872490
break;
24882491
case 63: /* position ::= expr EDGEPT OF position */
2489
-#line 588 "pikchr.y"
2492
+#line 591 "pikchr.y"
24902493
{yylhsminor.yy49 = pik_position_at_hdg(p,yymsp[-3].minor.yy83,&yymsp[-2].minor.yy0,yymsp[0].minor.yy49);}
2491
-#line 2516 "pikchr.c"
2494
+#line 2519 "pikchr.c"
24922495
yymsp[-3].minor.yy49 = yylhsminor.yy49;
24932496
break;
24942497
case 64: /* position ::= expr HEADING expr FROM position */
2495
-#line 590 "pikchr.y"
2498
+#line 593 "pikchr.y"
24962499
{yylhsminor.yy49 = pik_position_at_angle(p,yymsp[-4].minor.yy83,yymsp[-2].minor.yy83,yymsp[0].minor.yy49);}
2497
-#line 2522 "pikchr.c"
2500
+#line 2525 "pikchr.c"
24982501
yymsp[-4].minor.yy49 = yylhsminor.yy49;
24992502
break;
25002503
case 65: /* place ::= object */
2501
-#line 596 "pikchr.y"
2504
+#line 599 "pikchr.y"
25022505
{yylhsminor.yy49 = pik_place_of_elem(p,yymsp[0].minor.yy24,0);}
2503
-#line 2528 "pikchr.c"
2506
+#line 2531 "pikchr.c"
25042507
yymsp[0].minor.yy49 = yylhsminor.yy49;
25052508
break;
25062509
case 66: /* place ::= object DOT_E edge */
25072510
case 67: /* place ::= object DOT_L START */ yytestcase(yyruleno==67);
25082511
case 68: /* place ::= object DOT_L END */ yytestcase(yyruleno==68);
2509
-#line 597 "pikchr.y"
2512
+#line 600 "pikchr.y"
25102513
{yylhsminor.yy49 = pik_place_of_elem(p,yymsp[-2].minor.yy24,&yymsp[0].minor.yy0);}
2511
-#line 2536 "pikchr.c"
2514
+#line 2539 "pikchr.c"
25122515
yymsp[-2].minor.yy49 = yylhsminor.yy49;
25132516
break;
25142517
case 69: /* place ::= START OF object */
25152518
case 70: /* place ::= END OF object */ yytestcase(yyruleno==70);
25162519
case 71: /* place ::= edge OF object */ yytestcase(yyruleno==71);
2517
-#line 600 "pikchr.y"
2520
+#line 603 "pikchr.y"
25182521
{yylhsminor.yy49 = pik_place_of_elem(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0);}
2519
-#line 2544 "pikchr.c"
2522
+#line 2547 "pikchr.c"
25202523
yymsp[-2].minor.yy49 = yylhsminor.yy49;
25212524
break;
25222525
case 72: /* place ::= NTH VERTEX OF object */
2523
-#line 603 "pikchr.y"
2526
+#line 606 "pikchr.y"
25242527
{yylhsminor.yy49 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy24);}
2525
-#line 2550 "pikchr.c"
2528
+#line 2553 "pikchr.c"
25262529
yymsp[-3].minor.yy49 = yylhsminor.yy49;
25272530
break;
25282531
case 73: /* object ::= nth */
2529
-#line 606 "pikchr.y"
2532
+#line 609 "pikchr.y"
25302533
{yylhsminor.yy24 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2531
-#line 2556 "pikchr.c"
2534
+#line 2559 "pikchr.c"
25322535
yymsp[0].minor.yy24 = yylhsminor.yy24;
25332536
break;
25342537
case 74: /* object ::= nth OF|IN object */
2535
-#line 607 "pikchr.y"
2538
+#line 610 "pikchr.y"
25362539
{yylhsminor.yy24 = pik_find_nth(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0);}
2537
-#line 2562 "pikchr.c"
2540
+#line 2565 "pikchr.c"
25382541
yymsp[-2].minor.yy24 = yylhsminor.yy24;
25392542
break;
25402543
case 75: /* objectname ::= PLACENAME */
2541
-#line 609 "pikchr.y"
2544
+#line 612 "pikchr.y"
25422545
{yylhsminor.yy24 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2543
-#line 2568 "pikchr.c"
2546
+#line 2571 "pikchr.c"
25442547
yymsp[0].minor.yy24 = yylhsminor.yy24;
25452548
break;
25462549
case 76: /* objectname ::= objectname DOT_U PLACENAME */
2547
-#line 611 "pikchr.y"
2550
+#line 614 "pikchr.y"
25482551
{yylhsminor.yy24 = pik_find_byname(p,yymsp[-2].minor.yy24,&yymsp[0].minor.yy0);}
2549
-#line 2574 "pikchr.c"
2552
+#line 2577 "pikchr.c"
25502553
yymsp[-2].minor.yy24 = yylhsminor.yy24;
25512554
break;
25522555
case 77: /* nth ::= NTH CLASSNAME */
2553
-#line 613 "pikchr.y"
2556
+#line 616 "pikchr.y"
25542557
{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2555
-#line 2580 "pikchr.c"
2558
+#line 2583 "pikchr.c"
25562559
yymsp[-1].minor.yy0 = yylhsminor.yy0;
25572560
break;
25582561
case 78: /* nth ::= NTH LAST CLASSNAME */
2559
-#line 614 "pikchr.y"
2562
+#line 617 "pikchr.y"
25602563
{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2561
-#line 2586 "pikchr.c"
2564
+#line 2589 "pikchr.c"
25622565
yymsp[-2].minor.yy0 = yylhsminor.yy0;
25632566
break;
25642567
case 79: /* nth ::= LAST CLASSNAME */
2565
-#line 615 "pikchr.y"
2568
+#line 618 "pikchr.y"
25662569
{yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2567
-#line 2592 "pikchr.c"
2570
+#line 2595 "pikchr.c"
25682571
break;
25692572
case 80: /* nth ::= LAST */
2570
-#line 616 "pikchr.y"
2573
+#line 619 "pikchr.y"
25712574
{yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2572
-#line 2597 "pikchr.c"
2575
+#line 2600 "pikchr.c"
25732576
yymsp[0].minor.yy0 = yylhsminor.yy0;
25742577
break;
25752578
case 81: /* nth ::= NTH LB RB */
2576
-#line 617 "pikchr.y"
2579
+#line 620 "pikchr.y"
25772580
{yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2578
-#line 2603 "pikchr.c"
2581
+#line 2606 "pikchr.c"
25792582
yymsp[-2].minor.yy0 = yylhsminor.yy0;
25802583
break;
25812584
case 82: /* nth ::= NTH LAST LB RB */
2582
-#line 618 "pikchr.y"
2585
+#line 621 "pikchr.y"
25832586
{yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2584
-#line 2609 "pikchr.c"
2587
+#line 2612 "pikchr.c"
25852588
yymsp[-3].minor.yy0 = yylhsminor.yy0;
25862589
break;
25872590
case 83: /* nth ::= LAST LB RB */
2588
-#line 619 "pikchr.y"
2591
+#line 622 "pikchr.y"
25892592
{yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2590
-#line 2615 "pikchr.c"
2593
+#line 2618 "pikchr.c"
25912594
break;
25922595
case 84: /* expr ::= expr PLUS expr */
2593
-#line 626 "pikchr.y"
2596
+#line 629 "pikchr.y"
25942597
{yylhsminor.yy83=yymsp[-2].minor.yy83+yymsp[0].minor.yy83;}
2595
-#line 2620 "pikchr.c"
2598
+#line 2623 "pikchr.c"
25962599
yymsp[-2].minor.yy83 = yylhsminor.yy83;
25972600
break;
25982601
case 85: /* expr ::= expr MINUS expr */
2599
-#line 627 "pikchr.y"
2602
+#line 630 "pikchr.y"
26002603
{yylhsminor.yy83=yymsp[-2].minor.yy83-yymsp[0].minor.yy83;}
2601
-#line 2626 "pikchr.c"
2604
+#line 2629 "pikchr.c"
26022605
yymsp[-2].minor.yy83 = yylhsminor.yy83;
26032606
break;
26042607
case 86: /* expr ::= expr STAR expr */
2605
-#line 628 "pikchr.y"
2608
+#line 631 "pikchr.y"
26062609
{yylhsminor.yy83=yymsp[-2].minor.yy83*yymsp[0].minor.yy83;}
2607
-#line 2632 "pikchr.c"
2610
+#line 2635 "pikchr.c"
26082611
yymsp[-2].minor.yy83 = yylhsminor.yy83;
26092612
break;
26102613
case 87: /* expr ::= expr SLASH expr */
2611
-#line 629 "pikchr.y"
2614
+#line 632 "pikchr.y"
26122615
{
26132616
if( yymsp[0].minor.yy83==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy83 = 0.0; }
26142617
else{ yylhsminor.yy83 = yymsp[-2].minor.yy83/yymsp[0].minor.yy83; }
26152618
}
2616
-#line 2641 "pikchr.c"
2619
+#line 2644 "pikchr.c"
26172620
yymsp[-2].minor.yy83 = yylhsminor.yy83;
26182621
break;
26192622
case 88: /* expr ::= MINUS expr */
2620
-#line 633 "pikchr.y"
2623
+#line 636 "pikchr.y"
26212624
{yymsp[-1].minor.yy83=-yymsp[0].minor.yy83;}
2622
-#line 2647 "pikchr.c"
2625
+#line 2650 "pikchr.c"
26232626
break;
26242627
case 89: /* expr ::= PLUS expr */
2625
-#line 634 "pikchr.y"
2628
+#line 637 "pikchr.y"
26262629
{yymsp[-1].minor.yy83=yymsp[0].minor.yy83;}
2627
-#line 2652 "pikchr.c"
2630
+#line 2655 "pikchr.c"
26282631
break;
26292632
case 90: /* expr ::= LP expr RP */
2630
-#line 635 "pikchr.y"
2633
+#line 638 "pikchr.y"
26312634
{yymsp[-2].minor.yy83=yymsp[-1].minor.yy83;}
2632
-#line 2657 "pikchr.c"
2635
+#line 2660 "pikchr.c"
26332636
break;
26342637
case 91: /* expr ::= NUMBER */
2635
-#line 636 "pikchr.y"
2638
+#line 639 "pikchr.y"
26362639
{yylhsminor.yy83=pik_atof(p,&yymsp[0].minor.yy0);}
2637
-#line 2662 "pikchr.c"
2640
+#line 2665 "pikchr.c"
26382641
yymsp[0].minor.yy83 = yylhsminor.yy83;
26392642
break;
26402643
case 92: /* expr ::= ID */
2641
-#line 637 "pikchr.y"
2644
+#line 640 "pikchr.y"
26422645
{yylhsminor.yy83=pik_get_var(p,&yymsp[0].minor.yy0);}
2643
-#line 2668 "pikchr.c"
2646
+#line 2671 "pikchr.c"
26442647
yymsp[0].minor.yy83 = yylhsminor.yy83;
26452648
break;
26462649
case 93: /* expr ::= FUNC1 LP expr RP */
2647
-#line 638 "pikchr.y"
2650
+#line 641 "pikchr.y"
26482651
{yylhsminor.yy83 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy83,0.0);}
2649
-#line 2674 "pikchr.c"
2652
+#line 2677 "pikchr.c"
26502653
yymsp[-3].minor.yy83 = yylhsminor.yy83;
26512654
break;
26522655
case 94: /* expr ::= FUNC2 LP expr COMMA expr RP */
2653
-#line 639 "pikchr.y"
2656
+#line 642 "pikchr.y"
26542657
{yylhsminor.yy83 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy83,yymsp[-1].minor.yy83);}
2655
-#line 2680 "pikchr.c"
2658
+#line 2683 "pikchr.c"
26562659
yymsp[-5].minor.yy83 = yylhsminor.yy83;
26572660
break;
26582661
case 95: /* expr ::= object DOT_L locproperty */
26592662
case 96: /* expr ::= object DOT_L numproperty */ yytestcase(yyruleno==96);
26602663
case 97: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==97);
26612664
case 98: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==98);
2662
-#line 641 "pikchr.y"
2665
+#line 644 "pikchr.y"
26632666
{yylhsminor.yy83=pik_property_of(p,yymsp[-2].minor.yy24,&yymsp[0].minor.yy0);}
2664
-#line 2689 "pikchr.c"
2667
+#line 2692 "pikchr.c"
26652668
yymsp[-2].minor.yy83 = yylhsminor.yy83;
26662669
break;
26672670
case 99: /* expr ::= object DOT_E edge DOT_L X */
2668
-#line 645 "pikchr.y"
2671
+#line 648 "pikchr.y"
26692672
{yylhsminor.yy83=pik_place_of_elem(p,yymsp[-4].minor.yy24,&yymsp[-2].minor.yy0).x;}
2670
-#line 2695 "pikchr.c"
2673
+#line 2698 "pikchr.c"
26712674
yymsp[-4].minor.yy83 = yylhsminor.yy83;
26722675
break;
26732676
case 100: /* expr ::= object DOT_E edge DOT_L Y */
2674
-#line 646 "pikchr.y"
2677
+#line 649 "pikchr.y"
26752678
{yylhsminor.yy83=pik_place_of_elem(p,yymsp[-4].minor.yy24,&yymsp[-2].minor.yy0).y;}
2676
-#line 2701 "pikchr.c"
2679
+#line 2704 "pikchr.c"
26772680
yymsp[-4].minor.yy83 = yylhsminor.yy83;
26782681
break;
26792682
case 101: /* expr ::= LP locproperty OF object RP */
26802683
case 102: /* expr ::= LP dashproperty OF object RP */ yytestcase(yyruleno==102);
26812684
case 103: /* expr ::= LP numproperty OF object RP */ yytestcase(yyruleno==103);
26822685
case 104: /* expr ::= LP colorproperty OF object RP */ yytestcase(yyruleno==104);
2683
-#line 647 "pikchr.y"
2686
+#line 650 "pikchr.y"
26842687
{yymsp[-4].minor.yy83=pik_property_of(p,yymsp[-1].minor.yy24,&yymsp[-3].minor.yy0);}
2685
-#line 2710 "pikchr.c"
2688
+#line 2713 "pikchr.c"
26862689
break;
26872690
case 105: /* expr ::= NTH VERTEX OF object DOT_L X */
2688
-#line 653 "pikchr.y"
2691
+#line 656 "pikchr.y"
26892692
{yylhsminor.yy83 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy24).x;}
2690
-#line 2715 "pikchr.c"
2693
+#line 2718 "pikchr.c"
26912694
yymsp[-5].minor.yy83 = yylhsminor.yy83;
26922695
break;
26932696
case 106: /* expr ::= NTH VERTEX OF object DOT_L Y */
2694
-#line 655 "pikchr.y"
2697
+#line 658 "pikchr.y"
26952698
{yylhsminor.yy83 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy24).y;}
2696
-#line 2721 "pikchr.c"
2699
+#line 2724 "pikchr.c"
26972700
yymsp[-5].minor.yy83 = yylhsminor.yy83;
26982701
break;
26992702
default:
27002703
/* (107) lvalue ::= ID */ yytestcase(yyruleno==107);
27012704
/* (108) lvalue ::= FILL */ yytestcase(yyruleno==108);
@@ -2789,18 +2792,18 @@
27892792
){
27902793
pik_parserARG_FETCH
27912794
pik_parserCTX_FETCH
27922795
#define TOKEN yyminor
27932796
/************ Begin %syntax_error code ****************************************/
2794
-#line 443 "pikchr.y"
2797
+#line 446 "pikchr.y"
27952798
27962799
if( TOKEN.z && TOKEN.z[0] ){
27972800
pik_error(p, &TOKEN, "syntax error");
27982801
}else{
27992802
pik_error(p, 0, "syntax error");
28002803
}
2801
-#line 2826 "pikchr.c"
2804
+#line 2829 "pikchr.c"
28022805
/************ End %syntax_error code ******************************************/
28032806
pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
28042807
pik_parserCTX_STORE
28052808
}
28062809
@@ -3029,11 +3032,11 @@
30293032
#else
30303033
(void)iToken;
30313034
return 0;
30323035
#endif
30333036
}
3034
-#line 665 "pikchr.y"
3037
+#line 668 "pikchr.y"
30353038
30363039
30373040
30383041
/* Chart of the 140 official HTML color names with their
30393042
** corresponding RGB value.
@@ -6327,6 +6330,6 @@
63276330
printf("</body></html>\n");
63286331
return 0;
63296332
}
63306333
#endif /* PIKCHR_SHELL */
63316334
6332
-#line 6357 "pikchr.c"
6335
+#line 6360 "pikchr.c"
63336336
--- src/pikchr.c
+++ src/pikchr.c
@@ -121,10 +121,13 @@
121 #include <string.h>
122 #include <ctype.h>
123 #include <math.h>
124 #include <assert.h>
125 #define count(X) (sizeof(X)/sizeof(X[0]))
 
 
 
126
127 typedef struct Pik Pik; /* Complete parsing context */
128 typedef struct PToken PToken; /* A single token */
129 typedef struct PElem PElem; /* A single diagram object or "element" */
130 typedef struct PEList PEList; /* A list of elements */
@@ -405,11 +408,11 @@
405 static void pik_same(Pik *p, PElem*, PToken*);
406 static PPoint pik_nth_vertex(Pik *p, PToken *pNth, PToken *pErr, PElem *pElem);
407 static PToken pik_next_semantic_token(Pik *p, PToken *pThis);
408
409
410 #line 436 "pikchr.c"
411 /**************** End of %include directives **********************************/
412 /* These constants specify the various numeric values for terminal symbols.
413 ***************** Begin token definitions *************************************/
414 #ifndef T_ID
415 #define T_ID 1
@@ -1470,22 +1473,22 @@
1470 ** inside the C code.
1471 */
1472 /********* Begin destructor definitions ***************************************/
1473 case 82: /* element_list */
1474 {
1475 #line 419 "pikchr.y"
1476 pik_elist_free(p,(yypminor->yy42));
1477 #line 1502 "pikchr.c"
1478 }
1479 break;
1480 case 83: /* element */
1481 case 84: /* unnamed_element */
1482 case 85: /* basetype */
1483 {
1484 #line 421 "pikchr.y"
1485 pik_elem_free(p,(yypminor->yy24));
1486 #line 1511 "pikchr.c"
1487 }
1488 break;
1489 /********* End destructor definitions *****************************************/
1490 default: break; /* If no destructor action specified: do nothing */
1491 }
@@ -1699,14 +1702,14 @@
1699 #endif
1700 while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
1701 /* Here code is inserted which will execute if the parser
1702 ** stack every overflows */
1703 /******** Begin %stack_overflow code ******************************************/
1704 #line 450 "pikchr.y"
1705
1706 pik_error(p, 0, "parser stack overflow");
1707 #line 1732 "pikchr.c"
1708 /******** End %stack_overflow code ********************************************/
1709 pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */
1710 pik_parserCTX_STORE
1711 }
1712
@@ -2153,549 +2156,549 @@
2153 ** break;
2154 */
2155 /********** Begin reduce actions **********************************************/
2156 YYMINORTYPE yylhsminor;
2157 case 0: /* document ::= element_list */
2158 #line 454 "pikchr.y"
2159 {pik_render(p,yymsp[0].minor.yy42);}
2160 #line 2185 "pikchr.c"
2161 break;
2162 case 1: /* element_list ::= element */
2163 #line 457 "pikchr.y"
2164 { yylhsminor.yy42 = pik_elist_append(p,0,yymsp[0].minor.yy24); }
2165 #line 2190 "pikchr.c"
2166 yymsp[0].minor.yy42 = yylhsminor.yy42;
2167 break;
2168 case 2: /* element_list ::= element_list EOL element */
2169 #line 459 "pikchr.y"
2170 { yylhsminor.yy42 = pik_elist_append(p,yymsp[-2].minor.yy42,yymsp[0].minor.yy24); }
2171 #line 2196 "pikchr.c"
2172 yymsp[-2].minor.yy42 = yylhsminor.yy42;
2173 break;
2174 case 3: /* element ::= */
2175 #line 462 "pikchr.y"
2176 { yymsp[1].minor.yy24 = 0; }
2177 #line 2202 "pikchr.c"
2178 break;
2179 case 4: /* element ::= direction */
2180 #line 463 "pikchr.y"
2181 { pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy24=0; }
2182 #line 2207 "pikchr.c"
2183 yymsp[0].minor.yy24 = yylhsminor.yy24;
2184 break;
2185 case 5: /* element ::= lvalue ASSIGN rvalue */
2186 #line 464 "pikchr.y"
2187 {pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy83,&yymsp[-1].minor.yy0); yylhsminor.yy24=0;}
2188 #line 2213 "pikchr.c"
2189 yymsp[-2].minor.yy24 = yylhsminor.yy24;
2190 break;
2191 case 6: /* element ::= PLACENAME COLON unnamed_element */
2192 #line 466 "pikchr.y"
2193 { yylhsminor.yy24 = yymsp[0].minor.yy24; pik_elem_setname(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0); }
2194 #line 2219 "pikchr.c"
2195 yymsp[-2].minor.yy24 = yylhsminor.yy24;
2196 break;
2197 case 7: /* element ::= PLACENAME COLON position */
2198 #line 468 "pikchr.y"
2199 { yylhsminor.yy24 = pik_elem_new(p,0,0,0);
2200 if(yylhsminor.yy24){ yylhsminor.yy24->ptAt = yymsp[0].minor.yy49; pik_elem_setname(p,yylhsminor.yy24,&yymsp[-2].minor.yy0); }}
2201 #line 2226 "pikchr.c"
2202 yymsp[-2].minor.yy24 = yylhsminor.yy24;
2203 break;
2204 case 8: /* element ::= unnamed_element */
2205 #line 470 "pikchr.y"
2206 {yylhsminor.yy24 = yymsp[0].minor.yy24;}
2207 #line 2232 "pikchr.c"
2208 yymsp[0].minor.yy24 = yylhsminor.yy24;
2209 break;
2210 case 9: /* element ::= print prlist */
2211 #line 471 "pikchr.y"
2212 {pik_append(p,"<br>\n",5); yymsp[-1].minor.yy24=0;}
2213 #line 2238 "pikchr.c"
2214 break;
2215 case 10: /* rvalue ::= PLACENAME */
2216 #line 481 "pikchr.y"
2217 {yylhsminor.yy83 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2218 #line 2243 "pikchr.c"
2219 yymsp[0].minor.yy83 = yylhsminor.yy83;
2220 break;
2221 case 11: /* pritem ::= rvalue */
2222 #line 486 "pikchr.y"
2223 {pik_append_num(p,"",yymsp[0].minor.yy83);}
2224 #line 2249 "pikchr.c"
2225 break;
2226 case 12: /* pritem ::= STRING */
2227 #line 487 "pikchr.y"
2228 {pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2229 #line 2254 "pikchr.c"
2230 break;
2231 case 13: /* prsep ::= COMMA */
2232 #line 488 "pikchr.y"
2233 {pik_append(p, " ", 1);}
2234 #line 2259 "pikchr.c"
2235 break;
2236 case 14: /* unnamed_element ::= basetype attribute_list */
2237 #line 491 "pikchr.y"
2238 {yylhsminor.yy24 = yymsp[-1].minor.yy24; pik_after_adding_attributes(p,yylhsminor.yy24);}
2239 #line 2264 "pikchr.c"
2240 yymsp[-1].minor.yy24 = yylhsminor.yy24;
2241 break;
2242 case 15: /* basetype ::= CLASSNAME */
2243 #line 493 "pikchr.y"
2244 {yylhsminor.yy24 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2245 #line 2270 "pikchr.c"
2246 yymsp[0].minor.yy24 = yylhsminor.yy24;
2247 break;
2248 case 16: /* basetype ::= STRING textposition */
2249 #line 495 "pikchr.y"
2250 {yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy52; yylhsminor.yy24 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2251 #line 2276 "pikchr.c"
2252 yymsp[-1].minor.yy24 = yylhsminor.yy24;
2253 break;
2254 case 17: /* basetype ::= LB savelist element_list RB */
2255 #line 497 "pikchr.y"
2256 { p->list = yymsp[-2].minor.yy42; yymsp[-3].minor.yy24 = pik_elem_new(p,0,0,yymsp[-1].minor.yy42); if(yymsp[-3].minor.yy24) yymsp[-3].minor.yy24->errTok = yymsp[0].minor.yy0; }
2257 #line 2282 "pikchr.c"
2258 break;
2259 case 18: /* savelist ::= */
2260 #line 502 "pikchr.y"
2261 {yymsp[1].minor.yy42 = p->list; p->list = 0;}
2262 #line 2287 "pikchr.c"
2263 break;
2264 case 19: /* attribute_list ::= expr */
2265 #line 509 "pikchr.y"
2266 { pik_add_direction(p,0,&yymsp[0].minor.yy83,0);}
2267 #line 2292 "pikchr.c"
2268 break;
2269 case 20: /* attribute_list ::= expr PERCENT */
2270 #line 510 "pikchr.y"
2271 { pik_add_direction(p,0,&yymsp[-1].minor.yy83,1);}
2272 #line 2297 "pikchr.c"
2273 break;
2274 case 21: /* attribute ::= numproperty expr PERCENT */
2275 #line 515 "pikchr.y"
2276 { pik_set_numprop(p,&yymsp[-2].minor.yy0,0.0,yymsp[-1].minor.yy83/100.0); }
2277 #line 2302 "pikchr.c"
2278 break;
2279 case 22: /* attribute ::= numproperty expr */
2280 case 25: /* attribute ::= colorproperty rvalue */ yytestcase(yyruleno==25);
2281 #line 516 "pikchr.y"
2282 { pik_set_numprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy83,0.0); }
2283 #line 2308 "pikchr.c"
2284 break;
2285 case 23: /* attribute ::= dashproperty expr */
2286 #line 517 "pikchr.y"
2287 { pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy83); }
2288 #line 2313 "pikchr.c"
2289 break;
2290 case 24: /* attribute ::= dashproperty */
2291 #line 518 "pikchr.y"
2292 { pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2293 #line 2318 "pikchr.c"
2294 break;
2295 case 26: /* attribute ::= direction expr PERCENT */
2296 #line 521 "pikchr.y"
2297 { pik_add_direction(p,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy83,1);}
2298 #line 2323 "pikchr.c"
2299 break;
2300 case 27: /* attribute ::= direction expr */
2301 #line 522 "pikchr.y"
2302 { pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy83,0);}
2303 #line 2328 "pikchr.c"
2304 break;
2305 case 28: /* attribute ::= direction */
2306 #line 523 "pikchr.y"
2307 { pik_add_direction(p,&yymsp[0].minor.yy0,0,0); }
2308 #line 2333 "pikchr.c"
2309 break;
2310 case 29: /* attribute ::= direction even position */
2311 #line 524 "pikchr.y"
2312 {pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy49);}
2313 #line 2338 "pikchr.c"
2314 break;
2315 case 30: /* attribute ::= CLOSE */
2316 #line 525 "pikchr.y"
2317 { pik_close_path(p,&yymsp[0].minor.yy0); }
2318 #line 2343 "pikchr.c"
2319 break;
2320 case 31: /* attribute ::= CHOP */
2321 #line 526 "pikchr.y"
2322 { p->cur->bChop = 1; }
2323 #line 2348 "pikchr.c"
2324 break;
2325 case 32: /* attribute ::= FROM position */
2326 #line 527 "pikchr.y"
2327 { pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy49); }
2328 #line 2353 "pikchr.c"
2329 break;
2330 case 33: /* attribute ::= TO position */
2331 #line 528 "pikchr.y"
2332 { pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy49); }
2333 #line 2358 "pikchr.c"
2334 break;
2335 case 34: /* attribute ::= THEN */
2336 #line 529 "pikchr.y"
2337 { pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2338 #line 2363 "pikchr.c"
2339 break;
2340 case 35: /* attribute ::= AT position */
2341 #line 531 "pikchr.y"
2342 { pik_set_at(p,0,&yymsp[0].minor.yy49,&yymsp[-1].minor.yy0); }
2343 #line 2368 "pikchr.c"
2344 break;
2345 case 36: /* attribute ::= SAME */
2346 #line 533 "pikchr.y"
2347 {pik_same(p,0,&yymsp[0].minor.yy0);}
2348 #line 2373 "pikchr.c"
2349 break;
2350 case 37: /* attribute ::= SAME AS object */
2351 #line 534 "pikchr.y"
2352 {pik_same(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0);}
2353 #line 2378 "pikchr.c"
2354 break;
2355 case 38: /* attribute ::= STRING textposition */
2356 #line 535 "pikchr.y"
2357 {pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy52);}
2358 #line 2383 "pikchr.c"
2359 break;
2360 case 39: /* attribute ::= FIT */
2361 #line 536 "pikchr.y"
2362 {pik_size_to_fit(p,&yymsp[0].minor.yy0); }
2363 #line 2388 "pikchr.c"
2364 break;
2365 case 40: /* with ::= DOT_E edge AT position */
2366 case 41: /* with ::= edge AT position */ yytestcase(yyruleno==41);
2367 #line 543 "pikchr.y"
2368 { pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy49,&yymsp[-1].minor.yy0); }
2369 #line 2394 "pikchr.c"
2370 break;
2371 case 42: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2372 #line 547 "pikchr.y"
2373 {yylhsminor.yy0 = yymsp[0].minor.yy0;}
2374 #line 2399 "pikchr.c"
2375 yymsp[0].minor.yy0 = yylhsminor.yy0;
2376 break;
2377 case 43: /* boolproperty ::= CW */
2378 #line 558 "pikchr.y"
2379 {p->cur->cw = 1;}
2380 #line 2405 "pikchr.c"
2381 break;
2382 case 44: /* boolproperty ::= CCW */
2383 #line 559 "pikchr.y"
2384 {p->cur->cw = 0;}
2385 #line 2410 "pikchr.c"
2386 break;
2387 case 45: /* boolproperty ::= LARROW */
2388 #line 560 "pikchr.y"
2389 {p->cur->larrow=1; p->cur->rarrow=0; }
2390 #line 2415 "pikchr.c"
2391 break;
2392 case 46: /* boolproperty ::= RARROW */
2393 #line 561 "pikchr.y"
2394 {p->cur->larrow=0; p->cur->rarrow=1; }
2395 #line 2420 "pikchr.c"
2396 break;
2397 case 47: /* boolproperty ::= LRARROW */
2398 #line 562 "pikchr.y"
2399 {p->cur->larrow=1; p->cur->rarrow=1; }
2400 #line 2425 "pikchr.c"
2401 break;
2402 case 48: /* boolproperty ::= INVIS */
2403 #line 563 "pikchr.y"
2404 {p->cur->sw = 0.0;}
2405 #line 2430 "pikchr.c"
2406 break;
2407 case 49: /* textposition ::= */
2408 #line 565 "pikchr.y"
2409 {yymsp[1].minor.yy52 = 0;}
2410 #line 2435 "pikchr.c"
2411 break;
2412 case 50: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED */
2413 #line 568 "pikchr.y"
2414 {yylhsminor.yy52 = pik_text_position(p,yymsp[-1].minor.yy52,&yymsp[0].minor.yy0);}
2415 #line 2440 "pikchr.c"
2416 yymsp[-1].minor.yy52 = yylhsminor.yy52;
2417 break;
2418 case 51: /* position ::= expr COMMA expr */
2419 #line 571 "pikchr.y"
2420 {yylhsminor.yy49.x=yymsp[-2].minor.yy83; yylhsminor.yy49.y=yymsp[0].minor.yy83;}
2421 #line 2446 "pikchr.c"
2422 yymsp[-2].minor.yy49 = yylhsminor.yy49;
2423 break;
2424 case 52: /* position ::= place PLUS expr COMMA expr */
2425 #line 573 "pikchr.y"
2426 {yylhsminor.yy49.x=yymsp[-4].minor.yy49.x+yymsp[-2].minor.yy83; yylhsminor.yy49.y=yymsp[-4].minor.yy49.y+yymsp[0].minor.yy83;}
2427 #line 2452 "pikchr.c"
2428 yymsp[-4].minor.yy49 = yylhsminor.yy49;
2429 break;
2430 case 53: /* position ::= place MINUS expr COMMA expr */
2431 #line 574 "pikchr.y"
2432 {yylhsminor.yy49.x=yymsp[-4].minor.yy49.x-yymsp[-2].minor.yy83; yylhsminor.yy49.y=yymsp[-4].minor.yy49.y-yymsp[0].minor.yy83;}
2433 #line 2458 "pikchr.c"
2434 yymsp[-4].minor.yy49 = yylhsminor.yy49;
2435 break;
2436 case 54: /* position ::= place PLUS LP expr COMMA expr RP */
2437 #line 576 "pikchr.y"
2438 {yylhsminor.yy49.x=yymsp[-6].minor.yy49.x+yymsp[-3].minor.yy83; yylhsminor.yy49.y=yymsp[-6].minor.yy49.y+yymsp[-1].minor.yy83;}
2439 #line 2464 "pikchr.c"
2440 yymsp[-6].minor.yy49 = yylhsminor.yy49;
2441 break;
2442 case 55: /* position ::= place MINUS LP expr COMMA expr RP */
2443 #line 578 "pikchr.y"
2444 {yylhsminor.yy49.x=yymsp[-6].minor.yy49.x-yymsp[-3].minor.yy83; yylhsminor.yy49.y=yymsp[-6].minor.yy49.y-yymsp[-1].minor.yy83;}
2445 #line 2470 "pikchr.c"
2446 yymsp[-6].minor.yy49 = yylhsminor.yy49;
2447 break;
2448 case 56: /* position ::= LP position COMMA position RP */
2449 #line 579 "pikchr.y"
2450 {yymsp[-4].minor.yy49.x=yymsp[-3].minor.yy49.x; yymsp[-4].minor.yy49.y=yymsp[-1].minor.yy49.y;}
2451 #line 2476 "pikchr.c"
2452 break;
2453 case 57: /* position ::= LP position RP */
2454 #line 580 "pikchr.y"
2455 {yymsp[-2].minor.yy49=yymsp[-1].minor.yy49;}
2456 #line 2481 "pikchr.c"
2457 break;
2458 case 58: /* position ::= expr between position AND position */
2459 #line 582 "pikchr.y"
2460 {yylhsminor.yy49 = pik_position_between(p,yymsp[-4].minor.yy83,yymsp[-2].minor.yy49,yymsp[0].minor.yy49);}
2461 #line 2486 "pikchr.c"
2462 yymsp[-4].minor.yy49 = yylhsminor.yy49;
2463 break;
2464 case 59: /* position ::= expr ABOVE position */
2465 #line 583 "pikchr.y"
2466 {yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.y += yymsp[-2].minor.yy83;}
2467 #line 2492 "pikchr.c"
2468 yymsp[-2].minor.yy49 = yylhsminor.yy49;
2469 break;
2470 case 60: /* position ::= expr BELOW position */
2471 #line 584 "pikchr.y"
2472 {yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.y -= yymsp[-2].minor.yy83;}
2473 #line 2498 "pikchr.c"
2474 yymsp[-2].minor.yy49 = yylhsminor.yy49;
2475 break;
2476 case 61: /* position ::= expr LEFT OF position */
2477 #line 585 "pikchr.y"
2478 {yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.x -= yymsp[-3].minor.yy83;}
2479 #line 2504 "pikchr.c"
2480 yymsp[-3].minor.yy49 = yylhsminor.yy49;
2481 break;
2482 case 62: /* position ::= expr RIGHT OF position */
2483 #line 586 "pikchr.y"
2484 {yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.x += yymsp[-3].minor.yy83;}
2485 #line 2510 "pikchr.c"
2486 yymsp[-3].minor.yy49 = yylhsminor.yy49;
2487 break;
2488 case 63: /* position ::= expr EDGEPT OF position */
2489 #line 588 "pikchr.y"
2490 {yylhsminor.yy49 = pik_position_at_hdg(p,yymsp[-3].minor.yy83,&yymsp[-2].minor.yy0,yymsp[0].minor.yy49);}
2491 #line 2516 "pikchr.c"
2492 yymsp[-3].minor.yy49 = yylhsminor.yy49;
2493 break;
2494 case 64: /* position ::= expr HEADING expr FROM position */
2495 #line 590 "pikchr.y"
2496 {yylhsminor.yy49 = pik_position_at_angle(p,yymsp[-4].minor.yy83,yymsp[-2].minor.yy83,yymsp[0].minor.yy49);}
2497 #line 2522 "pikchr.c"
2498 yymsp[-4].minor.yy49 = yylhsminor.yy49;
2499 break;
2500 case 65: /* place ::= object */
2501 #line 596 "pikchr.y"
2502 {yylhsminor.yy49 = pik_place_of_elem(p,yymsp[0].minor.yy24,0);}
2503 #line 2528 "pikchr.c"
2504 yymsp[0].minor.yy49 = yylhsminor.yy49;
2505 break;
2506 case 66: /* place ::= object DOT_E edge */
2507 case 67: /* place ::= object DOT_L START */ yytestcase(yyruleno==67);
2508 case 68: /* place ::= object DOT_L END */ yytestcase(yyruleno==68);
2509 #line 597 "pikchr.y"
2510 {yylhsminor.yy49 = pik_place_of_elem(p,yymsp[-2].minor.yy24,&yymsp[0].minor.yy0);}
2511 #line 2536 "pikchr.c"
2512 yymsp[-2].minor.yy49 = yylhsminor.yy49;
2513 break;
2514 case 69: /* place ::= START OF object */
2515 case 70: /* place ::= END OF object */ yytestcase(yyruleno==70);
2516 case 71: /* place ::= edge OF object */ yytestcase(yyruleno==71);
2517 #line 600 "pikchr.y"
2518 {yylhsminor.yy49 = pik_place_of_elem(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0);}
2519 #line 2544 "pikchr.c"
2520 yymsp[-2].minor.yy49 = yylhsminor.yy49;
2521 break;
2522 case 72: /* place ::= NTH VERTEX OF object */
2523 #line 603 "pikchr.y"
2524 {yylhsminor.yy49 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy24);}
2525 #line 2550 "pikchr.c"
2526 yymsp[-3].minor.yy49 = yylhsminor.yy49;
2527 break;
2528 case 73: /* object ::= nth */
2529 #line 606 "pikchr.y"
2530 {yylhsminor.yy24 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2531 #line 2556 "pikchr.c"
2532 yymsp[0].minor.yy24 = yylhsminor.yy24;
2533 break;
2534 case 74: /* object ::= nth OF|IN object */
2535 #line 607 "pikchr.y"
2536 {yylhsminor.yy24 = pik_find_nth(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0);}
2537 #line 2562 "pikchr.c"
2538 yymsp[-2].minor.yy24 = yylhsminor.yy24;
2539 break;
2540 case 75: /* objectname ::= PLACENAME */
2541 #line 609 "pikchr.y"
2542 {yylhsminor.yy24 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2543 #line 2568 "pikchr.c"
2544 yymsp[0].minor.yy24 = yylhsminor.yy24;
2545 break;
2546 case 76: /* objectname ::= objectname DOT_U PLACENAME */
2547 #line 611 "pikchr.y"
2548 {yylhsminor.yy24 = pik_find_byname(p,yymsp[-2].minor.yy24,&yymsp[0].minor.yy0);}
2549 #line 2574 "pikchr.c"
2550 yymsp[-2].minor.yy24 = yylhsminor.yy24;
2551 break;
2552 case 77: /* nth ::= NTH CLASSNAME */
2553 #line 613 "pikchr.y"
2554 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2555 #line 2580 "pikchr.c"
2556 yymsp[-1].minor.yy0 = yylhsminor.yy0;
2557 break;
2558 case 78: /* nth ::= NTH LAST CLASSNAME */
2559 #line 614 "pikchr.y"
2560 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2561 #line 2586 "pikchr.c"
2562 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2563 break;
2564 case 79: /* nth ::= LAST CLASSNAME */
2565 #line 615 "pikchr.y"
2566 {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2567 #line 2592 "pikchr.c"
2568 break;
2569 case 80: /* nth ::= LAST */
2570 #line 616 "pikchr.y"
2571 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2572 #line 2597 "pikchr.c"
2573 yymsp[0].minor.yy0 = yylhsminor.yy0;
2574 break;
2575 case 81: /* nth ::= NTH LB RB */
2576 #line 617 "pikchr.y"
2577 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2578 #line 2603 "pikchr.c"
2579 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2580 break;
2581 case 82: /* nth ::= NTH LAST LB RB */
2582 #line 618 "pikchr.y"
2583 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2584 #line 2609 "pikchr.c"
2585 yymsp[-3].minor.yy0 = yylhsminor.yy0;
2586 break;
2587 case 83: /* nth ::= LAST LB RB */
2588 #line 619 "pikchr.y"
2589 {yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2590 #line 2615 "pikchr.c"
2591 break;
2592 case 84: /* expr ::= expr PLUS expr */
2593 #line 626 "pikchr.y"
2594 {yylhsminor.yy83=yymsp[-2].minor.yy83+yymsp[0].minor.yy83;}
2595 #line 2620 "pikchr.c"
2596 yymsp[-2].minor.yy83 = yylhsminor.yy83;
2597 break;
2598 case 85: /* expr ::= expr MINUS expr */
2599 #line 627 "pikchr.y"
2600 {yylhsminor.yy83=yymsp[-2].minor.yy83-yymsp[0].minor.yy83;}
2601 #line 2626 "pikchr.c"
2602 yymsp[-2].minor.yy83 = yylhsminor.yy83;
2603 break;
2604 case 86: /* expr ::= expr STAR expr */
2605 #line 628 "pikchr.y"
2606 {yylhsminor.yy83=yymsp[-2].minor.yy83*yymsp[0].minor.yy83;}
2607 #line 2632 "pikchr.c"
2608 yymsp[-2].minor.yy83 = yylhsminor.yy83;
2609 break;
2610 case 87: /* expr ::= expr SLASH expr */
2611 #line 629 "pikchr.y"
2612 {
2613 if( yymsp[0].minor.yy83==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy83 = 0.0; }
2614 else{ yylhsminor.yy83 = yymsp[-2].minor.yy83/yymsp[0].minor.yy83; }
2615 }
2616 #line 2641 "pikchr.c"
2617 yymsp[-2].minor.yy83 = yylhsminor.yy83;
2618 break;
2619 case 88: /* expr ::= MINUS expr */
2620 #line 633 "pikchr.y"
2621 {yymsp[-1].minor.yy83=-yymsp[0].minor.yy83;}
2622 #line 2647 "pikchr.c"
2623 break;
2624 case 89: /* expr ::= PLUS expr */
2625 #line 634 "pikchr.y"
2626 {yymsp[-1].minor.yy83=yymsp[0].minor.yy83;}
2627 #line 2652 "pikchr.c"
2628 break;
2629 case 90: /* expr ::= LP expr RP */
2630 #line 635 "pikchr.y"
2631 {yymsp[-2].minor.yy83=yymsp[-1].minor.yy83;}
2632 #line 2657 "pikchr.c"
2633 break;
2634 case 91: /* expr ::= NUMBER */
2635 #line 636 "pikchr.y"
2636 {yylhsminor.yy83=pik_atof(p,&yymsp[0].minor.yy0);}
2637 #line 2662 "pikchr.c"
2638 yymsp[0].minor.yy83 = yylhsminor.yy83;
2639 break;
2640 case 92: /* expr ::= ID */
2641 #line 637 "pikchr.y"
2642 {yylhsminor.yy83=pik_get_var(p,&yymsp[0].minor.yy0);}
2643 #line 2668 "pikchr.c"
2644 yymsp[0].minor.yy83 = yylhsminor.yy83;
2645 break;
2646 case 93: /* expr ::= FUNC1 LP expr RP */
2647 #line 638 "pikchr.y"
2648 {yylhsminor.yy83 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy83,0.0);}
2649 #line 2674 "pikchr.c"
2650 yymsp[-3].minor.yy83 = yylhsminor.yy83;
2651 break;
2652 case 94: /* expr ::= FUNC2 LP expr COMMA expr RP */
2653 #line 639 "pikchr.y"
2654 {yylhsminor.yy83 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy83,yymsp[-1].minor.yy83);}
2655 #line 2680 "pikchr.c"
2656 yymsp[-5].minor.yy83 = yylhsminor.yy83;
2657 break;
2658 case 95: /* expr ::= object DOT_L locproperty */
2659 case 96: /* expr ::= object DOT_L numproperty */ yytestcase(yyruleno==96);
2660 case 97: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==97);
2661 case 98: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==98);
2662 #line 641 "pikchr.y"
2663 {yylhsminor.yy83=pik_property_of(p,yymsp[-2].minor.yy24,&yymsp[0].minor.yy0);}
2664 #line 2689 "pikchr.c"
2665 yymsp[-2].minor.yy83 = yylhsminor.yy83;
2666 break;
2667 case 99: /* expr ::= object DOT_E edge DOT_L X */
2668 #line 645 "pikchr.y"
2669 {yylhsminor.yy83=pik_place_of_elem(p,yymsp[-4].minor.yy24,&yymsp[-2].minor.yy0).x;}
2670 #line 2695 "pikchr.c"
2671 yymsp[-4].minor.yy83 = yylhsminor.yy83;
2672 break;
2673 case 100: /* expr ::= object DOT_E edge DOT_L Y */
2674 #line 646 "pikchr.y"
2675 {yylhsminor.yy83=pik_place_of_elem(p,yymsp[-4].minor.yy24,&yymsp[-2].minor.yy0).y;}
2676 #line 2701 "pikchr.c"
2677 yymsp[-4].minor.yy83 = yylhsminor.yy83;
2678 break;
2679 case 101: /* expr ::= LP locproperty OF object RP */
2680 case 102: /* expr ::= LP dashproperty OF object RP */ yytestcase(yyruleno==102);
2681 case 103: /* expr ::= LP numproperty OF object RP */ yytestcase(yyruleno==103);
2682 case 104: /* expr ::= LP colorproperty OF object RP */ yytestcase(yyruleno==104);
2683 #line 647 "pikchr.y"
2684 {yymsp[-4].minor.yy83=pik_property_of(p,yymsp[-1].minor.yy24,&yymsp[-3].minor.yy0);}
2685 #line 2710 "pikchr.c"
2686 break;
2687 case 105: /* expr ::= NTH VERTEX OF object DOT_L X */
2688 #line 653 "pikchr.y"
2689 {yylhsminor.yy83 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy24).x;}
2690 #line 2715 "pikchr.c"
2691 yymsp[-5].minor.yy83 = yylhsminor.yy83;
2692 break;
2693 case 106: /* expr ::= NTH VERTEX OF object DOT_L Y */
2694 #line 655 "pikchr.y"
2695 {yylhsminor.yy83 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy24).y;}
2696 #line 2721 "pikchr.c"
2697 yymsp[-5].minor.yy83 = yylhsminor.yy83;
2698 break;
2699 default:
2700 /* (107) lvalue ::= ID */ yytestcase(yyruleno==107);
2701 /* (108) lvalue ::= FILL */ yytestcase(yyruleno==108);
@@ -2789,18 +2792,18 @@
2789 ){
2790 pik_parserARG_FETCH
2791 pik_parserCTX_FETCH
2792 #define TOKEN yyminor
2793 /************ Begin %syntax_error code ****************************************/
2794 #line 443 "pikchr.y"
2795
2796 if( TOKEN.z && TOKEN.z[0] ){
2797 pik_error(p, &TOKEN, "syntax error");
2798 }else{
2799 pik_error(p, 0, "syntax error");
2800 }
2801 #line 2826 "pikchr.c"
2802 /************ End %syntax_error code ******************************************/
2803 pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
2804 pik_parserCTX_STORE
2805 }
2806
@@ -3029,11 +3032,11 @@
3029 #else
3030 (void)iToken;
3031 return 0;
3032 #endif
3033 }
3034 #line 665 "pikchr.y"
3035
3036
3037
3038 /* Chart of the 140 official HTML color names with their
3039 ** corresponding RGB value.
@@ -6327,6 +6330,6 @@
6327 printf("</body></html>\n");
6328 return 0;
6329 }
6330 #endif /* PIKCHR_SHELL */
6331
6332 #line 6357 "pikchr.c"
6333
--- src/pikchr.c
+++ src/pikchr.c
@@ -121,10 +121,13 @@
121 #include <string.h>
122 #include <ctype.h>
123 #include <math.h>
124 #include <assert.h>
125 #define count(X) (sizeof(X)/sizeof(X[0]))
126 #ifndef M_PI
127 # define M_PI 3.1415926535897932385
128 #endif
129
130 typedef struct Pik Pik; /* Complete parsing context */
131 typedef struct PToken PToken; /* A single token */
132 typedef struct PElem PElem; /* A single diagram object or "element" */
133 typedef struct PEList PEList; /* A list of elements */
@@ -405,11 +408,11 @@
408 static void pik_same(Pik *p, PElem*, PToken*);
409 static PPoint pik_nth_vertex(Pik *p, PToken *pNth, PToken *pErr, PElem *pElem);
410 static PToken pik_next_semantic_token(Pik *p, PToken *pThis);
411
412
413 #line 439 "pikchr.c"
414 /**************** End of %include directives **********************************/
415 /* These constants specify the various numeric values for terminal symbols.
416 ***************** Begin token definitions *************************************/
417 #ifndef T_ID
418 #define T_ID 1
@@ -1470,22 +1473,22 @@
1473 ** inside the C code.
1474 */
1475 /********* Begin destructor definitions ***************************************/
1476 case 82: /* element_list */
1477 {
1478 #line 422 "pikchr.y"
1479 pik_elist_free(p,(yypminor->yy42));
1480 #line 1505 "pikchr.c"
1481 }
1482 break;
1483 case 83: /* element */
1484 case 84: /* unnamed_element */
1485 case 85: /* basetype */
1486 {
1487 #line 424 "pikchr.y"
1488 pik_elem_free(p,(yypminor->yy24));
1489 #line 1514 "pikchr.c"
1490 }
1491 break;
1492 /********* End destructor definitions *****************************************/
1493 default: break; /* If no destructor action specified: do nothing */
1494 }
@@ -1699,14 +1702,14 @@
1702 #endif
1703 while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
1704 /* Here code is inserted which will execute if the parser
1705 ** stack every overflows */
1706 /******** Begin %stack_overflow code ******************************************/
1707 #line 453 "pikchr.y"
1708
1709 pik_error(p, 0, "parser stack overflow");
1710 #line 1735 "pikchr.c"
1711 /******** End %stack_overflow code ********************************************/
1712 pik_parserARG_STORE /* Suppress warning about unused %extra_argument var */
1713 pik_parserCTX_STORE
1714 }
1715
@@ -2153,549 +2156,549 @@
2156 ** break;
2157 */
2158 /********** Begin reduce actions **********************************************/
2159 YYMINORTYPE yylhsminor;
2160 case 0: /* document ::= element_list */
2161 #line 457 "pikchr.y"
2162 {pik_render(p,yymsp[0].minor.yy42);}
2163 #line 2188 "pikchr.c"
2164 break;
2165 case 1: /* element_list ::= element */
2166 #line 460 "pikchr.y"
2167 { yylhsminor.yy42 = pik_elist_append(p,0,yymsp[0].minor.yy24); }
2168 #line 2193 "pikchr.c"
2169 yymsp[0].minor.yy42 = yylhsminor.yy42;
2170 break;
2171 case 2: /* element_list ::= element_list EOL element */
2172 #line 462 "pikchr.y"
2173 { yylhsminor.yy42 = pik_elist_append(p,yymsp[-2].minor.yy42,yymsp[0].minor.yy24); }
2174 #line 2199 "pikchr.c"
2175 yymsp[-2].minor.yy42 = yylhsminor.yy42;
2176 break;
2177 case 3: /* element ::= */
2178 #line 465 "pikchr.y"
2179 { yymsp[1].minor.yy24 = 0; }
2180 #line 2205 "pikchr.c"
2181 break;
2182 case 4: /* element ::= direction */
2183 #line 466 "pikchr.y"
2184 { pik_set_direction(p,yymsp[0].minor.yy0.eCode); yylhsminor.yy24=0; }
2185 #line 2210 "pikchr.c"
2186 yymsp[0].minor.yy24 = yylhsminor.yy24;
2187 break;
2188 case 5: /* element ::= lvalue ASSIGN rvalue */
2189 #line 467 "pikchr.y"
2190 {pik_set_var(p,&yymsp[-2].minor.yy0,yymsp[0].minor.yy83,&yymsp[-1].minor.yy0); yylhsminor.yy24=0;}
2191 #line 2216 "pikchr.c"
2192 yymsp[-2].minor.yy24 = yylhsminor.yy24;
2193 break;
2194 case 6: /* element ::= PLACENAME COLON unnamed_element */
2195 #line 469 "pikchr.y"
2196 { yylhsminor.yy24 = yymsp[0].minor.yy24; pik_elem_setname(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0); }
2197 #line 2222 "pikchr.c"
2198 yymsp[-2].minor.yy24 = yylhsminor.yy24;
2199 break;
2200 case 7: /* element ::= PLACENAME COLON position */
2201 #line 471 "pikchr.y"
2202 { yylhsminor.yy24 = pik_elem_new(p,0,0,0);
2203 if(yylhsminor.yy24){ yylhsminor.yy24->ptAt = yymsp[0].minor.yy49; pik_elem_setname(p,yylhsminor.yy24,&yymsp[-2].minor.yy0); }}
2204 #line 2229 "pikchr.c"
2205 yymsp[-2].minor.yy24 = yylhsminor.yy24;
2206 break;
2207 case 8: /* element ::= unnamed_element */
2208 #line 473 "pikchr.y"
2209 {yylhsminor.yy24 = yymsp[0].minor.yy24;}
2210 #line 2235 "pikchr.c"
2211 yymsp[0].minor.yy24 = yylhsminor.yy24;
2212 break;
2213 case 9: /* element ::= print prlist */
2214 #line 474 "pikchr.y"
2215 {pik_append(p,"<br>\n",5); yymsp[-1].minor.yy24=0;}
2216 #line 2241 "pikchr.c"
2217 break;
2218 case 10: /* rvalue ::= PLACENAME */
2219 #line 484 "pikchr.y"
2220 {yylhsminor.yy83 = pik_lookup_color(p,&yymsp[0].minor.yy0);}
2221 #line 2246 "pikchr.c"
2222 yymsp[0].minor.yy83 = yylhsminor.yy83;
2223 break;
2224 case 11: /* pritem ::= rvalue */
2225 #line 489 "pikchr.y"
2226 {pik_append_num(p,"",yymsp[0].minor.yy83);}
2227 #line 2252 "pikchr.c"
2228 break;
2229 case 12: /* pritem ::= STRING */
2230 #line 490 "pikchr.y"
2231 {pik_append_text(p,yymsp[0].minor.yy0.z+1,yymsp[0].minor.yy0.n-2,0);}
2232 #line 2257 "pikchr.c"
2233 break;
2234 case 13: /* prsep ::= COMMA */
2235 #line 491 "pikchr.y"
2236 {pik_append(p, " ", 1);}
2237 #line 2262 "pikchr.c"
2238 break;
2239 case 14: /* unnamed_element ::= basetype attribute_list */
2240 #line 494 "pikchr.y"
2241 {yylhsminor.yy24 = yymsp[-1].minor.yy24; pik_after_adding_attributes(p,yylhsminor.yy24);}
2242 #line 2267 "pikchr.c"
2243 yymsp[-1].minor.yy24 = yylhsminor.yy24;
2244 break;
2245 case 15: /* basetype ::= CLASSNAME */
2246 #line 496 "pikchr.y"
2247 {yylhsminor.yy24 = pik_elem_new(p,&yymsp[0].minor.yy0,0,0); }
2248 #line 2273 "pikchr.c"
2249 yymsp[0].minor.yy24 = yylhsminor.yy24;
2250 break;
2251 case 16: /* basetype ::= STRING textposition */
2252 #line 498 "pikchr.y"
2253 {yymsp[-1].minor.yy0.eCode = yymsp[0].minor.yy52; yylhsminor.yy24 = pik_elem_new(p,0,&yymsp[-1].minor.yy0,0); }
2254 #line 2279 "pikchr.c"
2255 yymsp[-1].minor.yy24 = yylhsminor.yy24;
2256 break;
2257 case 17: /* basetype ::= LB savelist element_list RB */
2258 #line 500 "pikchr.y"
2259 { p->list = yymsp[-2].minor.yy42; yymsp[-3].minor.yy24 = pik_elem_new(p,0,0,yymsp[-1].minor.yy42); if(yymsp[-3].minor.yy24) yymsp[-3].minor.yy24->errTok = yymsp[0].minor.yy0; }
2260 #line 2285 "pikchr.c"
2261 break;
2262 case 18: /* savelist ::= */
2263 #line 505 "pikchr.y"
2264 {yymsp[1].minor.yy42 = p->list; p->list = 0;}
2265 #line 2290 "pikchr.c"
2266 break;
2267 case 19: /* attribute_list ::= expr */
2268 #line 512 "pikchr.y"
2269 { pik_add_direction(p,0,&yymsp[0].minor.yy83,0);}
2270 #line 2295 "pikchr.c"
2271 break;
2272 case 20: /* attribute_list ::= expr PERCENT */
2273 #line 513 "pikchr.y"
2274 { pik_add_direction(p,0,&yymsp[-1].minor.yy83,1);}
2275 #line 2300 "pikchr.c"
2276 break;
2277 case 21: /* attribute ::= numproperty expr PERCENT */
2278 #line 518 "pikchr.y"
2279 { pik_set_numprop(p,&yymsp[-2].minor.yy0,0.0,yymsp[-1].minor.yy83/100.0); }
2280 #line 2305 "pikchr.c"
2281 break;
2282 case 22: /* attribute ::= numproperty expr */
2283 case 25: /* attribute ::= colorproperty rvalue */ yytestcase(yyruleno==25);
2284 #line 519 "pikchr.y"
2285 { pik_set_numprop(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy83,0.0); }
2286 #line 2311 "pikchr.c"
2287 break;
2288 case 23: /* attribute ::= dashproperty expr */
2289 #line 520 "pikchr.y"
2290 { pik_set_dashed(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy83); }
2291 #line 2316 "pikchr.c"
2292 break;
2293 case 24: /* attribute ::= dashproperty */
2294 #line 521 "pikchr.y"
2295 { pik_set_dashed(p,&yymsp[0].minor.yy0,0); }
2296 #line 2321 "pikchr.c"
2297 break;
2298 case 26: /* attribute ::= direction expr PERCENT */
2299 #line 524 "pikchr.y"
2300 { pik_add_direction(p,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy83,1);}
2301 #line 2326 "pikchr.c"
2302 break;
2303 case 27: /* attribute ::= direction expr */
2304 #line 525 "pikchr.y"
2305 { pik_add_direction(p,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy83,0);}
2306 #line 2331 "pikchr.c"
2307 break;
2308 case 28: /* attribute ::= direction */
2309 #line 526 "pikchr.y"
2310 { pik_add_direction(p,&yymsp[0].minor.yy0,0,0); }
2311 #line 2336 "pikchr.c"
2312 break;
2313 case 29: /* attribute ::= direction even position */
2314 #line 527 "pikchr.y"
2315 {pik_evenwith(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy49);}
2316 #line 2341 "pikchr.c"
2317 break;
2318 case 30: /* attribute ::= CLOSE */
2319 #line 528 "pikchr.y"
2320 { pik_close_path(p,&yymsp[0].minor.yy0); }
2321 #line 2346 "pikchr.c"
2322 break;
2323 case 31: /* attribute ::= CHOP */
2324 #line 529 "pikchr.y"
2325 { p->cur->bChop = 1; }
2326 #line 2351 "pikchr.c"
2327 break;
2328 case 32: /* attribute ::= FROM position */
2329 #line 530 "pikchr.y"
2330 { pik_set_from(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy49); }
2331 #line 2356 "pikchr.c"
2332 break;
2333 case 33: /* attribute ::= TO position */
2334 #line 531 "pikchr.y"
2335 { pik_add_to(p,p->cur,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy49); }
2336 #line 2361 "pikchr.c"
2337 break;
2338 case 34: /* attribute ::= THEN */
2339 #line 532 "pikchr.y"
2340 { pik_then(p, &yymsp[0].minor.yy0, p->cur); }
2341 #line 2366 "pikchr.c"
2342 break;
2343 case 35: /* attribute ::= AT position */
2344 #line 534 "pikchr.y"
2345 { pik_set_at(p,0,&yymsp[0].minor.yy49,&yymsp[-1].minor.yy0); }
2346 #line 2371 "pikchr.c"
2347 break;
2348 case 36: /* attribute ::= SAME */
2349 #line 536 "pikchr.y"
2350 {pik_same(p,0,&yymsp[0].minor.yy0);}
2351 #line 2376 "pikchr.c"
2352 break;
2353 case 37: /* attribute ::= SAME AS object */
2354 #line 537 "pikchr.y"
2355 {pik_same(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0);}
2356 #line 2381 "pikchr.c"
2357 break;
2358 case 38: /* attribute ::= STRING textposition */
2359 #line 538 "pikchr.y"
2360 {pik_add_txt(p,&yymsp[-1].minor.yy0,yymsp[0].minor.yy52);}
2361 #line 2386 "pikchr.c"
2362 break;
2363 case 39: /* attribute ::= FIT */
2364 #line 539 "pikchr.y"
2365 {pik_size_to_fit(p,&yymsp[0].minor.yy0); }
2366 #line 2391 "pikchr.c"
2367 break;
2368 case 40: /* with ::= DOT_E edge AT position */
2369 case 41: /* with ::= edge AT position */ yytestcase(yyruleno==41);
2370 #line 546 "pikchr.y"
2371 { pik_set_at(p,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy49,&yymsp[-1].minor.yy0); }
2372 #line 2397 "pikchr.c"
2373 break;
2374 case 42: /* numproperty ::= HEIGHT|WIDTH|RADIUS|DIAMETER|THICKNESS */
2375 #line 550 "pikchr.y"
2376 {yylhsminor.yy0 = yymsp[0].minor.yy0;}
2377 #line 2402 "pikchr.c"
2378 yymsp[0].minor.yy0 = yylhsminor.yy0;
2379 break;
2380 case 43: /* boolproperty ::= CW */
2381 #line 561 "pikchr.y"
2382 {p->cur->cw = 1;}
2383 #line 2408 "pikchr.c"
2384 break;
2385 case 44: /* boolproperty ::= CCW */
2386 #line 562 "pikchr.y"
2387 {p->cur->cw = 0;}
2388 #line 2413 "pikchr.c"
2389 break;
2390 case 45: /* boolproperty ::= LARROW */
2391 #line 563 "pikchr.y"
2392 {p->cur->larrow=1; p->cur->rarrow=0; }
2393 #line 2418 "pikchr.c"
2394 break;
2395 case 46: /* boolproperty ::= RARROW */
2396 #line 564 "pikchr.y"
2397 {p->cur->larrow=0; p->cur->rarrow=1; }
2398 #line 2423 "pikchr.c"
2399 break;
2400 case 47: /* boolproperty ::= LRARROW */
2401 #line 565 "pikchr.y"
2402 {p->cur->larrow=1; p->cur->rarrow=1; }
2403 #line 2428 "pikchr.c"
2404 break;
2405 case 48: /* boolproperty ::= INVIS */
2406 #line 566 "pikchr.y"
2407 {p->cur->sw = 0.0;}
2408 #line 2433 "pikchr.c"
2409 break;
2410 case 49: /* textposition ::= */
2411 #line 568 "pikchr.y"
2412 {yymsp[1].minor.yy52 = 0;}
2413 #line 2438 "pikchr.c"
2414 break;
2415 case 50: /* textposition ::= textposition CENTER|LJUST|RJUST|ABOVE|BELOW|ITALIC|BOLD|ALIGNED */
2416 #line 571 "pikchr.y"
2417 {yylhsminor.yy52 = pik_text_position(p,yymsp[-1].minor.yy52,&yymsp[0].minor.yy0);}
2418 #line 2443 "pikchr.c"
2419 yymsp[-1].minor.yy52 = yylhsminor.yy52;
2420 break;
2421 case 51: /* position ::= expr COMMA expr */
2422 #line 574 "pikchr.y"
2423 {yylhsminor.yy49.x=yymsp[-2].minor.yy83; yylhsminor.yy49.y=yymsp[0].minor.yy83;}
2424 #line 2449 "pikchr.c"
2425 yymsp[-2].minor.yy49 = yylhsminor.yy49;
2426 break;
2427 case 52: /* position ::= place PLUS expr COMMA expr */
2428 #line 576 "pikchr.y"
2429 {yylhsminor.yy49.x=yymsp[-4].minor.yy49.x+yymsp[-2].minor.yy83; yylhsminor.yy49.y=yymsp[-4].minor.yy49.y+yymsp[0].minor.yy83;}
2430 #line 2455 "pikchr.c"
2431 yymsp[-4].minor.yy49 = yylhsminor.yy49;
2432 break;
2433 case 53: /* position ::= place MINUS expr COMMA expr */
2434 #line 577 "pikchr.y"
2435 {yylhsminor.yy49.x=yymsp[-4].minor.yy49.x-yymsp[-2].minor.yy83; yylhsminor.yy49.y=yymsp[-4].minor.yy49.y-yymsp[0].minor.yy83;}
2436 #line 2461 "pikchr.c"
2437 yymsp[-4].minor.yy49 = yylhsminor.yy49;
2438 break;
2439 case 54: /* position ::= place PLUS LP expr COMMA expr RP */
2440 #line 579 "pikchr.y"
2441 {yylhsminor.yy49.x=yymsp[-6].minor.yy49.x+yymsp[-3].minor.yy83; yylhsminor.yy49.y=yymsp[-6].minor.yy49.y+yymsp[-1].minor.yy83;}
2442 #line 2467 "pikchr.c"
2443 yymsp[-6].minor.yy49 = yylhsminor.yy49;
2444 break;
2445 case 55: /* position ::= place MINUS LP expr COMMA expr RP */
2446 #line 581 "pikchr.y"
2447 {yylhsminor.yy49.x=yymsp[-6].minor.yy49.x-yymsp[-3].minor.yy83; yylhsminor.yy49.y=yymsp[-6].minor.yy49.y-yymsp[-1].minor.yy83;}
2448 #line 2473 "pikchr.c"
2449 yymsp[-6].minor.yy49 = yylhsminor.yy49;
2450 break;
2451 case 56: /* position ::= LP position COMMA position RP */
2452 #line 582 "pikchr.y"
2453 {yymsp[-4].minor.yy49.x=yymsp[-3].minor.yy49.x; yymsp[-4].minor.yy49.y=yymsp[-1].minor.yy49.y;}
2454 #line 2479 "pikchr.c"
2455 break;
2456 case 57: /* position ::= LP position RP */
2457 #line 583 "pikchr.y"
2458 {yymsp[-2].minor.yy49=yymsp[-1].minor.yy49;}
2459 #line 2484 "pikchr.c"
2460 break;
2461 case 58: /* position ::= expr between position AND position */
2462 #line 585 "pikchr.y"
2463 {yylhsminor.yy49 = pik_position_between(p,yymsp[-4].minor.yy83,yymsp[-2].minor.yy49,yymsp[0].minor.yy49);}
2464 #line 2489 "pikchr.c"
2465 yymsp[-4].minor.yy49 = yylhsminor.yy49;
2466 break;
2467 case 59: /* position ::= expr ABOVE position */
2468 #line 586 "pikchr.y"
2469 {yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.y += yymsp[-2].minor.yy83;}
2470 #line 2495 "pikchr.c"
2471 yymsp[-2].minor.yy49 = yylhsminor.yy49;
2472 break;
2473 case 60: /* position ::= expr BELOW position */
2474 #line 587 "pikchr.y"
2475 {yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.y -= yymsp[-2].minor.yy83;}
2476 #line 2501 "pikchr.c"
2477 yymsp[-2].minor.yy49 = yylhsminor.yy49;
2478 break;
2479 case 61: /* position ::= expr LEFT OF position */
2480 #line 588 "pikchr.y"
2481 {yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.x -= yymsp[-3].minor.yy83;}
2482 #line 2507 "pikchr.c"
2483 yymsp[-3].minor.yy49 = yylhsminor.yy49;
2484 break;
2485 case 62: /* position ::= expr RIGHT OF position */
2486 #line 589 "pikchr.y"
2487 {yylhsminor.yy49=yymsp[0].minor.yy49; yylhsminor.yy49.x += yymsp[-3].minor.yy83;}
2488 #line 2513 "pikchr.c"
2489 yymsp[-3].minor.yy49 = yylhsminor.yy49;
2490 break;
2491 case 63: /* position ::= expr EDGEPT OF position */
2492 #line 591 "pikchr.y"
2493 {yylhsminor.yy49 = pik_position_at_hdg(p,yymsp[-3].minor.yy83,&yymsp[-2].minor.yy0,yymsp[0].minor.yy49);}
2494 #line 2519 "pikchr.c"
2495 yymsp[-3].minor.yy49 = yylhsminor.yy49;
2496 break;
2497 case 64: /* position ::= expr HEADING expr FROM position */
2498 #line 593 "pikchr.y"
2499 {yylhsminor.yy49 = pik_position_at_angle(p,yymsp[-4].minor.yy83,yymsp[-2].minor.yy83,yymsp[0].minor.yy49);}
2500 #line 2525 "pikchr.c"
2501 yymsp[-4].minor.yy49 = yylhsminor.yy49;
2502 break;
2503 case 65: /* place ::= object */
2504 #line 599 "pikchr.y"
2505 {yylhsminor.yy49 = pik_place_of_elem(p,yymsp[0].minor.yy24,0);}
2506 #line 2531 "pikchr.c"
2507 yymsp[0].minor.yy49 = yylhsminor.yy49;
2508 break;
2509 case 66: /* place ::= object DOT_E edge */
2510 case 67: /* place ::= object DOT_L START */ yytestcase(yyruleno==67);
2511 case 68: /* place ::= object DOT_L END */ yytestcase(yyruleno==68);
2512 #line 600 "pikchr.y"
2513 {yylhsminor.yy49 = pik_place_of_elem(p,yymsp[-2].minor.yy24,&yymsp[0].minor.yy0);}
2514 #line 2539 "pikchr.c"
2515 yymsp[-2].minor.yy49 = yylhsminor.yy49;
2516 break;
2517 case 69: /* place ::= START OF object */
2518 case 70: /* place ::= END OF object */ yytestcase(yyruleno==70);
2519 case 71: /* place ::= edge OF object */ yytestcase(yyruleno==71);
2520 #line 603 "pikchr.y"
2521 {yylhsminor.yy49 = pik_place_of_elem(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0);}
2522 #line 2547 "pikchr.c"
2523 yymsp[-2].minor.yy49 = yylhsminor.yy49;
2524 break;
2525 case 72: /* place ::= NTH VERTEX OF object */
2526 #line 606 "pikchr.y"
2527 {yylhsminor.yy49 = pik_nth_vertex(p,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,yymsp[0].minor.yy24);}
2528 #line 2553 "pikchr.c"
2529 yymsp[-3].minor.yy49 = yylhsminor.yy49;
2530 break;
2531 case 73: /* object ::= nth */
2532 #line 609 "pikchr.y"
2533 {yylhsminor.yy24 = pik_find_nth(p,0,&yymsp[0].minor.yy0);}
2534 #line 2559 "pikchr.c"
2535 yymsp[0].minor.yy24 = yylhsminor.yy24;
2536 break;
2537 case 74: /* object ::= nth OF|IN object */
2538 #line 610 "pikchr.y"
2539 {yylhsminor.yy24 = pik_find_nth(p,yymsp[0].minor.yy24,&yymsp[-2].minor.yy0);}
2540 #line 2565 "pikchr.c"
2541 yymsp[-2].minor.yy24 = yylhsminor.yy24;
2542 break;
2543 case 75: /* objectname ::= PLACENAME */
2544 #line 612 "pikchr.y"
2545 {yylhsminor.yy24 = pik_find_byname(p,0,&yymsp[0].minor.yy0);}
2546 #line 2571 "pikchr.c"
2547 yymsp[0].minor.yy24 = yylhsminor.yy24;
2548 break;
2549 case 76: /* objectname ::= objectname DOT_U PLACENAME */
2550 #line 614 "pikchr.y"
2551 {yylhsminor.yy24 = pik_find_byname(p,yymsp[-2].minor.yy24,&yymsp[0].minor.yy0);}
2552 #line 2577 "pikchr.c"
2553 yymsp[-2].minor.yy24 = yylhsminor.yy24;
2554 break;
2555 case 77: /* nth ::= NTH CLASSNAME */
2556 #line 616 "pikchr.y"
2557 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-1].minor.yy0); }
2558 #line 2583 "pikchr.c"
2559 yymsp[-1].minor.yy0 = yylhsminor.yy0;
2560 break;
2561 case 78: /* nth ::= NTH LAST CLASSNAME */
2562 #line 617 "pikchr.y"
2563 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-2].minor.yy0); }
2564 #line 2589 "pikchr.c"
2565 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2566 break;
2567 case 79: /* nth ::= LAST CLASSNAME */
2568 #line 618 "pikchr.y"
2569 {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.eCode = -1;}
2570 #line 2595 "pikchr.c"
2571 break;
2572 case 80: /* nth ::= LAST */
2573 #line 619 "pikchr.y"
2574 {yylhsminor.yy0=yymsp[0].minor.yy0; yylhsminor.yy0.eCode = -1;}
2575 #line 2600 "pikchr.c"
2576 yymsp[0].minor.yy0 = yylhsminor.yy0;
2577 break;
2578 case 81: /* nth ::= NTH LB RB */
2579 #line 620 "pikchr.y"
2580 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = pik_nth_value(p,&yymsp[-2].minor.yy0);}
2581 #line 2606 "pikchr.c"
2582 yymsp[-2].minor.yy0 = yylhsminor.yy0;
2583 break;
2584 case 82: /* nth ::= NTH LAST LB RB */
2585 #line 621 "pikchr.y"
2586 {yylhsminor.yy0=yymsp[-1].minor.yy0; yylhsminor.yy0.eCode = -pik_nth_value(p,&yymsp[-3].minor.yy0);}
2587 #line 2612 "pikchr.c"
2588 yymsp[-3].minor.yy0 = yylhsminor.yy0;
2589 break;
2590 case 83: /* nth ::= LAST LB RB */
2591 #line 622 "pikchr.y"
2592 {yymsp[-2].minor.yy0=yymsp[-1].minor.yy0; yymsp[-2].minor.yy0.eCode = -1; }
2593 #line 2618 "pikchr.c"
2594 break;
2595 case 84: /* expr ::= expr PLUS expr */
2596 #line 629 "pikchr.y"
2597 {yylhsminor.yy83=yymsp[-2].minor.yy83+yymsp[0].minor.yy83;}
2598 #line 2623 "pikchr.c"
2599 yymsp[-2].minor.yy83 = yylhsminor.yy83;
2600 break;
2601 case 85: /* expr ::= expr MINUS expr */
2602 #line 630 "pikchr.y"
2603 {yylhsminor.yy83=yymsp[-2].minor.yy83-yymsp[0].minor.yy83;}
2604 #line 2629 "pikchr.c"
2605 yymsp[-2].minor.yy83 = yylhsminor.yy83;
2606 break;
2607 case 86: /* expr ::= expr STAR expr */
2608 #line 631 "pikchr.y"
2609 {yylhsminor.yy83=yymsp[-2].minor.yy83*yymsp[0].minor.yy83;}
2610 #line 2635 "pikchr.c"
2611 yymsp[-2].minor.yy83 = yylhsminor.yy83;
2612 break;
2613 case 87: /* expr ::= expr SLASH expr */
2614 #line 632 "pikchr.y"
2615 {
2616 if( yymsp[0].minor.yy83==0.0 ){ pik_error(p, &yymsp[-1].minor.yy0, "division by zero"); yylhsminor.yy83 = 0.0; }
2617 else{ yylhsminor.yy83 = yymsp[-2].minor.yy83/yymsp[0].minor.yy83; }
2618 }
2619 #line 2644 "pikchr.c"
2620 yymsp[-2].minor.yy83 = yylhsminor.yy83;
2621 break;
2622 case 88: /* expr ::= MINUS expr */
2623 #line 636 "pikchr.y"
2624 {yymsp[-1].minor.yy83=-yymsp[0].minor.yy83;}
2625 #line 2650 "pikchr.c"
2626 break;
2627 case 89: /* expr ::= PLUS expr */
2628 #line 637 "pikchr.y"
2629 {yymsp[-1].minor.yy83=yymsp[0].minor.yy83;}
2630 #line 2655 "pikchr.c"
2631 break;
2632 case 90: /* expr ::= LP expr RP */
2633 #line 638 "pikchr.y"
2634 {yymsp[-2].minor.yy83=yymsp[-1].minor.yy83;}
2635 #line 2660 "pikchr.c"
2636 break;
2637 case 91: /* expr ::= NUMBER */
2638 #line 639 "pikchr.y"
2639 {yylhsminor.yy83=pik_atof(p,&yymsp[0].minor.yy0);}
2640 #line 2665 "pikchr.c"
2641 yymsp[0].minor.yy83 = yylhsminor.yy83;
2642 break;
2643 case 92: /* expr ::= ID */
2644 #line 640 "pikchr.y"
2645 {yylhsminor.yy83=pik_get_var(p,&yymsp[0].minor.yy0);}
2646 #line 2671 "pikchr.c"
2647 yymsp[0].minor.yy83 = yylhsminor.yy83;
2648 break;
2649 case 93: /* expr ::= FUNC1 LP expr RP */
2650 #line 641 "pikchr.y"
2651 {yylhsminor.yy83 = pik_func(p,&yymsp[-3].minor.yy0,yymsp[-1].minor.yy83,0.0);}
2652 #line 2677 "pikchr.c"
2653 yymsp[-3].minor.yy83 = yylhsminor.yy83;
2654 break;
2655 case 94: /* expr ::= FUNC2 LP expr COMMA expr RP */
2656 #line 642 "pikchr.y"
2657 {yylhsminor.yy83 = pik_func(p,&yymsp[-5].minor.yy0,yymsp[-3].minor.yy83,yymsp[-1].minor.yy83);}
2658 #line 2683 "pikchr.c"
2659 yymsp[-5].minor.yy83 = yylhsminor.yy83;
2660 break;
2661 case 95: /* expr ::= object DOT_L locproperty */
2662 case 96: /* expr ::= object DOT_L numproperty */ yytestcase(yyruleno==96);
2663 case 97: /* expr ::= object DOT_L dashproperty */ yytestcase(yyruleno==97);
2664 case 98: /* expr ::= object DOT_L colorproperty */ yytestcase(yyruleno==98);
2665 #line 644 "pikchr.y"
2666 {yylhsminor.yy83=pik_property_of(p,yymsp[-2].minor.yy24,&yymsp[0].minor.yy0);}
2667 #line 2692 "pikchr.c"
2668 yymsp[-2].minor.yy83 = yylhsminor.yy83;
2669 break;
2670 case 99: /* expr ::= object DOT_E edge DOT_L X */
2671 #line 648 "pikchr.y"
2672 {yylhsminor.yy83=pik_place_of_elem(p,yymsp[-4].minor.yy24,&yymsp[-2].minor.yy0).x;}
2673 #line 2698 "pikchr.c"
2674 yymsp[-4].minor.yy83 = yylhsminor.yy83;
2675 break;
2676 case 100: /* expr ::= object DOT_E edge DOT_L Y */
2677 #line 649 "pikchr.y"
2678 {yylhsminor.yy83=pik_place_of_elem(p,yymsp[-4].minor.yy24,&yymsp[-2].minor.yy0).y;}
2679 #line 2704 "pikchr.c"
2680 yymsp[-4].minor.yy83 = yylhsminor.yy83;
2681 break;
2682 case 101: /* expr ::= LP locproperty OF object RP */
2683 case 102: /* expr ::= LP dashproperty OF object RP */ yytestcase(yyruleno==102);
2684 case 103: /* expr ::= LP numproperty OF object RP */ yytestcase(yyruleno==103);
2685 case 104: /* expr ::= LP colorproperty OF object RP */ yytestcase(yyruleno==104);
2686 #line 650 "pikchr.y"
2687 {yymsp[-4].minor.yy83=pik_property_of(p,yymsp[-1].minor.yy24,&yymsp[-3].minor.yy0);}
2688 #line 2713 "pikchr.c"
2689 break;
2690 case 105: /* expr ::= NTH VERTEX OF object DOT_L X */
2691 #line 656 "pikchr.y"
2692 {yylhsminor.yy83 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy24).x;}
2693 #line 2718 "pikchr.c"
2694 yymsp[-5].minor.yy83 = yylhsminor.yy83;
2695 break;
2696 case 106: /* expr ::= NTH VERTEX OF object DOT_L Y */
2697 #line 658 "pikchr.y"
2698 {yylhsminor.yy83 = pik_nth_vertex(p,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,yymsp[-2].minor.yy24).y;}
2699 #line 2724 "pikchr.c"
2700 yymsp[-5].minor.yy83 = yylhsminor.yy83;
2701 break;
2702 default:
2703 /* (107) lvalue ::= ID */ yytestcase(yyruleno==107);
2704 /* (108) lvalue ::= FILL */ yytestcase(yyruleno==108);
@@ -2789,18 +2792,18 @@
2792 ){
2793 pik_parserARG_FETCH
2794 pik_parserCTX_FETCH
2795 #define TOKEN yyminor
2796 /************ Begin %syntax_error code ****************************************/
2797 #line 446 "pikchr.y"
2798
2799 if( TOKEN.z && TOKEN.z[0] ){
2800 pik_error(p, &TOKEN, "syntax error");
2801 }else{
2802 pik_error(p, 0, "syntax error");
2803 }
2804 #line 2829 "pikchr.c"
2805 /************ End %syntax_error code ******************************************/
2806 pik_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
2807 pik_parserCTX_STORE
2808 }
2809
@@ -3029,11 +3032,11 @@
3032 #else
3033 (void)iToken;
3034 return 0;
3035 #endif
3036 }
3037 #line 668 "pikchr.y"
3038
3039
3040
3041 /* Chart of the 140 official HTML color names with their
3042 ** corresponding RGB value.
@@ -6327,6 +6330,6 @@
6330 printf("</body></html>\n");
6331 return 0;
6332 }
6333 #endif /* PIKCHR_SHELL */
6334
6335 #line 6360 "pikchr.c"
6336

Keyboard Shortcuts

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