Example #1
0
        public async Task <string> GetVariableAsync(string name, CancellationToken cancellationToken)
        {
            var variable = VariableName.Parse(name);

            string variableValue;

            if (variable.Source == VariableSource.Context)
            {
                variableValue = await GetContextVariableAsync(variable.Name, cancellationToken);
            }
            else
            {
                if (!_variableProviderDictionary.TryGetValue(variable.Source, out var provider))
                {
                    throw new ArgumentException($"There's no provider for variable source '{variable.Source}'");
                }

                variableValue = await provider.GetVariableAsync(variable.Name, this, cancellationToken);
            }

            if (string.IsNullOrWhiteSpace(variableValue) ||
                string.IsNullOrWhiteSpace(variable.Property))
            {
                return(variableValue);
            }

            return(GetJsonProperty(variableValue, variable.Property));
        }
        public override bool Parse(IItemFactory itemFactory, ITextProvider text, ITokenStream stream)
        {
            var name = new VariableName(SassClassifierType.VariableReference);
            if (name.Parse(itemFactory, text, stream))
            {
                Name = name;
                Children.Add(name);
            }

            return Children.Count > 0;
        }
        public override bool Parse(IItemFactory itemFactory, ITextProvider text, ITokenStream stream)
        {
            var name = new VariableName(SassClassifierType.VariableDefinition);
            if (name.Parse(itemFactory, text, stream))
            {
                Name = name;
                Children.Add(name);
            }

            if (stream.Current.Type == TokenType.Colon)
                Colon = Children.AddCurrentAndAdvance(stream);

            while (!IsValueTerminator(Mode, stream))
            {
                ParseItem item;
                if (itemFactory.TryCreateParsedOrDefault(this, text, stream, out item))
                {
                    Values.Add(item);
                    Children.Add(item);
                }
            }

            if (stream.Current.Type == TokenType.Bang)
            {
                var modifier = new DefaultModifier();
                if (modifier.Parse(itemFactory, text, stream))
                {
                    Modifier = modifier;
                    Children.Add(modifier);
                }
                else
                {
                    Children.AddCurrentAndAdvance(stream);
                }
            }

            if (stream.Current.Type == TokenType.Semicolon)
                Semicolon = Children.AddCurrentAndAdvance(stream);

            return Children.Count > 0;
        }