はじめに
今回は、使用しているLravelのバージョンが5.3で、Markdownを導入したかったので、良い物が無いか調べてみた。Markdownの種類
Laravelですぐに使用したい場合は、Laravel Markdownが良いみたい。Laravel専用だけあってREADME.mdの通りに構築すればすぐに構築できた。
だが・・・、githubで使用できるmarkdown形式が使用できない(tableなど)それが残念だ。
あと、機能ごと(tableのみ、headlineのみ、引用のみ)などの個々の機能単位で有効/無効までのコンフィグができない・・・
残念ながら、今回は使用しません。
なので、少々手間がかかるのだが、cebe/markdownを使ってみることにする。
構築&作成
ならば、サービスプロバイダー&ファサードを使って、新たなvendorまたはappディレクトリ内などで作ってしまおうと^^ここで、サービスプロバイダー&ファサードのことを語ると、とんでもない量になるので、リンクから詳しくは情報を得てくれ
で、app/config/markdown.php と、コンフィグファイルを作り、個々で機能の有効/無効ができたわけです。
<?php return [ 'html' => 'html5', 'render' => 'default', 'render_group' =>[ 'default' => [ 'code' => true, 'del' => true, 'headline' => true, 'hr' => true, 'img' => true, 'quote' => true, 'link' => true, 'list_disc' => true, 'list_decimal' => true, 'strong' => true, 'table' => true ], 'profile' => [ 'code' => false, 'del' => true, 'headline' => true, 'hr' => false, 'img' => false, 'quote' => true, 'link' => false, 'list_disc' => true, 'list_decimal' => true, 'strong' => true, 'table' => false, ] ] ];で、cebe/markdownで、引用の入れ子が1層しか対応していないので、
下記の引用があった場合。
> 引用
>> 引用
>> 引用
>> 引用
>> 引用
通常こうなる。
引用
>引用
>引用
手を加えて下記のようにするには、
引用引用
引用
\cebe\markdown\block\QuoteTrait.php
を参考に下記のように作り替えました。
<?php namespace App\Library\Markdown\block; /** * Adds the block quote elements */ trait QuoteTrait { /** * identify a line as the beginning of a block quote. */ protected function identifyQuote($line) { return preg_match("/^\s*>/",$line); } /** * Consume lines for a blockquote element */ protected function consumeQuote($lines, $current) { // consume until newline $content = []; for ($i = $current, $count = count($lines); $i < $count; $i++) { $line = &$lines[$i]; if (ltrim($line) !== '') { if ($line[0] == '>' && !isset($line[1])) { $line = ''; } else{ for($j=0;$j<strlen($line);$j++){ if( $line[$j] === ' ' || $line[$j] === "\t") continue; else if($line[$j] === '>'){ $line = substr($line, $j+1); } break; } } $content[] = $line; } else { break; } } $block = [ 'quote', 'content' => $this->parseBlocks($content), 'simple' => true, ]; return [$block, $i]; } /** * Renders a blockquote */ protected function renderQuote($block) { return '<blockquote>' . $this->renderAbsy($block['content']) . "</blockquote>\n"; } abstract protected function parseBlocks($lines); abstract protected function renderAbsy($absy); }とるすことによって、対応する。namespace は、環境に合わせて変える!
ここまで来れば、思い描いた物は作れるはずです。
自分の場合は、だいたい下記のような感じで使ってます。
use Markdown; $markdown = Markdown::parse($text,'profile');
最後に
読んでみて、ほとんどの人が、書いている意味が分からないと思いますw対象者としては、Lravelで余裕でプラグイン等を作れる人でしょうね^^;
これは、自分用のメモかな^^;^^;^^; orz