Hoedown 拡張 (マークダウン処理)

  • KJ
  • 2014/11/17

Version: 0.5.1

Hoedown 拡張に Fenced Code スタイルのスクリプトタグと PHP コード出力を追加

Fenced Code スタイルのスクリプトタグの出力

Fenced Code スタイルのスクリプトタグの出力を行うには Hoedown::FFENCED_CODE_SCRIPT オプションを指定します。

fenced-code-script.php

 <?php
 $text = <<<EOT
 ``` script@text/javascript
 alert("Example");
 ```
 EOT;

 $hoedown = new Hoedown;

 echo $hoedown->parse($text);
 echo "-\n";

 $hoedown->setOption(Hoedown::FENCED_CODE_SCRIPT, true);

 echo $hoedown->parse($text);
$ php fenced-code-script.php
<pre><code class="language-script@text/javascript">alert(&quot;Example&quot;);
</code></pre>
-
<script type="text/javascript">
alert("Example");
</script>

PHP コードの出力

Hoedown::SCRIPT_TAGS オプションを指定するとマークダウンテキスト内に定義された PHP コード部分をそのまま出力することができます。 (正確には <??> に囲まれた部分になります。)

script-tags.php

<?php
$text = <<<EOT
PHP is <?php echo "example" ?> code.

<?php
echo "PHP block";
?>
EOT;

$hoedown = new Hoedown;

echo $hoedown->parse($text);
echo "-\n";

$hoedown->setOption(Hoedown::SCRIPT_TAGS, true);

echo $hoedown->parse($text);
$ php script-tags.php
<p>PHP is &lt;?php echo &quot;example&quot; ?&gt; code.</p>

<p>&lt;?php
echo &quot;PHP block
&quot;;
?&gt;</p>
-
<p>PHP is <?php echo "example" ?> code.</p>

<?php
echo "PHP block";
?>

Version: 0.4.1

Hoedown 拡張に Header ID、ユーザーブロック処理の追加

Header ID

ヘッダ ID の出力は Hoedown::HEADER_ID オプションを指定します。

header-test.php

<?php
$hoedown = new Hoedown;

echo $hoedown->parse("# Header");

$hoedown->setOption(Hoedown::HEADER_ID, true);
echo $hoedown->parse("# Header");
$ php header-test.php
<h1>Header</h1>
<h1 id="header">Header</h1>

ユーザーブロック

ユーザーブロックの処理は Hoedown::IS_USER でユーザーブロックの判別関数を指定し、Hoedown::RENDERSuserblock でレンダリング関数を指定します。

user-test.php

<?php
$hoedown = new Hoedown;

echo $hoedown->parse("<?php echo 'Test'; ?>"), PHP_EOL;

$hoedown->setOption(Hoedown::IS_USER, function($text) {
        if (preg_match('/^<\?php.*\?>/is', $text, $matches)) {
            return strlen($matches[0]);
        }
        return 0;
    });
echo $hoedown->parse("<?php echo 'Test'; ?>"), PHP_EOL;

$hoedown->setOption(Hoedown::RENDERS, ['userblock' => function($text) {
            ob_start();
            eval(substr($text, 5, -2));
            $retval = ob_get_contents();
            ob_end_clean();
            return $retval;
        }]);
echo $hoedown->parse("<?php echo 'Test'; ?>"), PHP_EOL;
$ php user-test.php
<p>&lt;?php echo &#39;Test&#39;; ?&gt;</p>

<?php echo 'Test'; ?>
Test

デフォルトオプション

この Hoedown 拡張 はデフォルトでは次のオプションが有効になっています。

  • Hoedown::TABLES
  • Hoedown::FENCED_CODE
  • Hoedown::AUTOLINK
  • Hoedown::STRIKETHROUGH
  • Hoedown::NO_INTRA_EMPHASIS

これは Hoedown クラスの呼び出し前に PHP INI 設定の hoedown.options を変更することでデフォルトのオプションを変更できます。

default-test.php

echo '[Default]', PHP_EOL;
echo 'ini: ', ini_get('hoedown.options'), PHP_EOL;
echo (new Hoedown)->parse("http://www.php.net"), PHP_EOL;

echo 'None default:', PHP_EOL;
ini_set('hoedown.options', '');
echo 'ini: ', ini_get('hoedown.options'), PHP_EOL;
echo (new Hoedown)->parse("http://www.php.net"), PHP_EOL;
$ php default-test.php
[Default]
ini: tables,fenced-code,autolink,strikethrough,no-intra-emphasis
<p><a href="http://www.php.net">http://www.php.net</a></p>

[None default]
ini:
<p>http://www.php.net</p>

インストール

PHP 拡張のビルドを行うためには次のものが必要になります。

  • phpize コマンド
  • PHP ヘッダファイル
  • gcc 等

ディストリビューションでは php-devel 等のパッケージをインストールしておけば問題ないと思います。

ビルドは次のコマンドを実行して行います。

$ git clone --recursive --depth=1 https://github.com/kjdev/php-ext-hoedown.git
$ cd php-ext-hoedown
$ phpize
$ ./configure
$ make
$ make test
$ make install

hoedown.so が PHPL の modules ディレクトリ (/usr/lib64/php/modules 等) にインストールできたら、設定ファイル (/etc/php.d/hoedown.ini 等) を作成します。

hoedown.ini

extension=hoedown.so

php -m を実行して hoedown という文字が表示されればインストール完了です。

ダウンロード

リポジトリ

github.com/kjdev/php-ext-hoedown

ソースファイル

php-ext-hoedown-0.5.1.tar.gz

RPM パッケージ

CentOS 6

php-pecl-hoedown-0.5.0

CentOS 7

php-pecl-hoedown-0.5.0

Fedora 20

php-pecl-hoedown-0.5.0

Windows (DLL)

VC11 x86 Non Thread Safe: PHP 5.6 (5.6.3)

VC11 x86 Thread Safe: PHP 5.6 (5.6.3)