public override bool Parse(IItemFactory itemFactory, ITextProvider text, ITokenStream stream) { if (AtRule.IsRule(text, stream, "for")) { ParseRule(itemFactory, text, stream); var variable = new VariableName(SassClassifierType.VariableDefinition); if (variable.Parse(itemFactory, text, stream)) { Variable = variable; Children.Add(Variable); } if (IsKeyword(text, stream, "from")) { FromKeyword = Children.AddCurrentAndAdvance(stream, SassClassifierType.Keyword); while (!(IsKeyword(text, stream, "to") || IsKeyword(text, stream, "through"))) { ParseItem fromValue; if (itemFactory.TryCreateParsedOrDefault(this, text, stream, out fromValue)) { FromExpressionValues.Add(fromValue); Children.Add(fromValue); } } } bool isToKeyword = IsKeyword(text, stream, "to"); bool isThroughKeyword = !isToKeyword && IsKeyword(text, stream, "through"); if (isToKeyword || isThroughKeyword) { if (isToKeyword) { ToKeyword = Children.AddCurrentAndAdvance(stream, SassClassifierType.Keyword); } if (isThroughKeyword) { ThroughKeyword = Children.AddCurrentAndAdvance(stream, SassClassifierType.Keyword); } while (!IsRangeTerminator(stream.Current.Type)) { ParseItem rangeValue; if (itemFactory.TryCreateParsedOrDefault(this, text, stream, out rangeValue)) { RangeExpressionValues.Add(rangeValue); Children.Add(rangeValue); } } } ParseBody(itemFactory, text, stream); } return(Children.Count > 0); }
public override void Freeze() { base.Freeze(); FromExpressionValues.TrimExcess(); RangeExpressionValues.TrimExcess(); }