diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2004-07-30 21:53:52 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2004-07-30 21:53:52 +0000 |
commit | d601aa71887b45b4fbd1c1c86f5cfe2971100216 (patch) | |
tree | ea9e8424f3a146984b11d29071f4aa6cc30ca92e /css/parser.y | |
parent | 999ded28b8f0bdd35f99bedeb11ac74a4dca5279 (diff) | |
download | netsurf-d601aa71887b45b4fbd1c1c86f5cfe2971100216.tar.gz netsurf-d601aa71887b45b4fbd1c1c86f5cfe2971100216.tar.bz2 |
[project @ 2004-07-30 21:53:52 by jmb]
Implement some CSS3 attribute selectors
svn path=/import/netsurf/; revision=1167
Diffstat (limited to 'css/parser.y')
-rw-r--r-- | css/parser.y | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/css/parser.y b/css/parser.y index 1dd567ff1..f043ef823 100644 --- a/css/parser.y +++ b/css/parser.y @@ -185,6 +185,36 @@ detail(A) ::= LBRAC IDENT(B) DASHMATCH STRING(C) RBRAC. if (A) { A->data2 = C.text + 1; A->data2_length = C.length - 2; A->specificity = 0x100; } else param->memory_error = true; } +detail(A) ::= LBRAC IDENT(B) PREFIX IDENT(C) RBRAC. + { A = css_new_selector(CSS_SELECTOR_ATTRIB_PRE, B.text, B.length); + if (A) { A->data2 = C.text; A->data2_length = C.length; + A->specificity = 0x100; } + else param->memory_error = true; } +detail(A) ::= LBRAC IDENT(B) PREFIX STRING(C) RBRAC. + { A = css_new_selector(CSS_SELECTOR_ATTRIB_PRE, B.text, B.length); + if (A) { A->data2 = C.text + 1; A->data2_length = C.length - 2; + A->specificity = 0x100; } + else param->memory_error = true; } +detail(A) ::= LBRAC IDENT(B) SUFFIX IDENT(C) RBRAC. + { A = css_new_selector(CSS_SELECTOR_ATTRIB_SUF, B.text, B.length); + if (A) { A->data2 = C.text; A->data2_length = C.length; + A->specificity = 0x100; } + else param->memory_error = true; } +detail(A) ::= LBRAC IDENT(B) SUFFIX STRING(C) RBRAC. + { A = css_new_selector(CSS_SELECTOR_ATTRIB_SUF, B.text, B.length); + if (A) { A->data2 = C.text + 1; A->data2_length = C.length - 2; + A->specificity = 0x100; } + else param->memory_error = true; } +detail(A) ::= LBRAC IDENT(B) SUBSTR IDENT(C) RBRAC. + { A = css_new_selector(CSS_SELECTOR_ATTRIB_SUB, B.text, B.length); + if (A) { A->data2 = C.text; A->data2_length = C.length; + A->specificity = 0x100; } + else param->memory_error = true; } +detail(A) ::= LBRAC IDENT(B) SUBSTR STRING(C) RBRAC. + { A = css_new_selector(CSS_SELECTOR_ATTRIB_SUB, B.text, B.length); + if (A) { A->data2 = C.text + 1; A->data2_length = C.length - 2; + A->specificity = 0x100; } + else param->memory_error = true; } detail(A) ::= COLON IDENT(B). { if (B.length == 4 && strncasecmp(B.text, "link", 4) == 0) { A = css_new_selector(CSS_SELECTOR_ATTRIB, "href", 4); @@ -297,6 +327,18 @@ any(A) ::= DASHMATCH. { A = css_new_node(param->stylesheet, CSS_NODE_DASHMATCH, 0, 0); if (!A) param->memory_error = true; } +any(A) ::= PREFIX. + { A = css_new_node(param->stylesheet, CSS_NODE_PREFIX, + 0, 0); + if (!A) param->memory_error = true; } +any(A) ::= SUFFIX. + { A = css_new_node(param->stylesheet, CSS_NODE_SUFFIX, + 0, 0); + if (!A) param->memory_error = true; } +any(A) ::= SUBSTR. + { A = css_new_node(param->stylesheet, CSS_NODE_SUBSTR, + 0, 0); + if (!A) param->memory_error = true; } any(A) ::= COLON. { A = css_new_node(param->stylesheet, CSS_NODE_COLON, 0, 0); if (!A) param->memory_error = true; } |