Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2002-2003 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 2002-2003 Lars Knoll (knoll@kde.org) |
| 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 App le Inc. All rights reserved. | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 App le Inc. All rights reserved. |
| 4 * Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com) | 4 * Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com) |
| 5 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> | 5 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> |
| 6 * Copyright (C) 2012 Intel Corporation. All rights reserved. | 6 * Copyright (C) 2012 Intel Corporation. All rights reserved. |
| 7 * | 7 * |
| 8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
| 9 * modify it under the terms of the GNU Lesser General Public | 9 * modify it under the terms of the GNU Lesser General Public |
| 10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 80 case VAR_DEFINITION: | 80 case VAR_DEFINITION: |
| 81 case UNICODERANGE: | 81 case UNICODERANGE: |
| 82 return true; | 82 return true; |
| 83 default: | 83 default: |
| 84 return false; | 84 return false; |
| 85 } | 85 } |
| 86 } | 86 } |
| 87 | 87 |
| 88 %} | 88 %} |
| 89 | 89 |
| 90 %expect 11 | 90 %expect 3 |
| 91 | 91 |
| 92 %nonassoc LOWEST_PREC | 92 %nonassoc LOWEST_PREC |
| 93 | 93 |
| 94 %left UNIMPORTANT_TOK | 94 %left UNIMPORTANT_TOK |
| 95 | 95 |
| 96 %token WHITESPACE SGML_CD | 96 %token WHITESPACE SGML_CD |
| 97 %token TOKEN_EOF 0 | 97 %token TOKEN_EOF 0 |
| 98 | 98 |
| 99 %token INCLUDES | 99 %token INCLUDES |
| 100 %token DASHMATCH | 100 %token DASHMATCH |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 244 %type <string> namespace_selector | 244 %type <string> namespace_selector |
| 245 | 245 |
| 246 %type <string> string_or_uri | 246 %type <string> string_or_uri |
| 247 %type <string> ident_or_string | 247 %type <string> ident_or_string |
| 248 %type <string> medium | 248 %type <string> medium |
| 249 %type <marginBox> margin_sym | 249 %type <marginBox> margin_sym |
| 250 | 250 |
| 251 %type <string> media_feature | 251 %type <string> media_feature |
| 252 %type <mediaList> media_list | 252 %type <mediaList> media_list |
| 253 %type <mediaList> maybe_media_list | 253 %type <mediaList> maybe_media_list |
| 254 %type <mediaList> mq_list | |
| 254 %type <mediaQuery> media_query | 255 %type <mediaQuery> media_query |
| 255 %type <mediaQueryRestrictor> maybe_media_restrictor | 256 %type <mediaQueryRestrictor> maybe_media_restrictor |
| 256 %type <valueList> maybe_media_value | 257 %type <valueList> maybe_media_value |
| 257 %type <mediaQueryExp> media_query_exp | 258 %type <mediaQueryExp> media_query_exp |
| 258 %type <mediaQueryExpList> media_query_exp_list | 259 %type <mediaQueryExpList> media_query_exp_list |
| 259 %type <mediaQueryExpList> maybe_and_media_query_exp_list | 260 %type <mediaQueryExpList> maybe_and_media_query_exp_list |
| 260 | 261 |
| 261 %type <boolean> supports_condition | 262 %type <boolean> supports_condition |
| 262 %type <boolean> supports_condition_in_parens | 263 %type <boolean> supports_condition_in_parens |
| 263 %type <boolean> supports_negation | 264 %type <boolean> supports_negation |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 357 parser->m_valueList = parser->sinkFloatingValueList($4); | 358 parser->m_valueList = parser->sinkFloatingValueList($4); |
| 358 int oldParsedProperties = parser->m_parsedProperties.size(); | 359 int oldParsedProperties = parser->m_parsedProperties.size(); |
| 359 if (!parser->parseValue(parser->m_id, parser->m_important)) | 360 if (!parser->parseValue(parser->m_id, parser->m_important)) |
| 360 parser->rollbackLastProperties(parser->m_parsedProperties.size() - oldParsedProperties); | 361 parser->rollbackLastProperties(parser->m_parsedProperties.size() - oldParsedProperties); |
| 361 parser->m_valueList = nullptr; | 362 parser->m_valueList = nullptr; |
| 362 } | 363 } |
| 363 } | 364 } |
| 364 ; | 365 ; |
| 365 | 366 |
| 366 webkit_mediaquery: | 367 webkit_mediaquery: |
| 367 WEBKIT_MEDIAQUERY_SYM WHITESPACE maybe_space media_query '}' { | 368 WEBKIT_MEDIAQUERY_SYM maybe_space media_query '}' { |
| 368 parser->m_mediaQuery = parser->sinkFloatingMediaQuery($4); | 369 parser->m_mediaQuery = parser->sinkFloatingMediaQuery($3); |
| 369 } | 370 } |
| 370 ; | 371 ; |
| 371 | 372 |
| 372 internal_selector: | 373 internal_selector: |
| 373 INTERNAL_SELECTOR_SYM '{' maybe_space selector_list '}' { | 374 INTERNAL_SELECTOR_SYM '{' maybe_space selector_list '}' { |
| 374 if ($4) { | 375 if ($4) { |
| 375 if (parser->m_selectorListForParseSelector) | 376 if (parser->m_selectorListForParseSelector) |
| 376 parser->m_selectorListForParseSelector->adoptSelectorVector(*$4) ; | 377 parser->m_selectorListForParseSelector->adoptSelectorVector(*$4) ; |
| 377 } | 378 } |
| 378 } | 379 } |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 567 maybe_ns_prefix: | 568 maybe_ns_prefix: |
| 568 /* empty */ { $$.clear(); } | 569 /* empty */ { $$.clear(); } |
| 569 | IDENT maybe_space { $$ = $1; } | 570 | IDENT maybe_space { $$ = $1; } |
| 570 ; | 571 ; |
| 571 | 572 |
| 572 string_or_uri: | 573 string_or_uri: |
| 573 STRING | 574 STRING |
| 574 | URI | 575 | URI |
| 575 ; | 576 ; |
| 576 | 577 |
| 577 media_feature: | 578 media_feature: |
|
SeRya
2013/06/01 06:28:03
May be use just IDENT rather than media_feature?
rune
2013/06/03 09:08:11
Fixed in next patch set.
| |
| 578 IDENT maybe_space { | 579 IDENT { |
| 579 $$ = $1; | 580 $$ = $1; |
| 580 } | 581 } |
| 581 ; | 582 ; |
| 582 | 583 |
| 583 maybe_media_value: | 584 maybe_media_value: |
| 584 /*empty*/ { | 585 /*empty*/ { |
| 585 $$ = 0; | 586 $$ = 0; |
| 586 } | 587 } |
| 587 | ':' maybe_space expr { | 588 | ':' maybe_space expr { |
| 588 $$ = $3; | 589 $$ = $3; |
| 589 } | 590 } |
| 590 ; | 591 ; |
| 591 | 592 |
| 592 media_query_exp: | 593 media_query_exp: |
| 593 maybe_media_restrictor maybe_space '(' maybe_space media_feature maybe_space maybe_media_value ')' maybe_space { | 594 '(' maybe_space media_feature maybe_space maybe_media_value closing_parenthe sis maybe_space { |
| 594 // If restrictor is specified, media query expression is invalid. | 595 parser->tokenToLowerCase($3); |
| 595 // Create empty media query expression and continue parsing media query. | 596 $$ = parser->createFloatingMediaQueryExp($3, $5); |
| 596 if ($1 != MediaQuery::None) | |
| 597 $$ = parser->createFloatingMediaQueryExp("", 0); | |
| 598 else { | |
| 599 parser->tokenToLowerCase($5); | |
| 600 $$ = parser->createFloatingMediaQueryExp($5, $7); | |
| 601 } | |
| 602 } | 597 } |
| 603 | maybe_media_restrictor maybe_space '(' error error_recovery ')' { | 598 | '(' error error_recovery closing_parenthesis { |
|
SeRya
2013/06/01 06:28:03
If you remove YYERROR you need to add maybe_space
rune
2013/06/03 09:08:11
Fixed in next patch set.
| |
| 604 YYERROR; | 599 $$ = 0; |
| 605 } | 600 } |
| 606 ; | 601 ; |
| 607 | 602 |
| 608 media_query_exp_list: | 603 media_query_exp_list: |
| 609 media_query_exp { | 604 media_query_exp { |
| 610 $$ = parser->createFloatingMediaQueryExpList(); | 605 $$ = 0; |
| 611 $$->append(parser->sinkFloatingMediaQueryExp($1)); | 606 if ($1) { |
| 607 $$ = parser->createFloatingMediaQueryExpList(); | |
| 608 $$->append(parser->sinkFloatingMediaQueryExp($1)); | |
| 609 } | |
| 612 } | 610 } |
| 613 | media_query_exp_list maybe_space MEDIA_AND maybe_space media_query_exp { | 611 | media_query_exp_list MEDIA_AND maybe_space media_query_exp { |
| 614 $$ = $1; | 612 if ($1 && $4) { |
|
SeRya
2013/06/01 06:28:03
If you handle errors on higher level you likely ca
rune
2013/06/03 09:08:11
Fixed in next patch set.
| |
| 615 $$->append(parser->sinkFloatingMediaQueryExp($5)); | 613 $$ = $1; |
| 614 $$->append(parser->sinkFloatingMediaQueryExp($4)); | |
| 615 } | |
| 616 else | |
| 617 $$ = 0; | |
| 616 } | 618 } |
| 617 ; | 619 ; |
| 618 | 620 |
| 619 maybe_and_media_query_exp_list: | 621 maybe_and_media_query_exp_list: |
| 620 /*empty*/ { | 622 /*empty*/ { |
| 621 $$ = parser->createFloatingMediaQueryExpList(); | 623 $$ = parser->createFloatingMediaQueryExpList(); |
| 622 } | 624 } |
| 623 | MEDIA_AND maybe_space media_query_exp_list { | 625 | MEDIA_AND maybe_space media_query_exp_list { |
| 624 $$ = $3; | 626 $$ = $3; |
| 625 } | 627 } |
| 626 ; | 628 ; |
| 627 | 629 |
| 628 maybe_media_restrictor: | 630 maybe_media_restrictor: |
| 629 /*empty*/ { | 631 /*empty*/ { |
| 630 $$ = MediaQuery::None; | 632 $$ = MediaQuery::None; |
| 631 } | 633 } |
| 632 | MEDIA_ONLY { | 634 | MEDIA_ONLY maybe_space { |
| 633 $$ = MediaQuery::Only; | 635 $$ = MediaQuery::Only; |
| 634 } | 636 } |
| 635 | MEDIA_NOT { | 637 | MEDIA_NOT maybe_space { |
| 636 $$ = MediaQuery::Not; | 638 $$ = MediaQuery::Not; |
| 637 } | 639 } |
| 638 ; | 640 ; |
| 639 | 641 |
| 640 media_query: | 642 media_query: |
| 641 media_query_exp_list { | 643 media_query_exp_list { |
| 642 $$ = parser->createFloatingMediaQuery(parser->sinkFloatingMediaQueryExpL ist($1)); | 644 if ($1) |
| 645 $$ = parser->createFloatingMediaQuery(parser->sinkFloatingMediaQuery ExpList($1)); | |
| 646 else | |
| 647 $$ = 0; | |
| 643 } | 648 } |
| 644 | | 649 | maybe_media_restrictor medium maybe_and_media_query_exp_list { |
| 645 maybe_media_restrictor maybe_space medium maybe_and_media_query_exp_list { | 650 parser->tokenToLowerCase($2); |
| 646 parser->tokenToLowerCase($3); | 651 if ($3) |
| 647 $$ = parser->createFloatingMediaQuery($1, $3, parser->sinkFloatingMediaQ ueryExpList($4)); | 652 $$ = parser->createFloatingMediaQuery($1, $2, parser->sinkFloatingMe diaQueryExpList($3)); |
| 653 else | |
| 654 $$ = 0; | |
| 655 } | |
| 656 | error rule_error_recovery { | |
| 657 $$ = 0; | |
| 648 } | 658 } |
| 649 ; | 659 ; |
| 650 | 660 |
| 651 maybe_media_list: | 661 maybe_media_list: |
| 652 /* empty */ { | 662 /* empty */ { |
| 653 $$ = parser->createMediaQuerySet(); | 663 $$ = parser->createMediaQuerySet(); |
| 654 } | 664 } |
| 655 | media_list | 665 | media_list |
| 656 ; | 666 ; |
| 657 | 667 |
| 658 media_list: | 668 media_list: |
| 659 media_query { | 669 media_query { |
| 660 $$ = parser->createMediaQuerySet(); | 670 $$ = parser->createMediaQuerySet(); |
| 661 $$->addMediaQuery(parser->sinkFloatingMediaQuery($1)); | 671 MediaQuery* query = $1; |
| 672 if (!query) | |
| 673 query = parser->createFloatingNotAllQuery(); | |
| 674 $$->addMediaQuery(parser->sinkFloatingMediaQuery(query)); | |
| 662 parser->updateLastMediaLine($$); | 675 parser->updateLastMediaLine($$); |
| 663 } | 676 } |
| 664 | media_list ',' maybe_space media_query { | 677 | mq_list media_query { |
| 665 $$ = $1; | 678 $$ = $1; |
| 666 if ($$) { | 679 MediaQuery* query = $2; |
| 667 $$->addMediaQuery(parser->sinkFloatingMediaQuery($4)); | 680 if (!query) |
| 668 parser->updateLastMediaLine($$); | 681 query = parser->createFloatingNotAllQuery(); |
| 669 } | 682 $$->addMediaQuery(parser->sinkFloatingMediaQuery($2)); |
| 683 parser->updateLastMediaLine($$); | |
| 670 } | 684 } |
| 671 | media_list error { | 685 | mq_list { |
| 672 $$ = 0; | 686 $$ = $1; |
| 687 $$->addMediaQuery(parser->sinkFloatingMediaQuery(parser->createFloatingN otAllQuery())); | |
| 688 parser->updateLastMediaLine($$); | |
| 673 } | 689 } |
| 674 ; | 690 ; |
| 675 | 691 |
| 692 mq_list: | |
| 693 media_query ',' maybe_space { | |
| 694 $$ = parser->createMediaQuerySet(); | |
| 695 MediaQuery* query = $1; | |
| 696 if (!query) | |
| 697 query = parser->createFloatingNotAllQuery(); | |
| 698 $$->addMediaQuery(parser->sinkFloatingMediaQuery(query)); | |
| 699 } | |
| 700 | mq_list media_query ',' maybe_space { | |
| 701 $$ = $1; | |
| 702 MediaQuery* query = $2; | |
| 703 if (!query) | |
| 704 query = parser->createFloatingNotAllQuery(); | |
| 705 $$->addMediaQuery(parser->sinkFloatingMediaQuery(query)); | |
| 706 } | |
| 707 ; | |
| 708 | |
| 676 at_rule_body_start: | 709 at_rule_body_start: |
| 677 /* empty */ { | 710 /* empty */ { |
| 678 parser->startRuleBody(); | 711 parser->startRuleBody(); |
| 679 } | 712 } |
| 680 ; | 713 ; |
| 681 | 714 |
| 682 before_media_rule: | 715 before_media_rule: |
| 683 /* empty */ { | 716 /* empty */ { |
| 684 parser->startRuleHeader(CSSRuleSourceData::MEDIA_RULE); | 717 parser->startRuleHeader(CSSRuleSourceData::MEDIA_RULE); |
| 685 } | 718 } |
| 686 ; | 719 ; |
| 687 | 720 |
| 688 at_rule_header_end_maybe_space: | 721 at_rule_header_end_maybe_space: |
| 689 maybe_space { | 722 maybe_space { |
| 690 parser->endRuleHeader(); | 723 parser->endRuleHeader(); |
| 691 } | 724 } |
| 692 ; | 725 ; |
| 693 | 726 |
| 694 media: | 727 media: |
| 695 before_media_rule MEDIA_SYM maybe_space media_list at_rule_header_end '{' at _rule_body_start maybe_space block_rule_body closing_brace { | 728 before_media_rule MEDIA_SYM maybe_space media_list at_rule_header_end '{' at _rule_body_start maybe_space block_rule_body closing_brace { |
| 696 $$ = parser->createMediaRule($4, $9); | 729 $$ = parser->createMediaRule($4, $9); |
| 697 } | 730 } |
| 698 | before_media_rule MEDIA_SYM at_rule_header_end_maybe_space '{' at_rule_bod y_start maybe_space block_rule_body closing_brace { | 731 | before_media_rule MEDIA_SYM at_rule_header_end_maybe_space '{' at_rule_bod y_start maybe_space block_rule_body closing_brace { |
| 699 $$ = parser->createMediaRule(0, $7); | 732 $$ = parser->createMediaRule(0, $7); |
| 700 } | 733 } |
| 734 | before_media_rule MEDIA_SYM maybe_space media_list ';' { | |
|
SeRya
2013/06/01 06:28:03
It shouldn't be needed. "before_media_rule MEDIA_S
rune
2013/06/03 09:08:11
Media query error #4 (parsing of "@media all; @med
SeRya
2013/06/03 11:31:27
I see why it needed. Because "all;" reduces to med
| |
| 735 $$ = 0; | |
| 736 parser->endRuleBody(true); | |
| 737 } | |
| 701 | before_media_rule MEDIA_SYM at_rule_recovery { | 738 | before_media_rule MEDIA_SYM at_rule_recovery { |
| 702 $$ = 0; | 739 $$ = 0; |
| 703 parser->endRuleBody(true); | 740 parser->endRuleBody(true); |
| 704 } | 741 } |
| 705 ; | 742 ; |
| 706 | 743 |
| 707 medium: | 744 medium: |
| 708 IDENT maybe_space { | 745 IDENT maybe_space { |
| 709 $$ = $1; | 746 $$ = $1; |
| 710 } | 747 } |
| (...skipping 1278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1989 | 2026 |
| 1990 rule_error_recovery: | 2027 rule_error_recovery: |
| 1991 /* empty */ | 2028 /* empty */ |
| 1992 | rule_error_recovery error | 2029 | rule_error_recovery error |
| 1993 | rule_error_recovery invalid_square_brackets_block | 2030 | rule_error_recovery invalid_square_brackets_block |
| 1994 | rule_error_recovery invalid_parentheses_block | 2031 | rule_error_recovery invalid_parentheses_block |
| 1995 ; | 2032 ; |
| 1996 | 2033 |
| 1997 %% | 2034 %% |
| 1998 | 2035 |
| OLD | NEW |