~alcinnz/haskell-stylist

fbd32fe1152449a7d5490614a674167a6e82aab8 — Adrian Cochrane 1 year, 3 days ago e4ad50d
Draft @counter-style support, with sample CSS.
A src/Data/CSS/Preprocessor/Text/CounterStyle.hs => src/Data/CSS/Preprocessor/Text/CounterStyle.hs +249 -0
@@ 0,0 1,249 @@
{-# LANGUAGE OverloadedStrings #-}
module Data.CSS.Preprocessor.Text.CounterStyle(CounterStyle(..), CounterSystem(..),
    defaultCounter, decimalCounter, isValid, parseCounter, CounterStore'(..),
    counterRender, ranges', speakAs', parseCounter) where
import Data.CSS.Syntax.Tokens
import Data.CSS.Syntax.StyleSheet

import Data.Text as Txt (Text, unpack)
import Data.HashMap.Lazy as HM
import Data.Maybe (isJust, fromJust)
import Data.List (foldl')

-- NOTE: No support for image "symbols" yet.
data CounterStyle = CounterStyle {
    system :: CounterSystem,
    negativePrefix :: Text,
    negativeSuffix :: Text,
    prefix :: Text,
    suffix :: Text,
    ranges :: Maybe [(Int, Int)],
    padLength :: Int,
    padChar :: Text,
    fallback :: Maybe CounterStyle,
    symbols :: [Text],
    additiveSymbols :: [(Int, Text)],
    speakAs :: Maybe Text
}
data CounterSystem =
    Cyclic | Fixed Int | Symbolic | Alphabetic | Numeric | Additive

defaultCounter = CounterStyle {
    system = Symbolic,
    negativePrefix = "-",
    negativeSuffix = "",
    prefix = "",
    suffix = ". ",
    ranges = Nothing,
    padLength = 0,
    padChar = "",
    fallback = Just decimalCounter,
    symbols = [], -- Must be overriden!
    additiveSymbols = [], -- Alternative requirement!
    speakAs = Nothing
}
decimalCounter = defaultCounter {
    system = Numeric,
    symbols = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"],
    fallback = Nothing
}

isValid :: CounterStyle -> Bool
isValid CounterStyle { system = Additive, additiveSymbols = [] } = False
isValid CounterStyle { symbols = [] } = False
isValid _ = True

type CounterStore = HashMap Text CounterStyle
parseCounterProperty :: CounterStore -> (Text, [Token]) ->
        CounterStyle -> CounterStyle
parseCounterProperty _ ("system", [Ident "cyclic"]) self = self {system = Cyclic}
parseCounterProperty _ ("system", [Ident "fixed"]) self = self {system = Fixed 1}
parseCounterProperty _ ("system", [Ident "fixed", Number _ (NVInteger x)]) self
    = self { system = Fixed $ fromInteger x }
parseCounterProperty _ ("system", [Ident "symbolic"]) self =
    self {system = Symbolic }
parseCounterProperty _ ("system", [Ident "alphabetic"]) self =
    self { system = Alphabetic }
parseCounterProperty _ ("system", [Ident "numeric"]) self =
    self { system = Numeric }
-- Handled by caller so property overrides work correctly.
parseCounterProperty _ ("system", [Ident "extends", Ident _]) self = self

parseCounterProperty _ ("negative", [x]) self | Just prefix <- parseSymbol x =
    self { negativePrefix = prefix, negativeSuffix = "" }
parseCounterProperty _ ("negative", [x, y]) self
    | Just prefix <- parseSymbol x, Just suffix <- parseSymbol y =
        self { negativePrefix = prefix, negativeSuffix = suffix }

parseCounterProperty _ ("prefix", [x]) self | Just pre <- parseSymbol x =
    self { prefix = pre }
parseCounterProperty _ ("suffix", [x]) self | Just suf <- parseSymbol x =
    self { suffix = suf }

parseCounterProperty _ ("range", [Ident "auto"]) self = self {ranges = Nothing}
parseCounterProperty _ (("range", toks):props) self
    | Just rs <- parseRanges (Comma:toks) = self { ranges = Just rs }

parseCounterProperty _ ("pad", [Number _ (NVInteger x), y]) self
    | Just char <- parseSymbol y = self {
            padLength = fromInteger x, padChar = char
          }
parseCounterProperty styles ("fallback", [Ident name]) self = self {
        fallback = Just $ HM.lookupDefault decimalCounter name styles
      }
parseCounterProperty _ ("symbols", toks) self | all (isJust . parseSymbol) toks
    = self { symbols = map (fromJust . parseSymbol) toks }
parseCounterProperty _ ("additive-symbols", toks) self
    | Just syms <- parseAdditiveSymbols (Comma:toks) =
        self { additiveSymbols = syms }

parseCounterProperty _ ("speak-as", Ident "auto") self =
    self { speakAs = Nothing }
parseCounterProperty styles ("speak-as", Ident x) self
    | x `elem` ["bullets", "numbers", "words", "spell-out"] =
        self { speakAs = Just x }
    | Just super <- HM.lookup x styles = self { speakAs = speakAs super }
    | otherwise = self
parseCounterProperty _ _ self = self

parseRanges (Comma:x:y:toks) | Just self <- parseRanges toks = case (x, y) of
    (Ident "infinite", Ident "infinite") -> Just ((minBound, maxBound):self)
    (Ident "infinite", Number _ (NVInteger x)) ->
        Just ((minBound, fromInteger x):self)
    (Number _ (NVInteger x), Ident "infinite") ->
        Just ((fromInteger x, maxBound):self)
    (Number _ (NVInteger x), Number _ (NVInteger y)) ->
        Just ((fromInteger x, fromInteger y):self)
    _ -> Nothing
parseRanges [] = Just []
parseRanges _ = Nothing

parseAdditiveSymbols (Comma:Number _ (NumericInteger x):y:toks)
    | Just self <- parseRanges toks, Just sym <- parseSymbol y =
        Just ((fromInteger x, y):self)
parseAdditiveSymbols [] = Just []
parseAdditiveSymbols _ = Nothing

parseCounter :: CounterStore -> [Token] -> (CounterStore, [Token])
parseCounter store (Whitespace:toks) = parseCounter store toks
parseCounter store (Ident name:toks)
    | Just ((props, ""), tail) <- parseProperties toks =
        let super = case Prelude.lookup "system" props of
                [Ident "extends", Ident name'] ->
                    HM.lookupDefault decimalCounter name' store
                _ -> defaultCounter
            style = foldr (parseCounterProperty store) super props
        in if isValid style then HM.insert name style store else store
parseCounter store toks = (store, skipAtRule toks)

parseSymbol :: Token -> Maybe Text
parseSymbol (Ident x) = Just x
parseSymbol (String x) = Just x

data CounterStore' = CounterStore { unwrap :: CounterStore }
instance StyleSheet CounterStore' where
    addRule self _ = self
    addAtRule (CounterStore self) "counter-style" toks =
        let (self', tail) = parseCounter self toks
        in (CounterStore self', tail)
    addAtRule self _ toks = (self, skipAtRule toks)

---

fallbackSym :: Text
fallbackSym = "\0"

counterRenderCore :: CounterStyle -> Int -> Text
counterRenderCore CounterStyle { system = Cyclic, symbols = syms } x =
    syms !! rem x (length syms)
counterRenderCore CounterStyle { system = Fixed n, symbols = syms } x
    | x - n < length syms = syms !! (x - n)
    | otherwise = fallbackSym
counterRenderCore CounterStyle { system = Symbolic, symbols = syms } x =
    quot x n `Txt.replicate` (syms !! rem x n)
  where n = length syms
counterRenderCore CounterStyle { system = Alphabetic, symbols = syms } x = inner x
  where
    n = length syms
    inner 0 = ""
    inner x = let x' = pred x in (syms !! rem x' n) `Txt.append` inner (quot x' n)
counterRenderCore CounterStyle { system = Numeric, symbols = syms } 0 = syms !! 0
counterRenderCore CounterStyle { system = Numeric, symbols = syms } x = inner x
  where
    n = length syms
    inner 0 = ""
    inner x = (syms !! rem x n) `Txt.append` inner (quot x n)
counterRenderCore CounterStyle { system = Additive, additiveSymbols = syms } 0
    | Just sym <- Prelude.lookup 0 syms = s `Txt.append` sym
    | otherwise = fallbackSym
counterRenderCore CounterStyle { system = Additive, additiveSymbols = syms } w =
    | '\0' `Txt.elem` inner syms w = fallbackSym
    | otherwise = inner syms w
  where
    inner _ 0 = ""
    inner ((0, _):syms) x = inner syms x
    inner ((weight, _):syms) x | weight > x = inner syms x
    inner ((weight, sym):syms) x =
        Txt.replicate reps sym `Txt.append` inner syms x'
      where
        reps = quot x weight
        x' = x - weight * reps
    inner [] x = "\0" -- Run fallback counter!

counterRender :: CounterStyle -> Int -> Text
counterRender self x
    | x < 0 = Txt.concat [prefix self, negativePrefix self, inner self -x,
                          negativeSuffix self, suffix self]
    | otherwise = Txt.concat [prefix self, inner self x, suffix self]
  where
    inner self@CounterStyle { fallback = Just self' } x
        | not $ inRange x $ ranges' self = inner self' x
        | counterRenderCore self x == fallbackSym = inner self' x
    inner self x
        | text == fallbackSym = show x -- NOTE: Shouldn't happen
        | n < padLength self =
            (padLength self - n `Txt.replicate` padChar self) `Txt.append` text
        | otherwise = text
      where
        text = counterRenderCore self x
        n = Txt.length text
    inRange ((start, end):ranges) x
        | x >= start && x <= end = True
        | otherwise = inRange ranges x
    inRange [] _ = False

infiniteRange = [(minBound, maxBound)]
ranges' :: CounterStyle -> [(Int, Int)]
ranges' CounterStyle { ranges = Just ret } = ret
ranges' CounterStyle { system = Cyclic } = infiniteRange
ranges' CounterStyle { system = Numeric } = infiniteRange
ranges' CounterStyle { system = Fixed _ } = infiniteRange
ranges' CounterStyle { system = Alphabetic } = [(1, maxBound)]
ranges' CounterStyle { system = Symbolic } = [(1, maxBound)]
ranges' CounterStyle { system = Additive } = [(0, maxBound)]

speakAs' :: CounterStyle -> Text
speakAs' CounterStyle { speakAs = Just ret } = ret
speakAs' CounterStyle { system = Alphabetic } = "spell-out"
speakAs' CounterStyle { system = Cyclic } = "bullets"
speakAs' _ = "numbers"

---

parseCounter :: CounterStore -> [Token] -> (CounterStyle, [Token])
parseCounter _ (Func "symbols":Ident system:toks)
    | Just system' <- Prelude.lookup system [
        ("cyclic", Cyclic), ("numeric", Numeric), ("alphabetic", Alphabetic),
        ("symbolic", Symbolic), ("fixed", Fixed 1)
      ], Just (syms, toks') <- parseArgs toks =
        Just (defaultCounter{ system = system', symbols = syms }, tail)
  where
    parseArgs (String sym:toks) | Just (syms,tail) <- parseArgs toks =
        Just (sym:syms, tail)
    parseArgs (RightParen:toks) = Just ([],toks)
    parseArgs _ = Nothing
parseCounter store (Ident name:toks)
    | Just ret <- HM.lookup name store = Just (ret, toks)
parseCounter _ (String sym:toks) =
    Just (defaultCounter { system = Symbolic, syms = [sym], suffix = " " }, toks)
parseCounter _ _ = Nothing

A src/Data/CSS/Preprocessor/Text/counter-styles.css => src/Data/CSS/Preprocessor/Text/counter-styles.css +1049 -0
@@ 0,0 1,1049 @@
/* Bullets */
@counter-style none {
    system: symbolic;
    symbols: "";
    suffix: " "
}
@counter-style disc {
    system: symbolic;
    symbols: "•";
    suffix: " ";
}
@counter-style circle {
    system: symbolic;
    symbols: "◦";
    suffix: " ";
}
@counter-style disclosure-open {
    system: symbolic;
    symbols: "▾";
    suffix: " ";
}
@counter-style disclosure-closed {
    system: symbolic;
    /* FIXME: It'd proper to consider text-direction in selecting this marker. */
    symbols: "▸";
    suffix: " "
}
/* Taken from https://www.w3.org/TR/predefined-counter-styles/ */

/* Adlam */
@counter-style adlam {
    system: numeric;
    symbols: '\01E950' '\01E951' '\01E952' '\01E953' '\01E954' '\01E955' '\01E956' '\01E957' '\01E958' '\01E959';
    /* symbols: '𞥐' '𞥑' '𞥒' '𞥓' '𞥔' '𞥕' '𞥖' '𞥗' '𞥘' '𞥙'; */
}

/* Arabic */
@counter-style arabic-indic {
    system: numeric;
    symbols: '\660' '\661' '\662' '\663' '\664' '\665' '\666' '\667' '\668' '\669';
    /* symbols: '٠' '١' '٢' '٣' '٤' '٥' '٦' '٧' '٨' '٩'; */
}

@counter-style arabic-abjad {
    system: fixed;
    symbols: '\627' '\628' '\62C' '\62F' '\647\200D' '\648' '\632' '\62D' '\637' '\64A' '\643' '\644' '\645' '\646' '\633' '\639' '\641' '\635' '\642' '\631' '\634' '\62A' '\62B' '\62E' '\630' '\636' '\638' '\63A';
    /* symbols: 'ا' 'ب' 'ج' 'د' 'ه‍' 'و' 'ز' 'ح' 'ط' 'ي' 'ك' 'ل' 'م' 'ن' 'س' 'ع' 'ف' 'ص' 'ق' 'ر' 'ش' 'ت' 'ث' 'خ' 'ذ' 'ض' 'ظ' 'غ' */;
}

@counter-style maghrebi-abjad {
    system: fixed;
    symbols: '\627' '\628' '\62C' '\62F' '\647\200D' '\648' '\632' '\62D' '\637' '\64A' '\643' '\644' '\645' '\646' '\636' '\639' '\641' '\635' '\642' '\631' '\633' '\62A' '\62B' '\62E' '\630' '\638' '\63A' '\634';
    /* symbols: 'ا' 'ب' 'ج' 'د' 'ه‍' 'و' 'ز' 'ح' 'ط' 'ي' 'ك' 'ل' 'م' 'ن' 'ص' 'ع' 'ف' 'ض' 'ق' 'ر' 'س' 'ت' 'ث' 'خ' 'ذ' 'ظ' 'غ' 'ش' */;
}

@counter-style persian {
    system: numeric;
    symbols: '\6F0' '\6F1' '\6F2' '\6F3' '\6F4' '\6F5' '\6F6' '\6F7' '\6F8' '\6F9';
    /* symbols: '۰' '۱' '۲' '۳' '۴' '۵' '۶' '۷' '۸' '۹'; */
}

@counter-style urdu {
    system: numeric;
    symbols: '\6F0' '\6F1' '\6F2' '\6F3' '\6F4' '\6F5' '\6F6' '\6F7' '\6F8' '\6F9';
    /* symbols: '۰' '۱' '۲' '۳' '۴' '۵' '۶' '۷' '۸' '۹'; */
}

@counter-style persian-abjad {
    system: fixed;
    symbols: '\627' '\628' '\62C' '\62F' '\647\200D' '\648' '\632' '\62D' '\637' '\6CC' '\6A9' '\644' '\645' '\646' '\633' '\639' '\641' '\635' '\642' '\631' '\634' '\62A' '\62B' '\62E' '\630' '\636' '\638' '\63A';
    /* symbols: 'ا' 'ب' 'ج' 'د' 'ه‍' 'و' 'ز' 'ح' 'ط' 'ی' 'ک' 'ل' 'م' 'ن' 'س' 'ع' 'ف' 'ص' 'ق' 'ر' 'ش' 'ت' 'ث' 'خ' 'ذ' 'ض' 'ظ' 'غ' */;
}

@counter-style persian-alphabetic {
    system: fixed;
    symbols: '\627' '\628' '\67E' '\62A' '\62B' '\62C' '\686' '\62D' '\62E' '\62F' '\630' '\631' '\632' '\698' '\633' '\634' '\635' '\636' '\637' '\638' '\639' '\63A' '\641' '\642' '\6A9' '\6AF' '\644' '\645' '\646' '\648' '\647\200D' '\6CC';
    /* symbols: 'ا' 'ب' 'پ' 'ت' 'ث' 'ج' 'چ' 'ح' 'خ' 'د' 'ذ' 'ر' 'ز' 'ژ' 'س' 'ش' 'ص' 'ض' 'ط' 'ظ' 'ع' 'غ' 'ف' 'ق' 'ک' 'گ' 'ل' 'م' 'ن' 'و' 'ه‍' 'ی' */;
}

/* Armenian */
@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';
    /* additive-symbols: 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 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';
    /* additive-symbols: 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: 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';
    /* additive-symbols: 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 'Ա'; */
}

/* Bengali */
@counter-style bengali {
    system: numeric;
    symbols: '\9E6' '\9E7' '\9E8' '\9E9' '\9EA' '\9EB' '\9EC' '\9ED' '\9EE' '\9EF';
    /* symbols: '০' '১' '২' '৩' '৪' '৫' '৬' '৭' '৮' '৯'; */
}

/* Cyrillic */
@counter-style lower-belorussian {
    system: alphabetic;
    symbols: '\430' '\431' '\432' '\433' '\434' '\435' '\451' '\436' '\437' '\456' '\439' '\43A' '\43B' '\43C' '\43D' '\43E' '\43F' '\440' '\441' '\442' '\443' '\45E' '\444' '\445' '\446' '\447' '\448' '\44B' '\44C' '\44D' '\44E' '\44F';
    /* symbols: 'а' 'б' 'в' 'г' 'д' 'е' 'ё' 'ж' 'з' 'і' 'й' 'к' 'л' 'м' 'н' 'о' 'п' 'р' 'с' 'т' 'у' 'ў' 'ф' 'х' 'ц' 'ч' 'ш' 'ы' 'ь' 'э' 'ю' 'я'; */
    suffix: ') ';
}

@counter-style lower-bulgarian {
    system: alphabetic;
    symbols: '\430' '\431' '\432' '\433' '\434' '\435' '\436' '\437' '\438' '\439' '\43A' '\43B' '\43C' '\43D' '\43E' '\43F' '\440' '\441' '\442' '\443' '\444' '\445' '\446' '\447' '\448' '\449' '\44A' '\44C' '\44E' '\44F';
    /* symbols: 'а' 'б' 'в' 'г' 'д' 'е' 'ж' 'з' 'и' 'й' 'к' 'л' 'м' 'н' 'о' 'п' 'р' 'с' 'т' 'у' 'ф' 'х' 'ц' 'ч' 'ш' 'щ' 'ъ' 'ь' 'ю' 'я'; */
    suffix: ') ';
}

@counter-style lower-macedonian {
    system: alphabetic;
    symbols: '\430' '\431' '\432' '\433' '\434' '\453' '\435' '\436' '\437' '\455' '\438' '\458' '\43A' '\43B' '\459' '\43C' '\43D' '\45A' '\43E' '\43F' '\440' '\441' '\442' '\45C' '\443' '\444' '\445' '\446' '\447' '\45F' '\448';
    /* symbols: 'а' 'б' 'в' 'г' 'д' 'ѓ' 'е' 'ж' 'з' 'ѕ' 'и' 'ј' 'к' 'л' 'љ' 'м' 'н' 'њ' 'о' 'п' 'р' 'с' 'т' 'ќ' 'у' 'ф' 'х' 'ц' 'ч' 'џ' 'ш'; */
    suffix: ') ';
}

@counter-style lower-russian {
    system: alphabetic;
    symbols: '\430' '\431' '\432' '\433' '\434' '\435' '\436' '\437' '\438' '\43A' '\43B' '\43C' '\43D' '\43E' '\43F' '\440' '\441' '\442' '\443' '\444' '\445' '\446' '\447' '\448' '\449' '\44D' '\44E' '\44F';
    /* symbols: 'а' 'б' 'в' 'г' 'д' 'е' 'ж' 'з' 'и' 'к' 'л' 'м' 'н' 'о' 'п' 'р' 'с' 'т' 'у' 'ф' 'х' 'ц' 'ч' 'ш' 'щ' 'э' 'ю' 'я'; */
    suffix: ') ';
}

@counter-style lower-russian-full {
    system: alphabetic;
    symbols: '\430' '\431' '\432' '\433' '\434' '\435' '\451' '\436' '\437' '\438' '\439' '\43A' '\43B' '\43C' '\43D' '\43E' '\43F' '\440' '\441' '\442' '\443' '\444' '\445' '\446' '\447' '\448' '\449' '\44A' '\44B' '\44C' '\44D' '\44E' '\44F';
    /* symbols: 'а' 'б' 'в' 'г' 'д' 'е' 'ё' 'ж' 'з' 'и' 'й' 'к' 'л' 'м' 'н' 'о' 'п' 'р' 'с' 'т' 'у' 'ф' 'х' 'ц' 'ч' 'ш' 'щ' 'ъ' 'ы' 'ь' 'э' 'ю' 'я'; */
    suffix: ') ';
}

@counter-style lower-serbo-croatian {
    system: alphabetic;
    symbols: '\430' '\431' '\432' '\433' '\434' '\452' '\435' '\436' '\437' '\438' '\458' '\43A' '\43B' '\459' '\43C' '\43D' '\45A' '\43E' '\43F' '\440' '\441' '\442' '\45B' '\443' '\444' '\445' '\446' '\447' '\45F' '\448';
    /* symbols: 'а' 'б' 'в' 'г' 'д' 'ђ' 'е' 'ж' 'з' 'и' 'ј' 'к' 'л' 'љ' 'м' 'н' 'њ' 'о' 'п' 'р' 'с' 'т' 'ћ' 'у' 'ф' 'х' 'ц' 'ч' 'џ' 'ш'; */
    suffix: ') ';
}

@counter-style lower-ukrainian {
    system: alphabetic;
    symbols: '\430' '\431' '\432' '\433' '\434' '\435' '\454' '\436' '\437' '\438' '\456' '\43A' '\43B' '\43C' '\43D' '\43E' '\43F' '\440' '\441' '\442' '\443' '\444' '\445' '\446' '\447' '\448' '\44E' '\44F';
    /* symbols: 'а' 'б' 'в' 'г' 'д' 'е' 'є' 'ж' 'з' 'и' 'і' 'к' 'л' 'м' 'н' 'о' 'п' 'р' 'с' 'т' 'у' 'ф' 'х' 'ц' 'ч' 'ш' 'ю' 'я'; */
    suffix: ') ';
}

@counter-style lower-ukrainian-full {
    system: alphabetic;
    symbols: '\430' '\431' '\432' '\433' '\491' '\434' '\435' '\454' '\436' '\437' '\438' '\456' '\457' '\439' '\43A' '\43B' '\43C' '\43D' '\43E' '\43F' '\440' '\441' '\442' '\443' '\444' '\445' '\446' '\447' '\448' '\449' '\44C' '\44E' '\44F';
    /* symbols: 'а' 'б' 'в' 'г' 'ґ' 'д' 'е' 'є' 'ж' 'з' 'и' 'і' 'ї' 'й' 'к' 'л' 'м' 'н' 'о' 'п' 'р' 'с' 'т' 'у' 'ф' 'х' 'ц' 'ч' 'ш' 'щ' 'ь' 'ю' 'я'; */
    suffix: ') ';
}

@counter-style upper-belorussian {
    system: alphabetic;
    symbols: '\410' '\411' '\412' '\413' '\414' '\415' '\401' '\416' '\417' '\406' '\419' '\41A' '\41B' '\41C' '\41D' '\41E' '\41F' '\420' '\421' '\422' '\423' '\40E' '\424' '\425' '\426' '\427' '\428' '\42B' '\42C' '\42D' '\42E' '\42F';
    /* symbols: 'А' 'Б' 'В' 'Г' 'Д' 'Е' 'Ё' 'Ж' 'З' 'І' 'Й' 'К' 'Л' 'М' 'Н' 'О' 'П' 'Р' 'С' 'Т' 'У' 'Ў' 'Ф' 'Х' 'Ц' 'Ч' 'Ш' 'Ы' 'Ь' 'Э' 'Ю' 'Я'; */
}

@counter-style upper-bulgarian {
    system: alphabetic;
    symbols: '\410' '\411' '\412' '\413' '\414' '\415' '\416' '\417' '\418' '\419' '\41A' '\41B' '\41C' '\41D' '\41E' '\41F' '\420' '\421' '\422' '\423' '\424' '\425' '\426' '\427' '\428' '\429' '\42A' '\42C' '\42E' '\42F';
    /* symbols: 'А' 'Б' 'В' 'Г' 'Д' 'Е' 'Ж' 'З' 'И' 'Й' 'К' 'Л' 'М' 'Н' 'О' 'П' 'Р' 'С' 'Т' 'У' 'Ф' 'Х' 'Ц' 'Ч' 'Ш' 'Щ' 'Ъ' 'Ь' 'Ю' 'Я'; */
}

@counter-style upper-macedonian {
    system: alphabetic;
    symbols: '\410' '\411' '\412' '\413' '\414' '\403' '\415' '\416' '\417' '\405' '\418' '\408' '\41A' '\41B' '\409' '\41C' '\41D' '\40A' '\41E' '\41F' '\420' '\421' '\422' '\40C' '\423' '\424' '\425' '\426' '\427' '\40F' '\428';
    /* symbols: 'А' 'Б' 'В' 'Г' 'Д' 'Ѓ' 'Е' 'Ж' 'З' 'Ѕ' 'И' 'Ј' 'К' 'Л' 'Љ' 'М' 'Н' 'Њ' 'О' 'П' 'Р' 'С' 'Т' 'Ќ' 'У' 'Ф' 'Х' 'Ц' 'Ч' 'Џ' 'Ш'; */
}

@counter-style upper-russian {
    system: alphabetic;
    symbols: '\410' '\411' '\412' '\413' '\414' '\415' '\416' '\417' '\418' '\41A' '\41B' '\41C' '\41D' '\41E' '\41F' '\420' '\421' '\422' '\423' '\424' '\425' '\426' '\427' '\428' '\429' '\42D' '\42E' '\42F';
    /* symbols: 'А' 'Б' 'В' 'Г' 'Д' 'Е' 'Ж' 'З' 'И' 'К' 'Л' 'М' 'Н' 'О' 'П' 'Р' 'С' 'Т' 'У' 'Ф' 'Х' 'Ц' 'Ч' 'Ш' 'Щ' 'Э' 'Ю' 'Я'; */
}

@counter-style upper-russian-full {
    system: alphabetic;
    symbols: '\410' '\411' '\412' '\413' '\414' '\415' '\401' '\416' '\417' '\418' '\419' '\41A' '\41B' '\41C' '\41D' '\41E' '\41F' '\420' '\421' '\422' '\423' '\424' '\425' '\426' '\427' '\428' '\429' '\42A' '\42B' '\42C' '\42D' '\42E' '\42F';
    /* symbols: 'А' 'Б' 'В' 'Г' 'Д' 'Е' 'Ё' 'Ж' 'З' 'И' 'Й' 'К' 'Л' 'М' 'Н' 'О' 'П' 'Р' 'С' 'Т' 'У' 'Ф' 'Х' 'Ц' 'Ч' 'Ш' 'Щ' 'Ъ' 'Ы' 'Ь' 'Э' 'Ю' 'Я'; */
}

@counter-style upper-serbo-croatian {
    system: alphabetic;
    symbols: '\410' '\411' '\412' '\413' '\414' '\402' '\415' '\416' '\417' '\418' '\408' '\41A' '\41B' '\409' '\41C' '\41D' '\40A' '\41E' '\41F' '\420' '\421' '\422' '\40B' '\423' '\424' '\425' '\426' '\427' '\40F' '\428';
    /* symbols: 'А' 'Б' 'В' 'Г' 'Д' 'Ђ' 'Е' 'Ж' 'З' 'И' 'Ј' 'К' 'Л' 'Љ' 'М' 'Н' 'Њ' 'О' 'П' 'Р' 'С' 'Т' 'Ћ' 'У' 'Ф' 'Х' 'Ц' 'Ч' 'Џ' 'Ш'; */
}

@counter-style upper-ukrainian {
    system: alphabetic;
    symbols: '\410' '\411' '\412' '\413' '\414' '\415' '\404' '\416' '\417' '\418' '\406' '\41A' '\41B' '\41C' '\41D' '\41E' '\41F' '\420' '\421' '\422' '\423' '\424' '\425' '\426' '\427' '\428' '\42E' '\42F';
    /* symbols: 'А' 'Б' 'В' 'Г' 'Д' 'Е' 'Є' 'Ж' 'З' 'И' 'І' 'К' 'Л' 'М' 'Н' 'О' 'П' 'Р' 'С' 'Т' 'У' 'Ф' 'Х' 'Ц' 'Ч' 'Ш' 'Ю' 'Я'; */
}

@counter-style upper-ukrainian-full {
    system: alphabetic;
    symbols: '\410' '\411' '\412' '\413' '\490' '\414' '\415' '\404' '\416' '\417' '\418' '\406' '\407' '\419' '\41A' '\41B' '\41C' '\41D' '\41E' '\41F' '\420' '\421' '\422' '\423' '\424' '\425' '\426' '\427' '\428' '\429' '\42C' '\42E' '\42F';
    /* symbols: 'А' 'Б' 'В' 'Г' 'Ґ' 'Д' 'Е' 'Є' 'Ж' 'З' 'И' 'І' 'Ї' 'Й' 'К' 'Л' 'М' 'Н' 'О' 'П' 'Р' 'С' 'Т' 'У' 'Ф' 'Х' 'Ц' 'Ч' 'Ш' 'Щ' 'Ь' 'Ю' 'Я'; */
}

/* Devanagari */
@counter-style devanagari {
    system: numeric;
    symbols: '\966' '\967' '\968' '\969' '\96A' '\96B' '\96C' '\96D' '\96E' '\96F';
    /* symbols: '०' '१' '२' '३' '४' '५' '६' '७' '८' '९'; */
}

@counter-style hindi {
    system: alphabetic;
    symbols: '\915' '\916' '\917' '\918' '\919' '\91A' '\91B' '\91C' '\91D' '\91E' '\91F' '\920' '\921' '\922' '\923' '\924' '\925' '\926' '\927' '\928' '\92A' '\92B' '\92C' '\92D' '\92E' '\92F' '\930' '\932' '\935' '\936' '\937' '\938' '\939';
    /* symbols: 'क' 'ख' 'ग' 'घ' 'ङ' 'च' 'छ' 'ज' 'झ' 'ञ' 'ट' 'ठ' 'ड' 'ढ' 'ण' 'त' 'थ' 'द' 'ध' 'न' 'प' 'फ' 'ब' 'भ' 'म' 'य' 'र' 'ल' 'व' 'श' 'ष' 'स' 'ह'; */
}

/* Ethiopic */
@counter-style afar {
    system: alphabetic;
    symbols: '\1200' '\1208' '\1210' '\1218' '\1228' '\1230' '\1260' '\1270' '\1290' '\12A0' '\12A8' '\12C8' '\12D0' '\12E8' '\12F0' '\12F8' '\1308' '\1338' '\1348';
    /* symbols: 'ሀ' 'ለ' 'ሐ' 'መ' 'ረ' 'ሰ' 'በ' 'ተ' 'ነ' 'አ' 'ከ' 'ወ' 'ዐ' 'የ' 'ደ' 'ዸ' 'ገ' 'ጸ' 'ፈ'; */
    suffix: '\1366 '; /* ፦ */
}

@counter-style agaw {
    system: alphabetic;
    symbols: '\1200' '\1208' '\1210' '\1218' '\1228' '\1230' '\1238' '\1240' '\1250' '\1260' '\1268' '\1270' '\1278' '\1290' '\1298' '\1300' '\1308' '\1318' '\1320' '\1328' '\1330' '\1338' '\1348' '\1350';
    /* symbols: 'ሀ' 'ለ' 'ሐ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'ቐ' 'በ' 'ቨ' 'ተ' 'ቸ' 'ነ' 'ኘ' 'ጀ' 'ገ' 'ጘ' 'ጠ' 'ጨ' 'ጰ' 'ጸ' 'ፈ' 'ፐ'; */
    suffix: '\1366 '; /* ፦ */
}

@counter-style ari {
    system: alphabetic;
    symbols: '\1200' '\1208' '\1218' '\1228' '\1230' '\1238' '\1260' '\1268' '\1270' '\1278' '\1290' '\1300' '\1308' '\1328' '\1340' '\1350';
    /* symbols: 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'በ' 'ቨ' 'ተ' 'ቸ' 'ነ' 'ጀ' 'ገ' 'ጨ' 'ፀ' 'ፐ'; */
    suffix: '\1366 '; /* ፦ */
}

@counter-style blin {
    system: alphabetic;
    symbols: '\1200' '\1208' '\1210' '\1218' '\1230' '\1238' '\1228' '\1240' '\1250' '\1260' '\1270' '\1290' '\1300' '\1308' '\1318' '\1320' '\1328' '\1348' '\1278' '\1298' '\1338' '\1330' '\1350';
    /* symbols: 'ሀ' 'ለ' 'ሐ' 'መ' 'ሰ' 'ሸ' 'ረ' 'ቀ' 'ቐ' 'በ' 'ተ' 'ነ' 'ጀ' 'ገ' 'ጘ' 'ጠ' 'ጨ' 'ፈ' 'ቸ' 'ኘ' 'ጸ' 'ጰ' 'ፐ'; */
    suffix: '\1366 '; /* ፦ */
}

@counter-style dizi {
    system: alphabetic;
    symbols: '\1200' '\1208' '\1218' '\1228' '\1230' '\1238' '\1240' '\1260' '\1270' '\1278' '\1290' '\1298' '\1300' '\1308' '\1320' '\1328' '\1338' '\1340' '\1348';
    /* symbols: 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ነ' 'ኘ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጸ' 'ፀ' 'ፈ'; */
    suffix: '\1366 '; /* ፦ */
}

@counter-style ethiopic-haleme {
    system: alphabetic;
    symbols: '\1200' '\1208' '\1210' '\1218' '\1220' '\1228' '\1230' '\1240' '\1260' '\1270' '\1280' '\1290' '\12A0' '\12A8' '\12C8' '\12D0' '\12D8' '\12E8' '\12F0' '\1308' '\1320' '\1330' '\1338' '\1340' '\1348' '\1350';
    /* symbols: 'ሀ' 'ለ' 'ሐ' 'መ' 'ሠ' 'ረ' 'ሰ' 'ቀ' 'በ' 'ተ' 'ኀ' 'ነ' 'አ' 'ከ' 'ወ' 'ዐ' 'ዘ' 'የ' 'ደ' 'ገ' 'ጠ' 'ጰ' 'ጸ' 'ፀ' 'ፈ' 'ፐ'; */
    suffix: '\1366 '; /* ፦ */
}

@counter-style ethiopic-haleme-am {
    system: alphabetic;
    symbols: '\1200' '\1208' '\1210' '\1218' '\1220' '\1228' '\1230' '\1238' '\1240' '\1260' '\1270' '\1278' '\1280' '\1290' '\1298' '\12A0' '\12A8' '\12B8' '\12C8' '\12D0' '\12D8' '\12E0' '\12E8' '\12F0' '\1300' '\1308' '\1320' '\1328' '\1330' '\1338' '\1340' '\1348' '\1350';
    /* symbols: 'ሀ' 'ለ' 'ሐ' 'መ' 'ሠ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ኀ' 'ነ' 'ኘ' 'አ' 'ከ' 'ኸ' 'ወ' 'ዐ' 'ዘ' 'ዠ' 'የ' 'ደ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ጸ' 'ፀ' 'ፈ' 'ፐ'; */
    suffix: '\1366 '; /* ፦ */
}

@counter-style ethiopic-haleme-ti-er {
    system: alphabetic;
    symbols: '\1200' '\1208' '\1210' '\1218' '\1228' '\1230' '\1238' '\1240' '\1250' '\1260' '\1270' '\1278' '\1290' '\1298' '\12A0' '\12A8' '\12B8' '\12C8' '\12D0' '\12D8' '\12E0' '\12E8' '\12F0' '\1300' '\1308' '\1320' '\1328' '\1330' '\1338' '\1348' '\1350';
    /* symbols: 'ሀ' 'ለ' 'ሐ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'ቐ' 'በ' 'ተ' 'ቸ' 'ነ' 'ኘ' 'አ' 'ከ' 'ኸ' 'ወ' 'ዐ' 'ዘ' 'ዠ' 'የ' 'ደ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ጸ' 'ፈ' 'ፐ'; */
    suffix: '\1366 '; /* ፦ */
}

@counter-style ethiopic-haleme-ti-et {
    system: alphabetic;
    symbols: '\1200' '\1208' '\1210' '\1218' '\1220' '\1228' '\1230' '\1238' '\1240' '\1250' '\1260' '\1270' '\1278' '\1280' '\1290' '\1298' '\12A0' '\12A8' '\12B8' '\12C8' '\12D0' '\12D8' '\12E0' '\12E8' '\12F0' '\1300' '\1308' '\1320' '\1328' '\1330' '\1338' '\1340' '\1348' '\1350';
    /* symbols: 'ሀ' 'ለ' 'ሐ' 'መ' 'ሠ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'ቐ' 'በ' 'ተ' 'ቸ' 'ኀ' 'ነ' 'ኘ' 'አ' 'ከ' 'ኸ' 'ወ' 'ዐ' 'ዘ' 'ዠ' 'የ' 'ደ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ጸ' 'ፀ' 'ፈ' 'ፐ'; */
}

@counter-style gedeo {
    system: alphabetic;
    symbols: '\1200' '\1208' '\1218' '\1228' '\1230' '\1238' '\1240' '\1260' '\1270' '\1278' '\1290' '\1300' '\1308' '\1320' '\1328' '\1330' '\1338' '\1348' '\1350';
    /* symbols: 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ነ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ጸ' 'ፈ' 'ፐ'; */
    suffix: '\1366 '; /* ፦ */
}

@counter-style gumuz {
    system: alphabetic;
    symbols: '\1200' '\1210' '\1208' '\1210' '\1218' '\1228' '\1230' '\1238' '\1240' '\1260' '\1268' '\1270' '\1278' '\1290' '\1298' '\1308' '\1328' '\1330' '\1340' '\1350';
    /* symbols: 'ሀ' 'ሐ' 'ለ' 'ሐ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ቨ' 'ተ' 'ቸ' 'ነ' 'ኘ' 'ገ' 'ጨ' 'ጰ' 'ፀ' 'ፐ'; */
    suffix: '\1366 '; /* ፦ */
}

@counter-style hadiyya {
    system: alphabetic;
    symbols: '\1200' '\1208' '\1218' '\1228' '\1230' '\1238' '\1240' '\1260' '\1270' '\1278' '\1290' '\1300' '\1308' '\1320' '\1328' '\1330' '\1348' '\1350';
    /* symbols: 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ነ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ፈ' 'ፐ'; */
    suffix: '\1366 '; /* ፦ */
}

@counter-style harari {
    system: alphabetic;
    symbols: '\1210' '\1208' '\1218' '\1228' '\1230' '\1238' '\1240' '\1260' '\1270' '\1278' '\1290' '\1298' '\1300' '\1308' '\1320' '\1328' '\1348';
    /* symbols: 'ሐ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ነ' 'ኘ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ፈ'; */
    suffix: '\1366 '; /* ፦ */
}

@counter-style kaffa {
    system: alphabetic;
    symbols: '\1200' '\1208' '\1210' '\1218' '\1220' '\1228' '\1230' '\1238' '\1240' '\1260' '\1270' '\1278' '\1280' '\1290' '\1300' '\1308' '\1320' '\1328' '\1330' '\1348' '\1350';
    /* symbols: 'ሀ' 'ለ' 'ሐ' 'መ' 'ሠ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ኀ' 'ነ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ፈ' 'ፐ'; */
    suffix: '\1366 '; /* ፦ */
}

@counter-style kebena {
    system: alphabetic;
    symbols: '\1200' '\1208' '\1218' '\1228' '\1230' '\1238' '\1240' '\1260' '\1270' '\1278' '\1290' '\1300' '\1308' '\1320' '\1328' '\1330' '\1348' '\1350';
    /* symbols: 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ነ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ፈ' 'ፐ'; */
    suffix: '\1366 '; /* ፦ */
}

@counter-style kembata {
    system: alphabetic;
    symbols: '\1200' '\1208' '\1218' '\1228' '\1230' '\1238' '\1240' '\1260' '\1268' '\1270' '\1278' '\1290' '\1300' '\1308' '\1320' '\1328' '\1330' '\1348';
    /* symbols: 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ቨ' 'ተ' 'ቸ' 'ነ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ፈ'; */
    suffix: '\1366 '; /* ፦ */
}

@counter-style konso {
    system: alphabetic;
    symbols: '\1200' '\1208' '\1218' '\1228' '\1230' '\1238' '\1240' '\1260' '\1270' '\1278' '\1290' '\1298' '\1300' '\1348' '\1350';
    /* symbols: 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ነ' 'ኘ' 'ጀ' 'ፈ' 'ፐ'; */
    suffix: '\1366 '; /* ፦ */
}

@counter-style kunama {
    system: alphabetic;
    symbols: '\1200' '\1208' '\1218' '\1228' '\1230' '\1238' '\1260' '\1270' '\1278' '\1290' '\1298' '\1300' '\1308';
    /* symbols: 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'በ' 'ተ' 'ቸ' 'ነ' 'ኘ' 'ጀ' 'ገ'; */
    suffix: '\1366 '; /* ፦ */
}

@counter-style meen {
    system: alphabetic;
    symbols: '\1200' '\1208' '\1218' '\1228' '\1230' '\1238' '\1240' '\1260' '\1270' '\1278' '\1280' '\1290' '\1298' '\1300' '\1308' '\1320' '\1328' '\1330' '\1350' '\1340';
    /* symbols: 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ኀ' 'ነ' 'ኘ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ፐ' 'ፀ'; */
    suffix: '\1366 '; /* ፦ */
}

@counter-style oromo {
    system: alphabetic;
    symbols: '\1200' '\1208' '\1218' '\1228' '\1230' '\1238' '\1240' '\1260' '\1270' '\1278' '\1290' '\1298' '\12A0' '\12A8' '\12C8' '\12E8' '\12F0' '\12F8' '\1300' '\1308' '\1320' '\1328' '\1330' '\1338' '\1348';
    /* symbols: 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ነ' 'ኘ' 'አ' 'ከ' 'ወ' 'የ' 'ደ' 'ዸ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ጸ' 'ፈ'; */
    suffix: '\1366 '; /* ፦ */
}

@counter-style saho {
    system: alphabetic;
    symbols: '\1200' '\1208' '\1210' '\1218' '\1228' '\1230' '\1240' '\1260' '\1270' '\1290' '\1308' '\1320' '\1328' '\1330' '\1338' '\1348';
    /* symbols: 'ሀ' 'ለ' 'ሐ' 'መ' 'ረ' 'ሰ' 'ቀ' 'በ' 'ተ' 'ነ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ጸ' 'ፈ'; */
    suffix: '\1366 '; /* ፦ */
}

@counter-style sidama {
    system: alphabetic;
    symbols: '\1200' '\1208' '\1218' '\1228' '\1230' '\1238' '\1240' '\1260' '\1270' '\1278' '\1290' '\1298' '\12A0' '\12A8' '\12C8' '\12E8' '\12F0' '\12F8' '\1300' '\1308' '\1320' '\1328' '\1330' '\1338' '\1348';
    /* symbols: 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ነ' 'ኘ' 'አ' 'ከ' 'ወ' 'የ' 'ደ' 'ዸ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ጸ' 'ፈ'; */
    suffix: '\1366 '; /* ፦ */
}

@counter-style silti {
    system: alphabetic;
    symbols: '\1200' '\1208' '\1218' '\1228' '\1230' '\1238' '\1240' '\1260' '\1270' '\1278' '\1290' '\1298' '\1300' '\1308' '\1320' '\1328' '\1330' '\1348';
    /* symbols: 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ነ' 'ኘ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ፈ'; */
    suffix: '\1366 '; /* ፦ */
}

@counter-style tigre {
    system: alphabetic;
    symbols: '\1200' '\1208' '\1210' '\1218' '\1228' '\1230' '\1238' '\1240' '\1260' '\1270' '\1278' '\1290' '\12A0' '\12A8' '\12C8' '\12D0' '\12D8' '\12E8' '\12F0' '\1300' '\1308' '\1320' '\1328' '\1330' '\1338' '\1348' '\1350';
    /* symbols: 'ሀ' 'ለ' 'ሐ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ነ' 'አ' 'ከ' 'ወ' 'ዐ' 'ዘ' 'የ' 'ደ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ጸ' 'ፈ' 'ፐ'; */
    suffix: '\1366 '; /* ፦ */
}

@counter-style wolaita {
    system: alphabetic;
    symbols: '\1200' '\1208' '\1218' '\1228' '\1230' '\1238' '\1240' '\1260' '\1270' '\1278' '\1290' '\1298' '\1230' '\1308' '\1320' '\1328' '\1330' '\1338' '\1340' '\1348' '\1350';
    /* symbols: 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ነ' 'ኘ' 'ሰ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ጸ' 'ፀ' 'ፈ' 'ፐ'; */
    suffix: '\1366 '; /* ፦ */
}

@counter-style yemsa {
    system: alphabetic;
    symbols: '\1200' '\1208' '\1218' '\1228' '\1230' '\1238' '\1240' '\1260' '\1268' '\1270' '\1278' '\1290' '\1298' '\1300' '\1308' '\1318' '\1320' '\1328' '\1330' '\1348' '\1350';
    /* symbols: 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ቨ' 'ተ' 'ቸ' 'ነ' 'ኘ' 'ጀ' 'ገ' 'ጘ' 'ጠ' 'ጨ' 'ጰ' 'ፈ' 'ፐ'; */
    suffix: '\1366 '; /* ፦ */
}
/* TODO: How to define `ethiopic-numeric`? */

/* Georgian */
@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';
    /* additive-symbols: 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 'ა'; */
}

/* Greek */
@counter-style greek-lower-modern {
    system: additive;
    range: 1 999;
    additive-symbols: 900 \3E1, 800 \3C9, 700 \3C8, 600 \3C7, 500 \3C6, 400 \3C5, 300 \3C4, 200 \3C3, 100 \3C1, 90 \3DF, 80 \3C0, 70 \3BF, 60 \3BE, 50 \3BD, 40 \3BC, 30 \3BB, 20 \3BA, 10 \3B9, 9 \3B8, 8 \3B7, 7 \3B6, 6 \3C3\3C4, 5 \3B5, 4 \3B4, 3 \3B3, 2 \3B2, 1 \3B1;
    /* additive-symbols: 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 greek-upper-modern {
    system: additive;
    range: 1 999;
    additive-symbols: 900 \3E0, 800 \3A9, 700 \3A8, 600 \3A7, 500 \3A6, 400 \3A5, 300 \3A4, 200 \3A3, 100 \3A1, 90 \3DE, 80 \3A0, 70 \39F, 60 \39E, 50 \39D, 40 \39C, 30 \39B, 20 \39A, 10 \399, 9 \398, 8 \397, 7 \396, 6 \3A3\3A4, 5 \395, 4 \394, 3 \393, 2 \392, 1 \391;
    /* additive-symbols: 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 greek-lower-ancient {
    system: additive;
    range: 1 999;
    additive-symbols: 900 \3E1, 800 \3C9, 700 \3C8, 600 \3C7, 500 \3C6, 400 \3C5, 300 \3C4, 200 \3C3, 100 \3C1, 90 \3DF, 80 \3C0, 70 \3BF, 60 \3BE, 50 \3BD, 40 \3BC, 30 \3BB, 20 \3BA, 10 \3B9, 9 \3B8, 8 \3B7, 7 \3B6, 6 \3DB, 5 \3B5, 4 \3B4, 3 \3B3, 2 \3B2, 1 \3B1;
    /* additive-symbols: 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 greek-upper-ancient {
    system: additive;
    range: 1 999;
    additive-symbols: 900 \3E0, 800 \3A9, 700 \3A8, 600 \3A7, 500 \3A6, 400 \3A5, 300 \3A4, 200 \3A3, 100 \3A1, 90 \3DE, 80 \3A0, 70 \39F, 60 \39E, 50 \39D, 40 \39C, 30 \39B, 20 \39A, 10 \399, 9 \398, 8 \397, 7 \396, 6 \3DA, 5 \395, 4 \394, 3 \393, 2 \392, 1 \391;
    /* additive-symbols: 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 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';
    /* symbols: 'α' 'β' 'γ' 'δ' 'ε' 'ζ' 'η' 'θ' 'ι' 'κ' 'λ' 'μ' 'ν' 'ξ' 'ο' 'π' 'ρ' 'σ' 'τ' 'υ' 'φ' 'χ' 'ψ' 'ω'; */
    /* This style is only defined because CSS2.1 has it.  It doesn't appear to actually be used in Greek texts. */
}

/* Gujarati */
@counter-style gujarati {
    system: numeric;
    symbols: '\AE6' '\AE7' '\AE8' '\AE9' '\AEA' '\AEB' '\AEC' '\AED' '\AEE' '\AEF';
    /* symbols: '૦' '૧' '૨' '૩' '૪' '૫' '૬' '૭' '૮' '૯'; */
}

/* Gurmukhi */
@counter-style gurmukhi {
    system: numeric;
    symbols: '\A66' '\A67' '\A68' '\A69' '\A6A' '\A6B' '\A6C' '\A6D' '\A6E' '\A6F';
    /* symbols: '੦' '੧' '੨' '੩' '੪' '੫' '੬' '੭' '੮' '੯'; */
}

/* Hanifi Rohingya */
@counter-style hanifi-rohingya {
    system: numeric;
    symbols: '\10D30' '\10D31' '\10D32' '\10D33' '\10D34' '\10D35' '\10D36' '\10D37' '\10D38' '\10D39';
    /* symbols: '𐴰' '𐴱' '𐴲' '𐴳' '𐴴' '𐴵' '𐴶' '𐴷' '𐴸' '𐴹'; */
}

/* Hebrew */
@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;
    /* additive-symbols: 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 א; */
}

/* Han & CJK */
@counter-style cjk-decimal {
    system: numeric;
    range: 0 infinite;

    symbols: '\3007' '\4E00' '\4E8C' '\4E09' '\56DB' '\4E94' '\516D' '\4E03' '\516B' '\4E5D';
    /* symbols: 〇 一 二 三 四 五 六 七 八 九; */
    suffix: '\3001';
    /* suffix: "、" */
}

@counter-style cjk-earthly-branch {
    system: fixed;
    symbols: '\5B50' '\4E11' '\5BC5' '\536F' '\8FB0' '\5DF3' '\5348' '\672A' '\7533' '\9149' '\620C' '\4EA5';
    /* symbols: '子' '丑' '寅' '卯' '辰' '巳' '午' '未' '申' '酉' '戌' '亥'; */
    suffix: '\3001';
    /* suffix: '、'; */
}

@counter-style cjk-heavenly-stem {
    system: fixed;
    symbols: '\7532' '\4E59' '\4E19' '\4E01' '\620A' '\5DF1' '\5E9A' '\8F9B' '\58EC' '\7678';
    /* symbols: '甲' '乙' '丙' '丁' '戊' '己' '庚' '辛' '壬' '癸'; */
    suffix: '\3001';
    /* suffix: '、'; */
}

@counter-style circled-ideograph {
    system: fixed;
    symbols: '\3280' '\3281' '\3282' '\3283' '\3284' '\3285' '\3286' '\3287' '\3288' '\3289';
    /* symbols: '㊀' '㊁' '㊂' '㊃' '㊄' '㊅' '㊆' '㊇' '㊈' '㊉'; */
    suffix: ' ';
}

@counter-style parenthesized-ideograph {
    system: fixed;
    symbols: '\3220' '\3221' '\3222' '\3223' '\3224' '\3225' '\3226' '\3227' '\3228' '\3229';
    /* symbols: '㈠' '㈡' '㈢' '㈣' '㈤' '㈥' '㈦' '㈧' '㈨' '㈩'; */
    suffix: ' ';
}

@counter-style cjk-tally-mark {
    system: additive;
    additive-symbols: 5 '\1D376', 4 '\1D375', 3 '\1D374', 2 '\1D373', 1 '\1D372';
    /* symbols: 5 𝍶, 4 𝍵, 3 𝍴, 2 𝍳, 1 𝍲; */
    suffix: ' ';
}
/* These symbols were introduced in Unicode 11, so not many fonts are likely to support them. One font that does is Symbola.*/


@counter-style cjk-stem-branch {
    system: cyclic;
    symbols:  '\7532\5B50' '\4E59\4E11' '\4E19\5BC5' '\4E01\536F' '\620A\8FB0' '\5DF1\5DF3' '\5E9A\5348' '\8F9B\672A' '\58EC\7533' '\7678\9149'
    '\7532\620C' '\4E59\4EA5' '\4E19\5B50' '\4E01\4E11' '\620A\5BC5' '\5DF1\536F' '\5E9A\8FB0' '\8F9B\5DF3' '\58EC\5348' '\7678\672A'
    '\7532\7533' '\4E59\9149' '\4E19\620C' '\4E01\4EA5' '\620A\5B50' '\5DF1\4E11' '\5E9A\5BC5' '\8F9B\536F' '\58EC\8FB0' '\7678\5DF3'
    '\7532\5348' '\4E59\672A' '\4E19\7533' '\4E01\9149' '\620A\620C' '\5DF1\4EA5' '\5E9A\5B50' '\8F9B\4E11' '\58EC\5BC5' '\7678\536F'
    '\7532\8FB0' '\4E59\5DF3' '\4E19\5348' '\4E01\672A' '\620A\7533' '\5DF1\9149' '\5E9A\620C' '\8F9B\4EA5' '\58EC\5B50' '\7678\4E11'
    '\7532\5BC5' '\4E59\536F' '\4E19\8FB0' '\4E01\5DF3' '\620A\5348' '\5DF1\672A' '\5E9A\7533' '\8F9B\9149' '\58EC\620C' '\7678\4EA5';
    /* 甲子 乙丑 丙寅 丁卯 戊辰 己巳 庚午 辛未 壬申 癸酉 */
    /* 甲戌 乙亥 丙子 丁丑 戊寅 己卯 庚辰 辛巳 壬午 癸未 */   
    /* 甲申 乙酉 丙戌 丁亥 戊子 己丑 庚寅 辛卯 壬辰 癸巳 */   
    /* 甲午 乙未 丙申 丁酉 戊戌 己亥 庚子 辛丑 壬寅 癸卯 */   
    /* 甲辰 乙巳 丙午 丁未 戊申 己酉 庚戌 辛亥 壬子 癸丑 */   
    /* 甲寅 乙卯 丙辰 丁巳 戊午 己未 庚申 辛酉 壬戌 癸亥 */
    suffix: '、';
}
/* TODO: How to define simp-chinese-informal, simp-chinese-formal,
         cjk-ideograph/trad-chinese-informal, & trad-chinese-formal? */

/* Japanese */
@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';
    /* symbols: あ い う え お か き く け こ さ し す せ そ た ち つ て と な に ぬ ね の は ひ ふ へ ほ ま み む め も や ゆ よ ら り る れ ろ わ ゐ ゑ を ん; */
    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';
    /* symbols: い ろ は に ほ へ と ち り ぬ る を わ か よ た れ そ つ ね な ら む う ゐ の お く や ま け ふ こ え て あ さ き ゆ め み し ゑ ひ も せ す; */
    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';
    /* symbols: ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ヰ ヱ ヲ ン; */
    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';
    /* symbols: イ ロ ハ ニ ホ ヘ ト チ リ ヌ ル ヲ ワ カ ヨ タ レ ソ ツ ネ ナ ラ ム ウ ヰ ノ オ ク ヤ マ ケ フ コ エ テ ア サ キ ユ メ ミ シ ヱ ヒ モ セ ス; */
    suffix: '、';
}
 @counter-style circled-katakana {
    system: fixed;
    symbols: '\32D0' '\32D1' '\32D2' '\32D3' '\32D4' '\32D5' '\32D6' '\32D7' '\32D8' '\32D9' '\32DA' '\32DB' '\32DC' '\32DD' '\32DE' '\32DF' '\32E0' '\32E1' '\32E2' '\32E3' '\32E4' '\32E5' '\32E6' '\32E7' '\32E8' '\32E9' '\32EA' '\32EB' '\32EC' '\32ED' '\32EE' '\32EF' '\32F0' '\32F1' '\32F2' '\32F3' '\32F4' '\32F5' '\32F6' '\32F7' '\32F8' '\32F9' '\32FA' '\32FB' '\32FC' '\32FD' '\32FE';
    /* symbols: ㋐ ㋑ ㋒ ㋓ ㋔ ㋕ ㋖ ㋗ ㋘ ㋙ ㋚ ㋛ ㋜ ㋝ ㋞ ㋟ ㋠ ㋡ ㋢ ㋣ ㋤ ㋥ ㋦ ㋧ ㋨ ㋩ ㋪ ㋫ ㋬ ㋭ ㋮ ㋯ ㋰ ㋱ ㋲ ㋳ ㋴ ㋵ ㋶ ㋷ ㋸ ㋹ ㋺ ㋻ ㋼ ㋽ ㋾; */
    suffix: ' ';
}

@counter-style japanese-informal { /* this is a predefined complex style in the CSS3 Counter Styles specification */
    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;
    /* additive-symbols: 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';
    /* suffix: '、'; */
    negative: "\30DE\30A4\30CA\30B9";
    /* negative: マイナス; */
    fallback: cjk-decimal;
}

@counter-style japanese-formal { /* this is a predefined complex style in the CSS3 Counter Styles specification */
    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;
    /* additive-symbols: 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';
    /* suffix: 、; */
    negative: "\30DE\30A4\30CA\30B9";
    /* negative: マイナス; */
    fallback: cjk-decimal;
}

/* Kannada */
@counter-style kannada {
    system: numeric;
    symbols: '\CE6' '\CE7' '\CE8' '\CE9' '\CEA' '\CEB' '\CEC' '\CED' '\CEE' '\CEF';
    /* symbols: '೦' '೧' '೨' '೩' '೪' '೫' '೬' '೭' '೮' '೯'; */
}

/* Khmer */
@counter-style cambodian {
    system: numeric;
    symbols: '\17E0' '\17E1' '\17E2' '\17E3' '\17E4' '\17E5' '\17E6' '\17E7' '\17E8' '\17E9';
    /* symbols: '០' '១' '២' '៣' '៤' '៥' '៦' '៧' '៨' '៩'; */
}

@counter-style khmer {
    system: numeric;
    symbols: '\17E0' '\17E1' '\17E2' '\17E3' '\17E4' '\17E5' '\17E6' '\17E7' '\17E8' '\17E9';
    /* symbols: '០' '១' '២' '៣' '៤' '៥' '៦' '៧' '៨' '៩'; */
}

@counter-style khmer-consonant {
    system: alphabetic;
    symbols: '\1780' '\1781' '\1782' '\1783' '\1784' '\1785' '\1786' '\1787' '\1788' '\1789' '\178A' '\178B' '\178C' '\178D' '\178E' '\178F' '\1790' '\1791' '\1792' '\1793' '\1794' '\1795' '\1796' '\1797' '\1798' '\1799' '\179A' '\179B' '\179C' '\179F' '\17A0' '\17A1' '\17A2';
    /* symbols: 'ក' 'ខ' 'គ' 'ឃ' 'ង' 'ច' 'ឆ' 'ជ' 'ឈ' 'ញ' 'ដ' 'ឋ' 'ឌ' 'ឍ' 'ណ' 'ត' 'ថ' 'ទ' 'ធ' 'ន' 'ប' 'ផ' 'ព' 'ភ' 'ម' 'យ' 'រ' 'ល' 'វ' 'ស' 'ហ' 'ឡ' 'អ'; */
}

/* Korean */
@counter-style circled-korean-consonant {
    system: fixed;
    symbols: '\3260' '\3261' '\3262' '\3263' '\3264' '\3265' '\3266' '\3267' '\3268' '\3269' '\326A' '\326B' '\326C' '\326D';
    /* symbols: '㉠' '㉡' '㉢' '㉣' '㉤' '㉥' '㉦' '㉧' '㉨' '㉩' '㉪' '㉫' '㉬' '㉭'; */
    suffix: ' ';
}

@counter-style circled-korean-syllable {
    system: fixed;
    symbols: '\326E' '\326F' '\3270' '\3271' '\3272' '\3273' '\3274' '\3275' '\3276' '\3277' '\3278' '\3279' '\327A' '\327B';
    /* symbols: '㉮' '㉯' '㉰' '㉱' '㉲' '㉳' '㉴' '㉵' '㉶' '㉷' '㉸' '㉹' '㉺' '㉻'; */
    suffix: ' ';
}

@counter-style hangul {
    system: alphabetic;
    symbols: '\AC00' '\B098' '\B2E4' '\B77C' '\B9C8' '\BC14' '\C0AC' '\C544' '\C790' '\CC28' '\CE74' '\D0C0' '\D30C' '\D558';
    /* symbols: '가' '나' '다' '라' '마' '바' '사' '아' '자' '차' '카' '타' '파' '하'; */
}

@counter-style hangul-consonant {
    system: alphabetic;
    symbols: '\3131' '\3134' '\3137' '\3139' '\3141' '\3142' '\3145' '\3147' '\3148' '\314A' '\314B' '\314C' '\314D' '\314E';
    /* symbols: 'ㄱ' 'ㄴ' 'ㄷ' 'ㄹ' 'ㅁ' 'ㅂ' 'ㅅ' 'ㅇ' 'ㅈ' 'ㅊ' 'ㅋ' 'ㅌ' 'ㅍ' 'ㅎ'; */
}

@counter-style korean-consonant {
    system: alphabetic;
    symbols: '\3131' '\3134' '\3137' '\3139' '\3141' '\3142' '\3145' '\3147' '\3148' '\314A' '\314B' '\314C' '\314D' '\314E';
    /* symbols: 'ㄱ' 'ㄴ' 'ㄷ' 'ㄹ' 'ㅁ' 'ㅂ' 'ㅅ' 'ㅇ' 'ㅈ' 'ㅊ' 'ㅋ' 'ㅌ' 'ㅍ' 'ㅎ'; */
}

@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';
    /* additive-symbols: 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  ";
    /* 마이너스 (followed by a space) */
}

@counter-style korean-syllable {
    system: alphabetic;
    symbols: '\AC00' '\B098' '\B2E4' '\B77C' '\B9C8' '\BC14' '\C0AC' '\C544' '\C790' '\CC28' '\CE74' '\D0C0' '\D30C' '\D558';
    /* symbols: '가' '나' '다' '라' '마' '바' '사' '아' '자' '차' '카' '타' '파' '하'; */
}

@counter-style parenthesized-hangul-consonant {
    system: fixed;
    symbols: '\3200' '\3201' '\3202' '\3203' '\3204' '\3205' '\3206' '\3207' '\3208' '\3209' '\320A' '\320B' '\320C' '\320D';
    /* symbols: '㈀' '㈁' '㈂' '㈃' '㈄' '㈅' '㈆' '㈇' '㈈' '㈉' '㈊' '㈋' '㈌' '㈍'; */
    suffix: ' ';
}

@counter-style parenthesized-hangul-syllable {
    system: fixed;
    symbols: '\320E' '\320F' '\3210' '\3211' '\3212' '\3213' '\3214' '\3215' '\3216' '\3217' '\3218' '\3219' '\321A';
    /* symbols: '㈎' '㈏' '㈐' '㈑' '㈒' '㈓' '㈔' '㈕' '㈖' '㈗' '㈘' '㈙' '㈚'; */
    suffix: ' ';
}

@counter-style korean-hanja-informal { /* this is a predefined complex style in the CSS3 Counter Styles specification */
    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;
    /* additive-symbols: 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  ";
    /* 마이너스 (followed by a space) */
}

@counter-style korean-hanja-formal { /* this is a predefined complex style in the CSS3 Counter Styles specification */
    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;
    /* additive-symbols: 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  ";
    /* 마이너스 (followed by a space) */
}

/* Lao */
@counter-style lao {
    system: numeric;
    symbols: '\ED0' '\ED1' '\ED2' '\ED3' '\ED4' '\ED5' '\ED6' '\ED7' '\ED8' '\ED9';
    /* symbols: '໐' '໑' '໒' '໓' '໔' '໕' '໖' '໗' '໘' '໙'; */
}

/* Latin */
@counter-style fullwidth-lower-alpha {
    system: alphabetic;
    symbols: '\FF41' '\FF42' '\FF43' '\FF44' '\FF45' '\FF46' '\FF47' '\FF48' '\FF49' '\FF4A' '\FF4B' '\FF4C' '\FF4D' '\FF4E' '\FF4F' '\FF50' '\FF51' '\FF52' '\FF53' '\FF54' '\FF55' '\FF56' '\FF57' '\FF58' '\FF59' '\FF5A';
    /* 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'; */
    suffix: '.';
}

@counter-style fullwidth-upper-alpha {
    system: alphabetic;
    symbols: '\FF21' '\FF22' '\FF23' '\FF24' '\FF25' '\FF26' '\FF27' '\FF28' '\FF29' '\FF2A' '\FF2B' '\FF2C' '\FF2D' '\FF2E' '\FF2F' '\FF30' '\FF31' '\FF32' '\FF33' '\FF34' '\FF35' '\FF36' '\FF37' '\FF38' '\FF39' '\FF3A';
    /* 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'; */
    suffix: '.';
}

@counter-style lower-alpha {
    system: alphabetic;
    symbols: '\61' '\62' '\63' '\64' '\65' '\66' '\67' '\68' '\69' '\6A' '\6B' '\6C' '\6D' '\6E' '\6F' '\70' '\71' '\72' '\73' '\74' '\75' '\76' '\77' '\78' '\79' '\7A';
    /* 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: alphabetic;
    symbols: '\61' '\62' '\63' '\64' '\65' '\66' '\67' '\68' '\69' '\6A' '\6B' '\6C' '\6D' '\6E' '\6F' '\70' '\71' '\72' '\73' '\74' '\75' '\76' '\77' '\78' '\79' '\7A';
    /* 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-alpha-symbolic {
    system: symbolic;
    symbols: '\61' '\62' '\63' '\64' '\65' '\66' '\67' '\68' '\69' '\6A' '\6B' '\6C' '\6D' '\6E' '\6F' '\70' '\71' '\72' '\73' '\74' '\75' '\76' '\77' '\78' '\79' '\7A';
    /* 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-oromo-qubee {
    system: alphabetic;
    symbols: '\61' '\61\61' '\62' '\63' '\64' '\65' '\65\65' '\66' '\67' '\68' '\69' '\69\69' '\6A' '\6B' '\6C' '\6D' '\6E' '\6F' '\6F\6F' '\70' '\71' '\72' '\73' '\74' '\75' '\75\75' '\76' '\77' '\78' '\79' '\7A' '\63\68' '\64\68' '\6B\68' '\6E\79' '\70\68' '\73\68';
    /* symbols: 'a' 'aa' 'b' 'c' 'd' 'e' 'ee' 'f' 'g' 'h' 'i' 'ii' 'j' 'k' 'l' 'm' 'n' 'o' 'oo' 'p' 'q' 'r' 's' 't' 'u' 'uu' 'v' 'w' 'x' 'y' 'z' 'ch' 'dh' 'kh' 'ny' 'ph' 'sh'; */
}

@counter-style upper-alpha {
    system: alphabetic;
    symbols: '\41' '\42' '\43' '\44' '\45' '\46' '\47' '\48' '\49' '\4A' '\4B' '\4C' '\4D' '\4E' '\4F' '\50' '\51' '\52' '\53' '\54' '\55' '\56' '\57' '\58' '\59' '\5A';
    /* 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: alphabetic;
    symbols: '\41' '\42' '\43' '\44' '\45' '\46' '\47' '\48' '\49' '\4A' '\4B' '\4C' '\4D' '\4E' '\4F' '\50' '\51' '\52' '\53' '\54' '\55' '\56' '\57' '\58' '\59' '\5A';
    /* 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-alpha-symbolic {
    system: symbolic;
    symbols: '\41' '\42' '\43' '\44' '\45' '\46' '\47' '\48' '\49' '\4A' '\4B' '\4C' '\4D' '\4E' '\4F' '\50' '\51' '\52' '\53' '\54' '\55' '\56' '\57' '\58' '\59' '\5A';
    /* 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-oromo-qubee {
    system: alphabetic;
    symbols: '\41' '\41\41' '\42' '\43' '\44' '\45' '\45\45' '\46' '\47' '\48' '\49' '\49\49' '\4A' '\4B' '\4C' '\4D' '\4E' '\4F' '\4F\4F' '\50' '\51' '\52' '\53' '\54' '\55' '\55\55' '\56' '\57' '\58' '\59' '\5A' '\43\48' '\44\48' '\4B\48' '\4E\59' '\50\48' '\53\48';
    /* symbols: 'A' 'AA' 'B' 'C' 'D' 'E' 'EE' 'F' 'G' 'H' 'I' 'II' 'J' 'K' 'L' 'M' 'N' 'O' 'OO' 'P' 'Q' 'R' 'S' 'T' 'U' 'UU' 'V' 'W' 'X' 'Y' 'Z' 'CH' 'DH' 'KH' 'NY' 'PH' 'SH'; */
}

@counter-style parenthesized-lower-latin {
    system: fixed;
    symbols: '\249C' '\249D' '\249E' '\249F' '\24A0' '\24A1' '\24A2' '\24A3' '\24A4' '\24A5' '\24A6' '\24A7' '\24A8' '\24A9' '\24AA' '\24AB' '\24AC' '\24AD' '\24AE' '\24AF' '\24B0' '\24B1' '\24B2' '\24B3' '\24B4' '\24B5';
    /* symbols: '⒜' '⒝' '⒞' '⒟' '⒠' '⒡' '⒢' '⒣' '⒤' '⒥' '⒦' '⒧' '⒨' '⒩' '⒪' '⒫' '⒬' '⒭' '⒮' '⒯' '⒰' '⒱' '⒲' '⒳' '⒴' '⒵'; */
    suffix: ' ';
}

/* Lepcha */
@counter-style lepcha {
    system: numeric;
    symbols: '\1C40' '\1C41' '\1C42' '\1C43' '\1C44' '\1C45' '\1C46' '\1C47' '\1C48' '\1C49';
    /* symbols: '᱀' '᱁' '᱂' '᱃' '᱄' '᱅' '᱆' '᱇' '᱈' '᱉'; */
}

/* Malayalam */
@counter-style malayalam {
    system: numeric;
    symbols: '\D66' '\D67' '\D68' '\D69' '\D6A' '\D6B' '\D6C' '\D6D' '\D6E' '\D6F';
    /* symbols: '൦' '൧' '൨' '൩' '൪' '൫' '൬' '൭' '൮' '൯'; */
}

/* Meetei */
@counter-style meetei {
    system: numeric;
    symbols: '\ABF0' '\ABF1' '\ABF2' '\ABF3' '\ABF4' '\ABF5' '\ABF6' '\ABF7' '\ABF8' '\ABF9';
    /* symbols: '꯰' '꯱' '꯲' '꯳' '꯴' '꯵' '꯶' '꯷' '꯸' '꯹'; */
    suffix: ') ';
}

/* Mongolian */
@counter-style mongolian {
    system: numeric;
    symbols: '\1810' '\1811' '\1812' '\1813' '\1814' '\1815' '\1816' '\1817' '\1818' '\1819';
    /* symbols: '᠐' '᠑' '᠒' '᠓' '᠔' '᠕' '᠖' '᠗' '᠘' '᠙'; */
}

/* Myanmar (Burmese) */
@counter-style myanmar {
    system: numeric;
    symbols: '\1040' '\1041' '\1042' '\1043' '\1044' '\1045' '\1046' '\1047' '\1048' '\1049';
    /* symbols: '၀' '၁' '၂' '၃' '၄' '၅' '၆' '၇' '၈' '၉'; */
    prefix: '(';
    suffix: ') ';
}

@counter-style shan {
    system: numeric;
    symbols: '\1090' '\1091' '\1092' '\1093' '\1094' '\1095' '\1096' '\1097' '\1098' '\1099';
    /* symbols: '႐' '႑' '႒' '႓' '႔' '႕' '႖' '႗' '႘' '႙'; */
    prefix: '(';
    suffix: ') ';
}

/* Ol Chiki */
@counter-style santali {
    system: numeric;
    symbols: '\1C50' '\1C51' '\1C52' '\1C53' '\1C54' '\1C55' '\1C56' '\1C57' '\1C58' '\1C59';
    /* symbols: '᱐' '᱑' '᱒' '᱓' '᱔' '᱕' '᱖' '᱗' '᱘' '᱙'; */
}

/* Oriya */
@counter-style oriya {
    system: numeric;
    symbols: '\B66' '\B67' '\B68' '\B69' '\B6A' '\B6B' '\B6C' '\B6D' '\B6E' '\B6F';
    /* symbols: '୦' '୧' '୨' '୩' '୪' '୫' '୬' '୭' '୮' '୯'; */
}

/* Tamil */
@counter-style ancient-tamil {
    system: additive;
    range: 1 9999;
    additive-symbols: 9000 '\BEF\BF2', 8000 '\BEE\BF2', 7000 '\BED\BF2', 6000 '\BEC\BF2', 5000 '\BEB\BF2', 4000 '\BEA\BF2', 3000 '\BE9\BF2', 2000 '\BE8\BF2', 1000 '\BF2', 900 '\BEF\BF1', 800 '\BEE\BF1', 700 '\BED\BF1', 600 '\BEC\BF1', 500 '\BEB\BF1', 400 '\BEA\BF1', 300 '\BE9\BF1', 200 '\BE8\BF1', 100 '\BF1', 90 '\BEF\BF0', 80 '\BEE\BF0', 70 '\BED\BF0', 60 '\BEC\BF0', 50 '\BEB\BF0', 40 '\BEA\BF0', 30 '\BE9\BF0', 20 '\BE8\BF0', 10 '\BF0', 9 '\BEF', 8 '\BEE', 7 '\BED', 6 '\BEC', 5 '\BEB', 4 '\BEA', 3 '\BE9', 2 '\BE8', 1 '\BE7';
    /* additive-symbols: 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 tamil {
    system: numeric;
    symbols: '\BE6' '\BE7' '\BE8' '\BE9' '\BEA' '\BEB' '\BEC' '\BED' '\BEE' '\BEF';
    /* symbols: '௦' '௧' '௨' '௩' '௪' '௫' '௬' '௭' '௮' '௯'; */
}

/* Telugu */
@counter-style telugu {
    system: numeric;
    symbols: '\C66' '\C67' '\C68' '\C69' '\C6A' '\C6B' '\C6C' '\C6D' '\C6E' '\C6F';
    /* symbols: '౦' '౧' '౨' '౩' '౪' '౫' '౬' '౭' '౮' '౯'; */
}

/* Thai */
@counter-style thai {
    system: numeric;
    symbols: '\E50' '\E51' '\E52' '\E53' '\E54' '\E55' '\E56' '\E57' '\E58' '\E59';
    /* symbols: '๐' '๑' '๒' '๓' '๔' '๕' '๖' '๗' '๘' '๙'; */
}

@counter-style thai-alphabetic {
    system: alphabetic;
    symbols: '\E01' '\E02' '\E04' '\E07' '\E08' '\E09' '\E0A' '\E0B' '\E0C' '\E0D' '\E0E' '\E0F' '\E10' '\E11' '\E12' '\E13' '\E14' '\E15' '\E16' '\E17' '\E18' '\E19' '\E1A' '\E1B' '\E1C' '\E1D' '\E1E' '\E1F' '\E20' '\E21' '\E22' '\E23' '\E25' '\E27' '\E28' '\E29' '\E2A' '\E2B' '\E2C' '\E2D' '\E2E';
    /* symbols: 'ก' 'ข' 'ค' 'ง' 'จ' 'ฉ' 'ช' 'ซ' 'ฌ' 'ญ' 'ฎ' 'ฏ' 'ฐ' 'ฑ' 'ฒ' 'ณ' 'ด' 'ต' 'ถ' 'ท' 'ธ' 'น' 'บ' 'ป' 'ผ' 'ฝ' 'พ' 'ฟ' 'ภ' 'ม' 'ย' 'ร' 'ล' 'ว' 'ศ' 'ษ' 'ส' 'ห' 'ฬ' 'อ' 'ฮ'; */
}

/* Tibetan */
@counter-style tibetan {
    system: numeric;
    symbols: '\F20' '\F21' '\F22' '\F23' '\F24' '\F25' '\F26' '\F27' '\F28' '\F29';
    /* symbols: '༠' '༡' '༢' '༣' '༤' '༥' '༦' '༧' '༨' '༩'; */
}

/* European Digits, Roman, etc. */
@counter-style binary {
    system: numeric;
    symbols: '\30' '\31';
    /* symbols: '0' '1'; */
}

@counter-style tally-mark {
    system: additive;
    additive-symbols: 5 '\1D378', 1 '\1D377';
    /* symbols: 5 𝍸, 1 𝍷; */
    suffix: ' ';
}

@counter-style circled-decimal {
    system: fixed 0;
    symbols: '\24EA' '\2460' '\2461' '\2462' '\2463' '\2464' '\2465' '\2466' '\2467' '\2468' '\2469' '\246A' '\246B' '\246C' '\246D' '\246E' '\246F' '\2470' '\2471' '\2472' '\2473' '\3251' '\3252' '\3253' '\3254' '\3255' '\3256' '\3257' '\3258' '\3259' '\325a' '\325b' '\325c' '\325d' '\325e' '\325f' '\32b1' '\32b2' '\32b3' '\32b4' '\32b5' '\32b6' '\32b7' '\32b8' '\32b9' '\32ba' '\32bb' '\32bc' '\32bd' '\32be' '\32bf';
    /* symbols: '⓪' '①' '②' '③' '④' '⑤' '⑥' '⑦' '⑧' '⑨' '⑩' '⑪' '⑫' '⑬' '⑭' '⑮' '⑯' '⑰' '⑱' '⑲' '⑳' '㉑' '㉒' '㉓' '㉔' '㉕' '㉖' '㉗' '㉘' '㉙' '㉚' '㉛' '㉜' '㉝' '㉞' '㉟' '㊱' '㊲' '㊳' '㊴' '㊵' '㊶' '㊷' '㊸' '㊹' '㊺' '㊻' '㊼' '㊽' '㊾' '㊿'; */
    suffix: ' ';
}

@counter-style circled-lower-latin {
    system: fixed;
    symbols: '\24D0' '\24D1' '\24D2' '\24D3' '\24D4' '\24D5' '\24D6' '\24D7' '\24D8' '\24D9' '\24DA' '\24DB' '\24DC' '\24DD' '\24DE' '\24DF' '\24E0' '\24E1' '\24E2' '\24E3' '\24E4' '\24E5' '\24E6' '\24E7' '\24E8' '\24E9';
    /* symbols: 'ⓐ' 'ⓑ' 'ⓒ' 'ⓓ' 'ⓔ' 'ⓕ' 'ⓖ' 'ⓗ' 'ⓘ' 'ⓙ' 'ⓚ' 'ⓛ' 'ⓜ' 'ⓝ' 'ⓞ' 'ⓟ' 'ⓠ' 'ⓡ' 'ⓢ' 'ⓣ' 'ⓤ' 'ⓥ' 'ⓦ' 'ⓧ' 'ⓨ' 'ⓩ'; */
    suffix: ' ';
}

@counter-style circled-upper-latin {
    system: fixed;
    symbols: '\24B6' '\24B7' '\24B8' '\24B9' '\24BA' '\24BB' '\24BC' '\24BD' '\24BE' '\24BF' '\24C0' '\24C1' '\24C2' '\24C3' '\24C4' '\24C5' '\24C6' '\24C7' '\24C8' '\24C9' '\24CA' '\24CB' '\24CC' '\24CD' '\24CE' '\24CF';
    /* symbols: 'Ⓐ' 'Ⓑ' 'Ⓒ' 'Ⓓ' 'Ⓔ' 'Ⓕ' 'Ⓖ' 'Ⓗ' 'Ⓘ' 'Ⓙ' 'Ⓚ' 'Ⓛ' 'Ⓜ' 'Ⓝ' 'Ⓞ' 'Ⓟ' 'Ⓠ' 'Ⓡ' 'Ⓢ' 'Ⓣ' 'Ⓤ' 'Ⓥ' 'Ⓦ' 'Ⓧ' 'Ⓨ' 'Ⓩ'; */
    suffix: ' ';
}

@counter-style decimal {
    system: numeric;
    symbols: '\30' '\31' '\32' '\33' '\34' '\35' '\36' '\37' '\38' '\39';
    /* symbols: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9'; */
}

@counter-style decimal-leading-zero {
    system: fixed -9;
    symbols: '\2D\30\39' '\2D\30\38' '\2D\30\37' '\2D\30\36' '\2D\30\35' '\2D\30\34' '\2D\30\33' '\2D\30\32' '\2D\30\31' '\30\30' '\30\31' '\30\32' '\30\33' '\30\34' '\30\35' '\30\36' '\30\37' '\30\38' '\30\39';
    /* symbols: '-09' '-08' '-07' '-06' '-05' '-04' '-03' '-02' '-01' '00' '01' '02' '03' '04' '05' '06' '07' '08' '09'; */
}

@counter-style dotted-decimal {
    system: fixed;
    symbols: '\2488' '\2489' '\248A' '\248B' '\248C' '\248D' '\248E' '\248F' '\2490' '\2491' '\2492' '\2493' '\2494' '\2495' '\2496' '\2497' '\2498' '\2499' '\249A' '\249B';
    /* symbols: '⒈' '⒉' '⒊' '⒋' '⒌' '⒍' '⒎' '⒏' '⒐' '⒑' '⒒' '⒓' '⒔' '⒕' '⒖' '⒗' '⒘' '⒙' '⒚' '⒛'; */
    suffix: ' ';
}

@counter-style double-circled-decimal {
    system: fixed;
    symbols: '\24F5' '\24F6' '\24F7' '\24F8' '\24F9' '\24FA' '\24FB' '\24FC' '\24FD' '\24FE';
    /* symbols: '⓵' '⓶' '⓷' '⓸' '⓹' '⓺' '⓻' '⓼' '⓽' '⓾'; */
    suffix: ' ';
}

@counter-style filled-circled-decimal {
    system: fixed;
    symbols: '\2776' '\2777' '\2778' '\2779' '\277a' '\277b' '\277c' '\277d' '\277e' '\277f' '\24EB' '\24EC' '\24ED' '\24EE' '\24EF' '\24F0' '\24F1' '\24F2' '\24F3' '\24F4';
    /* symbols: '❶' '❷' '❸' '❹' '❺' '❻' '❼' '❽' '❾' '❿' '⓫' '⓬' '⓭' '⓮' '⓯' '⓰' '⓱' '⓲' '⓳' '⓴'; */
    suffix: ' ';
}

@counter-style fullwidth-decimal {
    system: numeric;
    symbols: '\FF10' '\FF11' '\FF12' '\FF13' '\FF14' '\FF15' '\FF16' '\FF17' '\FF18' '\FF19';
    /* symbols: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9'; */
    suffix: '\FF0E';
    /* symbols: '.'; */
}

@counter-style fullwidth-lower-roman {
    system: fixed;
    symbols: '\2170' '\2171' '\2172' '\2173' '\2174' '\2175' '\2176' '\2177' '\2178' '\2179' '\217A' '\217B';
    /* symbols: 'ⅰ' 'ⅱ' 'ⅲ' 'ⅳ' 'ⅴ' 'ⅵ' 'ⅶ' 'ⅷ' 'ⅸ' 'ⅹ' 'ⅺ' 'ⅻ'; */
    suffix: ' ';
}

@counter-style fullwidth-upper-roman {
    system: fixed;
    symbols: '\2160' '\2161' '\2162' '\2163' '\2164' '\2165' '\2166' '\2167' '\2168' '\2169' '\216A' '\216B';
    /* symbols: 'Ⅰ' 'Ⅱ' 'Ⅲ' 'Ⅳ' 'Ⅴ' 'Ⅵ' 'Ⅶ' 'Ⅷ' 'Ⅸ' 'Ⅹ' 'Ⅺ' 'Ⅻ'; */
    suffix: ' ';
}

@counter-style lower-hexadecimal {
    system: numeric;
    symbols: '\30' '\31' '\32' '\33' '\34' '\35' '\36' '\37' '\38' '\39' '\61' '\62' '\63' '\64' '\65' '\66';
    /* symbols: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' 'a' 'b' 'c' 'd' 'e' 'f'; */
}

@counter-style lower-roman {
    system: additive;
    range: 1 3999;
    additive-symbols: 1000 '\6D', 900 '\63\6D', 500 '\64', 400 '\63\64', 100 '\63', 90 '\78\63', 50 '\6C', 40 '\78\6C', 10 '\78', 9 '\69\78', 5 '\76', 4 '\69\76', 1 '\69';
    /* 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 new-base-60 {
    system: numeric;
    symbols: '\30' '\31' '\32' '\33' '\34' '\35' '\36' '\37' '\38' '\39' '\41' '\42' '\43' '\44' '\45' '\46' '\47' '\48' '\4A' '\4B' '\4C' '\4D' '\4E' '\50' '\51' '\52' '\53' '\54' '\55' '\56' '\57' '\58' '\59' '\5A' '\5F' '\61' '\62' '\63' '\64' '\65' '\66' '\67' '\68' '\69' '\6A' '\6B' '\6D' '\6E' '\6F' '\70' '\71' '\72' '\73' '\74' '\75' '\76' '\77' '\78' '\79' '\7A';
    /* symbols: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' 'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'J' 'K' 'L' 'M' 'N' 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z' '_' 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z'; */
}

@counter-style octal {
    system: numeric;
    symbols: '\30' '\31' '\32' '\33' '\34' '\35' '\36' '\37';
    /* symbols: '0' '1' '2' '3' '4' '5' '6' '7'; */
}

@counter-style parenthesized-decimal {
    system: fixed;
    symbols: '\2474' '\2475' '\2476' '\2477' '\2478' '\2479' '\247A' '\247B' '\247C' '\247D' '\247E' '\247F' '\2480' '\2481' '\2482' '\2483' '\2484' '\2485' '\2486' '\2487';
    /* symbols: '⑴' '⑵' '⑶' '⑷' '⑸' '⑹' '⑺' '⑻' '⑼' '⑽' '⑾' '⑿' '⒀' '⒁' '⒂' '⒃' '⒄' '⒅' '⒆' '⒇'; */
    suffix: ' ';
}

@counter-style simple-lower-roman {
    system: additive;
    range: 1 4999;
    additive-symbols: 1000 '\6D', 500 '\64', 100 '\63', 50 '\6C', 10 '\78', 5 '\76', 1 '\69';
    /* additive-symbols: 1000 'm', 500 'd', 100 'c', 50 'l', 10 'x', 5 'v', 1 'i'; */
}

@counter-style simple-upper-roman {
    system: additive;
    range: 1 4999;
    additive-symbols: 1000 '\4D', 500 '\44', 100 '\43', 50 '\4C', 10 '\58', 5 '\56', 1 '\49';
    /* additive-symbols: 1000 'M', 500 'D', 100 'C', 50 'L', 10 'X', 5 'V', 1 'I'; */
}

@counter-style super-decimal {
    system: numeric;
    symbols: '\2070' '\B9' '\B2' '\B3' '\2074' '\2075' '\2076' '\2077' '\2078' '\2079';
    /* symbols: '⁰' '¹' '²' '³' '⁴' '⁵' '⁶' '⁷' '⁸' '⁹'; */
}

@counter-style upper-hexadecimal {
    system: numeric;
    symbols: '\30' '\31' '\32' '\33' '\34' '\35' '\36' '\37' '\38' '\39' '\41' '\42' '\43' '\44' '\45' '\46';
    /* symbols: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' 'A' 'B' 'C' 'D' 'E' 'F'; */
}

@counter-style upper-roman {
    system: additive;
    range: 1 3999;
    additive-symbols: 1000 '\4D', 900 '\43\4D', 500 '\44', 400 '\43\44', 100 '\43', 90 '\58\43', 50 '\4C', 40 '\58\4C', 10 '\58', 9 '\49\58', 5 '\56', 4 '\49\56', 1 '\49';
    /* 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'; */
}