diff --git a/damus-c/cursor.h b/damus-c/cursor.h index a3bd78aa..29ada993 100644 --- a/damus-c/cursor.h +++ b/damus-c/cursor.h @@ -431,10 +431,18 @@ static inline int is_whitespace(char c) { return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; } -static inline int is_boundary(char c) { +static inline int is_utf8_byte(u8 c) { + return c & 0x80; +} + +static inline int is_right_boundary(char c) { return is_whitespace(c) || ispunct(c); } +static inline int is_left_boundary(char c) { + return is_right_boundary(c) || is_utf8_byte(c); +} + static inline int is_invalid_url_ending(char c) { return c == '!' || c == '?' || c == ')' || c == '.' || c == ',' || c == ';'; } @@ -449,7 +457,7 @@ static inline int consume_until_boundary(struct cursor *cur) { while (cur->p < cur->end) { c = *cur->p; - if (is_boundary(c)) + if (is_right_boundary(c)) return 1; cur->p++; diff --git a/damus-c/damus.c b/damus-c/damus.c index 2992ae81..a4db8fbc 100644 --- a/damus-c/damus.c +++ b/damus-c/damus.c @@ -231,7 +231,7 @@ int damus_parse_content(struct note_blocks *blocks, const char *content) { } pre_mention = cur.p; - if (cp == -1 || is_boundary(cp) || c == '#') { + if (cp == -1 || is_left_boundary(cp) || c == '#') { if (c == '#' && (parse_mention_index(&cur, &block) || parse_hashtag(&cur, &block))) { if (!add_text_then_block(&cur, blocks, block, &start, pre_mention)) return 0;