ちゃだろぐ

computing

< 2012-05 >
  12345
6789101112
13141516171819
20212223242526
2728293031  
Powered by Nucleus CMS
Total1725157 7days2568 Yesterday368 Today312
Since 2004-07-11

Nucleus

NP_SimpleParagraphs Ver. 0.2

NP_SimpleParagraphs Ver. 0.2[263clicks]です。

次の変換を可能にするプラグインです。

変換前

最初の段落1行目\n
2行目\n
3行目\n
\n
次の段落1行目\n
2行目

変換後

<p>最初の段落1行目<br />
2行目<br />
3行目</p>
<p>次の段落1行目<br />
2行目</p>

既に(X)HTMLでマークアップされたブロック要素には変更を加えません。従って、

  • 平文テキスト
  • (X)HTML
  • Wiki (NP_Wikistyle 使用)

など、様々な方法でマークアップされた記事が混在する環境での平文テキストのフォーマットに有効だと思います。

作成の動機

私家版 NP_Wikistyle の機能を明示的なブロック要素(~, *, +, -)のマークアップに限定し、残りの明示的でない段落のマークアップを NP_SmartParagraphs にやってもらおうと思ったのですが、これがちょっと Smart 過ぎて、あらかじめ (X)HTML でマークアップされているソースにまで変更を加えてくれるものですから、あまり具合がよくありません。記事の作者により明示されているブロック要素は作者の管理下にあるものとして、機械的なプリプロセッサが余計なお節介をしないようにしないと、作者による制御が不可能になってしまいます。

そこで NP_SmartParagraphs の使用を諦め、代りに平文テキスト(Plain text)だけを抽出して <p> 〜 </p> で囲んで段落としてマークアップするだけのシンプルなプラグインを作成しました。

設計仕様

  • (X)HTML と Plain text が混在したソースの、Plain text 部分だけを抽出して段落としてマークアップ処理する。
  • ブロック要素の開始タグ〜終了タグまでは記事の作者の管理下にあるとして、変更を加えない。検出するブロック要素は、以下の通り。
    p, pre, h[1-6], address, blockquote, ol, ul, dl, form, table, hr
  • ブロック要素の開始タグに対応した終了タグが見つけられないと要素の範囲が特定できないため、テキストの最後までそのブロック要素が続いているものとして変更を加えない。
    この場合、テキストの末尾に開きっぱなしのブロック要素の終了タグを追加する。(この点、ちょっとお節介)

機能と処理

機能は下記の通り、至ってシンプルなものです。

  • ブロック要素としてマークアップされていない部分を抽出し、その部分の先頭を段落の開始として <p> でマークアップする。
  • 抽出された部分の中に空行があった場合、そこを段落の切れ目として一旦 </p> で閉じる。その後ろから改めて <p> で段落を再開する。
  • 段落の途中で改行があって、かつ <br /> でマークアップされていない場合、行末に <br /> を付加する。
  • 抽出された部分の末尾を </p> で閉じる。

何分、プラグインを書くのも、PHPを書くことすらほとんど初めてで、見様見真似で作った習作ですので、ムダな部分もあるかもしれません。ご指摘いただければ幸いです。

使用例は、下記をご覧下さい。

サンプル

例1 - ソース

最初の段落1行目
2行目
3行目

次の段落1行目
2行目

例1 - 出力

最初の段落1行目
2行目
3行目

次の段落1行目
2行目

例2 - ソース

明示的でない段落
<p>明示的な段落</p>
明示的でない段落
<h4>明示的なブロック要素、例えば見出し</h4>
明示的でない段落

例2 - 出力

明示的でない段落

明示的な段落

明示的でない段落

明示的なブロック要素、例えば見出し

明示的でない段落

2004-07-22_23:04-tyada

Related