Skip to main content Module selector Copy item path Source NodeMatchContext 🔒 1 ノードに対して一度だけ 計算すればよい照合用の前提情報。 apply_counter_decls 🔒 counter-reset / counter-increment を現在のカウンタ集合に適用する。
戻り値は、この要素自身が counter-reset した(=新しいスコープを作った)カウンタ名の集合。
呼び出し側(style_tree_with_ancestors_vars)が、この集合を使って「入れ子の
counter-reset の効果を兄弟要素へ漏らさない」というスコープ復元を行う
(apply_counter_decls 自体はフラットな1つのマップを直接書き換えるだけで、
スコープの概念は呼び出し側が別途管理する)。attr_matches 🔒 属性セレクタの照合。 filtered_sibling_position 🔒 :nth-child(An+B of S)/:nth-last-child(An+B of S) 判定用: own_siblings(親の子ノード
一覧)のうち S に一致する要素だけを数えた「フィルタ済み」0-based 位置と総数を返す。
自分自身が S に一致しない場合は None(=不一致。フィルタ済み集合に属さない)。has_descendant_match 🔒 :has(sel1, sel2, ...) 判定用: children 以下にリスト中いずれかの単純セレクタへ
一致する要素が存在するかを探索する。タプルの bool が true(> sel 形式)の枝は
children(直接子)のみを見て、それより深くは再帰しない。false(通常の :has(.foo))の
枝は任意の深さまで再帰する。子孫側の疑似クラス判定は sibling_index 等の文脈を持たない
ため None/空リストで簡略化して渡す(:has(.foo) のようなタグ/クラス/id/属性ベースの
判定が主な実用対象で、:has(:first-child) 等の兄弟文脈依存の疑似クラスは子孫探索側では
正しく判定できない既知の制約)。has_sibling_match 🔒 :has(+ sel)/:has(~ sel) 判定用: siblings(親の子ノード一覧)中の my_idx より
後ろの要素ノードで sel に一致するものがあるか探索する。adjacent が true なら
直後の要素兄弟1つのみ(+)、false なら以降の要素兄弟いずれか(~)を対象にする。is_ident_byte 🔒 is_node_disabled 🔒 is_selector_ident_char 🔒 matches_selector 🔒 matches_selector_chain 🔒 matches_selector_step_node 🔒 matches_simple_selector 🔒 nth_matches 🔒 nth: position が a*n + b(n>=0)で表せるか。 parse_attr_selector 🔒 [name] / [name op value] の中身をパース。parse_content_value 🔒 parse_counter_decl 🔒 counter-reset / counter-increment 宣言をパースし、name [value] の
空白区切りペア列として (name, value) を返す。value 省略時は default を使う
(reset のデフォルトは 0、increment のデフォルトは 1)。none は空を返す。parse_nth 🔒 :nth-child(...) の引数 an+b / odd / even / b を (a, b) に。parse_nth_of 🔒 :nth-child(An+B of S)(Selectors Level 4)用: of より前の An+B 部分を parse_nth
に、of より後ろの S 部分を parse_simple_selector に、それぞれ渡す。of が無ければ
従来どおり S は None。以前は parse_nth が S 部分を丸ごと読み捨てるだけで
フィルタ自体が非対応だったため、:nth-child(2n+1 of .foo) が .foo に関係なく
単なる :nth-child(2n+1) と同じ結果になっていた。parse_quotes_pairs 🔒 ::before / ::after の content 値を解析する。
文字列リテラル(“…” / ‘…’)、attr(name)(対象要素自身の属性値、無ければ空)、
counter(name) / counter(name, style)(style 引数は無視し常に十進数表記)に対応。
複数トークンの連結(例 attr(href) " ")も可。それ以外の未対応関数形式や
none/normal は「表示なし」として空文字列を返す(テキストとして誤描画しないため)。
quotes: "«" "»" "‹" "›" のような文字列リテラルの並びから、入れ子レベルごとの
全ペア(レベル1, レベル2, …)を取り出す。以前は最初の1組しか取り出さず、
open-quote/close-quote の入れ子(<q> の入れ子)に対応する複数組指定を
常に無視していたが、ここで全ペアを保持し、呼び出し側(quote_depth を使う
parse_content_value)で入れ子レベルに応じたペアを選べるようにする。
戻り値: None=quotes 未指定(呼び出し側で既定の二重引用符へフォールバック)、
Some(vec![])=quotes:none(仕様どおり何も出力しない)、
Some(pairs)=ペア列(レベルが手持ちのペア数を超える場合は最後のペアを繰り返す、仕様どおり)。parse_selector 🔒 parse_selector_chain 🔒 parse_simple_selector 🔒 selector_pseudo_element 🔒 セレクタ末尾(サブジェクトのコンパウンドセレクタ)に付与された疑似要素を返す。
::before / ::after は末尾にのみ意味を持つため最後のステップだけを見る。 selector_specificity 🔒 simple_specificity 🔒 セレクタの特異度 (id数, class/属性/擬似クラス数, タグ数) を算出する。
CSS Selectors Level 4 の規定に従い、:not()/:is() はその引数の特異度を
(:is() は引数中の最大値を)加算し、:where() は常に0を加算する
(それ以外の擬似クラスは従来通り class 数として1を加算)。 type_sibling_position 🔒 親の子ノード一覧の中で、node と同じタグ名を持つノードだけを数えた「型フィルタ済み」
兄弟位置(0-based)と総数を返す。:first-of-type/:last-of-type/:nth-of-type/
:only-of-type 用。祖先が無い(ルート要素)場合は自分だけの単一グループとして扱う。
サブジェクト(末尾コンパウンド)位置でのみ計算する(祖先位置での of-type 判定は非対応)。 unescape_css_string 🔒 CSS文字列内のエスケープ(\ + 1〜6桁16進 + 任意の空白1つ=Unicodeコードポイント、
または \" 等の単純なリテラルエスケープ)をデコードする。
FontAwesome等のアイコンフォントは content: "\f2c9"; のように private-use-area
コードポイントをこの16進エスケープで埋め込むため、これを未対応のまま生バイト列
(バックスラッシュ込みの文字そのまま)として扱うと、アイコン文字が表示されず
代わりに “\f2c9” という文字列がそのまま描画されてしまう。