///|
pub fn casefold(s : String) -> String {
  let str_buf = StringBuilder::new(size_hint=s.length())
  for c in s.iter() {
    match lookup(c) {
      One(c) => str_buf.write_char(c)
      Two(c1, c2) => {
        str_buf.write_char(c1)
        str_buf.write_char(c2)
      }
      Three(c1, c2, c3) => {
        str_buf.write_char(c1)
        str_buf.write_char(c2)
        str_buf.write_char(c3)
      }
    }
  } nobreak {
    str_buf.to_string()
  }
}

///|
pub fn casefold_char(ch : Char) -> Fold {
  lookup(ch)
}