From 476f083fc0d4ac31da918f7e1110cabc10acf02f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 11 Jul 2015 15:51:12 -0700 Subject: Factored out common bits of rendering into separate render module. * Added render.c, render.h. * Moved common functions and definitions from latex.c and commonmark.c to render.c, render.h. * Added a wrapper, cmark_render, that creates a renderer given a character-escaper and a node renderer. Closes #63. --- src/render.h | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/render.h (limited to 'src/render.h') diff --git a/src/render.h b/src/render.h new file mode 100644 index 0000000..6c268a1 --- /dev/null +++ b/src/render.h @@ -0,0 +1,67 @@ +#ifndef CMARK_RENDER_H +#define CMARK_RENDER_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include "buffer.h" +#include "chunk.h" + +typedef enum { + LITERAL, + NORMAL, + TITLE, + URL +} cmark_escaping; + +struct cmark_render_state { + int options; + cmark_strbuf* buffer; + cmark_strbuf* prefix; + int column; + int width; + int need_cr; + bufsize_t last_breakable; + int enumlevel; + bool begin_line; + bool no_wrap; + bool in_tight_list_item; + void (*outc)(struct cmark_render_state*, + cmark_escaping, + int32_t, + unsigned char); +}; + +typedef struct cmark_render_state cmark_render_state; + +void cr(cmark_render_state *state); + +void blankline(cmark_render_state *state); + +void out(cmark_render_state *state, + cmark_chunk str, + bool wrap, + cmark_escaping escape); + +void lit(cmark_render_state *state, char *s, bool wrap); + +char* +cmark_render(cmark_node *root, + int options, + int width, + void (*outc)(cmark_render_state*, + cmark_escaping, + int32_t, + unsigned char), + int (*render_node)(cmark_node *node, + cmark_event_type ev_type, + cmark_render_state *state)); + + +#ifdef __cplusplus +} +#endif + +#endif -- cgit v1.2.3