public override Node Clone(Node newParent) { var newBlock = new Block(newParent); foreach (var child in Children) { newBlock.Children.Add(child.Clone(newBlock)); } return newBlock; }
internal static bool TryParse(Node parent, Queue<Word> remainingWords, out Block block) { if (remainingWords.Peek().Text != "{") { block = null; return false; } remainingWords.Dequeue(); block = new Block(parent); while (remainingWords.Peek().Text != "}") { IncludeDirective includeDirective; if (IncludeDirective.TryParse(block, remainingWords, out includeDirective)) { block.Children.Add(includeDirective); continue; } ExtendDirective excludeDirective; if (ExtendDirective.TryParse(block, remainingWords, out excludeDirective)) { block.Children.Add(excludeDirective); continue; } PropertyAssignment property; if (PropertyAssignment.TryParse(block, remainingWords, out property)) { block.Children.Add(property); continue; } Selector selector; if (Selector.TryParse(block, remainingWords, out selector)) { block.Children.Add(selector); continue; } } remainingWords.Dequeue(); return true; }