Bluefish 関連/Outputbox で日本語を使う

2006年7月20日

[開発近況] [Shift-JIS を使う] [日本語メッセージカタログ ja.po] [Outputbox で日本語を使う]

Outputbox とは

Outputbox でHTML lint を実行したところ
[Outputbox でHTML lint を実行したところ]

メニューの 起動 → Outputbox... からコマンドを選択して実行し、 その結果を Bluefish ウィンドウの下側に表示する機能です。

対象ファイル名、行番号、メッセージに分割してくれるので読みやすくなっています。 またクリックすると、ファイルの該当箇所に飛びます。 プログラミング言語の統合開発環境を使い慣れた方なら、 すぐにイメージは掴めると思います。

右の画像は使用例です。石野 恵一郎さん の Another HTML-lint(ダウンロード版) で、このファイルの HTML 準拠をチェックしました。 赤丸で囲んだ部分が実行結果です。

日本語を使うためには

次の 2つの手順が必要です。

  1. Outputbox の設定で、コマンドの出力を UTF-8 にする
  2. プログラムにパッチを当てる(安定版のみ)

Outputbox での設定

メニューの 編集 → 環境設定 から開くウィンドウの左側で、出力パーサ のタブを選択します。 各項目の意味は、次の通りです。

名前
起動→Outputbox メニューで表示される名前を指定します
パターン
コマンドの出力結果を構文解析するための、正規表現パターンを入力します。
ファイル名パターン#
パターンの中の、何番目がファイル名を表すのかを数字で指定します。なければ -1 にします。
行パターン#
パターンの中の、何番目が行番号を表すのかを数字で指定します。なければ -1 にします。
出力パターン#
パターンの中の、何番目がメッセージを表すのかを数字で指定します。なければ -1 にします。
コマンド
メッセージを出力するためのコマンドラインを指定します。出力が UTF-8 でない場合は、 | nkf -w を追加するなど、出力が UTF-8 になるようにしてください。 ここで使用されている nkf は漢字コードを変換するためのフィルタです。
出力をすべて表示しない
このチェックボックスをチェックすると、パターンに従っていない出力行は、表示されません。 結果のまとめなどが最後に表示される場合、必要なければチェックしてください。

設定例

上の画像を取り込むのに使用した、 Another HTML-lint を使用するための設定例を書いておきます。

名前
Another HTML-lint
パターン
([a-zA-Z0-9/_.-]+)\(([0-9]+)\): ([0-9]+): (.+)
ファイル名パターン#
1
行パターン#
2
出力パターン#
4
コマンド
htmllint '%s' | nkf -w

ここで使用されている %s は、現在編集対象となっているファイルを表します。 その他の %付き指定子については、環境設定 → 起動プログラムの設定 タブで表示される、 ユーティリティとフィルタ 欄の脚注を見てください。

プログラムにパッチを当てる

安定版(1.0系列) では、そのままでは Outputbox で日本語が使えません。 この問題を修正するためのパッチを用意しました。以下の手順で適用してください。

autoconf が使える場合

このパッチ を使ってください。 configure.ac, bluefish.h, outputbox.c を変更します。

ダウンロードして outputbox.diff という名前で保存したら、

$ cd bluefish-1.0.5 (bluefish のソースを展開したディレクトリへ移動)
$ patch -p1 < outputbox.diff
$ autoconf
$ ./configure
$ make

でビルドします。

autoconf が使えない場合

上のパッチに加えて、 このパッチも 使ってください。こちらは、configure に対するパッチです。

ダウンロードして outputboxc.diff という名前で保存したら、

$ cd bluefish-1.0.5 (bluefish のソースを展開したディレクトリへ移動)
$ patch -p1 < outputbox.diff
$ patch -p1 < outputboxc.diff
$ ./configure
$ make

でビルドします。

安定版の Outputbox で日本語が使えない理由

要は、regex が日本語に対応していないため、です。 コマンドからの出力を正規表現に従って解析するところで、日本語をうまく処理できないようです。

私のパッチでは、同じ API を持つ pcreposix に入れ替えることで、対応しています。 開発版(CVS)では、outputbox 処理に regex を使用していないので、この問題は発生しません。