diff options
| author | SteamedFish <69167+SteamedFish@users.noreply.github.com> | 2023-04-06 21:50:15 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-04-06 15:50:15 +0200 |
| commit | ebb995fecaa90baf000db043f4b25ec302c09000 (patch) | |
| tree | c9b6324f28df9a9f85f00cbee0ccc76b40247ebc /library | |
| parent | 4ba3b9da8046b31118b259d0a773f0528a82c6ae (diff) | |
Add Chinese numbering (#565)
Diffstat (limited to 'library')
| -rw-r--r-- | library/Cargo.toml | 1 | ||||
| -rw-r--r-- | library/src/meta/numbering.rs | 22 |
2 files changed, 22 insertions, 1 deletions
diff --git a/library/Cargo.toml b/library/Cargo.toml index 0b754dd2..15460269 100644 --- a/library/Cargo.toml +++ b/library/Cargo.toml @@ -33,3 +33,4 @@ unicode-math-class = "0.1" unicode-script = "0.5" unicode-segmentation = "1" xi-unicode = "0.3" +chinese-number = { version = "0.7", default-features = false, features = ["number-to-chinese"] } diff --git a/library/src/meta/numbering.rs b/library/src/meta/numbering.rs index aed2a9e3..f0a1c34e 100644 --- a/library/src/meta/numbering.rs +++ b/library/src/meta/numbering.rs @@ -1,5 +1,6 @@ use std::str::FromStr; +use chinese_number::{ChineseCase, ChineseCountMethod, ChineseVariant, NumberToChinese}; use ecow::EcoVec; use crate::prelude::*; @@ -214,7 +215,8 @@ impl FromStr for NumberingPattern { }; let prefix = pattern[handled..i].into(); - let case = if c.is_uppercase() { Case::Upper } else { Case::Lower }; + let case = + if c.is_uppercase() || c == '壹' { Case::Upper } else { Case::Lower }; pieces.push((prefix, kind, case)); handled = c.len_utf8() + i; } @@ -257,6 +259,7 @@ enum NumberingKind { Roman, Symbol, Hebrew, + Chinese, HiraganaIroha, KatakanaIroha, } @@ -270,6 +273,7 @@ impl NumberingKind { 'i' => NumberingKind::Roman, '*' => NumberingKind::Symbol, 'א' => NumberingKind::Hebrew, + '一' | '壹' => NumberingKind::Chinese, 'い' => NumberingKind::HiraganaIroha, 'イ' => NumberingKind::KatakanaIroha, _ => return None, @@ -284,6 +288,7 @@ impl NumberingKind { Self::Roman => 'i', Self::Symbol => '*', Self::Hebrew => 'א', + Self::Chinese => '一', Self::HiraganaIroha => 'い', Self::KatakanaIroha => 'イ', } @@ -432,6 +437,21 @@ impl NumberingKind { } fmt } + Self::Chinese => { + let chinesecase = match case { + Case::Lower => ChineseCase::Lower, + Case::Upper => ChineseCase::Upper, + }; + + match (n as u8).to_chinese( + ChineseVariant::Simple, + chinesecase, + ChineseCountMethod::TenThousand, + ) { + Ok(chinesestring) => EcoString::from(chinesestring), + Err(_) => '-'.into(), + } + } } } } |
