///|
fn Char::is_emoji(char : Char) -> Bool {
  char is ('\u{2600}'..<='\u{27bf}' | '\u{1f000}'..<='\u{1faff}')
}

///|
fn Char::is_zero_width(char : Char) -> Bool {
  char
  is ('\u{0300}'..<='\u{036f}'
  | '\u{1ab0}'..<='\u{1aff}'
  | '\u{1dc0}'..<='\u{1dff}'
  | '\u{200b}'..<='\u{200d}'
  | '\u{2060}'
  | '\u{20d0}'..<='\u{20ff}'
  | '\u{fe00}'..<='\u{fe0f}'
  | '\u{fe20}'..<='\u{fe2f}'
  | '\u{e0100}'..<='\u{e01ef}')
}

///|
fn Char::is_wide(char : Char) -> Bool {
  char
  is ('\u{1100}'..<='\u{11ff}'
  | '\u{2e80}'..<='\u{9fff}'
  | '\u{a000}'..<='\u{a4cf}'
  | '\u{ac00}'..<='\u{d7af}'
  | '\u{f900}'..<='\u{faff}'
  | '\u{fe10}'..<='\u{fe6f}'
  | '\u{ff01}'..<='\u{ff60}'
  | '\u{ffe0}'..<='\u{ffe6}'
  | '\u{1b000}'..<='\u{1b12f}'
  | '\u{20000}'..<='\u{2fa1f}'
  | '\u{30000}'..<='\u{3134f}')
}