Acrolinx.Sdk.Sidebar.Util.Adapter.UniversalAdapter.ReplaceRanges C# (CSharp) Метод

ReplaceRanges() публичный Метод

public ReplaceRanges ( IReadOnlyList matches, DocumentModel model, System.Text.Format format ) : void
matches IReadOnlyList
model Acrolinx.Sdk.Sidebar.Util.Changetracking.DocumentModel
format System.Text.Format
Результат void
        public void ReplaceRanges(IReadOnlyList<MatchWithReplacement> matches, DocumentModel model, Format format)
        {
            var modifiedRanges = new List<IRange>(matches.Select<Match, IRange>(x => model.OriginalToModifiedRange(x.Range)));

            var currentExtraction = Extract(format);

            var lookup = new Lookup(model.Content);
            var searchResult = lookup.Search(currentExtraction, modifiedRanges);

            var lengthDiff = 0;

            if (searchResult.Count == 0)
            {
                throw new MatchesNotFoundException("Lookup returned an empty list. Maybe source document was change by user?", matches, null);
            }

            for (var i = searchResult.Count - 1; i >= 0; i--)
            {
                var match = searchResult[i];
                var replacement = matches[i].Replacement;

                IRange rawRange= ToRawRange(format, currentExtraction, match,false);

                var rawOriginalTextLength = (!EncodeContent && format != Format.Text) ? DecodedLength(currentExtraction.Substring(match.Start, match.Length)) : match.Length;
                var rawReplacement =  (!EncodeContent && format != Format.Text) ? XmlEncode(replacement) : replacement;

                if (rawRange.Length == 0)
                {
                    throw new MatchesNotFoundException("", new Match[]{matches[i]}, null);
                }

                lengthDiff += rawReplacement.Length - rawOriginalTextLength;

                ReplaceRawRange(rawRange, rawReplacement, format);
                model.Update(matches[i].Range, ((format != Format.Text) ? XmlEncode(replacement) : replacement));
            }

            var rangeWithTag = new Range(searchResult[0].Start, searchResult[searchResult.Count - 1].End);
            IRange range = ToRawRange(format, currentExtraction, rangeWithTag, false);
            SelectRawRange(new Range(range.Start, range.End + lengthDiff), format);
        }