From c41288c7056752f2b25afa5790ae68abf2b3bc88 Mon Sep 17 00:00:00 2001 From: June McEnroe Date: Thu, 24 Mar 2022 18:13:06 -0400 Subject: Skip matches with ident chars on either side This fixes, for example, where the link gets placed on static regex_t regex(const char *pattern, int flags) in title.c. --- bin/htagml.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'bin') diff --git a/bin/htagml.c b/bin/htagml.c index 033f717a..1f547be6 100644 --- a/bin/htagml.c +++ b/bin/htagml.c @@ -77,6 +77,10 @@ static char *hstrstr(const char *haystack, const char *needle) { return NULL; } +static int isident(int c) { + return isalnum(c) || c == '_'; +} + int main(int argc, char *argv[]) { bool pre = false; bool pipe = false; @@ -190,7 +194,10 @@ int main(int argc, char *argv[]) { size_t mlen = strlen(tag); char *match = (pipe ? hstrstr : strstr)(buf, tag); - while (match > buf && isalnum(match[-1])) { + while ( + match && + ((match > buf && isident(match[-1])) || isident(match[mlen])) + ) { match = (pipe ? hstrstr : strstr)(&match[mlen], tag); } if (!match && tag[0] == 'M') { -- cgit 1.4.1