internal MarkupRegions GetMarkupInfo() { var markupinfo = new MarkupRegions(); int start_pos = 0; var region_stack = new Stack <TextRegion>(); foreach (var walkevent in this.Walk()) { if (walkevent.HasEnteredNode) { if (walkevent.Node is TextElement) { var element = (TextElement)walkevent.Node; var region = new TextRegion(start_pos, element); region_stack.Push(region); markupinfo.FormatRegions.Add(region); } else if (walkevent.Node is Literal) { var text_node = (Literal)walkevent.Node; if (!string.IsNullOrEmpty(text_node.Text)) { // Add text length to parent var nparent = region_stack.Peek(); nparent.Length += text_node.Text.Length; // update the start position with the length start_pos += text_node.Text.Length; } } else if (walkevent.Node is Field) { var f = (Field)walkevent.Node; if (!string.IsNullOrEmpty(f.PlaceholderText)) { var field_region = new TextRegion(start_pos, f); markupinfo.FieldRegions.Add(field_region); // Add text length to parent var nparent = region_stack.Peek(); nparent.Length += f.PlaceholderText.Length; // update the start position with the length start_pos += f.PlaceholderText.Length; } } else { string msg = "Unhandled node"; throw new AutomationException(msg); } } else if (walkevent.HasExitedNode) { if (walkevent.Node is TextElement) { var this_region = region_stack.Pop(); if (region_stack.Count > 0) { var parent_el = region_stack.Peek(); parent_el.Length += this_region.Length; } } } else { // Unhandled Operation string msg = "internal error"; throw new System.InvalidOperationException(msg); } } if (region_stack.Count > 0) { throw new System.InvalidOperationException("Regions stack not empty"); } return(markupinfo); }
internal MarkupRegions GetMarkupInfo() { var markupinfo = new MarkupRegions(); int start_pos = 0; var region_stack = new Stack<TextRegion>(); foreach (var walkevent in this.Walk()) { if (walkevent.HasEnteredNode) { if (walkevent.Node is TextElement) { var element = (TextElement) walkevent.Node; var region = new TextRegion(start_pos, element); region_stack.Push(region); markupinfo.FormatRegions.Add(region); } else if (walkevent.Node is Literal) { var text_node = (Literal) walkevent.Node; if (!string.IsNullOrEmpty(text_node.Text)) { // Add text length to parent var nparent = region_stack.Peek(); nparent.Length += text_node.Text.Length; // update the start position with the length start_pos += text_node.Text.Length; } } else if (walkevent.Node is Field) { var f = (Field) walkevent.Node; if (!string.IsNullOrEmpty(f.PlaceholderText)) { var field_region = new TextRegion(start_pos,f); markupinfo.FieldRegions.Add(field_region); // Add text length to parent var nparent = region_stack.Peek(); nparent.Length += f.PlaceholderText.Length; // update the start position with the length start_pos += f.PlaceholderText.Length; } } else { string msg = "Unhandled node"; throw new AutomationException(msg); } } else if (walkevent.HasExitedNode) { if (walkevent.Node is TextElement) { var this_region = region_stack.Pop(); if (region_stack.Count > 0) { var parent_el = region_stack.Peek(); parent_el.Length += this_region.Length; } } } else { // Unhandled Operation string msg = "internal error"; throw new System.InvalidOperationException(msg); } } if (region_stack.Count > 0) { throw new System.InvalidOperationException("Regions stack not empty"); } return markupinfo; }