diff options
author | June McEnroe <june@causal.agency> | 2020-04-22 13:53:43 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2020-04-22 13:53:43 -0400 |
commit | 949bc6fd1b2f34009ffb9f1fa951bbdd1b5b517c (patch) | |
tree | b93038a6c27c71efd561f6fa4f368ad321b42423 /html.c | |
parent | Add parent links to message nav (diff) | |
download | bubger-949bc6fd1b2f34009ffb9f1fa951bbdd1b5b517c.tar.gz bubger-949bc6fd1b2f34009ffb9f1fa951bbdd1b5b517c.zip |
Render id, description and language as <pre> attributes
Diffstat (limited to '')
-rw-r--r-- | html.c | 64 |
1 files changed, 46 insertions, 18 deletions
diff --git a/html.c b/html.c index 62376d5..bead159 100644 --- a/html.c +++ b/html.c @@ -167,25 +167,53 @@ int htmlMessageOpen(FILE *file, const struct Envelope *envelope) { return error; } -int htmlInline(FILE *file, const struct BodyPart *part, const char *content) { - // TODO: Include Content-Id as id? - // TODO: format=flowed. - // TODO: Process quoting. - // TODO: Highlight patches. - const char *template = TEMPLATE( - <pre lang="[lang]">[content]</pre> - ); - const char *lang = ""; - // FIXME: part->language should be more structured. - if (part->language.len && part->language.ptr[0].type == String) { - lang = part->language.ptr[0].string; +int htmlInlineAttrs(FILE *file, const struct BodyPart *part) { + const char *template = " [attr]=\"[value]\""; + if (part->id) { + struct Variable vars[] = { + { "attr", "id" }, + { "value", part->id }, + {0}, + }; + int error = templateRender(file, template, vars, escapeXML); + if (error) return error; } - struct Variable vars[] = { - { "lang", lang }, - { "content", content }, - {0}, - }; - return templateRender(file, template, vars, escapeXML); + if (part->description) { + struct Variable vars[] = { + { "attr", "title" }, + { "value", part->description }, + {0}, + }; + int error = templateRender(file, template, vars, escapeXML); + if (error) return error; + } + const char *language = NULL; + if (part->language.type == String) language = part->language.string; + if (part->language.type == List && part->language.list.len == 1) { + language = dataCheck(part->language.list.ptr[0], String).string; + } + if (language) { + struct Variable vars[] = { + { "attr", "lang" }, + { "value", language }, + {0}, + }; + int error = templateRender(file, template, vars, escapeXML); + if (error) return error; + } + return 0; +} + +int htmlInline(FILE *file, const struct BodyPart *part, const char *content) { + // TODO: format=flowed + // TODO: Process quoting -> <blockquote> + // TODO: Process diffs -> <ins>, <del> + return 0 + || templateRender(file, TEMPLATE(<pre), NULL, NULL) + || htmlInlineAttrs(file, part) + || templateRender(file, TEMPLATE(>), NULL, NULL) + || escapeXML(file, content) + || templateRender(file, TEMPLATE(</pre>), NULL, NULL); } int htmlAttachmentOpen(FILE *file) { |