Category prog.

emacs がなかなか使えなかった理由はタブインデントをデフォルトでちゃんとしてくれないからだった。今までは色の設定を変えるのが面倒臭いからだと思ってた。

class Foo
\tdef initialize(hoge, huga)
\t\tfoooooooooooooooooooo(aaaaaaaaaaaaaaa,
\t\t                      bbbbbbbbbbbbbbb)
\tend
end

本当は上記のようにインデント (環境が変わってタブ幅が変わっても問題が起きないタブインデント) をさせたいんだけど、さすがに無理っぽいので、タブの部分だけちゃんとできていればいいことにした。

人それぞれ読みやすいインデント幅は違うから、誰にでも読みやすいソースを書くならタブでインデントすべきだと思ってる。でも全部タブにすればいいってわけじゃなくて、文字幅が重要なところには、ちゃんとスペースを使いたい、みたいな。

そんなにこだわる必要はないんだけど、少なくともタブインデントじゃないとコードを書く気がしないことに気付いた。いやむしろ、タブインデントにすると書きたくなる (謎)

  1. トップ
  2. life
  3. 色じゃなかったんだ。タブだったんだ。
  1. トップ
  2. prog
  3. 色じゃなかったんだ。タブだったんだ。

GeSHi - Generic Syntax Highlighter を使うようにした。対応言語が多いことと、シンタックスファイルを増やし易いことがいい感じ。ただし時々 well-formed じゃないエラーがでることがあるっぽい。

  1. トップ
  2. prog
  3. ソースの色づけを復活 2
  1. トップ
  2. js
  3. ソースの色づけを復活 2
  1. トップ
  2. site
  3. ソースの色づけを復活 2
  1. トップ
  2. prog
  3. ソースの色づけを復活 2

pre だけ色付けするようにした。

前に Pure JavaScript で色つけていたことがあったけど、あからさまにブラクラだった。で、なんとなく思いついたのでもっかい別の方法で実装してみた。

なんていうか非常にローテクといいますか他力本願な方法でして、PEAR::Text_Hightlighter に Ajax で丸投げというソリューションでございますです。

<?php
header("content-type: text/xml");
require_once 'Text/Highlighter.php';
require_once 'Text/Highlighter/Renderer/Html.php';
$options = array(
'numbers' => HL_NUMBERS_LI,
'tabsize' => 4,
);
$renderer =& new Text_Highlighter_Renderer_HTML($options);
$hl =& Text_Highlighter::factory($_GET["lang"]);
$hl->setRenderer($renderer);
$ret = $hl->highlight($_GET["source"]);
echo '<div xmlns="http://www.w3.org/1999/xhtml">';
echo $ret;
echo '</div>';
?>

こんなスクリプト書いたら、あとは JSpre 要素列挙して投げてあげる。レスポンスを importNode して、pre と置き換える。みたいな。

でもこんなクソ簡単なスクリプトなのに IE ではちゃんとうごかない。importNode がだめなのか、それとも responseXML から importNode ができないのか……謎。

あーHtml.php の &nbsp; は全部 &#160; に置き換えた。DTD がないからエラーになる。

  1. トップ
  2. js
  3. ソースの色づけを復活
  1. トップ
  2. site
  3. ソースの色づけを復活
  1. トップ
  2. prog
  3. ソースの色づけを復活