3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

erusev/Parsedownのcode部分のみ簡易拡張

Last updated at Posted at 2019-01-17

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;
  }
}
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?