summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2008-12-01 14:17:34 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2008-12-01 14:17:34 +0000
commit7d11de5da22b343716734be3be1810cb3163a696 (patch)
treeb7e092c889747cde6ffcd1eaad488c6ed10670c7
parent9e8f4efc94c896b4df2110272f42d2c93e1512d4 (diff)
downloadlibcss-7d11de5da22b343716734be3be1810cb3163a696.tar.gz
libcss-7d11de5da22b343716734be3be1810cb3163a696.tar.bz2
Retain pointer to dictionary entries so we don't have to rediscover it later.
svn path=/trunk/libcss/; revision=5862
-rw-r--r--src/lex/lex.c4
-rw-r--r--src/lex/lex.h6
-rw-r--r--src/parse/language.c34
-rw-r--r--src/parse/parse.c205
-rw-r--r--src/parse/parse.h2
-rw-r--r--src/parse/properties.c578
-rw-r--r--src/parse/propstrings.h5
-rw-r--r--src/stylesheet.c57
-rw-r--r--src/stylesheet.h9
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 <libcss/types.h>
#include <parserutils/input/inputstream.h>
+#include <parserutils/utils/hash.h>
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);