Subscribed unsubscribe Subscribe Subscribe

sci

最果て風呂

正規表現の表現

ハイライティングがおかしいので気付いた

VimEmacs.scm ファイルのハイライトがおかしい。最初は syntax ファイルをいろいろといじっていたのだけど、どうやら #/〜/ 記法が Gauche 特有のものらしくて、EmacsVim もこれを想定していないためにハイライトがおかしくなるみたいだった。

f:id:nakinor:20150826064201j:plain f:id:nakinor:20150826064200j:plain L30 と L34 の部分。正規表現中の ; 以降がコメント扱いになっている。というか実際コメントばかりなのだけど。

もっとひどくなっているものがあって「;\ でエスケープする必要がない」のを知らないで書いていたものが下記。スクリプトはちゃんと動作するのよ?なぜ入れていたのか 3 年前のことで忘れちゃってる。

f:id:nakinor:20150826064159j:plain L30 の | 以降がおかしくなってしまう。そもそも or正規表現中で使っても良かったんだっけ?それにしてもこのスキームやばいな!

解決

根本的な解決ではないのだけれど、スクリプト側を変更することで対応した。#/〜/(string->regexp "〜") に置き換えることにしたのだが、そのままだとエラーは出ないものの、元辞書のコメント部分が削除されない内部辞書が作成されるようになってしまった。

実は \sPerl 等で使われている正規表現であり Scheme では [[:space:]] になるらしい。かなり面倒になるね。#/〜/ 記法便利なのに……。

で、該当する部分を下記のように書き換えると期待通りの動きになった。

#/^;.*|^$/ は (string->regexp "^;.*|^$")
#/\s;.*/ は (string->regexp "[[:space:]];.*")

結論

色付けは大切だね。いろんなことがわかる。