summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/runtime/c/pgf/lexer.c44
-rw-r--r--src/runtime/c/utils/pgf-translate.c1
2 files changed, 20 insertions, 25 deletions
diff --git a/src/runtime/c/pgf/lexer.c b/src/runtime/c/pgf/lexer.c
index acb4cd0c4..15caab151 100644
--- a/src/runtime/c/pgf/lexer.c
+++ b/src/runtime/c/pgf/lexer.c
@@ -21,6 +21,16 @@ pgf_new_lexer(GuReader *rdr, GuPool *pool)
return lexer;
}
+static void
+pgf_lexer_read_ucs(PgfLexer *lexer, GuExn* err)
+{
+ lexer->ucs = gu_read_ucs(lexer->rdr, err);
+ if (gu_exn_is_raised(err)) {
+ gu_exn_clear(err);
+ lexer->ucs = ' ';
+ }
+}
+
PgfToken
pgf_lexer_read_token(PgfLexer *lexer, GuExn* err)
{
@@ -44,19 +54,15 @@ pgf_lexer_read_token(PgfLexer *lexer, GuExn* err)
if (gu_exn_is_raised(err))
goto stop;
counter++;
- lexer->ucs = gu_read_ucs(lexer->rdr, err);
- if (gu_exn_is_raised(err))
- goto stop;
-
+ pgf_lexer_read_ucs(lexer, err);
+
if (lexer->ucs == '.' && counter < 4) {
// perhaps an abreviation
gu_ucs_write(lexer->ucs, wtr, err);
if (gu_exn_is_raised(err))
goto stop;
counter = 0;
- lexer->ucs = gu_read_ucs(lexer->rdr, err);
- if (gu_exn_is_raised(err))
- goto stop;
+ pgf_lexer_read_ucs(lexer, err);
}
} while (iswalnum(lexer->ucs) ||
lexer->ucs == '\'' ||
@@ -66,10 +72,8 @@ pgf_lexer_read_token(PgfLexer *lexer, GuExn* err)
gu_ucs_write(lexer->ucs, wtr, err);
if (gu_exn_is_raised(err))
goto stop;
- lexer->ucs = gu_read_ucs(lexer->rdr, err);
- if (gu_exn_is_raised(err))
- goto stop;
-
+
+ pgf_lexer_read_ucs(lexer, err);
if (!iswdigit(lexer->ucs))
goto stop;
}
@@ -78,9 +82,8 @@ pgf_lexer_read_token(PgfLexer *lexer, GuExn* err)
gu_ucs_write(lexer->ucs, wtr, err);
if (gu_exn_is_raised(err))
goto stop;
- lexer->ucs = gu_read_ucs(lexer->rdr, err);
- if (gu_exn_is_raised(err))
- goto stop;
+
+ pgf_lexer_read_ucs(lexer, err);
} while (iswdigit(lexer->ucs));
if (lexer->ucs == '.') {
@@ -88,26 +91,19 @@ pgf_lexer_read_token(PgfLexer *lexer, GuExn* err)
if (gu_exn_is_raised(err))
goto stop;
- lexer->ucs = gu_read_ucs(lexer->rdr, err);
- if (gu_exn_is_raised(err))
- goto stop;
-
+ pgf_lexer_read_ucs(lexer, err);
while (iswdigit(lexer->ucs)) {
gu_ucs_write(lexer->ucs, wtr, err);
if (gu_exn_is_raised(err))
goto stop;
- lexer->ucs = gu_read_ucs(lexer->rdr, err);
- if (gu_exn_is_raised(err))
- goto stop;
+ pgf_lexer_read_ucs(lexer, err);
}
}
} else {
gu_ucs_write(lexer->ucs, wtr, err);
if (gu_exn_is_raised(err))
goto stop;
- lexer->ucs = gu_read_ucs(lexer->rdr, err);
- if (gu_exn_is_raised(err))
- goto stop;
+ pgf_lexer_read_ucs(lexer, err);
}
stop:
diff --git a/src/runtime/c/utils/pgf-translate.c b/src/runtime/c/utils/pgf-translate.c
index 03b3635f0..0d64e41b9 100644
--- a/src/runtime/c/utils/pgf-translate.c
+++ b/src/runtime/c/utils/pgf-translate.c
@@ -6,7 +6,6 @@
#include <gu/file.h>
#include <pgf/pgf.h>
#include <pgf/parser.h>
-#include <pgf/lexer.h>
#include <pgf/literals.h>
#include <pgf/linearize.h>
#include <pgf/edsl.h>