1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/// Unicode Version used by this build (auto-synced).
/// auto-updated: 2025-05-27
pub const UNICODE_VERSION: = ;
/// ⚠️ Deprecated: `DOUBLE_WIDTH_BLOCKS` is a static Unicode block-based heuristic.
///
/// This was originally used to determine whether a character belongs to a wide-width
/// Unicode range, such as CJK Unified Ideographs or fullwidth variants. However, this
/// approach is imprecise and not recommended for production use.
///
/// ### Drawbacks:
/// - Too coarse-grained (e.g., `0x3040–0x30FF` includes non-kana symbols)
/// - Poor alignment with real terminal rendering behaviors
/// - Not synchronized with Unicode updates (ranges are hardcoded)
///
/// ### Recommended Replacement:
/// ✅ Use modular per-category functions instead, such as:
/// - [`rules::cjk::is_cjk`]
/// - [`rules::kana::is_kana`]
/// - [`rules::hangul::is_hangul`] etc.
///
/// These offer better maintainability, precision, and extensibility.
pub const DOUBLE_WIDTH_BLOCKS: & = &;
/// ⚠️ Deprecated: `EMOJI_RANGES` is a static heuristic and no longer recommended.
///
/// This table was originally used to roughly detect emoji via Unicode ranges, such as:
/// - (0x1F600–0x1F64F) for faces
/// - (0x1F680–0x1F6FF) for transport icons
///
/// ### Limitations:
/// - ❌ Does not support composite emoji (e.g., `👩💻`, `🧑🏿🦲`)
/// - ❌ Cannot match ZWJ sequences, skin tone modifiers, or regional flags
/// - ❌ Does not auto-update with new Unicode emoji releases
///
/// ### Recommended Replacement:
/// ✅ Use [`rules::emoji::is_emoji`] instead. It supports all fully-qualified emoji,
/// including ZWJ and variation sequences, with proper Unicode compliance.
///
/// ### Compatibility Use:
/// - ✅ Can be used for fast pre-filtering or fallback indexing
/// - ❌ Should **not** be used for terminal display width calculations
pub const EMOJI_RANGES: & = &;