aboutsummaryrefslogtreecommitdiff
path: root/src/html
diff options
context:
space:
mode:
Diffstat (limited to 'src/html')
-rw-r--r--src/html/html.c55
1 files changed, 49 insertions, 6 deletions
diff --git a/src/html/html.c b/src/html/html.c
index 6261b9c..9b3a995 100644
--- a/src/html/html.c
+++ b/src/html/html.c
@@ -98,9 +98,56 @@ static inline void cr(strbuf *html)
}
// Convert an inline list to HTML. Returns 0 on success, and sets result.
+static void inlines_to_plain_html(strbuf *html, node_inl* ils)
+{
+ node_inl* children;
+ render_stack* rstack = NULL;
+
+ while(ils != NULL) {
+ children = NULL;
+ switch(ils->tag) {
+ case INL_STRING:
+ case INL_CODE:
+ case INL_RAW_HTML:
+ escape_html(html, ils->content.literal.data, ils->content.literal.len);
+ break;
+
+ case INL_LINEBREAK:
+ case INL_SOFTBREAK:
+ strbuf_putc(html, '\n');
+ break;
+
+ case INL_LINK:
+ case INL_IMAGE:
+ children = ils->content.inlines;
+ rstack = push_inline(rstack, ils->next, "");
+ break;
+
+ case INL_STRONG:
+ case INL_EMPH:
+ children = ils->content.inlines;
+ rstack = push_inline(rstack, ils->next, "");
+ break;
+ }
+ if (children) {
+ ils = children;
+ } else {
+ ils = ils->next;
+ }
+ while (ils == NULL && rstack != NULL) {
+ strbuf_puts(html, rstack->literal);
+ ils = rstack->next_sibling.inl;
+ rstack = pop_render_stack(rstack);
+ }
+ }
+
+ free_render_stack(rstack);
+}
+
+
+// Convert an inline list to HTML. Returns 0 on success, and sets result.
static void inlines_to_html(strbuf *html, node_inl* ils)
{
- strbuf scrap = GH_BUF_INIT;
node_inl* children;
render_stack* rstack = NULL;
@@ -151,11 +198,8 @@ static void inlines_to_html(strbuf *html, node_inl* ils)
if (ils->content.linkable.url)
escape_href(html, ils->content.linkable.url, -1);
- inlines_to_html(&scrap, ils->content.inlines);
strbuf_puts(html, "\" alt=\"");
- if (scrap.size)
- escape_html(html, scrap.ptr, scrap.size);
- strbuf_clear(&scrap);
+ inlines_to_plain_html(html, ils->content.inlines);
if (ils->content.linkable.title) {
strbuf_puts(html, "\" title=\"");
@@ -189,7 +233,6 @@ static void inlines_to_html(strbuf *html, node_inl* ils)
}
}
- strbuf_free(&scrap);
free_render_stack(rstack);
}
e' style='width: -nan%;'/> -rw-r--r--tags/da/0e/20170502190002.1787F620A@lxp5.free-owl.de/sys0
-rw-r--r--tags/da/0e/20170502190002.1787F620A@lxp5.free-owl.de/unread0
-rw-r--r--tags/da/0e/20170909070529.CE87176BD@lxp5.free-owl.de/sys0
-rw-r--r--tags/da/0e/20170909070529.CE87176BD@lxp5.free-owl.de/unread0
-rw-r--r--tags/da/0e/21606.16213.932899.73741@chiark.greenend.org.uk/debian0
-rw-r--r--tags/da/0e/21606.16213.932899.73741@chiark.greenend.org.uk/unread0
-rw-r--r--tags/da/0e/52164822efd446afe9e448d59fcbd60f@localhost.localdomain/inbox0
-rw-r--r--tags/da/0e/52164822efd446afe9e448d59fcbd60f@localhost.localdomain/killed0
-rw-r--r--tags/da/0e/52164822efd446afe9e448d59fcbd60f@localhost.localdomain/unread0
-rw-r--r--tags/da/0e/5256d0b1001110909k7fe48c1ay99e3abb3207cdae9@mail.gmail.com/sugar0
-rw-r--r--tags/da/0e/63d78e7dab279_725d3d6449625954b@sidekiq-default-548794865c-fft5t.mail/inbox0
-rw-r--r--tags/da/0e/63d78e7dab279_725d3d6449625954b@sidekiq-default-548794865c-fft5t.mail/killed0
-rw-r--r--tags/da/0e/63d78e7dab279_725d3d6449625954b@sidekiq-default-548794865c-fft5t.mail/unread0
-rw-r--r--tags/da/0e/SNT110-W209A64514B7130CA5BB7C5CC900@phx.gbl/sugar0
-rw-r--r--tags/da/0e/bb78a1ac0810071422h24b5af69r9d1daafb3d294796@mail.gmail.com/debian0
-rw-r--r--tags/da/0e/mailman.349.1583755587.18298.kpt11@lists.homebase.dk/hb0
-rw-r--r--tags/da/0e/mailman.349.1583755587.18298.kpt11@lists.homebase.dk/inbox0
-rw-r--r--tags/da/0e/mailman.349.1583755587.18298.kpt11@lists.homebase.dk/killed0
-rw-r--r--tags/da/0e/mailman.349.1583755587.18298.kpt11@lists.homebase.dk/unread0
33 files changed, 0 insertions, 0 deletions