Changeset 81849 in webkit


Ignore:
Timestamp:
Mar 23, 2011 8:18:35 PM (13 years ago)
Author:
commit-queue@webkit.org
Message:

2011-03-23 Mike Lawther <mikelawther@chromium.org>

Reviewed by Ojan Vafai.

flex/bison tokens and grammar for CSS calc
https://bugs.webkit.org/show_bug.cgi?id=54412

Only the 'errors' tests pass as ultimately intended right now. As of this
patch, none of the actual calculations are expected to work, since only
the lexing/grammar stage is present.

  • css3/calc/calc-errors-expected.txt: Added.
  • css3/calc/calc-errors.html: Added.
  • css3/calc/minmax-errors-expected.txt: Added.
  • css3/calc/minmax-errors.html: Added.
  • css3/calc/simple-calcs-expected.txt: Added.
  • css3/calc/simple-calcs.html: Added.
  • css3/calc/simple-minmax-expected.txt: Added.
  • css3/calc/simple-minmax.html: Added.

2011-03-23 Mike Lawther <mikelawther@chromium.org>

Reviewed by Ojan Vafai.

flex/bison tokens and grammar for CSS calc
https://bugs.webkit.org/show_bug.cgi?id=54412

Tests: css3/calc/calc-errors.html

css3/calc/minmax-errors.html
css3/calc/simple-calcs.html
css3/calc/simple-minmax.html

  • css/CSSGrammar.y:
  • css/CSSParserValues.cpp: (WebCore::CSSParserValueList::insertValueAt): (WebCore::CSSParserValueList::extend):
  • css/CSSParserValues.h:
  • css/tokenizer.flex:
Location:
trunk
Files:
9 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r81848 r81849  
     12011-03-23  Mike Lawther  <mikelawther@chromium.org>
     2
     3        Reviewed by Ojan Vafai.
     4
     5        flex/bison tokens and grammar for CSS calc
     6        https://bugs.webkit.org/show_bug.cgi?id=54412
     7
     8        Only the 'errors' tests pass as ultimately intended right now. As of this
     9        patch, none of the actual calculations are expected to work, since only
     10        the lexing/grammar stage is present.
     11
     12        * css3/calc/calc-errors-expected.txt: Added.
     13        * css3/calc/calc-errors.html: Added.
     14        * css3/calc/minmax-errors-expected.txt: Added.
     15        * css3/calc/minmax-errors.html: Added.
     16        * css3/calc/simple-calcs-expected.txt: Added.
     17        * css3/calc/simple-calcs.html: Added.
     18        * css3/calc/simple-minmax-expected.txt: Added.
     19        * css3/calc/simple-minmax.html: Added.
     20
    1212011-03-23  Adam Klein  <adamk@chromium.org>
    222
  • trunk/Source/WebCore/ChangeLog

    r81848 r81849  
     12011-03-23  Mike Lawther  <mikelawther@chromium.org>
     2
     3        Reviewed by Ojan Vafai.
     4
     5        flex/bison tokens and grammar for CSS calc
     6        https://bugs.webkit.org/show_bug.cgi?id=54412
     7
     8        Tests: css3/calc/calc-errors.html
     9               css3/calc/minmax-errors.html
     10               css3/calc/simple-calcs.html
     11               css3/calc/simple-minmax.html
     12
     13        * css/CSSGrammar.y:
     14        * css/CSSParserValues.cpp:
     15        (WebCore::CSSParserValueList::insertValueAt):
     16        (WebCore::CSSParserValueList::extend):
     17        * css/CSSParserValues.h:
     18        * css/tokenizer.flex:
     19
    1202011-03-23  Adam Klein  <adamk@chromium.org>
    221
  • trunk/Source/WebCore/css/CSSGrammar.y

    r81845 r81849  
    100100%}
    101101
    102 %expect 51
     102%expect 55
    103103
    104104%nonassoc LOWEST_PREC
     
    184184%token <number> KHERTZ
    185185%token <string> DIMEN
     186%token <string> INVALIDDIMEN
    186187%token <number> PERCENTAGE
    187188%token <number> FLOATTOKEN
     
    192193%token <string> ANYFUNCTION
    193194%token <string> NOTFUNCTION
     195%token <string> CALCFUNCTION
     196%token <string> MINFUNCTION
     197%token <string> MAXFUNCTION
    194198
    195199%token <string> UNICODERANGE
     
    273277%type <value> unary_term
    274278%type <value> function
     279%type <value> calc_func_term
     280%type <character> calc_func_operator
     281%type <valueList> calc_func_expr
     282%type <valueList> calc_func_expr_list
     283%type <valueList> calc_func_paren_expr
     284%type <value> calc_function
     285%type <string> min_or_max
     286%type <value> min_or_max_function
    275287
    276288%type <string> element_name
     
    14071419  /* FIXME: according to the specs a function can have a unary_operator in front. I know no case where this makes sense */
    14081420  | function {
     1421      $$ = $1;
     1422  }
     1423  | calc_function {
     1424      $$ = $1;
     1425  }
     1426  | min_or_max_function {
    14091427      $$ = $1;
    14101428  }
     
    14651483  }
    14661484  ;
     1485 
     1486calc_func_term:
     1487  unary_term { $$ = $1; }
     1488  | unary_operator unary_term { $$ = $2; $$.fValue *= $1; }
     1489  ;
     1490
     1491calc_func_operator:
     1492    '+' WHITESPACE {
     1493        $$ = '+';
     1494    }
     1495    | '-' WHITESPACE {
     1496        $$ = '-';
     1497    }
     1498    | '*' maybe_space {
     1499        $$ = '*';
     1500    }
     1501    | '/' maybe_space {
     1502        $$ = '/';
     1503    }
     1504    | IDENT maybe_space {
     1505        if (equalIgnoringCase("mod", $1.characters, $1.length))
     1506            $$ = '%';
     1507        else
     1508            $$ = 0;
     1509    }
     1510  ;
     1511
     1512calc_func_paren_expr:
     1513    '(' maybe_space calc_func_expr maybe_space ')' maybe_space {
     1514        if ($3) {
     1515            $$ = $3;
     1516            CSSParserValue v;
     1517            v.id = 0;
     1518            v.unit = CSSParserValue::Operator;
     1519            v.iValue = '(';
     1520            $$->insertValueAt(0, v);
     1521            v.iValue = ')';
     1522            $$->addValue(v);
     1523        }
     1524    }
     1525
     1526calc_func_expr:
     1527    calc_func_term maybe_space {
     1528        CSSParser* p = static_cast<CSSParser*>(parser);
     1529        $$ = p->createFloatingValueList();
     1530        $$->addValue(p->sinkFloatingValue($1));
     1531    }
     1532    | calc_func_expr calc_func_operator calc_func_term {
     1533        CSSParser* p = static_cast<CSSParser*>(parser);
     1534        if ($1 && $2) {
     1535            $$ = $1;
     1536            CSSParserValue v;
     1537            v.id = 0;
     1538            v.unit = CSSParserValue::Operator;
     1539            v.iValue = $2;
     1540            $$->addValue(v);
     1541            $$->addValue(p->sinkFloatingValue($3));
     1542        } else
     1543            $$ = 0;
     1544
     1545    }
     1546    | calc_func_expr calc_func_operator calc_func_paren_expr {
     1547        if ($1 && $2 && $3) {
     1548            $$ = $1;
     1549            CSSParserValue v;
     1550            v.id = 0;
     1551            v.unit = CSSParserValue::Operator;
     1552            v.iValue = $2;
     1553            $$->addValue(v);
     1554            $$->extend(*($3));
     1555        } else
     1556            $$ = 0;
     1557    }
     1558    | calc_func_paren_expr
     1559    | calc_func_expr error {
     1560        $$ = 0;
     1561    }
     1562  ;
     1563
     1564calc_func_expr_list:
     1565    calc_func_expr  {
     1566        $$ = $1;
     1567    }   
     1568    | calc_func_expr_list ',' maybe_space calc_func_expr {
     1569        if ($1 && $4) {
     1570            $$ = $1;
     1571            CSSParserValue v;
     1572            v.id = 0;
     1573            v.unit = CSSParserValue::Operator;
     1574            v.iValue = ',';
     1575            $$->addValue(v);
     1576            $$->extend(*($4));
     1577        } else
     1578            $$ = 0;
     1579    }
     1580   
     1581
     1582calc_function:
     1583    CALCFUNCTION maybe_space calc_func_expr ')' maybe_space {
     1584        CSSParser* p = static_cast<CSSParser*>(parser);
     1585        CSSParserFunction* f = p->createFloatingFunction();
     1586        f->name = $1;
     1587        f->args = p->sinkFloatingValueList($3);
     1588        $$.id = 0;
     1589        $$.unit = CSSParserValue::Function;
     1590        $$.function = f;
     1591    }
     1592    | CALCFUNCTION maybe_space error {
     1593        YYERROR;
     1594    }
     1595    ;
     1596
     1597
     1598min_or_max:
     1599    MINFUNCTION {
     1600        $$ = $1;
     1601    }
     1602    | MAXFUNCTION {
     1603        $$ = $1;
     1604    }
     1605    ;
     1606
     1607min_or_max_function:
     1608    min_or_max maybe_space calc_func_expr_list ')' maybe_space {
     1609        CSSParser* p = static_cast<CSSParser*>(parser);
     1610        CSSParserFunction* f = p->createFloatingFunction();
     1611        f->name = $1;
     1612        f->args = p->sinkFloatingValueList($3);
     1613        $$.id = 0;
     1614        $$.unit = CSSParserValue::Function;
     1615        $$.function = f;
     1616    }
     1617    | min_or_max maybe_space error {
     1618        YYERROR;
     1619    }
     1620    ;
     1621
    14671622/*
    14681623 * There is a constraint on the color that it must
  • trunk/Source/WebCore/css/CSSParserValues.cpp

    r81742 r81849  
    4545    m_values.append(v);
    4646}
    47    
     47
     48void CSSParserValueList::insertValueAt(unsigned i, const CSSParserValue& v)
     49{
     50    m_values.insert(i, v);
     51}
     52
    4853void CSSParserValueList::deleteValueAt(unsigned i)
    4954{
    5055    m_values.remove(i);
     56}
     57
     58void CSSParserValueList::extend(CSSParserValueList& valueList)
     59{
     60    for (unsigned int i = 0; i < valueList.size(); ++i)
     61        m_values.append(*(valueList.valueAt(i)));
    5162}
    5263
  • trunk/Source/WebCore/css/CSSParserValues.h

    r81845 r81849  
    7272   
    7373    void addValue(const CSSParserValue&);
     74    void insertValueAt(unsigned, const CSSParserValue&);
    7475    void deleteValueAt(unsigned);
     76    void extend(CSSParserValueList&);
    7577
    7678    unsigned size() const { return m_values.size(); }
  • trunk/Source/WebCore/css/tokenizer.flex

    r81742 r81849  
    103103{num}kHz                {yyTok = KHERTZ; return yyTok;}
    104104{num}{ident}            {yyTok = DIMEN; return yyTok;}
     105{num}{ident}\+          {yyTok = INVALIDDIMEN; return yyTok;}
    105106{num}%+                 {yyTok = PERCENTAGE; return yyTok;}
    106107{intnum}                {yyTok = INTEGER; return yyTok;}
     
    111112"url("{w}{string}{w}")" {yyTok = URI; return yyTok;}
    112113"url("{w}{url}{w}")"    {yyTok = URI; return yyTok;}
     114"-webkit-calc("         {yyTok = CALCFUNCTION; return yyTok;}
     115"-webkit-min("          {yyTok = MINFUNCTION; return yyTok;}
     116"-webkit-max("          {yyTok = MAXFUNCTION; return yyTok;}
    113117{ident}"("              {yyTok = FUNCTION; return yyTok;}
    114118
Note: See TracChangeset for help on using the changeset viewer.