Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "config.h" | 5 #include "config.h" |
| 6 #include "core/css/parser/CSSPropertyParser.h" | 6 #include "core/css/parser/CSSPropertyParser.h" |
| 7 | 7 |
| 8 #include "core/StylePropertyShorthand.h" | 8 #include "core/StylePropertyShorthand.h" |
| 9 #include "core/css/CSSCalculationValue.h" | 9 #include "core/css/CSSCalculationValue.h" |
| 10 #include "core/css/CSSCustomIdentValue.h" | 10 #include "core/css/CSSCustomIdentValue.h" |
| (...skipping 623 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 634 for (unsigned i = 0; i < 3; i++) { // 3 dimensions of rotation | 634 for (unsigned i = 0; i < 3; i++) { // 3 dimensions of rotation |
| 635 RefPtrWillBeRawPtr<CSSValue> dimension = consumeNumber(range, ValueRange All); | 635 RefPtrWillBeRawPtr<CSSValue> dimension = consumeNumber(range, ValueRange All); |
| 636 if (!dimension) | 636 if (!dimension) |
| 637 return nullptr; | 637 return nullptr; |
| 638 list->append(dimension.release()); | 638 list->append(dimension.release()); |
| 639 } | 639 } |
| 640 | 640 |
| 641 return list.release(); | 641 return list.release(); |
| 642 } | 642 } |
| 643 | 643 |
| 644 enum class SizeParameter { | |
| 645 None, | |
| 646 Auto, | |
| 647 Length, | |
| 648 PageSize, | |
| 649 Orientation, | |
| 650 }; | |
| 651 | |
| 652 static SizeParameter parseSizeParameter(CSSParserTokenRange& range, CSSParserMod e cssParserMode, CSSValueList* parsedValues, SizeParameter prevParamType) | |
| 653 { | |
| 654 switch (range.peek().id()) { | |
| 655 case CSSValueAuto: | |
| 656 if (prevParamType == SizeParameter::None) { | |
| 657 parsedValues->append(consumeIdent(range)); | |
| 658 return SizeParameter::Auto; | |
| 659 } | |
| 660 return SizeParameter::None; | |
| 661 case CSSValueLandscape: | |
| 662 case CSSValuePortrait: | |
| 663 if (prevParamType == SizeParameter::None || prevParamType == SizeParamet er::PageSize) { | |
| 664 parsedValues->append(consumeIdent(range)); | |
| 665 return SizeParameter::Orientation; | |
| 666 } | |
| 667 return SizeParameter::None; | |
| 668 case CSSValueA3: | |
| 669 case CSSValueA4: | |
| 670 case CSSValueA5: | |
| 671 case CSSValueB4: | |
| 672 case CSSValueB5: | |
| 673 case CSSValueLedger: | |
| 674 case CSSValueLegal: | |
| 675 case CSSValueLetter: | |
| 676 if (prevParamType == SizeParameter::None || prevParamType == SizeParamet er::Orientation) { | |
| 677 // Normalize to Page Size then Orientation order by prepending for s impler StyleBuilder handling | |
| 678 parsedValues->prepend(consumeIdent(range)); | |
| 679 return SizeParameter::PageSize; | |
| 680 } | |
| 681 return SizeParameter::None; | |
| 682 case 0: { | |
| 683 RefPtrWillBeRawPtr<CSSValue> parsedValue = consumeLength(range, cssParse rMode, ValueRangeNonNegative); | |
| 684 if (parsedValue && (prevParamType == SizeParameter::None || prevParamTyp e == SizeParameter::Length)) { | |
| 685 parsedValues->append(parsedValue.release()); | |
| 686 return SizeParameter::Length; | |
| 687 } | |
| 688 return SizeParameter::None; | |
| 689 } | |
| 690 default: | |
| 691 return SizeParameter::None; | |
| 692 } | |
| 693 } | |
| 694 | |
| 695 static PassRefPtrWillBeRawPtr<CSSValueList> consumeSize(CSSParserTokenRange& ran ge, CSSParserMode cssParserMode) | |
| 696 { | |
| 697 RefPtrWillBeRawPtr<CSSValueList> parsedValues = CSSValueList::createSpaceSep arated(); | |
| 698 | |
| 699 // First parameter. | |
|
Timothy Loh
2015/10/08 23:36:38
This can be lots simpler I think. Sorry for code d
rwlbuis
2015/10/12 17:13:19
I like it! But the part where height is set to wid
| |
| 700 SizeParameter paramType = parseSizeParameter(range, cssParserMode, parsedVal ues.get(), SizeParameter::None); | |
| 701 if (paramType == SizeParameter::None) | |
| 702 return nullptr; | |
| 703 | |
| 704 // Second parameter, if any. | |
| 705 if (!range.atEnd()) { | |
| 706 paramType = parseSizeParameter(range, cssParserMode, parsedValues.get(), paramType); | |
| 707 if (paramType == SizeParameter::None) | |
| 708 return nullptr; | |
| 709 } | |
| 710 | |
| 711 return parsedValues.release(); | |
| 712 } | |
| 713 | |
| 644 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseSingleValue(CSSProperty ID propId) | 714 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseSingleValue(CSSProperty ID propId) |
| 645 { | 715 { |
| 646 m_range.consumeWhitespace(); | 716 m_range.consumeWhitespace(); |
| 647 switch (propId) { | 717 switch (propId) { |
| 648 case CSSPropertyWillChange: | 718 case CSSPropertyWillChange: |
| 649 return consumeWillChange(m_range); | 719 return consumeWillChange(m_range); |
| 650 case CSSPropertyPage: | 720 case CSSPropertyPage: |
| 651 return consumePage(m_range); | 721 return consumePage(m_range); |
| 652 case CSSPropertyQuotes: | 722 case CSSPropertyQuotes: |
| 653 return consumeQuotes(m_range); | 723 return consumeQuotes(m_range); |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 670 return consumeTabSize(m_range, m_context.mode()); | 740 return consumeTabSize(m_range, m_context.mode()); |
| 671 case CSSPropertyFontSize: | 741 case CSSPropertyFontSize: |
| 672 return consumeFontSize(m_range, m_context.mode(), UnitlessQuirk::Allow); | 742 return consumeFontSize(m_range, m_context.mode(), UnitlessQuirk::Allow); |
| 673 case CSSPropertyLineHeight: | 743 case CSSPropertyLineHeight: |
| 674 return consumeLineHeight(m_range, m_context.mode()); | 744 return consumeLineHeight(m_range, m_context.mode()); |
| 675 case CSSPropertyRotate: | 745 case CSSPropertyRotate: |
| 676 return consumeRotation(m_range); | 746 return consumeRotation(m_range); |
| 677 case CSSPropertyWebkitBorderHorizontalSpacing: | 747 case CSSPropertyWebkitBorderHorizontalSpacing: |
| 678 case CSSPropertyWebkitBorderVerticalSpacing: | 748 case CSSPropertyWebkitBorderVerticalSpacing: |
| 679 return consumeLength(m_range, m_context.mode(), ValueRangeNonNegative); | 749 return consumeLength(m_range, m_context.mode(), ValueRangeNonNegative); |
| 750 case CSSPropertySize: | |
| 751 return consumeSize(m_range, m_context.mode()); | |
| 680 default: | 752 default: |
| 681 return nullptr; | 753 return nullptr; |
| 682 } | 754 } |
| 683 } | 755 } |
| 684 | 756 |
| 685 static PassRefPtrWillBeRawPtr<CSSValueList> consumeFontFaceUnicodeRange(CSSParse rTokenRange& range) | 757 static PassRefPtrWillBeRawPtr<CSSValueList> consumeFontFaceUnicodeRange(CSSParse rTokenRange& range) |
| 686 { | 758 { |
| 687 RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createCommaSeparated (); | 759 RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createCommaSeparated (); |
| 688 | 760 |
| 689 do { | 761 do { |
| (...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1064 } | 1136 } |
| 1065 case CSSPropertyBorderSpacing: | 1137 case CSSPropertyBorderSpacing: |
| 1066 return consumeBorderSpacing(important); | 1138 return consumeBorderSpacing(important); |
| 1067 default: | 1139 default: |
| 1068 m_currentShorthand = oldShorthand; | 1140 m_currentShorthand = oldShorthand; |
| 1069 return false; | 1141 return false; |
| 1070 } | 1142 } |
| 1071 } | 1143 } |
| 1072 | 1144 |
| 1073 } // namespace blink | 1145 } // namespace blink |
| OLD | NEW |