Skip to main content Module values Copy item path Source calc_skip_ws 🔒 バイト位置*pos以降の空白をスキップする。 eval_calc calc()式をpxへ評価する。四則演算・任意個数の項・丸括弧によるネストに
対応する(calc(Apx ± Bpx ± ...)/calc(A% * B)/calc(A / B)/
calc((A - B) / C)等)。以前は+/-/*を1回ずつ・2項までしか扱えず
/(除算)が丸ごと未対応、括弧ネストも不可という限定的な実装だった。eval_css_math CSS の数式関数(calc() / min() / max() / clamp())を px へ評価する。
min()/max() は任意個数の引数、clamp(min, val, pref) は3引数固定。
引数はネストした calc()/min()/max()/clamp() も再帰的に評価する。 eval_length_token 🔒 単一の長さ値(10px / 50% / calc(...) など、四則演算を含まない1トークン、
もしくは calc()/min()/max()/clamp() の再帰評価)を px へ解決する。 parse_calc_expr 🔒 expr := term (('+' | '-') term)*。任意個数の項を左結合で畳み込む
(以前は+/-/*をそれぞれ最大1回・2項までしか扱えず、calc(100% - 20px - 10px)のような3項式やcalc(100% / 3)のような除算、
calc((100% - 20px) / 2)のような括弧ネストが軒並み評価失敗していた。
2026-07-16 発見・修正)。parse_calc_factor 🔒 factor := '(' expr ')' | <数値+単位トークン>。
丸括弧が来れば対応する閉じ括弧まで走査しparse_calc_exprへ再帰する
(calc((100% - 20px) / 2)のようなネストに対応するため)。parse_calc_term 🔒 term := factor (('*' | '/') factor)*。乗除算は加減算より優先度が高い。parse_calc_unit 🔒 calc()内の単一トークン(10px/50%/2rem/裸の数値等)をpxへ変換する。parse_nested_body 🔒 CSS Nesting のルール本体をパースする。トップレベル(このネストの深さ)の ; で
宣言を区切り、トップレベルの { はネストしたルールの開始とみなして対応する }
までを取り出し再帰する。ネストしたセレクタの各カンマ枝は、& を含めば親セレクタの
テキストで置換し、含まなければ親セレクタの後ろに半角スペースで連結する(子孫結合子
扱い)。戻り値はこのレベル自身の宣言一覧(ネストしたルールは out_rules に積む)。 parse_one_declaration 🔒 単一の name: value 宣言(!important 込み)をパースする。
空の name/value や区切りの : が無い場合は None。 resolve_css_env env(safe-area-inset-*)等(CSS Environment Variables)を解決する。
この処理系にはノッチ/デバイスセーフエリアという概念自体が存在しない
(実機はRaspberry Pi 3B、ヘッドレスQEMU)ため、var()のような真の
環境変数テーブルは持たず、既知のsafe-area-inset-*/
viewport-segment-*系は常に"0px"、フォールバック指定があればそちらを
優先する「正直な既定値ゼロ」として解決する(丸ごと未対応だった。
2026-07-18 発見・実装)。resolve_css_var Replace all var(--name) and var(--name, fallback) occurrences in a value string.
カスタムプロパティが別のカスタムプロパティを参照する間接参照
(例: --a: var(--b); --b: red; のとき var(--a) は red に解決される)に対応するため、
1パスの置換結果にまだ var( が残っていれば再帰的に解決する。循環参照時に無限再帰へ
陥らないよう、最大再帰深度(8)を設けて打ち切る。 resolve_css_var_depth 🔒 split_top_level_commas 🔒 min() / max() / clamp() の引数を最上位のカンマだけで分割する。
引数内に calc()/min()/max()/clamp() がネストしていても、その内側の
カンマは分割対象にしない(括弧の深さを追跡する)。