diff options
author | June McEnroe <june@causal.agency> | 2019-02-10 23:51:13 -0500 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2019-02-10 23:51:13 -0500 |
commit | 15195e49830a918ef98a9131ab2b56a2e4dcf111 (patch) | |
tree | 3b32b1c753577cea1e7f9c37a993f1bea227a056 | |
parent | Generate html for bins (diff) | |
download | src-15195e49830a918ef98a9131ab2b56a2e4dcf111.tar.gz src-15195e49830a918ef98a9131ab2b56a2e4dcf111.zip |
Avoid excessive tags in ttpre
Diffstat (limited to '')
-rw-r--r-- | bin/ttpre.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/bin/ttpre.c b/bin/ttpre.c index 7acf8475..9f140749 100644 --- a/bin/ttpre.c +++ b/bin/ttpre.c @@ -19,27 +19,36 @@ #include <stdlib.h> #include <wchar.h> -static void put(const char *tag, wchar_t ch) { - if (tag) printf("<%s>", tag); +static void put(wchar_t ch) { switch (ch) { break; case L'&': printf("&"); break; case L'<': printf("<"); break; case L'>': printf(">"); break; default: printf("%lc", ch); } - if (tag) printf("</%s>", tag); +} + +static void tag(const char *open) { + static const char *close = NULL; + if (close == open) return; + if (close) printf("</%s>", close); + if (open) printf("<%s>", open); + close = open; } static void push(wchar_t ch) { static wchar_t q[3]; if (q[1] == L'\b' && q[0] == L'_') { - put("i", q[2]); + tag("i"); + put(q[2]); q[0] = q[1] = q[2] = 0; } else if (q[1] == L'\b' && q[0] == q[2]) { - put("b", q[2]); + tag("b"); + put(q[2]); q[0] = q[1] = q[2] = 0; } else if (q[0]) { - put(NULL, q[0]); + tag(NULL); + put(q[0]); } q[0] = q[1]; q[1] = q[2]; |