diff options
author | June McEnroe <june@causal.agency> | 2021-01-12 23:12:22 -0500 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2021-01-12 23:13:24 -0500 |
commit | f3803a1ec5ca6f3ce0814324f05280532c81785d (patch) | |
tree | f7a7812acdea116d169d8b474db812ed7b7c8636 | |
parent | Use hilex for up -h (diff) | |
download | src-f3803a1ec5ca6f3ce0814324f05280532c81785d.tar.gz src-f3803a1ec5ca6f3ce0814324f05280532c81785d.zip |
Avoid matching tag text inside HTML elements
-rw-r--r-- | bin/htagml.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/bin/htagml.c b/bin/htagml.c index e104649f..7db101ce 100644 --- a/bin/htagml.c +++ b/bin/htagml.c @@ -61,6 +61,17 @@ static size_t escape(bool esc, const char *ptr, size_t len) { return len; } +static char *hstrstr(char *haystack, char *needle) { + while (haystack) { + char *elem = strchr(haystack, '<'); + char *match = strstr(haystack, needle); + if (!match) return NULL; + if (!elem || match < elem) return match; + haystack = strchr(elem, '>'); + } + return NULL; +} + int main(int argc, char *argv[]) { bool pre = false; bool pipe = false; @@ -157,10 +168,10 @@ int main(int argc, char *argv[]) { } char *text = tag->tag; - char *match = strstr(buf, text); + char *match = (pipe ? hstrstr(buf, text) : strstr(buf, text)); if (!match && tag->tag[0] == 'M') { text = "main"; - match = strstr(buf, text); + match = (pipe ? hstrstr(buf, text) : strstr(buf, text)); } if (match) escape(!pipe, buf, match - buf); printf("<a class=\"tag\" id=\""); |