codeタグを拡張したかった。
理由は、(teratail)のマークダウン表示の真似をしたかったからです。
真似をするには、cssも必要ですが、今回は記載しません。
parsedownは、デフォルトだと、下記のように出力されてしまいます。
<pre><code class="language-php">コード</code></pre>
それをこのようにしたいと思いました。
<pre class="language-php"><code class="hljs language-php" data-language="php">コード</code></pre>
作業をするにあたって
■こちらの記事が参考になりました。拡張方法の詳細など詳しく載っています。
https://blog.keinos.com/20180128_3166
##以下、上記URLを読んで頂いた前提で、話を進めさせて頂きたいと思います。
拡張の説明が少ない
公式チュートリアルを実際にやる。→ソースコードを読む
の流れがオススメだと思います。
https://github.com/erusev/parsedown/wiki/Tutorial:-Create-Extensions#change-element-markup
ちなみに、インライン画像のマークダウンは、このような形です。これを食わせてください。
$markdown_txt = '![alt text](https://github.com/icon48.png "Logo Title Text 1")';
$converted_txt = $Extension->text($markdown_txt);
答え
class Extension extends Parsedown {
protected function blockFencedCode($excerpt) {
$language_name = substr($excerpt['body'], 3);
$code = parent::blockFencedCode($excerpt);
$code['element']['attributes']['class'] = $code['element']['text']['attributes']['class'];
$code['element']['text']['attributes']['class'] = 'hljs ' . $code['element']['text']['attributes']['class'];
$code['element']['text']['attributes']['data-language'] = $language_name;
return $code;
}
}