summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/inlines.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/inlines.c b/src/inlines.c
index f63fabe..3f69837 100644
--- a/src/inlines.c
+++ b/src/inlines.c
@@ -261,7 +261,7 @@ scan_delims(subject* subj, unsigned char c, bool * can_open, bool * can_close)
}
len = utf8proc_iterate(subj->input.data + before_char_pos,
subj->pos - before_char_pos, &before_char);
- if (len == 0) {
+ if (len == -1) {
before_char = 10;
}
}
@@ -273,11 +273,17 @@ scan_delims(subject* subj, unsigned char c, bool * can_open, bool * can_close)
len = utf8proc_iterate(subj->input.data + subj->pos,
subj->input.len - subj->pos, &after_char);
- if (len == 0) {
+ if (len == -1) {
after_char = 10;
}
- *can_open = numdelims > 0 && !utf8proc_is_space(after_char);
- *can_close = numdelims > 0 && !utf8proc_is_space(before_char);
+ *can_open = numdelims > 0 && !utf8proc_is_space(after_char) &&
+ !(utf8proc_is_punctuation(after_char) &&
+ !utf8proc_is_space(before_char) &&
+ !utf8proc_is_punctuation(before_char));
+ *can_close = numdelims > 0 && !utf8proc_is_space(before_char) &&
+ !(utf8proc_is_punctuation(before_char) &&
+ !utf8proc_is_space(after_char) &&
+ !utf8proc_is_punctuation(after_char));
if (c == '_') {
*can_open = *can_open &&
!(before_char < 128 && isalnum((char)before_char));