Misskey: MFMのパーサーがネストと並列を同時に扱えない

Created on 1 Feb 2019  ·  4Comments  ·  Source: syuilo/misskey

入力:

<x><x></x></x><x></x>

に対して、現状のMFMパーサーは、まず先頭の <x> に対応する </x> を正規表現の最短一致・最長一致のどちらかで探そうとする。しかし、対応すべき </x> は、2つ目に出現するものであるため、最短一致・最長一致ともにうまくいかない。木の構造に沿って、パースする必要がある。


Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.

🐛Bug 🖍MFM

All 4 comments

マークダウンにおいて同じ要素のネストに意味があるケースは現状限られていて、それらにはhtmlタグ形式の記法は使われていないのではないか

考察: https://misskey.xyz/notes/5c5a8015684a7200276fa851

MFMを正規表現を使わないでパースしようとすると、テキスト(どの構文にも一致しない通常の文字列)の扱いが難しいという問題があります。
添付画像のように書くと一見良さそうですが、inlineの定義になんでも一致するtextパーサが含まれているので</spin>もテキスト(inline)の一種だと判定されて上手くいきません。
ではinlineの定義からtextパーサを取り除くと、今度は<spin>:emoji:</spin>のようなテキストが含まれない場合はうまく解析できますがテキストが含まれているとエラーになる

マークダウンにおいて同じ要素のネストに意味があるケースは現状限られていて

の通りなので、正しく実装されるまでの間は、とりあえず並列を重視した最短一致に統一しておいた方が良さそう。

マークダウンにおいて同じ要素のネストに意味があるケースは現状限られていて

記法が変わって、いわゆる [が開き, ]が閉じ のようなものが増えて実質同じ要素のネストになったので
同種のネストを使いたいパターンが出てきた。

Was this page helpful?
0 / 5 - 0 ratings