LoginSignup
2
0

More than 5 years have passed since last update.

PHP版 Markdown itの紹介

Posted at

ここで紹介するのは、私が、javascriptで作られたMarkdownn itをPHP版に作り直したものの紹介です。
まぁ、nodo.jsを使って、php側から呼び出す方法がシンプルかもしれないが、「どうしてもPHPだけでやりたいんだ!」って人向けかな。

https://github.com/kaoken/markdown-it-php

markdown-it-php

licence php version

このジェムは、Puzrin とアレックス Kocharin による markdown-it Javascript packageポートになります。現在、markdown-it の最新版と同期しています。

Javascript Live demo

  • Follows the CommonMark spec + に続く構文拡張機能 & シュガー (URL 自動、タイポグラファー) を追加します。
  • 設定可能な構文!新しい規則を追加したり、既存のルールを置き換えたりすることもできます。
  • デフォルトで 安全です。

コンテンツの表

インストール

コンポ-サー:

composer install kaoken/markdown-it-php

シンプル版

$md = new MarkdownIt();
$result = $md->render('# markdown-it rulezz!');

段落折り返しなしの単一行レンダリング:

$md = new MarkdownIt();
$result = $md->renderInline('__markdown-it__ rulezz!');

プリセットとオプションを使用した初期化

(*) プリセットは、アクティブなルールとオプションの組み合わせを定義します。"commonmark""zero"、または "default" (スキップされた場合) を設定できます。

// コモンマークモード
$md = new MarkdownIt('commonmark');

// デフォルト モード
$md = new MarkdownIt();

// すべてを有効にする
$md = new MarkdownIt([
  "html"=>        true,
  "linkify"=>     true,
  "typographer"=> true
]);

// 全オプションリスト (デフォルト)
$md = new MarkdownIt([
  "html"=>         false,        // ソースで HTML タグを有効にする
  "xhtmlOut"=>     false,        // 単一のタグを閉じるには、'/' を使用します。(<br/>)
                                 // これは、CommonMarkの完全な互換性のためだけです。
  "breaks"=>       false,        // 段落の '\n'を<br>に変換する
  "langPrefix"=>   'language-',  // フェンスで囲まれたブロックの CSS 言語プレフィックス。
                                 // 外部ハイライトで便利です。
  "linkify"=>      false,        // URLに似たテキストをリンクに自動変換する

  // 言語に依存しないきれいな 置換 + 引用符 を有効にします。
  "typographer"=>  false,

  // タイポグラフィが有効になっているときにダブル+シングルクォートの置換ペア
  // とスマート引用符で。 StringまたはArrayのいずれかになります。
  //
  // たとえば、ロシア語は '«»„“'、ドイツ語は '„“‚‘'、
  // それと、フランス語の場合は ['«\xA0', '\xA0»', '‹\xA0', '\xA0›'] (nbspを含む)。
  "quotes"=> '“”‘’',

  // ソース文字列が変更されておらず、外部からエスケープする必要がある場合は
  // ハイライト関数。 エスケープされたHTMLを返す必要がある
  // $result が <pre... で始まる場合、内部ラッパーはスキップされます。
  "highlight"=> function (/*str, lang*/) { return ''; }
]);

プラグインの読み込み

$md = new MarkdownIt()
            ->plugin(plugin1)
            ->plugin(plugin2, opts, ...)
            ->plugin(plugin3);

構文のハイライト

highlight オプションを使用して、フェンスで囲まれたコードブロックに構文強調表示を適用します。:

ここのサンプルは、PHP言語のハイライトです。

// 実際のデフォルト値
$md = new MarkdownIt([
  "highlight"=> function ($str, $lang) {
    if ( $lang ) {
      try {
        return highlight_string($str);
      } catch (__) {}
    }

    return ''; // 外部デフォルトエスケープの使用
  }
]);

または、完全なラッパーのオーバーライド(<pre>にクラスを割り当てる必要がある場合):

// 実際のデフォルト値
$md = new MarkdownIt([
  "highlight"=> function ($str, $lang) {
    if ( $lang ) {
      try {
        return '<pre class="hljs"><code>' .
               highlight_string($str) .
               '</code></pre>';
      } catch (__) {}
    }

    return '<pre class="hljs"><code>' . $md->utils->escapeHtml($str) . '</code></pre>';
  }
]);

Linkify

linkify-itを使用する場合 linkify: true
linkify-itを設定するには、$md->linkifyを通してlinkifyインスタンスにアクセスします:

$md->linkify->tlds('.py', false);  // トップレベルドメインとして.pyを無効にする

構文拡張

埋め込み(デフォルトで有効):

以下のプラグインは kaoken\markdown-it-php\MarkdownIt\Plugins ディレクトリにあります:

ルールの管理

デフォルトでは、すべてのルールが有効になっていますが、オプションによって制限することができます。
プラグインのロード時には、すべてのルールが自動的に有効になります。

// ルールを有効/無効にする
$md = (new MarkdownIt())
            ->disable([ 'link', 'image' ])
            ->enable([ 'link' ])
            ->enable('image');

// すべてを有効にする
$md = new MarkdownIt([
  "html"        => true,
  "linkify"     => true,
  "typographer" => true,
]);

参照 / 謝辞

Javascriptのオリジナル版を実装をしてくれた作者に感謝! markdown-it:

それと、CommonMarkの仕様と実装リファレンスに関するJohn MacFarlaneの作業を参考にしてください。

関連リンク:

ライセンス

MIT

2
0
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
2
0