1. はじめに
CSS 1は、HTMLが伝統的に順序付きリストや順序なしリストで許可してきたスタイルに基づいた、いくつかの便利なカウンタースタイルを定義しました。 CSS2.1で多少拡張されたものの、 世界中のタイポグラフィのニーズには対応できていませんでした。
このモジュールは、CSSがこの課題にオープンな形で対応できるようにする@counter-style規則を導入します。 著者が独自のカウンタースタイルを定義できるようになります。 これらのスタイルはlist-style-typeプロパティや、 counter()およびcounters() 関数で使用できます。 また、特に一般的だが@counter-styleだけでは表現が複雑な、追加の定義済みカウンタースタイルも定義しています。
2. カウンタースタイル
カウンタースタイルは、カウンター値を文字列に変換する方法を定義します。 カウンタースタイルは以下の要素で構成されます:
- スタイルを識別する名前
- 整数のカウンター値を基本的な文字列表現に変換するアルゴリズム
- 負のカウンター値の表現に付加する負符号
- 表現の先頭に付加するプレフィックス
- 表現の末尾に付加するサフィックス
- カウンタースタイルが扱う値の範囲
- 音声合成装置でカウンタースタイルを読み上げる方法を記述する発音形
- カウンター値が範囲外の場合やその他、値を表現できない場合に使われるフォールバックスタイル
特定のカウンタースタイルで特定のカウンター値のカウンター表現を生成するよう要求された場合、以下の手順に従います:
- カウンタースタイルが未知の場合、 このアルゴリズムを終了し、代わりにカウンター表現を生成し、decimalスタイルと同じカウンター値で処理します。
- カウンター値がカウンタースタイルのrange外の場合、 このアルゴリズムを終了し、フォールバックスタイルと同じカウンター値でカウンター表現を生成します。
- カウンター値とカウンタースタイルのカウンターアルゴリズムを用いて、 カウンター値の初期表現を生成します。 カウンター値が負で、 カウンタースタイルが負符号を使う場合は、 代わりに絶対値で初期表現を生成します。
- pad記述子で指定された通り、表現に記号を先頭に付加します。
- カウンター値が負で、 カウンタースタイルが負符号を使う場合、 表現をカウンタースタイルの負符号(negative記述子で指定)で囲みます。
- 表現を返します。
注: prefixとsuffixはこのアルゴリズムには関与しません。 これは仕様によるもので、 prefixとsuffixはcounter()やcounters()関数が返す文字列には含まれません。 代わりに、prefixとsuffixはcontentプロパティの値を構築するアルゴリズムによって追加されます。 これは::marker疑似要素用です。 また、実際の表現がフォールバックスタイルによって構築された場合でも、prefixとsuffixは指定されたカウンタースタイルから必ず取得されることを意味します。
system(symbolic、additive)の一部の値や、 pad記述子など一部の記述子は、 著者が指定した数値に比例した長さの表現を生成できます。 これは、非常に大きな表現を生成してユーザーのメモリを過度に消費したり、ブラウザをフリーズさせたりする悪用につながる可能性があります。 ユーザーエージェントは少なくとも60ユニコードコードポイント分の表現をサポートしなければなりませんが、 60コードポイントを超える表現についてはフォールバックスタイルを使うことも選択できます。
3. カスタムカウンタースタイルの定義:@counter-style 規則
@counter-style規則は、著者がカスタムのカウンタースタイルを定義することを可能にします。 カウンタースタイルの構成要素は、@counter-style規則内の記述子によって指定します。 アルゴリズムは、system、symbols、additive-symbolsプロパティの組み合わせで暗黙的に指定されます。
@counter-style規則の一般形式は以下の通りです:
@counter-style <counter-style-name> { <declaration-list> }
<counter-style-name>は、<custom-ident>であり、ASCII 大文字・小文字を区別しない一致でnoneにならないものです。 <counter-style-name> はツリー単位の名前です。
キーワードdecimal、disc、square、circle、disclosure-open、disclosure-closedは有効な<counter-style-name>ですが、 ここでカウンタースタイル名として使うと無効になります。 (他の文脈、例えばextendシステムでは使用可能です。)
注: <custom-ident>はCSS全体キーワードも自動的に除外します。 さらに、insideのように、 カウンタースタイル名としては有効でも、 list-styleなど既存プロパティ値と競合するものは、 その場所では使えません。
カウンタースタイル名は大文字・小文字を区別します。 ただし、本仕様で定義されている名前は、カウンタースタイルとして使う場合はすべてASCII小文字化してパースされます。 例:list-style関連プロパティ群、 @counter-style規則、 counter()関数など。
各@counter-style規則は、すべてのカウンタースタイル記述子の値を明示的または暗黙的に指定します。 規則内で明示的に値を指定しない記述子は、仕様に記載された初期値を取ります。 これらの記述子は、定義された@counter-style規則の文脈内でのみ適用され、 文書言語の要素には適用されません。 記述子がどの要素に適用されるかや、値が子要素に継承されるかの概念はありません。 規則内で同じ記述子が複数回出現した場合は、最後に指定された有効な値のみが使用され、 それ以前の値はすべて無視されます。
@counter-styleを定義すると、その文書全体で使用可能になります。 同じ名前の@counter-style規則が複数定義された場合は、 標準のカスケードルールに従って、ひとつだけが勝ちます。@counter-style規則は「原子性」でカスケードされ、 ひとつが他と同じ名前の場合は完全に置き換えられ、 指定している記述子だけでなく、規則全体が置き換わります。
注: 定義済みカウンタースタイルでさえ上書き可能です。 UAスタイルシートは他のスタイルシートより先に読み込まれるため、 定義済みスタイルは常にカスケードでは負けることになります。
このat規則はCSSの前方互換パース要件に準拠しています。 この規則を理解できない準拠パーサーは、エラーなく無視します。 各ユーザーエージェントで認識されない、または実装されていない記述子、 あるいはこの仕様や将来のバージョンで示される文法と一致しない値の記述子は、 すべて完全に無視しなければならず、 @counter-style規則自体を無効にしません。
3.1. カウンターアルゴリズム: system 記述子
名前: | system |
---|---|
対象: | @counter-style |
値: | cyclic | numeric | alphabetic | symbolic | additive | [fixed <integer>?] | [ extends <counter-style-name> ] |
初期値: | symbolic |
system記述子は、カウンター値に基づいてカウンター表現を構築するために使用するアルゴリズムを指定します。例えば、cyclic カウンタースタイルはシンボルを繰り返し循環させますが、 numericカウンタースタイルはシンボルを数字として解釈し、 それに応じて表現を構築します。 各システムの詳細は以下の小節で定義されています。
各system値は、symbolsまたはadditive-symbols記述子と関連付けられており、 対応する記述子が持つべき最小長があります。 下記の各項目でそれぞれ定義されています。 @counter-style規則がこの要件を満たさない場合、 カウンタースタイルを定義しません。 (規則自体は構文的に有効ですが、効果はありません。)
3.1.1. 循環シンボル: cyclicシステム
cyclicカウンターシステムは、指定されたシンボルを繰り返し循環し、 リストの末尾に到達すると先頭に戻ります。 シンプルな箇条書き(シンボルが1つだけの場合)や、複数のシンボルを循環させる用途に使えます。 最初のカウンターシンボルは値1の表現に、 2番目のカウンターシンボル(存在する場合)は値2の表現に使われます。
systemがcyclicの場合、 symbols記述子には1つ以上のカウンターシンボルが必要です。 このシステムはすべてのカウンター値について定義されます。
@counter-style triangle { system: cyclic; symbols: ‣; suffix: " "; }
これにより、次のようなリストが生成されます:
‣ One ‣ Two ‣ Three
N個のカウンターシンボルがあり、整数valueの表現を構築する場合、 表現はリスト内の(value-1) mod N番目(0始まり)のカウンターシンボルとなります。
3.1.2. 消尽可能なシンボル: fixed システム
fixedカウンターシステムは、カウンターシンボルのリストを一度だけ走査し、 その後はフォールバックになります。 表現の種類が有限なカウンタースタイルに便利です。 例えば、Unicodeにはリスト用の特殊文字が限定数だけ定義されているものがあります(例:囲み数字など)。
systemがfixedの場合、 symbols記述子には1つ以上のカウンターシンボルが必要です。 このシステムは有限範囲のカウンター値に対して定義され、 first symbol valueから始まり、 カウンターシンボルリストの長さ分の値を持ちます。
このシステムを指定する際、後ろに整数を付与することもでき、 これがfirst symbol valueとなります。 省略した場合、first symbol valueは1になります。
@counter-style box-corner { system: fixed; symbols: ◰ ◳ ◲ ◱; suffix: ': '; }
これにより、次のようなリストが生成されます:
◰: One ◳: Two ◲: Three ◱: Four 5: Five 6: Six
最初のカウンターシンボルはfirst symbol valueの表現となり、 以降のカウンター値は後続のカウンターシンボルで表現されます。 カウンターシンボルリストが尽きた場合、 それ以降の値はこのカウンタースタイルで表現できなくなり、 フォールバックカウンタースタイルで表現されます。
3.1.3. 繰り返しシンボル: symbolicシステム
symbolicカウンターシステムは、指定されたシンボルを繰り返し循環し、 リストの各周回ごとに2倍、3倍…とシンボルを繰り返して表現します。 例えば、元のシンボルが「*」と「†」の場合、 2周目は「**」と「††」、 3周目は「***」と「†††」などとなります。 脚注スタイルのマーカーや、alphabeticシステムとは少し異なる表現のアルファベット型リストなどに使えます。
systemがsymbolicの場合、 symbols記述子には1つ以上のカウンターシンボルが必要です。 このシステムは正のカウンター値のみについて定義されます。
@counter-style footnote { system: symbolic; symbols: '*' ⁑ † ‡; suffix: " "; }
これにより、次のようなリストが生成されます:
* One ⁑ Two † Three ‡ Four ** Five ⁑⁑ Six
@counter-style upper-alpha-legal { system: symbolic; symbols: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z; }
このスタイルは最初の27値まではupper-alphaと同じですが、 それ以降は「AB」「AC」「AD」などと分かれます。 53番目以降では、upper-alphaは「BA」「BB」「BC」などとなりますが、 このスタイルでは「AAA」「BBB」「CCC」のような3文字表現になります。
表現の構築アルゴリズムは以下の通りです:
Nをカウンターシンボルリストの長さ、valueをカウンター値、 Sを空文字列とし、 symbol(n)をリスト内n番目(0始まり)のカウンターシンボルとします。
- chosen symbolを
symbol( (value - 1) mod N)
とする。 - representation lengthを
ceil( value / N )
とする。 - chosen symbolをrepresentation length回Sへ追加する。
最後にSを返します。
3.1.4. 一対一対応記数法:alphabeticシステム
alphabeticカウンターシステムは、counter symbolsのリストを alphabetic記数法の「数字」として解釈します。 これはデフォルトのlower-alphaカウンタースタイルに似ており、 "a", "b", "c" から "aa", "ab", "ac" へと繰り返します。 アルファベット式の記数法には0を表す数字がなく、 桁数が増えた場合は最初の数字のみで構成されます。 アルファベット記数法はリストによく使われ、 多くの表計算ソフトで列番号にも現れます。 リスト内の最初のcounter symbolは「1」として、 2番目は「2」として、 以下同様に解釈されます。
systemがalphabeticの場合、 symbols記述子には少なくとも2つのcounter symbolsが必要です。 このシステムは正のカウンター値のみ定義されます。
@counter-style go { system: alphabetic; symbols: url(white.svg) url(black.svg); suffix: " "; }
これにより次のようなリストが生成されます:
注: この例を正しく表示するにはSVG画像のサポートが必要です。
N個のcounter symbolsがある場合、 表現はcounter symbolsを数字としたN進のアルファベット記数法となります。 表現を構築するには、次のアルゴリズムを実行します:
Nをcounter symbolsリストの長さ、valueをカウンター値、 Sを空文字列とし、 symbol(n)をリスト内n番目(0始まり)のcounter symbolとします。
valueが0でない間:
- valueを
value - 1
にセットする。 - symbol( value mod N )をSの先頭に追加する。
- valueを
floor( value / N )
にセットする。
最後にSを返します。
3.1.5. 位取り記数法:numericシステム
numericカウンターシステムは、counter symbolsリストを 「位取り記数法」の「数字」として解釈します。 これはデフォルトのdecimalカウンタースタイルに似ています。 リストの最初のcounter symbolは「0」、 2番目は「1」、 以下同様に解釈されます。
systemがnumericの場合、 symbols記述子には少なくとも2つのcounter symbolsが必要です。 このシステムはすべてのカウンター値に定義されます。
@counter-style trinary { system: numeric; symbols: '0' '1' '2'; }
これにより次のようなリストが生成されます:
1. One 2. Two 10. Three 11. Four 12. Five 20. Six
N個のcounter symbolsがある場合、 表現はcounter symbolsを数字としたN進法の数となります。 表現を構築するには、次のアルゴリズムを実行します:
Nをcounter symbolsリストの長さ、valueをカウンター値、 Sを空文字列とし、 symbol(n)をリスト内n番目(0始まり)のcounter symbolとします。
- valueが0なら、
symbol(0)
をSに追加してSを返す。 -
valueが0でない間:
- symbol( value mod N )をSの先頭に追加する。
- valueを
floor( value / N )
にセットする。
- Sを返す。
3.1.6. 加算的記数法:additiveシステム
additiveカウンターシステムは、「符号-値」記数法の表現に使われます。 これは、桁位置によって数字の値を変えるのではなく、 より大きな値を持つ追加の数字を定義し、 全ての数字の値を合計することで数値が得られる仕組みです。 ローマ数字や世界各地の記数法で使われています。
systemがadditiveの場合、 additive-symbols記述子には少なくとも1つのadditive tupleが必要です。 このシステムは名目上すべてのカウンター値に定義されます (詳細は下記アルゴリズムを参照)。
@counter-style dice { system: additive; additive-symbols: 6 ⚅, 5 ⚄, 4 ⚃, 3 ⚂, 2 ⚁, 1 ⚀; suffix: " "; }
これにより次のようなリストが生成されます:
⚀ One ⚁ Two ⚂ Three ... ⚅⚄ Eleven ⚅⚅ Twelve ⚅⚅⚀ Thirteen
-
valueをカウンター値、Sを空文字列、 symbol listをadditive tuplesリストとする。
-
valueがゼロの場合:
-
symbol listに重みゼロのタプルがあれば、 そのタプルのcounter symbolをSに追加しSを返す。
-
なければ、このカウンタースタイルでは表現できないので、 フォールバックカウンタースタイルで表現する。
-
-
symbol list内の各tupleについて:
-
symbolとweightをtupleのcounter symbolと重みとする。
-
weightがゼロ、またはvalueより大きい場合、continue。
-
repsを
floor( value / weight )
とする。 -
symbolをSにreps回追加する。
-
valueを
weight * reps
分だけ減算する。 -
valueがゼロならSを返す。
-
-
アサーション:valueはまだゼロでない。
このカウンター値はこのカウンタースタイルでは表現できないので、 フォールバックカウンタースタイルで表現する。
注: この仕様で定義される全ての定義済み加算型@counter-style規則は、範囲内の全ての値に表現を生成しますが、 additive-symbolsの値によっては、上記アルゴリズムで表現が見つからない場合があります。 理論上は表現できても、アルゴリズム上見つからないことがあります。 例えば、@counter-styleにadditive-symbols: 3 "a", 2 "b";のように定義した場合、 上記アルゴリズムではカウンター値4で表現が見つかりませんが、 理論上は"bb"で表現可能です。 これはアルゴリズムの線形時間性を保つために必要です。
3.1.7. 既存カウンタースタイルから構築:extendsシステム
extendsシステムは、他のカウンタースタイルのアルゴリズムを利用しつつ、 負符号やサフィックスなど他の側面を変更することができます。 カウンタースタイルがextendsシステムを使う場合、 未指定の記述子は初期値ではなく、指定した拡張元カウンタースタイルから取得します。
@counter-styleがextendsシステムを使う場合、 symbolsやadditive-symbols記述子を含んではいけません。 そうすると@counter-style規則は無効となります。
指定された<counter-style-name> がASCII大文字・小文字を区別しない一致で、 disc、circle、square、disclosure-open、disclosure-closed(定義済みsymbolicカウンタースタイル)なら、 extendは規範スタイルシートで提供される「標準」定義から拡張します (ユーザーエージェント独自描画の例外ではなく)。
指定したカウンタースタイル名が定義済みのカウンタースタイル名でない場合、 decimalカウンタースタイルを拡張したものとして扱います。 1つ以上の@counter-style規則がextends値で循環関係を形成する場合、 その循環に関与する全てのカウンタースタイルはdecimalカウンタースタイルを拡張したものとして扱います。
1) first item 2) second item 3) third item
新しいカウンタースタイルを一から書くのではなく、 decimalを拡張するだけで実現できます:
@counter-style decimal-paren { system: extends decimal; suffix: ") "; }
3.2. 負の値の書式設定:negative 記述子
名前: | negative |
---|---|
対象: | @counter-style |
値: | <symbol> <symbol>? |
初期値: | "\2D"("-" ハイフンマイナス) |
negative記述子は、 カウンター値が負の場合に表現をどのように変更するかを定義します。
値の最初の<symbol>は、カウンター値が負の場合に表現の前に追加されます。2番目の<symbol>(指定されていれば)は、カウンター値が負の場合に表現の後ろに追加されます。
すべてのsystem値が負符号を使うわけではありません。 特に、カウンタースタイルは、そのsystem値がsymbolic、alphabetic、numeric、additive、 または拡張されたカウンタースタイル自体が負符号を使う場合はextends、 負符号を使うことになります。 カウンタースタイルが負符号を使わない場合は、 カウンター表現生成時に負符号を無視します。
3.3. マーカーの前の記号:prefix 記述子
名前: | prefix |
---|---|
対象: | @counter-style |
値: | <symbol> |
初期値: | ""(空文字列) |
prefix記述子は、マーカー表現の前に追加される<symbol>を指定します。 プレフィックスは負符号よりも前に追加されます。
注: プレフィックスは::marker疑似要素のデフォルト内容を構築するアルゴリズムによってのみ追加されます。counter()や counters()関数使用時には自動的に追加されません。
3.4. マーカーの後の記号:suffix 記述子
名前: | suffix |
---|---|
対象: | @counter-style |
値: | <symbol> |
初期値: | "\2E\20"("." ピリオド+スペース) |
suffix記述子は、マーカー表現の末尾に追加される<symbol>を指定します。 サフィックスは負符号の後ろに追加されます。
注: サフィックスは::marker疑似要素のデフォルト内容を構築するアルゴリズムによってのみ追加されます。counter()やcounters()関数使用時には自動的に追加されません。
3.5. カウンターの範囲制限:range 記述子
名前: | range |
---|---|
対象: | @counter-style |
値: | [ [ <integer> | infinite ]{2} ]# | auto |
初期値: | auto |
range記述子は、そのカウンタースタイルが定義される範囲を定義します。 カウンタースタイルが範囲外の値を表現しようとすると、 フォールバックカウンタースタイルに切り替わります。
- auto
-
範囲はカウンターシステムによって異なります:
- cyclic、numeric、fixedシステムの場合、 範囲は負の無限大から正の無限大までです。
- alphabeticおよびsymbolicシステムの場合、 範囲は1から正の無限大までです。
- additiveシステムの場合、 範囲は0から正の無限大までです。
- extendsシステムの場合、 拡張元のシステムに対してautoが生成する範囲となります。 複雑な定義済みスタイル(§ 7 複雑な定義済みカウンタースタイル)を拡張する場合は、 そのスタイルで定義された範囲になります。
- [ [ <integer> | infinite ]{2} ]#
-
これはカンマ区切りの範囲リストを定義します。
個々の範囲では、
最初の値が下限、
2番目の値が上限です。
この範囲は両端を含みます。
infiniteが範囲の最初の値として使われる場合は負の無限大、
2番目の値として使われる場合は正の無限大を表します。
カウンタースタイルの範囲は、リストで定義された全範囲の和集合です。
どれかの範囲で下限が上限より大きい場合は、 記述子全体が無効となり無視されます。
実装は最低でも下限が-215、上限が215-1(符号付き2バイト整数の範囲)の範囲をサポートしなければなりません。 より広い範囲をサポートしても構いません。 指定した値が実装のサポート範囲外の場合は、 実装がサポートする最も近い値として扱います。
3.6. ゼロパディングと固定幅表現:pad記述子
名前: | pad |
---|---|
対象: | @counter-style |
値: | <integer [0,∞]> && <symbol> |
初期値: | 0 "" |
pad記述子は、著者が「固定幅」カウンタースタイルを指定できるようにします。 表現がpad値より短い場合は、指定した<symbol>でパディングされます。 指定値より長い表現は通常通り構築されます。
- <integer [0,∞]> && <symbol>
-
<integer>は、すべてのカウンター表現が到達すべき最小長を指定します。
differenceを、指定された<integer>から書記素クラスタ数を引いた値とします(カウンター表現生成アルゴリズムに従い、これはprefix/suffix/negative追加前に行われることに注意)。 カウンター値が負で、カウンタースタイルが負符号を使う場合は、さらにカウンタースタイルのnegative 記述子の<symbol>(複数可)の書記素クラスタ数だけ減算します。
differenceが0より大きい場合は、 指定した<symbol>をdifference回、表現の前に追加します。
負の<integer>値は許可されません。
例えば、 1は"001"、 20は"020"、 300は"300"、 4000は"4000"、 -5は"-05"となります。
注: pad記述子は表現の書記素クラスタ数でカウントしますが、 パディングには<symbol>を使います。 指定したpad<symbol>が複数文字の場合、 意図した効果にならない可能性があります。 残念ながら、書記素クラスタ数でパディングを調整する方法は有用な制約との両立ができません。 著者は<symbol>に1書記素クラスタのみを指定することが推奨されます。
3.7. フォールバックの定義:fallback 記述子
名前: | fallback |
---|---|
対象: | @counter-style |
値: | <counter-style-name> |
初期値: | decimal |
fallback記述子は、現在のカウンタースタイルが特定のカウンター値の表現を作成できない場合に使用されるフォールバックカウンタースタイルを指定します。例えば、1~10の範囲で定義されたカウンタースタイルに11の値を表現させようとした場合、その値の表現はフォールバックカウンタースタイル(あるいはさらにそのフォールバック、というように)で構築されます。
fallback記述子の値が定義済みのカウンタースタイル名でない場合は、fallback記述子の使用値はdecimalとなります。 同様に、フォールバックをたどって表現可能なカウンタースタイルを探す際にループが検出された場合、decimalスタイルが代わりに使用されます。
フォールバックのループ指定は必ずしもエラーではありません。例えば、偶数・奇数で大きく異なる表現を持たせたい場合、偶数のみ表現できるスタイルと奇数のみ表現できるスタイルをそれぞれ相互にフォールバック指定することで実現できます。フォールバックグラフ自体は循環ですが、実際に値ごとにたどる際にはループが発生せず、各値はどちらかのスタイルで表現されます。
3.8. マーカー文字:symbolsおよびadditive-symbols記述子
名前: | symbols |
---|---|
対象: | @counter-style |
値: | <symbol>+ |
初期値: | n/a |
名前: | additive-symbols |
---|---|
対象: | @counter-style |
値: | [ <integer [0,∞]> && <symbol> ]# |
初期値: | n/a |
<symbol> = <string> | <image> | <custom-ident>
symbolsおよびadditive-symbols記述子は、system記述子で指定されたマーカー構築アルゴリズムで使用される記号を指定します。 @counter-style規則は、counter systemがcyclic、numeric、alphabetic、symbolic、 またはfixedの場合は有効なsymbols記述子を、 counter systemがadditiveの場合は有効なadditive-symbols記述子を持たなければなりません。 それ以外の場合、@counter-styleはカウンタースタイルを定義しません(ただし有効なat-ruleではあります)。
一部のカウンターシステムは、symbols記述子に2つ以上の項目が必要です。 システムがそれに該当し、symbols記述子が1つしか項目を持たない場合、@counter-style規則はカウンタースタイルを定義しません。
symbols記述子の各項目はカウンターシンボルを定義し、システムによって解釈が異なります。 additive-symbols記述子の各項目は加算タプルを定義し、カウンターシンボルと整数の重みから成ります。 重みは非負整数でなければならず、加算タプルは重みが厳密に降順となるよう指定しなければなりません。そうでない場合は宣言が無効となり無視されます。
カウンターシンボルは文字列・画像・識別子であり、1つの記述子内で混在できます。 カウンター表現はカウンターシンボルを連結して構築されます。 識別子は同じ文字列として表示され、画像はインライン置換要素として表示されます。 画像カウンターシンボルのデフォルトオブジェクトサイズは1em×1emの正方形です。
注: <image> 構文(<symbol>内)は現在「危険あり」です。 現時点で実装予定はなく、counter()の利用を複雑にする要素もあり、十分に検討されていません。
注: 記号定義に文字列ではなく識別子を使う場合、識別子の構文に注意してください。 特に"*"のようなASCII非英字は識別子ではなく、文字列として引用する必要があります。 いくつかのカウンタースタイルで使われる16進エスケープは後続のスペースを「食べる」ため(数字が曖昧なく後続できるように)、 2つのエスケープを分けるには間にスペース2つ必要です。そうでないと隣接して同一識別子扱いになります。 例えばsymbols: \660 \661;はU+0660とU+0661文字からなる1つの記号定義となり、意図した2つにはなりません。 エスケープを文字列で囲む(symbols: "\660" "\661")か、間にスペース2つ入れてください。
3.9. 音声合成:speak-as 記述子
名前: | speak-as |
---|---|
対象: | @counter-style |
値: | auto | bullets | numbers | words | spell-out | <counter-style-name> |
初期値: | auto |
カウンタースタイルは、見た目では意味が明らかでも、音声合成や非視覚的手段では意味のある表現ができない場合や、そのまま読み上げると意味不明となる場合があります。 speak-as記述子は、そのカウンタースタイルで整形されたカウンターの音声表現をどのように合成するかを指定します。 支援技術はこの音声表現を読み上げる際に利用し、speak-as値を音声以外の出力変換にも活用してよいです。 各値の意味は次の通りです:
- auto
- カウンタースタイルのsystemがalphabeticなら、spell-outと同じ。 systemがcyclicなら、bulletsと同じ。 systemがextendsなら、拡張元スタイルに対するautoと同じ。 それ以外はnumbersと同じ。
- bullets
- UAが、順序なしリスト項目の読み上げを表すUA定義のフレーズや音を出します。
- numbers
- カウンターの数値はコンテンツ言語で数字として読み上げられます。
- words
- 通常通りカウンター表現を生成し、 コンテンツ言語で普通のテキストとして読み上げます。 カウンター表現に画像が含まれる場合は、numbersと同じ扱いになります。
- spell-out
-
通常通りカウンター表現を生成し、
コンテンツ言語で一文字ずつ読み上げます。
UAが記号の発音方法を知らない場合(または画像を含む場合)は、numbersと同じ扱いになります。
例えば、英語でlower-greekは "alpha", "beta", "gamma"などと読み上げます。 逆に、フランス語でupper-latinは(発音記号で)/a/, /be/, /se/などとなります。
- <counter-style-name>
- カウンター値は指定したスタイルで読み上げられます(fallback記述子で値の表現を生成する挙動と似ています)。 指定スタイルが存在しない場合、この値はautoと同じ扱いになります。 speak-as参照をたどる際にループが検出された場合は、 そのループに参加するカウンタースタイルに対してこの値はautoとして扱われます。
@counter-style circled-lower-latin { system: alphabetic; speak-as: lower-latin; symbols: ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ; suffix: " "; }
systemをalphabeticにすると、通常はUAが文字名を読み上げようとしますが、 この場合は「Circled Letter A」のようになり、意味が通じません。 代わりに明示的にspeak-asをlower-latinに設定することで、意図通りラテン文字として読み上げられます。
4. 匿名カウンタースタイルの定義:symbols()関数
symbols()関数は、カウンタースタイルをプロパティ値の中でインライン定義できるようにします。 スタイルがスタイルシート内で一度だけ使われる場合など、完全な@counter-style規則を定義するのが大げさな場合に便利です。 @counter-style規則ほどの全機能はありませんが、十分に実用的なサブセットを提供します。 symbols()規則の構文は以下です:
symbols() = symbols( <symbols-type>? [ <string> | <image> ]+ ) <symbols-type> = cyclic | numeric | alphabetic | symbolic | fixed
symbols()関数は、名前なしの匿名カウンタースタイルを定義します。 prefixは""(空文字列)、 suffixは" "(U+0020 スペース)、 rangeはauto、 fallbackはdecimal、 negativeは"\2D"("-" ハイフンマイナス)、 padは0 ""、 speak-asはautoです。 カウンタースタイルのアルゴリズムは、指定されたsystem(省略時はsymbolic)と、与えられた<string>や<image>をsymbolsプロパティの値として使い、前章に従って構築されます。 systemがfixedの場合、first symbol valueは1です。
systemがalphabeticまたはnumericの場合は、<string>または<image>が2つ以上必要です。そうでない場合は関数が無効となります。
ol { list-style: symbols("*" "\2020" "\2021" "\A7"); }
は次のようなリストを生成します:
* One † Two ‡ Three § Four ** Five †† Six ‡‡ Seven
一方、counterのsystemを指定すると、次のようになります:
ol { list-style: symbols(cyclic "*" "\2020" "\2021" "\A7"); }
この場合、リストは以下のようになります:
* One † Two ‡ Three § Four * Five † Six ‡ Seven
注: symbols()関数は文字列と画像のみ使用可能ですが、symbols記述子は識別子も使えます。
5. list-style-type、counter()、counters()の拡張
CSS Level 2 [CSS21]では、list-style-typeプロパティやcounter()、counters() 記法はさまざまな定義済みキーワードを受け付け、各キーワードがカウンタースタイルを識別します。 このモジュールでは、これらの機能が下記定義の<counter-style>型を受け取れるように拡張されています:
<counter-style> = <counter-style-name> | <symbols()>
<counter-style-name> が未定義のカウンタースタイル名の場合は、decimalカウンタースタイルと同じ動作をしなければなりません (ただし算出値としてdecimalになるわけではありません)。
これらの文脈で使われる場合、<counter-style-name> はツリー単位参照です。
6. 単純な定義済みカウンタースタイル
以下のスタイルシートは、@counter-style規則を使用して、CSS 2およびCSS
2.1で定義されているすべてのカウンタースタイルを再定義しています。
このスタイルシートは規範的です—
6.1. 数値型:decimal、decimal-leading-zero、arabic-indic、armenian、upper-armenian、lower-armenian、bengali、cambodian、khmer、cjk-decimal、devanagari、georgian、gujarati、gurmukhi、hebrew、kannada、lao、malayalam、mongolian、myanmar、oriya、persian、lower-roman、upper-roman、tamil、telugu、thai、tibetan
- decimal
- 西洋の十進数 (例:1, 2, 3, ..., 98, 99, 100)。
- decimal-leading-zero
- 先頭にゼロを付加した十進数 (例:01, 02, 03, ..., 98, 99, 100)。
- arabic-indic
- アラビア-インディック記数法 (例:١, ٢, ٣, ٤, ..., ٩٨, ٩٩, ١٠٠)。
- armenian
- upper-armenian
- 伝統的なアルメニア大文字記数法 (例:Ա, Բ, Գ, ..., ՂԸ, ՂԹ, Ճ)。
- lower-armenian
- アルメニア小文字記数法 (例:ա, բ, գ, ..., ղը, ղթ, ճ)。
- bengali
- ベンガル記数法 (例:১, ২, ৩, ..., ৯৮, ৯৯, ১০০)。
- cambodian
- khmer
- カンボジア/クメール記数法 (例:១, ២, ៣, ..., ៩៨, ៩៩, ១០០)。
- cjk-decimal
- 漢字十進記数法 (例:一, 二, 三, ..., 九八, 九九, 一〇〇)。
- devanagari
- デーヴァナーガリー記数法 (例:१, २, ३, ..., ९८, ९९, १००)。
- georgian
- 伝統的なグルジア記数法 (例:ა, ბ, გ, ..., ჟჱ, ჟთ, რ)。
- gujarati
- グジャラート記数法 (例:૧, ૨, ૩, ..., ૯૮, ૯૯, ૧૦૦)。
- gurmukhi
- グルムキー記数法 (例:੧, ੨, ੩, ..., ੯੮, ੯੯, ੧੦੦)。
- hebrew
- 伝統的なヘブライ記数法 (例:א, ב, ג, ..., צח, צט, ק)。
- kannada
- カンナダ記数法 (例:೧, ೨, ೩, ..., ೯೮, ೯೯, ೧೦೦)。
- lao
- ラオス記数法 (例:໑, ໒, ໓, ..., ໙໘, ໙໙, ໑໐໐)。
- malayalam
- マラヤーラム記数法 (例:൧, ൨, ൩, ..., ൯൮, ൯൯, ൧൦൦)。
- mongolian
- モンゴル記数法 (例:᠑, ᠒, ᠓, ..., ᠙᠘, ᠙᠙, ᠑᠐᠐)。
- myanmar
- ミャンマー(ビルマ)記数法 (例:၁, ၂, ၃, ..., ၉၈, ၉၉, ၁၀၀)。
- oriya
- オリヤー記数法 (例:୧, ୨, ୩, ..., ୯୮, ୯୯, ୧୦୦)。
- persian
- ペルシア記数法 (例:۱, ۲, ۳, ۴, ..., ۹۸, ۹۹, ۱۰۰)。
- lower-roman
- 小文字ASCIIローマ数字 (例:i, ii, iii, ..., xcviii, xcix, c)。
- upper-roman
- 大文字ASCIIローマ数字 (例:I, II, III, ..., XCVIII, XCIX, C)。
- tamil
- タミル記数法 (例:௧, ௨, ௩, ..., ௯௮, ௯௯, ௧௦௦)。
- telugu
- テルグ記数法 (例:౧, ౨, ౩, ..., ౯౮, ౯౯, ౧౦౦)。
- thai
- タイ(シャム)記数法 (例:๑, ๒, ๓, ..., ๙๘, ๙๙, ๑๐๐)。
- tibetan
- チベット記数法 (例:༡, ༢, ༣, ..., ༩༨, ༩༩, ༡༠༠)。
以下のスタイルシート断片は、これらの定義済みカウンタースタイルの規範的定義を示します:
@counter-style decimal { system: numeric; symbols: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9'; } @counter-style decimal-leading-zero { system: extends decimal; pad: 2 '0'; } @counter-style arabic-indic { system: numeric; symbols: "\660" "\661" "\662" "\663" "\664" "\665" "\666" "\667" "\668" "\669"; /* ٠ ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩ */ } @counter-style armenian { system: additive; range: 1 9999; additive-symbols: 9000 \554, 8000 \553, 7000 \552, 6000 \551, 5000 \550, 4000 \54F, 3000 \54E, 2000 \54D, 1000 \54C, 900 \54B, 800 \54A, 700 \549, 600 \548, 500 \547, 400 \546, 300 \545, 200 \544, 100 \543, 90 \542, 80 \541, 70 \540, 60 \53F, 50 \53E, 40 \53D, 30 \53C, 20 \53B, 10 \53A, 9 \539, 8 \538, 7 \537, 6 \536, 5 \535, 4 \534, 3 \533, 2 \532, 1 \531; /* 9000 Ք, 8000 Փ, 7000 Ւ, 6000 Ց, 5000 Ր, 4000 Տ, 3000 Վ, 2000 Ս, 1000 Ռ, 900 Ջ, 800 Պ, 700 Չ, 600 Ո, 500 Շ, 400 Ն, 300 Յ, 200 Մ, 100 Ճ, 90 Ղ, 80 Ձ, 70 Հ, 60 Կ, 50 Ծ, 40 Խ, 30 Լ, 20 Ի, 10 Ժ, 9 Թ, 8 Ը, 7 Է, 6 Զ, 5 Ե, 4 Դ, 3 Գ, 2 Բ, 1 Ա */ } @counter-style upper-armenian { system: extends armenian; } @counter-style lower-armenian { system: additive; range: 1 9999; additive-symbols: 9000 "\584", 8000 "\583", 7000 "\582", 6000 "\581", 5000 "\580", 4000 "\57F", 3000 "\57E", 2000 "\57D", 1000 "\57C", 900 "\57B", 800 "\57A", 700 "\579", 600 "\578", 500 "\577", 400 "\576", 300 "\575", 200 "\574", 100 "\573", 90 "\572", 80 "\571", 70 "\570", 60 "\56F", 50 "\56E", 40 "\56D", 30 "\56C", 20 "\56B", 10 "\56A", 9 "\569", 8 "\568", 7 "\567", 6 "\566", 5 "\565", 4 "\564", 3 "\563", 2 "\562", 1 "\561"; /* 9000 ք, 8000 փ, 7000 ւ, 6000 ց, 5000 ր, 4000 տ, 3000 վ, 2000 ս, 1000 ռ, 900 ջ, 800 պ, 700 չ, 600 ո, 500 շ, 400 ն, 300 յ, 200 մ, 100 ճ, 90 ղ, 80 ձ, 70 հ, 60 կ, 50 ծ, 40 խ, 30 լ, 20 ի, 10 ժ, 9 թ, 8 ը, 7 է, 6 զ, 5 ե, 4 դ, 3 գ, 2 բ, 1 ա */ } @counter-style bengali { system: numeric; symbols: "\9E6" "\9E7" "\9E8" "\9E9" "\9EA" "\9EB" "\9EC" "\9ED" "\9EE" "\9EF"; /* ০ ১ ২ ৩ ৪ ৫ ৬ ৭ ৮ ৯ */ } @counter-style cambodian { system: numeric; symbols: "\17E0" "\17E1" "\17E2" "\17E3" "\17E4" "\17E5" "\17E6" "\17E7" "\17E8" "\17E9"; /* ០ ១ ២ ៣ ៤ ៥ ៦ ៧ ៨ ៩ */ } @counter-style khmer { system: extends cambodian; } @counter-style cjk-decimal { system: numeric; range: 0 infinite; symbols: \3007 \4E00 \4E8C \4E09 \56DB \4E94 \516D \4E03 \516B \4E5D; /* 〇 一 二 三 四 五 六 七 八 九 */ suffix: "\3001"; /* "、" */ } @counter-style devanagari { system: numeric; symbols: "\966" "\967" "\968" "\969" "\96A" "\96B" "\96C" "\96D" "\96E" "\96F"; /* ० १ २ ३ ४ ५ ६ ७ ८ ९ */ } @counter-style georgian { system: additive; range: 1 19999; additive-symbols: 10000 \10F5, 9000 \10F0, 8000 \10EF, 7000 \10F4, 6000 \10EE, 5000 \10ED, 4000 \10EC, 3000 \10EB, 2000 \10EA, 1000 \10E9, 900 \10E8, 800 \10E7, 700 \10E6, 600 \10E5, 500 \10E4, 400 \10F3, 300 \10E2, 200 \10E1, 100 \10E0, 90 \10DF, 80 \10DE, 70 \10DD, 60 \10F2, 50 \10DC, 40 \10DB, 30 \10DA, 20 \10D9, 10 \10D8, 9 \10D7, 8 \10F1, 7 \10D6, 6 \10D5, 5 \10D4, 4 \10D3, 3 \10D2, 2 \10D1, 1 \10D0; /* 10000 ჵ, 9000 ჰ, 8000 ჯ, 7000 ჴ, 6000 ხ, 5000 ჭ, 4000 წ, 3000 ძ, 2000 ც, 1000 ჩ, 900 შ, 800 ყ, 700 ღ, 600 ქ, 500 ფ, 400 ჳ, 300 ტ, 200 ს, 100 რ, 90 ჟ, 80 პ, 70 ო, 60 ჲ, 50 ნ, 40 მ, 30 ლ, 20 კ, 10 ი, 9 თ, 8 ჱ, 7 ზ, 6 ვ, 5 ე, 4 დ, 3 გ, 2 ბ, 1 ა */ } @counter-style gujarati { system: numeric; symbols: "\AE6" "\AE7" "\AE8" "\AE9" "\AEA" "\AEB" "\AEC" "\AED" "\AEE" "\AEF"; /* ૦ ૧ ૨ ૩ ૪ ૫ ૬ ૭ ૮ ૯ */ } @counter-style gurmukhi { system: numeric; symbols: "\A66" "\A67" "\A68" "\A69" "\A6A" "\A6B" "\A6C" "\A6D" "\A6E" "\A6F"; /* ੦ ੧ ੨ ੩ ੪ ੫ ੬ ੭ ੮ ੯ */ } @counter-style hebrew { system: additive; range: 1 10999; additive-symbols: 10000 \5D9\5F3, 9000 \5D8\5F3, 8000 \5D7\5F3, 7000 \5D6\5F3, 6000 \5D5\5F3, 5000 \5D4\5F3, 4000 \5D3\5F3, 3000 \5D2\5F3, 2000 \5D1\5F3, 1000 \5D0\5F3, 400 \5EA, 300 \5E9, 200 \5E8, 100 \5E7, 90 \5E6, 80 \5E4, 70 \5E2, 60 \5E1, 50 \5E0, 40 \5DE, 30 \5DC, 20 \5DB, 19 \5D9\5D8, 18 \5D9\5D7, 17 \5D9\5D6, 16 \5D8\5D6, 15 \5D8\5D5, 10 \5D9, 9 \5D8, 8 \5D7, 7 \5D6, 6 \5D5, 5 \5D4, 4 \5D3, 3 \5D2, 2 \5D1, 1 \5D0; /* 10000 י׳, 9000 ט׳, 8000 ח׳, 7000 ז׳, 6000 ו׳, 5000 ה׳, 4000 ד׳, 3000 ג׳, 2000 ב׳, 1000 א׳, 400 ת, 300 ש, 200 ר, 100 ק, 90 צ, 80 פ, 70 ע, 60 ס, 50 נ, 40 מ, 30 ל, 20 כ, 19 יט, 18 יח, 17 יז, 16 טז, 15 טו, 10 י, 9 ט, 8 ח, 7 ז, 6 ו, 5 ה, 4 ד, 3 ג, 2 ב, 1 א */ /* このシステムでは、15と16がテトラグラマトンに類似するのを避けるため、19~15の値を手動で指定しています。 */ /* 実装は、より広い範囲に対して手動実装しても構いません。詳細は下記参照。 */ } @counter-style kannada { system: numeric; symbols: "\CE6" "\CE7" "\CE8" "\CE9" "\CEA" "\CEB" "\CEC" "\CED" "\CEE" "\CEF"; /* ೦ ೧ ೨ ೩ ೪ ೫ ೬ ೭ ೮ ೯ */ } @counter-style lao { system: numeric; symbols: "\ED0" "\ED1" "\ED2" "\ED3" "\ED4" "\ED5" "\ED6" "\ED7" "\ED8" "\ED9"; /* ໐ ໑ ໒ ໓ ໔ ໕ ໖ ໗ ໘ ໙ */ } @counter-style malayalam { system: numeric; symbols: "\D66" "\D67" "\D68" "\D69" "\D6A" "\D6B" "\D6C" "\D6D" "\D6E" "\D6F"; /* ൦ ൧ ൨ ൩ ൪ ൫ ൬ ൭ ൮ ൯ */ } @counter-style mongolian { system: numeric; symbols: "\1810" "\1811" "\1812" "\1813" "\1814" "\1815" "\1816" "\1817" "\1818" "\1819"; /* ᠐ ᠑ ᠒ ᠓ ᠔ ᠕ ᠖ ᠗ ᠘ ᠙ */ } @counter-style myanmar { system: numeric; symbols: "\1040" "\1041" "\1042" "\1043" "\1044" "\1045" "\1046" "\1047" "\1048" "\1049"; /* ၀ ၁ ၂ ၃ ၄ ၅ ၆ ၇ ၈ ၉ */ } @counter-style oriya { system: numeric; symbols: "\B66" "\B67" "\B68" "\B69" "\B6A" "\B6B" "\B6C" "\B6D" "\B6E" "\B6F"; /* ୦ ୧ ୨ ୩ ୪ ୫ ୬ ୭ ୮ ୯ */ } @counter-style persian { system: numeric; symbols: "\6F0" "\6F1" "\6F2" "\6F3" "\6F4" "\6F5" "\6F6" "\6F7" "\6F8" "\6F9"; /* ۰ ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ */ } @counter-style lower-roman { system: additive; range: 1 3999; additive-symbols: 1000 m, 900 cm, 500 d, 400 cd, 100 c, 90 xc, 50 l, 40 xl, 10 x, 9 ix, 5 v, 4 iv, 1 i; } @counter-style upper-roman { system: additive; range: 1 3999; additive-symbols: 1000 M, 900 CM, 500 D, 400 CD, 100 C, 90 XC, 50 L, 40 XL, 10 X, 9 IX, 5 V, 4 IV, 1 I; } @counter-style tamil { system: numeric; symbols: "\BE6" "\BE7" "\BE8" "\BE9" "\BEA" "\BEB" "\BEC" "\BED" "\BEE" "\BEF"; /* ௦ ௧ ௨ ௩ ௪ ௫ ௬ ௭ ௮ ௯ */ } @counter-style telugu { system: numeric; symbols: "\C66" "\C67" "\C68" "\C69" "\C6A" "\C6B" "\C6C" "\C6D" "\C6E" "\C6F"; /* ౦ ౧ ౨ ౩ ౪ ౫ ౬ ౭ ౮ ౯ */ } @counter-style thai { system: numeric; symbols: "\E50" "\E51" "\E52" "\E53" "\E54" "\E55" "\E56" "\E57" "\E58" "\E59"; /* ๐ ๑ ๒ ๓ ๔ ๕ ๖ ๗ ๘ ๙ */ } @counter-style tibetan { system: numeric; symbols: "\F20" "\F21" "\F22" "\F23" "\F24" "\F25" "\F26" "\F27" "\F28" "\F29"; /* ༠ ༡ ༢ ༣ ༤ ༥ ༦ ༧ ༨ ༩ */ }
実装は、hebrewを上記@counter-style規則で指定された範囲まで最低限実装しなければなりませんが、より広い範囲まで実装しても構いません。 その場合は、対応するrange記述子が実装した範囲を反映している必要があります。
6.2. アルファベット型:lower-alpha、lower-latin、upper-alpha、upper-latin、lower-greek、hiragana、hiragana-iroha、katakana、katakana-iroha
- lower-alpha
- lower-latin
- 小文字ASCII英字 (例:a, b, c, ..., z, aa, ab)。
- upper-alpha
- upper-latin
- 大文字ASCII英字 (例:A, B, C, ..., Z, AA, AB)。
- lower-greek
- ギリシャ語小文字 (例:α, β, γ, ..., ω, αα, αβ)。
- hiragana
- 五十音順ひらがな (例:あ, い, う, ..., ん, ああ, あい)。
- hiragana-iroha
- いろは順ひらがな (例:い, ろ, は, ..., す, いい, いろ)。
- katakana
- 五十音順カタカナ (例:ア, イ, ウ, ..., ン, アア, アイ)。
- katakana-iroha
- いろは順カタカナ (例:イ, ロ, ハ, ..., ス, イイ, イロ)
以下のスタイルシート断片は、これらの定義済みカウンタースタイルの規範定義です:
@counter-style lower-alpha { system: alphabetic; symbols: a b c d e f g h i j k l m n o p q r s t u v w x y z; } @counter-style lower-latin { system: extends lower-alpha; } @counter-style upper-alpha { system: alphabetic; symbols: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z; } @counter-style upper-latin { system: extends upper-alpha; } @counter-style lower-greek { system: alphabetic; symbols: "\3B1" "\3B2" "\3B3" "\3B4" "\3B5" "\3B6" "\3B7" "\3B8" "\3B9" "\3BA" "\3BB" "\3BC" "\3BD" "\3BE" "\3BF" "\3C0" "\3C1" "\3C3" "\3C4" "\3C5" "\3C6" "\3C7" "\3C8" "\3C9"; /* α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω */ } @counter-style hiragana { system: alphabetic; symbols: "\3042" "\3044" "\3046" "\3048" "\304A" "\304B" "\304D" "\304F" "\3051" "\3053" "\3055" "\3057" "\3059" "\305B" "\305D" "\305F" "\3061" "\3064" "\3066" "\3068" "\306A" "\306B" "\306C" "\306D" "\306E" "\306F" "\3072" "\3075" "\3078" "\307B" "\307E" "\307F" "\3080" "\3081" "\3082" "\3084" "\3086" "\3088" "\3089" "\308A" "\308B" "\308C" "\308D" "\308F" "\3090" "\3091" "\3092" "\3093"; /* あ い う え お か き く け こ さ し す せ そ た ち つ て と な に ぬ ね の は ひ ふ へ ほ ま み む め も や ゆ よ ら り る れ ろ わ ゐ ゑ を ん */ suffix: "、"; } @counter-style hiragana-iroha { system: alphabetic; symbols: "\3044" "\308D" "\306F" "\306B" "\307B" "\3078" "\3068" "\3061" "\308A" "\306C" "\308B" "\3092" "\308F" "\304B" "\3088" "\305F" "\308C" "\305D" "\3064" "\306D" "\306A" "\3089" "\3080" "\3046" "\3090" "\306E" "\304A" "\304F" "\3084" "\307E" "\3051" "\3075" "\3053" "\3048" "\3066" "\3042" "\3055" "\304D" "\3086" "\3081" "\307F" "\3057" "\3091" "\3072" "\3082" "\305B" "\3059"; /* い ろ は に ほ へ と ち り ぬ る を わ か よ た れ そ つ ね な ら む う ゐ の お く や ま け ふ こ え て あ さ き ゆ め み し ゑ ひ も せ す */ suffix: "、"; } @counter-style katakana { system: alphabetic; symbols: "\30A2" "\30A4" "\30A6" "\30A8" "\30AA" "\30AB" "\30AD" "\30AF" "\30B1" "\30B3" "\30B5" "\30B7" "\30B9" "\30BB" "\30BD" "\30BF" "\30C1" "\30C4" "\30C6" "\30C8" "\30CA" "\30CB" "\30CC" "\30CD" "\30CE" "\30CF" "\30D2" "\30D5" "\30D8" "\30DB" "\30DE" "\30DF" "\30E0" "\30E1" "\30E2" "\30E4" "\30E6" "\30E8" "\30E9" "\30EA" "\30EB" "\30EC" "\30ED" "\30EF" "\30F0" "\30F1" "\30F2" "\30F3"; /* ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ヰ ヱ ヲ ン */ suffix: "、"; } @counter-style katakana-iroha { system: alphabetic; symbols: "\30A4" "\30ED" "\30CF" "\30CB" "\30DB" "\30D8" "\30C8" "\30C1" "\30EA" "\30CC" "\30EB" "\30F2" "\30EF" "\30AB" "\30E8" "\30BF" "\30EC" "\30BD" "\30C4" "\30CD" "\30CA" "\30E9" "\30E0" "\30A6" "\30F0" "\30CE" "\30AA" "\30AF" "\30E4" "\30DE" "\30B1" "\30D5" "\30B3" "\30A8" "\30C6" "\30A2" "\30B5" "\30AD" "\30E6" "\30E1" "\30DF" "\30B7" "\30F1" "\30D2" "\30E2" "\30BB" "\30B9"; /* イ ロ ハ ニ ホ ヘ ト チ リ ヌ ル ヲ ワ カ ヨ タ レ ソ ツ ネ ナ ラ ム ウ ヰ ノ オ ク ヤ マ ケ フ コ エ テ ア サ キ ユ メ ミ シ ヱ ヒ モ セ ス */ suffix: "、"; }
6.3. 記号型:disc、circle、square、disclosure-open、disclosure-closed
- disc
- 塗りつぶし円(• U+2022 BULLETに類似)。
- circle
- 空心円(◦ U+25E6 WHITE BULLETに類似)。
- square
- 塗りつぶし四角(▪ U+25AA BLACK SMALL SQUAREに類似)。
- disclosure-open
- disclosure-closed
- 開閉型ウィジェット(HTML
details
要素など)に適した記号。
以下のスタイルシート断片は、これらの定義済みカウンタースタイルの規範定義です:
@counter-style disc { system: cyclic; symbols: \2022; /* • */ suffix: " "; } @counter-style circle { system: cyclic; symbols: \25E6; /* ◦ */ suffix: " "; } @counter-style square { system: cyclic; symbols: \25AA; /* ▪ */ suffix: " "; } @counter-style disclosure-open { system: cyclic; suffix: " "; /* symbolsは規範テキストを参照 */ } @counter-style disclosure-closed { system: cyclic; suffix: " "; /* symbolsは規範テキストを参照 */ }
list-style-typeで使う場合、UAは指定された文字の代わりにUA生成画像やUA選択フォントでこれらを描画してもよいです。 画像を使う場合は、指定文字に似ていて、1em×1em四方に適切に収まる必要があります。
disclosure-openおよびdisclosure-closedカウンタースタイルでは、
マーカーはHTMLのdetails
要素などの開閉状態を示す画像や文字でなければなりません。
画像が方向性を持つ場合は、要素の書字モードに応じて切り替わる必要があります(Images 4のbidi-sensitive images機能に類似)。
例えばdisclosure-closedスタイルはU+25B8 BLACK
RIGHT-POINTING SMALL TRIANGLE(▸)やU+25C2 BLACK LEFT-POINTING SMALL TRIANGLE(◂)を使い、disclosure-openスタイルはU+25BE BLACK DOWN-POINTING SMALL
TRIANGLE(▾)を使う場合があります。
6.4. 固定型:cjk-earthly-branch、cjk-heavenly-stem
- cjk-earthly-branch
- 漢字「十二支」序数詞 (例:子、丑、寅、..., 亥)。
- cjk-heavenly-stem
- 漢字「十干」序数詞 (例:甲、乙、丙、..., 癸)
以下のスタイルシート断片は、これらの定義済みカウンタースタイルの規範定義です:
@counter-style cjk-earthly-branch { system: fixed; symbols: "\5B50" "\4E11" "\5BC5" "\536F" "\8FB0" "\5DF3" "\5348" "\672A" "\7533" "\9149" "\620C" "\4EA5"; /* 子 丑 寅 卯 辰 巳 午 未 申 酉 戌 亥 */ suffix: "、"; } @counter-style cjk-heavenly-stem { system: fixed; symbols: "\7532" "\4E59" "\4E19" "\4E01" "\620A" "\5DF1" "\5E9A" "\8F9B" "\58EC" "\7678"; /* 甲 乙 丙 丁 戊 己 庚 辛 壬 癸 */ suffix: "、"; }
7. 複雑な定義済みカウンタースタイル
著者は@counter-style規則で独自のカウンタースタイルを定義するか、定義済みカウンタースタイル群に依拠することができますが、一部のカウンタースタイルは規定アルゴリズムでは捉えきれないほど複雑です。 これらのカウンタースタイルは本節で説明します。
この節で規定されるカウンタースタイルの一部は、カウンター値生成のための独自アルゴリズムを持ちますが、それ以外は@counter-style規則で定義されるカウンタースタイルと同じです。 例えば、著者はextendsシステムextendsでこれらのスタイルを参照し、アルゴリズムは流用しつつ他の記述子を変更することができます。
この節で定義される全てのカウンタースタイルは、音声表現がnumbersであり、負符号を使います。
7.1. 長形式東アジアカウンタースタイル
中国語、日本語、韓国語には、「一万三千百二十三」のような英語の「thirteen thousand one hundred and twenty-three」に似た「長形式」カウンタースタイルがあります。 それぞれに正式・略式の両方のバリエーションがあります。 正式スタイルは金融・法律文書でよく使われ、文字改変が困難なため改ざん防止効果があります。
カウンタースタイル | 0 | 1 | 2 | 3 | 10 | 11 | 99 | 100 | 101 | 6001 |
---|---|---|---|---|---|---|---|---|---|---|
japanese-informal | 〇 | 一 | 二 | 三 | 十 | 十一 | 九十九 | 百 | 百一 | 六千一 |
japanese-formal | 零 | 壱 | 弐 | 参 | 壱拾 | 壱拾壱 | 九拾九 | 壱百 | 壱百壱 | 六阡壱 |
korean-hangul-formal | 영 | 일 | 이 | 삼 | 일십 | 일십일 | 구십구 | 일백 | 일백일 | 육천일 |
korean-hanja-informal | 零 | 一 | 二 | 三 | 十 | 十一 | 九十九 | 百 | 百一 | 六千一 |
korean-hanja-formal | 零 | 壹 | 貳 | 參 | 壹拾 | 壹拾壹 | 九拾九 | 壹百 | 壹百壹 | 六仟壹 |
simp-chinese-informal | 零 | 一 | 二 | 三 | 十 | 十一 | 九十九 | 一百 | 一百零一 | 六千零一 |
simp-chinese-formal | 零 | 壹 | 贰 | 叁 | 壹拾 | 壹拾壹 | 玖拾玖 | 壹佰 | 壹佰零壹 | 陆仟零壹 |
trad-chinese-informal | 零 | 一 | 二 | 三 | 十 | 十一 | 九十九 | 一百 | 一百零一 | 六千零一 |
trad-chinese-formal | 零 | 壹 | 貳 | 參 | 壹拾 | 壹拾壹 | 玖拾玖 | 壹佰 | 壹佰零壹 | 陸仟零壹 |
10,000以上の数の長形式CJKスタイル表現方法については意見が分かれるため、 この節で定義されるすべてのカウンタースタイルは-9999~9999の範囲で定義されていますが、実装はより広い範囲をサポートしても構いません。 実装がサポートする範囲外では、フォールバックとしてcjk-decimalを使用します。
注: 実装は1万以上の表現について調査・実装し、一般的な解答が得られた際はCSSワーキンググループに報告することが推奨されています。 このテーマに関する過去の調査は、過去の草案に含まれています。
7.1.1. 日本語:japanese-informal および japanese-formal
- japanese-informal
- 日本語漢数字(略式) (例:千百十一)
- japanese-formal
- 日本語漢数字(正式) (例:壱阡壱百壱拾壱)
@counter-style japanese-informal { system: additive; range: -9999 9999; additive-symbols: 9000 \4E5D\5343, 8000 \516B\5343, 7000 \4E03\5343, 6000 \516D\5343, 5000 \4E94\5343, 4000 \56DB\5343, 3000 \4E09\5343, 2000 \4E8C\5343, 1000 \5343, 900 \4E5D\767E, 800 \516B\767E, 700 \4E03\767E, 600 \516D\767E, 500 \4E94\767E, 400 \56DB\767E, 300 \4E09\767E, 200 \4E8C\767E, 100 \767E, 90 \4E5D\5341, 80 \516B\5341, 70 \4E03\5341, 60 \516D\5341, 50 \4E94\5341, 40 \56DB\5341, 30 \4E09\5341, 20 \4E8C\5341, 10 \5341, 9 \4E5D, 8 \516B, 7 \4E03, 6 \516D, 5 \4E94, 4 \56DB, 3 \4E09, 2 \4E8C, 1 \4E00, 0 \3007; /* 9000 九千, 8000 八千, 7000 七千, 6000 六千, 5000 五千, 4000 四千, 3000 三千, 2000 二千, 1000 千, 900 九百, 800 八百, 700 七百, 600 六百, 500 五百, 400 四百, 300 三百, 200 二百, 100 百, 90 九十, 80 八十, 70 七十, 60 六十, 50 五十, 40 四十, 30 三十, 20 二十, 10 十, 9 九, 8 八, 7 七, 6 六, 5 五, 4 四, 3 三, 2 二, 1 一, 0 〇 */ suffix: '\3001'; /* 、 */ negative: "\30DE\30A4\30CA\30B9"; /* マイナス */ fallback: cjk-decimal; } @counter-style japanese-formal { system: additive; range: -9999 9999; additive-symbols: 9000 \4E5D\9621, 8000 \516B\9621, 7000 \4E03\9621, 6000 \516D\9621, 5000 \4F0D\9621, 4000 \56DB\9621, 3000 \53C2\9621, 2000 \5F10\9621, 1000 \58F1\9621, 900 \4E5D\767E, 800 \516B\767E, 700 \4E03\767E, 600 \516D\767E, 500 \4F0D\767E, 400 \56DB\767E, 300 \53C2\767E, 200 \5F10\767E, 100 \58F1\767E, 90 \4E5D\62FE, 80 \516B\62FE, 70 \4E03\62FE, 60 \516D\62FE, 50 \4F0D\62FE, 40 \56DB\62FE, 30 \53C2\62FE, 20 \5F10\62FE, 10 \58F1\62FE, 9 \4E5D, 8 \516B, 7 \4E03, 6 \516D, 5 \4F0D, 4 \56DB, 3 \53C2, 2 \5F10, 1 \58F1, 0 \96F6; /* 9000 九阡, 8000 八阡, 7000 七阡, 6000 六阡, 5000 伍阡, 4000 四阡, 3000 参阡, 2000 弐阡, 1000 壱阡, 900 九百, 800 八百, 700 七百, 600 六百, 500 伍百, 400 四百, 300 参百, 200 弐百, 100 壱百, 90 九拾, 80 八拾, 70 七拾, 60 六拾, 50 伍拾, 40 四拾, 30 参拾, 20 弐拾, 10 壱拾, 9 九, 8 八, 7 七, 6 六, 5 伍, 4 四, 3 参, 2 弐, 1 壱, 0 零 */ suffix: '\3001'; /* 、 */ negative: "\30DE\30A4\30CA\30B9"; /* マイナス */ fallback: cjk-decimal; }
7.1.2. 韓国語:korean-hangul-formal、korean-hanja-informal、korean-hanja-formal
- korean-hangul-formal
- 韓国語ハングル数字 (例:일천일백일십일)
- korean-hanja-informal
- 韓国語ハンジャ(漢字)数字(略式) (例:千百十一)
- korean-hanja-formal
- 韓国語ハン(漢字)数字(正式) (例:壹仟壹百壹拾壹)
@counter-style korean-hangul-formal { system: additive; range: -9999 9999; additive-symbols: 9000 \AD6C\CC9C, 8000 \D314\CC9C, 7000 \CE60\CC9C, 6000 \C721\CC9C, 5000 \C624\CC9C, 4000 \C0AC\CC9C, 3000 \C0BC\CC9C, 2000 \C774\CC9C, 1000 \C77C\CC9C, 900 \AD6C\BC31, 800 \D314\BC31, 700 \CE60\BC31, 600 \C721\BC31, 500 \C624\BC31, 400 \C0AC\BC31, 300 \C0BC\BC31, 200 \C774\BC31, 100 \C77C\BC31, 90 \AD6C\C2ED, 80 \D314\C2ED, 70 \CE60\C2ED, 60 \C721\C2ED, 50 \C624\C2ED, 40 \C0AC\C2ED, 30 \C0BC\C2ED, 20 \C774\C2ED, 10 \C77C\C2ED, 9 \AD6C, 8 \D314, 7 \CE60, 6 \C721, 5 \C624, 4 \C0AC, 3 \C0BC, 2 \C774, 1 \C77C, 0 \C601; /* 9000 구천, 8000 팔천, 7000 칠천, 6000 육천, 5000 오천, 4000 사천, 3000 삼천, 2000 이천, 1000 일천, 900 구백, 800 팔백, 700 칠백, 600 육백, 500 오백, 400 사백, 300 삼백, 200 이백, 100 일백, 90 구십, 80 팔십, 70 칠십, 60 육십, 50 오십, 40 사십, 30 삼십, 20 이십, 10 일십, 9 구, 8 팔, 7 칠, 6 육, 5 오, 4 사, 3 삼, 2 이, 1 일, 0 영 */ suffix: ', '; negative: "\B9C8\C774\B108\C2A4 "; /* マイナス(後にスペース) */ } @counter-style korean-hanja-informal { system: additive; range: -9999 9999; additive-symbols: 9000 \4E5D\5343, 8000 \516B\5343, 7000 \4E03\5343, 6000 \516D\5343, 5000 \4E94\5343, 4000 \56DB\5343, 3000 \4E09\5343, 2000 \4E8C\5343, 1000 \5343, 900 \4E5D\767E, 800 \516B\767E, 700 \4E03\767E, 600 \516D\767E, 500 \4E94\767E, 400 \56DB\767E, 300 \4E09\767E, 200 \4E8C\767E, 100 \767E, 90 \4E5D\5341, 80 \516B\5341, 70 \4E03\5341, 60 \516D\5341, 50 \4E94\5341, 40 \56DB\5341, 30 \4E09\5341, 20 \4E8C\5341, 10 \5341, 9 \4E5D, 8 \516B, 7 \4E03, 6 \516D, 5 \4E94, 4 \56DB, 3 \4E09, 2 \4E8C, 1 \4E00, 0 \96F6; /* 9000 九千, 8000 八千, 7000 七千, 6000 六千, 5000 五千, 4000 四千, 3000 三千, 2000 二千, 1000 千, 900 九百, 800 八百, 700 七百, 600 六百, 500 五百, 400 四百, 300 三百, 200 二百, 100 百, 90 九十, 80 八十, 70 七十, 60 六十, 50 五十, 40 四十, 30 三十, 20 二十, 10 十, 9 九, 8 八, 7 七, 6 六, 5 五, 4 四, 3 三, 2 二, 1 一, 0 零 */ suffix: ', '; negative: "\B9C8\C774\B108\C2A4 "; /* マイナス(後にスペース) */ } @counter-style korean-hanja-formal { system: additive; range: -9999 9999; additive-symbols: 9000 \4E5D\4EDF, 8000 \516B\4EDF, 7000 \4E03\4EDF, 6000 \516D\4EDF, 5000 \4E94\4EDF, 4000 \56DB\4EDF, 3000 \53C3\4EDF, 2000 \8CB3\4EDF, 1000 \58F9\4EDF, 900 \4E5D\767E, 800 \516B\767E, 700 \4E03\767E, 600 \516D\767E, 500 \4E94\767E, 400 \56DB\767E, 300 \53C3\767E, 200 \8CB3\767E, 100 \58F9\767E, 90 \4E5D\62FE, 80 \516B\62FE, 70 \4E03\62FE, 60 \516D\62FE, 50 \4E94\62FE, 40 \56DB\62FE, 30 \53C3\62FE, 20 \8CB3\62FE, 10 \58F9\62FE, 9 \4E5D, 8 \516B, 7 \4E03, 6 \516D, 5 \4E94, 4 \56DB, 3 \53C3, 2 \8CB3, 1 \58F9, 0 \96F6; /* 9000 九仟, 8000 八仟, 7000 七仟, 6000 六仟, 5000 五仟, 4000 四仟, 3000 參仟, 2000 貳仟, 1000 壹仟, 900 九百, 800 八百, 700 七百, 600 六百, 500 五百, 400 四百, 300 參百, 200 貳百, 100 壹百, 90 九拾, 80 八拾, 70 七拾, 60 六拾, 50 五拾, 40 四拾, 30 參拾, 20 貳拾, 10 壹拾, 9 九, 8 八, 7 七, 6 六, 5 五, 4 四, 3 參, 2 貳, 1 壹, 0 零 */ suffix: ', '; negative: "\B9C8\C774\B108\C2A4 "; /* マイナス(後にスペース) */ }
7.1.3. 中国語:simp-chinese-informal、simp-chinese-formal、trad-chinese-informal、trad-chinese-formal
- simp-chinese-informal
- 中国語簡体字(略式)数字 (例:一千一百一十一)
- simp-chinese-formal
- 中国語簡体字(正式)数字 (例:壹仟壹佰壹拾壹)
- trad-chinese-informal
- 中国語繁体字(略式)数字 (例:一千一百一十一)
- trad-chinese-formal
- 中国語繁体字(正式)数字 (例:壹仟壹佰壹拾壹)
- cjk-ideographic
- このカウンタースタイルは trad-chinese-informal と同じです。 (レガシー互換のため存在します。)
中国語の長形式スタイルはほぼ同一のアルゴリズムで定義されており(ここで一括記載し、差分のみ強調)、使用する文字セットが異なります。詳細は後続の表を参照してください。
- カウンター値が0の場合は、そのスタイルで指定された0の文字を表現とします。以降の手順はスキップ。
- まずカウンター値を十進数として表現します。0以外の各桁には適切な桁マーカーを付けます(1の位はマーカーなし)。
- 略式スタイルの場合、値が10~19の範囲なら十の位の数字を除去(マーカーは残す)。
- 末尾のゼロを削除し、残ったゼロは連続して一つのゼロ桁にまとめる。
- 0~9の数字をスタイルごとの対応文字に置き換え、結果文字列を返します。
これらすべてのカウンタースタイルのsuffixは「、」(U+3001)、 fallbackは cjk-decimal、 rangeは -9999 9999、 negative値は各スタイルの記号表に記載の通りです。
次の表で各スタイルの使用文字を定義します:
値 | コードポイント | |||
---|---|---|---|---|
simp-chinese-informal | simp-chinese-formal | trad-chinese-informal | trad-chinese-formal | |
数字 0 | 零 U+96F6 | 零 U+96F6 | 零 U+96F6 | 零 U+96F6 |
数字 1 | 一 U+4E00 | 壹 U+58F9 | 一 U+4E00 | 壹 U+58F9 |
数字 2 | 二 U+4E8C | 贰 U+8D30 | 二 U+4E8C | 貳 U+8CB3 |
数字 3 | 三 U+4E09 | 叁 U+53C1 | 三 U+4E09 | 參 U+53C3 |
数字 4 | 四 U+56DB | 肆 U+8086 | 四 U+56DB | 肆 U+8086 |
数字 5 | 五 U+4E94 | 伍 U+4F0D | 五 U+4E94 | 伍 U+4F0D |
数字 6 | 六 U+516D | 陆 U+9646 | 六 U+516D | 陸 U+9678 |
数字 7 | 七 U+4E03 | 柒 U+67D2 | 七 U+4E03 | 柒 U+67D2 |
数字 8 | 八 U+516B | 捌 U+634C | 八 U+516B | 捌 U+634C |
数字 9 | 九 U+4E5D | 玖 U+7396 | 九 U+4E5D | 玖 U+7396 |
十の位マーカー | 十 U+5341 | 拾 U+62FE | 十 U+5341 | 拾 U+62FE |
百の位マーカー | 百 U+767E | 佰 U+4F70 | 百 U+767E | 佰 U+4F70 |
千の位マーカー | 千 U+5343 | 仟 U+4EDF | 千 U+5343 | 仟 U+4EDF |
負符号 | 负 U+8D1F | 负 U+8D1F | 負 U+8CA0 | 負 U+8CA0 |
1 一 41 四十一 81 八十一 2 二 42 四十二 82 八十二 3 三 43 四十三 83 八十三 4 四 44 四十四 84 八十四 5 五 45 四十五 85 八十五 6 六 46 四十六 86 八十六 7 七 47 四十七 87 八十七 8 八 48 四十八 88 八十八 9 九 49 四十九 89 八十九 10 十 50 五十 90 九十 11 十一 51 五十一 91 九十一 12 十二 52 五十二 92 九十二 13 十三 53 五十三 93 九十三 14 十四 54 五十四 94 九十四 15 十五 55 五十五 95 九十五 16 十六 56 五十六 96 九十六 17 十七 57 五十七 97 九十七 18 十八 58 五十八 98 九十八 19 十九 59 五十九 99 九十九 20 二十 60 六十 100 一百 21 二十一 61 六十一 101 一百零一 22 二十二 62 六十二 102 一百零二 23 二十三 63 六十三 103 一百零三 24 二十四 64 六十四 104 一百零四 25 二十五 65 六十五 105 一百零五 26 二十六 66 六十六 106 一百零六 27 二十七 67 六十七 107 一百零七 28 二十八 68 六十八 108 一百零八 29 二十九 69 六十九 109 一百零九 30 三十 70 七十 110 一百一十 31 三十一 71 七十一 111 一百一十一 32 三十二 72 七十二 112 一百一十二 33 三十三 73 七十三 113 一百一十三 34 三十四 74 七十四 114 一百一十四 35 三十五 75 七十五 115 一百一十五 36 三十六 76 七十六 116 一百一十六 37 三十七 77 七十七 117 一百一十七 38 三十八 78 七十八 118 一百一十八 39 三十九 79 七十九 119 一百一十九 40 四十 80 八十 120 一百二十
7.2. エチオピア数値カウンタースタイル:ethiopic-numeric
ethiopic-numericカウンタースタイルは、すべての正の非ゼロ数値に対して定義されています。 下記のアルゴリズムは、十進数をエチオピア数字に変換します:
- 数値が1の場合、 "፩"(U+1369)を返す。
- 数値を2桁ずつのグループに分割する(最下位桁から開始)。
- 各グループに、最下位から順にグループ番号0としてインデックスを付与する。
- グループの値が0の場合、またはグループが最上位で値が1の場合、またはグループのインデックスが奇数で値が1の場合は、 桁を削除する(ただしグループ自体は残し、後述の区切り文字は付与される)。
-
残った各桁について、下記リストに従って対応するエチオピア文字に置換する。
十の位 一の位 値 コードポイント 値 コードポイント 10 ፲ U+1372 1 ፩ U+1369 20 ፳ U+1373 2 ፪ U+136A 30 ፴ U+1374 3 ፫ U+136B 40 ፵ U+1375 4 ፬ U+136C 50 ፶ U+1376 5 ፭ U+136D 60 ፷ U+1377 6 ፮ U+136E 70 ፸ U+1378 7 ፯ U+136F 80 ፹ U+1379 8 ፰ U+1370 90 ፺ U+137A 9 ፱ U+1371 - 奇数インデックスの各グループについて(元の値が0でない場合のみ)、 ፻(U+137B)を付加する。
- 偶数インデックスの各グループについて(インデックス0以外)、 ፼(U+137C)を付加する。
- グループを連結して1つの文字列とし、返す。
このシステムでは、名前は"ethiopic-numeric"、
rangeは1 infinite、
suffixは"/ "
(U+002F スラッシュ+U+0020 スペース)、
その他の記述子は初期値です。
十進数78010092は、エチオピア数字では ፸፰፻፩፼፺፪ (U+1378 U+1370 U+137B U+1369 U+137C U+137A U+136A)です。
十進数780100000092は、エチオピア数字では ፸፰፻፩፼፼፺፪ (U+1378 U+1370 U+137B U+1369 U+137C U+137C U+137A U+136A)です。
8. 追加の「既製」カウンタースタイル
国際化ワーキンググループは、様々な世界の言語用の「既製」@counter-style規則の大規模リストを Ready-made Counter Styles文書で管理しています。 [predefined-counter-styles]
これら追加のカウンタースタイルは、ユーザーエージェントがデフォルトでサポートすることを意図したものではなく、 ユーザーや著者が直接スタイルシートへコピーして使うことができます。
9. API
9.1.
CSSRule
インターフェースへの拡張
CSSRule
インターフェースは以下のように拡張されます:
partial interface CSSRule {const unsigned short = 11; };
COUNTER_STYLE_RULE
9.2.
CSSCounterStyleRule
インターフェース
CSSCounterStyleRuleインターフェースは、@counter-style規則を表します。
[Exposed =Window ]interface :
CSSCounterStyleRule CSSRule {attribute CSSOMString name ;attribute CSSOMString system ;attribute CSSOMString symbols ;attribute CSSOMString additiveSymbols ;attribute CSSOMString negative ;attribute CSSOMString prefix ;attribute CSSOMString suffix ;attribute CSSOMString range ;attribute CSSOMString pad ;attribute CSSOMString speakAs ;attribute CSSOMString fallback ; };
name
, 型 CSSOMString-
name属性の取得時、関連する規則で定義された<counter-style-name>のシリアライズ値を含む
CSSOMString
オブジェクトを返す。name属性の設定時は下記手順を実行:
-
値が定義済みASCII大文字・小文字を区別しない一致なら小文字化する。
-
値が"decimal"、"disc"、"none"以外の場合は、関連規則の名前を値と等しい識別子として置き換える。
-
それ以外は何もしない。
-
system
, 型 CSSOMStringsymbols
, 型 CSSOMStringadditiveSymbols
, 型 CSSOMStringnegative
, 型 CSSOMStringprefix
, 型 CSSOMStringsuffix
, 型 CSSOMStringrange
, 型 CSSOMStringpad
, 型 CSSOMStringspeakAs
, 型 CSSOMStringfallback
, 型 CSSOMString-
その他の属性の取得時は、関連する規則で定義された記述子のシリアライズ値を含む
CSSOMString
オブジェクトを返す。 記述子が規則で指定されていない場合は空文字列を返す。設定時は次の手順を実行:
-
値からコンポーネント値のリストをパースする。
-
返された値が記述子の文法で無効、または@counter-style規則を無効化する場合は、何もせず手順終了。 (例えば、一部のsystemはsymbols記述子に2つの値が必要です。)
-
設定する属性がsystemであり、新しい値がアルゴリズム自体を変更するなら、何もせず手順終了。例えばfixed systemのfirst symbol valueのようなアルゴリズムの一部を変えるのは許可。
-
記述子に値をセットする。
-
10. HTML用サンプルスタイルシート
この節は参考情報であり、規範的ではありません。 HTML自身がその要素に適用されるスタイルを定義しており、一部はユーザーエージェントの裁量に委ねられています。
details > summary { display: list-item; list-style: disclosure-closed inside; } details[open] > summary { list-style: disclosure-open inside; }
変更点
2017年12月候補勧告以降の変更点
2017年12月14日候補勧告以降の主な変更点:
-
none、decimal、disc、circle、square、disclosure-open、disclosure-close は上書き不可とした。 (Issue 3584)
-
Shadow DOMにおけるカウンタースタイルの参照方法を明確化。 (Issue 5693)
-
無効な@counter-style の場合の挙動を明確化。 (Issue 5698, Issue 5717)
-
加算法アルゴリズムのゼロ除算エラーの修正。 (Issue 5784)
-
square記号が絵文字にならないよう修正。 (Issue 6200)
-
定義済み記号型カウンタースタイルのフォント選択をUAが上書き可能とした。 (Issue 6201)
-
定義済み記号型カウンタースタイルの特殊描画を list-style-typeによるリストマーカー用途に限定。 (Issue 6201)
-
speak-asは音声出力用であり、他の支援技術にも利用できることを明確化。 (Issue 6040)
カウンタースタイルは見た目で意味が明らかでも、音声合成や他の非視覚手段では意味のある表現ができない場合や、そのまま読み上げても意味不明になる場合があります。 speak-as記述子は、そのカウンタースタイルで整形されたカウンターの音声表現をどのように合成するかを指定します。 支援技術はこの音声表現を読み上げる際に利用し、speak-as値を音声以外の出力変換にも活用してよいです。
コメント一覧があります。
2015年6月候補勧告以降の変更点
2015年6月11日候補勧告以降の主な変更点:
-
CSSCounterStyle.nameの設定時は文字列をそのまま使い、CSS文法としてパースしない。
-
カウンタースタイルは要素のコンテンツ言語で読み上げることを明確化。
-
additive-symbolsタプルは厳密に降順でなければならないことを明確化。
-
無効な値は宣言のみ無効化し、規則全体は無効化しないようにした。
-
記述子が不足して無効な@counter-style規則は、カウンタースタイルを作成しないだけで、規則自体は有効とした。
-
負の値に関する制約を反映するため、構文をCSS角括弧範囲記法に変更。
コメント一覧があります。
2015年2月候補勧告以降の変更点
-
UAがhebrewスタイルを仕様上限より拡張可能とした (現行上限は@counter-style定義で高範囲にするのが煩雑だったことによるもの)。
謝辞
以下の人物や彼らが執筆した文書は、記数法定義に非常に役立ちました: Alexander Savenkov、 Arron Eicholz、 Aryeh Gregor、 Christopher Hoess、 Daniel Yacob、 Frank Tang、 Jonathan Rosenne、 Karl Ove Hufthammer、 Musheg Arakelyan、 Nariné Renard Karapetyan、 Randall Bart、 Richard Ishida、 Simon Montagu (Mozilla, smontagu@smontagu.org)
特にXidorn Quan氏には仕様全体に関する多岐にわたるレビュー、Simon Sapin氏とHåkon Wium Lie氏にはレビューコメントへの謝意を表します。
プライバシーおよびセキュリティに関する考慮事項
本仕様は新たなプライバシーやセキュリティ上の考慮事項を導入しません。