diff options
Diffstat (limited to 'src/rccstring.c')
-rw-r--r-- | src/rccstring.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/rccstring.c b/src/rccstring.c index aa92407..0f46c90 100644 --- a/src/rccstring.c +++ b/src/rccstring.c @@ -175,3 +175,26 @@ int rccIsASCII(const char *str) { if ((unsigned char)str[i]>0x7F) return 0; return 1; } + +size_t rccStringSizedGetChars(const char *str, size_t size) { + size_t i, skip = 0, chars = 0; + const unsigned char *tmp; + + tmp = rccGetString(str); + + for (i=0;(size?(size-i):tmp[i]);i++) { + if (skip) { + skip--; + continue; + } + + if (tmp[i]<0x80) skip = 0; + else if ((tmp[i]>0xBF)&&(tmp[i]<0xE0)) skip = 1; + else if ((tmp[i]>0xDF)&&(tmp[i]<0xF0)) skip = 2; + else if ((tmp[i]>0xEF)&&(tmp[i]<0xF8)) skip = 3; + else skip = 4; + chars++; + } + + return chars; +} |