Nucleusで指定した範囲に改行タグを入れない方法

Nucleusでは、編集画面で入力した改行は全て<br />タグに変換されます。
しかし、<pre>タグや<table>タグなどを使う場合には、間に<br />タグが入ってしまうと都合の悪いことも多々あります。

そんな時に役立つのが、NP_StripBRで、<%nobr%>と<%/nobr%>で囲った範囲に<br />タグを入れないようにしてくれます。

ところが、例えば<div>タグの前後に改行を入れたくない場合というのが結構あります。
前はいいのですが、特に後ろに改行が入ってしまうと、<div>のボックスと次の行の間に1行空いてしまうからです。

その場合、通常は次のように書きます。

ほげほげ<div class="english">What is this ?
This is a pen.</div>ふがふが

あるいは、NP_StripBRを使った場合は次のように書けます。

ほげほげ<%nobr%>
<%/nobr%><div class="english">What is this ?
This is a pen.</div><%nobr%>
<%/nobr%>ふがふが

しかしどちらも見づらく、あまり美しくありません。

そこで、<%nobr/%>というのを作ってみました。
これは、このタグの直後に現れる改行を消すというものです。

先ほどの例ですと、

ほげほげ<%nobr/%>
<div class="english">What is this ?
This is a pen.</div><%nobr/%>
ふがふが

といったように書けるようになります。

これでどれくらい嬉しくなるのか、人によると思いますが、ひとまずソースを公開しますので、使いたい方は使ってみて下さい。

<?php
// plugin needs to work on Nucleus versions <=2.0 as well
if (!function_exists('sql_table')) {
    function sql_table($name) {
        return 'nucleus_' . $name;
    }
}

class NP_StripBR extends NucleusPlugin {
    function getName() { return 'StripBR'; }
    function getAuthor() { return 'IWAMA Kazuhiko / yuuAn'; }
    function getURL() { return 'http://www.yuuan.net/blog/index.php?itemid=622'; }
    function getVersion() { return '0.011'; }
    function getDescription() {
        return 'Remove linebreaks';
    }
    function getEventList() {
        return array('PreItem');
    }
    function supportsFeature($what) {
        switch ($what) {
            case 'SqlTablePrefix':
                return 1;
            default:
                return 0;
        }
    }

    function replaceCallback($matches) {
        return removeBreaks($matches[1]);
    }

    function event_PreItem($data) {
        $this->currentItem = &$data["item"];
        // <%nobr%>-<%/nobr%>
        $this->currentItem->body = preg_replace_callback(
                '#<%nobr%>(.*?)<%/nobr%>#s',
                array(&$this, 'replaceCallback'),
                $this->currentItem->body
            );
        $this->currentItem->more = preg_replace_callback(
                '#<%nobr%>(.*?)<%/nobr%>#s',
                array(&$this, 'replaceCallback'),
                $this->currentItem->more
            );
        // <%nobr/%>
        $this->currentItem->body = preg_replace(
             '#<%nobr/%>(:?<br />)?#s',
             '',
                $this->currentItem->body
            );
        $this->currentItem->more = preg_replace(
             '#<%nobr/%>(:?<br />)?#s',
             '',
                $this->currentItem->more
            );

    }
}
?>

赤字の部分が今回改変した部分です。
割と簡単なコードなので、興味がある方は自己流にアレンジしてみるといいと思います。

■ 追記

GitHubで公開しました。

コメントを残す