public void UpdateOffsetsAndInvalidate(IEnumerable <DocumentChangeEventArgs> changes)
        {
            foreach (DocumentChangeEventArgs change in changes)
            {
                // Update offsets of all items
                segments.UpdateOffsets(change);

                // Remove any items affected by the change
                AXmlParser.Log("Changed offset {0}", change.Offset);
                // Removing will cause one of the ends to be set to change.Offset
                // FindSegmentsContaining includes any segments touching
                // so that conviniently takes care of the +1 byte
                var segmentsContainingOffset = segments.FindSegmentsContaining(change.Offset);
                foreach (AXmlObject obj in segmentsContainingOffset.OfType <AXmlObject>().Where(o => o.IsCached))
                {
                    InvalidateCache(obj, false);
                }
                foreach (TouchedRange range in segmentsContainingOffset.OfType <TouchedRange>())
                {
                    AXmlParser.Log("Found that {0} dependeds on ({1}-{2})", range.TouchedByObject, range.StartOffset, range.EndOffset);
                    InvalidateCache(range.TouchedByObject, true);
                    segments.Remove(range);
                }
            }
        }
Exemple #2
0
 public IEnumerable <TextMarker> GetMarkersAtOffset(int offset)
 {
     if (_markers == null)
     {
         return(Enumerable.Empty <TextMarker>());
     }
     return(_markers.FindSegmentsContaining(offset));
 }
Exemple #3
0
 /// <summary>
 /// Gets whether insertion is possible at the specified offset.
 /// </summary>
 public virtual bool CanInsert(int offset)
 {
     foreach (TextSegment segment in segments.FindSegmentsContaining(offset))
     {
         if (segment.StartOffset < offset && offset < segment.EndOffset)
         {
             return(false);
         }
     }
     return(true);
 }
Exemple #4
0
        public ReferenceSegment GetReferenceSegmentAt(int offset)
        {
            var segs = references.FindSegmentsContaining(offset).ToArray();

            foreach (var seg in segs)
            {
                if (seg.StartOffset <= offset && offset < seg.EndOffset)
                {
                    return(seg);
                }
            }
            return(segs.Length == 0 ? null : segs[0]);
        }
        IEnumerable <AXmlObject> FindParents(AXmlObject child)
        {
            int childStartOffset = child.StartOffset;
            int childEndOffset   = child.EndOffset;

            foreach (AXmlObject parent in segments.FindSegmentsContaining(child.StartOffset).OfType <AXmlObject>())
            {
                // Parent is anyone wholy containg the child
                if (parent.StartOffset <= childStartOffset && childEndOffset <= parent.EndOffset && parent != child)
                {
                    yield return(parent);
                }
            }
        }
        private void TextViewMouseHover(object sender, MouseEventArgs e)
        {
            if (!markers.Any())
            {
                return;
            }

            TextViewPosition?position = textEditor.TextArea.TextView.GetPositionFloor(
                e.GetPosition(textEditor.TextArea.TextView) + textEditor.TextArea.TextView.ScrollOffset);

            if (position.HasValue)
            {
                TextLocation logicalPosition = position.Value.Location;
                int          offset          = textEditor.Document.GetOffset(logicalPosition);

                var             markersAtOffset = markers.FindSegmentsContaining(offset);
                ErrorTextMarker marker          = markersAtOffset.LastOrDefault(m => !string.IsNullOrEmpty(m.Message));

                if (marker != null)
                {
                    if (toolTip == null)
                    {
                        toolTip                 = new ToolTip();
                        toolTip.Closed         += (s2, e2) => toolTip = null;
                        toolTip.PlacementTarget = textEditor;
                        toolTip.Content         = new TextBlock
                        {
                            Text         = marker.Message,
                            TextWrapping = TextWrapping.Wrap
                        };
                        toolTip.IsOpen = true;
                        e.Handled      = true;
                    }
                }
            }
        }
Exemple #7
0
 public IEnumerable <ITextMarker> GetMarkersAtOffset(int offset)
 {
     return(markers.FindSegmentsContaining(offset));
 }
 internal IEnumerable <TextMarker> GetMarkersAtOffset(int offset)
 {
     return(markers == null?Enumerable.Empty <TextMarker>() : markers.FindSegmentsContaining(offset));
 }
Exemple #9
0
 /// <summary>
 /// Gets all foldings that contain <param name="offset" />.
 /// </summary>
 public ReadOnlyCollection <FoldingSection> GetFoldingsContaining(int offset)
 {
     return(foldings.FindSegmentsContaining(offset));
 }
 /// <summary>Enum all markers that span the position at 'offset'</summary>
 public IEnumerable <ITextMarker> GetMarkersAtOffset(int offset) => m_markers.FindSegmentsContaining(offset);
Exemple #11
0
 public IEnumerable <TextMarker> GetMarkersAtOffset(int offset)
 => markers == null?Enumerable.Empty <TextMarker> () : markers.FindSegmentsContaining(offset);