Dev Study
← 解説「CSS のトークン — 先頭の数文字で種類が決まる」に戻る

サンプルコードで身につける: CSS のトークン — 先頭の数文字で種類が決まる

解説で学んだ概念を、3つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

1.note は Delim('.') + Ident("note") になる

CSS の(CSS Syntax Level 3 §4)は HTML のようなではなく、先頭の 1〜2 文字で種類を決めて必要なだけ読む形です。ここでは ident / hash / delim / whitespace と記号だけを持つ最小版で、.note のピリオドはどのにも当たらない 1 文字なので Delim('.') になり、#333 は Hash("333") になります。実行すると 4 つの入力のトークン列が 1 行ずつ出ます。

Rust

2number / percentage / dimension と文字列、コメントは消える

CSS Syntax Level 3 §4.3.3 consume a numeric token は、数を読んだ直後が % なら percentage、が続くなら dimension(単位つき)、それ以外なら number と定めます。文字列は引用符を除いた中身を Str に、コメント /* */ はトークンにならず読み捨てます。実行すると 16px → Dimension(16.0, "")、50% → Percentage(50.0)、.5 → Number(0.5)、コメントを挟んだ a b は前後の空白が別々の Whitespace として残る、などが出ます。

Rust

3実務に写す: 設定値 512MB / 50% / 8 を 3 種類に読み分ける

設定ファイルの "512MB" "50%" "8" "1.5s" のような値を、CSS と同じ Number / Percentage / Dimension の 3 種類に読み分けます。「数を読み、直後に % があれば割合、英字が続けば単位つき、何も無ければ素の数」という判定は consume a numeric token そのものです。実行すると各値の種類とバイト数への換算(50% は 8GB の半分の 4294967296 bytes)、空文字・数でない文字列・単位の後にゴミがある場合のエラーが出ます。

Rust