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, 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, ENCLOSED_CJK_LETTERS_AND_MONTHS, ENCLOSED_IDEOGRAPHIC_SUPPLEMENT, KANGXI_RADICALS, IDEOGRAPHIC_DESCRIPTION_CHARACTERS, ];
38
39#[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#[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}