diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2009-07-17 16:33:25 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2009-07-17 16:33:25 +0000 |
commit | 6792e16519fea61050cd5979c0a42d2a6b2f5bae (patch) | |
tree | 197abfe00c0cd7634af32bddb9f1bf5378c86548 /src/select | |
parent | fdd5d5f6a27e1f072bd8ba0735c4c23c2456b8da (diff) | |
download | libcss-6792e16519fea61050cd5979c0a42d2a6b2f5bae.tar.gz libcss-6792e16519fea61050cd5979c0a42d2a6b2f5bae.tar.bz2 |
Change mechanism for handling case sensitivity of element names. Now has another selection handler callback for this.
Change selector hash to use an ASCII case-insensitive hash function.
svn path=/trunk/libcss/; revision=8602
Diffstat (limited to 'src/select')
-rw-r--r-- | src/select/hash.c | 17 | ||||
-rw-r--r-- | src/select/select.c | 15 |
2 files changed, 17 insertions, 15 deletions
diff --git a/src/select/hash.c b/src/select/hash.c index 62d5136..62df88c 100644 --- a/src/select/hash.c +++ b/src/select/hash.c @@ -305,13 +305,26 @@ uint32_t _hash(const css_selector *sel) } /** - * Name hash function + * Name hash function -- case-insensitive FNV. * * \param name Name to hash * \return hash value */ uint32_t _hash_name(lwc_string *name) { - return lwc_string_hash_value(name); + uint32_t z = 0x811c9dc5; + size_t len = lwc_string_length(name); + const char *data = lwc_string_data(name); + + while (len > 0) { + const char c = *data++; + + z *= 0x01000193; + z ^= ('A' <= c && c <= 'Z') ? (c + 'a' - 'A') : c; + + len--; + } + + return z; } diff --git a/src/select/select.c b/src/select/select.c index e8feb36..ca1a3c0 100644 --- a/src/select/select.c +++ b/src/select/select.c @@ -962,19 +962,8 @@ css_error match_detail(css_select_ctx *ctx, void *node, lwc_string_data(detail->name)[0] == '*') { *match = true; } else { - lwc_string *element; - error = state->handler->node_name(state->pw, node, - state->sheet->dictionary, &element); - if (error == CSS_OK) { - /** \todo Consider stylesheet's case flag */ - lwc_context_string_isequal( - state->sheet->dictionary, - element, detail->name, match); - - lwc_context_string_unref( - state->sheet->dictionary, - element); - } + error = state->handler->node_has_name(state->pw, node, + detail->name, match); } break; case CSS_SELECTOR_CLASS: |