-
-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
spec: Fenced blocks #5
Comments
Extend to HTML semantic elementsI'd like to change the issue title "Fenced divs" to "Fenced blocks" because I want to extend it for HTML semantic elements. Examples: :::::: section {.classA #idA role="doc-abstract" aria-label="Abstract"}
The **Abstract** section has a summary of the principal ideas,
concepts and conclusions of the work.
:::::: will be converted to: <section id="idA" class="classA" role="doc-abstract" aria-label="Abstract">
<p>The <strong>Abstract</strong> section has a summary of the principal ideas,
concepts and conclusions of the work.</p>
</section> and :::::: aside {role="doc-tip"}
### Tip
Helpful information that clarifies some aspect of the content
or assists in its comprehension.
:::::: will be converted to: <aside role="doc-tip">
<h3>Tip</h3>
<p>Helpful information that clarifies some aspect of the content
or assists in its comprehension.</p>
</aside> Update: syntax changed |
Testing with pandoc, I found that Proposal: the unbraced word is treated as element name if it is a valid HTML element name, otherwise treated as a class name (same as |
One of my concerns is that attribute list which we should allow (Obviously |
I had the same concern @spring-raining had. And that's why only classes are allowed in the original spec of walled blocks. Too many freedoms sometimes could be harmful. |
I like the naming of |
I prefer unbraced word is always considered as an element name, and braced words are considered as attributes (classes, IDs and attributes). It is consistent behavior. magical behavior would be useful, indeed. But it sometimes confuses readers. |
I agree that relying on "valid HTML element names" is not a good idea. It will change by HTML spec updates. And also we should consider about Custom elements. |
So here is my take.
# Chapter 2
:::author
uetchy
::: <h1>Chapter 2</h1>
<div class="author">
<p>uetchy</p>
</div> .author {
padding: 5px;
border: 1px solid black;
border-radius: 4px;
}
|
What will be happen on VFM when omitting open/close notation?
|
VFM just ignores them. |
OK, so...
|
Just FYI: The fenced code block in commonmark is closed by the end of the document if no closing code-fence found. |
現状の vfm の Fenced blocks 実装とその課題、Pandoc との比較Fenced blocks は、Prior Art である Pandoc の fenced_divs と互換性があるとよい。 Pandoc の fenced_divs の仕様https://pandoc.org/MANUAL.html#extension-fenced_divs
例: ::::: {#special .sidebar}
Here is a paragraph.
And another.
::::: ↓ <div id="special" class="sidebar">
<p>Here is a paragraph.</p>
<p>And another.</p>
</div> 次はネストの例。開始のフェンスには属性指定があることで終了のフェンスと区別される(3つ以上連続するコロンの数は関係ない): ::: Warning ::::::
This is a warning.
::: Danger
This is a warning within a warning.
:::
:::::::::::::::::: ↓ <div class="Warning">
<p>This is a warning.</p>
<div class="Danger">
<p>This is a warning within a warning.</p>
</div>
</div> 内容が空の fenced div を試すと: :::empty
::: ↓ <div class="empty"></div> 現状の vfm の Fenced blocks をテストするとしかし、現状の vfm パーサーの実装では、Pandoc のドキュメントにある次の例が処理できない: ::::: {#special .sidebar}
Here is a paragraph.
And another.
::::: ↓ <p>::::: {#special .sidebar} Here is a paragraph.</p>
<p>And another. :::::</p> Fenced blockへの ::::: sidebar
Here is a paragraph.
And another.
::::: ↓ <p>::::: sidebar Here is a paragraph.</p>
<p>And another. :::::</p> どうも連続するコロンの数が3つよりも多いと fenced block として処理されないようである。コロンを3つに直したら: ::: sidebar
Here is a paragraph.
And another.
::: ↓ <div class="sidebar">
<p>Here is a paragraph.</p>
<p>And another.</p>
</div> ネストの例ではどうか。 ::: Warning ::::::
This is a warning.
::: Danger
This is a warning within a warning.
:::
:::::::::::::::::: ↓ <p>::: Warning :::::: This is a warning.</p>
<div class="Danger"><p>This is a warning within a warning.</p></div>
<p>::::::::::::::::::</p> これを次のように直したところ現状の vfm で処理できるようになった: ::: Warning
This is a warning.
:::: Danger
This is a warning within a warning.
::::
::: ↓ <div class="Warning">
<p>This is a warning.</p>
<div class="Danger">
<p>This is a warning within a warning.</p>
</div>
</div> 内容が空の Fenced block を試すと、Fenced block として処理されない: :::empty
::: ↓ <p>:::empty :::</p> ここまでで分かった問題点現状の vfm のパーサーでは
見出しとの組み合わせの場合Pandoc では、fenced div 内が見出しではじまる場合、fenced div で div ではなく section 要素が生成される。 例: ::: appendix
## Appendix A {#aaa .bbb data-ccc=ddd}
This is an appendix.
::: ↓ <section id="aaa" class="bbb appendix" data-ccc="ddd">
<h2 class="bbb" data-ccc="ddd">Appendix A</h2>
<p>This is an appendix.</p>
</section> pandocに <section id="aaa" class="level2 bbb appendix" data-ccc="ddd">
<h2 class="bbb" data-ccc="ddd">Appendix A</h2>
<p>This is an appendix.</p>
</section>
現状のvfmでは::: appendix
## Appendix A {#aaa .bbb data-ccc=ddd}
This is an appendix.
::: ↓ <div class="appendix">
<section id="aaa" class="bbb" data-ccc="ddd">
<h2>Appendix A</h2>
<p>This is an appendix.</p>
</section>
</div> vfm では見出しで自動的に section 要素が作られるが、Fenced block の div 要素の中にその section 要素ができる。あまりスマートでない。 role 属性について現在の VFM の独自拡張で次のような記法で DPUB-ARIA の role 属性を指定できる: :::@appendix
# Appendix A
::: ↓ <section role="doc-appendix" id="appendix-a">
<h1>Appendix A</h1>
</section> この独自拡張仕様の見直しについては spec: WAI-ARIA role syntax (#28) にコメントする。
HTML 要素名を明示的に指定可能にする拡張案(このコメントは長過ぎだったので次のコメント #5 (comment) に移動) |
昨日の開発者会議を受けた #67 のとおり、本機能は v2 へ見送ります。 |
VFM v2 は |
HTML 要素名を明示的に指定可能にする拡張案(前のコメント #5 (comment) が長過ぎだったので分割した) Pandoc の fenced_divs では、基本は div 要素が作られ、最初の要素が見出しであれば div の代わりに section 要素が作られる。 これをさらに拡張して、ほかの HTML 要素名も指定可能にしたい。 拡張案:
例: ::: aside
Hello
::: ↓ <aside class="aside">
<p>Hello</p>
</aside> 属性の指定もある場合: ::: article {#aaa .bbb data-ccc="ddd"}
# The Article
::: ↓ <article id="aaa" class="article bbb" data-ccc="ddd">
<h1>The Article</h1>
</article> 波括弧囲みのクラス名指定だけの場合はそれを HTML 要素名にはしない: ::: {.aside}
Hello
::: ↓ <div class="aside">
<p>Hello</p>
</div> ::: {.aside}
# Hello
::: ↓ <section class="aside" id="hello">
<h1>Hello</h1>
</section> Fenced block の ::: span
# Hello
::: ↓ <section class="span" id="hello">
<h1>Hello</h1>
</section> Fenced block の内容にインラインのテキストも可能にする拡張案Fenced block の ::: small
This is a small notice.
::: ↓ <small class="small">This is a small notice.</small> Fenced block の終了を分かりやすくする拡張案Fenced block の終了の ::: aside
:::: Warning
This is a warning.
::::: Danger
This is a warning within a warning.
::::: /Danger
:::: /Warning
::: /aside |
remark-fenced-divs の readme に次の記述:
remark-fenced-divs あるいは remark-directive を検討するとよさそうですね。 :::main{#readme} で <main id="readme"> になります。これは私の HTML 要素名を明示的に指定可能にする拡張案 と似ています。私の案では、 :::main{#readme} は <main class="main" id="readme"> となるのですが、要素名と同じものをclassにも出力するのは実績がある Pandoc となるべく互換にしようとしたためです。 |
この記法は #67 により v1.0 では見送りとなりました。v2.0 で検討する場合は↑の @MurakamiShinyu さんコメントにあるとおり parser 変更があるため Pandoc 互換の benabel/remark-fenced-divs を検討予定です。 |
Pandoc 互換ではない remarkjs/remark-directive も検討するとよいです。 |
はい。両方を候補にしましょう。ただし択一にしたいですね。 |
MarkdownはHTMLの軽量マークアップ言語であり、HTMLによるドキュメント生成において比較的頻繁に用いられるセマンティックタグやタグ構造を、ドキュメントの執筆者にとって見やすく、書きやすいように設計されたものです。
単純にPandoc互換を目的とするなら、Pandoc記法のサブセットにすべきかと。 |
Fenced blocksによって解決されると期待されている問題: |
Pandoc互換の https://github.com/benabel/remark-fenced-divs は、"ARCHIVED: This plugin has never been completely adapted for remark 13+." となっているので、今後 remark 13+ に移行予定のvfmには使えなさそう。 vfm v1→v2の仕様変更で、見出しのsection囲みでの属性の扱いについてPandoc互換をやめていることもあるし、Pandoc互換よりも remarkjs のエコシステムでポピュラーで使いやすいものを採用するのがよさそう。 |
Adopt fenced divs from Pandoc's Markdown, that allows special fenced syntax for
div
blocks.See the spec: Pandoc Extension: fenced_divs
Discussion
This "fenced divs" syntax is very similar to the walled block in the current VFM draft. I prefer "fenced divs" because:
:::
is better than===
, because===
is used for setext heading underline and will make confusion.The text was updated successfully, but these errors were encountered: