Exemplo n.º 1
0
int mk_wcswidth_cjk(const UTF16 *utf16_str, size_t n, int max_width, int &element_consumed) {
  const UTF16 *org = utf16_str;
  int w, width = 0;

  // FIXME: only BMP is supported here.
  for (;*utf16_str && n-- > 0 && width < max_width; utf16_str++) {
    const UTF16 *bak_str = utf16_str;
    int bak_width = width;

    if ((w = mk_wcwidth_cjk(*utf16_str)) < 0) {
      return -1;
    } else {
      width += w;
    }

    if (width > max_width) {
      utf16_str = bak_str;
      width = bak_width;
      if (utf16_str == org) {
        return -1;
      } else {
        break;
      }
    }
  }

  element_consumed = utf16_str - org;
  return width;
}
Exemplo n.º 2
0
int mk_wcswidth_cjk(const int* pwcs, size_t n) {
    int w, width = 0;

    for (; *pwcs && n-- > 0; pwcs++)
        if ((w = mk_wcwidth_cjk(*pwcs)) < 0)
            return -1;
        else
            width += w;

    return width;
}
Exemplo n.º 3
0
int mk_wcswidth_cjk(const UTF16 *utf16_str, size_t n)
{
  int w, width = 0;

  // FIXME: only BMP is supported here.
  for (;*utf16_str && n-- > 0; utf16_str++) {
    if ((w = mk_wcwidth_cjk(*utf16_str)) < 0)
      return -1;
    else
      width += w;
  }

  return width;
}
Exemplo n.º 4
0
int mk_wcswidth_cjk(const wchar_t *pwcs, size_t n)
{
  int width = 0;

  for (;*pwcs && n-- > 0; pwcs++) {
    int w;

    if ((w = mk_wcwidth_cjk(*pwcs)) < 0)
      return -1;
    else
      width += w;
  }

  return width;
}
Exemplo n.º 5
0
int get_str_width(uint32_t ucs) {
  return mk_wcwidth_cjk(ucs);
}