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 のようなプロパティの既存の値と競合するため、 そこでは使用できない。
カウンタースタイル名は大文字・小文字を区別する。 ただし、この仕様で定義されている名前は、カウンタースタイルとして使用される箇所では、 たとえば list-style プロパティ群、 @counter-style 規則、 および counter() 関数において、構文解析時に ASCII 小文字化される。
各 @counter-style 規則は、すべてのカウンタースタイル記述子に対して値を指定する。 その指定は、暗黙的な場合も明示的な場合もある。 規則内で明示的な値が与えられていない記述子は、この仕様で各記述子について記載されている初期値を取る。 これらの記述子は、それが定義されている @counter-style 規則のコンテキスト内でのみ適用され、 文書言語の要素には適用されない。 記述子がどの要素に適用されるか、または値が子 要素に継承されるかという概念はない。 特定の記述子が特定の @counter-style 規則内に複数回現れる場合、 最後に指定された有効な値のみが使用され、 その記述子に対するそれ以前のすべての値は無視されなければならない。
@counter-style を定義すると、それが含まれている文書全体で 使用可能になる。 同じ名前で複数の @counter-style 規則が 定義されている場合、 標準のカスケード規則に従って、 1 つだけが優先される。 @counter-style 規則は「アトミックに」カスケードする: 同じ名前の別の規則を置き換える場合、 その規則が指定する個々の記述子だけを置き換えるのではなく、 全体を置き換える。
注: 事前定義されたカウンタースタイルでさえ上書きできることに注意。 UA スタイルシートは他のすべてのスタイルシートより前に現れるため、 事前定義されたものはカスケードで常に優先されない。
この at-rule は 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 の表現として使用され、 2 番目の カウンターシンボル(存在する場合)は 値 2 の表現として使用され、以降も同様である。
systemがcyclicの場合、 symbols記述子には1つ以上のカウンターシンボルが必要です。 このシステムはすべてのカウンター値について定義されます。
@counter-style triangle { system: cyclic; symbols: ‣; suffix: " "; }
これにより、次のようなリストが生成されます:
‣ One ‣ Two ‣ Three
N 個の カウンター シンボルがあり、整数 value に対して表現を構築する場合、 その表現は、カウンターシンボルのリスト(0 始まり)のインデックス ( (value-1) mod N) にあるカウンターシンボルである。
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 巡目では "***" と "†††" になり、以降も同様である。 これは脚注形式のマーカーに使用でき、 また、alphabetic システムが示すものとは少し異なる表現のアルファベット形式のリストにも使用されることがある。
システムが 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 と同一だが、 その後は分岐し、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 を カウンターシンボルのリストの長さ、value の初期値をカウンター値、 S の初期値を空文字列、 symbol(n) をカウンターシンボルのリスト内の n 番目の カウンターシンボル(0 始まり)とする。
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 を カウンターシンボルのリストの長さ、value の初期値をカウンター値、 S の初期値を空文字列、 symbol(n) をカウンターシンボルのリスト内の n 番目の カウンターシンボル(0 始まり)とする。
- 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 バイト int の範囲)をサポートしなければならない。 それより大きな範囲をサポートしてもよい。 指定された境界のいずれかが実装でサポートされる境界の外にある場合、 実装がサポートする最も近い境界として扱わなければならない。
3.6. ゼロパディングと固定幅表現:pad記述子
| 名前: | pad |
|---|---|
| 対象: | @counter-style |
| 値: | <integer [0,∞]> && <symbol> |
| 初期値: | 0 "" |
pad記述子は、著者が「固定幅」カウンタースタイルを指定できるようにします。 表現がpad値より短い場合は、指定した<symbol>でパディングされます。 指定値より長い表現は通常通り構築されます。
- <integer [0,∞]> && <symbol>
-
<integer> は、すべてのカウンター表現が到達しなければならない最小長を指定する。
difference を、指定された <integer> から、書記素 クラスターの数をカウンター値の初期 表現から引いた値とする。 (カウンター 表現を生成するアルゴリズムに従い、 これは接頭辞/接尾辞/負号を追加する前に行われることに注意。) カウンター値が負であり、 かつカウンタースタイルが負号を使用する場合、 さらに difference から、そのカウンタースタイルの negative 記述子の <symbol> 内の書記素 クラスターの数を引く。
difference が 0 より大きい場合、 指定された <symbol> を difference 個、表現の先頭に付加する。
負の <integer> 値は許可されない。
例えば、 1は"001"、 20は"020"、 300は"300"、 4000は"4000"、 -5は"-05"となります。
注: pad 記述子は、表現内の 書記素クラスターの数を数えるが、 <symbol>でパディングする。 指定された pad <symbol> が複数文字である場合、 おそらく意図した効果は得られない。 残念ながら、有用な制約に違反せずに、pad <symbol> 内の書記素 クラスターの数を使用する方法はない。 作者には、pad 記述子で、単一の<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 記述子によって指定されたマーカー構築アルゴリズムで 使用されるシンボルを指定する。 カウンターシステムが cyclic、numeric、alphabetic、symbolic、 または fixed である場合、@counter-style 規則には有効な symbols 記述子がなければならず、 カウンターシステムが additive である場合は、有効な additive-symbols 記述子がなければならない。 そうでない場合、@counter-style は カウンタースタイルを定義しない(ただし、 有効な at-rule ではある)。
一部のカウンターシステムでは、symbols 記述子に少なくとも 2 つのエントリーが必要であると指定されている。 カウンタースタイルのシステムがそのようなものであり、 symbols 記述子に 1 つのエントリーしかない場合、 @counter-style 規則は カウンタースタイルを定義しない。
symbols 記述子の値の各エントリーは カウンターシンボルを定義し、 これはカウンタースタイルのシステムに応じて異なる方法で解釈される。 additive-symbols 記述子の値の各エントリーは 加算タプルを定義し、 これは カウンター シンボルと整数の重みから構成される。 各重みは非負の整数でなければならず、 加算タプルは 重みが厳密に降順になるよう指定されなければならない。 そうでない場合、宣言は無効であり、無視されなければならない。
カウンターシンボルには、 文字列、画像、または識別子を使用でき、 3 つの型を 1 つの記述子内で混在させることもできる。 カウンター表現は、カウンターシンボルを連結して構築される。 識別子は、同じ文字を含む文字列としてレンダリングされる。 画像は、インライン置換要素としてレンダリングされる。 画像の デフォルトオブジェクトサイズであるカウンターシンボルは、1em × 1em の正方形である。
注: <image> 構文は、<symbol> において現在リスクありとされている。 現時点ではこれを実装する予定の実装はなく、 counter() の一部の使用法を、 まだ完全には対処されていない形で複雑にする。
注: シンボルを定義するために文字列ではなく識別子を使用する場合、 識別子の構文に注意すること。 特に、"*" のような ASCII の非英字は識別子ではないため、 文字列として引用符で囲まなければならない。 この仕様で定義されるいくつかのカウンタースタイルで使用されている 16 進エスケープは、 後続の空白を「消費」する (曖昧さなく 16 進エスケープの後に数字を続けられるようにするため)。 したがって、16 進エスケープを後続のものと分離するには、 その後に 2 つの空白を置かなければならない。 そうしない場合、それらは隣接していると見なされ、 同じ識別子の一部となる。 たとえば、symbols: \660 \661; は 1 つのシンボルのみを定義し、 意図された 2 つではなく、U+0660 と U+0661 の文字から構成される。 エスケープを文字列内で引用符で囲む、 たとえば 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() 関数では文字列と画像のみが許可されるが、 @counter-style 規則の 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 規則を無効にする場合は、 何もせず、これらの手順を中止する。 (たとえば、一部のシステムでは symbols 記述子に 2 つの値が含まれていることが 必要である。)
-
設定される属性が system であり、 新しい値によって使用されるアルゴリズムが変更される場合は、 何もせず、これらの手順を中止する。 アルゴリズムの一側面、 たとえば fixed システムの 最初のシンボル値を変更することは問題ない。
-
記述子をその値に設定する。
-
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氏にはレビューコメントへの謝意を表します。
プライバシーおよびセキュリティに関する考慮事項
本仕様は新たなプライバシーやセキュリティ上の考慮事項を導入しません。