diff --git a/src/string_utils.c b/src/string_utils.c index f1155001..6b1b14ab 100644 --- a/src/string_utils.c +++ b/src/string_utils.c @@ -668,6 +668,45 @@ inline bool string_contains_hyphen(char *str) { return string_next_hyphen_index(str, strlen(str)) >= 0; } +ssize_t string_next_codepoint_len(char *str, uint32_t codepoint, size_t len) { + uint8_t *ptr = (uint8_t *)str; + int32_t ch; + ssize_t idx = 0; + + while (idx < len) { + ssize_t char_len = utf8proc_iterate(ptr, len, &ch); + + if (char_len <= 0 || ch == 0) break; + + if ((uint32_t)ch == codepoint) return idx; + ptr += char_len; + idx += char_len; + } + return -1; +} + +ssize_t string_next_codepoint(char *str, uint32_t codepoint) { + return string_next_codepoint_len(str, codepoint, strlen(str)); +} + +#define PERIOD_CODEPOINT 46 + +ssize_t string_next_period_len(char *str, size_t len) { + return string_next_codepoint_len(str, PERIOD_CODEPOINT, len); +} + +ssize_t string_next_period(char *str) { + return string_next_codepoint(str, PERIOD_CODEPOINT); +} + +inline bool string_contains_period_len(char *str, size_t len) { + return string_next_codepoint_len(str, PERIOD_CODEPOINT, len) >= 0; +} + +inline bool string_contains_period(char *str) { + return string_next_codepoint(str, string_next_codepoint(str, PERIOD_CODEPOINT)) >= 0; +} + size_t string_right_spaces_len(char *str, size_t len) { size_t spaces = 0; diff --git a/src/string_utils.h b/src/string_utils.h index 5ae041e2..29683f91 100644 --- a/src/string_utils.h +++ b/src/string_utils.h @@ -106,6 +106,15 @@ ssize_t string_next_hyphen_index(char *str, size_t len); bool string_contains_hyphen(char *str); bool string_contains_hyphen_len(char *str, size_t len); +ssize_t string_next_codepoint_len(char *str, uint32_t codepoint, size_t len); +ssize_t string_next_codepoint(char *str, uint32_t codepoint); + +ssize_t string_next_period_len(char *str, size_t len); +ssize_t string_next_period(char *str); + +bool string_contains_period_len(char *str, size_t len); +bool string_contains_period(char *str); + char *string_trim(char *str); /* char_array is a dynamic character array defined in collections.h