///|
/// Encodes ASCII letters with the ten-character Caverphone 2.0 rules.
pub fn caverphone2(input : String) -> String {
  let mut value = caverphone_clean(input)
  value = replace_literal_end(value, "e", "")
  value = caverphone_initial_exceptions(value, true)
  value = replace_literal_end(value, "mb", "m2")
  value = caverphone_common_replacements(value)
  value = replace_initial_vowel(value)
  value = replace_lowercase_vowels(value)
  value = replace_literal_all(value, "j", "y")
  value = replace_literal_start(value, "y3", "Y3")
  value = replace_literal_start(value, "y", "A")
  value = replace_literal_all(value, "y", "3")
  value = replace_literal_all(value, "3gh3", "3kh3")
  value = replace_literal_all(value, "gh", "22")
  value = replace_literal_all(value, "g", "k")
  value = caverphone_collapse_consonants(value)
  value = replace_literal_all(value, "w3", "W3")
  value = replace_literal_all(value, "wh3", "Wh3")
  value = replace_literal_end(value, "w", "3")
  value = replace_literal_all(value, "w", "2")
  value = replace_literal_start(value, "h", "A")
  value = replace_literal_all(value, "h", "2")
  value = replace_literal_all(value, "r3", "R3")
  value = replace_literal_end(value, "r", "3")
  value = replace_literal_all(value, "r", "2")
  value = replace_literal_all(value, "l3", "L3")
  value = replace_literal_end(value, "l", "3")
  value = replace_literal_all(value, "l", "2")
  value = replace_literal_all(value, "2", "")
  value = replace_literal_end(value, "3", "A")
  value = replace_literal_all(value, "3", "")
  pad_caverphone(value, 10)
}