⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cssgrammar.y

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 Y
📖 第 1 页 / 共 3 页
字号:
%{/* *  Copyright (C) 2002-2003 Lars Knoll (knoll@kde.org) *  Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. *  Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com) *  Copyright (C) 2008 Eric Seidel <eric@webkit.org> * *  This library is free software; you can redistribute it and/or *  modify it under the terms of the GNU Lesser General Public *  License as published by the Free Software Foundation; either *  version 2 of the License, or (at your option) any later version. * *  This library is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU *  Lesser General Public License for more details. * *  You should have received a copy of the GNU Lesser General Public *  License along with this library; if not, write to the Free Software *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA * */#include "config.h"#include "CSSMediaRule.h"#include "CSSParser.h"#include "CSSPropertyNames.h"#include "CSSRuleList.h"#include "CSSSelector.h"#include "CSSStyleSheet.h"#include "Document.h"#include "HTMLNames.h"#include "MediaList.h"#include "WebKitCSSKeyframeRule.h"#include "WebKitCSSKeyframesRule.h"#include <stdlib.h>#include <string.h>using namespace WebCore;using namespace HTMLNames;#define YYENABLE_NLS 0#define YYLTYPE_IS_TRIVIAL 1#define YYMAXDEPTH 10000#define YYDEBUG 0// FIXME: Replace with %parse-param { CSSParser* parser } once we can depend on bison 2.x#define YYPARSE_PARAM parser#define YYLEX_PARAM parser%}%pure_parser%union {    bool boolean;    char character;    int integer;    double number;    CSSParserString string;    CSSRule* rule;    CSSRuleList* ruleList;    CSSSelector* selector;    Vector<CSSSelector*>* selectorList;    CSSSelector::Relation relation;    MediaList* mediaList;    MediaQuery* mediaQuery;    MediaQuery::Restrictor mediaQueryRestrictor;    MediaQueryExp* mediaQueryExp;    CSSParserValue value;    CSSParserValueList* valueList;    Vector<MediaQueryExp*>* mediaQueryExpList;    WebKitCSSKeyframeRule* keyframeRule;    WebKitCSSKeyframesRule* keyframesRule;    float val;}%{static inline int cssyyerror(const char*){    return 1;}static int cssyylex(YYSTYPE* yylval, void* parser){    return static_cast<CSSParser*>(parser)->lex(yylval);}%}%expect 49%nonassoc LOWEST_PREC%left UNIMPORTANT_TOK%token WHITESPACE SGML_CD%token TOKEN_EOF 0%token INCLUDES%token DASHMATCH%token BEGINSWITH%token ENDSWITH%token CONTAINS%token <string> STRING%right <string> IDENT%token <string> NTH%nonassoc <string> HEX%nonassoc <string> IDSEL%nonassoc ':'%nonassoc '.'%nonassoc '['%nonassoc <string> '*'%nonassoc error%left '|'%token IMPORT_SYM%token PAGE_SYM%token MEDIA_SYM%token FONT_FACE_SYM%token CHARSET_SYM%token NAMESPACE_SYM%token WEBKIT_RULE_SYM%token WEBKIT_DECLS_SYM%token WEBKIT_KEYFRAME_RULE_SYM%token WEBKIT_KEYFRAMES_SYM%token WEBKIT_VALUE_SYM%token WEBKIT_MEDIAQUERY_SYM%token WEBKIT_SELECTOR_SYM%token WEBKIT_VARIABLES_SYM%token WEBKIT_DEFINE_SYM%token VARIABLES_FOR%token WEBKIT_VARIABLES_DECLS_SYM%token ATKEYWORD%token IMPORTANT_SYM%token MEDIA_ONLY%token MEDIA_NOT%token MEDIA_AND%token <number> QEMS%token <number> EMS%token <number> EXS%token <number> PXS%token <number> CMS%token <number> MMS%token <number> INS%token <number> PTS%token <number> PCS%token <number> DEGS%token <number> RADS%token <number> GRADS%token <number> TURNS%token <number> MSECS%token <number> SECS%token <number> HERZ%token <number> KHERZ%token <string> DIMEN%token <number> PERCENTAGE%token <number> FLOATTOKEN%token <number> INTEGER%token <string> URI%token <string> FUNCTION%token <string> NOTFUNCTION%token <string> UNICODERANGE%token <string> VARCALL%type <relation> combinator%type <rule> charset%type <rule> ruleset%type <rule> valid_rule_or_import%type <rule> media%type <rule> import%type <rule> page%type <rule> font_face%type <rule> keyframes%type <rule> invalid_rule%type <rule> save_block%type <rule> invalid_at%type <rule> invalid_at_list%type <rule> invalid_import%type <rule> invalid_media%type <rule> rule%type <rule> valid_rule%type <ruleList> block_rule_list %type <rule> block_rule%type <rule> block_valid_rule%type <rule> variables_rule%type <mediaList> variables_media_list%type <string> maybe_ns_prefix%type <string> namespace_selector%type <string> string_or_uri%type <string> ident_or_string%type <string> medium%type <string> hexcolor%type <string> media_feature%type <mediaList> media_list%type <mediaList> maybe_media_list%type <mediaQuery> media_query%type <mediaQueryRestrictor> maybe_media_restrictor%type <valueList> maybe_media_value%type <mediaQueryExp> media_query_exp%type <mediaQueryExpList> media_query_exp_list%type <mediaQueryExpList> maybe_and_media_query_exp_list%type <string> keyframe_name%type <keyframeRule> keyframe_rule%type <keyframesRule> keyframes_rule%type <valueList> key_list%type <value> key%type <integer> property%type <selector> specifier%type <selector> specifier_list%type <selector> simple_selector%type <selector> selector%type <selectorList> selector_list%type <selector> selector_with_trailing_whitespace%type <selector> class%type <selector> attrib%type <selector> pseudo%type <boolean> declaration_list%type <boolean> decl_list%type <boolean> declaration%type <boolean> prio%type <integer> match%type <integer> unary_operator%type <character> operator%type <valueList> expr%type <value> term%type <value> unary_term%type <value> function%type <string> element_name%type <string> attr_name%type <string> variable_name%type <boolean> variables_declaration_list%type <boolean> variables_decl_list%type <boolean> variables_declaration%type <value> variable_reference%%stylesheet:    maybe_charset maybe_sgml import_list variables_list namespace_list rule_list  | webkit_rule maybe_space  | webkit_decls maybe_space  | webkit_value maybe_space  | webkit_mediaquery maybe_space  | webkit_selector maybe_space  | webkit_variables_decls maybe_space  | webkit_keyframe_rule maybe_space  ;valid_rule_or_import:    valid_rule  | import  ;webkit_rule:    WEBKIT_RULE_SYM '{' maybe_space valid_rule_or_import maybe_space '}' {        static_cast<CSSParser*>(parser)->m_rule = $4;    };webkit_keyframe_rule:    WEBKIT_KEYFRAME_RULE_SYM '{' maybe_space keyframe_rule maybe_space '}' {        static_cast<CSSParser*>(parser)->m_keyframe = $4;    };webkit_decls:    WEBKIT_DECLS_SYM '{' maybe_space declaration_list '}' {        /* can be empty */    };webkit_variables_decls:    WEBKIT_VARIABLES_DECLS_SYM '{' maybe_space variables_declaration_list '}' {        /* can be empty */    };webkit_value:    WEBKIT_VALUE_SYM '{' maybe_space expr '}' {        CSSParser* p = static_cast<CSSParser*>(parser);        if ($4) {            p->m_valueList = p->sinkFloatingValueList($4);            int oldParsedProperties = p->m_numParsedProperties;            if (!p->parseValue(p->m_id, p->m_important))                p->rollbackLastProperties(p->m_numParsedProperties - oldParsedProperties);            delete p->m_valueList;            p->m_valueList = 0;        }    };webkit_mediaquery:     WEBKIT_MEDIAQUERY_SYM WHITESPACE maybe_space media_query '}' {         CSSParser* p = static_cast<CSSParser*>(parser);         p->m_mediaQuery = p->sinkFloatingMediaQuery($4);     };webkit_selector:    WEBKIT_SELECTOR_SYM '{' maybe_space selector_list '}' {        if ($4) {            CSSParser* p = static_cast<CSSParser*>(parser);            if (p->m_selectorListForParseSelector)                p->m_selectorListForParseSelector->adoptSelectorVector(*$4);        }    };maybe_space:    /* empty */ %prec UNIMPORTANT_TOK  | maybe_space WHITESPACE  ;maybe_sgml:    /* empty */  | maybe_sgml SGML_CD  | maybe_sgml WHITESPACE  ;maybe_charset:   /* empty */  | charset {  }  ;closing_brace:    '}'  | %prec LOWEST_PREC TOKEN_EOF  ;charset:  CHARSET_SYM maybe_space STRING maybe_space ';' {     CSSParser* p = static_cast<CSSParser*>(parser);     $$ = static_cast<CSSParser*>(parser)->createCharsetRule($3);     if ($$ && p->m_styleSheet)         p->m_styleSheet->append($$);  }  | CHARSET_SYM error invalid_block {  }  | CHARSET_SYM error ';' {  };import_list: /* empty */ | import_list import maybe_sgml {     CSSParser* p = static_cast<CSSParser*>(parser);     if ($2 && p->m_styleSheet)         p->m_styleSheet->append($2); } | invalid_at_list { } ;variables_list:/* empty */| variables_list variables_rule maybe_sgml {    CSSParser* p = static_cast<CSSParser*>(parser);     if ($2 && p->m_styleSheet)         p->m_styleSheet->append($2);};namespace_list:/* empty */| namespace_list namespace maybe_sgml;rule_list:   /* empty */ | rule_list rule maybe_sgml {     CSSParser* p = static_cast<CSSParser*>(parser);     if ($2 && p->m_styleSheet)         p->m_styleSheet->append($2); } ;valid_rule:    ruleset  | media  | page  | font_face  | keyframes  ;rule:    valid_rule  | invalid_rule  | invalid_at  | invalid_import  ;block_rule_list:     /* empty */ { $$ = 0; }  | block_rule_list block_rule maybe_sgml {      $$ = $1;      if ($2) {          if (!$$)              $$ = static_cast<CSSParser*>(parser)->createRuleList();          $$->append($2);      }  }  ;block_valid_rule:    ruleset  | page  | font_face  | keyframes  ;block_rule:    block_valid_rule  | invalid_rule  | invalid_at  | invalid_import  | invalid_media  ;import:    IMPORT_SYM maybe_space string_or_uri maybe_space maybe_media_list ';' {        $$ = static_cast<CSSParser*>(parser)->createImportRule($3, $5);    }  | IMPORT_SYM maybe_space string_or_uri maybe_space maybe_media_list invalid_block {        $$ = 0;    }  | IMPORT_SYM error ';' {        $$ = 0;    }  | IMPORT_SYM error invalid_block {        $$ = 0;    }  ;variables_rule:    WEBKIT_VARIABLES_SYM maybe_space maybe_media_list '{' maybe_space variables_declaration_list '}' {        $$ = static_cast<CSSParser*>(parser)->createVariablesRule($3, true);    }    |    WEBKIT_DEFINE_SYM maybe_space variables_media_list '{' maybe_space variables_declaration_list '}' {        $$ = static_cast<CSSParser*>(parser)->createVariablesRule($3, false);    }    ;variables_media_list:    /* empty */ {        $$ = static_cast<CSSParser*>(parser)->createMediaList();    }    |    VARIABLES_FOR WHITESPACE media_list {        $$ = $3;    }    ;variables_declaration_list:    variables_declaration {        $$ = $1;    }    | variables_decl_list variables_declaration {        $$ = $1;        if ($2)            $$ = $2;    }    | variables_decl_list {        $$ = $1;    }    | error invalid_block_list error {        $$ = false;    }    | error {        $$ = false;    }    | variables_decl_list error {        $$ = $1;    }    ;variables_decl_list:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -