summaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
authorWenzhuo Liu <mgt@oi-wiki.org>2024-05-06 22:09:35 +0800
committerGitHub <noreply@github.com>2024-05-06 14:09:35 +0000
commitf120932bcdc29af318ff641b42c8c13e3f8ac2ae (patch)
tree6b09c1477f70577e5f3cfe461adac0d36f4f31e0 /crates
parentc4c53ab52ead548427d66963585b9fa596e85308 (diff)
Add support for circled number numbering (#4049)
Diffstat (limited to 'crates')
-rw-r--r--crates/typst/src/model/numbering.rs26
1 files changed, 25 insertions, 1 deletions
diff --git a/crates/typst/src/model/numbering.rs b/crates/typst/src/model/numbering.rs
index 7cfdf98b..b3b492e1 100644
--- a/crates/typst/src/model/numbering.rs
+++ b/crates/typst/src/model/numbering.rs
@@ -124,7 +124,7 @@ cast! {
/// How to turn a number into text.
///
/// A pattern consists of a prefix, followed by one of
-/// `1`, `a`, `A`, `i`, `I`, `一`, `壹`, `あ`, `い`, `ア`, `イ`, `א`, `가`, `ㄱ`, or `*`,
+/// `1`, `a`, `A`, `i`, `I`, `一`, `壹`, `あ`, `い`, `ア`, `イ`, `א`, `가`, `ㄱ`, `*`, `①`, or `⓵`,
/// and then a suffix.
///
/// Examples of valid patterns:
@@ -280,6 +280,10 @@ pub enum NumberingKind {
EasternArabic,
/// The variant of Eastern Arabic numerals used in Persian and Urdu.
EasternArabicPersian,
+ /// Circled numbers (①, ②, ③, etc.), up to 50.
+ CircledNumber,
+ /// Double-circled numbers (⓵, ⓶, ⓷, etc.), up to 10.
+ DoubleCircledNumber,
}
impl NumberingKind {
@@ -300,6 +304,8 @@ impl NumberingKind {
'가' => NumberingKind::KoreanSyllable,
'\u{0661}' => NumberingKind::EasternArabic,
'\u{06F1}' => NumberingKind::EasternArabicPersian,
+ '①' => NumberingKind::CircledNumber,
+ '⓵' => NumberingKind::DoubleCircledNumber,
_ => return None,
})
}
@@ -322,6 +328,8 @@ impl NumberingKind {
Self::KoreanSyllable => '가',
Self::EasternArabic => '\u{0661}',
Self::EasternArabicPersian => '\u{06F1}',
+ Self::CircledNumber => '①',
+ Self::DoubleCircledNumber => '⓵',
}
}
@@ -531,6 +539,22 @@ impl NumberingKind {
),
Self::EasternArabic => decimal('\u{0660}', n),
Self::EasternArabicPersian => decimal('\u{06F0}', n),
+ Self::CircledNumber => zeroless::<50>(
+ |x| {
+ [
+ '①', '②', '③', '④', '⑤', '⑥', '⑦', '⑧', '⑨', '⑩', '⑪', '⑫', '⑬',
+ '⑭', '⑮', '⑯', '⑰', '⑱', '⑲', '⑳', '㉑', '㉒', '㉓', '㉔', '㉕',
+ '㉖', '㉗', '㉘', '㉙', '㉚', '㉛', '㉜', '㉝', '㉞', '㉟', '㊱',
+ '㊲', '㊳', '㊴', '㊵', '㊶', '㊷', '㊸', '㊹', '㊺', '㊻', '㊼',
+ '㊽', '㊾', '㊿',
+ ][x]
+ },
+ n,
+ ),
+ Self::DoubleCircledNumber => zeroless::<10>(
+ |x| ['⓵', '⓶', '⓷', '⓸', '⓹', '⓺', '⓻', '⓼', '⓽', '⓾'][x],
+ n,
+ ),
}
}
}