From abc95bdfa1fd4f4ffb5b0727aec34791a6e472e5 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 24 Oct 2014 20:22:05 -0700 Subject: Renamed c program and library stmd -> cmark. Also renamed internal library functions accordingly. --- src/cmark.h | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 src/cmark.h (limited to 'src/cmark.h') diff --git a/src/cmark.h b/src/cmark.h new file mode 100644 index 0000000..ff2f9a2 --- /dev/null +++ b/src/cmark.h @@ -0,0 +1,115 @@ +#ifndef _STDMD_H_ +#define _STDMD_H_ + +#include +#include +#include "buffer.h" +#include "chunk.h" +#include "references.h" + +#define VERSION "0.1" +#define CODE_INDENT 4 + +struct node_inl { + enum { + INL_STRING, + INL_SOFTBREAK, + INL_LINEBREAK, + INL_CODE, + INL_RAW_HTML, + INL_EMPH, + INL_STRONG, + INL_LINK, + INL_IMAGE + } tag; + union { + chunk literal; + struct node_inl *inlines; + struct { + struct node_inl *label; + unsigned char *url; + unsigned char *title; + } linkable; + } content; + struct node_inl *next; +}; + +typedef struct node_inl node_inl; + +// Types for blocks +struct ListData { + enum { + bullet, + ordered + } list_type; + int marker_offset; + int padding; + int start; + enum { + period, + parens + } delimiter; + unsigned char bullet_char; + bool tight; +}; + +struct FencedCodeData { + int fence_length; + int fence_offset; + unsigned char fence_char; + strbuf info; +}; + +struct node_block { + enum { + BLOCK_DOCUMENT, + BLOCK_BQUOTE, + BLOCK_LIST, + BLOCK_LIST_ITEM, + BLOCK_FENCED_CODE, + BLOCK_INDENTED_CODE, + BLOCK_HTML, + BLOCK_PARAGRAPH, + BLOCK_ATX_HEADER, + BLOCK_SETEXT_HEADER, + BLOCK_HRULE, + BLOCK_REFERENCE_DEF + } tag; + int start_line; + int start_column; + int end_line; + bool open; + bool last_line_blank; + struct node_block* children; + struct node_block* last_child; + struct node_block* parent; + struct node_block* top; + strbuf string_content; + node_inl* inline_content; + + union { + struct ListData list; + struct FencedCodeData code; + struct { + int level; + } header; + struct { + reference_map *refmap; + } document; + } as; + + struct node_block *next; + struct node_block *prev; +}; + +typedef struct node_block node_block; + +node_block *cmark_parse_document(const unsigned char *buffer, size_t len); +node_block *cmark_parse_file(FILE *f); + +void cmark_free_nodes(node_block *e); + +void cmark_debug_print(node_block *root); +void cmark_render_html(strbuf *html, node_block *root); + +#endif -- cgit v1.2.3