summaryrefslogtreecommitdiff
path: root/src/runtime/c/pgf/lexer.c
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2012-04-12 06:55:25 +0000
committerkr.angelov <kr.angelov@gmail.com>2012-04-12 06:55:25 +0000
commit17bc8e5c89805f5971e46f8f45c5e4eda970c561 (patch)
tree57037efbd35ab9ec309a2e0d7183464e235a9e90 /src/runtime/c/pgf/lexer.c
parent26ffcdbde8129b0a3695c41a59af52c73ce4aeea (diff)
some fixes in the robust parser and a new API for literals
Diffstat (limited to 'src/runtime/c/pgf/lexer.c')
-rw-r--r--src/runtime/c/pgf/lexer.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/runtime/c/pgf/lexer.c b/src/runtime/c/pgf/lexer.c
index fd196bc1b..27fe97e34 100644
--- a/src/runtime/c/pgf/lexer.c
+++ b/src/runtime/c/pgf/lexer.c
@@ -36,13 +36,26 @@ pgf_lexer_next_token(PgfLexer *lexer, GuExn* err, GuPool *pool)
if (iswalpha(lexer->ucs) ||
lexer->ucs == '\'' ||
lexer->ucs == '_') {
+ int counter = 0;
do {
gu_ucs_write(lexer->ucs, wtr, 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;
+
+ if (lexer->ucs == '.' && counter < 3) {
+ // 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;
+ }
} while (iswalnum(lexer->ucs) ||
lexer->ucs == '\'' ||
lexer->ucs == '_');