aboutsummaryrefslogtreecommitdiff
path: root/src/XpathTokenizer.c
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2021-08-16 13:41:20 +0200
committerdec05eba <dec05eba@protonmail.com>2021-08-16 13:41:20 +0200
commit95c189f7445e6deca85130b7b8fa25dc76fabe12 (patch)
tree7d56d918402c4de74bd8983ff1c81888c3a6b371 /src/XpathTokenizer.c
parent4a0955b851d087d9e97634ae2b7d2f76b0fe0503 (diff)
Add indexing and example
Diffstat (limited to 'src/XpathTokenizer.c')
-rw-r--r--src/XpathTokenizer.c13
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;