Changeset 83415 in webkit
- Timestamp:
- Apr 10, 2011 7:31:42 PM (13 years ago)
- Location:
- trunk
- Files:
-
- 15 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r83413 r83415 1 2011-04-10 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' and 'regression' tests pass as 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/lexer-regression-57581-2-expected.txt: Added. 15 * css3/calc/lexer-regression-57581-2.html: Added. 16 * css3/calc/lexer-regression-57581-3-expected.txt: Added. 17 * css3/calc/lexer-regression-57581-3.html: Added. 18 * css3/calc/lexer-regression-57581-expected.txt: Added. 19 * css3/calc/lexer-regression-57581.html: Added. 20 * css3/calc/minmax-errors-expected.txt: Added. 21 * css3/calc/minmax-errors.html: Added. 22 * css3/calc/simple-calcs-expected.txt: Added. 23 * css3/calc/simple-calcs.html: Added. 24 * css3/calc/simple-minmax-expected.txt: Added. 25 * css3/calc/simple-minmax.html: Added. 26 1 27 2011-04-10 Kent Tamura <tkent@chromium.org> 2 28 -
trunk/Source/WebCore/ChangeLog
r83414 r83415 1 2011-04-10 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/lexer-regression-57581-2.html 10 css3/calc/lexer-regression-57581-3.html 11 css3/calc/lexer-regression-57581.html 12 css3/calc/minmax-errors.html 13 css3/calc/nested-rounded-corners.html 14 css3/calc/simple-calcs.html 15 css3/calc/simple-minmax.html 16 17 * css/CSSGrammar.y: 18 * css/CSSParserValues.cpp: 19 (WebCore::CSSParserValueList::insertValueAt): 20 (WebCore::CSSParserValueList::extend): 21 * css/CSSParserValues.h: 22 * css/tokenizer.flex: 23 1 24 2011-04-10 Alice Boxhall <aboxhall@chromium.org> 2 25 -
trunk/Source/WebCore/css/CSSGrammar.y
r83046 r83415 100 100 %} 101 101 102 %expect 5 0102 %expect 54 103 103 104 104 %nonassoc LOWEST_PREC … … 184 184 %token <number> KHERTZ 185 185 %token <string> DIMEN 186 %token <string> INVALIDDIMEN 186 187 %token <number> PERCENTAGE 187 188 %token <number> FLOATTOKEN … … 192 193 %token <string> ANYFUNCTION 193 194 %token <string> NOTFUNCTION 195 %token <string> CALCFUNCTION 196 %token <string> MINFUNCTION 197 %token <string> MAXFUNCTION 194 198 195 199 %token <string> UNICODERANGE … … 272 276 %type <value> unary_term 273 277 %type <value> function 278 %type <value> calc_func_term 279 %type <character> calc_func_operator 280 %type <valueList> calc_func_expr 281 %type <valueList> calc_func_expr_list 282 %type <valueList> calc_func_paren_expr 283 %type <value> calc_function 284 %type <string> min_or_max 285 %type <value> min_or_max_function 274 286 275 287 %type <string> element_name … … 1406 1418 /* FIXME: according to the specs a function can have a unary_operator in front. I know no case where this makes sense */ 1407 1419 | function { 1420 $$ = $1; 1421 } 1422 | calc_function { 1423 $$ = $1; 1424 } 1425 | min_or_max_function { 1408 1426 $$ = $1; 1409 1427 } … … 1464 1482 } 1465 1483 ; 1484 1485 calc_func_term: 1486 unary_term { $$ = $1; } 1487 | unary_operator unary_term { $$ = $2; $$.fValue *= $1; } 1488 ; 1489 1490 calc_func_operator: 1491 '+' WHITESPACE { 1492 $$ = '+'; 1493 } 1494 | '-' WHITESPACE { 1495 $$ = '-'; 1496 } 1497 | '*' maybe_space { 1498 $$ = '*'; 1499 } 1500 | '/' maybe_space { 1501 $$ = '/'; 1502 } 1503 | IDENT maybe_space { 1504 if (equalIgnoringCase("mod", $1.characters, $1.length)) 1505 $$ = '%'; 1506 else 1507 $$ = 0; 1508 } 1509 ; 1510 1511 calc_func_paren_expr: 1512 '(' maybe_space calc_func_expr maybe_space ')' maybe_space { 1513 if ($3) { 1514 $$ = $3; 1515 CSSParserValue v; 1516 v.id = 0; 1517 v.unit = CSSParserValue::Operator; 1518 v.iValue = '('; 1519 $$->insertValueAt(0, v); 1520 v.iValue = ')'; 1521 $$->addValue(v); 1522 } else 1523 $$ = 0; 1524 } 1525 1526 calc_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 1564 calc_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 1582 calc_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 1598 min_or_max: 1599 MINFUNCTION { 1600 $$ = $1; 1601 } 1602 | MAXFUNCTION { 1603 $$ = $1; 1604 } 1605 ; 1606 1607 min_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 ; 1466 1621 1467 1622 /* error handling rules */ -
trunk/Source/WebCore/css/CSSParserValues.cpp
r82636 r83415 45 45 m_values.append(v); 46 46 } 47 47 48 void CSSParserValueList::insertValueAt(unsigned i, const CSSParserValue& v) 49 { 50 m_values.insert(i, v); 51 } 52 48 53 void CSSParserValueList::deleteValueAt(unsigned i) 49 54 { 50 55 m_values.remove(i); 56 } 57 58 void CSSParserValueList::extend(CSSParserValueList& valueList) 59 { 60 for (unsigned int i = 0; i < valueList.size(); ++i) 61 m_values.append(*(valueList.valueAt(i))); 51 62 } 52 63 -
trunk/Source/WebCore/css/CSSParserValues.h
r82636 r83415 72 72 73 73 void addValue(const CSSParserValue&); 74 void insertValueAt(unsigned, const CSSParserValue&); 74 75 void deleteValueAt(unsigned); 76 void extend(CSSParserValueList&); 75 77 76 78 unsigned size() const { return m_values.size(); } -
trunk/Source/WebCore/css/tokenizer.flex
r83046 r83415 102 102 {num}kHz {yyTok = KHERTZ; return yyTok;} 103 103 {num}{ident} {yyTok = DIMEN; return yyTok;} 104 {num}{ident}\+ {yyTok = INVALIDDIMEN; return yyTok;} 104 105 {num}%+ {yyTok = PERCENTAGE; return yyTok;} 105 106 {intnum} {yyTok = INTEGER; return yyTok;} … … 110 111 "url("{w}{string}{w}")" {yyTok = URI; return yyTok;} 111 112 "url("{w}{url}{w}")" {yyTok = URI; return yyTok;} 113 "-webkit-calc(" {yyTok = CALCFUNCTION; return yyTok;} 114 "-webkit-min(" {yyTok = MINFUNCTION; return yyTok;} 115 "-webkit-max(" {yyTok = MAXFUNCTION; return yyTok;} 112 116 {ident}"(" {yyTok = FUNCTION; return yyTok;} 113 117
Note: See TracChangeset
for help on using the changeset viewer.