On Thu, Sep 6, 2012 at 2:20 AM, Torsten Bögershausen <tboegi@xxxxxx> wrote: > On 09/05/2012 08:15 PM, Torsten Bögershausen wrote: >> >> On 04.09.12 12:39, Nguyễn Thái Ngọc Duy wrote: >>> >>> +/* return the number of columns of string 's' in current locale */ >>> +int gettext_width(const char *s) >>> +{ >>> + static int is_utf8 = -1; >>> + if (is_utf8 == -1) >>> + is_utf8 = !strcmp(charset, "UTF-8"); >>> + >>> + return is_utf8 ? utf8_strwidth(s) : strlen(s); >> >> >> Will that work for non-ASCII encodings? >> For ISO-8859-x we can say strlen() == strwidth(), >> but for other encodings using multibytes that doesn't work, does it? No it does not. I think I mentioned that in the first version that I was only interested in utf-8. Others can extend the function for their favourite encodings. > (Sorry the message went out before completely written) > Something like that: > > int gettext_width(const char *s) { > > static int is_utf8 = -1; > > if (is_utf8 == -1) > > is_utf8 = !strcmp(charset, "UTF-8"); > > if (is_utf8) > return utf8_strwidth(s); > else { > char *s_utf = reencode_string(s, "UTF-8", charset); > if (s_utf) { > witdh = utf8_strwidth(s_utf); > free(s_utf); > } else > width = strlen(s); > > return width; > } Yes, something like that, assuming that column information is intact after the conversion. Maybe you can make that a new function, int strwidth(const char *str, const char *charset), and make gettext_strwidth() a thin wrapper: int gettext_strwidth(const char *s) { return strwidth(s, charset); } -- Duy -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html