From cf90b09e5c0b0d5a91dd2d789842369b44b8b900 Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Sun, 10 Feb 2019 23:51:13 -0500 Subject: Avoid excessive tags in ttpre --- bin/ttpre.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'bin') diff --git a/bin/ttpre.c b/bin/ttpre.c index 52e30f54..79006ca9 100644 --- a/bin/ttpre.c +++ b/bin/ttpre.c @@ -19,27 +19,36 @@ #include #include -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("", tag); +} + +static void tag(const char *open) { + static const char *close = NULL; + if (close == open) return; + if (close) printf("", 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]; -- cgit 1.4.1