PHP
Markdown
markdown-it

PHP版 Markdown itの紹介

More than 1 year has passed since last update.

ここで紹介するのは、私が、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