Works with ->?
This commit is contained in:
parent
fd2b3afc70
commit
72385093bd
@ -170,7 +170,7 @@ static int scan_day(struct scan *const scan, union date32 date,
|
|||||||
/*fprintf(stderr, "map: <<%.*s>> out of %s\n", (int)(s1 - s0), s0,
|
/*fprintf(stderr, "map: <<%.*s>> out of %s\n", (int)(s1 - s0), s0,
|
||||||
pair_map_table_to_string(&scan->places.map));*/
|
pair_map_table_to_string(&scan->places.map));*/
|
||||||
if(!(i = pair_map_table_get(&scan->places.map, keyword)))
|
if(!(i = pair_map_table_get(&scan->places.map, keyword)))
|
||||||
{ fail = "keyword not introduced"; /*goto catch;*/ continue; }
|
{ fail = "keyword not introduced"; goto catch; }
|
||||||
switch(linemap_tree_bulk_assign(&scan->places.dates, key, &pi)) {
|
switch(linemap_tree_bulk_assign(&scan->places.dates, key, &pi)) {
|
||||||
case TREE_PRESENT: fail = "duplicate"; case TREE_ERROR: goto catch;
|
case TREE_PRESENT: fail = "duplicate"; case TREE_ERROR: goto catch;
|
||||||
case TREE_ABSENT: *pi = i; break;
|
case TREE_ABSENT: *pi = i; break;
|
||||||
@ -198,6 +198,23 @@ static int scan_day(struct scan *const scan, union date32 date,
|
|||||||
datestr, line, (int)(s1 - s0), s0, x, y, *idx);
|
datestr, line, (int)(s1 - s0), s0, x, y, *idx);
|
||||||
goto also_place;
|
goto also_place;
|
||||||
}
|
}
|
||||||
|
// anonymous place: bypass map and have a 1:1 correspondence
|
||||||
|
<place> "(" @t0 decimal "," @t1 decimal ")" / "\n" => skip {
|
||||||
|
size_t *idx;
|
||||||
|
struct place *place;
|
||||||
|
const double x = strtod(t0, 0), y = strtod(t1, 0); /* Safe? */
|
||||||
|
const union line64 key = { { (uint32_t)line, date } };
|
||||||
|
if(!(place = place_array_new(&scan->places.array))) goto catch;
|
||||||
|
place->name.a = place->name.b = 0;
|
||||||
|
place->x = x, place->y = y;
|
||||||
|
switch(linemap_tree_bulk_assign(&scan->places.dates, key, &idx)) {
|
||||||
|
case TREE_PRESENT: fail = "duplicate"; case TREE_ERROR: goto catch;
|
||||||
|
case TREE_ABSENT: break;
|
||||||
|
}
|
||||||
|
*idx = (size_t)(place - scan->places.array.data);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<source> * { fail = "source unrecognized"; goto catch; }
|
<source> * { fail = "source unrecognized"; goto catch; }
|
||||||
@ -614,6 +631,11 @@ struct scan scan(struct journal *const jrnl) {
|
|||||||
if(!(nul = source_array_new(&scan.sources.array))) goto catch;
|
if(!(nul = source_array_new(&scan.sources.array))) goto catch;
|
||||||
*nul = (struct source){0};
|
*nul = (struct source){0};
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
struct place *nul;
|
||||||
|
if(!(nul = place_array_new(&scan.places.array))) goto catch;
|
||||||
|
*nul = (struct place){0};
|
||||||
|
}
|
||||||
{
|
{
|
||||||
struct score *nul;
|
struct score *nul;
|
||||||
if(!(nul = score_array_new(&scan.scores.array))) goto catch;
|
if(!(nul = score_array_new(&scan.scores.array))) goto catch;
|
||||||
|
Loading…
Reference in New Issue
Block a user