Skip to content

fix(parser,render): [[iftags]]の条件評価バグとCSS漏出を修正#22

Merged
r74tech merged 8 commits intodevelopfrom
fix/iftags-condition-evaluation
Feb 8, 2026
Merged

fix(parser,render): [[iftags]]の条件評価バグとCSS漏出を修正#22
r74tech merged 8 commits intodevelopfrom
fix/iftags-condition-evaluation

Conversation

@r74tech
Copy link
Owner

@r74tech r74tech commented Feb 8, 2026

Summary

[[iftags]]ブロックに関する以下のバグを修正:

  • 空条件の評価不一致: parserリゾルバのevaluateTagConditionが空条件でtrueを返していた(rendererはfalse)。[[iftags]](supercommentout)内のCSSやコンテンツが漏出する原因
  • プレフィックスなしタグのセマンティクス不一致: bare tag(+/-なし)をparserはAND条件、rendererはOR条件として評価していた。Wikidot仕様はOR(rendererが正しい)
  • collectStylesが未解決iftags内のスタイルを抽出: getPageTags未提供時、iftags子要素のstyleがtree.stylesに漏出し、条件に関係なくCSSが出力されていた
  • 未解決iftags内のコンテナにネストされたstyleのドロップ:
    renderInlineStylesフラグをRenderContextに追加し、任意深度のstyleを出力可能に
  • CSS出力順の不一致: style slot mechanism(sentinelplaceholder)を導入し、resolve済み/未resolveの両パスでCSS cascade順を一致させた
  • 空タグ名トークンの扱い不一致: [[iftags -]]等のプレフィックスのみトークンで、parser/renderer間の評価が異なっていた
  • STYLE_SLOT_PREFIXの依存関係修正: @wdprlib/render@wdprlib/parserの未宣言依存を、@wdprlib/astへの移動で解消

evaluateTagConditionがrequired=[], forbidden=[]のとき
全チェックをスキップしてtrueを返していた。
空条件はWikidotの「supercommentout」パターンであり、
常にfalseを返すべき。
Wikidot仕様ではbare tag(例: `[[iftags scp tale]]`)は
OR条件(いずれか1つ一致で表示)だが、パーサーリゾルバは
AND条件(全タグ必須)として扱っていた。

TagConditionにoptionalフィールドを追加し、
レンダラーと同じOR評価ロジックを実装。
pageTags未提供時にcollectStylesがiftags内のstyle要素を
無条件に抽出し、iftags条件に関係なくCSSが出力されていた。

collectStylesFromElementsでif-tags要素をスキップし、
renderIfTagsで条件一致時にstyleをinline出力するように変更。
collectStylesでif-tags位置にsentinelを挿入し、render時にslotとして
正しい位置にスタイルを出力する仕組みを導入。
resolve済み・未resolve両パスでCSS cascadeが一致する。
parser側のparseTagConditionと同じく、プレフィックスのみのトークン
(例: "-", "+")はタグ名が空のため無視する。
これにより[[iftags -]]等がresolve/render両パスで一貫してfalseを返す。
@wdprlib/renderが@wdprlib/parserからSTYLE_SLOT_PREFIXをimportしていたが、
package.jsonに依存宣言がなかった。両パッケージが共通に依存する
@wdprlib/astに定数を移動し、正しい依存グラフに修正。
@cloudflare-workers-and-pages
Copy link

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 ad88e30 Commit Preview URL

Branch Preview URL
Feb 08 2026, 06:21 PM

@r74tech r74tech merged commit 43c2bb3 into develop Feb 8, 2026
8 checks passed
@r74tech r74tech deleted the fix/iftags-condition-evaluation branch February 8, 2026 18:25
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.

1 participant