ある位置の単語が xshd-ruleset の Span[i] にあるかどうかを確認する方法は?
ありがとう!
強調表示エンジンから情報を取得するには、次の 2 つの方法があります。
強調表示エンジンは、各行の先頭にある「スパン スタック」のみを保存します。メソッドを使用しDocumentHighlighter.GetSpanStack
て取得できます。
var documentHighlighter = textEditor.TextArea.GetService(typeof(IHighlighter)) as DocumentHighlighter;
bool isInComment = documentHighlighter.GetSpanStack(1)
.Any(s => s.SpanColor != null && s.SpanColor.Name == "Comment");
行 1 の終わり (= 行 2 の開始) が複数行のコメント内にある場合、これは true を返します。
行内のより詳細な結果を得るには、蛍光ペンを実行する必要があります。
int off = document.GetOffset(7, 22);
HighlightedLine result = documentHighlighter.HighlightLine(7);
bool isInComment = result.Sections.Any(s => s.Offset <= off
&& s.Offset+s.Length >= off
&& s.Color.Name == "Comment");
もちろん、色によるスパン/セクションの識別は、それらの色に名前が付けられている場合にのみ確実に機能します。すべての組み込みハイライトが名前付きの色を使用するように更新されているわけではないため、最初に .xshd ファイルを確認してください。