diff options
Diffstat (limited to '')
-rw-r--r-- | html.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/html.c b/html.c index ee9e966..12f3ff0 100644 --- a/html.c +++ b/html.c @@ -253,6 +253,23 @@ static int htmlMarkupURLs(FILE *file, char *buf) { return escapeXML(file, ptr); } +static int htmlMarkupQuote(FILE *file, char *buf) { + int error; + size_t level = 0; + for (char *ch = buf; *ch == '>' || *ch == ' '; level += (*ch++ == '>')); + for (size_t i = 0; i < level; ++i) { + error = templateRender(file, TEMPLATE(<q>), NULL, NULL); + if (error) return error; + } + error = htmlMarkupURLs(file, buf); + if (error) return error; + for (size_t i = 0; i < level; ++i) { + error = templateRender(file, TEMPLATE(</q>), NULL, NULL); + if (error) return error; + } + return 0; +} + static int htmlMarkup(FILE *file, const char *content) { int error = 0; size_t cap = 0; @@ -299,10 +316,7 @@ static int htmlMarkup(FILE *file, const char *content) { } else if (patch) { error = escapeXML(file, buf); } else if (buf[0] == '>') { - error = 0 - || templateRender(file, TEMPLATE(<q>), NULL, NULL) - || htmlMarkupURLs(file, buf) - || templateRender(file, TEMPLATE(</q>), NULL, NULL); + error = htmlMarkupQuote(file, buf); } else { error = htmlMarkupURLs(file, buf); } |