From a8eeb497670fb0f2ffab1f9b070808df965415be Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Mon, 7 Aug 2017 16:39:19 +0200 Subject: 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. --- src/runtime/c/pgf/parseval.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'src/runtime/c/pgf/parseval.c') 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 -- cgit v1.2.3