Crate nominals

Source
Expand description

nominals is considered alpha crate version Documentation for v0.3.1

This type of formatting can be used for list identifiers when creating ordered lists similar to HTML’s <ol> tag. The crate was written to power the List widget in Cushy.

This crate’s original implementation was inspired by Typst’s implementation of list numbering. However, this crate is a fresh implementation with newly-written implementations and types.

use nominals::{Decimal, DigitCollection, Error, LetterLower, Nominal};

fn main() {
    // Formatting a nominal is as easy as calling to_nominal with the desired
    // nominal system.
    assert_eq!(0_u32.to_nominal(&Decimal), "0");
    // By default, alphabet systems treat their first symbol as 0 in the ones
    // place, but treat the first symbol as 1 in every other digit place.
    assert_eq!(0_u32.to_nominal(&LetterLower), "a");
    assert_eq!(1_u32.to_nominal(&LetterLower), "b");
    assert_eq!(26_u32.to_nominal(&LetterLower), "aa");

    // This behavior can be changed by using the one_based helper:
    assert_eq!(1_u32.to_nominal(&LetterLower.one_based()), "a");
    assert_eq!(2_u32.to_nominal(&LetterLower.one_based()), "b");
    assert_eq!(27_u32.to_nominal(&LetterLower.one_based()), "aa");
    // When a nominal can't be formatted with `to_nominal`, it falls back to
    // Decimal.
    assert_eq!(0_u32.to_nominal(&LetterLower.one_based()), "0");
    assert_eq!(
        0_u32.try_to_nominal(&LetterLower.one_based()).unwrap_err(),
        Error::NoZeroSymbol
    );
}

§no_std support

This crate is no_std compatible, and can operate both with and without alloc.

§Supported Systems

  • Decimal: 0‎ 1‎ 2‎ 3‎ 4‎ …‎ 9‎ 10‎ 11‎ 12‎ …‎ 99‎ 100‎ 101‎ 102
  • LetterLower: a‎ b‎ c‎ d‎ e‎ …‎ z‎ aa‎ ab‎ ac‎ …‎ yz‎ za‎ zb‎ zc
  • LetterUpper: A‎ B‎ C‎ D‎ E‎ …‎ Z‎ AA‎ AB‎ AC‎ …‎ YZ‎ ZA‎ ZB‎ ZC
  • RomanLower: i‎ ii‎ iii‎ iv‎ v‎ vi‎ …‎ ix‎ x‎ xi‎ …‎ mmmcmxcix‎ i̅v̅‎ i̅v̅i‎ …‎ d̅m̅l̅c̅i̅x̅cmxcix‎ m̅‎ m̅i
  • RomanUpper: I‎ II‎ III‎ IV‎ V‎ VI‎ …‎ IX‎ X‎ XI‎ …‎ MMMCMXCIX‎ I̅V̅‎ I̅V̅I‎ …‎ D̅M̅L̅C̅I̅X̅CMXCIX‎ M̅‎ M̅I
  • CircledNumber: ⓪‎ ①‎ ②‎ ③‎ ④‎ …‎ ⑨‎ ⑩‎ ⑪‎ ⑫‎ …‎ ㊽‎ ㊾‎ ㊿
  • DoubleCircledNumber: ⓵‎ ⓶‎ ⓷‎ ⓸‎ ⓹‎ ⓺‎ ⓻‎ ⓼‎ ⓽‎ ⓾
  • ArmenianLower: ա‎ բ‎ գ‎ …‎ թ‎ ժ‎ ժա‎ ժբ‎ …‎ ղթ‎ ճ‎ ճա
  • ArmenianUpper: Ա ‎ Բ‎ Գ‎ …‎ Թ‎ Ժ‎ ԺԱ ‎ ԺԲ‎ …‎ ՂԹ‎ Ճ‎ ՃԱ
  • Bengali: ০‎ ১‎ ২‎ ৩‎ ৪‎ …‎ ৯‎ ১০‎ ১১‎ ১২‎ …‎ ৯৯‎ ১০০‎ ১০১‎ ১০২
  • Cambodian: ០‎ ១‎ ២‎ ៣‎ ៤‎ …‎ ៩‎ ១០‎ ១១‎ ១២‎ …‎ ៩៩‎ ១០០‎ ១០១‎ ១០២
  • SimplifiedChineseInformal: 零‎ 一‎ 二‎ …‎ 九‎ 十‎ 十一‎ …‎ 十九‎ 二十‎ 二十一‎ …‎ 九十九‎ 一百‎ 一百零一
  • TraditionalChineseInformal: 零‎ 一‎ 二‎ …‎ 九‎ 十‎ 十一‎ …‎ 十九‎ 二十‎ 二十一‎ …‎ 九十九‎ 一百‎ 一百零一
  • SimplifiedChineseFormal: 零‎ 一‎ 二‎ …‎ 九‎ 一十‎ 一十一‎ …‎ 一十九‎ 二十‎ 二十一‎ …‎ 九十九‎ 一百‎ 一百零一
  • TraditionalChineseFormal: 零‎ 一‎ 二‎ …‎ 九‎ 一十‎ 一十一‎ …‎ 一十九‎ 二十‎ 二十一‎ …‎ 九十九‎ 一百‎ 一百零一
  • CjkDecimal: 〇‎ 一‎ 二‎ 三‎ 四‎ …‎ 九‎ 一〇‎ 一一‎ 一二‎ …‎ 九九‎ 一〇〇‎ 一〇一‎ 一〇二
  • CjkEarthlyBranch: 子‎ 丑‎ 寅‎ 卯‎ 辰‎ …‎ 亥‎ 一三‎ 一四‎ 一五‎ …‎ 一四四‎ 一四五‎ 一四六‎ 一四七
  • CjkHeavenlyStem: 甲‎ 乙‎ 丙‎ 丁‎ 戊‎ …‎ 癸‎ 一一‎ 一二‎ 一三‎ …‎ 一〇〇‎ 一〇一‎ 一〇二‎ 一〇三
  • Devanagari: ०‎ १‎ २‎ ३‎ ४‎ …‎ ९‎ १०‎ ११‎ १२‎ …‎ ९९‎ १००‎ १०१‎ १०२
  • EasternArabic: ٠‎ ١‎ ٢‎ ٣‎ ٤‎ …‎ ٩‎ ١٠‎ ١١‎ ١٢‎ …‎ ٩٩‎ ١٠٠‎ ١٠١‎ ١٠٢
  • Ethiopic: ፩‎ ፪‎ ፫‎ …‎ ፲‎ ፲፩‎ ፲፪‎ …‎ ፺፱‎ ፻‎ ፻፩‎ …‎ ፱፻፺፱‎ ፲፻‎ ፲፻፩
  • Georgian: ა‎ ბ‎ გ‎ …‎ თ‎ ი‎ ია‎ იბ‎ …‎ ჟთ‎ რ‎ რა
  • GreekLower: α‎ β‎ γ‎ δ‎ ε‎ …‎ ω‎ αα‎ αβ‎ αγ‎ …‎ ψω‎ ωα‎ ωβ‎ ωγ
  • GreekUpper: Α‎ Β‎ Γ‎ Δ‎ Ε‎ …‎ Ω‎ ΑΑ‎ ΑΒ‎ ΑΓ‎ …‎ ΨΩ‎ ΩΑ‎ ΩΒ‎ ΩΓ
  • Gujarati: ૦‎ ૧‎ ૨‎ ૩‎ ૪‎ …‎ ૯‎ ૧૦‎ ૧૧‎ ૧૨‎ …‎ ૯૯‎ ૧૦૦‎ ૧૦૧‎ ૧૦૨
  • Gurmukhi: ੦‎ ੧‎ ੨‎ ੩‎ ੪‎ …‎ ੯‎ ੧੦‎ ੧੧‎ ੧੨‎ …‎ ੯੯‎ ੧੦੦‎ ੧੦੧‎ ੧੦੨
  • HanjaInformal: 零‎ 一‎ 二‎ …‎ 九‎ 十‎ 十一‎ …‎ 十九‎ 二十‎ 二十一‎ …‎ 九十九‎ 百‎ 百一
  • HangeulFormal: 영‎ 일‎ 이‎ …‎ 구‎ 일십‎ 일십일‎ …‎ 일십구‎ 이십‎ 이십일‎ …‎ 구십구‎ 일백‎ 일백일
  • HangeulJamo: ㄱ‎ ㄴ‎ ㄷ‎ ㄹ‎ ㅁ‎ …‎ ㅎ‎ ㄱㄱ‎ ㄱㄴ‎ ㄱㄷ‎ …‎ ㅍㅎ‎ ㅎㄱ‎ ㅎㄴ‎ ㅎㄷ
  • HangeulSyllable: 가‎ 나‎ 다‎ 라‎ 마‎ …‎ 하‎ 가가‎ 가나‎ 가다‎ …‎ 파하‎ 하가‎ 하나‎ 하다
  • HanjaFormal: 零‎ 壹‎ 貳‎ …‎ 九‎ 壹拾‎ 壹拾壹‎ …‎ 壹拾九‎ 貳拾‎ 貳拾壹‎ …‎ 九拾九‎ 壹百‎ 壹百壹
  • Hebrew: ׳א״‎ ׳ב״‎ ׳ג״‎ …‎ ׳ט״‎ ׳י״‎ …‎ יג‎ יד‎ ט״ו‎ ט״ז‎ יז‎ …‎ שצו‎ שצז‎ שצח‎ שצט‎ ׳ת״
  • HexLower: 0‎ 1‎ 2‎ 3‎ 4‎ …‎ f‎ 10‎ 11‎ 12‎ …‎ ff‎ 100‎ 101‎ 102
  • HexUpper: 0‎ 1‎ 2‎ 3‎ 4‎ …‎ F‎ 10‎ 11‎ 12‎ …‎ FF‎ 100‎ 101‎ 102
  • Hiragana: あ‎ い‎ う‎ え‎ お‎ …‎ ん‎ ああ‎ あい‎ あう‎ …‎ をん‎ んあ‎ んい‎ んう
  • HiraganaIroha: い‎ ろ‎ は‎ に‎ ほ‎ …‎ す‎ いい‎ いろ‎ いは‎ …‎ せす‎ すい‎ すろ‎ すは
  • JapaneseFormal: 零‎ 壱‎ 弐‎ …‎ 九‎ 壱拾‎ 壱拾壱‎ …‎ 壱拾九‎ 弐拾‎ 弐拾壱‎ …‎ 九拾九‎ 壱百‎ 壱百壱
  • JapaneseInformal: 〇‎ 一‎ 二‎ …‎ 九‎ 十‎ 十一‎ …‎ 十九‎ 二十‎ 二十一‎ …‎ 九十九‎ 百‎ 百一
  • Kannada: ೦‎ ೧‎ ೨‎ ೩‎ ೪‎ …‎ ೯‎ ೧೦‎ ೧೧‎ ೧೨‎ …‎ ೯೯‎ ೧೦೦‎ ೧೦೧‎ ೧೦೨
  • Katakana: ア‎ イ‎ ウ‎ エ‎ オ‎ …‎ ン‎ アア‎ アイ‎ アウ‎ …‎ ヲン‎ ンア‎ ンイ‎ ンウ
  • KatakanaIroha: イ‎ ロ‎ ハ‎ ニ‎ ホ‎ …‎ ス‎ イイ‎ イロ‎ イハ‎ …‎ セス‎ スイ‎ スロ‎ スハ
  • Lao: ໐‎ ໑‎ ໒‎ ໓‎ ໔‎ …‎ ໙‎ ໑໐‎ ໑໑‎ ໑໒‎ …‎ ໙໙‎ ໑໐໐‎ ໑໐໑‎ ໑໐໒
  • Malayalam: ൦‎ ൧‎ ൨‎ ൩‎ ൪‎ …‎ ൯‎ ൧൦‎ ൧൧‎ ൧൨‎ …‎ ൯൯‎ ൧൦൦‎ ൧൦൧‎ ൧൦൨
  • Mongolian: ᠐‎ ᠑‎ ᠒‎ ᠓‎ ᠔‎ …‎ ᠙‎ ᠑᠐‎ ᠑᠑‎ ᠑᠒‎ …‎ ᠙᠙‎ ᠑᠐᠐‎ ᠑᠐᠑‎ ᠑᠐᠒
  • Myanmar: ၀‎ ၁‎ ၂‎ ၃‎ ၄‎ …‎ ၉‎ ၁၀‎ ၁၁‎ ၁၂‎ …‎ ၉၉‎ ၁၀၀‎ ၁၀၁‎ ၁၀၂
  • Oriya: ୦‎ ୧‎ ୨‎ ୩‎ ୪‎ …‎ ୯‎ ୧୦‎ ୧୧‎ ୧୨‎ …‎ ୯୯‎ ୧୦୦‎ ୧୦୧‎ ୧୦୨
  • Persian: ۰‎ ۱‎ ۲‎ ۳‎ ۴‎ …‎ ۹‎ ۱۰‎ ۱۱‎ ۱۲‎ …‎ ۹۹‎ ۱۰۰‎ ۱۰۱‎ ۱۰۲
  • Tamil: ௦‎ ௧‎ ௨‎ ௩‎ ௪‎ …‎ ௯‎ ௧௦‎ ௧௧‎ ௧௨‎ …‎ ௯௯‎ ௧௦௦‎ ௧௦௧‎ ௧௦௨
  • Telugu: ౦‎ ౧‎ ౨‎ ౩‎ ౪‎ …‎ ౯‎ ౧౦‎ ౧౧‎ ౧౨‎ …‎ ౯౯‎ ౧౦౦‎ ౧౦౧‎ ౧౦౨
  • Thai: ๐‎ ๑‎ ๒‎ ๓‎ ๔‎ …‎ ๙‎ ๑๐‎ ๑๑‎ ๑๒‎ …‎ ๙๙‎ ๑๐๐‎ ๑๐๑‎ ๑๐๒
  • Tibetan: ༠‎ ༡‎ ༢‎ ༣‎ ༤‎ …‎ ༩‎ ༡༠‎ ༡༡‎ ༡༢‎ …‎ ༩༩‎ ༡༠༠‎ ༡༠༡‎ ༡༠༢

§Open-source Licenses

This project, like all projects from Khonsu Labs, is open-source. This repository is available under the MIT License or the Apache License 2.0.

To learn more about contributing, please see CONTRIBUTING.md.

Structs§

AdditiveSet
A set of additive symbols that form a NominalSystem.
ArmenianLower
Lowercase Armenian numbering.
ArmenianUpper
Uppercase Armenian numbering.
Bengali
Bengali numeric digits.
Cambodian
Cambodian numeric digits.
Chain
A combination of two DigitCollection implementations.
CircledNumber
Circled numbers, ranging from 0 to 50.
CjkDecimal
CJK Han decimal digits.
CjkEarthlyBranch
CJK Earthly Branch symbols.
CjkHeavenlyStem
CJK Heavenly Stems symbols.
Decimal
Western ASCII numeric digits.
Devanagari
Devanagari numeric digits.
DigitSet
An ordered set of characters that can be treated as digits.
DoubleCircledNumber
Doubly-circled numbers, ranging from 1 to 10.
EasternArabic
Eastern Arabic numeric digits.
EnumeratedSet
A set of enumerated symbols that form a NominalSystem.
Ethiopic
Ethiopic numerical system.
Georgian
Traditional Georgian numbering.
GreekLower
Greek lowercase alphabet.
GreekUpper
Greek uppercase alphabet.
Gujarati
Gujarati numeric digits.
Gurmukhi
Gurmukhi numeric digits.
HangeulFormal
Korean Hangeul/Hangul numbering.
HangeulJamo
Korean Hangeul/Hangul Jamo alphabet.
HangeulSyllable
Korean Hangeul/Hangul alphabet as pronounced.
HanjaFormal
Formal Korean Hanja numbering.
HanjaInformal
Informal Korean Hanja numbering.
Hebrew
Hebrew numerals.
HexLower
Hexadecimal lower ASCII characters.
HexUpper
Hexadecimal uppercase ASCII characters.
Hiragana
Japanese Hiragana Aiueo alphabet.
HiraganaIroha
Japanese Hiragana Iroha alphabet.
JapaneseFormal
Formal Japanese Kanji numbering.
JapaneseInformal
Informal Japanese Kanji numbering.
Kannada
Kannada numeric digits.
Katakana
Japanese Katakana Aiueo alphabet.
KatakanaIroha
Japanese Katakana Iroha alphabet.
Khmer
Khmer numeric digits.
Lao
Lao numeric digits.
LetterLower
ASCII lowercase characters.
LetterUpper
ASCII uppercase characters.
Malayalam
Malayalam numeric digits.
Mongolian
Mongolian numeric digits.
Myanmar
Myanmar numeric digits.
NoFallback
An empty DigitCollection that is intended to be used to indicate no fallback should be used as a DigitCollection::Fallback.
NominalString
A string that can contain most formatted nominals without a heap allocation.
OneBased
Begins counting at 1 when formatting a nominal identifier.
Oriya
Oriya numeric digits.
OutOfMemoryError
Was unable to allocate additional memory.
Persian
Persian numeric digits.
Restrict
Restricts a set of digits to a specific length.
RomanLower
Lowercase Roman numerals.
RomanUpper
Uppercase Roman numerals
SimplifiedChineseFormal
Simplified Chinese Formal numerical system.
SimplifiedChineseInformal
Simplified Chinese Informal numerical system.
Tamil
Tamil numeric digits.
Telugu
Telugu numeric digits.
Thai
Thai numeric digits.
Tibetan
Tibetan numeric digits.
TraditionalChineseFormal
Traditional Chinese Formal numerical system.
TraditionalChineseInformal
Traditional Chinese Informal numerical system.
Urdu
Urdu numeric digits.

Enums§

Error
Error types that can arise from formatting nominals in this crate.

Traits§

DigitCollection
An ordered collection of digits that can be used as a NominalSystem.
Nominal
A type that can be formatted with a NominalSystem.
NominalSystem
A system of ordered nominal identifiers.
UnsignedInteger
An unsigned integer type.
UnwrapOrDecimal
Unwraps a result with an Error by formatting the erroring nominal in Decimal.
WithNominal
Converts a result from one error type to an Error<N>.