public TreeNode Parse(string s) { var root = new TreeNode(); var stack = new Stack<TreeNode>(); stack.Push(root); foreach (var c in s) { var current = stack.Peek(); if (current.IsEnd(c)) { stack.Pop(); } else if (IsStart(c)) { if (current.GetType() == typeof(TextTreeNode)) { stack.Pop(); current = stack.Peek(); } //create node of that type var boldTreeNode = new BoldTreeNode(); current.Add(boldTreeNode); stack.Push(boldTreeNode); } else { if (current.GetType() != typeof(TextTreeNode)) { var textNode = new TextTreeNode(); textNode.Add(c); current.Add(textNode); stack.Push(textNode); } else { var textNode = (TextTreeNode) current; textNode.Add(c); } } } return root; }
public void Translate(TextTreeNode node, StringBuilder textBuilder) { textBuilder.Append(node.Text); }