2008年10月28日火曜日

phpのsyntax highlighteningと、タブと、cvsweb.cgi

syntax highlighteningというのは、プログラムのコードなどを書いているときに、その言語の予約語などを色を変えて表示してくれる機能のことです。・・・highlightingの方が一般的なのかなぁ?



私は、「emacsを使わないとプログラムが書けない体」となってしまってるのですが、emacsでPHPのコードを書く場合、php-mode.elをインストールしておいて、php-modeにすれば、カラフルでわかりやすく、ときにはド派手に(笑)表示してくれます。



200810271



ちなみに、FreeBSDの場合は、 portsの/usr/ports/lang/php-mode.el/ をインストールしておいてから、php-mode.elのコメント部分に書いてあるように、~/.emacsに

(require 'php-mode)

という1行を入れておけばOKです。



PHP自体にも、PHPのファイルを、syntax highlighteningして、HTMLにする機能があります。こんな感じ。

% php -s hello.php > hello.html


ブラウザで表示してみると、こうなります。



200810272



すばらしい!と思ったんですが、よく見ると、インデントがずれてます。
これ、タブが入っている部分が、emacs上では8タブとして扱われてたのが、php -sしたときは、4文字の空白にされてしまったためです。

php.iniとか、引数とか、どこかで8タブにできないのかな~?と5分ほど調べていて、見つけました。こんなソースコードを・・・

zend_highlight.cというファイルの中に、こういう関数があります。

ZEND_API void zend_html_putc(char c)
{
        switch (c) {
                case '\n':
                        ZEND_PUTS("<br />");
                        break;
                case '<':
                        ZEND_PUTS("&lt;");
                        break;
                case '>':
                        ZEND_PUTS("&gt;");
                        break;
                case '&':
                        ZEND_PUTS("&amp;");
                        break;
                case ' ':
                        ZEND_PUTS("&nbsp;");
                        break;
                case '\t':
                        ZEND_PUTS("&nbsp;&nbsp;&nbsp;&nbsp;");
                        break;
                default:
                        ZEND_PUTC(c);
                        break;
        }
}

すべてのタブは、空白4文字に置き換えているみたいです。桁位置も考慮せずに?!

これを見てしまうと、なんかダメっぽいですね。

もともとphpのコーディングガイドラインでも、「タブは使わずに、空白を使え」というのがあったような気がします。もしかすると、それを守らせるために、わざとこんなことをやっているのかも知れない、そんな気がしてきました。




cvswebという、CVSレポジトリの内容をWebブラウザで見られるようにするツールがあります。FreeBSDのportsの、/usr/ports/devel/cvsweb3 にありますが、これでも、syntax highlighteningができます。

ただし、phpのコードは、ごく普通にシンプルなままで表示されてしまいます。



200810273



どこで見つけたのかすっかり忘れてしまいましたが、cvsweb.cgiのパッチを以前見つけて、それを使うと、PHPのファイルが、色つきで表示されます。

実はそのパッチは、「php -s」でやってるので、上記のようにタブが入っていると、インデントがずれてしまいます。

ちょっと直してみました。こんなパッチのように、expandコマンドを使って、タブをスペースに変換してやれば、インデントがずれなくなるみたいです。

「cvsweb.cgi.diff.txt」をダウンロード




200810274





私は、perlの、いまどきなカッコイイ書き方がよくわからず、IPC::Runのマニュアルを眺めていて、どうもそれでいいみたい?程度の確信度でcvsweb.cgi書き換えたので、本当にこれでいいのか、よくわかりません。



0 件のコメント:

コメントを投稿