Пример #1
0
        // Token: 0x0600624E RID: 25166 RVA: 0x001B8C60 File Offset: 0x001B6E60
        internal bool IsOverlapping(ICollection <TextSegment> textSegments)
        {
            Invariant.Assert(textSegments != null, "TextSegments must not be null.");
            textSegments = TextAnchor.SortTextSegments(textSegments, false);
            IEnumerator <TextSegment> enumerator  = this._segments.GetEnumerator();
            IEnumerator <TextSegment> enumerator2 = textSegments.GetEnumerator();
            bool flag  = enumerator.MoveNext();
            bool flag2 = enumerator2.MoveNext();

            while (flag && flag2)
            {
                TextSegment textSegment  = enumerator.Current;
                TextSegment textSegment2 = enumerator2.Current;
                if (textSegment2.Start.CompareTo(textSegment2.End) == 0)
                {
                    if (textSegment.Start.CompareTo(textSegment2.Start) == 0 && textSegment2.Start.LogicalDirection == LogicalDirection.Forward)
                    {
                        return(true);
                    }
                    if (textSegment.End.CompareTo(textSegment2.End) == 0 && textSegment2.End.LogicalDirection == LogicalDirection.Backward)
                    {
                        return(true);
                    }
                }
                if (textSegment.Start.CompareTo(textSegment2.End) >= 0)
                {
                    flag2 = enumerator2.MoveNext();
                }
                else
                {
                    if (textSegment.End.CompareTo(textSegment2.Start) > 0)
                    {
                        return(true);
                    }
                    flag = enumerator.MoveNext();
                }
            }
            return(false);
        }
Пример #2
0
        // Token: 0x06006251 RID: 25169 RVA: 0x001B8FC0 File Offset: 0x001B71C0
        internal static TextAnchor TrimToIntersectionWith(TextAnchor anchor, ICollection <TextSegment> textSegments)
        {
            Invariant.Assert(anchor != null, "Anchor must not be null.");
            Invariant.Assert(textSegments != null, "TextSegments must not be null.");
            textSegments = TextAnchor.SortTextSegments(textSegments, true);
            TextSegment textSegment = TextSegment.Null;
            int         num         = 0;
            IEnumerator <TextSegment> enumerator = textSegments.GetEnumerator();
            bool flag = enumerator.MoveNext();

            while (num < anchor._segments.Count && flag)
            {
                bool condition;
                if (!textSegment.Equals(TextSegment.Null) && !textSegment.Equals(enumerator.Current))
                {
                    ITextPointer end          = textSegment.End;
                    TextSegment  textSegment2 = enumerator.Current;
                    condition = (end.CompareTo(textSegment2.Start) <= 0);
                }
                else
                {
                    condition = true;
                }
                Invariant.Assert(condition, "TextSegments are overlapping or not ordered.");
                TextSegment textSegment3 = anchor._segments[num];
                textSegment = enumerator.Current;
                if (textSegment3.Start.CompareTo(textSegment.End) >= 0)
                {
                    flag = enumerator.MoveNext();
                }
                else if (textSegment3.End.CompareTo(textSegment.Start) <= 0)
                {
                    anchor._segments.RemoveAt(num);
                }
                else if (textSegment3.Start.CompareTo(textSegment.Start) < 0)
                {
                    anchor._segments[num] = TextAnchor.CreateNormalizedSegment(textSegment.Start, textSegment3.End);
                }
                else
                {
                    if (textSegment3.End.CompareTo(textSegment.End) > 0)
                    {
                        anchor._segments[num] = TextAnchor.CreateNormalizedSegment(textSegment3.Start, textSegment.End);
                        anchor._segments.Insert(num + 1, TextAnchor.CreateNormalizedSegment(textSegment.End, textSegment3.End));
                        flag = enumerator.MoveNext();
                    }
                    else if (textSegment3.End.CompareTo(textSegment.End) == 0)
                    {
                        flag = enumerator.MoveNext();
                    }
                    num++;
                }
            }
            if (!flag && num < anchor._segments.Count)
            {
                anchor._segments.RemoveRange(num, anchor._segments.Count - num);
            }
            if (anchor._segments.Count == 0)
            {
                return(null);
            }
            return(anchor);
        }