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

ToRawRange() приватный Метод

private ToRawRange ( System.Text.Format format, string currentExtraction, IRange rangeWithTag, bool silent ) : IRange
format System.Text.Format
currentExtraction string
rangeWithTag IRange
silent bool
Результат IRange
        private IRange ToRawRange(Format format, string currentExtraction, IRange rangeWithTag, bool silent)
        {
            IRange range;
            if (EncodeContent && format != Format.Text)
            {
                var xmlContentStart = currentExtraction.IndexOf(">") + 1;
                var xmlContentEnd = currentExtraction.LastIndexOf("<");

                System.Diagnostics.Trace.Assert(xmlContentStart > 0);
                System.Diagnostics.Trace.Assert(xmlContentEnd > 0);

                if (!silent && !(xmlContentStart <= rangeWithTag.Start && rangeWithTag.End <= xmlContentEnd))
                {
                    throw new RangesNotFoundException(rangeWithTag + " in content: '" + currentExtraction.Substring(rangeWithTag.Start,rangeWithTag.Length) + "' is trying to mark inside tags.", new IRange[]{rangeWithTag}, null);
                }

                var xmlContent = currentExtraction.Substring(xmlContentStart, xmlContentEnd - xmlContentStart);

                var rangeInContentStart = Math.Min(Math.Max(0, rangeWithTag.Start - xmlContentStart), xmlContent.Length);
                var rangeInContentLength = Math.Min(rangeWithTag.Length, xmlContent.Length - rangeInContentStart);

                var decodedStart = DecodedLength(xmlContent.Substring(0, rangeInContentStart));
                var decodedLength = DecodedLength(xmlContent.Substring(rangeInContentStart, rangeInContentLength));
                range = new Range(decodedStart, decodedStart + decodedLength);
            }
            else
            {
                range = new Range(rangeWithTag.Start, rangeWithTag.End);
            }
            return range;
        }