MarkEd を使用しており、これは GitHubフレーバーマークダウン を実装しています。
私はいくつかの作業マークダウンを持っています:
## Test heading
a paragraph.
## second heading
another paragraph
作成するもの:
<h2 id="test-heading">Test heading</h2>
<p>a paragraph.</p>
<h2 id="second-heading">second heading</h2>
<p>another paragraph</p>
そのマークダウンセクションをdivでラップしたい、例えば:
<div class="blog-post">
## Test heading
a paragraph.
## second heading
another paragraph
</div>
ただし、次のHTMLが返されます。
<div class="blog-post">
## Test heading
a paragraph.
## second heading
another paragraph
</div>
たとえば、マークダウンなし、文字通り「## Test heading」がHTMLに表示されます。
マークダウンをdivに適切にラップするにはどうすればよいですか?
次の回避策を見つけましたが、実際の修正ではなくいものです。
<div class="blog-post">
<div></div>
## Test heading
a paragraph.
## second heading
another paragraph
</div>
Markdownの場合、これは仕様です。 Markdownリファレンスの Inline HTML セクションから:
Markdownフォーマット構文はブロックレベルのHTMLタグ内では処理されないことに注意してください。たとえば、HTMLブロック内ではMarkdownスタイルemphasisを使用できません。
ただし、スパンレベルのタグには明示的に許可されています。
ブロックレベルのHTMLタグとは異なり、Markdown構文はスパンレベルのタグ内で処理されます。
そのため、ユースケースによっては、span
の代わりにdiv
を使用することで逃げることができます。
使用するライブラリが CommonMark を実装している場合、幸運です。例の 108 および 109 は、HTMLブロックとマークダウンコードの間に空の行を保持すると、コンテンツがMarkdownとして解析されることを示しています。
<div>
*Emphasized* text.
</div>
動作するはずですが、以下は動作しません:
<div>
*Emphasized* text.
</div>
また、リファレンスの同じセクションによると、一部の実装では追加のmarkdown=1
属性は、HTMLタグ内のMarkdownの解析を有効にします。
StackOverflowではまだ動作していないようですが:
Markdown Extraは、HTMLブロック内でMarkdownフォーマットを機能させるために必要です。ここに記載されているドキュメントを確認してください-> https://michelf.ca/projects/php-markdown/extra/
Markdown Extraを使用すると、Markdown形式のテキストをブロックレベルのタグ内に配置できます。これを行うには、値1のタグにmarkdown属性を追加します。これにより、markdown = "1"が得られます
GitHub Pagesは、HTML要素内のマークダウンを解析するためにmarkdown="1"
属性をサポートしています。
<div class="tip" markdown="1">Have **fun!**</div>
注: 2019/03の時点では、これはgithub.comでは機能せず、GitHubページのみが機能します。
注:markdown="1"
のように引用符はHTML5では必要ありませんが、引用符(markdown=1
)を使用しない場合、GitHubはそれをHTMLとして認識しません。また、現在サポートはバグがあります。 HTML要素が1つの段落よりも大きい場合は、誤った出力を受け取る可能性があります。たとえば、バグのため、div内にマークダウンリストを埋め込むことができませんでした。
markdown="1"
は機能しないがspan
は機能する環境にいる場合、別のオプションは<span style="display:block">
を使用してブロックレベルのクラスと互換性を持たせることです。
<span style="display:block" class="note">It **works!**</span>
ヒント:<span class="note"></span>
は<div class="note" markdown="1"></div>
よりも短いため、CSSを制御する場合は、<span>
を使用してdisplay: block;
をCSSに追加することをお勧めします。
Extending Marked のドキュメントを見て、html
レンダラーメソッドを変更することで、タグ間の部分を解析済みマークダウンに置き換えることができます。広範なテストは行っていませんが、最初の数回の試行で機能しました。
const marked = require('marked');
const renderer = new marked.Renderer();
renderer.html = (mixedContent) => mixedContent.replace(/[^<>]+?(?=<)/g, (match) => {
const tokens = marked.lexer(match);
return marked.parser(tokens);
});
この新しい正規表現は、HTMLタグとその間にある行を含むマークダウンのみが解析されるようにします。
const marked = require('marked');
const renderer = new marked.Renderer();
renderer.html = (mixedContent) => mixedContent.replace(/\n\n[^<>]+?\n\n(?=<)/g, (match) => {
const tokens = marked.lexer(match);
return marked.parser(tokens);
});
ラストリゾートオプション:
一部のライブラリでは、大文字と小文字が区別される場合があります。
<DIV>
の代わりに <div>
そして何が起こるかを見てください。
Markdownsharpにはこの特性があります-StackOverflowでは、とにかくすべてのDIVを取り除きますので、ここで動作するとは思わないでください。