Beispiel #1
0
 public override void SetVariable(VariableNode node)
 {
     _variables[node.Name] = node;
 }
Beispiel #2
0
 public ForNode(VariableNode variable, Expression from, Expression through)
 {
     Variable = variable;
     From = @from;
     Through = through;
 }
Beispiel #3
0
        public override void SetVariable(VariableNode node)
        {
            if (node.Default)
            {
                if (HasVariable(node.Name))
                    return;
            }

            _variables[node.Name] = node;
        }
Beispiel #4
0
        private void ReadScopeContent(ScopeNode currentScope)
        {
            var buffer = new StringBuilder();
            var interpolations = new List<ValueList>();

            //States
            var inCommentStart = false;
            var paranthesesLevel = 0;
            var inDoubleQuotes = false;

            while (!EndOfStream)
            {
                var c = (char) Read();

                if (inDoubleQuotes)
                {
                    buffer.Append(c);

                    if (c == '"')
                    {
                        inDoubleQuotes = false;
                    }
                }
                else
                {
                    switch (c)
                    {
                        case ' ':
                            //Ignore starting white space
                            if (buffer.Length == 0)
                                break;
                            goto default;
                        case '@':
                            if (buffer.Length != 0)
                                throw new Exception("Must be first character");

                            ReadAt(currentScope);

                            break;
                        case '$':
                            var name = ReadUntil(':');
                            var vn = new VariableNode(name);
                            vn.Expression = new Expression(ReadValueList(';'));
                            Expect(';');
                            currentScope.Add(vn);
                            break;
                        case '/':
                            if (inCommentStart)
                            {
                                ReadInlineComment();

                                inCommentStart = false;

                                //Remove the first slash from the buffer
                                buffer.Length--;
                            }
                            else
                            {
                                buffer.Append(c);
                                inCommentStart = true;
                            }
                            break;
                        case '*':
                            if (inCommentStart)
                            {
                                var node = ReadComment();
                                currentScope.Add(node);
                                inCommentStart = false;

                                //Remove the first slash from the buffer
                                buffer.Length--;
                                break;
                            }
                            goto default;
                        case ';':
                        {
                            throw new ScssReaderException("Unexpected ;", File.Path, _lineNumber);
                        }
                        case ':':
                            var pc = (char) Peek();
                            if (char.IsLetter(pc)) //hover etc.
                            {
                                buffer.Append(c);
                            }
                            else if (pc == ':')
                            {
                                buffer.Append(c);
                                buffer.Append(pc);
                                Read();
                            }
                            else
                            {
                                var pn = new PropertyNode();
                                pn.Name = new ScssString(buffer.ToString().Trim(), interpolations);
                                pn.Expression = new Expression(ReadValueList(';', '{'));
                                buffer.Clear();

                                var pc2 = (char) Read();
                                if (pc2 == ';')
                                {
                                    currentScope.Add(pn);
                                }
                                else if (pc2 == '{')
                                {
                                    var result = new NamespaceNode(pn);
                                    ReadScopeContent(result);
                                    currentScope.Add(result);
                                }
                                else
                                {
                                    throw new ScssReaderException("Expected { or ;", File.Path, _lineNumber);
                                }
                            }
                            break;
                        case '"':
                            inDoubleQuotes = true;
                            goto default;
                        case '(':
                            paranthesesLevel++;
                            goto default;
                        case ')':
                            paranthesesLevel--;
                            goto default;
                        case '{':
                        {
                            var node = new SelectorNode();
                            node.Selector = new ScssString(buffer.ToString().Trim(), interpolations);
                            ReadScopeContent(node);
                            currentScope.Add(node);
                            buffer.Clear();
                        }
                            break;
                        case '}':
                            return;
                        case '#':
                            if (Peek() == '{')
                            {
                                inCommentStart = false;
                                var value = ReadInterpolation();
                                buffer.Append("{" + interpolations.Count + "}");
                                interpolations.Add(value);
                                break;
                            }
                            else
                            {
                                goto default;
                            }
                        case '\n':
                            inCommentStart = false;
                            break;
                        default:
                            inCommentStart = false;
                            buffer.Append(c);
                            break;
                    }
                }
            }
        }
Beispiel #5
0
        private void ReadMixin(ScopeNode currentScope)
        {
            var name = ReadName();

            VariableNode[] args = new VariableNode[0];

            SkipWhitespace();

            if (Peek() == '(')
                args = ReadArgumentDefinition().ToArray();

            var node = new MixinNode(name, args);
            Expect('{');
            ReadScopeContent(node);
            currentScope.Add(node);
        }
Beispiel #6
0
        private IEnumerable<VariableNode> ReadArgumentDefinition()
        {
            var result = new List<VariableNode>();

            Expect('(');

            while (!EndOfStream)
            {
                var c = (char) Read();

                switch (c)
                {
                    case '$':
                        var name = ReadName();

                        var node = new VariableNode(name);
                        result.Add(node);

                        SkipWhitespace();
                        c = (char) Peek();
                        if (c == ':')
                        {
                            Read();
                            node.Expression = new Expression(ReadValueList(',', ')'));
                        }

                        break;
                    case ',':
                    case ' ':
                        break;
                    case ')':
                        return result;
                }

                //var expr = ReadValue();
            }

            throw new Exception("Could not find argument ending");
        }
Beispiel #7
0
 public FunctionNode(string name, VariableNode[] args)
 {
     Name = name;
     _args = args;
 }
Beispiel #8
0
 public virtual void SetVariable(VariableNode node)
 {
     if (Parent.HasVariable(node.Name))
         Parent.SetVariable(node);
     else
     {
         _variables[node.Name] = node;
     }
 }