public void MoveEndpointByRange(TextPatternRangeEndpoint endpoint, ITextRangeProvider targetRange, TextPatternRangeEndpoint targetEndpoint)
        {
            TextRangeProvider other = (TextRangeProvider)targetRange;

            Log("{0}.MoveEndpointByRange({1}, {2}, {3})", ID, endpoint, other.ID, targetEndpoint);
            SetEndpoint(endpoint, other.GetEndpoint(targetEndpoint));
        }
        public int CompareEndpoints(TextPatternRangeEndpoint endpoint, ITextRangeProvider targetRange, TextPatternRangeEndpoint targetEndpoint)
        {
            TextRangeProvider other = (TextRangeProvider)targetRange;
            int result = GetEndpoint(endpoint).CompareTo(other.GetEndpoint(targetEndpoint));

            Log("{0}.CompareEndpoints({1}, {2}, {3}) = {4}", ID, endpoint, other.ID, targetEndpoint, result);
            return(result);
        }