diff options
author | dec05eba <dec05eba@protonmail.com> | 2021-08-16 13:41:20 +0200 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2021-08-16 13:41:20 +0200 |
commit | 95c189f7445e6deca85130b7b8fa25dc76fabe12 (patch) | |
tree | 7d56d918402c4de74bd8983ff1c81888c3a6b371 /src/XpathTokenizer.c | |
parent | 4a0955b851d087d9e97634ae2b7d2f76b0fe0503 (diff) |
Add indexing and example
Diffstat (limited to 'src/XpathTokenizer.c')
-rw-r--r-- | src/XpathTokenizer.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/XpathTokenizer.c b/src/XpathTokenizer.c index ae17939..f81f2d7 100644 --- a/src/XpathTokenizer.c +++ b/src/XpathTokenizer.c @@ -16,6 +16,10 @@ static int is_num(char c) { return c >= '0' && c <= '9'; } +static int c_to_num(char c) { + return c - '0'; +} + static int is_alphanum(char c) { return is_alpha(c) || is_num(c); } @@ -55,6 +59,15 @@ QuickMediaXpathToken quickmedia_xpath_tokenizer_next(QuickMediaXpathTokenizer *s } self->identifier.size = self->code - self->identifier.data; return QUICKMEDIA_XPATH_TOKEN_IDENTIFIER; + } else if(is_num(c)) { + int number = c_to_num(c); + ++self->code; + while(is_num(*self->code)) { + number = number * 10 + c_to_num(*self->code); + ++self->code; + } + self->number = number; + return QUICKMEDIA_XPATH_TOKEN_NUMBER; } else if(c == '[') { ++self->code; return QUICKMEDIA_XPATH_TOKEN_OPEN_BRACKET; |