レンダラに渡す設定
レンダラに渡す設定は、以下のように配列で記述する。全ての項目は省略可能である。
<?php
$config = array(
// ヘッダの基準値。デフォルトは1
'headerlevel' => 3,
// 記事の識別子。指定しない場合はランダムなIDが生成される
'id' => 'hoge',
// htmlをエスケープするか。デフォルトはtrue。
'htmlescape' => false,
// 記事本体を囲むdiv要素のクラス。デフォルトは'section'
'sectionclass' => 'section',
// 脚注を囲むdiv要素のクラス。デフォルトは'footnote'
'footnoteclass' => 'footnote',
// キーワード記法のキーワードをアドレスに処理するコールバック
'keywordlinkhanlder' => 'keywordLinkHandler',
// superpre記法の中身を処理するコールバック
'superprehandler' => 'spreHandler',
// [http://~~:title]のリンクを処理するコールバック
'linktitlehandler' => 'linkTitleHandler'
);
echo HatenaSyntax::render($str, $config);
各項目については以下で説明する。
headerlevel - ヘッダの基準値
はてな記法のヘッダの基準値を設定する。例えば 1 に設定した場合、'*'がひとつの見出し記法はh1タグを使って変換される。
<?php
echo HatenaSyntax::render('* header', array('headerlevel' => 1));
/*
<div class="section">
<h1> header<a name="dd7a3c428fa04b8456e3d47d6d930092_header_0" id="dd7a3c428fa04b8456e3d47d6d930092_header_0"></a></h1>
</div>
*/
id - 記事の識別子
ページ内リンクで利用される記事の識別子を指定する。
指定されなかった場合はランダムなidが生成される。
htmlescape - HTMLをエスケープするか
はてな記法内のHTMLをエスケープするか否か。
デフォルトはfalse。
sectionclass - 記事を囲むdiv要素のクラス
記事を囲むdiv要素のクラス属性を指定する。
デフォルトは'section'。
footnoteclass - 脚注を囲むdiv要素のクラス
脚注を囲むdiv要素のクラス属性を指定する。
デフォルトは'footnote'。
keywordlinkhandler - キーワード記法のキーワードをアドレスに変換するコールバック
キーワード記法のキーワードからアドレスを返すコールバックを指定する。
<?php
function handler($keyword)
{
return './' . $keyword;
}
$str = '[[my_keyword]]';
echo HatenaSyntax::render($str, array('keywordlinkhandler' => 'handler'));
/*
<div class="section">
<p><a href="./my_keyword">my_keyword</a></p>
</div>
*/
superprehandler - superpre記法の中身を処理するコールバック
suprepre記法の中身を処理するコールバックを指定する。
コールバックに渡される引数
最初の引数にその文書の種類(>|hoge|~~||<のhogeの部分)が渡され、二番目の引数に中身の行の配列が渡される。行の配列は、htmlescapeの値に関わらずhtmlエスケープされないので注意する。
例
<?php
function spre($type, Array $lines)
{
foreach ($lines as &$line) {
$line = htmlspecialchars($line, ENT_QUOTES, 'UTF-8');
}
return '<pre>' . PHP_EOL . join(PHP_EOL, $lines) . '</pre>' . PHP_EOL;
}
$str = '
>|php|
Lorem ipsum dolor sit amet,
consectetur adipisicing elit,
sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua.
||<';
echo HatenaSyntax::render($str, array('superprehandler' => 'spre'));
/*
<div class="section">
<pre>
Lorem ipsum dolor sit amet,
consectetur adipisicing elit,
sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua. </pre>
</div>
*/
linktitlehandler - リンクのタイトルを処理するコールバック
[http://example.com:title]という形式のhttp記法をhtmlに変換する際に、URLからタイトルを取得するコールバックを指定する。このコールバックは、引数にURLを取ってタイトルを返さなければならない。