gtksourceview での Ada の構文強調表示の改善に取り組んでいます (現在、非常に古く、非常に不完全です)。私が抱えている問題は、エイダが非常に位置的であるため、多くの構成要素を一致させるには、それらの位置を一致させる必要があることです。私はナノでこれをかなり簡単に行うことができました。
では、次のような型宣言を考えてみましょう。
type Trit is range 0..2;
「type」、「is」、「range」などのキーワードが認識されます (元は認識されていました)。ただし、型名はキーワードとして扱われました (整数のような単純な型であっても、Ada は定期的に新しい型を定義するため、設計上の決定は不適切です)。使用すると、標準の型が色付けされ、他のすべての型が通常のテキストのように見え、強調表示の目的が無効になります。一部の言語では、これは顕著な問題になる場合があります。ただし、型名の大部分は、次の 2 つの正規表現パターンの後に発生します。
type\s+(\w|\.|_)+
:\s+(\w|\.|_)+
実装の問題かもしれません (nano と gtksourceview は異なる正規表現の実装を使用しているようです)。問題はスペースの認識だと思いました。結局のところ、タイプ コンテキストをキーワード コンテキストの上に置くと、タイプが強調表示されますが、「タイプ」キーワードまたは「:」演算子は適切に強調表示されません (「タイプ」として強調表示されます)。これを nano でオーバーライドして、正しい強調表示を行うことができましたが、gtksourceview がこれを行う方法を見つけることができないようです。
ここでは、古い gtksourceview 定義の動作を確認できます。これは、多くのカスタム タイプを含むファイルでは機能しません。比較のために並べて実行中の私のナノ定義。位置によるマッチングは間違いなく可能であり、機能します。
型コンテキストをキーワード コンテキストの下に置くと、次のようになります。
型コンテキストをキーワード コンテキストの上に置くと、次のようになります。
どちらの場合も、コンテキストは同じで、開始するための単純なパターンです。
<context id="type" style-ref="type">
<match>(type)\s+\w+</match>
</context>