charWidth function

int charWidth(
  1. int rune
)

Returns the terminal display width of a Unicode code point.

Returns 2 for CJK characters and emoji, 1 for everything else.

Implementation

int charWidth(int rune) {
  if (rune < 0x7F) return 1;
  if (rune >= 0x1100 &&
      (rune <= 0x115F ||
          rune == 0x2329 ||
          rune == 0x232A ||
          (rune >= 0x2E00 && rune <= 0xA4CF && rune != 0x303F) ||
          (rune >= 0xAC00 && rune <= 0xD7A3) ||
          (rune >= 0xF900 && rune <= 0xFAFF) ||
          (rune >= 0xFE10 && rune <= 0xFE19) ||
          (rune >= 0xFE30 && rune <= 0xFE6F) ||
          (rune >= 0xFF01 && rune <= 0xFF60) ||
          (rune >= 0xFFE0 && rune <= 0xFFE6) ||
          (rune >= 0x1B000 && rune <= 0x1B0FF) ||
          (rune >= 0x1B100 && rune <= 0x1B12F) ||
          (rune >= 0x1F004) ||
          (rune >= 0x1F0CF) ||
          (rune >= 0x1F18E) ||
          (rune >= 0x1F191 && rune <= 0x1F1FF) ||
          (rune >= 0x1F200 && rune <= 0x1F2FF) ||
          (rune >= 0x1F300 && rune <= 0x1F5FF) ||
          (rune >= 0x1F600 && rune <= 0x1F64F) ||
          (rune >= 0x1F680 && rune <= 0x1F6FF) ||
          (rune >= 0x1F900 && rune <= 0x1F9FF) ||
          (rune >= 0x20000 && rune <= 0x2FFFD) ||
          (rune >= 0x30000 && rune <= 0x3FFFD))) {
    return 2;
  }
  return 1;
}