summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2012-12-19 11:18:34 +0000
committerkr.angelov <kr.angelov@gmail.com>2012-12-19 11:18:34 +0000
commit75696808a7b1da6161b674e910d37e536c723e8c (patch)
treef90244a33e6eb8c8d26bce319934196543aa996a
parent87360ccc348b6e5ec51cf1eb796c15fbf5aa2a1d (diff)
bugfix: the linearizer should not generate extra space at the end of the sentence
-rw-r--r--src/runtime/c/pgf/linearizer.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/runtime/c/pgf/linearizer.c b/src/runtime/c/pgf/linearizer.c
index d71cb1110..923484ada 100644
--- a/src/runtime/c/pgf/linearizer.c
+++ b/src/runtime/c/pgf/linearizer.c
@@ -478,6 +478,7 @@ typedef struct PgfSimpleLin PgfSimpleLin;
struct PgfSimpleLin {
PgfLinFuncs* funcs;
+ int n_tokens;
GuWriter* wtr;
GuExn* err;
};
@@ -491,9 +492,13 @@ pgf_file_lzn_symbol_tokens(PgfLinFuncs** funcs, PgfTokens toks)
}
size_t len = gu_seq_length(toks);
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);
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)) {
return;
}
-
+
+ if (flin->n_tokens > 0)
+ gu_putc(' ', flin->wtr, flin->err);
+
GuVariantInfo i = gu_variant_open(lit);
switch (i.tag) {
case PGF_LITERAL_STR: {
PgfLiteralStr* lstr = i.data;
gu_string_write(lstr->val, flin->wtr, flin->err);
- gu_putc(' ', flin->wtr, flin->err);
break;
}
case PGF_LITERAL_INT: {
PgfLiteralInt* lint = i.data;
- gu_printf(flin->wtr, flin->err, "%d ", lint->val);
+ gu_printf(flin->wtr, flin->err, "%d", lint->val);
break;
}
case PGF_LITERAL_FLT: {
PgfLiteralFlt* lflt = i.data;
- gu_printf(flin->wtr, flin->err, "%lf ", lflt->val);
+ gu_printf(flin->wtr, flin->err, "%lf", lflt->val);
break;
}
default:
gu_impossible();
}
+
+ flin->n_tokens++;
}
static PgfLinFuncs pgf_file_lin_funcs = {
@@ -539,6 +548,7 @@ pgf_lzr_linearize_simple(PgfConcr* concr, PgfCncTree ctree,
{
PgfSimpleLin flin = {
.funcs = &pgf_file_lin_funcs,
+ .n_tokens = 0,
.wtr = wtr,
.err = err
};