vivliostyle / vfm

⬇️ Open and extendable Markdown syntax and toolchain.
https://vivliostyle.github.io/vfm/#/vfm
Other
71 stars 12 forks source link

Line break immediately after `<pre>` disappears #79

Open akabekobeko opened 3 years ago

akabekobeko commented 3 years ago

Issue Details

A new issue I found while trying to fix #77.

Expected Behavior

Markdown

<pre>
*    *    *
   *    *    *
</pre>

to HTML

<pre>
*    *    *
   *    *    *
</pre>

Actual Behavior

Line break immediately after <pre> disappears.

<pre>*    *    *
   *    *    *
</pre>

commonmark.js demo keeps line breaks as expected.

akabekobeko commented 3 years ago

最小構成で実装してみた。

import unified from 'unified'
import remarkParse from 'remark-parse'
import remarkRehype from 'remark-rehype'
import refypeRaw from 'rehype-raw'
import rehypeStringify from 'rehype-stringify'

const main = () => {
  const md = `<pre>
*    *    *
   *    *    *
</pre>`

  unified()
    .use(remarkParse)
    .use(remarkRehype, { allowDangerousHtml: true })
    .use(refypeRaw)
    .use(rehypeStringify)
    .process(md, (err, file) => {
      if (err) {
        console.error(err)
      } else {
        console.log(String(file))
      }
    })
}

main()

これを実行した結果は以下。

<pre>*    *    *
   *    *    *
</pre>

rehype-raw を外してみると HTML 開始タグは文字参照にエスケープされるが <pre> 直後の改行は維持されている。

&#x3C;pre>
*    *    *
   *    *    *
&#x3C;/pre>

以上ををまとめると

のようだ。

akabekobeko commented 3 years ago

VFM 自体の問題ではないこと、VFM 2.0 で remark を刷新することにより周辺 npm も変更されるので改善される可能性もあるため、本件は次バージョン送りとする。