Chromium Code Reviews| 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 4646 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4657 if (!isForwardSlashOperator(m_valueList->current())) | 4657 if (!isForwardSlashOperator(m_valueList->current())) |
| 4658 return false; | 4658 return false; |
| 4659 | 4659 |
| 4660 if (!m_valueList->next()) | 4660 if (!m_valueList->next()) |
| 4661 return false; | 4661 return false; |
| 4662 | 4662 |
| 4663 property = parseGridPosition(); | 4663 property = parseGridPosition(); |
| 4664 return true; | 4664 return true; |
| 4665 } | 4665 } |
| 4666 | 4666 |
| 4667 void CSSPropertyParser::parseGridLineNames(CSSParserValueList* parserValueList, CSSValueList& valueList) | 4667 bool CSSPropertyParser::parseGridLineNames(CSSParserValueList* parserValueList, CSSValueList& valueList) |
| 4668 { | 4668 { |
| 4669 ASSERT(parserValueList->current() && parserValueList->current()->unit == CSS ParserValue::ValueList); | 4669 ASSERT(parserValueList->current() && parserValueList->current()->unit == CSS ParserValue::ValueList); |
| 4670 | 4670 |
| 4671 CSSParserValueList* identList = parserValueList->current()->valueList; | 4671 CSSParserValueList* identList = parserValueList->current()->valueList; |
| 4672 if (!identList->size()) { | 4672 if (!identList->size()) { |
| 4673 parserValueList->next(); | 4673 parserValueList->next(); |
| 4674 return; | 4674 return true; |
| 4675 } | 4675 } |
| 4676 | 4676 |
| 4677 RefPtrWillBeRawPtr<CSSGridLineNamesValue> lineNames = CSSGridLineNamesValue: :create(); | 4677 RefPtrWillBeRawPtr<CSSGridLineNamesValue> lineNames = CSSGridLineNamesValue: :create(); |
| 4678 while (CSSParserValue* identValue = identList->current()) { | 4678 while (CSSParserValue* identValue = identList->current()) { |
| 4679 ASSERT(identValue->unit == CSSPrimitiveValue::CSS_IDENT); | 4679 ASSERT(identValue->unit == CSSPrimitiveValue::CSS_IDENT); |
| 4680 if (equalIgnoringCase(identValue->string, "auto") | |
| 4681 || equalIgnoringCase(identValue->string, "minmax") | |
| 4682 || equalIgnoringCase(identValue->string, "subgrid")) | |
|
Julien - ping for review
2014/03/01 00:42:21
subgrid will be moved to level 2 (http://lists.w3.
| |
| 4683 return false; | |
| 4684 | |
| 4680 RefPtrWillBeRawPtr<CSSPrimitiveValue> lineName = createPrimitiveStringVa lue(identValue); | 4685 RefPtrWillBeRawPtr<CSSPrimitiveValue> lineName = createPrimitiveStringVa lue(identValue); |
| 4681 lineNames->append(lineName.release()); | 4686 lineNames->append(lineName.release()); |
| 4682 identList->next(); | 4687 identList->next(); |
| 4683 } | 4688 } |
| 4684 valueList.append(lineNames.release()); | 4689 valueList.append(lineNames.release()); |
| 4685 | 4690 |
| 4686 parserValueList->next(); | 4691 parserValueList->next(); |
| 4692 return true; | |
| 4687 } | 4693 } |
| 4688 | 4694 |
| 4689 bool CSSPropertyParser::parseGridTrackList(CSSPropertyID propId, bool important) | 4695 bool CSSPropertyParser::parseGridTrackList(CSSPropertyID propId, bool important) |
| 4690 { | 4696 { |
| 4691 ASSERT(RuntimeEnabledFeatures::cssGridLayoutEnabled()); | 4697 ASSERT(RuntimeEnabledFeatures::cssGridLayoutEnabled()); |
| 4692 | 4698 |
| 4693 CSSParserValue* value = m_valueList->current(); | 4699 CSSParserValue* value = m_valueList->current(); |
| 4694 if (value->id == CSSValueNone) { | 4700 if (value->id == CSSValueNone) { |
| 4695 if (m_valueList->next()) | 4701 if (m_valueList->next()) |
| 4696 return false; | 4702 return false; |
| 4697 | 4703 |
| 4698 addProperty(propId, cssValuePool().createIdentifierValue(value->id), imp ortant); | 4704 addProperty(propId, cssValuePool().createIdentifierValue(value->id), imp ortant); |
| 4699 return true; | 4705 return true; |
| 4700 } | 4706 } |
| 4701 | 4707 |
| 4702 RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createSpaceSeparated (); | 4708 RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createSpaceSeparated (); |
| 4703 // Handle leading <ident>*. | 4709 // Handle leading <ident>*. |
| 4704 value = m_valueList->current(); | 4710 value = m_valueList->current(); |
| 4705 if (value && value->unit == CSSParserValue::ValueList) | 4711 if (value && value->unit == CSSParserValue::ValueList) { |
| 4706 parseGridLineNames(m_valueList.get(), *values); | 4712 if (!parseGridLineNames(m_valueList.get(), *values)) |
| 4713 return false; | |
| 4714 } | |
| 4707 | 4715 |
| 4708 bool seenTrackSizeOrRepeatFunction = false; | 4716 bool seenTrackSizeOrRepeatFunction = false; |
| 4709 while (CSSParserValue* currentValue = m_valueList->current()) { | 4717 while (CSSParserValue* currentValue = m_valueList->current()) { |
| 4710 if (currentValue->unit == CSSParserValue::Function && equalIgnoringCase( currentValue->function->name, "repeat(")) { | 4718 if (currentValue->unit == CSSParserValue::Function && equalIgnoringCase( currentValue->function->name, "repeat(")) { |
| 4711 if (!parseGridTrackRepeatFunction(*values)) | 4719 if (!parseGridTrackRepeatFunction(*values)) |
| 4712 return false; | 4720 return false; |
| 4713 seenTrackSizeOrRepeatFunction = true; | 4721 seenTrackSizeOrRepeatFunction = true; |
| 4714 } else { | 4722 } else { |
| 4715 RefPtrWillBeRawPtr<CSSValue> value = parseGridTrackSize(*m_valueList ); | 4723 RefPtrWillBeRawPtr<CSSValue> value = parseGridTrackSize(*m_valueList ); |
| 4716 if (!value) | 4724 if (!value) |
| 4717 return false; | 4725 return false; |
| 4718 values->append(value); | 4726 values->append(value); |
| 4719 seenTrackSizeOrRepeatFunction = true; | 4727 seenTrackSizeOrRepeatFunction = true; |
| 4720 } | 4728 } |
| 4721 // This will handle the trailing <ident>* in the grammar. | 4729 // This will handle the trailing <ident>* in the grammar. |
| 4722 value = m_valueList->current(); | 4730 value = m_valueList->current(); |
| 4723 if (value && value->unit == CSSParserValue::ValueList) | 4731 if (value && value->unit == CSSParserValue::ValueList) { |
| 4724 parseGridLineNames(m_valueList.get(), *values); | 4732 if (!parseGridLineNames(m_valueList.get(), *values)) |
| 4733 return false; | |
| 4734 } | |
| 4725 } | 4735 } |
| 4726 | 4736 |
| 4727 // We should have found a <track-size> or else it is not a valid <track-list > | 4737 // We should have found a <track-size> or else it is not a valid <track-list > |
| 4728 if (!seenTrackSizeOrRepeatFunction) | 4738 if (!seenTrackSizeOrRepeatFunction) |
| 4729 return false; | 4739 return false; |
| 4730 | 4740 |
| 4731 addProperty(propId, values.release(), important); | 4741 addProperty(propId, values.release(), important); |
| 4732 return true; | 4742 return true; |
| 4733 } | 4743 } |
| 4734 | 4744 |
| 4735 bool CSSPropertyParser::parseGridTrackRepeatFunction(CSSValueList& list) | 4745 bool CSSPropertyParser::parseGridTrackRepeatFunction(CSSValueList& list) |
| 4736 { | 4746 { |
| 4737 CSSParserValueList* arguments = m_valueList->current()->function->args.get() ; | 4747 CSSParserValueList* arguments = m_valueList->current()->function->args.get() ; |
| 4738 if (!arguments || arguments->size() < 3 || !validUnit(arguments->valueAt(0), FPositiveInteger) || !isComma(arguments->valueAt(1))) | 4748 if (!arguments || arguments->size() < 3 || !validUnit(arguments->valueAt(0), FPositiveInteger) || !isComma(arguments->valueAt(1))) |
| 4739 return false; | 4749 return false; |
| 4740 | 4750 |
| 4741 ASSERT_WITH_SECURITY_IMPLICATION(arguments->valueAt(0)->fValue > 0); | 4751 ASSERT_WITH_SECURITY_IMPLICATION(arguments->valueAt(0)->fValue > 0); |
| 4742 size_t repetitions = arguments->valueAt(0)->fValue; | 4752 size_t repetitions = arguments->valueAt(0)->fValue; |
| 4743 RefPtrWillBeRawPtr<CSSValueList> repeatedValues = CSSValueList::createSpaceS eparated(); | 4753 RefPtrWillBeRawPtr<CSSValueList> repeatedValues = CSSValueList::createSpaceS eparated(); |
| 4744 arguments->next(); // Skip the repetition count. | 4754 arguments->next(); // Skip the repetition count. |
| 4745 arguments->next(); // Skip the comma. | 4755 arguments->next(); // Skip the comma. |
| 4746 | 4756 |
| 4747 // Handle leading <ident>*. | 4757 // Handle leading <ident>*. |
| 4748 CSSParserValue* currentValue = arguments->current(); | 4758 CSSParserValue* currentValue = arguments->current(); |
| 4749 if (currentValue && currentValue->unit == CSSParserValue::ValueList) | 4759 if (currentValue && currentValue->unit == CSSParserValue::ValueList) { |
| 4750 parseGridLineNames(arguments, *repeatedValues); | 4760 if (!parseGridLineNames(arguments, *repeatedValues)) |
| 4761 return false; | |
| 4762 } | |
| 4751 | 4763 |
| 4752 while (arguments->current()) { | 4764 while (arguments->current()) { |
| 4753 RefPtrWillBeRawPtr<CSSValue> trackSize = parseGridTrackSize(*arguments); | 4765 RefPtrWillBeRawPtr<CSSValue> trackSize = parseGridTrackSize(*arguments); |
| 4754 if (!trackSize) | 4766 if (!trackSize) |
| 4755 return false; | 4767 return false; |
| 4756 | 4768 |
| 4757 repeatedValues->append(trackSize); | 4769 repeatedValues->append(trackSize); |
| 4758 | 4770 |
| 4759 // This takes care of any trailing <ident>* in the grammar. | 4771 // This takes care of any trailing <ident>* in the grammar. |
| 4760 currentValue = arguments->current(); | 4772 currentValue = arguments->current(); |
| 4761 if (currentValue && currentValue->unit == CSSParserValue::ValueList) | 4773 if (currentValue && currentValue->unit == CSSParserValue::ValueList) { |
| 4762 parseGridLineNames(arguments, *repeatedValues); | 4774 if (!parseGridLineNames(arguments, *repeatedValues)) |
| 4775 return false; | |
| 4776 } | |
| 4763 } | 4777 } |
| 4764 | 4778 |
| 4765 for (size_t i = 0; i < repetitions; ++i) { | 4779 for (size_t i = 0; i < repetitions; ++i) { |
| 4766 for (size_t j = 0; j < repeatedValues->length(); ++j) | 4780 for (size_t j = 0; j < repeatedValues->length(); ++j) |
| 4767 list.append(repeatedValues->itemWithoutBoundsCheck(j)); | 4781 list.append(repeatedValues->itemWithoutBoundsCheck(j)); |
| 4768 } | 4782 } |
| 4769 | 4783 |
| 4770 // parseGridTrackSize iterated over the repeat arguments, move to the next v alue. | 4784 // parseGridTrackSize iterated over the repeat arguments, move to the next v alue. |
| 4771 m_valueList->next(); | 4785 m_valueList->next(); |
| 4772 return true; | 4786 return true; |
| (...skipping 5392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 10165 { | 10179 { |
| 10166 // The tokenizer checks for the construct of an+b. | 10180 // The tokenizer checks for the construct of an+b. |
| 10167 // However, since the {ident} rule precedes the {nth} rule, some of those | 10181 // However, since the {ident} rule precedes the {nth} rule, some of those |
| 10168 // tokens are identified as string literal. Furthermore we need to accept | 10182 // tokens are identified as string literal. Furthermore we need to accept |
| 10169 // "odd" and "even" which does not match to an+b. | 10183 // "odd" and "even" which does not match to an+b. |
| 10170 return equalIgnoringCase(token, "odd") || equalIgnoringCase(token, "even") | 10184 return equalIgnoringCase(token, "odd") || equalIgnoringCase(token, "even") |
| 10171 || equalIgnoringCase(token, "n") || equalIgnoringCase(token, "-n"); | 10185 || equalIgnoringCase(token, "n") || equalIgnoringCase(token, "-n"); |
| 10172 } | 10186 } |
| 10173 | 10187 |
| 10174 } | 10188 } |
| OLD | NEW |