laravel-markdown-itとは
前の記事で、PHP版Markdown-itについて軽く触れたが、そのパッケージを使用し、 Laravelで簡単に使用できるパッケージを作った。javascript 版の markdown-itと互換性があるので、デモサイトで動作確認ができる。
インストール
composer:composer.json
に以下のように追加する
"require": {
...
"kaoken/laravel-markdown-it":"1.0.*"
}
その後更新
composer update
初期設定
config\app.php
へ以下を追加:
'providers' => [
...
Kaoken\LaravelMarkdownIt\MarkdownItServiceProvider::class,
],
'aliases' => [
...
'MarkdownIt' => Kaoken\LaravelMarkdownIt\Facades\MarkdownIt::class,
],
コマンド
php artisan vender:publish
上記コマンドを実行することによって、config
ディレクトリにmarkdownit.php
が作られる。
オプションとルールのコンフィグファイル
デフォルトで全てのオプションとルールが使用可能になっている。下記のconfig\markdownit.php
のhoge['options_rules_group']['default']
がそれにあたる。オプション(
"options"
)とルール("enable"
,"disable"
)の説明は、hoge['options_rules_group']['default']
の各パラメーターごとのコメントを見てほしい。
もし、新たなオプションとルールを追加したい場合、下記コメントのオプションと管理ルールを追加
の下にあるコメントをはずし"example"
の内容を書き換える。 <?php
return [
'set_options_rules' => 'default',
'options_rules_group' =>[
'default' => [
'options'=> [
'html'=> true, // ソースでHTMLタグを有効にする
'xhtmlOut'=> true, // 単一のタグを閉じるには、「/」を使用する(<br />)
'breaks'=> true, // 段落内の ' \n ' を <br> に変換する
'langPrefix'=> 'language-', // フェンスブロックのCSS言語接頭辞
'linkify'=> true, // url のようなテキストをリンクに自動変換する
// いくつかの言語中立的な置換+引用符の美化を有効にする。
'typographer'=> false,
// 二重引用符または一重引用符の置換ペアをタイポグラファーを有効にし、
// スマートクォートがオンのときStringまたはArrayのいずれかになる。
//
// たとえば、ロシア語では '«»„“' 、ドイツ語では '„“‚‘' 、フランス語では(nbspを含む)
// ['«\xA0', '\xA0»', '‹\xA0', '\xA0›']を使用できる。
'quotes'=> '“”‘’', /* “”‘’ */
// ハイライト機能。 エスケープされたHTMLを返す必要がある。
// ソース文字列が変更されておらず、外部からエスケープされなければならない場合は '' を返す。
// 結果が<pre ...で始まる場合、内部ラッパーはスキップされる。
//
// function (/*str, lang*/) { return ''; }
//
'highlight'=> null,
'maxNesting'=> 100 // 内部保護、再帰制限
],
/**
* ルール管理!
* `'enable'`が、有効にしたいルールを追加する。
* `'disable'`が、無効にしたいルールを追加する。
* デフォルトではすべてのルールが有効。
* @see https://github.com/markdown-it/markdown-it/tree/master/benchmark/samples
*/
'enable' => [
/**
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/inline-autolink.md
*/
'autolink',
/**
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/inline-backticks.md
*/
'backticks',
/**
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/block-bq-flat.md
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/block-bq-nested.md
*/
'blockquote',
/**
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/block-code.md
*/
'code',
/**
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/inline-em-flat.md
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/inline-em-nested.md
*/
'emphasis',
/**
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/inline-entity.md
*/
'entity',
/**
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/inline-escape.md
*/
'escape',
/**
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/block-fences.md
*/
'fence',
/**
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/block-heading.md
*/
'heading',
/**
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/block-hr.md
*/
'hr',
/**
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/block-html.md
*/
'html_block',
/**
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/inline-html.md
*/
'html_inline',
/**
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/inline-links-flat.md
*/
'image',
/**
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/block-lheading.md
*/
'lheading',
/**
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/inline-links-flat.md
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/inline-links-nested.md
*/
'link',
/**
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/block-list-flat.md
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/block-list-nested.md
*/
'list',
/**
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/inline-newlines.md
*/
'newline',
/**
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/block-ref-flat.md
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/block-ref-list.md
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/block-ref-nested.md
*/
'reference',
'strikethrough',
/**
* @see https://github.com/markdown-it/markdown-it/blob/master/benchmark/samples/block-tables.md
*/
'table'
],
'disable' => [
]
],
/**
* オプションとルールを追加
*/
/*
'example' => [
'options'=> [
'html'=> false,
'xhtmlOut'=> false,
'breaks'=> false,
'langPrefix'=> 'language-',
'linkify'=> false,
'typographer'=> false
],
'enable' => [
'backticks',
'blockquote',
'emphasis',
'heading',
'list',
'newline',
],
'disable' => [
'autolink',
'code',
'entity',
'escape',
'fence',
'hr',
'html_block',
'html_inline',
'image',
'lheading',
'link',
'reference',
'table'
]
]
*/
]
];
簡単な使い方
use MarkdownIt;
class hoge{
public function test(){
// `default`のオプションとルールのグループがセットされている。
$result1 = MarkdownIt::render('# markdown-it rulezz!');
// `example`のオプションとルールのグループがセットされる。
$result2 = MarkdownIt::setOptionsRules("example")
->render('# markdown-it rulezz!');
}
}
単一行レンダリング、段落の折り返しなし:
use MarkdownIt;
class hoge{
public function test(){
// `default`のオプションとルールのグループがセットされている。
$result1 = MarkdownIt::renderInline('__markdown-it__ rulezz!');
// `example`のオプションとルールのグループがセットされる。
$result2 = MarkdownIt::setOptionsRules("example")
->renderInline('__markdown-it__ rulezz!');
}
}
適当なコントローラー内にコードを書き、dd
関数や、ビューなどで確認しても良いかもしれない。 Linkify
linkify: true
linkify-itインスタンスにアクセスする。
use MarkdownIt;
class hoge{
public function test(){
// .pyをトップレベルドメインとして無効にする
MarkdownIt::linkify()->tlds('.py', false);
}
}