/**
 * Normalize chinese characters
 *
 * @See https://ctext.org/faq/normalization
 */
export const normalizeChinese = (input: string): string => {
  let converted = '';
  for (const ch of input) {
    converted += CONVERSION_TABLE.get(ch) ?? ch;
  }
  return converted;
};

// Conversion data listed on https://ctext.org/faq/normalization
const CONVERSION_TABLE: Map<string, string> = new Map([
  // assumed to be sorted
  ['‧', '·'],
  ['⺋', '㔾'],
  ['⺖', '忄'],
  ['⺘', '扌'],
  ['⺞', '歺'],
  ['⺡', '氵'],
  ['⺣', '灬'],
  ['⺤', '爫'],
  ['⺨', '犭'],
  ['⺩', '𤣩'],
  ['⺫', '罒'],
  ['⺭', '礻'],
  ['⺮', '𥫗'],
  ['⺯', '糹'],
  ['⺰', '纟'],
  ['⺲', '罒'],
  ['⺴', '⺳'],
  ['⺷', '𦍌'],
  ['⺼', '月'],
  ['⺾', '艹'],
  ['⻂', '衤'],
  ['⻃', '覀'],
  ['⻈', '讠'],
  ['⻊', '𧾷'],
  ['⻌', '辶'],
  ['⻏', '阝'],
  ['⻑', '長'],
  ['⻒', '镸'],
  ['⻔', '门'],
  ['⻖', '阝'],
  ['⻗', '雨'],
  ['⼇', '亠'],
  ['⼌', '冂'],
  ['⼍', '冖'],
  ['⼎', '冫'],
  ['⼓', '勹'],
  ['⼔', '匕'],
  ['⼛', '厶'],
  ['⼧', '宀'],
  ['⼮', '巛'],
  ['⼹', '彐'],
  ['⼺', '彡'],
  ['⽁', '攴'],
  ['⽧', '疒'],
  ['⾅', '臼'],
  ['⾆', '舌'],
  ['⾌', '虍'],
  ['⾣', '酉'],
  ['〸', '十'],
  ['ム', '厶'],
  ['㦳', '㘽'],
  ['䎛', '㖈'],
  ['内', '內'],
  ['呑', '吞'],
  ['尙', '尚'],
  ['岀', '出'],
  ['敻', '夐'],
  ['爲', '為'],
  ['耈', '耇'],
  ['蔿', '蒍'],
  ['説', '說'],
  ['飮', '飲'],
  ['龺', '𠦝'],
  ['豈', '豈'],
  ['更', '更'],
  ['車', '車'],
  ['賈', '賈'],
  ['滑', '滑'],
  ['串', '串'],
  ['句', '句'],
  ['龜', '龜'],
  ['龜', '龜'],
  ['契', '契'],
  ['金', '金'],
  ['喇', '喇'],
  ['奈', '奈'],
  ['懶', '懶'],
  ['癩', '癩'],
  ['羅', '羅'],
  ['蘿', '蘿'],
  ['螺', '螺'],
  ['裸', '裸'],
  ['邏', '邏'],
  ['樂', '樂'],
  ['洛', '洛'],
  ['烙', '烙'],
  ['珞', '珞'],
  ['落', '落'],
  ['酪', '酪'],
  ['駱', '駱'],
  ['亂', '亂'],
  ['卵', '卵'],
  ['欄', '欄'],
  ['爛', '爛'],
  ['蘭', '蘭'],
  ['鸞', '鸞'],
  ['嵐', '嵐'],
  ['濫', '濫'],
  ['藍', '藍'],
  ['襤', '襤'],
  ['拉', '拉'],
  ['臘', '臘'],
  ['蠟', '蠟'],
  ['廊', '廊'],
  ['朗', '朗'],
  ['浪', '浪'],
  ['狼', '狼'],
  ['郎', '郎'],
  ['來', '來'],
  ['冷', '冷'],
  ['勞', '勞'],
  ['擄', '擄'],
  ['櫓', '櫓'],
  ['爐', '爐'],
  ['盧', '盧'],
  ['老', '老'],
  ['蘆', '蘆'],
  ['虜', '虜'],
  ['路', '路'],
  ['露', '露'],
  ['魯', '魯'],
  ['鷺', '鷺'],
  ['碌', '碌'],
  ['祿', '祿'],
  ['綠', '綠'],
  ['菉', '菉'],
  ['錄', '錄'],
  ['鹿', '鹿'],
  ['論', '論'],
  ['壟', '壟'],
  ['弄', '弄'],
  ['籠', '籠'],
  ['聾', '聾'],
  ['牢', '牢'],
  ['磊', '磊'],
  ['賂', '賂'],
  ['雷', '雷'],
  ['壘', '壘'],
  ['屢', '屢'],
  ['樓', '樓'],
  ['淚', '淚'],
  ['漏', '漏'],
  ['累', '累'],
  ['縷', '縷'],
  ['陋', '陋'],
  ['勒', '勒'],
  ['肋', '肋'],
  ['凜', '凜'],
  ['凌', '凌'],
  ['稜', '稜'],
  ['綾', '綾'],
  ['菱', '菱'],
  ['陵', '陵'],
  ['讀', '讀'],
  ['拏', '拏'],
  ['樂', '樂'],
  ['諾', '諾'],
  ['丹', '丹'],
  ['寧', '寧'],
  ['怒', '怒'],
  ['率', '率'],
  ['異', '異'],
  ['北', '北'],
  ['磻', '磻'],
  ['便', '便'],
  ['復', '復'],
  ['不', '不'],
  ['泌', '泌'],
  ['數', '數'],
  ['索', '索'],
  ['參', '參'],
  ['塞', '塞'],
  ['省', '省'],
  ['葉', '葉'],
  ['殺', '殺'],
  ['辰', '辰'],
  ['沈', '沈'],
  ['拾', '拾'],
  ['若', '若'],
  ['掠', '掠'],
  ['略', '略'],
  ['亮', '亮'],
  ['兩', '兩'],
  ['凉', '凉'],
  ['梁', '梁'],
  ['糧', '糧'],
  ['良', '良'],
  ['諒', '諒'],
  ['量', '量'],
  ['勵', '勵'],
  ['呂', '呂'],
  ['女', '女'],
  ['廬', '廬'],
  ['旅', '旅'],
  ['濾', '濾'],
  ['礪', '礪'],
  ['閭', '閭'],
  ['驪', '驪'],
  ['麗', '麗'],
  ['黎', '黎'],
  ['力', '力'],
  ['曆', '曆'],
  ['歷', '歷'],
  ['轢', '轢'],
  ['年', '年'],
  ['憐', '憐'],
  ['戀', '戀'],
  ['撚', '撚'],
  ['漣', '漣'],
  ['煉', '煉'],
  ['璉', '璉'],
  ['秊', '秊'],
  ['練', '練'],
  ['聯', '聯'],
  ['輦', '輦'],
  ['蓮', '蓮'],
  ['連', '連'],
  ['鍊', '鍊'],
  ['列', '列'],
  ['劣', '劣'],
  ['咽', '咽'],
  ['烈', '烈'],
  ['裂', '裂'],
  ['說', '說'],
  ['廉', '廉'],
  ['念', '念'],
  ['捻', '捻'],
  ['殮', '殮'],
  ['簾', '簾'],
  ['獵', '獵'],
  ['令', '令'],
  ['囹', '囹'],
  ['寧', '寧'],
  ['嶺', '嶺'],
  ['怜', '怜'],
  ['玲', '玲'],
  ['瑩', '瑩'],
  ['羚', '羚'],
  ['聆', '聆'],
  ['鈴', '鈴'],
  ['零', '零'],
  ['靈', '靈'],
  ['領', '領'],
  ['例', '例'],
  ['禮', '禮'],
  ['醴', '醴'],
  ['隸', '隸'],
  ['惡', '惡'],
  ['了', '了'],
  ['僚', '僚'],
  ['寮', '寮'],
  ['尿', '尿'],
  ['料', '料'],
  ['樂', '樂'],
  ['燎', '燎'],
  ['療', '療'],
  ['蓼', '蓼'],
  ['遼', '遼'],
  ['龍', '龍'],
  ['暈', '暈'],
  ['阮', '阮'],
  ['劉', '劉'],
  ['杻', '杻'],
  ['柳', '柳'],
  ['流', '流'],
  ['溜', '溜'],
  ['琉', '琉'],
  ['留', '留'],
  ['硫', '硫'],
  ['紐', '紐'],
  ['類', '類'],
  ['六', '六'],
  ['戮', '戮'],
  ['陸', '陸'],
  ['倫', '倫'],
  ['崙', '崙'],
  ['淪', '淪'],
  ['輪', '輪'],
  ['律', '律'],
  ['慄', '慄'],
  ['栗', '栗'],
  ['率', '率'],
  ['隆', '隆'],
  ['利', '利'],
  ['吏', '吏'],
  ['履', '履'],
  ['易', '易'],
  ['李', '李'],
  ['梨', '梨'],
  ['泥', '泥'],
  ['理', '理'],
  ['痢', '痢'],
  ['罹', '罹'],
  ['裏', '裏'],
  ['裡', '裡'],
  ['里', '里'],
  ['離', '離'],
  ['匿', '匿'],
  ['溺', '溺'],
  ['吝', '吝'],
  ['燐', '燐'],
  ['璘', '璘'],
  ['藺', '藺'],
  ['隣', '隣'],
  ['鱗', '鱗'],
  ['麟', '麟'],
  ['林', '林'],
  ['淋', '淋'],
  ['臨', '臨'],
  ['立', '立'],
  ['笠', '笠'],
  ['粒', '粒'],
  ['狀', '狀'],
  ['炙', '炙'],
  ['識', '識'],
  ['什', '什'],
  ['茶', '茶'],
  ['刺', '刺'],
  ['切', '切'],
  ['度', '度'],
  ['拓', '拓'],
  ['糖', '糖'],
  ['宅', '宅'],
  ['洞', '洞'],
  ['暴', '暴'],
  ['輻', '輻'],
  ['行', '行'],
  ['降', '降'],
  ['見', '見'],
  ['廓', '廓'],
  ['兀', '兀'],
  ['嗀', '嗀'],
  ['塚', '塚'],
  ['晴', '晴'],
  ['凞', '凞'],
  ['猪', '猪'],
  ['益', '益'],
  ['礼', '礼'],
  ['神', '神'],
  ['祥', '祥'],
  ['福', '福'],
  ['靖', '靖'],
  ['精', '精'],
  ['羽', '羽'],
  ['諸', '諸'],
  ['逸', '逸'],
  ['都', '都'],
  ['飯', '飯'],
  ['飼', '飼'],
  ['館', '館'],
  ['鶴', '鶴'],
  ['侮', '侮'],
  ['墨', '墨'],
  ['悔', '悔'],
  ['梅', '梅'],
  ['碑', '碑'],
  ['臭', '臭'],
  ['辶', '辶'],
  ['揄', '揄'],
  ['晴', '晴'],
  ['煮', '煮'],
  ['磌', '磌'],
  ['節', '節'],
  ['鬒', '鬒'],
  ['︰', '：'],
  ['﹐', '，'],
  ['﹑', '、'],
  ['﹔', '；'],
  ['﹕', '：'],
  ['﹖', '？'],
  ['﹗', '！'],
  ['𠑗', '㒨'],
  ['𣔕', '𠓲'],
  ['𤈎', '㶷'],
  ['𤑕', '爋'],
  ['𤧩', '𤦼'],
  ['𧅄', '虁'],
  ['𧥙', '𣁀'],
  ['割', '割'],
  ['噴', '噴'],
  ['城', '城'],
  ['堍', '堍'],
  ['浩', '浩'],
  ['𣴞', '𣴞'],
  ['䃣', '䃣'],
  ['䈧', '䈧'],
  ['𦓚', '𦓚'],
  ['花', '花'],
  ['著', '著'],
  ['菌', '菌'],
  ['𧢮', '䚕'],
  ['韠', '韠'],
  ['馧', '馧'],
  ['䳭', '䳭'],
  ['𪄅', '𪄅'],
]);
