vivliostyle / vfm

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

MathML `open` attribute value disappeared #136

Open MurakamiShinyu opened 2 years ago

MurakamiShinyu commented 2 years ago

Issue Details

Vivliostyle Pubに報告されたissue

問題のMarkdownファイルの中のMathMLコード:

<math>
  <mrow>
    <mi>h</mi>
    <mo>=</mo>
    <mfenced open="|" close="|">
      <mover><mi>HP</mi><mo>&rarr;</mo></mover>
    </mfenced>
  </mrow>
</math>

vfmでHTMLに変換すると、HTMLの中のMathMLコードは次のように open 属性の値が消えてしまってます:

    <math>
      <mrow>
        <mi>h</mi>
        <mo>=</mo>
        <mfenced open close="|">
          <mover>
            <mi>HP</mi>
            <mo>→</mo>
          </mover>
        </mfenced>
      </mrow>
    </math>

原因は、open がHTMLではBoolean attribute であり(https://html.spec.whatwg.org/#attr-details-open) 、Boolean attributeは値が何であっても関係ないので値なしに正規化されてしまうということのようです。

HTMLのBoolean attributeでMathML Attributes と同名のものは open だけのようです。 SVGでも同様の問題があるかもしれませんが https://www.w3.org/TR/SVG/attindex.html をざっと見たかぎりでは HTMLのBoolean attribute と同名のものは無いようです。

HTMLのBoolean attributeの値が指定されてたら消してしまうという動作は必要ないのでないかと思います。

vfmだけでなくremarkでのMarkdown→HTML変換で、MarkdownにMathMLが埋め込まれている場合に共通の問題なのでそちらにも報告するとよいかもしれません。