From 7d11de5da22b343716734be3be1810cb3163a696 Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Mon, 1 Dec 2008 14:17:34 +0000 Subject: Retain pointer to dictionary entries so we don't have to rediscover it later. svn path=/trunk/libcss/; revision=5862 --- src/lex/lex.c | 4 +- src/lex/lex.h | 6 +- src/parse/language.c | 34 +-- src/parse/parse.c | 205 ++++++++--------- src/parse/parse.h | 2 +- src/parse/properties.c | 578 +++++++++++++++++++++++++----------------------- src/parse/propstrings.h | 5 + src/stylesheet.c | 57 +---- src/stylesheet.h | 9 +- 9 files changed, 437 insertions(+), 463 deletions(-) diff --git a/src/lex/lex.c b/src/lex/lex.c index a649304..86e669e 100644 --- a/src/lex/lex.c +++ b/src/lex/lex.c @@ -1168,8 +1168,8 @@ start: t->type = CSS_TOKEN_EOF; t->data.data = NULL; t->data.len = 0; - t->lower.data = NULL; - t->lower.len = 0; + t->idata = NULL; + t->ilower = NULL; t->col = lexer->currentCol; t->line = lexer->currentLine; lexer->escapeSeen = false; diff --git a/src/lex/lex.h b/src/lex/lex.h index feb589e..81a7355 100644 --- a/src/lex/lex.h +++ b/src/lex/lex.h @@ -13,6 +13,7 @@ #include #include +#include typedef struct css_lexer css_lexer; @@ -60,8 +61,9 @@ typedef struct css_token { css_string data; - css_string lower; - + const parserutils_hash_entry *idata; + const parserutils_hash_entry *ilower; + uint32_t col; uint32_t line; } css_token; diff --git a/src/parse/language.c b/src/parse/language.c index d229c2a..2bc5919 100644 --- a/src/parse/language.c +++ b/src/parse/language.c @@ -40,7 +40,8 @@ struct css_language { } state; /**< State flag, for at-rule handling */ /** \todo These should be statically allocated */ - const uint8_t *strings[LAST_KNOWN]; /**< Interned strings */ + /** Interned strings */ + const parserutils_hash_entry *strings[LAST_KNOWN]; css_alloc alloc; /**< Memory (de)allocation function */ void *pw; /**< Client's private data */ @@ -356,7 +357,7 @@ css_error handleStartAtRule(css_language *c, const parserutils_vector *vector) * there is one */ assert(atkeyword != NULL && atkeyword->type == CSS_TOKEN_ATKEYWORD); - if (atkeyword->lower.data == c->strings[CHARSET]) { + if (atkeyword->ilower == c->strings[CHARSET]) { if (c->state == BEFORE_CHARSET) { /* any0 = STRING */ if (ctx == 0) @@ -374,7 +375,7 @@ css_error handleStartAtRule(css_language *c, const parserutils_vector *vector) } else { return CSS_INVALID; } - } else if (atkeyword->lower.data == c->strings[IMPORT]) { + } else if (atkeyword->ilower == c->strings[IMPORT]) { if (c->state != HAD_RULE) { /* any0 = (STRING | URI) ws * (IDENT ws (',' ws IDENT ws)* )? */ @@ -400,16 +401,16 @@ css_error handleStartAtRule(css_language *c, const parserutils_vector *vector) /** \todo these depend on nested block support, so we'll disable them * until we have such a thing. This means that we'll ignore the entire * at-rule until then */ - } else if (atkeyword->lower.data == c->strings[MEDIA]) { + } else if (atkeyword->ilower == c->strings[MEDIA]) { /** \todo any0 = IDENT ws (',' ws IDENT ws)* */ - } else if (atkeyword->lower.data == c->strings[PAGE]) { + } else if (atkeyword->ilower == c->strings[PAGE]) { /** \todo any0 = (':' IDENT)? ws */ #endif } else { return CSS_INVALID; } - entry.data = (void *) atkeyword->lower.data; + entry.data = (void *) atkeyword->ilower; perror = parserutils_stack_push(c->context, (void *) &entry); if (perror != PARSERUTILS_OK) { @@ -541,7 +542,7 @@ css_error parseClass(css_language *c, const parserutils_vector *vector, return CSS_INVALID; return css_stylesheet_selector_detail_create(c->sheet, - CSS_SELECTOR_CLASS, &token->data, NULL, specific); + CSS_SELECTOR_CLASS, token->idata, NULL, specific); } css_error parseAttrib(css_language *c, const parserutils_vector *vector, @@ -599,7 +600,7 @@ css_error parseAttrib(css_language *c, const parserutils_vector *vector, } return css_stylesheet_selector_detail_create(c->sheet, type, - &name->data, value != NULL ? &value->data : NULL, + name->idata, value != NULL ? value->idata : NULL, specific); } @@ -639,8 +640,8 @@ css_error parsePseudo(css_language *c, const parserutils_vector *vector, } return css_stylesheet_selector_detail_create(c->sheet, - CSS_SELECTOR_PSEUDO, &name->data, - value != NULL ? &value->data : NULL, specific); + CSS_SELECTOR_PSEUDO, name->idata, + value != NULL ? value->idata : NULL, specific); } css_error parseSpecific(css_language *c, @@ -659,7 +660,7 @@ css_error parseSpecific(css_language *c, if (token->type == CSS_TOKEN_HASH) { error = css_stylesheet_selector_detail_create(c->sheet, - CSS_SELECTOR_ID, &token->data, NULL, &specific); + CSS_SELECTOR_ID, token->idata, NULL, &specific); if (error != CSS_OK) return error; @@ -731,7 +732,7 @@ css_error parseSimpleSelector(css_language *c, if (token->type == CSS_TOKEN_IDENT || tokenIsChar(token, '*')) { /* Have element name */ error = css_stylesheet_selector_create(c->sheet, - CSS_SELECTOR_ELEMENT, &token->data, NULL, + CSS_SELECTOR_ELEMENT, token->idata, NULL, &selector); if (error != CSS_OK) return error; @@ -739,10 +740,9 @@ css_error parseSimpleSelector(css_language *c, parserutils_vector_iterate(vector, ctx); } else { /* Universal selector */ - static css_string name = { 1, (uint8_t *) "*" }; - error = css_stylesheet_selector_create(c->sheet, - CSS_SELECTOR_ELEMENT, &name, NULL, &selector); + CSS_SELECTOR_ELEMENT, c->strings[UNIVERSAL], + NULL, &selector); if (error != CSS_OK) return error; @@ -936,7 +936,7 @@ css_error parseProperty(css_language *c, const css_token *property, /* Find property index */ /** \todo improve on this linear search */ for (i = FIRST_PROP; i <= LAST_PROP; i++) { - if (property->lower.data == c->strings[i]) + if (property->ilower == c->strings[i]) break; } if (i == LAST_PROP + 1) @@ -996,7 +996,7 @@ void consumeWhitespace(const parserutils_vector *vector, int *ctx) bool tokenIsChar(const css_token *token, uint8_t c) { return token != NULL && token->type == CSS_TOKEN_CHAR && - token->lower.len == 1 && token->lower.data[0] == c; + token->ilower->len == 1 && token->ilower->data[0] == c; } diff --git a/src/parse/parse.c b/src/parse/parse.c index de61b28..c3269f1 100644 --- a/src/parse/parse.c +++ b/src/parse/parse.c @@ -420,8 +420,8 @@ const char *css_parser_read_charset(css_parser *parser, * \param len Length, in bytes, of data * \return Pointer to data in dictionary, or NULL on memory exhaustion */ -const uint8_t *css_parser_dict_add(css_parser *parser, const uint8_t *data, - size_t len) +const parserutils_hash_entry *css_parser_dict_add(css_parser *parser, + const uint8_t *data, size_t len) { const parserutils_hash_entry *interned; parserutils_error perror; @@ -434,7 +434,7 @@ const uint8_t *css_parser_dict_add(css_parser *parser, const uint8_t *data, if (perror != PARSERUTILS_OK) return NULL; - return interned->data; + return interned; } /****************************************************************************** @@ -593,11 +593,6 @@ css_error getToken(css_parser *parser, const css_token **token) if (t->type < CSS_TOKEN_LAST_INTERN && t->data.data != NULL && t->data.len > 0) { - const parserutils_hash_entry *interned; - - /* Invalidate lowercase data */ - t->lower.data = NULL; - if (t->type < CSS_TOKEN_LAST_INTERN_LOWER) { uint8_t temp[t->data.len]; bool lower = false; @@ -618,36 +613,26 @@ css_error getToken(css_parser *parser, const css_token **token) perror = parserutils_hash_insert( parser->dictionary, temp, t->data.len, - &interned); + &t->ilower); if (perror != PARSERUTILS_OK) { return css_error_from_parserutils_error( perror); } - - t->lower.data = - (uint8_t *) interned->data; - t->lower.len = interned->len; } } /* Insert token text into the dictionary */ perror = parserutils_hash_insert(parser->dictionary, t->data.data, t->data.len, - &interned); + &t->idata); - if (t->lower.data == NULL) { - t->lower.data = (uint8_t *) interned->data; - t->lower.len = interned->len; - } + if (t->ilower == NULL) + t->ilower = t->idata; if (perror != PARSERUTILS_OK) return css_error_from_parserutils_error(perror); - - t->data.data = (uint8_t *) interned->data; - t->data.len = interned->len; } else { - t->data.data = t->lower.data = NULL; - t->data.len = t->lower.len = 0; + t->idata = t->ilower = NULL; } *token = t; @@ -870,8 +855,8 @@ css_error parseRuleset(css_parser *parser) /* The grammar's ambiguous here -- selectors may start with a * brace. We're going to assume that that won't happen, * however. */ - if (token->type == CSS_TOKEN_CHAR && token->lower.len == 1 && - token->lower.data[0] == '{') { + if (token->type == CSS_TOKEN_CHAR && token->ilower->len == 1 && + token->ilower->data[0] == '{') { #if !defined(NDEBUG) && defined(DEBUG_EVENTS) printf("Begin ruleset\n"); #endif @@ -921,8 +906,8 @@ css_error parseRuleset(css_parser *parser) if (error != CSS_OK) return error; - if (token->type != CSS_TOKEN_CHAR || token->lower.len != 1 || - token->lower.data[0] != '{') { + if (token->type != CSS_TOKEN_CHAR || token->ilower->len != 1 || + token->ilower->data[0] != '{') { /* This should never happen, as FOLLOW(selector) * contains only '{' */ assert(0 && "Expected {"); @@ -986,8 +971,8 @@ css_error parseRulesetEnd(css_parser *parser) if (error != CSS_OK) return error; - if (token->type != CSS_TOKEN_CHAR || token->lower.len != 1 || - token->lower.data[0] != '}') { + if (token->type != CSS_TOKEN_CHAR || token->ilower->len != 1 || + token->ilower->data[0] != '}') { /* This should never happen, as FOLLOW(decl-list) * contains only '}' */ assert(0 && "Expected }"); @@ -1061,9 +1046,9 @@ css_error parseAtRule(css_parser *parser) /* Grammar ambiguity: any0 can be followed by '{',';',')',']'. * at-rule can only be followed by '{' and ';'. */ - if (token->type == CSS_TOKEN_CHAR && token->lower.len == 1) { - if (token->lower.data[0] == ')' || - token->lower.data[0] == ']') { + if (token->type == CSS_TOKEN_CHAR && token->ilower->len == 1) { + if (token->ilower->data[0] == ')' || + token->ilower->data[0] == ']') { parser_state to = { sAny0, Initial }; parser_state subsequent = { sAtRule, AfterAny }; @@ -1114,12 +1099,12 @@ css_error parseAtRuleEnd(css_parser *parser) if (error != CSS_OK) return error; - if (token->type != CSS_TOKEN_CHAR || token->lower.len != 1) { + if (token->type != CSS_TOKEN_CHAR || token->ilower->len != 1) { /* Should never happen FOLLOW(at-rule) == '{', ';'*/ assert(0 && "Expected { or ;"); } - if (token->lower.data[0] == '{') { + if (token->ilower->data[0] == '{') { parser_state to = { sBlock, Initial }; parser_state subsequent = { sAtRuleEnd, AfterBlock }; @@ -1128,7 +1113,7 @@ css_error parseAtRuleEnd(css_parser *parser) return error; return transition(parser, to, subsequent); - } else if (token->lower.data[0] != ';') { + } else if (token->ilower->data[0] != ';') { /* Again, should never happen */ assert(0 && "Expected ;"); } @@ -1180,8 +1165,8 @@ css_error parseBlock(css_parser *parser) parserutils_vector_clear(parser->tokens); - if (token->type != CSS_TOKEN_CHAR || token->lower.len != 1 || - token->lower.data[0] != '{') { + if (token->type != CSS_TOKEN_CHAR || token->ilower->len != 1 || + token->ilower->data[0] != '{') { /* This should never happen, as FIRST(block) == '{' */ assert(0 && "Expected {"); } @@ -1207,8 +1192,8 @@ css_error parseBlock(css_parser *parser) if (error != CSS_OK) return error; - if (token->type != CSS_TOKEN_CHAR || token->lower.len != 1 || - token->lower.data[0] != '}') { + if (token->type != CSS_TOKEN_CHAR || token->ilower->len != 1 || + token->ilower->data[0] != '}') { /* This should never happen, as * FOLLOW(block-content) == '}' */ assert(0 && "Expected }"); @@ -1260,8 +1245,8 @@ css_error parseBlockContent(css_parser *parser) if (token->type == CSS_TOKEN_ATKEYWORD) { state->substate = WS; } else if (token->type == CSS_TOKEN_CHAR) { - if (token->lower.len == 1 && - token->lower.data[0] == '{') { + if (token->ilower->len == 1 && + token->ilower->data[0] == '{') { /* Grammar ambiguity. Assume block */ parser_state to = { sBlock, Initial }; parser_state subsequent = @@ -1284,12 +1269,12 @@ css_error parseBlockContent(css_parser *parser) return transition(parser, to, subsequent); - } else if (token->lower.len == 1 && - token->lower.data[0] == ';') { + } else if (token->ilower->len == 1 && + token->ilower->data[0] == ';') { /* Grammar ambiguity. Assume semi */ state->substate = WS; - } else if (token->lower.len == 1 && - token->lower.data[0] == '}') { + } else if (token->ilower->len == 1 && + token->ilower->data[0] == '}') { /* Grammar ambiguity. Assume end */ error = pushBack(parser, token); if (error != CSS_OK) @@ -1397,8 +1382,8 @@ css_error parseDeclaration(css_parser *parser) if (error != CSS_OK) return error; - if (token->type != CSS_TOKEN_CHAR || token->lower.len != 1 || - token->lower.data[0] != ':') { + if (token->type != CSS_TOKEN_CHAR || token->ilower->len != 1 || + token->ilower->data[0] != ':') { /* parse error -- expected : */ parser_state to = { sMalformedDecl, Initial }; @@ -1461,18 +1446,18 @@ css_error parseDeclList(css_parser *parser) if (error != CSS_OK) return error; - if (token->type != CSS_TOKEN_CHAR || token->lower.len != 1) { + if (token->type != CSS_TOKEN_CHAR || token->ilower->len != 1) { /* Should never happen */ assert(0 && "Expected ; or }"); } - if (token->lower.data[0] == '}') { + if (token->ilower->data[0] == '}') { error = pushBack(parser, token); if (error != CSS_OK) return error; return done(parser); - } else if (token->lower.data[0] == ';') { + } else if (token->ilower->data[0] == ';') { state->substate = WS; } else { /* Should never happen */ @@ -1511,9 +1496,9 @@ css_error parseDeclListEnd(css_parser *parser) return error; if (token->type != CSS_TOKEN_CHAR || - token->lower.len != 1 || - (token->lower.data[0] != ';' && - token->lower.data[0] != '}')) { + token->ilower->len != 1 || + (token->ilower->data[0] != ';' && + token->ilower->data[0] != '}')) { parser_state to = { sDeclaration, Initial }; parser_state subsequent = { sDeclListEnd, AfterDeclaration }; @@ -1600,9 +1585,9 @@ css_error parseValue1(css_parser *parser) /* Grammar ambiguity -- assume ';' or '}' mark end */ if (token->type == CSS_TOKEN_CHAR && - token->lower.len == 1 && - (token->lower.data[0] == ';' || - token->lower.data[0] == '}')) { + token->ilower->len == 1 && + (token->ilower->data[0] == ';' || + token->ilower->data[0] == '}')) { /* Parse error */ parser->parseError = true; @@ -1648,9 +1633,9 @@ css_error parseValue0(css_parser *parser) /* Grammar ambiguity -- assume ';' or '}' mark end */ if (token->type == CSS_TOKEN_CHAR && - token->lower.len == 1 && - (token->lower.data[0] == ';' || - token->lower.data[0] == '}')) { + token->ilower->len == 1 && + (token->ilower->data[0] == ';' || + token->ilower->data[0] == '}')) { return done(parser); } @@ -1687,8 +1672,8 @@ css_error parseValue(css_parser *parser) if (token->type == CSS_TOKEN_ATKEYWORD) { state->substate = WS; } else if (token->type == CSS_TOKEN_CHAR && - token->lower.len == 1 && - token->lower.data[0] == '{') { + token->ilower->len == 1 && + token->ilower->data[0] == '{') { /* Grammar ambiguity. Assume block. */ parser_state to = { sBlock, Initial }; @@ -1748,11 +1733,11 @@ css_error parseAny0(css_parser *parser) /* Grammar ambiguity: * assume '{', ';', ')', ']' mark end */ if (token->type == CSS_TOKEN_CHAR && - token->lower.len == 1 && - (token->lower.data[0] == '{' || - token->lower.data[0] == ';' || - token->lower.data[0] == ')' || - token->lower.data[0] == ']')) { + token->ilower->len == 1 && + (token->ilower->data[0] == '{' || + token->ilower->data[0] == ';' || + token->ilower->data[0] == ')' || + token->ilower->data[0] == ']')) { return done(parser); } @@ -1812,15 +1797,15 @@ css_error parseAny1(css_parser *parser) /* Grammar ambiguity: any0 can be followed by * '{', ';', ')', ']'. any1 can only be followed by '{'. */ - if (token->type == CSS_TOKEN_CHAR && token->lower.len == 1) { - if (token->lower.data[0] == ';' || - token->lower.data[0] == ')' || - token->lower.data[0] == ']') { + if (token->type == CSS_TOKEN_CHAR && token->ilower->len == 1) { + if (token->ilower->data[0] == ';' || + token->ilower->data[0] == ')' || + token->ilower->data[0] == ']') { parser_state to = { sAny, Initial }; parser_state subsequent = { sAny1, AfterAny }; return transition(parser, to, subsequent); - } else if (token->lower.data[0] != '{') { + } else if (token->ilower->data[0] != '{') { /* parse error */ parser->parseError = true; } @@ -1890,11 +1875,11 @@ css_error parseAny(css_parser *parser) parser->match_char = ')'; state->substate = WS; } else if (token->type == CSS_TOKEN_CHAR && - token->lower.len == 1 && - (token->lower.data[0] == '(' || - token->lower.data[0] == '[')) { + token->ilower->len == 1 && + (token->ilower->data[0] == '(' || + token->ilower->data[0] == '[')) { parser->match_char = - token->lower.data[0] == '(' ? ')' : ']'; + token->ilower->data[0] == '(' ? ')' : ']'; state->substate = WS; } @@ -1926,8 +1911,8 @@ css_error parseAny(css_parser *parser) return error; /* Match correct close bracket (grammar ambiguity) */ - if (token->type == CSS_TOKEN_CHAR && token->lower.len == 1 && - token->lower.data[0] == parser->match_char) { + if (token->type == CSS_TOKEN_CHAR && token->ilower->len == 1 && + token->ilower->data[0] == parser->match_char) { state->substate = WS2; goto ws2; } @@ -1970,14 +1955,14 @@ css_error parseMalformedDeclaration(css_parser *parser) break; if (token->type != CSS_TOKEN_CHAR || - token->lower.len != 1 || - (token->lower.data[0] != '{' && - token->lower.data[0] != '}' && - token->lower.data[0] != '[' && - token->lower.data[0] != ']' && - token->lower.data[0] != '(' && - token->lower.data[0] != ')' && - token->lower.data[0] != ';')) + token->ilower->len != 1 || + (token->ilower->data[0] != '{' && + token->ilower->data[0] != '}' && + token->ilower->data[0] != '[' && + token->ilower->data[0] != ']' && + token->ilower->data[0] != '(' && + token->ilower->data[0] != ')' && + token->ilower->data[0] != ';')) continue; char want; @@ -1987,17 +1972,17 @@ css_error parseMalformedDeclaration(css_parser *parser) /* If the stack is empty, then we're done if we've got * either a ';' or '}' */ if (match == NULL) { - if (token->lower.data[0] == ';' || - token->lower.data[0] == '}') + if (token->ilower->data[0] == ';' || + token->ilower->data[0] == '}') break; } /* Regardless, if we've got a semicolon, ignore it */ - if (token->lower.data[0] == ';') + if (token->ilower->data[0] == ';') continue; /* Get corresponding start tokens for end tokens */ - switch (token->lower.data[0]) { + switch (token->ilower->data[0]) { case '}': want = '{'; break; @@ -2019,7 +2004,7 @@ css_error parseMalformedDeclaration(css_parser *parser) parser->open_items, NULL); } else if (want == 0) { parserutils_stack_push(parser->open_items, - &token->lower.data[0]); + &token->ilower->data[0]); } } } @@ -2064,13 +2049,13 @@ css_error parseMalformedSelector(css_parser *parser) break; if (token->type != CSS_TOKEN_CHAR || - token->lower.len != 1 || - (token->lower.data[0] != '{' && - token->lower.data[0] != '}' && - token->lower.data[0] != '[' && - token->lower.data[0] != ']' && - token->lower.data[0] != '(' && - token->lower.data[0] != ')')) + token->ilower->len != 1 || + (token->ilower->data[0] != '{' && + token->ilower->data[0] != '}' && + token->ilower->data[0] != '[' && + token->ilower->data[0] != ']' && + token->ilower->data[0] != '(' && + token->ilower->data[0] != ')')) continue; char want; @@ -2078,7 +2063,7 @@ css_error parseMalformedSelector(css_parser *parser) parser->open_items); /* Get corresponding start tokens for end tokens */ - switch (token->lower.data[0]) { + switch (token->ilower->data[0]) { case '}': want = '{'; break; @@ -2100,7 +2085,7 @@ css_error parseMalformedSelector(css_parser *parser) parser->open_items, NULL); } else if (want == 0) { parserutils_stack_push(parser->open_items, - &token->lower.data[0]); + &token->ilower->data[0]); } /* If we encountered a '}', there was data on the stack @@ -2157,14 +2142,14 @@ css_error parseMalformedAtRule(css_parser *parser) break; if (token->type != CSS_TOKEN_CHAR || - token->lower.len != 1 || - (token->lower.data[0] != '{' && - token->lower.data[0] != '}' && - token->lower.data[0] != '[' && - token->lower.data[0] != ']' && - token->lower.data[0] != '(' && - token->lower.data[0] != ')' && - token->lower.data[0] != ';')) + token->ilower->len != 1 || + (token->ilower->data[0] != '{' && + token->ilower->data[0] != '}' && + token->ilower->data[0] != '[' && + token->ilower->data[0] != ']' && + token->ilower->data[0] != '(' && + token->ilower->data[0] != ')' && + token->ilower->data[0] != ';')) continue; char want; @@ -2173,7 +2158,7 @@ css_error parseMalformedAtRule(css_parser *parser) /* If we have a semicolon, then we're either done or * need to ignore it */ - if (token->lower.data[0] == ';') { + if (token->ilower->data[0] == ';') { if (match == NULL) break; else @@ -2181,7 +2166,7 @@ css_error parseMalformedAtRule(css_parser *parser) } /* Get corresponding start tokens for end tokens */ - switch (token->lower.data[0]) { + switch (token->ilower->data[0]) { case '}': want = '{'; break; @@ -2203,7 +2188,7 @@ css_error parseMalformedAtRule(css_parser *parser) parser->open_items, NULL); } else if (want == 0) { parserutils_stack_push(parser->open_items, - &token->lower.data[0]); + &token->ilower->data[0]); } /* If we encountered a '}', there was data on the stack diff --git a/src/parse/parse.h b/src/parse/parse.h index 7e57791..1533f7a 100644 --- a/src/parse/parse.h +++ b/src/parse/parse.h @@ -71,7 +71,7 @@ css_error css_parser_completed(css_parser *parser); const char *css_parser_read_charset(css_parser *parser, css_charset_source *source); -const uint8_t *css_parser_dict_add(css_parser *parser, +const parserutils_hash_entry *css_parser_dict_add(css_parser *parser, const uint8_t *ptr, size_t len); #endif diff --git a/src/parse/properties.c b/src/parse/properties.c index b5b3025..e6a285d 100644 --- a/src/parse/properties.c +++ b/src/parse/properties.c @@ -472,15 +472,15 @@ css_error parse_azimuth(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[LEFTWARDS]) { + token->ilower == c->strings[LEFTWARDS]) { parserutils_vector_iterate(vector, ctx); value = AZIMUTH_LEFTWARDS; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[RIGHTWARDS]) { + token->ilower == c->strings[RIGHTWARDS]) { parserutils_vector_iterate(vector, ctx); value = AZIMUTH_RIGHTWARDS; } else if (token->type == CSS_TOKEN_IDENT) { @@ -542,11 +542,11 @@ css_error parse_background_attachment(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[FIXED]) { + } else if (ident->ilower == c->strings[FIXED]) { value = BACKGROUND_ATTACHMENT_FIXED; - } else if (ident->lower.data == c->strings[SCROLL]) { + } else if (ident->ilower == c->strings[SCROLL]) { value = BACKGROUND_ATTACHMENT_SCROLL; } else return CSS_INVALID; @@ -582,11 +582,11 @@ css_error parse_background_color(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags |= FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[TRANSPARENT]) { + token->ilower == c->strings[TRANSPARENT]) { parserutils_vector_iterate(vector, ctx); value = BACKGROUND_COLOR_TRANSPARENT; } else { @@ -644,10 +644,10 @@ css_error parse_background_image(css_language *c, return error; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[NONE]) { + token->ilower == c->strings[NONE]) { value = BACKGROUND_IMAGE_NONE; } else if (token->type == CSS_TOKEN_URI) { value = BACKGROUND_IMAGE_URI; @@ -710,15 +710,15 @@ css_error parse_background_repeat(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[NO_REPEAT]) { + } else if (ident->ilower == c->strings[NO_REPEAT]) { value = BACKGROUND_REPEAT_NO_REPEAT; - } else if (ident->lower.data == c->strings[REPEAT_X]) { + } else if (ident->ilower == c->strings[REPEAT_X]) { value = BACKGROUND_REPEAT_REPEAT_X; - } else if (ident->lower.data == c->strings[REPEAT_Y]) { + } else if (ident->ilower == c->strings[REPEAT_Y]) { value = BACKGROUND_REPEAT_REPEAT_Y; - } else if (ident->lower.data == c->strings[REPEAT]) { + } else if (ident->ilower == c->strings[REPEAT]) { value = BACKGROUND_REPEAT_REPEAT; } else return CSS_INVALID; @@ -776,11 +776,11 @@ css_error parse_border_collapse(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[COLLAPSE]) { + } else if (ident->ilower == c->strings[COLLAPSE]) { value = BORDER_COLLAPSE_COLLAPSE; - } else if (ident->lower.data == c->strings[SEPARATE]) { + } else if (ident->ilower == c->strings[SEPARATE]) { value = BORDER_COLLAPSE_SEPARATE; } else return CSS_INVALID; @@ -893,11 +893,11 @@ css_error parse_bottom(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[AUTO]) { + token->ilower == c->strings[AUTO]) { parserutils_vector_iterate(vector, ctx); value = BOTTOM_AUTO; } else { @@ -957,11 +957,11 @@ css_error parse_caption_side(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[TOP]) { + } else if (ident->ilower == c->strings[TOP]) { value = CAPTION_SIDE_TOP; - } else if (ident->lower.data == c->strings[BOTTOM]) { + } else if (ident->ilower == c->strings[BOTTOM]) { value = CAPTION_SIDE_BOTTOM; } else return CSS_INVALID; @@ -998,15 +998,15 @@ css_error parse_clear(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[RIGHT]) { + } else if (ident->ilower == c->strings[RIGHT]) { value = CLEAR_RIGHT; - } else if (ident->lower.data == c->strings[LEFT]) { + } else if (ident->ilower == c->strings[LEFT]) { value = CLEAR_LEFT; - } else if (ident->lower.data == c->strings[BOTH]) { + } else if (ident->ilower == c->strings[BOTH]) { value = CLEAR_BOTH; - } else if (ident->lower.data == c->strings[NONE]) { + } else if (ident->ilower == c->strings[NONE]) { value = CLEAR_NONE; } else return CSS_INVALID; @@ -1055,7 +1055,7 @@ css_error parse_color(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags |= FLAG_INHERIT; } else { @@ -1152,10 +1152,10 @@ css_error parse_cue_after(css_language *c, return error; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[NONE]) { + token->ilower == c->strings[NONE]) { value = CUE_AFTER_NONE; } else if (token->type == CSS_TOKEN_URI) { value = CUE_AFTER_URI; @@ -1208,10 +1208,10 @@ css_error parse_cue_before(css_language *c, return error; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[NONE]) { + token->ilower == c->strings[NONE]) { value = CUE_BEFORE_NONE; } else if (token->type == CSS_TOKEN_URI) { value = CUE_BEFORE_URI; @@ -1274,11 +1274,11 @@ css_error parse_direction(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[LTR]) { + } else if (ident->ilower == c->strings[LTR]) { value = DIRECTION_LTR; - } else if (ident->lower.data == c->strings[RTL]) { + } else if (ident->ilower == c->strings[RTL]) { value = DIRECTION_RTL; } else return CSS_INVALID; @@ -1318,39 +1318,39 @@ css_error parse_display(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[INLINE]) { + } else if (ident->ilower == c->strings[INLINE]) { value = DISPLAY_INLINE; - } else if (ident->lower.data == c->strings[BLOCK]) { + } else if (ident->ilower == c->strings[BLOCK]) { value = DISPLAY_BLOCK; - } else if (ident->lower.data == c->strings[LIST_ITEM]) { + } else if (ident->ilower == c->strings[LIST_ITEM]) { value = DISPLAY_LIST_ITEM; - } else if (ident->lower.data == c->strings[RUN_IN]) { + } else if (ident->ilower == c->strings[RUN_IN]) { value = DISPLAY_RUN_IN; - } else if (ident->lower.data == c->strings[INLINE_BLOCK]) { + } else if (ident->ilower == c->strings[INLINE_BLOCK]) { value = DISPLAY_INLINE_BLOCK; - } else if (ident->lower.data == c->strings[TABLE]) { + } else if (ident->ilower == c->strings[TABLE]) { value = DISPLAY_TABLE; - } else if (ident->lower.data == c->strings[INLINE_TABLE]) { + } else if (ident->ilower == c->strings[INLINE_TABLE]) { value = DISPLAY_INLINE_TABLE; - } else if (ident->lower.data == c->strings[TABLE_ROW_GROUP]) { + } else if (ident->ilower == c->strings[TABLE_ROW_GROUP]) { value = DISPLAY_TABLE_ROW_GROUP; - } else if (ident->lower.data == c->strings[TABLE_HEADER_GROUP]) { + } else if (ident->ilower == c->strings[TABLE_HEADER_GROUP]) { value = DISPLAY_TABLE_HEADER_GROUP; - } else if (ident->lower.data == c->strings[TABLE_FOOTER_GROUP]) { + } else if (ident->ilower == c->strings[TABLE_FOOTER_GROUP]) { value = DISPLAY_TABLE_FOOTER_GROUP; - } else if (ident->lower.data == c->strings[TABLE_ROW]) { + } else if (ident->ilower == c->strings[TABLE_ROW]) { value = DISPLAY_TABLE_ROW; - } else if (ident->lower.data == c->strings[TABLE_COLUMN_GROUP]) { + } else if (ident->ilower == c->strings[TABLE_COLUMN_GROUP]) { value = DISPLAY_TABLE_COLUMN_GROUP; - } else if (ident->lower.data == c->strings[TABLE_COLUMN]) { + } else if (ident->ilower == c->strings[TABLE_COLUMN]) { value = DISPLAY_TABLE_COLUMN; - } else if (ident->lower.data == c->strings[TABLE_CELL]) { + } else if (ident->ilower == c->strings[TABLE_CELL]) { value = DISPLAY_TABLE_CELL; - } else if (ident->lower.data == c->strings[TABLE_CAPTION]) { + } else if (ident->ilower == c->strings[TABLE_CAPTION]) { value = DISPLAY_TABLE_CAPTION; - } else if (ident->lower.data == c->strings[NONE]) { + } else if (ident->ilower == c->strings[NONE]) { value = DISPLAY_NONE; } else return CSS_INVALID; @@ -1387,27 +1387,27 @@ css_error parse_elevation(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[BELOW]) { + token->ilower == c->strings[BELOW]) { parserutils_vector_iterate(vector, ctx); value = ELEVATION_BELOW; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[LEVEL]) { + token->ilower == c->strings[LEVEL]) { parserutils_vector_iterate(vector, ctx); value = ELEVATION_LEVEL; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[ABOVE]) { + token->ilower == c->strings[ABOVE]) { parserutils_vector_iterate(vector, ctx); value = ELEVATION_ABOVE; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[HIGHER]) { + token->ilower == c->strings[HIGHER]) { parserutils_vector_iterate(vector, ctx); value = ELEVATION_HIGHER; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[LOWER]) { + token->ilower == c->strings[LOWER]) { parserutils_vector_iterate(vector, ctx); value = ELEVATION_LOWER; } else { @@ -1467,11 +1467,11 @@ css_error parse_empty_cells(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[SHOW]) { + } else if (ident->ilower == c->strings[SHOW]) { value = EMPTY_CELLS_SHOW; - } else if (ident->lower.data == c->strings[HIDE]) { + } else if (ident->ilower == c->strings[HIDE]) { value = EMPTY_CELLS_HIDE; } else return CSS_INVALID; @@ -1508,13 +1508,13 @@ css_error parse_float(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[LEFT]) { + } else if (ident->ilower == c->strings[LEFT]) { value = FLOAT_LEFT; - } else if (ident->lower.data == c->strings[RIGHT]) { + } else if (ident->ilower == c->strings[RIGHT]) { value = FLOAT_RIGHT; - } else if (ident->lower.data == c->strings[NONE]) { + } else if (ident->ilower == c->strings[NONE]) { value = FLOAT_NONE; } else return CSS_INVALID; @@ -1566,43 +1566,43 @@ css_error parse_font_size(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[XX_SMALL]) { + token->ilower == c->strings[XX_SMALL]) { parserutils_vector_iterate(vector, ctx); value = FONT_SIZE_XX_SMALL; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[X_SMALL]) { + token->ilower == c->strings[X_SMALL]) { parserutils_vector_iterate(vector, ctx); value = FONT_SIZE_X_SMALL; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[SMALL]) { + token->ilower == c->strings[SMALL]) { parserutils_vector_iterate(vector, ctx); value = FONT_SIZE_SMALL; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[MEDIUM]) { + token->ilower == c->strings[MEDIUM]) { parserutils_vector_iterate(vector, ctx); value = FONT_SIZE_MEDIUM; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[LARGE]) { + token->ilower == c->strings[LARGE]) { parserutils_vector_iterate(vector, ctx); value = FONT_SIZE_LARGE; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[X_LARGE]) { + token->ilower == c->strings[X_LARGE]) { parserutils_vector_iterate(vector, ctx); value = FONT_SIZE_X_LARGE; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[XX_LARGE]) { + token->ilower == c->strings[XX_LARGE]) { parserutils_vector_iterate(vector, ctx); value = FONT_SIZE_XX_LARGE; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[LARGER]) { + token->ilower == c->strings[LARGER]) { parserutils_vector_iterate(vector, ctx); value = FONT_SIZE_LARGER; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[SMALLER]) { + token->ilower == c->strings[SMALLER]) { parserutils_vector_iterate(vector, ctx); value = FONT_SIZE_SMALLER; } else { @@ -1662,13 +1662,13 @@ css_error parse_font_style(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[NORMAL]) { + } else if (ident->ilower == c->strings[NORMAL]) { value = FONT_STYLE_NORMAL; - } else if (ident->lower.data == c->strings[ITALIC]) { + } else if (ident->ilower == c->strings[ITALIC]) { value = FONT_STYLE_ITALIC; - } else if (ident->lower.data == c->strings[OBLIQUE]) { + } else if (ident->ilower == c->strings[OBLIQUE]) { value = FONT_STYLE_OBLIQUE; } else return CSS_INVALID; @@ -1705,11 +1705,11 @@ css_error parse_font_variant(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[NORMAL]) { + } else if (ident->ilower == c->strings[NORMAL]) { value = FONT_VARIANT_NORMAL; - } else if (ident->lower.data == c->strings[SMALL_CAPS]) { + } else if (ident->ilower == c->strings[SMALL_CAPS]) { value = FONT_VARIANT_SMALL_CAPS; } else return CSS_INVALID; @@ -1748,14 +1748,16 @@ css_error parse_font_weight(css_language *c, if (error != CSS_OK) return error; - if (token->lower.data == c->strings[INHERIT]) { + if (token->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; } else if (token->type == CSS_TOKEN_NUMBER) { size_t consumed = 0; - fixed num = number_from_css_string(&token->lower, &consumed); + css_string tmp = { token->ilower->len, + (uint8_t *) token->ilower }; + fixed num = number_from_css_string(&tmp, &consumed); int32_t intpart = FIXTOINT(num); /* Invalid if there are trailing characters or it was a float */ - if (consumed != token->lower.len || num != intpart) + if (consumed != token->ilower->len || num != intpart) return CSS_INVALID; switch (intpart) { case 100: value = FONT_WEIGHT_100; break; @@ -1769,13 +1771,13 @@ css_error parse_font_weight(css_language *c, case 900: value = FONT_WEIGHT_900; break; default: return CSS_INVALID; } - } else if (token->lower.data == c->strings[NORMAL]) { + } else if (token->ilower == c->strings[NORMAL]) { value = FONT_WEIGHT_NORMAL; - } else if (token->lower.data == c->strings[BOLD]) { + } else if (token->ilower == c->strings[BOLD]) { value = FONT_WEIGHT_BOLD; - } else if (token->lower.data == c->strings[BOLDER]) { + } else if (token->ilower == c->strings[BOLDER]) { value = FONT_WEIGHT_BOLDER; - } else if (token->lower.data == c->strings[LIGHTER]) { + } else if (token->ilower == c->strings[LIGHTER]) { value = FONT_WEIGHT_LIGHTER; } else return CSS_INVALID; @@ -1812,11 +1814,11 @@ css_error parse_height(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[AUTO]) { + token->ilower == c->strings[AUTO]) { parserutils_vector_iterate(vector, ctx); value = HEIGHT_AUTO; } else { @@ -1876,11 +1878,11 @@ css_error parse_left(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[AUTO]) { + token->ilower == c->strings[AUTO]) { parserutils_vector_iterate(vector, ctx); value = LEFT_AUTO; } else { @@ -1940,11 +1942,11 @@ css_error parse_letter_spacing(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[NORMAL]) { + token->ilower == c->strings[NORMAL]) { parserutils_vector_iterate(vector, ctx); value = LETTER_SPACING_NORMAL; } else { @@ -2005,17 +2007,19 @@ css_error parse_line_height(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[NORMAL]) { + token->ilower == c->strings[NORMAL]) { parserutils_vector_iterate(vector, ctx); value = LINE_HEIGHT_NORMAL; } else if (token->type == CSS_TOKEN_NUMBER) { size_t consumed = 0; - length = number_from_css_string(&token->lower, &consumed); - if (consumed != token->lower.len) + css_string tmp = { token->ilower->len, + (uint8_t *) token->ilower }; + length = number_from_css_string(&tmp, &consumed); + if (consumed != token->ilower->len) return CSS_INVALID; value = LINE_HEIGHT_NUMBER; @@ -2083,10 +2087,10 @@ css_error parse_list_style_image(css_language *c, return error; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[NONE]) { + token->ilower == c->strings[NONE]) { value = LIST_STYLE_IMAGE_NONE; } else if (token->type == CSS_TOKEN_URI) { value = LIST_STYLE_IMAGE_URI; @@ -2136,11 +2140,11 @@ css_error parse_list_style_position(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[INSIDE]) { + } else if (ident->ilower == c->strings[INSIDE]) { value = LIST_STYLE_POSITION_INSIDE; - } else if (ident->lower.data == c->strings[OUTSIDE]) { + } else if (ident->ilower == c->strings[OUTSIDE]) { value = LIST_STYLE_POSITION_OUTSIDE; } else return CSS_INVALID; @@ -2181,37 +2185,37 @@ css_error parse_list_style_type(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[DISC]) { + } else if (ident->ilower == c->strings[DISC]) { value = LIST_STYLE_TYPE_DISC; - } else if (ident->lower.data == c->strings[CIRCLE]) { + } else if (ident->ilower == c->strings[CIRCLE]) { value = LIST_STYLE_TYPE_CIRCLE; - } else if (ident->lower.data == c->strings[SQUARE]) { + } else if (ident->ilower == c->strings[SQUARE]) { value = LIST_STYLE_TYPE_SQUARE; - } else if (ident->lower.data == c->strings[DECIMAL]) { + } else if (ident->ilower == c->strings[DECIMAL]) { value = LIST_STYLE_TYPE_DECIMAL; - } else if (ident->lower.data == c->strings[DECIMAL_LEADING_ZERO]) { + } else if (ident->ilower == c->strings[DECIMAL_LEADING_ZERO]) { value = LIST_STYLE_TYPE_DECIMAL_LEADING_ZERO; - } else if (ident->lower.data == c->strings[LOWER_ROMAN]) { + } else if (ident->ilower == c->strings[LOWER_ROMAN]) { value = LIST_STYLE_TYPE_LOWER_ROMAN; - } else if (ident->lower.data == c->strings[UPPER_ROMAN]) { + } else if (ident->ilower == c->strings[UPPER_ROMAN]) { value = LIST_STYLE_TYPE_UPPER_ROMAN; - } else if (ident->lower.data == c->strings[LOWER_GREEK]) { + } else if (ident->ilower == c->strings[LOWER_GREEK]) { value = LIST_STYLE_TYPE_LOWER_GREEK; - } else if (ident->lower.data == c->strings[LOWER_LATIN]) { + } else if (ident->ilower == c->strings[LOWER_LATIN]) { value = LIST_STYLE_TYPE_LOWER_LATIN; - } else if (ident->lower.data == c->strings[UPPER_LATIN]) { + } else if (ident->ilower == c->strings[UPPER_LATIN]) { value = LIST_STYLE_TYPE_UPPER_LATIN; - } else if (ident->lower.data == c->strings[ARMENIAN]) { + } else if (ident->ilower == c->strings[ARMENIAN]) { value = LIST_STYLE_TYPE_ARMENIAN; - } else if (ident->lower.data == c->strings[GEORGIAN]) { + } else if (ident->ilower == c->strings[GEORGIAN]) { value = LIST_STYLE_TYPE_GEORGIAN; - } else if (ident->lower.data == c->strings[LOWER_ALPHA]) { + } else if (ident->ilower == c->strings[LOWER_ALPHA]) { value = LIST_STYLE_TYPE_LOWER_ALPHA; - } else if (ident->lower.data == c->strings[UPPER_ALPHA]) { + } else if (ident->ilower == c->strings[UPPER_ALPHA]) { value = LIST_STYLE_TYPE_UPPER_ALPHA; - } else if (ident->lower.data == c->strings[NONE]) { + } else if (ident->ilower == c->strings[NONE]) { value = LIST_STYLE_TYPE_NONE; } else return CSS_INVALID; @@ -2276,11 +2280,11 @@ css_error parse_max_height(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[NONE]) { + token->ilower == c->strings[NONE]) { parserutils_vector_iterate(vector, ctx); value = MAX_HEIGHT_NONE; } else { @@ -2340,11 +2344,11 @@ css_error parse_max_width(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[NONE]) { + token->ilower == c->strings[NONE]) { parserutils_vector_iterate(vector, ctx); value = MAX_WIDTH_NONE; } else { @@ -2404,7 +2408,7 @@ css_error parse_min_height(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else { @@ -2464,7 +2468,7 @@ css_error parse_min_width(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else { @@ -2527,14 +2531,16 @@ css_error parse_orphans(css_language *c, if (error != CSS_OK) return error; - if (token->lower.data == c->strings[INHERIT]) { + if (token->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; } else if (token->type == CSS_TOKEN_NUMBER) { size_t consumed = 0; - num = number_from_css_string(&token->lower, &consumed); + css_string tmp = { token->ilower->len, + (uint8_t *) token->ilower }; + num = number_from_css_string(&tmp, &consumed); int32_t intpart = FIXTOINT(num); /* Invalid if there are trailing characters or it was a float */ - if (consumed != token->lower.len || num != intpart) + if (consumed != token->ilower->len || num != intpart) return CSS_INVALID; value = ORPHANS_SET; @@ -2580,11 +2586,11 @@ css_error parse_outline_color(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags |= FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INVERT]) { + token->ilower == c->strings[INVERT]) { parserutils_vector_iterate(vector, ctx); value = OUTLINE_COLOR_INVERT; } else { @@ -2693,15 +2699,15 @@ css_error parse_overflow(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[VISIBLE]) { + } else if (ident->ilower == c->strings[VISIBLE]) { value = OVERFLOW_VISIBLE; - } else if (ident->lower.data == c->strings[HIDDEN]) { + } else if (ident->ilower == c->strings[HIDDEN]) { value = OVERFLOW_HIDDEN; - } else if (ident->lower.data == c->strings[SCROLL]) { + } else if (ident->ilower == c->strings[SCROLL]) { value = OVERFLOW_SCROLL; - } else if (ident->lower.data == c->strings[AUTO]) { + } else if (ident->ilower == c->strings[AUTO]) { value = OVERFLOW_AUTO; } else return CSS_INVALID; @@ -2766,17 +2772,17 @@ css_error parse_page_break_after(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[AUTO]) { + } else if (ident->ilower == c->strings[AUTO]) { value = PAGE_BREAK_AFTER_AUTO; - } else if (ident->lower.data == c->strings[ALWAYS]) { + } else if (ident->ilower == c->strings[ALWAYS]) { value = PAGE_BREAK_AFTER_ALWAYS; - } else if (ident->lower.data == c->strings[AVOID]) { + } else if (ident->ilower == c->strings[AVOID]) { value = PAGE_BREAK_AFTER_AVOID; - } else if (ident->lower.data == c->strings[LEFT]) { + } else if (ident->ilower == c->strings[LEFT]) { value = PAGE_BREAK_AFTER_LEFT; - } else if (ident->lower.data == c->strings[RIGHT]) { + } else if (ident->ilower == c->strings[RIGHT]) { value = PAGE_BREAK_AFTER_RIGHT; } else return CSS_INVALID; @@ -2813,17 +2819,17 @@ css_error parse_page_break_before(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[AUTO]) { + } else if (ident->ilower == c->strings[AUTO]) { value = PAGE_BREAK_BEFORE_AUTO; - } else if (ident->lower.data == c->strings[ALWAYS]) { + } else if (ident->ilower == c->strings[ALWAYS]) { value = PAGE_BREAK_BEFORE_ALWAYS; - } else if (ident->lower.data == c->strings[AVOID]) { + } else if (ident->ilower == c->strings[AVOID]) { value = PAGE_BREAK_BEFORE_AVOID; - } else if (ident->lower.data == c->strings[LEFT]) { + } else if (ident->ilower == c->strings[LEFT]) { value = PAGE_BREAK_BEFORE_LEFT; - } else if (ident->lower.data == c->strings[RIGHT]) { + } else if (ident->ilower == c->strings[RIGHT]) { value = PAGE_BREAK_BEFORE_RIGHT; } else return CSS_INVALID; @@ -2860,11 +2866,11 @@ css_error parse_page_break_inside(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[AUTO]) { + } else if (ident->ilower == c->strings[AUTO]) { value = PAGE_BREAK_INSIDE_AUTO; - } else if (ident->lower.data == c->strings[AVOID]) { + } else if (ident->ilower == c->strings[AVOID]) { value = PAGE_BREAK_INSIDE_AVOID; } else return CSS_INVALID; @@ -2901,7 +2907,7 @@ css_error parse_pause_after(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else { @@ -2961,7 +2967,7 @@ css_error parse_pause_before(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else { @@ -3024,13 +3030,15 @@ css_error parse_pitch_range(css_language *c, if (error != CSS_OK) return error; - if (token->lower.data == c->strings[INHERIT]) { + if (token->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; } else if (token->type == CSS_TOKEN_NUMBER) { size_t consumed = 0; - num = number_from_css_string(&token->lower, &consumed); + css_string tmp = { token->ilower->len, + (uint8_t *) token->ilower }; + num = number_from_css_string(&tmp, &consumed); /* Invalid if there are trailing characters */ - if (consumed != token->lower.len) + if (consumed != token->ilower->len) return CSS_INVALID; value = PITCH_RANGE_SET; @@ -3077,23 +3085,23 @@ css_error parse_pitch(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[X_LOW]) { + token->ilower == c->strings[X_LOW]) { value = PITCH_X_LOW; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[LOW]) { + token->ilower == c->strings[LOW]) { value = PITCH_LOW; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[MEDIUM]) { + token->ilower == c->strings[MEDIUM]) { value = PITCH_MEDIUM; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[HIGH]) { + token->ilower == c->strings[HIGH]) { value = PITCH_HIGH; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[X_HIGH]) { + token->ilower == c->strings[X_HIGH]) { value = PITCH_X_HIGH; } else { error = parse_unit_specifier(c, vector, ctx, &length, &unit); @@ -3166,15 +3174,15 @@ css_error parse_position(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[STATIC]) { + } else if (ident->ilower == c->strings[STATIC]) { value = POSITION_STATIC; - } else if (ident->lower.data == c->strings[RELATIVE]) { + } else if (ident->ilower == c->strings[RELATIVE]) { value = POSITION_RELATIVE; - } else if (ident->lower.data == c->strings[ABSOLUTE]) { + } else if (ident->ilower == c->strings[ABSOLUTE]) { value = POSITION_ABSOLUTE; - } else if (ident->lower.data == c->strings[FIXED]) { + } else if (ident->ilower == c->strings[FIXED]) { value = POSITION_FIXED; } else return CSS_INVALID; @@ -3228,13 +3236,15 @@ css_error parse_richness(css_language *c, if (error != CSS_OK) return error; - if (token->lower.data == c->strings[INHERIT]) { + if (token->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; } else if (token->type == CSS_TOKEN_NUMBER) { size_t consumed = 0; - num = number_from_css_string(&token->lower, &consumed); + css_string tmp = { token->ilower->len, + (uint8_t *) token->ilower }; + num = number_from_css_string(&tmp, &consumed); /* Invalid if there are trailing characters */ - if (consumed != token->lower.len) + if (consumed != token->ilower->len) return CSS_INVALID; value = RICHNESS_SET; @@ -3281,11 +3291,11 @@ css_error parse_right(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[AUTO]) { + token->ilower == c->strings[AUTO]) { parserutils_vector_iterate(vector, ctx); value = RIGHT_AUTO; } else { @@ -3345,11 +3355,11 @@ css_error parse_speak_header(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[ONCE]) { + } else if (ident->ilower == c->strings[ONCE]) { value = SPEAK_HEADER_ONCE; - } else if (ident->lower.data == c->strings[ALWAYS]) { + } else if (ident->ilower == c->strings[ALWAYS]) { value = SPEAK_HEADER_ALWAYS; } else return CSS_INVALID; @@ -3386,11 +3396,11 @@ css_error parse_speak_numeral(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[DIGITS]) { + } else if (ident->ilower == c->strings[DIGITS]) { value = SPEAK_NUMERAL_DIGITS; - } else if (ident->lower.data == c->strings[CONTINUOUS]) { + } else if (ident->ilower == c->strings[CONTINUOUS]) { value = SPEAK_NUMERAL_CONTINUOUS; } else return CSS_INVALID; @@ -3427,11 +3437,11 @@ css_error parse_speak_punctuation(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[CODE]) { + } else if (ident->ilower == c->strings[CODE]) { value = SPEAK_PUNCTUATION_CODE; - } else if (ident->lower.data == c->strings[NONE]) { + } else if (ident->ilower == c->strings[NONE]) { value = SPEAK_PUNCTUATION_NONE; } else return CSS_INVALID; @@ -3468,13 +3478,13 @@ css_error parse_speak(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[NORMAL]) { + } else if (ident->ilower == c->strings[NORMAL]) { value = SPEAK_NORMAL; - } else if (ident->lower.data == c->strings[NONE]) { + } else if (ident->ilower == c->strings[NONE]) { value = SPEAK_NONE; - } else if (ident->lower.data == c->strings[SPELL_OUT]) { + } else if (ident->ilower == c->strings[SPELL_OUT]) { value = SPEAK_SPELL_OUT; } else return CSS_INVALID; @@ -3517,34 +3527,36 @@ css_error parse_speech_rate(css_language *c, return error; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[X_SLOW]) { + token->ilower == c->strings[X_SLOW]) { value = SPEECH_RATE_X_SLOW; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[SLOW]) { + token->ilower == c->strings[SLOW]) { value = SPEECH_RATE_SLOW; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[MEDIUM]) { + token->ilower == c->strings[MEDIUM]) { value = SPEECH_RATE_MEDIUM; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[FAST]) { + token->ilower == c->strings[FAST]) { value = SPEECH_RATE_FAST; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[X_FAST]) { + token->ilower == c->strings[X_FAST]) { value = SPEECH_RATE_X_FAST; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[FASTER]) { + token->ilower == c->strings[FASTER]) { value = SPEECH_RATE_FASTER; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[SLOWER]) { + token->ilower == c->strings[SLOWER]) { value = SPEECH_RATE_SLOWER; } else if (token->type == CSS_TOKEN_NUMBER) { size_t consumed = 0; - num = number_from_css_string(&token->lower, &consumed); + css_string tmp = { token->ilower->len, + (uint8_t *) token->ilower }; + num = number_from_css_string(&tmp, &consumed); /* Invalid if there are trailing characters */ - if (consumed != token->lower.len) + if (consumed != token->ilower->len) return CSS_INVALID; value = SPEECH_RATE_SET; @@ -3594,13 +3606,15 @@ css_error parse_stress(css_language *c, if (error != CSS_OK) return error; - if (token->lower.data == c->strings[INHERIT]) { + if (token->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; } else if (token->type == CSS_TOKEN_NUMBER) { size_t consumed = 0; - num = number_from_css_string(&token->lower, &consumed); + css_string tmp = { token->ilower->len, + (uint8_t *) token->ilower }; + num = number_from_css_string(&tmp, &consumed); /* Invalid if there are trailing characters */ - if (consumed != token->lower.len) + if (consumed != token->ilower->len) return CSS_INVALID; value = STRESS_SET; @@ -3647,11 +3661,11 @@ css_error parse_table_layout(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[AUTO]) { + } else if (ident->ilower == c->strings[AUTO]) { value = TABLE_LAYOUT_AUTO; - } else if (ident->lower.data == c->strings[FIXED]) { + } else if (ident->ilower == c->strings[FIXED]) { value = TABLE_LAYOUT_FIXED; } else return CSS_INVALID; @@ -3688,15 +3702,15 @@ css_error parse_text_align(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[LEFT]) { + } else if (ident->ilower == c->strings[LEFT]) { value = TEXT_ALIGN_LEFT; - } else if (ident->lower.data == c->strings[RIGHT]) { + } else if (ident->ilower == c->strings[RIGHT]) { value = TEXT_ALIGN_RIGHT; - } else if (ident->lower.data == c->strings[CENTER]) { + } else if (ident->ilower == c->strings[CENTER]) { value = TEXT_ALIGN_CENTER; - } else if (ident->lower.data == c->strings[JUSTIFY]) { + } else if (ident->ilower == c->strings[JUSTIFY]) { value = TEXT_ALIGN_JUSTIFY; } else return CSS_INVALID; @@ -3747,7 +3761,7 @@ css_error parse_text_indent(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else { @@ -3807,15 +3821,15 @@ css_error parse_text_transform(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[CAPITALIZE]) { + } else if (ident->ilower == c->strings[CAPITALIZE]) { value = TEXT_TRANSFORM_CAPITALIZE; - } else if (ident->lower.data == c->strings[UPPERCASE]) { + } else if (ident->ilower == c->strings[UPPERCASE]) { value = TEXT_TRANSFORM_UPPERCASE; - } else if (ident->lower.data == c->strings[LOWERCASE]) { + } else if (ident->ilower == c->strings[LOWERCASE]) { value = TEXT_TRANSFORM_LOWERCASE; - } else if (ident->lower.data == c->strings[NONE]) { + } else if (ident->ilower == c->strings[NONE]) { value = TEXT_TRANSFORM_NONE; } else return CSS_INVALID; @@ -3852,11 +3866,11 @@ css_error parse_top(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[AUTO]) { + token->ilower == c->strings[AUTO]) { parserutils_vector_iterate(vector, ctx); value = TOP_AUTO; } else { @@ -3916,13 +3930,13 @@ css_error parse_unicode_bidi(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[NORMAL]) { + } else if (ident->ilower == c->strings[NORMAL]) { value = UNICODE_BIDI_NORMAL; - } else if (ident->lower.data == c->strings[EMBED]) { + } else if (ident->ilower == c->strings[EMBED]) { value = UNICODE_BIDI_EMBED; - } else if (ident->lower.data == c->strings[BIDI_OVERRIDE]) { + } else if (ident->ilower == c->strings[BIDI_OVERRIDE]) { value = UNICODE_BIDI_BIDI_OVERRIDE; } else return CSS_INVALID; @@ -3961,39 +3975,39 @@ css_error parse_vertical_align(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[BASELINE]) { + token->ilower == c->strings[BASELINE]) { parserutils_vector_iterate(vector, ctx); value = VERTICAL_ALIGN_BASELINE; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[SUB]) { + token->ilower == c->strings[SUB]) { parserutils_vector_iterate(vector, ctx); value = VERTICAL_ALIGN_SUB; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[SUPER]) { + token->ilower == c->strings[SUPER]) { parserutils_vector_iterate(vector, ctx); value = VERTICAL_ALIGN_SUPER; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[TOP]) { + token->ilower == c->strings[TOP]) { parserutils_vector_iterate(vector, ctx); value = VERTICAL_ALIGN_TOP; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[TEXT_TOP]) { + token->ilower == c->strings[TEXT_TOP]) { parserutils_vector_iterate(vector, ctx); value = VERTICAL_ALIGN_TEXT_TOP; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[MIDDLE]) { + token->ilower == c->strings[MIDDLE]) { parserutils_vector_iterate(vector, ctx); value = VERTICAL_ALIGN_MIDDLE; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[BOTTOM]) { + token->ilower == c->strings[BOTTOM]) { parserutils_vector_iterate(vector, ctx); value = VERTICAL_ALIGN_BOTTOM; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[TEXT_BOTTOM]) { + token->ilower == c->strings[TEXT_BOTTOM]) { parserutils_vector_iterate(vector, ctx); value = VERTICAL_ALIGN_TEXT_BOTTOM; } else { @@ -4053,13 +4067,13 @@ css_error parse_visibility(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[VISIBLE]) { + } else if (ident->ilower == c->strings[VISIBLE]) { value = VISIBILITY_VISIBLE; - } else if (ident->lower.data == c->strings[HIDDEN]) { + } else if (ident->ilower == c->strings[HIDDEN]) { value = VISIBILITY_HIDDEN; - } else if (ident->lower.data == c->strings[COLLAPSE]) { + } else if (ident->ilower == c->strings[COLLAPSE]) { value = VISIBILITY_COLLAPSE; } else return CSS_INVALID; @@ -4112,37 +4126,39 @@ css_error parse_volume(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[SILENT]) { + token->ilower == c->strings[SILENT]) { parserutils_vector_iterate(vector, ctx); value = VOLUME_SILENT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[X_SOFT]) { + token->ilower == c->strings[X_SOFT]) { parserutils_vector_iterate(vector, ctx); value = VOLUME_X_SOFT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[SOFT]) { + token->ilower == c->strings[SOFT]) { parserutils_vector_iterate(vector, ctx); value = VOLUME_SOFT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[MEDIUM]) { + token->ilower == c->strings[MEDIUM]) { parserutils_vector_iterate(vector, ctx); value = VOLUME_MEDIUM; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[LOUD]) { + token->ilower == c->strings[LOUD]) { parserutils_vector_iterate(vector, ctx); value = VOLUME_LOUD; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[X_LOUD]) { + token->ilower == c->strings[X_LOUD]) { parserutils_vector_iterate(vector, ctx); value = VOLUME_X_LOUD; } else if (token->type == CSS_TOKEN_NUMBER) { size_t consumed = 0; - length = number_from_css_string(&token->lower, &consumed); - if (consumed != token->lower.len) + css_string tmp = { token->ilower->len, + (uint8_t *) token->ilower }; + length = number_from_css_string(&tmp, &consumed); + if (consumed != token->ilower->len) return CSS_INVALID; value = VOLUME_NUMBER; @@ -4206,17 +4222,17 @@ css_error parse_white_space(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[NORMAL]) { + } else if (ident->ilower == c->strings[NORMAL]) { value = WHITE_SPACE_NORMAL; - } else if (ident->lower.data == c->strings[PRE]) { + } else if (ident->ilower == c->strings[PRE]) { value = WHITE_SPACE_PRE; - } else if (ident->lower.data == c->strings[NOWRAP]) { + } else if (ident->ilower == c->strings[NOWRAP]) { value = WHITE_SPACE_NOWRAP; - } else if (ident->lower.data == c->strings[PRE_WRAP]) { + } else if (ident->ilower == c->strings[PRE_WRAP]) { value = WHITE_SPACE_PRE_WRAP; - } else if (ident->lower.data == c->strings[PRE_LINE]) { + } else if (ident->ilower == c->strings[PRE_LINE]) { value = WHITE_SPACE_PRE_LINE; } else return CSS_INVALID; @@ -4256,14 +4272,16 @@ css_error parse_widows(css_language *c, if (error != CSS_OK) return error; - if (token->lower.data == c->strings[INHERIT]) { + if (token->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; } else if (token->type == CSS_TOKEN_NUMBER) { size_t consumed = 0; - num = number_from_css_string(&token->lower, &consumed); + css_string tmp = { token->ilower->len, + (uint8_t *) token->ilower }; + num = number_from_css_string(&tmp, &consumed); int32_t intpart = FIXTOINT(num); /* Invalid if there are trailing characters or it was a float */ - if (consumed != token->lower.len || num != intpart) + if (consumed != token->ilower->len || num != intpart) return CSS_INVALID; value = WIDOWS_SET; @@ -4310,11 +4328,11 @@ css_error parse_width(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[AUTO]) { + token->ilower == c->strings[AUTO]) { parserutils_vector_iterate(vector, ctx); value = WIDTH_AUTO; } else { @@ -4374,11 +4392,11 @@ css_error parse_word_spacing(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[NORMAL]) { + token->ilower == c->strings[NORMAL]) { parserutils_vector_iterate(vector, ctx); value = WORD_SPACING_NORMAL; } else { @@ -4443,17 +4461,19 @@ css_error parse_z_index(css_language *c, return error; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[AUTO]) { + token->ilower == c->strings[AUTO]) { value = Z_INDEX_AUTO; } else if (token->type == CSS_TOKEN_NUMBER) { size_t consumed = 0; - num = number_from_css_string(&token->lower, &consumed); + css_string tmp = { token->ilower->len, + (uint8_t *) token->ilower }; + num = number_from_css_string(&tmp, &consumed); int32_t intpart = FIXTOINT(num); /* Invalid if there are trailing characters or it was a float */ - if (consumed != token->lower.len || num != intpart) + if (consumed != token->ilower->len || num != intpart) return CSS_INVALID; value = Z_INDEX_SET; @@ -4497,7 +4517,7 @@ css_error parse_important(css_language *c, if (token == NULL || token->type != CSS_TOKEN_IDENT) return CSS_INVALID; - if (token->lower.data == c->strings[IMPORTANT]) + if (token->ilower == c->strings[IMPORTANT]) *result |= FLAG_IMPORTANT; } else if (token != NULL) return CSS_INVALID; @@ -4564,11 +4584,11 @@ css_error parse_border_side_color(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags |= FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[TRANSPARENT]) { + token->ilower == c->strings[TRANSPARENT]) { parserutils_vector_iterate(vector, ctx); value = BORDER_COLOR_TRANSPARENT; } else { @@ -4624,27 +4644,27 @@ css_error parse_border_side_style(css_language *c, if (error != CSS_OK) return error; - if (ident->lower.data == c->strings[INHERIT]) { + if (ident->ilower == c->strings[INHERIT]) { flags |= FLAG_INHERIT; - } else if (ident->lower.data == c->strings[NONE]) { + } else if (ident->ilower == c->strings[NONE]) { value = BORDER_STYLE_NONE; - } else if (ident->lower.data == c->strings[HIDDEN]) { + } else if (ident->ilower == c->strings[HIDDEN]) { value = BORDER_STYLE_HIDDEN; - } else if (ident->lower.data == c->strings[DOTTED]) { + } else if (ident->ilower == c->strings[DOTTED]) { value = BORDER_STYLE_DOTTED; - } else if (ident->lower.data == c->strings[DASHED]) { + } else if (ident->ilower == c->strings[DASHED]) { value = BORDER_STYLE_DASHED; - } else if (ident->lower.data == c->strings[SOLID]) { + } else if (ident->ilower == c->strings[SOLID]) { value = BORDER_STYLE_SOLID; - } else if (ident->lower.data == c->strings[DOUBLE]) { + } else if (ident->ilower == c->strings[DOUBLE]) { value = BORDER_STYLE_DOUBLE; - } else if (ident->lower.data == c->strings[GROOVE]) { + } else if (ident->ilower == c->strings[GROOVE]) { value = BORDER_STYLE_GROOVE; - } else if (ident->lower.data == c->strings[RIDGE]) { + } else if (ident->ilower == c->strings[RIDGE]) { value = BORDER_STYLE_RIDGE; - } else if (ident->lower.data == c->strings[INSET]) { + } else if (ident->ilower == c->strings[INSET]) { value = BORDER_STYLE_INSET; - } else if (ident->lower.data == c->strings[OUTSET]) { + } else if (ident->ilower == c->strings[OUTSET]) { value = BORDER_STYLE_OUTSET; } else return CSS_INVALID; @@ -4681,19 +4701,19 @@ css_error parse_border_side_width(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags |= FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[THIN]) { + token->ilower == c->strings[THIN]) { parserutils_vector_iterate(vector, ctx); value = BORDER_WIDTH_THIN; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[MEDIUM]) { + token->ilower == c->strings[MEDIUM]) { parserutils_vector_iterate(vector, ctx); value = BORDER_WIDTH_MEDIUM; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[THICK]) { + token->ilower == c->strings[THICK]) { parserutils_vector_iterate(vector, ctx); value = BORDER_WIDTH_THICK; } else { @@ -4754,11 +4774,11 @@ css_error parse_margin_side(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[AUTO]) { + token->ilower == c->strings[AUTO]) { parserutils_vector_iterate(vector, ctx); value = MARGIN_AUTO; } else { @@ -4818,7 +4838,7 @@ css_error parse_padding_side(css_language *c, return CSS_INVALID; if (token->type == CSS_TOKEN_IDENT && - token->lower.data == c->strings[INHERIT]) { + token->ilower == c->strings[INHERIT]) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else { diff --git a/src/parse/propstrings.h b/src/parse/propstrings.h index 24858c0..a0aad04 100644 --- a/src/parse/propstrings.h +++ b/src/parse/propstrings.h @@ -11,6 +11,9 @@ #include "utils/utils.h" enum { + /* Universal selector */ + UNIVERSAL, + /* At-rules */ CHARSET, IMPORT, MEDIA, PAGE, @@ -69,6 +72,8 @@ static struct { const char *data; size_t len; } stringmap[LAST_KNOWN] = { + { "*", SLEN("*") }, + { "charset", SLEN("charset") }, { "import", SLEN("import") }, { "media", SLEN("media") }, diff --git a/src/stylesheet.c b/src/stylesheet.c index f700a63..ae254f7 100644 --- a/src/stylesheet.c +++ b/src/stylesheet.c @@ -354,12 +354,10 @@ css_error css_stylesheet_style_destroy(css_stylesheet *sheet, css_style *style) * CSS_NOMEM on memory exhaustion */ css_error css_stylesheet_selector_create(css_stylesheet *sheet, - css_selector_type type, const css_string *name, - const css_string *value, css_selector **selector) + css_selector_type type, const parserutils_hash_entry *name, + const parserutils_hash_entry *value, css_selector **selector) { - const parserutils_hash_entry *iname, *ivalue; css_selector *sel; - parserutils_error perror; if (sheet == NULL || name == NULL || selector == NULL) return CSS_BADPARM; @@ -371,28 +369,8 @@ css_error css_stylesheet_selector_create(css_stylesheet *sheet, memset(sel, 0, sizeof(css_selector)); sel->data.type = type; - - /** \todo Given that this information is already guaranteed to be in - * the dictionary, it would be more efficient to pass a pointer to the - * dictionary entry around rather than re-discovering it here. The same - * applies for value, and in css_stylesheet_selector_detail_create() */ - perror = parserutils_hash_insert(sheet->dictionary, name->data, - name->len, &iname); - if (perror != PARSERUTILS_OK) { - sheet->alloc(sel, 0, sheet->pw); - return css_error_from_parserutils_error(perror); - } - sel->data.name = iname; - - if (value != NULL) { - perror = parserutils_hash_insert(sheet->dictionary, - value->data, value->len, &ivalue); - if (perror != PARSERUTILS_OK) { - sheet->alloc(sel, 0, sheet->pw); - return css_error_from_parserutils_error(perror); - } - sel->data.value = ivalue; - } + sel->data.name = name; + sel->data.value = value; /** \todo specificity */ sel->specificity = 0; @@ -436,11 +414,10 @@ css_error css_stylesheet_selector_destroy(css_stylesheet *sheet, * CSS_NOMEM on memory exhaustion */ css_error css_stylesheet_selector_detail_create(css_stylesheet *sheet, - css_selector_type type, const css_string *name, - const css_string *value, css_selector_detail **detail) + css_selector_type type, const parserutils_hash_entry *name, + const parserutils_hash_entry *value, + css_selector_detail **detail) { - parserutils_error perror; - const parserutils_hash_entry *iname, *ivalue; css_selector_detail *det; if (sheet == NULL || name == NULL || detail == NULL) @@ -453,24 +430,8 @@ css_error css_stylesheet_selector_detail_create(css_stylesheet *sheet, memset(det, 0, sizeof(css_selector_detail)); det->type = type; - - perror = parserutils_hash_insert(sheet->dictionary, name->data, - name->len, &iname); - if (perror != PARSERUTILS_OK) { - sheet->alloc(det, 0, sheet->pw); - return css_error_from_parserutils_error(perror); - } - det->name = iname; - - if (value != NULL) { - perror = parserutils_hash_insert(sheet->dictionary, - value->data, value->len, &ivalue); - if (perror != PARSERUTILS_OK) { - sheet->alloc(det, 0, sheet->pw); - return css_error_from_parserutils_error(perror); - } - det->value = ivalue; - } + det->name = name; + det->value = value; *detail = det; diff --git a/src/stylesheet.h b/src/stylesheet.h index 487f408..9f9b21e 100644 --- a/src/stylesheet.h +++ b/src/stylesheet.h @@ -180,14 +180,15 @@ css_error css_stylesheet_style_create(css_stylesheet *sheet, uint32_t len, css_error css_stylesheet_style_destroy(css_stylesheet *sheet, css_style *style); css_error css_stylesheet_selector_create(css_stylesheet *sheet, - css_selector_type type, const css_string *name, - const css_string *value, css_selector **selector); + css_selector_type type, const parserutils_hash_entry *name, + const parserutils_hash_entry *value, css_selector **selector); css_error css_stylesheet_selector_destroy(css_stylesheet *sheet, css_selector *selector); css_error css_stylesheet_selector_detail_create(css_stylesheet *sheet, - css_selector_type type, const css_string *name, - const css_string *value, css_selector_detail **detail); + css_selector_type type, const parserutils_hash_entry *name, + const parserutils_hash_entry *value, + css_selector_detail **detail); css_error css_stylesheet_selector_detail_destroy(css_stylesheet *sheet, css_selector_detail *detail); -- cgit v1.2.3