2006年11月07日

Simple Text Filter - 1.02

Simple Text Filter について

この Movable Type 用のプラグインは、シンプルなテキストフィルター(改行設定)です。入力されたテキストを XHTML の部分として適切な形に整形します。

プラグインをインストールすると、テキストフィルターの種類に、このテキストフィルター(のラベル) 'Simple' が加わります。

このテキストフィルター 'Simple' を通すと、入力されたテキストの各段落を p タグで囲むようにし、そのとき段落内の改行の直前に br タグを追加します。しかしまた、入力テキスト中にタグを手入力した部分がある場合は、その部分については一切変換しないようにします。ただしその場合でも p タグで囲ってもよいタグは、その前後のテキストと共に、 p タグで囲むようにします。

これは、デフォルトで用意されているフィルター「改行を変換する」と同じように動作するように見えます。しかし「改行を変換する」とは異なり、ユーザーがテキスト中に入力した XHTML タグは、ユーザー自身が面倒を見るというスタンスをとり、これをいじらないように気を使います。たとえば、すべてのテキストを XHTML の部分として入力した場合は、改行設定「なし」と同じ結果にもなります。

変換ルールをまとめると、次のようになります。──いずれにせよわかりづらいので、例のセクションを参照してください。

  1. テキストは、ふたつの連続する改行で、段落に分割される。
  2. 段落の中に p タグが内包できないタグがある場合、その開始タグ直前、終了タグ直後の位置で更に段落に分割される。
  3. p タグが内包できないタグの部分は、そのままの状態が保たれる。
  4. 各段落は p タグで囲まれる。ただし空白文字しかない場合は囲まない。
  5. p タグで囲まれた段落内に改行がある場合、改行の直前に br タグが追加される。ただし改行までに空白文字しかない行では追加されない。

ここで、 p タグが内包できないタグとは、 Movable Type (3.33-ja) で生成されるページは XHTML1.0 Transitional ですので、それに則ると、次の要素になります:

address area base blockquote body caption center col colgroup dd dir div dl dt fieldset form h1 h2 h3 h4 h5 h6 head hr html isindex legend li link menu meta noframes noscript ol optgroup option p param pre style table tbody td tfoot th thead title tr ul

ついでなので p タグが内包できる要素も列挙します。これらのタグの場合は段落に分割はされません(テキストそのままと同等の扱いをうけます)。

a abbr acronym applet b basefont bdo big br button cite code del dfn em font i iframe img input ins kbd label map object q s samp script select small span strike strong sub sup textarea tt u var

なおこのプラグインを作るにあたって、テストを行った環境は Movable Type 3.33-ja および Perl のバージョンは Perl 5.8.1RC3 、テキストエンコーディングは utf-8 です。この他の環境については考慮されていません。

例を見てみます。まず入力するテキスト:

サンプルテキスト。
この段落は2行です。

<div><i>
DIV タグの内部です。その中身はそのままです。
内部では、改行されてもそこは br タグにはなりません。</i></div>
DIV の外に出ました。
p タグが食いつきます。

新しい3行の段落です。
ここには <a href="...">このように</a> a タグがありますが、
しかし p タグで囲まれます。

<p>p タグを手入力してみます。</p>

この直後の3行は同じく空の行に見えますが、2行目には空白文字があります。

 

この上に。しかし、空白だけなので無視されます。
次の直後の4行は、空行1行、空白文字のある2行に続き、テキストがあります。

 
 
この上2行は空白文字のある行で、それに続いてこのテキストがあります。

これは、次のように変換されます:

<p>サンプルテキスト。<br />
この段落は2行です。</p>

<div><i>
DIV タグの内部です。その中身はそのままです。
内部では、改行されてもそこは br タグにはなりません。</i></div>
<p>DIV の外に出ました。<br />
p タグが食いつきます。</p>

<p>新しい3行の段落です。<br />
ここには <a href="...">このように</a> a タグがありますが、<br />
しかし p タグで囲まれます。</p>

<p>p タグを手入力してみます。</p>

<p>この直後の3行は同じく空の行に見えますが、2行目には空白文字があります。</p>

 

<p>この上に。しかし、空白だけなので無視されます。<br />
次の直後の4行は、空行1行、空白文字のある2行に続き、テキストがあります。</p>

<p> 
 
この上2行は空白文字のある行で、それに続いてこのテキストがあります。</p>


テキストフィルターの識別子

このテキストフィルターの識別子は 'simple_text_filter' です。

テキストフィルター(改行設定)はその識別子でエントリーに結びつけられます。ためしに「書き出し」をしてみると、その結びつきを確認できます。その関係はテキストフィルター・プラグインの利用を取りやめたあとでも保たれ続けるため、その場合のエントリーの改行設定は「なし」が適用されることになります。プラグインを再び有効にすれば、そのテキストフィルターが適用できる状態に戻ります。

もしくは、完全にテキストフィルター・プラグインの利用をやめたいときは、各エントリーの設定でこの結びつきを変更します。複数のエントリーのテキストフィルターを一括して変更したい場合は、付属するユーティリティを用いる事ができます。

ダウンロード

更新履歴

  • version 1.02 (2006-11-07)
    • コメント・タグが考慮されていなかったため、コメントによって無用な P タグが生成されてしまっていた問題を修正。
  • version 1.01 (2006-10-20)

トラックバック

このツールのトラックバック URL :
http://hwat.sakura.ne.jp/mt/ftb.cgi/352
(このツールのバージョン固有の事柄については、バージョンごとのページにトラックバックしてください。)

広告