Forked One Line to Paragraph plugin
Movable Type というブログシステムのための、プラグインのお話。
MT では投稿したテキストをどのようにフォーマットするかを、改行設定というエントリ毎の設定で選択することができます。改行設定を「なし」にすれば、投稿したテキストを無改変で素のまま載せることもできます。この「改行設定」という日本語訳は、オリジナルの英語が “Text Formatting” なので、少し意味が違ってしまってるかなと思います。歴史的な理由があるような気もしますが。
MT 3.3 には「改行を変換する ( Convert Line Breaks )」というフォーマットが予め用意されていて、これは一つの改行を強制改行の br 要素に変換し、2 つ連続した改行を段落の p 要素に変換するフォーマットです。ブロック要素は変換対象にしないので、例えば普通のテキストに XHTML で ul 要素によるリストを混在させたり、手動で p 要素を記述したりすることができます。自然な形でブログを書くことができる、バランスの良いフォーマットです。XHTML が解る人にも解らない人にも優しいです。
さて、ここで私が長く愛用している、お薦めのフォーマットを紹介します。MT はプラグインを導入することでフォーマットを追加することができます。Shinya さんが公開した One Line to Paragraph プラグインは、MT に前述した「改行を変換する」の改良版とも言えるパワフルなフォーマット line2paragraph を提供します。
「改行を変換する」フォーマットには、3 回以上連続した改行が空の段落に変換されてしまったり、pre 要素内の 2 回以上連続した改行によって pre 要素内に p 要素ができてしまったりする弱点があります。line2paragraph は強制改行の撤廃と、これらの弱点を補ってくれるフォーマットで、より XHTML を理解している人向けのフォーマットです。
ところで、XHTML のコーディングスタイルは人それぞれですが、DOM のツリー構造に倣って行頭をインデントしたい場合に、MT だと <$MTEntryBody$> などが展開された部分だけガクっとインデントが崩れてしまう不満が私にはありました。一例を示します。
<div class="entry-content">
<div class="entry-body">
<$MTEntryBody$>
</div>
</div>
このテンプレートで <$MTEntryBody$> が展開されると次のようになります。
<div class="entry-content">
<div class="entry-body">
<p>一行目はインデントされてるのに。</p>
<pre>二行目以降、インデントレベルが
ガクン
と落ちて
崩れる。</pre>
<ul>
<li>これでは美観を損ねる。</li>
</ul>
</div>
</div>
XHTML は最終的にコンピュータが読むものですから、インデントに本質的な意味はなく、それは MT のような管理システムで自動的に生成される XHTML ならなおさらです。自動化されたシステムに、無駄な人間の美的感覚が入り込む余地はないと言えばないです。でも、無意味なことに情熱を注ぎたいわけで、次のように展開されて欲しいわけです。
<div class="entry-content">
<div class="entry-body">
<p>理想のインデント。</p>
<pre>インデントレベルが
ガクン
と落ちない
崩れない。</pre>
<ul>
<li>pre 要素内は整形済みなのでインデントされると困る。</li>
</ul>
</div>
</div>
というわけで、One Line to Paragraph プラグインを改造して、インデント機能を付け加えました。
- plugins/
アーカイブをそのまま plugins/ に展開すればインストールされます。デフォルトの設定ではインデント機能が無効で、line2paragraph と同等の処理をします。インデントを有効にするためには、プラグインの設定をします。
「インデント・文字」でインデントにタブ文字かスペース文字のどちらを用いるか設定します。「インデント・レベル」でインデントの文字数を設定します。アーカイブ種類毎の設定において、0 は無効ではなく継承を意味し、全体の設定を受け継ぎます。また、アーカイブ種類毎の設定では +/- を用いて全体の設定から加算・減算することもできます。減算結果がマイナスの場合は無効になります。
無駄に複雑でややこしく、直感的ではないかもしれないので表にします。
| 設定値 ( N: 整数 ) | 全体 | アーカイブ種類別 |
|---|---|---|
0 | 無効 | 全体を継承 |
N | 有効 | 有効 |
+N | 全体に加算 | |
-N | 全体から減算 |
改造してみて、<$MTEntryBody indent="3"$> みたいなフィルタとして分けて実装した方が良かったかもしれない、と思った。今後の予定は、日本語と英語がテキトーなので直す。
感想、バグ、要望、批評など、お気軽にフィードバックをお寄せください。
- タグ
- Movable Type
- Perl
- plugins
- XHTML
- 公開日時
- 2006-09-30T09:59:27+09:00 @082
- 更新日時
- 2006-10-01T00:43:27+09:00 @696
- Permalink URI & TrackBack URL
- http://blog.drry.jp/2006/09/30/forked-line-paragraph
コメント