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 | 339a3191c8ced69f3339297a88d8b4503c78d86e (patch) | |
tree | 5e7ab213a7520e649b1b3b8b032b79844a4cf65e | |
parent | Use hilex for up -h (diff) | |
download | src-339a3191c8ced69f3339297a88d8b4503c78d86e.tar.gz src-339a3191c8ced69f3339297a88d8b4503c78d86e.zip |
Avoid matching tag text inside HTML elements
Diffstat (limited to '')
-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 0e14df77..f94e7bfc 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=\""); |