pre三者三様
d:id:imait:20090207:1233991059では、はてなのpreがすごいといってました。どんな風にすごいか、ちょっと試してみました。例はJavaScriptのコードで、自作のツールの使い方を説明するために用意したもの。それを一部コピーしました。
その説明の文書はHTMLで書かれていたのですが、そこではこんな風にマークアップされていました:
function tableManager() { var <var>ctt</var> = new ClassTimeTable; var <var>targetDivision</var> = document.getElementById(<var>ctt</var>.getElementsid()); var <var>elementTable</var> = <var>ctt</var>.createClasstimetable(); var <var>oldTable</var> = document.getElementById('TBL_' + <var>ctt</var>.getElementsid()); if (<var>oldTable</var>) { if (<var>oldTable</var> != <var>elementTable</var>) { <var>targetDivision</var>.replaceChild(<var>elementTable</var>, <var>oldTable</var>); } } else { <var>targetDivision</var>.appendChild(<var>elementTable</var>); } var <var>waitTime</var> = 0; var <var>date</var> = new Date(); var <var>waitTemp</var> = 15 - ((<var>date</var>.getMinutes() % 15) + 1); <var>waitTime</var> += (<var>waitTemp</var>) * 60 * 1000; <var>waitTemp</var> = 60 - (<var>date</var>.getSeconds() + 1); <var>waitTime</var> += (<var>waitTemp</var>) * 1000; <var>waitTime</var> += 1002 - <var>date</var>.getMilliseconds(); setTimeout('tableManager()', <var>waitTime</var>); }
ブラウザではこう見えます:
function tableManager() { var ctt = new ClassTimeTable; var targetDivision = document.getElementById(ctt.getElementsid()); var elementTable = ctt.createClasstimetable(); var oldTable = document.getElementById('TBL_' + ctt.getElementsid()); if (oldTable) { if (oldTable != elementTable) { targetDivision.replaceChild(elementTable, oldTable); } } else { targetDivision.appendChild(elementTable); } var waitTime = 0; var date = new Date(); var waitTemp = 15 - ((date.getMinutes() % 15) + 1); waitTime += (waitTemp) * 60 * 1000; waitTemp = 60 - (date.getSeconds() + 1); waitTime += (waitTemp) * 1000; waitTime += 1002 - date.getMilliseconds(); setTimeout('tableManager()', waitTime); }
これをスーパーpre記法(シンタックス・ハイライト)でやると、つまりマークアップせず、そのままはてなの機能まかせにしてやるとこうなります:
function tableManager() { var ctt = new ClassTimeTable; var targetDivision = document.getElementById(ctt.getElementsid()); var elementTable = ctt.createClasstimetable(); var oldTable = document.getElementById('TBL_' + ctt.getElementsid()); if (oldTable) { if (oldTable != elementTable) { targetDivision.replaceChild(elementTable, oldTable); } } else { targetDivision.appendChild(elementTable); } var waitTime = 0; var date = new Date(); var waitTemp = 15 - ((date.getMinutes() % 15) + 1); waitTime += (waitTemp) * 60 * 1000; waitTemp = 60 - (date.getSeconds() + 1); waitTime += (waitTemp) * 1000; waitTime += 1002 - date.getMilliseconds(); setTimeout('tableManager()', waitTime); }
すごい楽! そして読みやすい。これはいいなあ。すごくいい機能だと思います。