|
> hmonigの場合、前方一致であれば問題無いですが、なぜか前方一致に*や+があると
>正規表現の
> 解釈エラーになるようでした。
hmonig.dll の (?<=) および (?<!) では * や + などの可変長文字列が使用できず、
固定長文字列のみ
使用可能なのは 鬼雲 の使用です。
参考 : https://github.com/k-takata/Onigmo/blob/master/doc/RE.ja
それから、問題の焦点は 鬼雲 の \K の仕様云々ではなく、
1. 「複数行の強調表示」の「単一の文字列」が他の「複数行の強調表示」との
「重なり」を許可しないこと。
「通常の強調表示」同士や「通常の強調表示」と「複数行の強調表示」との重
なりは許可されている。
2. 「複数行の強調表示」で使える
・普通の文字
・スクリプト部分
・数値
・文字定数
・コメント
・#ifdef等での無効部分
の 6 種類の強調表示の種類が「通常の強調表示」では使用できないこと。そ
のため、やむなく「複数行の強調表示」の
「単一の文字列」で代替せざるを得ないこと。
にあるといえます。いずれも当方において複雑な .hilight ファイルの記述を妨げる
大変大きな障害となって
おります。
上記 1. については正規表現無しでも簡単に不具合を再現できました。.hilight フ
ァイル
129,重なり通常の強調表示
65,通常の強調表示重なり
/<HilightMulti>
/0016,00000004,00,00,00000002,"重なり単一の文字列",00000000,""
/0007,00000004,00,00,00000002,"単一の文字列重なり",00000000,""
を適用したうえで、ファイル
0001 通常の強調表示重なり通常の強調表示
0002 通常の強調表示重なり単一の文字列
0003 単一の文字列重なり通常の強調表示
0004 単一の文字列重なり単一の文字列
を開いた結果、
1 行目の左側の「通常の強調表示」 : 〇 「強調表示 2」で色付け
1 行目の右側の「重なり通常の強調表示」 : 〇 「強調表示 3」で色付け
2 行目の左側の「通常の強調表示」 : 〇 「強調表示 2」で色付け
2 行目の右側の「重なり単一の文字列」 : 〇 「強調表示 3」で色付け
3 行目の左側の「単一の文字列」 : 〇 「強調表示 2」で色付け
3 行目の右側の「重なり通常の強調表示」 : 〇 「強調表示 3」で色付け
4 行目の左側の「単一の文字列重なり」 : 〇 「強調表示 2」で色付け
4 行目の右側の「単一の文字列」 : × 色付けされず
となり、結果をまとめると、
A. 「通常の強調表示」同士の重なりは許可される。
B. 「通常の強調表示」に「複数行の強調表示」を重ねることも許可される。
C. 「複数行の強調表示」に「通常の強調表示」を重ねることも許可される。
D. 「複数行の強調表示」同士の重なりは許可されない。
ということになります。
上記 D. については、「複数行の強調表示」の中の「複数行」と「次の行から色付
け」に関しては
強調表示の「入れ子」構造を維持する上で「入れ子」関係の成立しない重なりを許可
しないことは
理解できます。しかし、用途がほとんど「通常の強調表示」と変わらない「単一行
(行末まで)」と
「単一の文字列」に関して、このような重なりを許可しないことは何の意味もなく、
正に
「百害あって一利なし」の状態です。
このことから、不具合修正の要望は、
1. 「複数行の強調表示」の中の「単一行(行末まで)」と「単一の文字列」では重
なりを許可する。
2. 「通常の強調表示」で使用可能な種類に
・普通の文字
・スクリプト部分
・数値
・文字定数
・コメント
・#ifdef等での無効部分
の 6 種類を追加する。
の 2 つといたします。どうかよろしくお願いします。
|
|