|
|
|
|
@ -287,10 +287,7 @@ namespace ICSharpCode.AvalonEdit.XmlParser
@@ -287,10 +287,7 @@ namespace ICSharpCode.AvalonEdit.XmlParser
|
|
|
|
|
/// <inheritdoc/>
|
|
|
|
|
public override IEnumerable<RawObject> GetSelfAndAllChildren() |
|
|
|
|
{ |
|
|
|
|
return Enumerable.Union( |
|
|
|
|
new RawContainer[] { this }, |
|
|
|
|
this.Children.SelectMany(x => x.GetSelfAndAllChildren()) |
|
|
|
|
); |
|
|
|
|
return new RawObject[] { this }.Flatten(i => i is RawContainer ? ((RawContainer)i).Children : null); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
@ -979,4 +976,37 @@ namespace ICSharpCode.AvalonEdit.XmlParser
@@ -979,4 +976,37 @@ namespace ICSharpCode.AvalonEdit.XmlParser
|
|
|
|
|
return string.Format("[{0} Text.Length={1}]", base.ToString(), this.EscapedValue.Length); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static class ExtensionMethods |
|
|
|
|
{ |
|
|
|
|
// Copied from ICSharpCode.SharpDevelop.Dom.ExtensionMethods
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Converts a recursive data structure into a flat list.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="input">The root elements of the recursive data structure.</param>
|
|
|
|
|
/// <param name="recursion">The function that gets the children of an element.</param>
|
|
|
|
|
/// <returns>Iterator that enumerates the tree structure in preorder.</returns>
|
|
|
|
|
public static IEnumerable<T> Flatten<T>(this IEnumerable<T> input, Func<T, IEnumerable<T>> recursion) |
|
|
|
|
{ |
|
|
|
|
Stack<IEnumerator<T>> stack = new Stack<IEnumerator<T>>(); |
|
|
|
|
try { |
|
|
|
|
stack.Push(input.GetEnumerator()); |
|
|
|
|
while (stack.Count > 0) { |
|
|
|
|
while (stack.Peek().MoveNext()) { |
|
|
|
|
T element = stack.Peek().Current; |
|
|
|
|
yield return element; |
|
|
|
|
IEnumerable<T> children = recursion(element); |
|
|
|
|
if (children != null) { |
|
|
|
|
stack.Push(children.GetEnumerator()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
stack.Pop().Dispose(); |
|
|
|
|
} |
|
|
|
|
} finally { |
|
|
|
|
while (stack.Count > 0) { |
|
|
|
|
stack.Pop().Dispose(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|