use std::collections::HashMap;
use std::sync::OnceLock;
fn homoglyph_map() -> &'static HashMap<char, Vec<char>> {
static MAP: OnceLock<HashMap<char, Vec<char>>> = OnceLock::new();
MAP.get_or_init(|| {
let mut m = HashMap::new();
m.insert('a', vec!['а', 'α', 'a']);
m.insert('b', vec!['Ь', 'β', 'b']);
m.insert('c', vec!['с', 'c']);
m.insert('e', vec!['е', 'ε', 'e']);
m.insert('g', vec!['ɡ', 'g']); m.insert('h', vec!['н', 'һ', 'h']); m.insert('i', vec!['і', 'ι', 'i']);
m.insert('j', vec!['ј', 'j']);
m.insert('k', vec!['к', 'κ', 'k']);
m.insert('m', vec!['м', 'm']);
m.insert('n', vec!['п', 'ν', 'n']);
m.insert('o', vec!['о', 'ο', 'o']);
m.insert('p', vec!['р', 'ρ', 'p']);
m.insert('s', vec!['ѕ', 's']);
m.insert('t', vec!['т', 'τ', 't']);
m.insert('u', vec!['υ', 'u']);
m.insert('l', vec!['і', 'І', 'ι', 'Ι', 'l', 'Ο', 'ο', 'о', 'O', 'o']);
m.insert('x', vec!['х', 'χ', 'x']);
m.insert('y', vec!['у', 'y']);
m.insert('L', vec!['L']);
m.insert('A', vec!['А', 'Α', 'A']);
m.insert('B', vec!['В', 'Β', 'B']);
m.insert('E', vec!['Е', 'Ε', 'E']);
m.insert('H', vec!['Н', 'Η', 'H']);
m.insert('I', vec!['І', 'Ι', 'I']);
m.insert('J', vec!['Ј', 'J']);
m.insert('K', vec!['К', 'Κ', 'K']);
m.insert('M', vec!['М', 'M']);
m.insert('N', vec!['Ν', 'N']);
m.insert('O', vec!['О', 'Ο', 'O']);
m.insert('P', vec!['Р', 'Ρ', 'P']);
m.insert('S', vec!['С', 'S']);
m.insert('T', vec!['Т', 'Τ', 'T']);
m.insert('X', vec!['Х', 'Χ', 'X']);
m.insert('Y', vec!['Υ', 'Y']);
m
})
}
pub fn expand_homoglyphs(pattern: &str) -> String {
let map = homoglyph_map();
let mut expanded = String::new();
for ch in pattern.chars() {
if let Some(glyphs) = map.get(&ch) {
expanded.push('[');
expanded.push(ch);
for &g in glyphs {
expanded.push(g);
}
expanded.push(']');
} else {
expanded.push(ch);
}
}
expanded
}