Microsoft.Html.Core.Tree.HtmlTree.ReflectTextChanges C# (CSharp) Method

ReflectTextChanges() public method

Updates positions of all elements and attributes in the tree reflecting change made to the source text buffer.
public ReflectTextChanges ( IList textChanges ) : void
textChanges IList
return void
        public void ReflectTextChanges(IList<TextChangeEventArgs> textChanges) {
            if (textChanges.Count == 1) {
                ReflectTextChange(textChanges[0].Start, textChanges[0].OldLength, textChanges[0].NewLength);
            } else if (textChanges.Count > 1) {
                // See if we can merge the edits into a single ReflectTextChange call
                TextChangeEventArgs firstChange = textChanges[0];
                TextChangeEventArgs lastChange = textChanges[textChanges.Count - 1];
                int start = firstChange.Start;
                int oldLength = (lastChange.OldStart - firstChange.OldStart) + lastChange.OldLength;
                bool allowMerge = true;
                int firstItemAtOrAfter;

                if (allowMerge) {
                    firstItemAtOrAfter = CommentCollection.GetFirstItemAfterOrAtPosition(start);
                    if ((firstItemAtOrAfter >= 0) && (CommentCollection[firstItemAtOrAfter].Start <= start + oldLength)) {
                        allowMerge = false;
                    }
                }

                if (allowMerge) {
                    ElementNode element = RootNode.ElementFromPosition(start);
                    if ((element == null) || (element.InnerRange.Start > start) || (element.InnerRange.End < (start + oldLength))) {
                        allowMerge = false;
                    } else if (element.Children.Count != 0) {
                        allowMerge = false;
                    }
                }

                if (allowMerge) {
                    int newLength = (lastChange.Start - firstChange.Start) + lastChange.NewLength;
                    ReflectTextChange(start, oldLength, newLength);
                } else {
                    foreach (TextChangeEventArgs curChange in textChanges) {
                        ReflectTextChange(curChange.Start, curChange.OldLength, curChange.NewLength);
                    }
                }
            }
        }