public override void SetVariable(VariableNode node) { _variables[node.Name] = node; }
public ForNode(VariableNode variable, Expression from, Expression through) { Variable = variable; From = @from; Through = through; }
public override void SetVariable(VariableNode node) { if (node.Default) { if (HasVariable(node.Name)) return; } _variables[node.Name] = node; }
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; } } } }
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); }
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"); }
public FunctionNode(string name, VariableNode[] args) { Name = name; _args = args; }
public virtual void SetVariable(VariableNode node) { if (Parent.HasVariable(node.Name)) Parent.SetVariable(node); else { _variables[node.Name] = node; } }