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;
}