ヴォルフロッシュ

Blog

Published on

RSS

CotEditorのPerlシンタックス定義改良

CotEditor
CotEditor

最近CotEditorのことばっか書いていますが、せっかくなので気が回るうちに書いておく。

CotEditorのデフォルトPerlシンタックスの改良案です。@Tachy_Pochy (a.k.a. 踊るサボテン工房)さんが書かれたPerl の定義を改良するをベースに置きつつ、さらに追加と改変を加える。まねすると幸せになるかもしれない。

この変更は CotEditor 1.5 で本家に反映されました。

数値 Numbers

Perlで数値計算をする機会がそこそこあるので、数値はちゃんと色がついてくれた方が助かる。せっかく数値ってグループ分けがあるんだし。

ということでさらに以下の3つを 数値 (Numbers) 欄に加える。RE と IC のチェックボックスはスクリーンショット参照。

(?<![0-9a-z_$])[0-9.][0-9._]*(e-?[0-9._]+)?\b
Perlシンタックス用 数値定義 (10進数, 8進数)
\b0b[01_]+\b
Perlシンタックス用 数値定義 (2進数)
\b0x[0-9a-fA-F_]+\b
Perlシンタックス用 数値定義 (16進数)
最初の行はREとICそれぞれにチェック、それ以外はREのみにチェック
スクリーンショット

10進数の頭でごちゃごちゃやってるのは、頭のゼロを省略した浮動小数点数の小数点 (例 0.23.23と記述したときの頭の.) をカラーリングするための悪あがき。いい線いってると思うけど若干うさん臭くもある。

ちなみにPerlって数値の間にアンダースコア _ 入れても無視されて数値として扱われるんだってさ。知らんかった。へー。

$0等の数字のみで成る特殊変数との衝突を避けるため10進法の否定後読みに$を足しました。

キーワード Keywords

ついでにPerlでは特別な意味を持つので以下をキーワードに足しておきたい。REとICは共にチェックをしない。

__END__
__DATA__
Perlシンタックス用 キーワード定義

コメント Comments

$#がコメント化しないサボテン工房製のコメント定義はステキなのだが、今度はファイル頭に置いたコメント(実質的にはここに置かれるのはコメントではなく関連づけだが)が対象外になるのが気になるので、頭の$否定を後読みに追い出す。REのみにチェック。

(?<!\$)#(.*+)$
Perlシンタックス用 コメント定義

Values

さらにPerlの変数名は最初の文字に数字を利用できない。ということでそれを明示的に書いてみる。REのみにチェック。

(\$|\$#|@|%)[_a-zA-Z][_a-zA-Z0-9]*
Perlシンタックス用 値定義

これだと最初に数字を使うと色がつかないので注意喚起になるのではないか、という無駄な配慮。さらに簡略化のため1行にまとめている。

ただしこれだと数字だけで構成される特殊変数が抜けるので以下も足す。同じくREのみにチェック。

\$0\b
\$[1-9][0-9]*\b
Perlシンタックス用 値定義

ついでにこの特殊変数2つも追加。;直前でもカラーリングされるようにするためにREにチェック。

__LINE__
__FILE__
Perlシンタックス用 値定義
$0等の数字のみで成る特殊変数と__LINE__および__FILE__を追加しました。

値に変数を入れる

ところで、このシンタックス定義でに変数を入れるというのは、本来のプログラミング言語のカラーリング定義の手法からは外れたイレギュラーな方法である。本来nullとかtrueとかを定義する場所である。個人的には "ユーザーが好きに定義しなんでも入れられる" 変数 と "言語側であらかじめ定義されている固定の" が同列に扱われるのには少々違和感を覚える。

ただしCotEditorにデフォルトで入っているPHPのシンタックス定義では既に変数を値でカラーリングするというテクニック(?)が使われているためそれをPerlでも踏襲するのはまぁ、妥当だとも思う。というか私自身もそうしているし。なにより変数はカラーリングされて欲しい。変数に識別記号が付く言語は少数派だと思うのでしょうがないかなとも思うが、やっぱり分かれてて欲しいなぁとは思うところ。

と言いつつ私もXMLで数値に名前空間を割り振るなんていうめちゃくちゃなことはやっているのだが(ただXMLはプログラミング言語ではないから色分けさえできればそんなに本来の定義に沿う必要はない、というのが建前

ひとまずは以上。本当はPHPもPerlも5になって登場したオブジェクト指向な書き方に対応されるといいんだけどねぇ。不具合、改善案等あったらコメントいただけると幸い。

本家に拾って頂いたので、次バージョン (1.3.1の次) からこの設定がPerlでデフォルトになりそうです (ただしまだちょっと調整中なので今後若干の変化がある可能性があります)。

3 Comments

踊るサボテン工房

> 今度はファイル頭に置いたコメントが対象外...
ホントだ。気づかなかった...( ̄▽ ̄υ)アセ…。

今また見ていたらいろいろと気になる点が...。

シングルクォートが「文字」に定義されているのですが、マッチの後ろの文字列を示す「$'」のシングルクォートに反応してしまいます。なので、同定義を開始文字列「(?<!\$)'.*?'」、終了文字列空欄、REチェック、としました。
http://odorusaboten.web.fc2.com/mac/coteditor_syntaxs.html

「$'」単独だと「値」に定義されているのが有効なのですが、行末において「$';」などとすると無効になってしまうから「\$'」としてREにチェックを入れるとか...この類似がたくさんありそうですが調べきれていません。

1024jp @webmaster

> 踊るサボテン工房さん
あぁ....、たしかに、$と記号系の特殊変数はネックですね。
今見たら、私の書いた数値の抜き出しも $0 とかが効かなくなっていたのでちょっと修正しました。

$+記号の特殊変数はひとまずエスケープしてREチェックにすれば、
 $$  $, $. $; および $" $'
以外は一見大丈夫そうに見えます。
(この6つは干渉が起きるのが容易に想像され色々こわいのでまだ試してません)
$^A 系は「\$\^A\b」と後ろに \b を入れた方が無難そうです。
$@ や $% ももう少し気を配るべきなのかもしれませんが、
ひとまずは正しい書き方をしたときにちゃんと色がつくことを優先しようかなと。

さて、ご提案の$' 回避の''の正規表現抜き出しの件ですが、
しかし今度は '' の中に # が入ったときに # 以降がコメントになっちゃいますね。
このREを入れると効きが弱くなる(?)のは悩ましく、
私もこれで以前ヒアドキュメントの文字列カラーリングを諦めてたり...。
Perlはルーズに書けるのが魅力ですが、こういうときは悩ましいですね。

もう少し考えてみます。

1024jp @webmaster

メモも兼ねた追記。

$, $. $; の3つもREで問題なさそう。

$' と $" を抜かしたら、いずれにせよ $$ の後ろに記号が来るような記述があやしい。
例えば、
 print $$+22;
 print($$);
ちなみに $$ は実行中のPerlプロセス番号が入るらしい。
$$の後ろに来る可能性がある記号を含んだ特殊変数に (?<!\$) を付け足せばいいだけなのかもしれないけど
あんまりごちゃごちゃさせたくないなぁ。

この記事へのコメント受付は終了しました。