Blogger.comにPrism.jsをCDNで導入する-p--qをMarkdown-itで使えるようにします。まずはMarkdown-itのライブデモのコードの部分で生成されるHTMLをみてみます。
シンタックスハイライター設定前のHTML
Chromeで「ページのソースを表示」を選択するとHTMLではなくマークダウンが表示されてちょっと驚きました。仕方ないので「検証」から要素を一つずつ選択してコピペしました。
フェンスドコードブロック(CommonMark Spec)ではcodeタグに言語名のクラスがつきますけど、インラインコードやインデンテッドコードのタグには何も属性がつかないので PrismJSではシンタックスハイライトが効きません。
インデンテッドコードはフェンスドコードブロックを使えば足りるのでインラインコードのタグにクラス属性をつけることとフェンスドコードブロックのpreタグにPrismJSの設定のための属性を付ける方法を考えないといけません。
PrismJSでシンタックスハイライトするためのHTMLタグ
この5パターンのうちデフォルトMarkdown-itのまま変換できるのは「行番号なし」だけです。
やらないといけないことはpreタグにクラス属性を付けることとインラインコードでcodeタグにクラス属性をつけることです。
フェンスドコードブロックでpreタグに属性をつける
markdown-it 12.3.0 API documentationには載っているのは探せないのですが、renderer.jsのoptions.highlight関数の引数をみるとREADME.mdの解説にはない3番目の引数があってそこで属性が受け取れます。
これでフェンスドコードブロックのpreタグに属性をつけることができます。
フェンスドコードブロックをPrismJSでシンタックスハイライトするにはこういうふうに書けばよくなりました。
markdown-it-attrsの導入
インラインコードのタグにクラス属性をつけるためにプラグインを導入します。
このmarkdown-it-attrsプラグインを使うとマークダウンからHTMLタグに属性を追加できるようになります。
markdown-it-attrs CDN by jsDelivr - A CDN for npm and GitHubからmarkdown-it-attrs.browser.jsを選択しました。
md.use(markdownItAttrs);でプラグインを有効にすればcode{.language-shell-session}とかけばインラインコードもシンタックスハイライトできるようになります。
PrismJSのスクリプトの取得
prismjs CDN by jsDelivr - A CDN for npm and GitHubからPrismJS関連のスクリプトを選択します。
JavaScriptの下の7つとCSSの下4つがPrismJSのものです。
それぞれ一番上のcombineのもののコードを取得します。ただしBlogger.comにPrism.jsをCDNで導入する-p--qに書いてあるようにautoloaderだけは別に読み込むようにします。
これでマークダウンからシンタックスハイライトまでができました。
0 件のコメント:
コメントを投稿