private void HandleTreeViewSelectedItemChangedV3(object sender, RoutedPropertyChangedEventArgs <object> e) { try { if (Tagger == null) { return; } if (Tokens4 != null || e.NewValue is Antlr4.Runtime.Tree.IParseTree) { return; } using (Tagger.Update()) { Tagger.RemoveTagSpans(tagSpan => true); if (Snapshot == null) { return; } CommonTree selected = e.NewValue as CommonTree; IList <IToken> tokens = Tokens3; if (tokens != null && selected != null) { if (selected.TokenStartIndex >= 0 && selected.TokenStopIndex >= 0) { IToken startToken = tokens[selected.TokenStartIndex]; IToken stopToken = tokens[selected.TokenStopIndex]; Span span = new Span(startToken.StartIndex, stopToken.StopIndex - startToken.StartIndex + 1); Span sourceSpan = new Span(0, Snapshot.Length); if (sourceSpan.Contains(span)) { ITrackingSpan trackingSpan = Snapshot.CreateTrackingSpan(span, SpanTrackingMode.EdgeExclusive); Tagger.CreateTagSpan(trackingSpan, PredefinedTextMarkerTags.Vivid); var activeView = ActiveViewTrackerService.ActiveView; if (activeView != null && activeView.TextBuffer == Snapshot.TextBuffer) { activeView.ViewScroller.EnsureSpanVisible(new SnapshotSpan(Snapshot, span), EnsureSpanVisibleOptions.ShowStart); } } } } else if (selected != null && selected.Token != null) { if (selected.Token.StartIndex >= 0 && selected.Token.StopIndex >= 0) { IToken token = selected.Token; Span span = new Span(token.StartIndex, token.StopIndex - token.StartIndex + 1); Span sourceSpan = new Span(0, Snapshot.Length); if (sourceSpan.Contains(span)) { ITrackingSpan trackingSpan = Snapshot.CreateTrackingSpan(span, SpanTrackingMode.EdgeExclusive); Tagger.CreateTagSpan(trackingSpan, PredefinedTextMarkerTags.Vivid); var activeView = ActiveViewTrackerService.ActiveView; if (activeView != null && activeView.TextBuffer == Snapshot.TextBuffer) { activeView.ViewScroller.EnsureSpanVisible(new SnapshotSpan(Snapshot, span), EnsureSpanVisibleOptions.ShowStart); } } } } } } catch (Exception ex) when(!ErrorHandler.IsCriticalException(ex)) { } }
private void HandleTreeViewSelectedItemChangedV4(object sender, RoutedPropertyChangedEventArgs <object> e) { try { if (Tagger == null) { return; } if (Tokens3 != null || e.NewValue is Antlr.Runtime.Tree.ITree) { return; } using (Tagger.Update()) { Tagger.RemoveTagSpans(tagSpan => true); if (Snapshot == null) { return; } IParseTree selected = e.NewValue as IParseTree; IList <IToken> tokens = Tokens4; if (tokens != null && selected != null) { if (selected.SourceInterval.a >= 0 && selected.SourceInterval.b >= 0) { IToken startToken = tokens[selected.SourceInterval.a]; IToken stopToken = tokens[selected.SourceInterval.b]; Span span = new Span(startToken.StartIndex, stopToken.StopIndex - startToken.StartIndex + 1); Span sourceSpan = new Span(0, Snapshot.Length); if (sourceSpan.Contains(span)) { ITrackingSpan trackingSpan = Snapshot.CreateTrackingSpan(span, SpanTrackingMode.EdgeExclusive); Tagger.CreateTagSpan(trackingSpan, PredefinedTextMarkerTags.Vivid); var activeView = ActiveViewTrackerService.ActiveView; if (activeView != null && activeView.TextBuffer == Snapshot.TextBuffer) { activeView.ViewScroller.EnsureSpanVisible(new SnapshotSpan(Snapshot, span), EnsureSpanVisibleOptions.ShowStart); } } } } else if (selected is ITerminalNode) { IToken token = ((ITerminalNode)selected).Symbol; if (token.StartIndex >= 0 && token.StopIndex >= 0) { Span span = new Span(token.StartIndex, token.StopIndex - token.StartIndex + 1); Span sourceSpan = new Span(0, Snapshot.Length); if (sourceSpan.Contains(span)) { ITrackingSpan trackingSpan = Snapshot.CreateTrackingSpan(span, SpanTrackingMode.EdgeExclusive); Tagger.CreateTagSpan(trackingSpan, PredefinedTextMarkerTags.Vivid); var activeView = ActiveViewTrackerService.ActiveView; if (activeView != null && activeView.TextBuffer == Snapshot.TextBuffer) { activeView.ViewScroller.EnsureSpanVisible(new SnapshotSpan(Snapshot, span), EnsureSpanVisibleOptions.ShowStart); } } } } else if (selected is IRuleNode) { //if (selected.Token.StartIndex >= 0 && selected.Token.StopIndex >= 0) //{ // IToken token = selected.Token; // Span span = new Span(token.StartIndex, token.StopIndex - token.StartIndex + 1); // Span sourceSpan = new Span(0, Snapshot.Length); // if (sourceSpan.Contains(span)) // { // ITrackingSpan trackingSpan = Snapshot.CreateTrackingSpan(span, SpanTrackingMode.EdgeExclusive); // Tagger.CreateTagSpan(trackingSpan, PredefinedTextMarkerTags.Vivid); // var activeView = ActiveViewTrackerService.ActiveView; // if (activeView != null && activeView.TextBuffer == Snapshot.TextBuffer) // activeView.ViewScroller.EnsureSpanVisible(new SnapshotSpan(Snapshot, span), EnsureSpanVisibleOptions.ShowStart); // } //} } } } catch (Exception ex) { if (ErrorHandler.IsCriticalException(ex)) { throw; } } }