diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2011-01-31 00:18:15 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2011-01-31 00:18:15 +0000 |
commit | 9fa9b9d104c730ef6d84b19245b61ebc9554b432 (patch) | |
tree | fb4f28285283241da6490b482dc61aac731f48a8 /test/parse-auto.c | |
parent | 6ba000db056d7e9b70a7e154a003644046bf7e98 (diff) | |
download | libcss-9fa9b9d104c730ef6d84b19245b61ebc9554b432.tar.gz libcss-9fa9b9d104c730ef6d84b19245b61ebc9554b432.tar.bz2 |
CSS3 Selectors
svn path=/trunk/libcss/; revision=11557
Diffstat (limited to 'test/parse-auto.c')
-rw-r--r-- | test/parse-auto.c | 81 |
1 files changed, 67 insertions, 14 deletions
diff --git a/test/parse-auto.c b/test/parse-auto.c index e268c3b..3c3e011 100644 --- a/test/parse-auto.c +++ b/test/parse-auto.c @@ -619,12 +619,15 @@ void dump_selector_list(css_selector *list, char **ptr) memcpy(*ptr, " + ", 3); *ptr += 3; break; + case CSS_COMBINATOR_GENERIC_SIBLING: + memcpy(*ptr, " ~ ", 3); + *ptr += 3; + break; } dump_selector(list, ptr); } - void dump_selector(css_selector *selector, char **ptr) { css_selector_detail *d = &selector->data; @@ -641,14 +644,17 @@ void dump_selector(css_selector *selector, char **ptr) void dump_selector_detail(css_selector_detail *detail, char **ptr) { + if (detail->negate) + *ptr += sprintf(*ptr, ":not("); + switch (detail->type) { case CSS_SELECTOR_ELEMENT: - if (lwc_string_length(detail->name) == 1 && - lwc_string_data(detail->name)[0] == '*' && + if (lwc_string_length(detail->name) == 1 && + lwc_string_data(detail->name)[0] == '*' && detail->next == 0) { dump_string(detail->name, ptr); } else if (lwc_string_length(detail->name) != 1 || - lwc_string_data(detail->name)[0] != '*') { + lwc_string_data(detail->name)[0] != '*') { dump_string(detail->name, ptr); } break; @@ -667,12 +673,18 @@ void dump_selector_detail(css_selector_detail *detail, char **ptr) **ptr = ':'; *ptr += 1; dump_string(detail->name, ptr); - if (detail->value != NULL) { - **ptr = '('; - *ptr += 1; - dump_string(detail->value, ptr); - **ptr = ')'; - *ptr += 1; + if (detail->value_type == CSS_SELECTOR_DETAIL_VALUE_STRING) { + if (detail->value.string != NULL) { + **ptr = '('; + *ptr += 1; + dump_string(detail->value.string, ptr); + **ptr = ')'; + *ptr += 1; + } + } else { + *ptr += sprintf(*ptr, "(%dn+%d)", + detail->value.nth.a, + detail->value.nth.b); } break; case CSS_SELECTOR_ATTRIBUTE: @@ -689,7 +701,7 @@ void dump_selector_detail(css_selector_detail *detail, char **ptr) (*ptr)[0] = '='; (*ptr)[1] = '"'; *ptr += 2; - dump_string(detail->value, ptr); + dump_string(detail->value.string, ptr); (*ptr)[0] = '"'; (*ptr)[1] = ']'; *ptr += 2; @@ -702,7 +714,7 @@ void dump_selector_detail(css_selector_detail *detail, char **ptr) (*ptr)[1] = '='; (*ptr)[2] = '"'; *ptr += 3; - dump_string(detail->value, ptr); + dump_string(detail->value.string, ptr); (*ptr)[0] = '"'; (*ptr)[1] = ']'; *ptr += 2; @@ -715,12 +727,54 @@ void dump_selector_detail(css_selector_detail *detail, char **ptr) (*ptr)[1] = '='; (*ptr)[2] = '"'; *ptr += 3; - dump_string(detail->value, ptr); + dump_string(detail->value.string, ptr); + (*ptr)[0] = '"'; + (*ptr)[1] = ']'; + *ptr += 2; + break; + case CSS_SELECTOR_ATTRIBUTE_PREFIX: + **ptr = '['; + *ptr += 1; + dump_string(detail->name, ptr); + (*ptr)[0] = '^'; + (*ptr)[1] = '='; + (*ptr)[2] = '"'; + *ptr += 3; + dump_string(detail->value.string, ptr); + (*ptr)[0] = '"'; + (*ptr)[1] = ']'; + *ptr += 2; + break; + case CSS_SELECTOR_ATTRIBUTE_SUFFIX: + **ptr = '['; + *ptr += 1; + dump_string(detail->name, ptr); + (*ptr)[0] = '$'; + (*ptr)[1] = '='; + (*ptr)[2] = '"'; + *ptr += 3; + dump_string(detail->value.string, ptr); + (*ptr)[0] = '"'; + (*ptr)[1] = ']'; + *ptr += 2; + break; + case CSS_SELECTOR_ATTRIBUTE_SUBSTRING: + **ptr = '['; + *ptr += 1; + dump_string(detail->name, ptr); + (*ptr)[0] = '*'; + (*ptr)[1] = '='; + (*ptr)[2] = '"'; + *ptr += 3; + dump_string(detail->value.string, ptr); (*ptr)[0] = '"'; (*ptr)[1] = ']'; *ptr += 2; break; } + + if (detail->negate) + *ptr += sprintf(*ptr, ")"); } void dump_string(lwc_string *string, char **ptr) @@ -728,4 +782,3 @@ void dump_string(lwc_string *string, char **ptr) *ptr += sprintf(*ptr, "%.*s", (int) lwc_string_length(string), lwc_string_data(string)); } - |