diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2012-04-12 06:55:25 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2012-04-12 06:55:25 +0000 |
| commit | 17bc8e5c89805f5971e46f8f45c5e4eda970c561 (patch) | |
| tree | 57037efbd35ab9ec309a2e0d7183464e235a9e90 /src/runtime/c/pgf/lexer.c | |
| parent | 26ffcdbde8129b0a3695c41a59af52c73ce4aeea (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.c | 13 |
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 == '_'); |
