diff --git a/src/AvaloniaEdit.Demo/MainWindow.xaml.cs b/src/AvaloniaEdit.Demo/MainWindow.xaml.cs index c165ded1..c71281dd 100644 --- a/src/AvaloniaEdit.Demo/MainWindow.xaml.cs +++ b/src/AvaloniaEdit.Demo/MainWindow.xaml.cs @@ -109,9 +109,14 @@ public MainWindow() private void Caret_PositionChanged(object sender, EventArgs e) { - _statusTextBlock.Text = string.Format("Line {0} Column {1}", + var scopes = _textMateInstallation.EditorModel.GetTokenScopes( + _textEditor.TextArea.Caret.Line - 1, + _textEditor.TextArea.Caret.Column - 1); + + _statusTextBlock.Text = string.Format("Line {0} Column {1}. Scopes: {2}", _textEditor.TextArea.Caret.Line, - _textEditor.TextArea.Caret.Column); + _textEditor.TextArea.Caret.Column, + scopes.Count > 0 ? string.Join(", ", scopes) : "None"); } protected override void OnClosed(EventArgs e) diff --git a/src/AvaloniaEdit.TextMate/TextEditorModel.cs b/src/AvaloniaEdit.TextMate/TextEditorModel.cs index 641919e1..ae48eddb 100644 --- a/src/AvaloniaEdit.TextMate/TextEditorModel.cs +++ b/src/AvaloniaEdit.TextMate/TextEditorModel.cs @@ -1,10 +1,9 @@ using System; - +using System.Collections.Generic; +using System.Linq; using Avalonia.Threading; - using AvaloniaEdit.Document; using AvaloniaEdit.Rendering; - using TextMateSharp.Model; namespace AvaloniaEdit.TextMate @@ -73,6 +72,19 @@ public override int GetLineLength(int lineIndex) return _documentSnapshot.GetLineLength(lineIndex); } + public IReadOnlyCollection GetTokenScopes(int lineIndex, int columnIndex) + { + var line = Get(lineIndex); + if (line == null) return Array.Empty(); + + var element = line + .Tokens + .OrderBy(x => x.StartIndex) + .LastOrDefault(x => x.StartIndex <= columnIndex); + + return element?.Scopes ?? new List(); + } + private void TextView_ScrollOffsetChanged(object sender, EventArgs e) { try