/** * Simple pinyin initial matching for Chinese oil names. * Maps common Chinese characters used in essential oil names to their pinyin initials. * This is a lightweight approach - no full pinyin library needed. */ // Common characters in essential oil / herb names mapped to pinyin initials const PINYIN_MAP = { '薰': 'x', '衣': 'y', '草': 'c', '茶': 'c', '树': 's', '柠': 'n', '檬': 'm', '薄': 'b', '荷': 'h', '迷': 'm', '迭': 'd', '香': 'x', '乳': 'r', '沉': 'c', '丝': 's', '柏': 'b', '尤': 'y', '加': 'j', '利': 'l', '丁': 'd', '肉': 'r', '桂': 'g', '罗': 'l', '勒': 'l', '百': 'b', '里': 'l', '牛': 'n', '至': 'z', '马': 'm', '鞭': 'b', '天': 't', '竺': 'z', '葵': 'k', '生': 's', '姜': 'j', '黑': 'h', '胡': 'h', '椒': 'j', '玫': 'm', '瑰': 'g', '茉': 'm', '莉': 'l', '依': 'y', '兰': 'l', '花': 'h', '橙': 'c', '佛': 'f', '手': 's', '柑': 'g', '葡': 'p', '萄': 't', '柚': 'y', '甜': 't', '苦': 'k', '野': 'y', '山': 's', '松': 's', '杉': 's', '杜': 'd', '雪': 'x', '莲': 'l', '芦': 'l', '荟': 'h', '白': 'b', '芷': 'z', '当': 'd', '归': 'g', '川': 'c', '芎': 'x', '红': 'h', '枣': 'z', '枸': 'g', '杞': 'q', '菊': 'j', '洋': 'y', '甘': 'g', '菘': 's', '蓝': 'l', '永': 'y', '久': 'j', '快': 'k', '乐': 'l', '鼠': 's', '尾': 'w', '岩': 'y', '冷': 'l', '杰': 'j', '绿': 'lv', '芫': 'y', '荽': 's', '椰': 'y', '子': 'z', '油': 'y', '基': 'j', '底': 'd', '精': 'j', '纯': 'c', '露': 'l', '木': 'm', '果': 'g', '叶': 'y', '根': 'g', '皮': 'p', '籽': 'z', '仁': 'r', '大': 'd', '小': 'x', '西': 'x', '东': 'd', '南': 'n', '北': 'b', '中': 'z', '新': 'x', '古': 'g', '老': 'l', '春': 'c', '夏': 'x', '秋': 'q', '冬': 'd', '温': 'w', '热': 'r', '凉': 'l', '冰': 'b', '火': 'h', '水': 's', '金': 'j', '银': 'y', '铜': 't', '铁': 't', '玉': 'y', '珍': 'z', '珠': 'z', '翠': 'c', '碧': 'b', '紫': 'z', '青': 'q', '蓝': 'l', '绿': 'lv', '黄': 'h', '棕': 'z', '褐': 'h', '灰': 'h', '粉': 'f', '豆': 'd', '蔻': 'k', '藿': 'h', '苏': 's', '萃': 'c', '缬': 'x', '安': 'a', '息': 'x', '宁': 'n', '静': 'j', '和': 'h', '平': 'p', '舒': 's', '缓': 'h', '放': 'f', '松': 's', '活': 'h', '力': 'l', '能': 'n', '量': 'l', '保': 'b', '护': 'h', '防': 'f', '御': 'y', '健': 'j', '康': 'k', '美': 'm', '丽': 'l', '清': 'q', '新': 'x', '自': 'z', '然': 'r', '植': 'z', '物': 'w', '芳': 'f', '疗': 'l', '复': 'f', '方': 'f', '单': 'd', '配': 'p', '调': 'd', '忍': 'r', '圆': 'y', '侧': 'c', '呵': 'h', '铠': 'k', '浆': 'j', '萸': 'y', '瑞': 'r', '芙': 'f', '蓉': 'r', '桃': 't', '梅': 'm', '兰': 'l', '竹': 'z', '荆': 'j', '藏': 'z', '蒿': 'h', '艾': 'a', '牡': 'm', '丹': 'd', '参': 's', '芝': 'z', '灵': 'l', '芍': 's', '药': 'y', '枫': 'f', '桦': 'h', '柳': 'l', '榉': 'j', '楠': 'n', '海': 'h', '滨': 'b', '泽': 'z', '湖': 'h', '溪': 'x', '威': 'w', '夷': 'y', '亚': 'y', '欧': 'o', '非': 'f', '印': 'y', '澳': 'a', '美': 'm', '德': 'd', '法': 'f', '意': 'y', '英': 'y', '日': 'r', '韩': 'h', '泰': 't', '醒': 'x', '提': 't', '振': 'z', '镇': 'z', '抚': 'f', '触': 'c', '修': 'x', '养': 'y', '滋': 'z', '润': 'r', '呼': 'h', '吸': 'x', '消': 'x', '化': 'h', '排': 'p', '毒': 'd', '净': 'j', '纤': 'x', '体': 't', '塑': 's', } /** * Get pinyin initials string for a Chinese name. * e.g. "薰衣草" -> "xyc" */ export function getPinyinInitials(name) { let result = '' for (const char of name) { const initial = PINYIN_MAP[char] if (initial) { result += initial } } return result } /** * Check if a query matches a name by pinyin initials. * The query is matched as a prefix or substring of the pinyin initials. */ export function matchesPinyinInitials(name, query) { if (!query || !name) return false const initials = getPinyinInitials(name) if (!initials) return false const q = query.toLowerCase() return initials.startsWith(q) }