public void AddAction(AnsiCsiAction ansiCsiAction) { if (ansiCsiAction == null) { throw new ArgumentNullException("ansiCsiAction"); } AnsiCsiParserNode node = Root; foreach (Char ch in ansiCsiAction.AnsiCsiSequence) { AnsiCsiParserNode childNode = node.Find(ch); if (childNode == null) { node.AddChild(childNode = new AnsiCsiParserNode(ch)); } node = childNode; if (node.IsLeaf) { throw new InvalidOperationException("Unbalanced sequence lengthes"); } } node.Action = ansiCsiAction; }
public void AddChild(AnsiCsiParserNode node) { if (node == null) { throw new ArgumentNullException("node"); } Nodes.Add(node.Char, node); }
public void ParseChar(Char value) { if (IsSequenceDetected) { Current = Current.Find(value); } else { Current = value != AnsiTextWriter.Esc ? null // Just to fasten preprocessing non-ansi sequences : Root.Find(value); } }
public void Reset() { Current = null; }
public AnsiCsiParser() { Root = new AnsiCsiParserNode(default(char)); }