1
0
forked from GitHub/gf-core

bugfix: the linearizer should not generate extra space at the end of the sentence

This commit is contained in:
kr.angelov
2012-12-19 11:18:34 +00:00
parent f7eaa8a89a
commit bb077b8330

View File

@@ -478,6 +478,7 @@ typedef struct PgfSimpleLin PgfSimpleLin;
struct PgfSimpleLin { struct PgfSimpleLin {
PgfLinFuncs* funcs; PgfLinFuncs* funcs;
int n_tokens;
GuWriter* wtr; GuWriter* wtr;
GuExn* err; GuExn* err;
}; };
@@ -491,9 +492,13 @@ pgf_file_lzn_symbol_tokens(PgfLinFuncs** funcs, PgfTokens toks)
} }
size_t len = gu_seq_length(toks); size_t len = gu_seq_length(toks);
for (size_t i = 0; i < len; i++) { for (size_t i = 0; i < len; i++) {
if (flin->n_tokens > 0)
gu_putc(' ', flin->wtr, flin->err);
PgfToken tok = gu_seq_get(toks, PgfToken, i); PgfToken tok = gu_seq_get(toks, PgfToken, i);
gu_string_write(tok, flin->wtr, flin->err); gu_string_write(tok, flin->wtr, flin->err);
gu_putc(' ', flin->wtr, flin->err);
flin->n_tokens++;
} }
} }
@@ -504,28 +509,32 @@ pgf_file_lzn_expr_literal(PgfLinFuncs** funcs, PgfLiteral lit)
if (!gu_ok(flin->err)) { if (!gu_ok(flin->err)) {
return; return;
} }
if (flin->n_tokens > 0)
gu_putc(' ', flin->wtr, flin->err);
GuVariantInfo i = gu_variant_open(lit); GuVariantInfo i = gu_variant_open(lit);
switch (i.tag) { switch (i.tag) {
case PGF_LITERAL_STR: { case PGF_LITERAL_STR: {
PgfLiteralStr* lstr = i.data; PgfLiteralStr* lstr = i.data;
gu_string_write(lstr->val, flin->wtr, flin->err); gu_string_write(lstr->val, flin->wtr, flin->err);
gu_putc(' ', flin->wtr, flin->err);
break; break;
} }
case PGF_LITERAL_INT: { case PGF_LITERAL_INT: {
PgfLiteralInt* lint = i.data; PgfLiteralInt* lint = i.data;
gu_printf(flin->wtr, flin->err, "%d ", lint->val); gu_printf(flin->wtr, flin->err, "%d", lint->val);
break; break;
} }
case PGF_LITERAL_FLT: { case PGF_LITERAL_FLT: {
PgfLiteralFlt* lflt = i.data; PgfLiteralFlt* lflt = i.data;
gu_printf(flin->wtr, flin->err, "%lf ", lflt->val); gu_printf(flin->wtr, flin->err, "%lf", lflt->val);
break; break;
} }
default: default:
gu_impossible(); gu_impossible();
} }
flin->n_tokens++;
} }
static PgfLinFuncs pgf_file_lin_funcs = { static PgfLinFuncs pgf_file_lin_funcs = {
@@ -539,6 +548,7 @@ pgf_lzr_linearize_simple(PgfConcr* concr, PgfCncTree ctree,
{ {
PgfSimpleLin flin = { PgfSimpleLin flin = {
.funcs = &pgf_file_lin_funcs, .funcs = &pgf_file_lin_funcs,
.n_tokens = 0,
.wtr = wtr, .wtr = wtr,
.err = err .err = err
}; };