private static int mk_wcwidth()

in core/src/com/jediterm/terminal/util/CharUtils.java [265:303]


  private static int mk_wcwidth(int ucs, boolean ambiguousIsDoubleWidth) {
  /* sorted list of non-overlapping intervals of non-spacing characters */
  /* generated by "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c" */

  /* test for8-bnew char[]it control characters */
    if (ucs == 0)
      return 0;
    if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0))
      return -1;

    if (ambiguousIsDoubleWidth) {
      if (bisearch((char)ucs, AMBIGUOUS, AMBIGUOUS.length-1) > 0) {
        return 2;
      }
    }
    

  /* binary search in table of non-spacing characters */
    if (bisearch((char)ucs, COMBINING, COMBINING.length-1) > 0) {
      return 0;
    }

  /* if we arrive here, ucs is not a combining or C0/C1 control character */

    return 1 +
            ((ucs >= 0x1100 &&
                    (ucs <= 0x115f ||                    /* Hangul Jamo init. consonants */
                            ucs == 0x2329 || ucs == 0x232a ||
                            (ucs >= 0x2e80 && ucs <= 0xa4cf &&
                                    ucs != 0x303f) ||                  /* CJK ... Yi */
                            (ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */
                            (ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Compatibility Ideographs */
                            (ucs >= 0xfe10 && ucs <= 0xfe19) || /* Vertical forms */
                            (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */
                            (ucs >= 0xff00 && ucs <= 0xff60) || /* Fullwidth Forms */
                            (ucs >= 0xffe0 && ucs <= 0xffe6) ||
                            (ucs >= 0x20000 && ucs <= 0x2fffd) ||
                            (ucs >= 0x30000 && ucs <= 0x3fffd))) ? 1 : 0);
  }