diff options
author | Steve Bennett <steveb@workware.net.au> | 2016-09-04 13:54:59 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2016-09-05 09:40:26 +1000 |
commit | ed4923bc71b7630cc34328b32704e806bb10c614 (patch) | |
tree | 024ee39a3b430a447bc2fc1a49a0110a21cef013 /utf8.h | |
parent | c672379dca1fe3fa7b89e1d8c6b1a1e570bb4043 (diff) | |
download | jimtcl-ed4923bc71b7630cc34328b32704e806bb10c614.zip jimtcl-ed4923bc71b7630cc34328b32704e806bb10c614.tar.gz jimtcl-ed4923bc71b7630cc34328b32704e806bb10c614.tar.bz2 |
Add utf-8 display width info
Needed when using linenoise line editing with utf-8 support
Note that variable width support is not yet added to linenoise
Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'utf8.h')
-rw-r--r-- | utf8.h | 15 |
1 files changed, 15 insertions, 0 deletions
@@ -30,6 +30,7 @@ int utf8_fromunicode(char *p, unsigned uc); /* No utf-8 support. 1 byte = 1 char */ #define utf8_strlen(S, B) ((B) < 0 ? (int)strlen(S) : (B)) +#define utf8_strwidth(S, B) utf8_strlen((S), (B)) #define utf8_tounicode(S, CP) (*(CP) = (unsigned char)*(S), 1) #define utf8_getchars(CP, C) (*(CP) = (C), 1) #define utf8_upper(C) toupper(C) @@ -38,6 +39,7 @@ int utf8_fromunicode(char *p, unsigned uc); #define utf8_index(C, I) (I) #define utf8_charlen(C) 1 #define utf8_prev_len(S, L) 1 +#define utf8_width(C) 1 #else #if !defined(JIM_BOOTSTRAP) @@ -67,6 +69,12 @@ int utf8_charlen(int c); int utf8_strlen(const char *str, int bytelen); /** + * Calculates the display width of the first 'charlen' characters in 'str'. + * See utf8_width() + */ +int utf8_strwidth(const char *str, int charlen); + +/** * Returns the byte index of the given character in the utf-8 string. * * The string *must* be null terminated. @@ -125,6 +133,13 @@ int utf8_title(int uc); * Unicode code points > \uffff are returned unchanged. */ int utf8_lower(int uc); + +/** + * Returns the width (in characters) of the given unicode codepoint. + * This is 1 for normal letters and 0 for combining characters and 2 for wide characters. + */ +int utf8_width(int ch); + #endif /* JIM_BOOTSTRAP */ #endif |