///|
fn soundex_code(letter : UInt16) -> Int {
match letter {
66 | 70 | 80 | 86 => 1
67 | 71 | 74 | 75 | 81 | 83 | 88 | 90 => 2
68 | 84 => 3
76 => 4
77 | 78 => 5
82 => 6
_ => 0
}
}
///|
/// Encodes ASCII letters with the four-character American Soundex scheme.
pub fn soundex(input : String) -> String {
let letters = normalize_ascii_letters(input)
if letters.length() == 0 {
return ""
}
let first = letters[0]
let mut result = first.unsafe_to_char().to_string()
let mut previous = soundex_code(first)
let mut digits = 0
for i = 1; i < letters.length() && digits < 3; i = i + 1 {
let letter = letters[i]
if letter == 72 || letter == 87 {
continue
}
let code = soundex_code(letter)
if code != 0 && code != previous {
result = result + code.to_string()
digits = digits + 1
}
previous = code
}
while digits < 3 {
result = result + "0"
digits = digits + 1
}
result
}