libidav/davqlparser.c

changeset 130
80d273229f24
parent 129
7532963bd15b
child 131
32e7b3e6b482
equal deleted inserted replaced
129:7532963bd15b 130:80d273229f24
513 char insequence = '\0'; 513 char insequence = '\0';
514 for (size_t i = 0 ; i < src.length ; i++) { 514 for (size_t i = 0 ; i < src.length ; i++) {
515 // quoted strings / identifiers are a single token 515 // quoted strings / identifiers are a single token
516 if (src.ptr[i] == '\'' || src.ptr[i] == '`') { 516 if (src.ptr[i] == '\'' || src.ptr[i] == '`') {
517 if (src.ptr[i] == insequence) { 517 if (src.ptr[i] == insequence) {
518 // add quoted token to list 518 // lookahead for escaped string quotes
519 token->value.length++; 519 if (src.ptr[i] == '\'' && i+2 < src.length &&
520 tokens = dav_parse_add_token(tokens, token); 520 src.ptr[i+1] == src.ptr[i] && src.ptr[i+2] == src.ptr[i]) {
521 token = NULL; 521 token->value.length += 3;
522 insequence = '\0'; 522 i += 2;
523 } else {
524 // add quoted token to list
525 token->value.length++;
526 tokens = dav_parse_add_token(tokens, token);
527 token = NULL;
528 insequence = '\0';
529 }
523 } else if (insequence == '\0') { 530 } else if (insequence == '\0') {
524 insequence = src.ptr[i]; 531 insequence = src.ptr[i];
525 // always create new token for quoted strings 532 // always create new token for quoted strings
526 if (token) { 533 if (token) {
527 tokens = dav_parse_add_token(tokens, token); 534 tokens = dav_parse_add_token(tokens, token);

mercurial