vivliostyle / vfm

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

fix: HTML block causes wrong sectioning (vfm 2.2.0) #184

Closed MurakamiShinyu closed 8 months ago

MurakamiShinyu commented 8 months ago

この不具合は、 #174 で追加したHTMLブロックでの終了タグがあったら対応する開始タグが同じセクションのレベルになかったらセクションを閉じるようにするという処理に問題があり発生していました。

複数の終了タグからなるHTMLブロック(例 </td></tr></table>)があったとき、今回の修正前は、その最初の終了タグのタグ名(この例では td)の開始タグではじまるHTMLブロックを見つけるようにしていました。これでは対応する開始タグが見つからない(<table><tr><td> というHTMLブロックではマッチしない)ということがあるため、この不具合が起きていました。

この修正後では、HTMLブロック内に複数のタグがあっても問題ないように、HTMLブロック内の最後の終了タグと対応する開始タグを見つけるようにしました。

また、対応する開始タグが同じセクションのレベルになかった場合、それより前に見つかるかどうかをチェックして、もし見つからなかった場合は、セクションを閉じることはしないようにしました。

MurakamiShinyu commented 8 months ago

@akabekobeko

Approve していますが、修正版の処理で if のネストが深くなっているので浅くする提案をしたので検討いただきたいです。

ありがとうございます。採用しました!