diff options
Diffstat (limited to 'src/document.h')
-rw-r--r-- | src/document.h | 154 |
1 files changed, 80 insertions, 74 deletions
diff --git a/src/document.h b/src/document.h index 4547972..a8178fe 100644 --- a/src/document.h +++ b/src/document.h @@ -10,11 +10,12 @@ extern "C" { #endif -/********* - * FLAGS * - *********/ -enum hoedown_extensions { +/************* + * CONSTANTS * + *************/ + +typedef enum hoedown_extensions { /* block-level extensions */ HOEDOWN_EXT_TABLES = (1 << 0), HOEDOWN_EXT_FENCED_CODE = (1 << 1), @@ -27,17 +28,16 @@ enum hoedown_extensions { HOEDOWN_EXT_HIGHLIGHT = (1 << 6), HOEDOWN_EXT_QUOTE = (1 << 7), HOEDOWN_EXT_SUPERSCRIPT = (1 << 8), - HOEDOWN_EXT_MATH = (1 << 13), + HOEDOWN_EXT_MATH = (1 << 9), /* other flags */ - HOEDOWN_EXT_LAX_SPACING = (1 << 9), - HOEDOWN_EXT_NO_INTRA_EMPHASIS = (1 << 10), - HOEDOWN_EXT_SPACE_HEADERS = (1 << 11), - HOEDOWN_EXT_MATH_EXPLICIT = (1 << 14), + HOEDOWN_EXT_NO_INTRA_EMPHASIS = (1 << 11), + HOEDOWN_EXT_SPACE_HEADERS = (1 << 12), + HOEDOWN_EXT_MATH_EXPLICIT = (1 << 13), /* negative flags */ - HOEDOWN_EXT_DISABLE_INDENTED_CODE = (1 << 12) -}; + HOEDOWN_EXT_DISABLE_INDENTED_CODE = (1 << 14) +} hoedown_extensions; #define HOEDOWN_EXT_BLOCK (\ HOEDOWN_EXT_TABLES |\ @@ -54,7 +54,6 @@ enum hoedown_extensions { HOEDOWN_EXT_MATH ) #define HOEDOWN_EXT_FLAGS (\ - HOEDOWN_EXT_LAX_SPACING |\ HOEDOWN_EXT_NO_INTRA_EMPHASIS |\ HOEDOWN_EXT_SPACE_HEADERS |\ HOEDOWN_EXT_MATH_EXPLICIT ) @@ -62,30 +61,37 @@ enum hoedown_extensions { #define HOEDOWN_EXT_NEGATIVE (\ HOEDOWN_EXT_DISABLE_INDENTED_CODE ) -/* list/listitem flags */ -enum hoedown_listflags { +typedef enum hoedown_list_flags { HOEDOWN_LIST_ORDERED = (1 << 0), HOEDOWN_LI_BLOCK = (1 << 1) /* <li> containing block data */ -}; +} hoedown_list_flags; -enum hoedown_tableflags { +typedef enum hoedown_table_flags { HOEDOWN_TABLE_ALIGN_LEFT = 1, HOEDOWN_TABLE_ALIGN_RIGHT = 2, HOEDOWN_TABLE_ALIGN_CENTER = 3, HOEDOWN_TABLE_ALIGNMASK = 3, HOEDOWN_TABLE_HEADER = 4 -}; +} hoedown_table_flags; -/* hoedown_autolink - type of autolink */ -enum hoedown_autolink { +typedef enum hoedown_autolink_type { HOEDOWN_AUTOLINK_NONE, /* used internally when it is not an autolink*/ HOEDOWN_AUTOLINK_NORMAL, /* normal http/http/ftp/mailto/etc link */ HOEDOWN_AUTOLINK_EMAIL /* e-mail link without explit mailto: */ -}; +} hoedown_autolink_type; -/******************** - * TYPE DEFINITIONS * - ********************/ + +/********* + * TYPES * + *********/ + +struct hoedown_document; +typedef struct hoedown_document hoedown_document; + +struct hoedown_renderer_data { + void *opaque; +}; +typedef struct hoedown_renderer_data hoedown_renderer_data; /* hoedown_renderer - functions for rendering parsed data */ struct hoedown_renderer { @@ -93,71 +99,71 @@ struct hoedown_renderer { void *opaque; /* block level callbacks - NULL skips the block */ - void (*blockcode)(hoedown_buffer *ob, const hoedown_buffer *text, const hoedown_buffer *lang, void *opaque); - void (*blockquote)(hoedown_buffer *ob, const hoedown_buffer *text, void *opaque); - void (*blockhtml)(hoedown_buffer *ob,const hoedown_buffer *text, void *opaque); - void (*header)(hoedown_buffer *ob, const hoedown_buffer *text, int level, void *opaque); - void (*hrule)(hoedown_buffer *ob, void *opaque); - void (*list)(hoedown_buffer *ob, const hoedown_buffer *text, unsigned int flags, void *opaque); - void (*listitem)(hoedown_buffer *ob, const hoedown_buffer *text, unsigned int flags, void *opaque); - void (*paragraph)(hoedown_buffer *ob, const hoedown_buffer *text, void *opaque); - void (*table)(hoedown_buffer *ob, const hoedown_buffer *header, const hoedown_buffer *body, void *opaque); - void (*table_row)(hoedown_buffer *ob, const hoedown_buffer *text, void *opaque); - void (*table_cell)(hoedown_buffer *ob, const hoedown_buffer *text, unsigned int flags, void *opaque); - void (*footnotes)(hoedown_buffer *ob, const hoedown_buffer *text, void *opaque); - void (*footnote_def)(hoedown_buffer *ob, const hoedown_buffer *text, unsigned int num, void *opaque); + void (*blockcode)(hoedown_buffer *ob, const hoedown_buffer *text, const hoedown_buffer *lang, const hoedown_renderer_data *data); + void (*blockquote)(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); + void (*header)(hoedown_buffer *ob, const hoedown_buffer *content, int level, const hoedown_renderer_data *data); + void (*hrule)(hoedown_buffer *ob, const hoedown_renderer_data *data); + void (*list)(hoedown_buffer *ob, const hoedown_buffer *content, hoedown_list_flags flags, const hoedown_renderer_data *data); + void (*listitem)(hoedown_buffer *ob, const hoedown_buffer *content, hoedown_list_flags flags, const hoedown_renderer_data *data); + void (*paragraph)(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); + void (*table)(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); + void (*table_header)(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); + void (*table_body)(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); + void (*table_row)(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); + void (*table_cell)(hoedown_buffer *ob, const hoedown_buffer *content, hoedown_table_flags flags, const hoedown_renderer_data *data); + void (*footnotes)(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); + void (*footnote_def)(hoedown_buffer *ob, const hoedown_buffer *content, unsigned int num, const hoedown_renderer_data *data); + void (*blockhtml)(hoedown_buffer *ob, const hoedown_buffer *text, const hoedown_renderer_data *data); /* span level callbacks - NULL or return 0 prints the span verbatim */ - int (*autolink)(hoedown_buffer *ob, const hoedown_buffer *link, enum hoedown_autolink type, void *opaque); - int (*codespan)(hoedown_buffer *ob, const hoedown_buffer *text, void *opaque); - int (*double_emphasis)(hoedown_buffer *ob, const hoedown_buffer *text, void *opaque); - int (*emphasis)(hoedown_buffer *ob, const hoedown_buffer *text, void *opaque); - int (*underline)(hoedown_buffer *ob, const hoedown_buffer *text, void *opaque); - int (*highlight)(hoedown_buffer *ob, const hoedown_buffer *text, void *opaque); - int (*quote)(hoedown_buffer *ob, const hoedown_buffer *text, void *opaque); - int (*image)(hoedown_buffer *ob, const hoedown_buffer *link, const hoedown_buffer *title, const hoedown_buffer *alt, void *opaque); - int (*linebreak)(hoedown_buffer *ob, void *opaque); - int (*link)(hoedown_buffer *ob, const hoedown_buffer *link, const hoedown_buffer *title, const hoedown_buffer *content, void *opaque); - int (*raw_html_tag)(hoedown_buffer *ob, const hoedown_buffer *tag, void *opaque); - int (*triple_emphasis)(hoedown_buffer *ob, const hoedown_buffer *text, void *opaque); - int (*strikethrough)(hoedown_buffer *ob, const hoedown_buffer *text, void *opaque); - int (*superscript)(hoedown_buffer *ob, const hoedown_buffer *text, void *opaque); - int (*footnote_ref)(hoedown_buffer *ob, unsigned int num, void *opaque); - int (*math)(hoedown_buffer *ob, const hoedown_buffer *text, int displaymode, void *opaque); + int (*autolink)(hoedown_buffer *ob, const hoedown_buffer *link, hoedown_autolink_type type, const hoedown_renderer_data *data); + int (*codespan)(hoedown_buffer *ob, const hoedown_buffer *text, const hoedown_renderer_data *data); + int (*double_emphasis)(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); + int (*emphasis)(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); + int (*underline)(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); + int (*highlight)(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); + int (*quote)(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); + int (*image)(hoedown_buffer *ob, const hoedown_buffer *link, const hoedown_buffer *title, const hoedown_buffer *alt, const hoedown_renderer_data *data); + int (*linebreak)(hoedown_buffer *ob, const hoedown_renderer_data *data); + int (*link)(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_buffer *link, const hoedown_buffer *title, const hoedown_renderer_data *data); + int (*triple_emphasis)(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); + int (*strikethrough)(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); + int (*superscript)(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data); + int (*footnote_ref)(hoedown_buffer *ob, unsigned int num, const hoedown_renderer_data *data); + int (*math)(hoedown_buffer *ob, const hoedown_buffer *text, int displaymode, const hoedown_renderer_data *data); + int (*raw_html)(hoedown_buffer *ob, const hoedown_buffer *text, const hoedown_renderer_data *data); /* low level callbacks - NULL copies input directly into the output */ - void (*entity)(hoedown_buffer *ob, const hoedown_buffer *entity, void *opaque); - void (*normal_text)(hoedown_buffer *ob, const hoedown_buffer *text, void *opaque); + void (*entity)(hoedown_buffer *ob, const hoedown_buffer *text, const hoedown_renderer_data *data); + void (*normal_text)(hoedown_buffer *ob, const hoedown_buffer *text, const hoedown_renderer_data *data); - /* header and footer */ - void (*doc_header)(hoedown_buffer *ob, void *opaque); - void (*doc_footer)(hoedown_buffer *ob, void *opaque); + /* miscellaneous callbacks */ + void (*doc_header)(hoedown_buffer *ob, int inline_render, const hoedown_renderer_data *data); + void (*doc_footer)(hoedown_buffer *ob, int inline_render, const hoedown_renderer_data *data); }; - typedef struct hoedown_renderer hoedown_renderer; -struct hoedown_document; -typedef struct hoedown_document hoedown_document; +/************* + * FUNCTIONS * + *************/ -/********************** - * EXPORTED FUNCTIONS * - **********************/ - -extern hoedown_document * -hoedown_document_new( +/* hoedown_document_new: allocate a new document processor instance */ +hoedown_document *hoedown_document_new( const hoedown_renderer *renderer, - unsigned int extensions, - size_t max_nesting); + hoedown_extensions extensions, + size_t max_nesting +) __attribute__ ((malloc)); + +/* hoedown_document_render: render regular Markdown using the document processor */ +void hoedown_document_render(hoedown_document *doc, hoedown_buffer *ob, const uint8_t *data, size_t size); -extern void -hoedown_document_render(hoedown_document *doc, hoedown_buffer *ob, const uint8_t *document, size_t doc_size); +/* hoedown_document_render_inline: render inline Markdown using the document processor */ +void hoedown_document_render_inline(hoedown_document *doc, hoedown_buffer *ob, const uint8_t *data, size_t size); -extern void -hoedown_document_render_inline(hoedown_document *doc, hoedown_buffer *ob, const uint8_t *document, size_t doc_size); +/* hoedown_document_free: deallocate a document processor instance */ +void hoedown_document_free(hoedown_document *doc); -extern void -hoedown_document_free(hoedown_document *doc); #ifdef __cplusplus } |