diff options
| author | Krasimir Angelov <kr.angelov@gmail.com> | 2017-08-07 16:39:19 +0200 |
|---|---|---|
| committer | Krasimir Angelov <kr.angelov@gmail.com> | 2017-08-07 16:39:19 +0200 |
| commit | a8eeb497670fb0f2ffab1f9b070808df965415be (patch) | |
| tree | 5f169893da63183df272b0d281b5eaf5857ed955 /src/runtime/c/pgf/parseval.c | |
| parent | a4c19875ed4a97671d17d6d6f062b465ae1f87a6 (diff) | |
the linearizer API now allows to detect metavariables. This is used for instancein the lookup where the tokens produced from the metavariables are interpreted as distinct from all other tokens.
Diffstat (limited to 'src/runtime/c/pgf/parseval.c')
| -rw-r--r-- | src/runtime/c/pgf/parseval.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/runtime/c/pgf/parseval.c b/src/runtime/c/pgf/parseval.c index 5f8a3b363..85df380fa 100644 --- a/src/runtime/c/pgf/parseval.c +++ b/src/runtime/c/pgf/parseval.c @@ -59,7 +59,7 @@ pgf_metrics_lzn_end_phrase1(PgfLinFuncs** funcs, PgfCId cat, int fid, int lin_id int start = gu_buf_pop(state->marks, int); int end = state->pos; - + if (start != end) { PgfPhrase* phrase = gu_new(PgfPhrase, state->pool); phrase->start = start; @@ -110,13 +110,26 @@ pgf_metrics_lzn_end_phrase2(PgfLinFuncs** funcs, PgfCId cat, int fid, int lin_id } } +static void +pgf_metrics_lzn_symbol_meta(PgfLinFuncs** funcs, PgfMetaId meta_id) +{ + PgfMetricsLznState* state = gu_container(funcs, PgfMetricsLznState, funcs); + + pgf_metrics_put_space(state); + if (state->out != NULL) + gu_putc('?', state->out, state->err); + + state->pos += 1; +} + static PgfLinFuncs pgf_metrics_lin_funcs1 = { .symbol_token = pgf_metrics_lzn_symbol_token, .begin_phrase = pgf_metrics_lzn_begin_phrase, .end_phrase = pgf_metrics_lzn_end_phrase1, .symbol_ne = pgf_metrics_symbol_ne, .symbol_bind = pgf_metrics_symbol_bind, - .symbol_capit = NULL + .symbol_capit = NULL, + .symbol_meta = pgf_metrics_lzn_symbol_meta }; static PgfLinFuncs pgf_metrics_lin_funcs2 = { @@ -125,7 +138,8 @@ static PgfLinFuncs pgf_metrics_lin_funcs2 = { .end_phrase = pgf_metrics_lzn_end_phrase2, .symbol_ne = pgf_metrics_symbol_ne, .symbol_bind = pgf_metrics_symbol_bind, - .symbol_capit = NULL + .symbol_capit = NULL, + .symbol_meta = pgf_metrics_lzn_symbol_meta }; PGF_API bool |
