1
0
mirror of https://github.com/irssi/irssi.git synced 2024-11-03 04:27:19 -05:00

Introduce string_policy().

This commit is contained in:
Xavier G 2016-05-13 02:10:02 +02:00
parent b0afcc96db
commit 2c8648a9c8
2 changed files with 27 additions and 0 deletions

View File

@ -25,6 +25,8 @@
#include "utf8.h"
#include "module.h"
#include "wcwidth.c"
/* Provide is_utf8(): */
#include "recode.h"
int string_advance(char const **str, gboolean utf8)
{
@ -41,3 +43,14 @@ int string_advance(char const **str, gboolean utf8)
return 1;
}
}
int string_policy(const char *str)
{
if (is_utf8()) {
if (!str || g_utf8_validate(str, -1, NULL)) {
/* No string provided or valid UTF-8 string: treat as UTF-8: */
return TREAT_STRING_AS_UTF8;
}
}
return TREAT_STRING_AS_BYTES;
}

View File

@ -19,6 +19,20 @@ int mk_wcwidth(unichar c);
*/
int string_advance(char const **str, gboolean utf8);
/* TREAT_STRING_AS_BYTES means strings are to be treated using strncpy,
* strnlen, etc.
* TREAT_STRING_AS_UTF8 means strings are to be treated using g_utf8_*
* functions.
*/
#define TREAT_STRING_AS_BYTES 0
#define TREAT_STRING_AS_UTF8 1
/* Return how the str string ought to be treated: TREAT_STRING_AS_UTF8 if the
* terminal handles UTF-8 and if the string appears to be a valid UTF-8 string;
* TREAT_STRING_AS_BYTES otherwise.
*/
int string_policy(const char *str);
#define unichar_isprint(c) (((c) & ~0x80) >= 32)
#define is_utf8_leading(c) (((c) & 0xc0) != 0x80)