aboutsummaryrefslogtreecommitdiff
path: root/src/XpathTokenizer.c
diff options
context:
space:
mode:
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;