I am trying to learn how to write extensions for the Visual Studio Text Editor. My first Project is one that simply highlights the Async and Await keywords. I currently have the following code:
This code works fine, except for when a method is collapsed, in which it highlights the entire line until you expand it again. How can I restrict Visual Studio 2013 to highlighting only the specified text? I would also like to learn (although this is probably a question for another thread) how to change the foreground color of the text. Thanks.
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Media
Imports Microsoft.VisualStudio.Text
Imports Microsoft.VisualStudio.Text.Editor
Imports Microsoft.VisualStudio.Text.Formatting
Class AsyncAwaitHighlighterAdornment
Private WithEvents _view As IWpfTextView
Private ReadOnly _layer As IAdornmentLayer
Private ReadOnly _brush As Brush
Private ReadOnly _pen As Pen
Public Sub New(ByVal view As IWpfTextView)
Me._view = view
Me._layer = view.GetAdornmentLayer("AsyncAwaitHighlighterAdornment")
Me._brush = New SolidColorBrush(Colors.LightGreen)
Me._pen = New Pen(New SolidColorBrush(Colors.LightGreen), 0.5)
End Sub
Private Sub OnLayoutChanged(ByVal sender As Object, ByVal e As TextViewLayoutChangedEventArgs) Handles _view.LayoutChanged
Dim textspan As SnapshotSpan
Dim g As Geometry
Dim img As Image
For i As Integer = 0 To Me._view.TextSnapshot.Length - 6
If Me._view.TextSnapshot.GetText(i, 6) = "Async " OrElse Me._view.TextSnapshot.GetText(i, 6) = "Await " Then
textspan = New SnapshotSpan(Me._view.TextSnapshot, i, 5)
g = Me._view.TextViewLines.GetMarkerGeometry(textspan)
If g IsNot Nothing Then
img = New Image With {.Source = New DrawingImage(New GeometryDrawing(Me._brush, Me._pen, g))}
Canvas.SetLeft(img, g.Bounds.Left)
Canvas.SetTop(img, g.Bounds.Top)
Me._layer.AddAdornment(AdornmentPositioningBehavior.TextRelative, textspan, Nothing, img, Nothing)
End If
End If
Next
End Sub
End ClassThis code works fine, except for when a method is collapsed, in which it highlights the entire line until you expand it again. How can I restrict Visual Studio 2013 to highlighting only the specified text? I would also like to learn (although this is probably a question for another thread) how to change the foreground color of the text. Thanks.
Nathan Sokalski njsokalski@hotmail.com http://www.nathansokalski.com/