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/parse/language.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) (limited to 'src/parse/language.c') 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; } -- cgit v1.2.3