Skip to content

fix: divをまたぐspanが[[/div]]を飲み込みdivが閉じない問題を修正 - #80

Merged
r74tech merged 8 commits into
fix/inline-backtracking-blowupfrom
fix/78-span-across-block-close
Oct 12, 2026
Merged

r74tech merged 8 commits into
fix/inline-backtracking-blowupfrom
fix/78-span-across-block-close

Conversation

@r74tech

@r74tech r74tech commented Oct 12, 2026

Copy link
Copy Markdown
Owner

divの中で開いた[[span]]の閉じタグがdivの外にあると、間の[[/div]]をspanの本文として取り込み、対応する[[div]]が閉じていないと誤って警告される問題を修正する。#79の上に積んでいる。

Fixes #78

spanとdivの境界

Wikidotは[[span]]と[[/span]]の組を[[div]]より先に決め、出力をHTML Tidyで修復する(Text_Wikiのルール順はSpanがDivより前、WikiTransformation::purifyHtmlでtidy_parse_stringを通す)。そのためspanはdivの境界で閉じ、境界の後ろで同じ属性のまま開き直される。edit/PagePreviewModuleでも同じ出力になることを確認した。

  • パース前にトークン列を書き換え、divの境界をまたぐspanを境界の手前で閉じ、後ろで同じ属性の開きタグを補う。spanルールとdivルールには手を入れていない
  • [[code]]、[[math]]、@@...@@、コメント、脚注、行頭の[[html]]ブロックの中身は読み飛ばす
  • span_は対象外。実機ではspan_がdivをまたぐとdiv自体が成立せず、別の挙動になる
  • 空行で分割したspanの2つ目以降にも属性を引き継ぐ。実機はidを含めて複製する
  • 実機出力を添えたfixtureをtests/fixtures/span/div-boundary/に追加

footnoteのスタック溢れ

閉じない[[footnote]]を大量に並べる、または閉じたfootnoteを数千段入れ子にすると、parseがRangeError: Maximum call stack size exceededで落ちていた。footnoteの本文を入れ子1段ごとに再帰的に解析しているため。

  • 入れ子を64段までにし、超えた[[footnote]]は文字列として扱う。上限は式の入れ子(MAX_EXPR_NESTING)に合わせた
  • 閉じないfootnoteを警告付きで成立させる挙動と、入れ子の扱いは変えていない

未修正:

  • issueにある診断位置のずれ(前処理後の座標で位置を出している件)は別途対応する
  • 実機との既存の差(div直後の本文を<p>で包む、span内のリストや[[code]]が文字列になる、入れ子のspanが両方divをまたぐときの開き直し)は扱っていない

@r74tech
r74tech added this pull request to stack #81 October 12, 2026 15:44
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
wdpr-demo-v1-files 55259bc Commit Preview URL

Branch Preview URL
Oct 12 2026, 03:45 PM

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
decompiler-preview 55259bc Commit Preview URL

Branch Preview URL
Oct 12 2026, 03:45 PM

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
wdpr-demo-v1 55259bc Commit Preview URL

Branch Preview URL
Oct 12 2026, 03:45 PM

@r74tech
r74tech force-pushed the fix/78-span-across-block-close branch from 55259bc to 34163dc Compare October 12, 2026 16:10
@r74tech
r74tech merged commit 6b03718 into develop Oct 12, 2026
6 checks passed
@r74tech
r74tech deleted the fix/78-span-across-block-close branch October 12, 2026 16:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Unclosed inline [[span]] swallows a following [[/div]], causing false unclosed-block warnings

1 participant