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); } } }
public IEnumerable <TextMarker> GetMarkersAtOffset(int offset) { if (_markers == null) { return(Enumerable.Empty <TextMarker>()); } return(_markers.FindSegmentsContaining(offset)); }
/// <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); }
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; } } } }
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)); }
/// <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);
public IEnumerable <TextMarker> GetMarkersAtOffset(int offset) => markers == null?Enumerable.Empty <TextMarker> () : markers.FindSegmentsContaining(offset);