unicode_blocks/
cjk.rs

1use crate::{unicode_block::UnicodeBlock, unicode_blocks::*};
2
3const CJK_BLOCKS: [UnicodeBlock; 33] = [
4    CJK_UNIFIED_IDEOGRAPHS,
5    CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A,
6    CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B,
7    CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C,
8    CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D,
9    CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E,
10    CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F,
11    CJK_UNIFIED_IDEOGRAPHS_EXTENSION_G,
12    CJK_UNIFIED_IDEOGRAPHS_EXTENSION_H,
13    CJK_UNIFIED_IDEOGRAPHS_EXTENSION_I,
14    CJK_COMPATIBILITY,
15    CJK_COMPATIBILITY_FORMS,
16    CJK_COMPATIBILITY_IDEOGRAPHS,
17    CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT,
18    CJK_RADICALS_SUPPLEMENT, // 補充康熙部首不足的部份
19    CJK_STROKES,
20    CJK_SYMBOLS_AND_PUNCTUATION,
21    HIRAGANA,
22    KATAKANA,
23    KATAKANA_PHONETIC_EXTENSIONS,
24    KANA_EXTENDED_A,
25    KANA_EXTENDED_B,
26    KANA_SUPPLEMENT,
27    HANGUL_JAMO,
28    HANGUL_COMPATIBILITY_JAMO,
29    HANGUL_JAMO_EXTENDED_A,
30    HANGUL_JAMO_EXTENDED_B,
31    HANGUL_SYLLABLES,
32    HALFWIDTH_AND_FULLWIDTH_FORMS,      // !, ,, 6, @, Z, ヤ
33    ENCLOSED_CJK_LETTERS_AND_MONTHS,    // ㈠, ㋀
34    ENCLOSED_IDEOGRAPHIC_SUPPLEMENT,    // 🈲, 🈧
35    KANGXI_RADICALS,                    // 康熙部首
36    IDEOGRAPHIC_DESCRIPTION_CHARACTERS, // ⿰, ⿸
37];
38
39/// Given a character, determine whether it is used in CJK.
40#[inline]
41pub fn is_cjk(c: char) -> bool {
42    for b in CJK_BLOCKS.iter() {
43        if b.contains(c) {
44            return true;
45        }
46    }
47
48    false
49}
50
51/// Given a `UnicodeBlock`, determine whether it is used in CJK.
52#[inline]
53pub fn is_cjk_block(unicode_block: UnicodeBlock) -> bool {
54    for b in CJK_BLOCKS.iter().copied() {
55        if unicode_block == b {
56            return true;
57        }
58    }
59
60    false
61}