summaryrefslogtreecommitdiff
path: root/css/parser.y
diff options
context:
space:
mode:
authorJames Bursa <james@netsurf-browser.org>2003-09-27 23:36:34 +0000
committerJames Bursa <james@netsurf-browser.org>2003-09-27 23:36:34 +0000
commit1975b5cd1aa6290f1e42d5ea3bdf141566080769 (patch)
tree752e2c4c193c9895a65724ef5ff9cf8cfbb14871 /css/parser.y
parent3e023a74a7389fdba9620958f4771b183f2ebc7f (diff)
downloadnetsurf-1975b5cd1aa6290f1e42d5ea3bdf141566080769.tar.gz
netsurf-1975b5cd1aa6290f1e42d5ea3bdf141566080769.tar.bz2
[project @ 2003-09-27 23:36:34 by bursa]
Implement CSS attribute selectors and parent / preceding combinators. svn path=/import/netsurf/; revision=324
Diffstat (limited to 'css/parser.y')
-rw-r--r--css/parser.y17
1 files changed, 16 insertions, 1 deletions
diff --git a/css/parser.y b/css/parser.y
index 63b01e264..0e2ff02ab 100644
--- a/css/parser.y
+++ b/css/parser.y
@@ -93,7 +93,21 @@ detail_list(A) ::= HASH(B) detail_list(C).
{ A = css_new_node(NODE_ID, B, 0, 0); A->next = C; }
detail_list(A) ::= DOT IDENT(B) detail_list(C).
{ A = css_new_node(NODE_CLASS, B, 0, 0); A->next = C; }
-/* TODO: attrib, pseudo */
+detail_list(A) ::= LBRAC IDENT(B) RBRAC detail_list(C).
+ { A = css_new_node(NODE_ATTRIB, B, 0, 0); A->next = C; }
+detail_list(A) ::= LBRAC IDENT(B) EQUALS IDENT(C) RBRAC detail_list(D).
+ { A = css_new_node(NODE_ATTRIB_EQ, B, 0, 0); A->data2 = C; A->next = D; }
+detail_list(A) ::= LBRAC IDENT(B) EQUALS STRING(C) RBRAC detail_list(D).
+ { A = css_new_node(NODE_ATTRIB_EQ, B, 0, 0); A->data2 = C; A->next = D; }
+detail_list(A) ::= LBRAC IDENT(B) INCLUDES IDENT(C) RBRAC detail_list(D).
+ { A = css_new_node(NODE_ATTRIB_INC, B, 0, 0); A->data2 = C; A->next = D; }
+detail_list(A) ::= LBRAC IDENT(B) INCLUDES STRING(C) RBRAC detail_list(D).
+ { A = css_new_node(NODE_ATTRIB_INC, B, 0, 0); A->data2 = C; A->next = D; }
+detail_list(A) ::= LBRAC IDENT(B) DASHMATCH IDENT(C) RBRAC detail_list(D).
+ { A = css_new_node(NODE_ATTRIB_DM, B, 0, 0); A->data2 = C; A->next = D; }
+detail_list(A) ::= LBRAC IDENT(B) DASHMATCH STRING(C) RBRAC detail_list(D).
+ { A = css_new_node(NODE_ATTRIB_DM, B, 0, 0); A->data2 = C; A->next = D; }
+/* TODO: pseudo */
declaration_list(A) ::= .
{ A = 0; }
@@ -191,6 +205,7 @@ any(A) ::= LBRAC any_list(B) RBRAC.
%destructor selector_list { css_free_node($$); }
%destructor selector { css_free_node($$); }
%destructor simple_selector { css_free_node($$); }
+%destructor detail_list { css_free_node($$); }
%destructor declaration_list { css_free_node($$); }
%destructor declaration { css_free_node($$); }
%destructor value { css_free_node($$); }