///|
/// 汉字零(U+3007),对齐源库 CHINESE_LING。is_chinese 将其视为汉字。
let chinese_ling : Char = '〇'
///|
/// ChineseHelper 命名空间类型,对齐源库 ChineseHelper。所有方法为类型关联方法。
#warnings("-struct_never_constructed")
pub struct ChineseHelper {}
///|
/// 判断字符是否为汉字(CJK 统一表意文字 U+4E00-U+9FFF 或汉字零 U+3007)。
/// 对齐源库 ChineseHelper.isChinese。
pub fn ChineseHelper::is_chinese(c : Char) -> Bool {
(c >= '\u{4e00}' && c <= '\u{9fff}') || c == chinese_ling
}
///|
/// 判断字符是否为繁体汉字(在 chinese_map 中存在映射)。
/// 对齐源库 ChineseHelper.isTraditionalChinese。
pub fn ChineseHelper::is_traditional_chinese(c : Char) -> Bool {
chinese_map.contains(c.to_int())
}
///|
/// 判断字符串是否包含汉字。对齐源库 ChineseHelper.containsChinese。
pub fn ChineseHelper::contains_chinese(str : String) -> Bool {
for c in str {
if ChineseHelper::is_chinese(c) {
return true
}
}
false
}
///|
/// 繁→简转换:逐字符查 chinese_map,命中替换为简体码点,未命中原样。空串返回空串。
/// 对齐源库 ChineseHelper.convertToSimplifiedChinese。
pub fn ChineseHelper::convert_to_simplified_chinese(str : String) -> String {
let buf = StringBuilder()
for c in str {
buf.write_char(ChineseHelper::convert_char_to_simplified_chinese(c))
}
buf.to_string()
}
///|
/// 简→繁转换:逐字符遍历 chinese_map 反查值为该字符的键,命中替换为键,未命中原样。
/// 保留 O(n) 反查语义(需求 3.8 不主动优化,避免改变多映射语义)。
/// 对齐源库 ChineseHelper.convertToTraditionalChinese。
pub fn ChineseHelper::convert_to_traditional_chinese(str : String) -> String {
let buf = StringBuilder()
for c in str {
buf.write_char(ChineseHelper::convert_char_to_traditional_chinese(c))
}
buf.to_string()
}
///|
/// 追加自定义繁简映射到 chinese_map(原地合并,键冲突新值覆盖)。
/// 对齐源库 ChineseHelper.addChineseDictResource。
pub fn ChineseHelper::add_chinese_dict_resource(dict : Map[Int, Int]) -> Unit {
for k, v in dict {
chinese_map[k] = v
}
}
///|
/// 内部方法:单字符繁→简。查 chinese_map,命中返回简体 Char,未命中返回原字符。
/// 对齐源库 convertCharToSimplifiedChinese。
fn ChineseHelper::convert_char_to_simplified_chinese(c : Char) -> Char {
match chinese_map.get(c.to_int()) {
Some(v) => v.unsafe_to_char()
None => c
}
}
///|
/// 内部方法:单字符简→繁。遍历 chinese_map 反查值为该字符的键,命中返回繁体 Char,未命中返回原字符。
/// 保留 O(n) 反查语义。对齐源库 convertCharToTraditionalChinese。
fn ChineseHelper::convert_char_to_traditional_chinese(c : Char) -> Char {
let target = c.to_int()
for k, v in chinese_map {
if v == target {
return k.unsafe_to_char()
}
}
c
}