|
>colormarker文で最初から強調表示として指定できたほうがよさそうです。
colormarker文の動作を「普通のカラーマーカー」の作成から「本物の強調表示」の
作成に仕様変更(あるいは機能追加)する際、どうしても避けて通れない問題がありま
す。それは、普通のカラーマーカーにはできて本物の強調表示にはできない「複数行
にわたる色付けおよび前方/後方一致/不一致の参照」です。現状では、強調表示で
(?#fulllinematch) を使用しても \n が認識しないため、例えばC/C++などの \n を
空白文字と同一視するような言語でクラス名や関数名などの予約語ではない任意の識
別子で特別な役割を持つものを強調表示させることが非常に困難となっています。つ
まり、C/C++の関数
type func( aType a, bType b ) {}
を、
type func
( aType a, bType b )
{}
とも
type
func
(
aType a,
bType b
) {
}
とも書けてしまうため、型名のtype、aType、bTypeや関数名のfuncを強調表示させる
ために必要な「前方/後方一致/不一致の条件式に改行文字を入れる」すなわち \s を
[ \t\r\n] として
(?<=^\s*\c+\s*)(\c+)(?=\s*\()
で関数名funcを強調表示させるといったことが不可能となってしまっています。この
ため、現状ではテキストを書く側が強調表示の定義によって特定のコーディングスタ
イルを強制される事態が現出しています。
もちろん、強調表示で改行を検索対象にした場合、正規表現の書き方を誤れば1個の
単語の表示のために全文検索してしまって動作が極端に重くなるといったことが起き
得ます。だが、それ以外のデメリットが具体的にどのようなものなのか、あるいは実
装に向けての技術的な壁がどんなものかがよくわからないため、ユーザーや.hilight
ファイルの作者に向けて詳しく説明してもらえればすごく助かります。どうかよろし
くお願いします。
|
|