Skip to main contentModule layout
Source - collect_external_css_urls 🔒
- DOM ツリーを走査して外部
<link rel="stylesheet" href="..."> の href を集める。
href は resolve_dom_paths 済み(絶対パス or 完全URL)。以前はインライン <style>
しか集めておらず、外部 CSS ファイルを一切取得・適用していなかったため、CSS を
全て外部ファイルに置くサイト(一般的な構成)ではスタイルが丸ごと無視され、
素の HTML 同然の表示になっていた。rel に stylesheet を含むもの、または
rel 未指定で href が .css で終わるものを対象とする(preload/icon 等は除外)。 - collect_scripts_from_dom 🔒
- DOM ツリーを走査して全
<script> 要素を集める。src 属性があれば
(Some(resolved_src), “”) を、無ければインライン本文 (None, text) を返す。
以前は生 HTML 文字列を正規表現的にスキャンするだけで、<script src="..."> の
外部スクリプトは本文が空のため完全に無視されていた(fetch すら行われない)。 - collect_style_blocks_from_dom 🔒
- DOM ツリーを走査して全
<style> 要素の textContent を連結して返す。
元の HTML 文字列ではなく実際のツリーを見ることで、document.createElement('style') 等で
動的に追加された <style> 要素のスタイルも取得できる。 - extract_text_stroke 🔒
- parse_aspect_ratio 🔒
aspect-ratio(CSS Box Sizing Level 4。16 / 9, 4/3, 1, auto 16/9 等)を解釈する。- parse_line_height 🔒
line-height(丸ごと未対応だった単位あり。以前は px(絶対値)と裸数値
(font-sizeへの倍率。仕様どおり子要素へも同じ倍率が継承される)の2種
のみ対応で、%(line-height:150%)/em(line-height:1.5em)は
t.parse::<f32>()が単位付き文字列を数値としてパースできず静かに失敗し、
(font_size + 4)という汎用フォールバック値へ落ちていた(エラーになら
ず一見動いているように見えるため気づきにくいバグだった)。%/emは
どちらも意味上「font-sizeへの倍率」で裸数値と等価のため、同じ倍率計算
式へ合流させる。2026-07-17 発見・実装(自己テストのためparse_and_ layout内のネスト関数からモジュールトップレベルへ移動。ロジック不変)。- parse_shadow_len_tok 🔒
box-shadow/text-shadowのオフセット/ぼかし長さトークンを解決する
(丸ごと未対応だった単位あり。以前はpxのみ対応で、rem(box-shadow: 0.5rem 0.5rem 1rem redのような相対単位指定)はtoken.strip_suffix ("px")に一致せず数値パースにも失敗するため、呼び出し元の位置カウンタ
px_countが進まないまま静かに無視されていた——エラーにはならずcolor
だけ正しく拾われるため、「オフセット0・ぼかし0の見えない影」という
気づきにくい壊れ方をしていた。emは要素自身の算出フォントサイズが
この関数の引数だけでは解決できないため対象外のまま(resolve_ translate_lenと同じ判断)。2026-07-17 発見・実装(自己テストのため
モジュールトップレベル関数として新設。呼び出し元はbox-shadow/
text-shadowの2箇所)。- resolve_border_radius 🔒
border-radiusの1角分の半径値を解決する(丸ごと未対応だった単位あり。
以前はpx/%のみ対応で、rem(border-radius:1remのような相対単位
指定)は単位付き文字列のパース失敗で静かに0〔角丸無し〕へフォール
バックしていた。box-shadow/text-shadowのparse_shadow_len_tokと
同型のバグ。emは要素自身の算出フォントサイズがこの関数の引数だけ
では解決できないため対象外のまま(resolve_translate_lenと同じ判断)。
2026-07-17 発見・実装(自己テストのためクロージャからモジュール
トップレベル関数へ変更。呼び出し元は1箇所のみ)。- resolve_text_indent 🔒
text-indent(丸ごと未対応だった単位あり。以前はpxと裸数値〔px
扱い〕のみ対応で、%(包含ブロック幅基準)/em(font-size基準)は
t.parse::<f32>()が単位付き文字列を数値としてパースできず静かに
失敗し、インデント無し(0)へフォールバックしていた。古典的な段落
インデントの定番text-indent:2emや、レスポンシブなtext-indent:5%
が効かなくなっていた(エラーにならず一見正常に描画されるため気づき
にくいバグだった)。2026-07-17 発見・実装(自己テストのためモジュール
トップレベル関数として新設。呼び出し元は1箇所のみ)。