summaryrefslogtreecommitdiff
path: root/src/render.c
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2015-07-11 23:15:31 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2015-07-11 23:15:31 -0700
commit46330867a8d82bf45f2ea575b93c5f0d4496ca0c (patch)
treec9714d601dd593948ad3968d38b9b005bc2728e6 /src/render.c
parentc6460e00ea05da186e7d0ea7690b28f2b98a0ed9 (diff)
Restructured common renderer code.
* Added functions for cr, blankline, out to renderer object. * Removed lit (we'll handle this with a macro). * Changed type of out so it takes a regular string instead of a chunk. * Use macros LIT, OUT, BLANKLINE, CR in renderers to simplify code. (Not sure about this, but `renderer->out(renderer, ...)` sure is verbose.)
Diffstat (limited to 'src/render.c')
-rw-r--r--src/render.c29
1 files changed, 13 insertions, 16 deletions
diff --git a/src/render.c b/src/render.c
index 442a7fc..16caadc 100644
--- a/src/render.c
+++ b/src/render.c
@@ -5,27 +5,29 @@
#include "utf8.h"
#include "render.h"
-void cr(cmark_renderer *renderer)
+static inline
+void S_cr(cmark_renderer *renderer)
{
if (renderer->need_cr < 1) {
renderer->need_cr = 1;
}
}
-void blankline(cmark_renderer *renderer)
+static inline
+void S_blankline(cmark_renderer *renderer)
{
if (renderer->need_cr < 2) {
renderer->need_cr = 2;
}
}
-void out(cmark_renderer *renderer,
- cmark_chunk str,
- bool wrap,
- cmark_escaping escape)
+static
+void S_out(cmark_renderer *renderer,
+ const char *source,
+ bool wrap,
+ cmark_escaping escape)
{
- unsigned char* source = str.data;
- int length = str.len;
+ int length = cmark_strbuf_safe_strlen(source);
unsigned char nextc;
int32_t c;
int i = 0;
@@ -61,7 +63,7 @@ void out(cmark_renderer *renderer,
renderer->column = renderer->prefix->size;
}
- len = utf8proc_iterate(source + i, length - i, &c);
+ len = utf8proc_iterate((const uint8_t *)source + i, length - i, &c);
if (len == -1) { // error condition
return; // return without rendering rest of string
}
@@ -114,12 +116,6 @@ void out(cmark_renderer *renderer,
}
}
-void lit(cmark_renderer *renderer, char *s, bool wrap)
-{
- cmark_chunk str = cmark_chunk_literal(s);
- out(renderer, str, wrap, LITERAL);
-}
-
char*
cmark_render(cmark_node *root,
int options,
@@ -145,7 +141,8 @@ cmark_render(cmark_node *root,
}
cmark_renderer renderer = { options, &buf, &pref, 0, width,
- 0, 0, 0, true, false, false, outc };
+ 0, 0, 0, true, false, false,
+ outc, S_cr, S_blankline, S_out };
while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
cur = cmark_iter_get_node(iter);