| 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 657 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 668 return true; | 668 return true; |
| 669 break; | 669 break; |
| 670 case CSSPropertyWebkitBoxPack: | 670 case CSSPropertyWebkitBoxPack: |
| 671 if (valueID == CSSValueStart || valueID == CSSValueEnd || valueID == CSS
ValueCenter || valueID == CSSValueJustify) | 671 if (valueID == CSSValueStart || valueID == CSSValueEnd || valueID == CSS
ValueCenter || valueID == CSSValueJustify) |
| 672 return true; | 672 return true; |
| 673 break; | 673 break; |
| 674 case CSSPropertyInternalCallback: | 674 case CSSPropertyInternalCallback: |
| 675 // This property is only injected programmatically, not parsed from styl
esheets. | 675 // This property is only injected programmatically, not parsed from styl
esheets. |
| 676 return false; | 676 return false; |
| 677 case CSSPropertyColumnFill: | 677 case CSSPropertyColumnFill: |
| 678 if (RuntimeEnabledFeatures::regionBasedColumnsEnabled()) { | |
| 679 if (valueID == CSSValueAuto || valueID == CSSValueBalance) | |
| 680 return true; | |
| 681 } | |
| 682 break; | 678 break; |
| 683 case CSSPropertyAlignContent: | 679 case CSSPropertyAlignContent: |
| 684 // FIXME: Per CSS alignment, this property should accept an optional <ov
erflow-position>. We should share this parsing code with 'justify-self'. | 680 // FIXME: Per CSS alignment, this property should accept an optional <ov
erflow-position>. We should share this parsing code with 'justify-self'. |
| 685 if (valueID == CSSValueFlexStart || valueID == CSSValueFlexEnd || value
ID == CSSValueCenter || valueID == CSSValueSpaceBetween || valueID == CSSValueSp
aceAround || valueID == CSSValueStretch) | 681 if (valueID == CSSValueFlexStart || valueID == CSSValueFlexEnd || value
ID == CSSValueCenter || valueID == CSSValueSpaceBetween || valueID == CSSValueSp
aceAround || valueID == CSSValueStretch) |
| 686 return true; | 682 return true; |
| 687 break; | 683 break; |
| 688 case CSSPropertyAlignItems: | 684 case CSSPropertyAlignItems: |
| 689 // FIXME: Per CSS alignment, this property should accept the same argume
nts as 'justify-self' so we should share its parsing code. | 685 // FIXME: Per CSS alignment, this property should accept the same argume
nts as 'justify-self' so we should share its parsing code. |
| 690 if (valueID == CSSValueFlexStart || valueID == CSSValueFlexEnd || valueI
D == CSSValueCenter || valueID == CSSValueBaseline || valueID == CSSValueStretch
) | 686 if (valueID == CSSValueFlexStart || valueID == CSSValueFlexEnd || valueI
D == CSSValueCenter || valueID == CSSValueBaseline || valueID == CSSValueStretch
) |
| 691 return true; | 687 return true; |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 745 return true; | 741 return true; |
| 746 break; | 742 break; |
| 747 case CSSPropertyInternalMarqueeStyle: | 743 case CSSPropertyInternalMarqueeStyle: |
| 748 if (valueID == CSSValueNone || valueID == CSSValueSlide || valueID == CS
SValueScroll || valueID == CSSValueAlternate) | 744 if (valueID == CSSValueNone || valueID == CSSValueSlide || valueID == CS
SValueScroll || valueID == CSSValueAlternate) |
| 749 return true; | 745 return true; |
| 750 break; | 746 break; |
| 751 case CSSPropertyWebkitPrintColorAdjust: | 747 case CSSPropertyWebkitPrintColorAdjust: |
| 752 if (valueID == CSSValueExact || valueID == CSSValueEconomy) | 748 if (valueID == CSSValueExact || valueID == CSSValueEconomy) |
| 753 return true; | 749 return true; |
| 754 break; | 750 break; |
| 755 case CSSPropertyWebkitRegionBreakAfter: | |
| 756 case CSSPropertyWebkitRegionBreakBefore: | |
| 757 if (RuntimeEnabledFeatures::cssRegionsEnabled() && (valueID == CSSValueA
uto || valueID == CSSValueAlways || valueID == CSSValueAvoid || valueID == CSSVa
lueLeft || valueID == CSSValueRight)) | |
| 758 return true; | |
| 759 break; | |
| 760 case CSSPropertyWebkitRegionBreakInside: | |
| 761 if (RuntimeEnabledFeatures::cssRegionsEnabled() && (valueID == CSSValueA
uto || valueID == CSSValueAvoid)) | |
| 762 return true; | |
| 763 break; | |
| 764 case CSSPropertyWebkitRegionFragment: | |
| 765 if (RuntimeEnabledFeatures::cssRegionsEnabled() && (valueID == CSSValueA
uto || valueID == CSSValueBreak)) | |
| 766 return true; | |
| 767 break; | |
| 768 case CSSPropertyWebkitRtlOrdering: | 751 case CSSPropertyWebkitRtlOrdering: |
| 769 if (valueID == CSSValueLogical || valueID == CSSValueVisual) | 752 if (valueID == CSSValueLogical || valueID == CSSValueVisual) |
| 770 return true; | 753 return true; |
| 771 break; | 754 break; |
| 772 | 755 |
| 773 case CSSPropertyWebkitRubyPosition: | 756 case CSSPropertyWebkitRubyPosition: |
| 774 if (valueID == CSSValueBefore || valueID == CSSValueAfter) | 757 if (valueID == CSSValueBefore || valueID == CSSValueAfter) |
| 775 return true; | 758 return true; |
| 776 break; | 759 break; |
| 777 | 760 |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 911 case CSSPropertyWebkitLineAlign: | 894 case CSSPropertyWebkitLineAlign: |
| 912 case CSSPropertyWebkitLineBreak: | 895 case CSSPropertyWebkitLineBreak: |
| 913 case CSSPropertyWebkitLineSnap: | 896 case CSSPropertyWebkitLineSnap: |
| 914 case CSSPropertyWebkitMarginAfterCollapse: | 897 case CSSPropertyWebkitMarginAfterCollapse: |
| 915 case CSSPropertyWebkitMarginBeforeCollapse: | 898 case CSSPropertyWebkitMarginBeforeCollapse: |
| 916 case CSSPropertyWebkitMarginBottomCollapse: | 899 case CSSPropertyWebkitMarginBottomCollapse: |
| 917 case CSSPropertyWebkitMarginTopCollapse: | 900 case CSSPropertyWebkitMarginTopCollapse: |
| 918 case CSSPropertyInternalMarqueeDirection: | 901 case CSSPropertyInternalMarqueeDirection: |
| 919 case CSSPropertyInternalMarqueeStyle: | 902 case CSSPropertyInternalMarqueeStyle: |
| 920 case CSSPropertyWebkitPrintColorAdjust: | 903 case CSSPropertyWebkitPrintColorAdjust: |
| 921 case CSSPropertyWebkitRegionBreakAfter: | |
| 922 case CSSPropertyWebkitRegionBreakBefore: | |
| 923 case CSSPropertyWebkitRegionBreakInside: | |
| 924 case CSSPropertyWebkitRegionFragment: | |
| 925 case CSSPropertyWebkitRtlOrdering: | 904 case CSSPropertyWebkitRtlOrdering: |
| 926 case CSSPropertyWebkitRubyPosition: | 905 case CSSPropertyWebkitRubyPosition: |
| 927 case CSSPropertyWebkitTextCombine: | 906 case CSSPropertyWebkitTextCombine: |
| 928 case CSSPropertyWebkitTextEmphasisPosition: | 907 case CSSPropertyWebkitTextEmphasisPosition: |
| 929 case CSSPropertyWebkitTextSecurity: | 908 case CSSPropertyWebkitTextSecurity: |
| 930 case CSSPropertyWebkitTransformStyle: | 909 case CSSPropertyWebkitTransformStyle: |
| 931 case CSSPropertyWebkitUserDrag: | 910 case CSSPropertyWebkitUserDrag: |
| 932 case CSSPropertyWebkitUserModify: | 911 case CSSPropertyWebkitUserModify: |
| 933 case CSSPropertyWebkitUserSelect: | 912 case CSSPropertyWebkitUserSelect: |
| 934 case CSSPropertyWebkitWrapFlow: | 913 case CSSPropertyWebkitWrapFlow: |
| (...skipping 1394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2329 validPrimitive = true; | 2308 validPrimitive = true; |
| 2330 else | 2309 else |
| 2331 validPrimitive = validUnit(value, FInteger | FNonNeg); | 2310 validPrimitive = validUnit(value, FInteger | FNonNeg); |
| 2332 break; | 2311 break; |
| 2333 case CSSPropertyInternalMarqueeSpeed: | 2312 case CSSPropertyInternalMarqueeSpeed: |
| 2334 if (id == CSSValueNormal || id == CSSValueSlow || id == CSSValueFast) | 2313 if (id == CSSValueNormal || id == CSSValueSlow || id == CSSValueFast) |
| 2335 validPrimitive = true; | 2314 validPrimitive = true; |
| 2336 else | 2315 else |
| 2337 validPrimitive = validUnit(value, FTime | FInteger | FNonNeg); | 2316 validPrimitive = validUnit(value, FTime | FInteger | FNonNeg); |
| 2338 break; | 2317 break; |
| 2339 case CSSPropertyWebkitFlowInto: | |
| 2340 if (!RuntimeEnabledFeatures::cssRegionsEnabled()) | |
| 2341 return false; | |
| 2342 return parseFlowThread(propId, important); | |
| 2343 case CSSPropertyWebkitFlowFrom: | |
| 2344 if (!RuntimeEnabledFeatures::cssRegionsEnabled()) | |
| 2345 return false; | |
| 2346 return parseRegionThread(propId, important); | |
| 2347 case CSSPropertyWebkitTransform: | 2318 case CSSPropertyWebkitTransform: |
| 2348 if (id == CSSValueNone) | 2319 if (id == CSSValueNone) |
| 2349 validPrimitive = true; | 2320 validPrimitive = true; |
| 2350 else { | 2321 else { |
| 2351 RefPtr<CSSValue> transformValue = parseTransform(); | 2322 RefPtr<CSSValue> transformValue = parseTransform(); |
| 2352 if (transformValue) { | 2323 if (transformValue) { |
| 2353 addProperty(propId, transformValue.release(), important); | 2324 addProperty(propId, transformValue.release(), important); |
| 2354 return true; | 2325 return true; |
| 2355 } | 2326 } |
| 2356 return false; | 2327 return false; |
| (...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2826 case CSSPropertyWebkitLineAlign: | 2797 case CSSPropertyWebkitLineAlign: |
| 2827 case CSSPropertyWebkitLineBreak: | 2798 case CSSPropertyWebkitLineBreak: |
| 2828 case CSSPropertyWebkitLineSnap: | 2799 case CSSPropertyWebkitLineSnap: |
| 2829 case CSSPropertyWebkitMarginAfterCollapse: | 2800 case CSSPropertyWebkitMarginAfterCollapse: |
| 2830 case CSSPropertyWebkitMarginBeforeCollapse: | 2801 case CSSPropertyWebkitMarginBeforeCollapse: |
| 2831 case CSSPropertyWebkitMarginBottomCollapse: | 2802 case CSSPropertyWebkitMarginBottomCollapse: |
| 2832 case CSSPropertyWebkitMarginTopCollapse: | 2803 case CSSPropertyWebkitMarginTopCollapse: |
| 2833 case CSSPropertyInternalMarqueeDirection: | 2804 case CSSPropertyInternalMarqueeDirection: |
| 2834 case CSSPropertyInternalMarqueeStyle: | 2805 case CSSPropertyInternalMarqueeStyle: |
| 2835 case CSSPropertyWebkitPrintColorAdjust: | 2806 case CSSPropertyWebkitPrintColorAdjust: |
| 2836 case CSSPropertyWebkitRegionBreakAfter: | |
| 2837 case CSSPropertyWebkitRegionBreakBefore: | |
| 2838 case CSSPropertyWebkitRegionBreakInside: | |
| 2839 case CSSPropertyWebkitRegionFragment: | |
| 2840 case CSSPropertyWebkitRtlOrdering: | 2807 case CSSPropertyWebkitRtlOrdering: |
| 2841 case CSSPropertyWebkitRubyPosition: | 2808 case CSSPropertyWebkitRubyPosition: |
| 2842 case CSSPropertyWebkitTextCombine: | 2809 case CSSPropertyWebkitTextCombine: |
| 2843 case CSSPropertyWebkitTextEmphasisPosition: | 2810 case CSSPropertyWebkitTextEmphasisPosition: |
| 2844 case CSSPropertyWebkitTextSecurity: | 2811 case CSSPropertyWebkitTextSecurity: |
| 2845 case CSSPropertyWebkitTransformStyle: | 2812 case CSSPropertyWebkitTransformStyle: |
| 2846 case CSSPropertyWebkitUserDrag: | 2813 case CSSPropertyWebkitUserDrag: |
| 2847 case CSSPropertyWebkitUserModify: | 2814 case CSSPropertyWebkitUserModify: |
| 2848 case CSSPropertyWebkitUserSelect: | 2815 case CSSPropertyWebkitUserSelect: |
| 2849 case CSSPropertyWebkitWrapFlow: | 2816 case CSSPropertyWebkitWrapFlow: |
| (...skipping 5873 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8723 if (!filterValue) | 8690 if (!filterValue) |
| 8724 return 0; | 8691 return 0; |
| 8725 | 8692 |
| 8726 list->append(filterValue); | 8693 list->append(filterValue); |
| 8727 } | 8694 } |
| 8728 } | 8695 } |
| 8729 | 8696 |
| 8730 return list.release(); | 8697 return list.release(); |
| 8731 } | 8698 } |
| 8732 | 8699 |
| 8733 static bool validFlowName(const String& flowName) | |
| 8734 { | |
| 8735 return !(equalIgnoringCase(flowName, "auto") | |
| 8736 || equalIgnoringCase(flowName, "default") | |
| 8737 || equalIgnoringCase(flowName, "inherit") | |
| 8738 || equalIgnoringCase(flowName, "initial") | |
| 8739 || equalIgnoringCase(flowName, "none")); | |
| 8740 } | |
| 8741 | |
| 8742 // none | <ident> | |
| 8743 bool BisonCSSParser::parseFlowThread(CSSPropertyID propId, bool important) | |
| 8744 { | |
| 8745 ASSERT(propId == CSSPropertyWebkitFlowInto); | |
| 8746 ASSERT(RuntimeEnabledFeatures::cssRegionsEnabled()); | |
| 8747 | |
| 8748 if (m_valueList->size() != 1) | |
| 8749 return false; | |
| 8750 | |
| 8751 CSSParserValue* value = m_valueList->current(); | |
| 8752 if (!value) | |
| 8753 return false; | |
| 8754 | |
| 8755 if (value->unit != CSSPrimitiveValue::CSS_IDENT) | |
| 8756 return false; | |
| 8757 | |
| 8758 if (value->id == CSSValueNone) { | |
| 8759 addProperty(propId, cssValuePool().createIdentifierValue(value->id), imp
ortant); | |
| 8760 return true; | |
| 8761 } | |
| 8762 | |
| 8763 String inputProperty = String(value->string); | |
| 8764 if (!inputProperty.isEmpty()) { | |
| 8765 if (!validFlowName(inputProperty)) | |
| 8766 return false; | |
| 8767 addProperty(propId, cssValuePool().createValue(inputProperty, CSSPrimiti
veValue::CSS_STRING), important); | |
| 8768 } else | |
| 8769 addProperty(propId, cssValuePool().createIdentifierValue(CSSValueNone),
important); | |
| 8770 | |
| 8771 return true; | |
| 8772 } | |
| 8773 | |
| 8774 // -webkit-flow-from: none | <ident> | |
| 8775 bool BisonCSSParser::parseRegionThread(CSSPropertyID propId, bool important) | |
| 8776 { | |
| 8777 ASSERT(propId == CSSPropertyWebkitFlowFrom); | |
| 8778 ASSERT(RuntimeEnabledFeatures::cssRegionsEnabled()); | |
| 8779 | |
| 8780 if (m_valueList->size() != 1) | |
| 8781 return false; | |
| 8782 | |
| 8783 CSSParserValue* value = m_valueList->current(); | |
| 8784 if (!value) | |
| 8785 return false; | |
| 8786 | |
| 8787 if (value->unit != CSSPrimitiveValue::CSS_IDENT) | |
| 8788 return false; | |
| 8789 | |
| 8790 if (value->id == CSSValueNone) | |
| 8791 addProperty(propId, cssValuePool().createIdentifierValue(value->id), imp
ortant); | |
| 8792 else { | |
| 8793 String inputProperty = String(value->string); | |
| 8794 if (!inputProperty.isEmpty()) { | |
| 8795 if (!validFlowName(inputProperty)) | |
| 8796 return false; | |
| 8797 addProperty(propId, cssValuePool().createValue(inputProperty, CSSPri
mitiveValue::CSS_STRING), important); | |
| 8798 } else | |
| 8799 addProperty(propId, cssValuePool().createIdentifierValue(CSSValueNon
e), important); | |
| 8800 } | |
| 8801 | |
| 8802 return true; | |
| 8803 } | |
| 8804 | |
| 8805 bool BisonCSSParser::parseTransformOrigin(CSSPropertyID propId, CSSPropertyID& p
ropId1, CSSPropertyID& propId2, CSSPropertyID& propId3, RefPtr<CSSValue>& value,
RefPtr<CSSValue>& value2, RefPtr<CSSValue>& value3) | 8700 bool BisonCSSParser::parseTransformOrigin(CSSPropertyID propId, CSSPropertyID& p
ropId1, CSSPropertyID& propId2, CSSPropertyID& propId3, RefPtr<CSSValue>& value,
RefPtr<CSSValue>& value2, RefPtr<CSSValue>& value3) |
| 8806 { | 8701 { |
| 8807 propId1 = propId; | 8702 propId1 = propId; |
| 8808 propId2 = propId; | 8703 propId2 = propId; |
| 8809 propId3 = propId; | 8704 propId3 = propId; |
| 8810 if (propId == CSSPropertyWebkitTransformOrigin) { | 8705 if (propId == CSSPropertyWebkitTransformOrigin) { |
| 8811 propId1 = CSSPropertyWebkitTransformOriginX; | 8706 propId1 = CSSPropertyWebkitTransformOriginX; |
| 8812 propId2 = CSSPropertyWebkitTransformOriginY; | 8707 propId2 = CSSPropertyWebkitTransformOriginY; |
| 8813 propId3 = CSSPropertyWebkitTransformOriginZ; | 8708 propId3 = CSSPropertyWebkitTransformOriginZ; |
| 8814 } | 8709 } |
| (...skipping 1009 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9824 selectorVector.append(pageSelector); | 9719 selectorVector.append(pageSelector); |
| 9825 rule->parserAdoptSelectorVector(selectorVector); | 9720 rule->parserAdoptSelectorVector(selectorVector); |
| 9826 rule->setProperties(createStylePropertySet()); | 9721 rule->setProperties(createStylePropertySet()); |
| 9827 pageRule = rule.get(); | 9722 pageRule = rule.get(); |
| 9828 m_parsedRules.append(rule.release()); | 9723 m_parsedRules.append(rule.release()); |
| 9829 } | 9724 } |
| 9830 clearProperties(); | 9725 clearProperties(); |
| 9831 return pageRule; | 9726 return pageRule; |
| 9832 } | 9727 } |
| 9833 | 9728 |
| 9834 void BisonCSSParser::setReusableRegionSelectorVector(Vector<OwnPtr<CSSParserSele
ctor> >* selectors) | |
| 9835 { | |
| 9836 if (selectors) | |
| 9837 m_reusableRegionSelectorVector.swap(*selectors); | |
| 9838 } | |
| 9839 | |
| 9840 StyleRuleBase* BisonCSSParser::createRegionRule(Vector<OwnPtr<CSSParserSelector>
>* regionSelector, RuleList* rules) | |
| 9841 { | |
| 9842 if (m_useCounter) | |
| 9843 m_useCounter->count(UseCounter::CSSWebkitRegionAtRule); | |
| 9844 | |
| 9845 if (!RuntimeEnabledFeatures::cssRegionsEnabled() || !regionSelector || !rule
s) | |
| 9846 return 0; | |
| 9847 | |
| 9848 m_allowImportRules = m_allowNamespaceDeclarations = false; | |
| 9849 | |
| 9850 RefPtr<StyleRuleRegion> regionRule = StyleRuleRegion::create(regionSelector,
*rules); | |
| 9851 | |
| 9852 StyleRuleRegion* result = regionRule.get(); | |
| 9853 m_parsedRules.append(regionRule.release()); | |
| 9854 if (m_observer) | |
| 9855 m_observer->startEndUnknownRule(); | |
| 9856 | |
| 9857 return result; | |
| 9858 } | |
| 9859 | |
| 9860 StyleRuleBase* BisonCSSParser::createMarginAtRule(CSSSelector::MarginBoxType /*
marginBox */) | 9729 StyleRuleBase* BisonCSSParser::createMarginAtRule(CSSSelector::MarginBoxType /*
marginBox */) |
| 9861 { | 9730 { |
| 9862 // FIXME: Implement margin at-rule here, using: | 9731 // FIXME: Implement margin at-rule here, using: |
| 9863 // - marginBox: margin box | 9732 // - marginBox: margin box |
| 9864 // - m_parsedProperties: properties at [m_numParsedPropertiesBeforeMa
rginBox, m_parsedProperties.size()] are for this at-rule. | 9733 // - m_parsedProperties: properties at [m_numParsedPropertiesBeforeMa
rginBox, m_parsedProperties.size()] are for this at-rule. |
| 9865 // Don't forget to also update the action for page symbol in CSSGrammar.y su
ch that margin at-rule data is cleared if page_selector is invalid. | 9734 // Don't forget to also update the action for page symbol in CSSGrammar.y su
ch that margin at-rule data is cleared if page_selector is invalid. |
| 9866 | 9735 |
| 9867 endDeclarationsForMarginBox(); | 9736 endDeclarationsForMarginBox(); |
| 9868 return 0; // until this method is implemented. | 9737 return 0; // until this method is implemented. |
| 9869 } | 9738 } |
| (...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10169 { | 10038 { |
| 10170 // The tokenizer checks for the construct of an+b. | 10039 // The tokenizer checks for the construct of an+b. |
| 10171 // However, since the {ident} rule precedes the {nth} rule, some of those | 10040 // However, since the {ident} rule precedes the {nth} rule, some of those |
| 10172 // tokens are identified as string literal. Furthermore we need to accept | 10041 // tokens are identified as string literal. Furthermore we need to accept |
| 10173 // "odd" and "even" which does not match to an+b. | 10042 // "odd" and "even" which does not match to an+b. |
| 10174 return equalIgnoringCase(token, "odd") || equalIgnoringCase(token, "even") | 10043 return equalIgnoringCase(token, "odd") || equalIgnoringCase(token, "even") |
| 10175 || equalIgnoringCase(token, "n") || equalIgnoringCase(token, "-n"); | 10044 || equalIgnoringCase(token, "n") || equalIgnoringCase(token, "-n"); |
| 10176 } | 10045 } |
| 10177 | 10046 |
| 10178 } | 10047 } |
| OLD | NEW |