///|
fn refined_soundex_code(letter : UInt16) -> Int {
match letter {
65 | 69 | 72 | 73 | 79 | 85 | 87 | 89 => 0
66 | 80 => 1
70 | 86 => 2
67 | 75 | 83 => 3
71 | 74 => 4
81 | 88 | 90 => 5
68 | 84 => 6
76 => 7
77 | 78 => 8
82 => 9
_ => 0
}
}
///|
/// Encodes ASCII letters with the US English Refined Soundex mapping.
pub fn refined_soundex(input : String) -> String {
let letters = normalize_ascii_letters(input)
if letters.length() == 0 {
return ""
}
let mut result = letters[0].unsafe_to_char().to_string()
let mut previous = -1
for i = 0; i < letters.length(); i = i + 1 {
let code = refined_soundex_code(letters[i])
if code != previous {
result = result + code.to_string()
previous = code
}
}
result
}