Changeset 14879 in webkit


Ignore:
Timestamp:
Jun 15, 2006 2:37:13 PM (18 years ago)
Author:
jdevalk
Message:

Adding :lang support, patch by Nicholas Shanks, review by Hyatt

Location:
trunk
Files:
2 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r14877 r14879  
     12006-06-15  Nicholas Shanks  <contact@nickshanks.com>
     2
     3        Reviewed by Hyatt, landed by Joost de Valk.
     4
     5        Testcases for fix to bug http://bugzilla.opendarwin.org/show_bug.cgi?id=3233
     6
     7        * fast/css/css3-modsel-22-expected.txt: Added.
     8        * fast/css/css3-modsel-22.html: Added.
     9
    1102006-06-15  Justin Garcia  <justin.garcia@apple.com>
    211
  • trunk/WebCore/ChangeLog

    r14877 r14879  
     12006-06-15  Nicholas Shanks  <contact@nickshanks.com>
     2
     3        Reviewed by Hyatt, landed by Joost de Valk.
     4
     5        Fix http://bugzilla.opendarwin.org/show_bug.cgi?id=3233
     6
     7        Add support for the :lang pseudo-class.
     8
     9        * css/CSSGrammar.y:
     10        * css/CSSSelector.cpp:
     11        (WebCore::CSSSelector::operator == ):
     12        * css/CSSSelector.h:
     13        (WebCore::CSSSelector::CSSSelector):
     14        * css/cssparser.cpp:
     15        (WebCore::CSSParser::lex):
     16        * css/cssstyleselector.cpp:
     17        (WebCore::CSSStyleSelector::checkOneSelector):
     18        * css/tokenizer.flex:
     19
    1202006-06-15  Justin Garcia  <justin.garcia@apple.com>
    221
  • trunk/WebCore/css/CSSGrammar.y

    r14779 r14879  
    219219%token <string> URI
    220220%token <string> FUNCTION
     221%token <string> NOTFUNCTION
    221222
    222223%token <string> UNICODERANGE
     
    836837        $$->value = atomicString($3);
    837838    }
    838     | ':' FUNCTION maybe_space simple_selector maybe_space ')' {
     839    // used by :lang
     840    | ':' FUNCTION IDENT ')' {
     841        $$ = new CSSSelector();
     842        $$->match = CSSSelector::PseudoClass;
     843        $$->argument = atomicString($3);
     844        $2.lower();
     845        $$->value = atomicString($2);
     846    }
     847    // used by :not
     848    | ':' NOTFUNCTION maybe_space simple_selector ')' {
    839849        CSSParser* p = static_cast<CSSParser*>(parser);
    840850        $$ = p->createFloatingSelector();
  • trunk/WebCore/css/CSSSelector.cpp

    r14408 r14879  
    181181             sel1->relation() != sel2->relation() || sel1->match != sel2->match ||
    182182             sel1->value != sel2->value ||
    183              sel1->pseudoType() != sel2->pseudoType())
     183             sel1->pseudoType() != sel2->pseudoType() ||
     184             sel1->argument != sel2->argument)
    184185            return false;
    185186        sel1 = sel1->tagHistory;
  • trunk/WebCore/css/CSSSelector.h

    r14408 r14879  
    3737            , simpleSelector(0)
    3838            , nextSelector(0)
     39            , argument(nullAtom)
    3940            , attr(anyQName())
    4041            , tag(anyQName())
     
    4950            , simpleSelector(0)
    5051            , nextSelector(0)
     52            , argument(nullAtom)
    5153            , attr(anyQName())
    5254            , tag(qName)
     
    159161        CSSSelector* simpleSelector; // Used for :not.
    160162        CSSSelector* nextSelector; // used for ,-chained selectors
     163        AtomicString argument; // Used for :contains, :lang and :nth-*
    161164       
    162165        QualifiedName attr;
  • trunk/WebCore/css/cssparser.cpp

    r14779 r14879  
    26722672    case UNICODERANGE:
    26732673    case FUNCTION:
     2674    case NOTFUNCTION:
    26742675        yylval->string.characters = t;
    26752676        yylval->string.length = length;
  • trunk/WebCore/css/cssstyleselector.cpp

    r14816 r14879  
    44 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
    55 *           (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com)
     6 *           (C) 2006 Nicholas Shanks (webkit@nickshanks.com)
    67 * Copyright (C) 2005, 2006 Apple Computer, Inc.
    78 *
     
    15211522                    return true;
    15221523                break;
     1524            case CSSSelector::PseudoLang: {
     1525                const AtomicString& value = e->getAttribute(langAttr);
     1526                if (value.isEmpty() || !value.startsWith(sel->argument, false))
     1527                    break;
     1528                if (value.length() != sel->argument.length() && value[sel->argument.length()] != '-')
     1529                    break;
     1530                return true;
     1531            }
    15231532            case CSSSelector::PseudoNot: {
    15241533                // check the simple selector
    1525                 for (CSSSelector* subSel = sel->simpleSelector; subSel;
    1526                      subSel = subSel->tagHistory) {
    1527                     // :not cannot nest.  I don't really know why this is a restriction in CSS3,
    1528                     // but it is, so let's honor it.
     1534                for (CSSSelector* subSel = sel->simpleSelector; subSel; subSel = subSel->tagHistory) {
     1535                    // :not cannot nest. I don't really know why this is a
     1536                    // restriction in CSS3, but it is, so let's honour it.
    15291537                    if (subSel->simpleSelector)
    15301538                        break;
     
    15341542                break;
    15351543            }
    1536             case CSSSelector::PseudoLang:
    1537                 /* not supported for now */
    15381544            case CSSSelector::PseudoOther:
    15391545                break;
     
    15661572                break;
    15671573        }
    1568             return false;
     1574        return false;
    15691575    }
    15701576    // ### add the rest of the checks...
  • trunk/WebCore/css/tokenizer.flex

    r14779 r14879  
    8181{num}                   {yyTok = FLOAT; return yyTok;}
    8282
     83"not("                  {yyTok = NOTFUNCTION; return yyTok;}
    8384"url("{w}{string}{w}")" {yyTok = URI; return yyTok;}
    8485"url("{w}{url}{w}")"    {yyTok = URI; return yyTok;}
Note: See TracChangeset for help on using the changeset viewer.