From 13d6923b5e6edf727e00484ae05c22dbfa8e1c7c Mon Sep 17 00:00:00 2001 From: James Bursa Date: Fri, 17 Oct 2003 17:39:29 +0000 Subject: [project @ 2003-10-17 17:39:29 by bursa] Implement :link, ignore stylesheets with syntax errors, parse pseudo classes. svn path=/import/netsurf/; revision=367 --- css/parser.y | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) (limited to 'css/parser.y') diff --git a/css/parser.y b/css/parser.y index 0d72a44d7..9fc1d398d 100644 --- a/css/parser.y +++ b/css/parser.y @@ -106,28 +106,30 @@ detail_list(A) ::= LBRAC IDENT(B) EQUALS IDENT(C) RBRAC detail_list(D). detail_list(A) ::= LBRAC IDENT(B) EQUALS STRING(C) RBRAC detail_list(D). { A = css_new_node(CSS_NODE_ATTRIB_EQ, B, 0, 0); A->data2 = css_unquote(C); A->specificity = 0x100 + (D ? D->specificity : 0); A->next = D; } -detail_list(A) ::= LBRAC IDENT(B) EQUALS NUMBER(C) RBRAC detail_list(D). - { A = css_new_node(CSS_NODE_ATTRIB_EQ, B, 0, 0); A->data2 = C; - A->specificity = 0x100 + (D ? D->specificity : 0); A->next = D; } detail_list(A) ::= LBRAC IDENT(B) INCLUDES IDENT(C) RBRAC detail_list(D). { A = css_new_node(CSS_NODE_ATTRIB_INC, B, 0, 0); A->data2 = C; A->specificity = 0x100 + (D ? D->specificity : 0); A->next = D; } detail_list(A) ::= LBRAC IDENT(B) INCLUDES STRING(C) RBRAC detail_list(D). { A = css_new_node(CSS_NODE_ATTRIB_INC, B, 0, 0); A->data2 = css_unquote(C); A->specificity = 0x100 + (D ? D->specificity : 0); A->next = D; } -detail_list(A) ::= LBRAC IDENT(B) INCLUDES NUMBER(C) RBRAC detail_list(D). - { A = css_new_node(CSS_NODE_ATTRIB_INC, B, 0, 0); A->data2 = C; - A->specificity = 0x100 + (D ? D->specificity : 0); A->next = D; } detail_list(A) ::= LBRAC IDENT(B) DASHMATCH IDENT(C) RBRAC detail_list(D). { A = css_new_node(CSS_NODE_ATTRIB_DM, B, 0, 0); A->data2 = C; A->specificity = 0x100 + (D ? D->specificity : 0); A->next = D; } detail_list(A) ::= LBRAC IDENT(B) DASHMATCH STRING(C) RBRAC detail_list(D). { A = css_new_node(CSS_NODE_ATTRIB_DM, B, 0, 0); A->data2 = css_unquote(C); A->specificity = 0x100 + (D ? D->specificity : 0); A->next = D; } -detail_list(A) ::= LBRAC IDENT(B) DASHMATCH NUMBER(C) RBRAC detail_list(D). - { A = css_new_node(CSS_NODE_ATTRIB_DM, B, 0, 0); A->data2 = C; - A->specificity = 0x100 + (D ? D->specificity : 0); A->next = D; } -/* TODO: pseudo */ +detail_list(A) ::= COLON IDENT(B) detail_list(C). + { if (strcasecmp(B, "link") == 0) { + A = css_new_node(CSS_NODE_ATTRIB, xstrdup("href"), 0, 0); + A->specificity = 0x100 + (C ? C->specificity : 0); A->next = C; + free(B); + } else { + A = css_new_node(CSS_NODE_PSEUDO, B, 0, 0); + A->specificity = 0x100 + (C ? C->specificity : 0); A->next = C; + } } +detail_list(A) ::= COLON FUNCTION(B) IDENT RPAREN detail_list(C). + { A = css_new_node(CSS_NODE_PSEUDO, B, 0, 0); + A->specificity = 0x100 + (C ? C->specificity : 0); A->next = C; } declaration_list(A) ::= . { A = 0; } @@ -187,6 +189,8 @@ any(A) ::= COLON. { A = css_new_node(CSS_NODE_COLON, 0, 0, 0); } any(A) ::= COMMA. { A = css_new_node(CSS_NODE_COMMA, 0, 0, 0); } +any(A) ::= DOT. + { A = css_new_node(CSS_NODE_DOT, 0, 0, 0); } any(A) ::= PLUS. { A = css_new_node(CSS_NODE_PLUS, 0, 0, 0); } any(A) ::= GT. @@ -233,7 +237,10 @@ any(A) ::= LBRAC any_list(B) RBRAC. %destructor any_list_1 { css_free_node($$); } %destructor any { css_free_node($$); } -%left COMMA GT HASH LBRAC PLUS. +%left COLON COMMA GT HASH LBRAC PLUS. +%left DOT. %left EMPTYIDENT. %left IDENT. %left LBRACE. + +%syntax_error { param->syntax_error = true; } -- cgit v1.2.3