diff --git a/src/kits/interface/BTextView/moreUTF8.h b/src/kits/interface/BTextView/moreUTF8.h new file mode 100644 index 0000000000..88ca0172f7 --- /dev/null +++ b/src/kits/interface/BTextView/moreUTF8.h @@ -0,0 +1,45 @@ +#ifndef __MOREUTF8 +#define __MOREUTF8 + + +static inline bool +IsInsideGlyph(uchar ch) +{ + return (ch & 0xC0) == 0x80; +} + + +static inline uint32 +UTF8NextCharLen(const char *text) +{ + const char *ptr = text; + + if (ptr == NULL || *ptr == 0) + return 0; + + do { + ptr++; + } while (IsInsideGlyph(*ptr)); + + return ptr - text; +} + + +static inline uint32 +UTF8PreviousCharLen(const char *text, const char *limit) +{ + const char *ptr = text; + + if (ptr == NULL || limit == NULL) + return 0; + + do { + if (ptr == limit) + break; + ptr--; + } while (IsInsideGlyph(*ptr)); + + return text - ptr; +} + +#endif