From 6dbc6c95ab05f51844210a1a8bdc2901bfb8d917 Mon Sep 17 00:00:00 2001 From: David Maciejak Date: Sat, 4 Apr 2026 14:27:12 -0400 Subject: [PATCH] WINGs: make UTF-8 functions global This patch is moving the existing UTF-8 functions from wtextfield.c to WINGsP.h.in to be available to all modules. --- WINGs/WINGs/WINGsP.h.in | 31 +++++++++++++++++++++++++++++++ WINGs/wtextfield.c | 29 ----------------------------- 2 files changed, 31 insertions(+), 29 deletions(-) diff --git a/WINGs/WINGs/WINGsP.h.in b/WINGs/WINGs/WINGsP.h.in index 2c36b269..02d288f3 100644 --- a/WINGs/WINGs/WINGsP.h.in +++ b/WINGs/WINGs/WINGsP.h.in @@ -686,6 +686,37 @@ void W_BroadcastMessage(W_View *targetParent, XEvent *event); void W_DispatchMessage(W_View *target, XEvent *event); +/* ---[ UTF-8 helpers ]--------------------------------------------------- */ + +static inline int oneUTF8CharBackward(const char *str, int len) +{ + const unsigned char *ustr = (const unsigned char *)str; + int pos = 0; + + while (len-- > 0 && ustr[--pos] >= 0x80 && ustr[pos] <= 0xbf) ; + return pos; +} + +static inline int oneUTF8CharForward(const char *str, int len) +{ + const unsigned char *ustr = (const unsigned char *)str; + int pos = 0; + + while (len-- > 0 && ustr[++pos] >= 0x80 && ustr[pos] <= 0xbf) ; + return pos; +} + +// find the beginning of the UTF8 char pointed by str +static inline int seekUTF8CharStart(const char *str, int len) +{ + const unsigned char *ustr = (const unsigned char *)str; + int pos = 0; + + while (len-- > 0 && ustr[pos] >= 0x80 && ustr[pos] <= 0xbf) + --pos; + return pos; +} + #ifdef __cplusplus } diff --git a/WINGs/wtextfield.c b/WINGs/wtextfield.c index 52b577e5..4d25a3e5 100644 --- a/WINGs/wtextfield.c +++ b/WINGs/wtextfield.c @@ -122,35 +122,6 @@ static WMSelectionProcs selectionHandler = { #define TEXT_WIDTH2(tPtr, start, end) (WMWidthOfString((tPtr)->font, \ &((tPtr)->text[(start)]), (end) - (start))) -static inline int oneUTF8CharBackward(const char *str, int len) -{ - const unsigned char *ustr = (const unsigned char *)str; - int pos = 0; - - while (len-- > 0 && ustr[--pos] >= 0x80 && ustr[pos] <= 0xbf) ; - return pos; -} - -static inline int oneUTF8CharForward(const char *str, int len) -{ - const unsigned char *ustr = (const unsigned char *)str; - int pos = 0; - - while (len-- > 0 && ustr[++pos] >= 0x80 && ustr[pos] <= 0xbf) ; - return pos; -} - -// find the beginning of the UTF8 char pointed by str -static inline int seekUTF8CharStart(const char *str, int len) -{ - const unsigned char *ustr = (const unsigned char *)str; - int pos = 0; - - while (len-- > 0 && ustr[pos] >= 0x80 && ustr[pos] <= 0xbf) - --pos; - return pos; -} - static void normalizeRange(TextField * tPtr, WMRange * range) { if (range->position < 0 && range->count < 0)