void remove(TextAmendment amend) { AmendedText toAmend = Text; while ((toAmend.StartIndex + toAmend.Length) < amend.Start && toAmend != null) { toAmend = toAmend.Next; } if (toAmend == null) { return; } var next = Builder.GetNextNumber(amend); var remover = new AmendedText() { LHS = lhsRemove(next), RHS = "", InnerText = "" }; var wordsAfter = toAmend.Words.Skip(amend.Start - toAmend.StartIndex); var wordsRemoved = wordsAfter.Take(amend.Length); var wordsAfterStr = string.Join(' ', wordsAfter); var wordsRemStr = string.Join(' ', wordsRemoved); var text = toAmend.InnerText; text = text.Substring(0, text.Length - wordsAfterStr.Length); var afterText = toAmend.InnerText.Substring(text.Length + wordsRemStr.Length); var after = new AmendedText() { LHS = "", RHS = toAmend.RHS, InnerText = afterText }; toAmend.RHS = ""; toAmend.InnerText = text; after.Next = toAmend.Next; toAmend.Next = remover; remover.Next = after; }
void insert(TextAmendment amend) { AmendedText toAmend = Text; while ((toAmend.StartIndex + toAmend.Length) < amend.Start && toAmend != null) { toAmend = toAmend.Next; } if (toAmend == null) { return; } var next = Builder.GetNextNumber(amend); var inserter = new AmendedText() { LHS = lhsInsertReplace(next), RHS = rhs(), InnerText = amend.New }; var wordsAfter = toAmend.Words.Skip(amend.Start - toAmend.StartIndex); var wordsBefore = toAmend.Words.Take(toAmend.Words.Count - wordsAfter.Count()); toAmend.InnerText = string.Join(' ', wordsBefore); var after = new AmendedText() { RHS = toAmend.RHS, InnerText = string.Join(' ', wordsAfter) }; toAmend.RHS = ""; after.Next = toAmend.Next; after.Previous = inserter; inserter.Next = after; inserter.Previous = toAmend; toAmend.Next = inserter; }