summary refs log tree commit diff
path: root/html.c
diff options
context:
space:
mode:
Diffstat (limited to 'html.c')
-rw-r--r--html.c22
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);
 		}