| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2003 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 2003 Lars Knoll (knoll@kde.org) |
| 3 * Copyright (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) | 3 * Copyright (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) |
| 4 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc.
All rights reserved. | 4 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc.
All rights reserved. |
| 5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com> | 5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com> |
| 6 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> | 6 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> |
| 7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) | 7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) |
| 8 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. | 8 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. |
| 9 * Copyright (C) 2012 Intel Corporation. All rights reserved. | 9 * Copyright (C) 2012 Intel Corporation. All rights reserved. |
| 10 * | 10 * |
| (...skipping 1480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1491 } else { | 1491 } else { |
| 1492 rowGap = columnGap; | 1492 rowGap = columnGap; |
| 1493 } | 1493 } |
| 1494 | 1494 |
| 1495 addProperty(CSSPropertyGridColumnGap, columnGap, important); | 1495 addProperty(CSSPropertyGridColumnGap, columnGap, important); |
| 1496 addProperty(CSSPropertyGridRowGap, rowGap, important); | 1496 addProperty(CSSPropertyGridRowGap, rowGap, important); |
| 1497 | 1497 |
| 1498 return true; | 1498 return true; |
| 1499 } | 1499 } |
| 1500 | 1500 |
| 1501 bool CSSPropertyParser::parseGridTemplateRowsAndAreas(PassRefPtrWillBeRawPtr<CSS
Value> templateColumns, bool important) | 1501 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseGridTemplateColumns(boo
l important) |
| 1502 { |
| 1503 if (!(m_valueList->current() && isForwardSlashOperator(m_valueList->current(
)) && m_valueList->next())) |
| 1504 return nullptr; |
| 1505 if (RefPtrWillBeRawPtr<CSSValue> columnsValue = parseGridTrackList()) { |
| 1506 if (m_valueList->current()) |
| 1507 return nullptr; |
| 1508 return columnsValue; |
| 1509 } |
| 1510 |
| 1511 return nullptr; |
| 1512 } |
| 1513 |
| 1514 bool CSSPropertyParser::parseGridTemplateRowsAndAreasAndColumns(bool important) |
| 1502 { | 1515 { |
| 1503 NamedGridAreaMap gridAreaMap; | 1516 NamedGridAreaMap gridAreaMap; |
| 1504 size_t rowCount = 0; | 1517 size_t rowCount = 0; |
| 1505 size_t columnCount = 0; | 1518 size_t columnCount = 0; |
| 1506 bool trailingIdentWasAdded = false; | 1519 bool trailingIdentWasAdded = false; |
| 1507 RefPtrWillBeRawPtr<CSSValueList> templateRows = CSSValueList::createSpaceSep
arated(); | 1520 RefPtrWillBeRawPtr<CSSValueList> templateRows = CSSValueList::createSpaceSep
arated(); |
| 1508 | 1521 |
| 1509 // At least template-areas strings must be defined. | 1522 // At least template-areas strings must be defined. |
| 1510 if (!m_valueList->current()) | 1523 if (!m_valueList->current() || isForwardSlashOperator(m_valueList->current()
)) |
| 1511 return false; | 1524 return false; |
| 1512 | 1525 |
| 1513 while (m_valueList->current()) { | 1526 while (m_valueList->current() && !isForwardSlashOperator(m_valueList->curren
t())) { |
| 1514 // Handle leading <custom-ident>*. | 1527 // Handle leading <custom-ident>*. |
| 1515 if (!parseGridLineNames(*m_valueList, *templateRows, trailingIdentWasAdd
ed ? toCSSGridLineNamesValue(templateRows->item(templateRows->length() - 1)) : n
ullptr)) | 1528 if (!parseGridLineNames(*m_valueList, *templateRows, trailingIdentWasAdd
ed ? toCSSGridLineNamesValue(templateRows->item(templateRows->length() - 1)) : n
ullptr)) |
| 1516 return false; | 1529 return false; |
| 1517 | 1530 |
| 1518 // Handle a template-area's row. | 1531 // Handle a template-area's row. |
| 1519 if (!parseGridTemplateAreasRow(gridAreaMap, rowCount, columnCount)) | 1532 if (!parseGridTemplateAreasRow(gridAreaMap, rowCount, columnCount)) |
| 1520 return false; | 1533 return false; |
| 1521 ++rowCount; | 1534 ++rowCount; |
| 1522 | 1535 |
| 1523 // Handle template-rows's track-size. | 1536 // Handle template-rows's track-size. |
| 1524 if (m_valueList->current() && m_valueList->current()->m_unit != CSSParse
rValue::String) { | 1537 if (m_valueList->current() && !isForwardSlashOperator(m_valueList->curre
nt()) && m_valueList->current()->m_unit != CSSParserValue::String) { |
| 1525 RefPtrWillBeRawPtr<CSSValue> value = parseGridTrackSize(*m_valueList
); | 1538 RefPtrWillBeRawPtr<CSSValue> value = parseGridTrackSize(*m_valueList
); |
| 1526 if (!value) | 1539 if (!value) |
| 1527 return false; | 1540 return false; |
| 1528 templateRows->append(value); | 1541 templateRows->append(value); |
| 1529 } else { | 1542 } else { |
| 1530 templateRows->append(cssValuePool().createIdentifierValue(CSSValueAu
to)); | 1543 templateRows->append(cssValuePool().createIdentifierValue(CSSValueAu
to)); |
| 1531 } | 1544 } |
| 1532 | 1545 |
| 1533 // This will handle the trailing/leading <custom-ident>* in the grammar. | 1546 // This will handle the trailing/leading <custom-ident>* in the grammar. |
| 1534 if (!parseGridLineNames(*m_valueList, *templateRows)) | 1547 if (!parseGridLineNames(*m_valueList, *templateRows)) |
| 1535 return false; | 1548 return false; |
| 1536 trailingIdentWasAdded = templateRows->item(templateRows->length() - 1)->
isGridLineNamesValue(); | 1549 trailingIdentWasAdded = templateRows->item(templateRows->length() - 1)->
isGridLineNamesValue(); |
| 1537 } | 1550 } |
| 1538 | 1551 |
| 1539 // [<track-list> /]? | 1552 RefPtrWillBeRawPtr<CSSValue> columnsValue = nullptr; |
| 1540 if (templateColumns) | 1553 if (m_valueList->current()) { |
| 1541 addProperty(CSSPropertyGridTemplateColumns, templateColumns, important); | 1554 ASSERT(isForwardSlashOperator(m_valueList->current())); |
| 1542 else | 1555 columnsValue = parseGridTemplateColumns(important); |
| 1543 addProperty(CSSPropertyGridTemplateColumns, cssValuePool().createIdenti
fierValue(CSSValueNone), important); | 1556 if (!columnsValue) |
| 1557 return false; |
| 1558 // The template-columns <track-list> can't be 'none'. |
| 1559 if (columnsValue->isPrimitiveValue() && toCSSPrimitiveValue(*columnsValu
e).getValueID() == CSSValueNone) |
| 1560 return false; |
| 1561 } |
| 1544 | 1562 |
| 1545 // [<line-names>? <string> [<track-size> <line-names>]? ]+ | 1563 addProperty(CSSPropertyGridTemplateRows, templateRows.release(), important); |
| 1564 addProperty(CSSPropertyGridTemplateColumns, columnsValue ? columnsValue.rele
ase() : cssValuePool().createIdentifierValue(CSSValueNone), important); |
| 1565 |
| 1546 RefPtrWillBeRawPtr<CSSValue> templateAreas = CSSGridTemplateAreasValue::crea
te(gridAreaMap, rowCount, columnCount); | 1566 RefPtrWillBeRawPtr<CSSValue> templateAreas = CSSGridTemplateAreasValue::crea
te(gridAreaMap, rowCount, columnCount); |
| 1547 addProperty(CSSPropertyGridTemplateAreas, templateAreas.release(), important
); | 1567 addProperty(CSSPropertyGridTemplateAreas, templateAreas.release(), important
); |
| 1548 addProperty(CSSPropertyGridTemplateRows, templateRows.release(), important); | |
| 1549 | 1568 |
| 1550 return true; | 1569 return true; |
| 1551 } | 1570 } |
| 1552 | 1571 |
| 1553 | 1572 |
| 1554 bool CSSPropertyParser::parseGridTemplateShorthand(bool important) | 1573 bool CSSPropertyParser::parseGridTemplateShorthand(bool important) |
| 1555 { | 1574 { |
| 1556 ASSERT(RuntimeEnabledFeatures::cssGridLayoutEnabled()); | 1575 ASSERT(RuntimeEnabledFeatures::cssGridLayoutEnabled()); |
| 1557 | 1576 |
| 1558 ShorthandScope scope(this, CSSPropertyGridTemplate); | 1577 ShorthandScope scope(this, CSSPropertyGridTemplate); |
| 1559 ASSERT(gridTemplateShorthand().length() == 3); | 1578 ASSERT(gridTemplateShorthand().length() == 3); |
| 1560 | 1579 |
| 1561 // At least "none" must be defined. | 1580 // At least "none" must be defined. |
| 1562 if (!m_valueList->current()) | 1581 if (!m_valueList->current()) |
| 1563 return false; | 1582 return false; |
| 1564 | 1583 |
| 1565 bool firstValueIsNone = m_valueList->current()->id == CSSValueNone; | 1584 bool firstValueIsNone = m_valueList->current()->id == CSSValueNone; |
| 1566 | 1585 |
| 1567 // 1- 'none' case. | 1586 // 1- 'none' case. |
| 1568 if (firstValueIsNone && !m_valueList->next()) { | 1587 if (firstValueIsNone && !m_valueList->next()) { |
| 1569 addProperty(CSSPropertyGridTemplateColumns, cssValuePool().createIdentif
ierValue(CSSValueNone), important); | 1588 addProperty(CSSPropertyGridTemplateColumns, cssValuePool().createIdentif
ierValue(CSSValueNone), important); |
| 1570 addProperty(CSSPropertyGridTemplateRows, cssValuePool().createIdentifier
Value(CSSValueNone), important); | 1589 addProperty(CSSPropertyGridTemplateRows, cssValuePool().createIdentifier
Value(CSSValueNone), important); |
| 1571 addProperty(CSSPropertyGridTemplateAreas, cssValuePool().createIdentifie
rValue(CSSValueNone), important); | 1590 addProperty(CSSPropertyGridTemplateAreas, cssValuePool().createIdentifie
rValue(CSSValueNone), important); |
| 1572 return true; | 1591 return true; |
| 1573 } | 1592 } |
| 1574 | 1593 |
| 1575 unsigned index = 0; | 1594 // 2- <grid-template-rows> / <grid-template-columns> |
| 1576 RefPtrWillBeRawPtr<CSSValue> columnsValue = nullptr; | 1595 RefPtrWillBeRawPtr<CSSValue> rowsValue = nullptr; |
| 1577 if (firstValueIsNone) { | 1596 if (firstValueIsNone) { |
| 1578 columnsValue = cssValuePool().createIdentifierValue(CSSValueNone); | 1597 rowsValue = cssValuePool().createIdentifierValue(CSSValueNone); |
| 1579 } else { | 1598 } else { |
| 1580 columnsValue = parseGridTrackList(); | 1599 rowsValue = parseGridTrackList(); |
| 1581 } | 1600 } |
| 1582 | 1601 |
| 1583 // 2- <grid-template-columns> / <grid-template-columns> syntax. | 1602 if (rowsValue) { |
| 1584 if (columnsValue) { | 1603 RefPtrWillBeRawPtr<CSSValue> columnsValue = parseGridTemplateColumns(imp
ortant); |
| 1585 if (!(m_valueList->current() && isForwardSlashOperator(m_valueList->curr
ent()) && m_valueList->next())) | 1604 if (!columnsValue) |
| 1586 return false; | 1605 return false; |
| 1587 index = m_valueList->currentIndex(); | 1606 |
| 1588 if (RefPtrWillBeRawPtr<CSSValue> rowsValue = parseGridTrackList()) { | 1607 addProperty(CSSPropertyGridTemplateRows, rowsValue.release(), important)
; |
| 1589 if (m_valueList->current()) | 1608 addProperty(CSSPropertyGridTemplateColumns, columnsValue.release(), impo
rtant); |
| 1590 return false; | 1609 addProperty(CSSPropertyGridTemplateAreas, cssValuePool().createIdentifie
rValue(CSSValueNone), important); |
| 1591 addProperty(CSSPropertyGridTemplateColumns, columnsValue, important)
; | 1610 return true; |
| 1592 addProperty(CSSPropertyGridTemplateRows, rowsValue, important); | |
| 1593 addProperty(CSSPropertyGridTemplateAreas, cssValuePool().createIdent
ifierValue(CSSValueNone), important); | |
| 1594 return true; | |
| 1595 } | |
| 1596 } | 1611 } |
| 1597 | 1612 |
| 1598 | 1613 // 3- [<line-names>? <string> [<track-size> <line-names>]? ]+ syntax. |
| 1599 // 3- [<track-list> /]? [<line-names>? <string> [<track-size> <line-names>]?
]+ syntax. | |
| 1600 // The template-columns <track-list> can't be 'none'. | |
| 1601 if (firstValueIsNone) | |
| 1602 return false; | |
| 1603 // It requires to rewind parsing due to previous syntax failures. | 1614 // It requires to rewind parsing due to previous syntax failures. |
| 1604 m_valueList->setCurrentIndex(index); | 1615 m_valueList->setCurrentIndex(0); |
| 1605 return parseGridTemplateRowsAndAreas(columnsValue, important); | 1616 return parseGridTemplateRowsAndAreasAndColumns(important); |
| 1606 } | 1617 } |
| 1607 | 1618 |
| 1608 bool CSSPropertyParser::parseGridShorthand(bool important) | 1619 bool CSSPropertyParser::parseGridShorthand(bool important) |
| 1609 { | 1620 { |
| 1610 ShorthandScope scope(this, CSSPropertyGrid); | 1621 ShorthandScope scope(this, CSSPropertyGrid); |
| 1611 ASSERT(shorthandForProperty(CSSPropertyGrid).length() == 8); | 1622 ASSERT(shorthandForProperty(CSSPropertyGrid).length() == 8); |
| 1612 | 1623 |
| 1613 // 1- <grid-template> | 1624 // 1- <grid-template> |
| 1614 if (parseGridTemplateShorthand(important)) { | 1625 if (parseGridTemplateShorthand(important)) { |
| 1615 // It can only be specified the explicit or the implicit grid properties
in a single grid declaration. | 1626 // It can only be specified the explicit or the implicit grid properties
in a single grid declaration. |
| (...skipping 1585 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3201 ASSERT(!m_parsedCalculation); | 3212 ASSERT(!m_parsedCalculation); |
| 3202 m_parsedCalculation = CSSCalcValue::create(args, range); | 3213 m_parsedCalculation = CSSCalcValue::create(args, range); |
| 3203 | 3214 |
| 3204 if (!m_parsedCalculation) | 3215 if (!m_parsedCalculation) |
| 3205 return false; | 3216 return false; |
| 3206 | 3217 |
| 3207 return true; | 3218 return true; |
| 3208 } | 3219 } |
| 3209 | 3220 |
| 3210 } // namespace blink | 3221 } // namespace blink |
| OLD | NEW |