summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/CMakeLists.txt2
-rw-r--r--src/ast.c165
-rw-r--r--src/ast.h170
-rw-r--r--src/cmark.c163
-rw-r--r--src/cmark.h160
-rw-r--r--src/inlines.c1
-rw-r--r--src/references.c1
-rw-r--r--src/references.h2
8 files changed, 324 insertions, 340 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 3157bd1..e95422c 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -2,7 +2,6 @@ cmake_minimum_required(VERSION 2.8)
set(LIBRARY "cmark-shared")
set(HEADERS
cmark.h
- ast.h
buffer.h
chunk.h
references.h
@@ -16,7 +15,6 @@ set(HEADERS
)
set(LIBRARY_SOURCES
cmark.c
- ast.c
blocks.c
inlines.c
print.c
diff --git a/src/ast.c b/src/ast.c
deleted file mode 100644
index 6e3f0ee..0000000
--- a/src/ast.c
+++ /dev/null
@@ -1,165 +0,0 @@
-#include <stdbool.h>
-#include <stdio.h>
-#include "buffer.h"
-#include "ast.h"
-#include "references.h"
-#include "html/houdini.h"
-
-// Free a node_block list and any children.
-void cmark_free_blocks(cmark_node_block *e)
-{
- cmark_node_block * next;
- while (e != NULL) {
- cmark_free_inlines(e->inline_content);
- strbuf_free(&e->string_content);
- if (e->tag == CMARK_BLOCK_FENCED_CODE) {
- strbuf_free(&e->as.code.info);
- } else if (e->tag == CMARK_BLOCK_DOCUMENT) {
- reference_map_free(e->as.document.refmap);
- }
- if (e->last_child) {
- // Splice children into list
- e->last_child->next = e->next;
- e->next = e->children;
- }
- next = e->next;
- free(e);
- e = next;
- }
-}
-
-// Utility function used by free_inlines
-static void splice_into_list(cmark_node_inl* e, node_inl* children) {
- cmark_node_inl * tmp;
- if (children) {
- tmp = children;
- // Find last child
- while (tmp->next) {
- tmp = tmp->next;
- }
- // Splice children into list
- tmp->next = e->next;
- e->next = children;
- }
- return ;
-}
-
-// Free an inline list. Avoid recursion to prevent stack overflows
-// on deeply nested structures.
-void cmark_free_inlines(cmark_node_inl* e)
-{
- node_inl * next;
-
- while (e != NULL) {
- switch (e->tag){
- case CMARK_INL_STRING:
- case CMARK_INL_RAW_HTML:
- case CMARK_INL_CODE:
- cmark_chunk_free(&e->content.literal);
- break;
- case CMARK_INL_LINEBREAK:
- case CMARK_INL_SOFTBREAK:
- break;
- case CMARK_INL_LINK:
- case CMARK_INL_IMAGE:
- free(e->content.linkable.url);
- free(e->content.linkable.title);
- splice_into_list(e, e->content.linkable.label);
- break;
- case CMARK_INL_EMPH:
- case CMARK_INL_STRONG:
- splice_into_list(e, e->content.inlines);
- break;
- default:
- fprintf(stderr, "[WARN] (%s:%d) Unknown inline tag %d",
- __FILE__, __LINE__, e->tag);
- break;
- }
- next = e->next;
- free(e);
- e = next;
- }
-}
-
-inline cmark_node_inl *cmark_make_link(cmark_node_inl *label, unsigned char *url, unsigned char *title)
-{
- cmark_node_inl* e = calloc(1, sizeof(*e));
- if(e != NULL) {
- e->tag = CMARK_INL_LINK;
- e->content.linkable.label = label;
- e->content.linkable.url = url;
- e->content.linkable.title = title;
- e->next = NULL;
- }
- return e;
-}
-
-unsigned char *clean_autolink(chunk *url, int is_email)
-{
- strbuf buf = GH_BUF_INIT;
-
- chunk_trim(url);
-
- if (url->len == 0)
- return NULL;
-
- if (is_email)
- strbuf_puts(&buf, "mailto:");
-
- houdini_unescape_html_f(&buf, url->data, url->len);
- return strbuf_detach(&buf);
-}
-
-cmark_node_inl* cmark_make_autolink(cmark_node_inl* label, chunk url, int is_email)
-{
- return cmark_make_link(label, clean_autolink(&url, is_email), NULL);
-}
-
-inline cmark_node_inl* cmark_make_inlines(int t, cmark_node_inl* contents)
-{
- cmark_node_inl * e = calloc(1, sizeof(*e));
- if(e != NULL) {
- e->tag = t;
- e->content.inlines = contents;
- e->next = NULL;
- }
- return e;
-}
-
-// Create an inline with a literal string value.
-inline cmark_node_inl* cmark_make_literal(int t, cmark_chunk s)
-{
- cmark_node_inl * e = calloc(1, sizeof(*e));
- if(e != NULL) {
- e->tag = t;
- e->content.literal = s;
- e->next = NULL;
- }
- return e;
-}
-
-// Create an inline with no value.
-inline cmark_node_inl* cmark_make_simple(int t)
-{
- cmark_node_inl* e = calloc(1, sizeof(*e));
- if(e != NULL) {
- e->tag = t;
- e->next = NULL;
- }
- return e;
-}
-
-// Append inline list b to the end of inline list a.
-// Return pointer to head of new list.
-inline cmark_node_inl* cmark_append_inlines(cmark_node_inl* a, cmark_node_inl* b)
-{
- if (a == NULL) { // NULL acts like an empty list
- return b;
- }
- cmark_node_inl* cur = a;
- while (cur->next) {
- cur = cur->next;
- }
- cur->next = b;
- return a;
-}
diff --git a/src/ast.h b/src/ast.h
deleted file mode 100644
index 952be8f..0000000
--- a/src/ast.h
+++ /dev/null
@@ -1,170 +0,0 @@
-#ifndef _AST_H_
-#define _AST_H_
-
-#include <stdbool.h>
-#include <stdio.h>
-#include "buffer.h"
-#include "chunk.h"
-#include "references.h"
-
-struct cmark_node_inl {
- enum {
- CMARK_INL_STRING,
- CMARK_INL_SOFTBREAK,
- CMARK_INL_LINEBREAK,
- CMARK_INL_CODE,
- CMARK_INL_RAW_HTML,
- CMARK_INL_EMPH,
- CMARK_INL_STRONG,
- CMARK_INL_LINK,
- CMARK_INL_IMAGE
- } tag;
- union {
- cmark_chunk literal;
- struct cmark_node_inl *inlines;
- struct {
- struct cmark_node_inl *label;
- unsigned char *url;
- unsigned char *title;
- } linkable;
- } content;
- struct cmark_node_inl *next;
-};
-
-typedef struct cmark_node_inl cmark_node_inl;
-
-// Types for blocks
-struct cmark_ListData {
- enum {
- bullet,
- ordered
- } list_type;
- int marker_offset;
- int padding;
- int start;
- enum {
- period,
- parens
- } delimiter;
- unsigned char bullet_char;
- bool tight;
-};
-
-struct cmark_FencedCodeData {
- int fence_length;
- int fence_offset;
- unsigned char fence_char;
- cmark_strbuf info;
-};
-
-struct cmark_node_block {
- enum {
- CMARK_BLOCK_DOCUMENT,
- CMARK_BLOCK_BQUOTE,
- CMARK_BLOCK_LIST,
- CMARK_BLOCK_LIST_ITEM,
- CMARK_BLOCK_FENCED_CODE,
- CMARK_BLOCK_INDENTED_CODE,
- CMARK_BLOCK_HTML,
- CMARK_BLOCK_PARAGRAPH,
- CMARK_BLOCK_ATX_HEADER,
- CMARK_BLOCK_SETEXT_HEADER,
- CMARK_BLOCK_HRULE,
- CMARK_BLOCK_REFERENCE_DEF
- } tag;
- int start_line;
- int start_column;
- int end_line;
- bool open;
- bool last_line_blank;
- struct cmark_node_block* children;
- struct cmark_node_block* last_child;
- struct cmark_node_block* parent;
- struct cmark_node_block* top;
- cmark_strbuf string_content;
- cmark_node_inl* inline_content;
-
- union {
- struct cmark_ListData list;
- struct cmark_FencedCodeData code;
- struct {
- int level;
- } header;
- struct {
- cmark_reference_map *refmap;
- } document;
- } as;
-
- struct cmark_node_block *next;
- struct cmark_node_block *prev;
-};
-
-typedef struct cmark_node_block cmark_node_block;
-
-void cmark_free_blocks(cmark_node_block *e);
-void cmark_free_inlines(cmark_node_inl* e);
-void cmark_free_simple(cmark_node_inl *e);
-cmark_node_inl* cmark_append_inlines(cmark_node_inl* a, cmark_node_inl* b);
-
-cmark_node_inl *cmark_make_link(cmark_node_inl *label, unsigned char *url, unsigned char *title);
-cmark_node_inl* cmark_make_autolink(cmark_node_inl* label, cmark_chunk url, int is_email);
-
-cmark_node_inl* cmark_make_inlines(int t, cmark_node_inl* contents);
-cmark_node_inl* cmark_make_literal(int t, cmark_chunk s);
-cmark_node_inl* cmark_make_simple(int t);
-
-// Macros for creating various kinds of simple.
-#define cmark_make_str(s) cmark_make_literal(INL_STRING, s)
-#define cmark_make_code(s) cmark_make_literal(INL_CODE, s)
-#define cmark_make_raw_html(s) cmark_make_literal(INL_RAW_HTML, s)
-#define cmark_make_linebreak() cmark_make_simple(INL_LINEBREAK)
-#define cmark_make_softbreak() cmark_make_simple(INL_SOFTBREAK)
-#define cmark_make_emph(contents) cmark_make_inlines(INL_EMPH, contents)
-#define cmark_make_strong(contents) cmark_make_inlines(INL_STRONG, contents)
-
-
-
-#ifndef CMARK_NO_SHORT_NAMES
- #define node_inl cmark_node_inl
- #define INL_STRING CMARK_INL_STRING
- #define INL_SOFTBREAK CMARK_INL_SOFTBREAK
- #define INL_LINEBREAK CMARK_INL_LINEBREAK
- #define INL_CODE CMARK_INL_CODE
- #define INL_RAW_HTML CMARK_INL_RAW_HTML
- #define INL_EMPH CMARK_INL_EMPH
- #define INL_STRONG CMARK_INL_STRONG
- #define INL_LINK CMARK_INL_LINK
- #define INL_IMAGE CMARK_INL_IMAGE
- #define ListData cmark_ListData
- #define FencedCodeData cmark_FencedCodeData
- #define node_block cmark_node_block
- #define BLOCK_DOCUMENT CMARK_BLOCK_DOCUMENT
- #define BLOCK_BQUOTE CMARK_BLOCK_BQUOTE
- #define BLOCK_LIST CMARK_BLOCK_LIST
- #define BLOCK_LIST_ITEM CMARK_BLOCK_LIST_ITEM
- #define BLOCK_FENCED_CODE CMARK_BLOCK_FENCED_CODE
- #define BLOCK_INDENTED_CODE CMARK_BLOCK_INDENTED_CODE
- #define BLOCK_HTML CMARK_BLOCK_HTML
- #define BLOCK_PARAGRAPH CMARK_BLOCK_PARAGRAPH
- #define BLOCK_ATX_HEADER CMARK_BLOCK_ATX_HEADER
- #define BLOCK_SETEXT_HEADER CMARK_BLOCK_SETEXT_HEADER
- #define BLOCK_HRULE CMARK_BLOCK_HRULE
- #define BLOCK_REFERENCE_DEF CMARK_BLOCK_REFERENCE_DEF
- #define free_simple cmark_free_simple
- #define free_blocks cmark_free_blocks
- #define append_simple cmark_append_simple
- #define make_link cmark_make_link
- #define make_autolink cmark_make_autolink
- #define make_str cmark_make_str
- #define make_code cmark_make_code
- #define make_raw_html cmark_make_raw_html
- #define make_linebreak cmark_make_linebreak
- #define make_softbreak cmark_make_softbreak
- #define make_emph cmark_make_emph
- #define make_strong cmark_make_strong
- #define make_simple cmark_make_simple
- #define make_simple cmark_make_simple
- #define make_simple cmark_make_simple
-#endif
-
-#endif
diff --git a/src/cmark.c b/src/cmark.c
index 8f5c4e8..eacf411 100644
--- a/src/cmark.c
+++ b/src/cmark.c
@@ -1,7 +1,9 @@
#include <stdlib.h>
#include <assert.h>
#include <stdio.h>
-
+#include <stdbool.h>
+#include "references.h"
+#include "html/houdini.h"
#include "cmark.h"
#include "buffer.h"
@@ -21,3 +23,162 @@ extern unsigned char *cmark_markdown_to_html(unsigned char *text, int len)
return result;
}
+
+// Free a node_block list and any children.
+void cmark_free_blocks(cmark_node_block *e)
+{
+ cmark_node_block * next;
+ while (e != NULL) {
+ cmark_free_inlines(e->inline_content);
+ strbuf_free(&e->string_content);
+ if (e->tag == CMARK_BLOCK_FENCED_CODE) {
+ strbuf_free(&e->as.code.info);
+ } else if (e->tag == CMARK_BLOCK_DOCUMENT) {
+ reference_map_free(e->as.document.refmap);
+ }
+ if (e->last_child) {
+ // Splice children into list
+ e->last_child->next = e->next;
+ e->next = e->children;
+ }
+ next = e->next;
+ free(e);
+ e = next;
+ }
+}
+
+// Utility function used by free_inlines
+static void splice_into_list(cmark_node_inl* e, node_inl* children) {
+ cmark_node_inl * tmp;
+ if (children) {
+ tmp = children;
+ // Find last child
+ while (tmp->next) {
+ tmp = tmp->next;
+ }
+ // Splice children into list
+ tmp->next = e->next;
+ e->next = children;
+ }
+ return ;
+}
+
+// Free an inline list. Avoid recursion to prevent stack overflows
+// on deeply nested structures.
+void cmark_free_inlines(cmark_node_inl* e)
+{
+ node_inl * next;
+
+ while (e != NULL) {
+ switch (e->tag){
+ case CMARK_INL_STRING:
+ case CMARK_INL_RAW_HTML:
+ case CMARK_INL_CODE:
+ cmark_chunk_free(&e->content.literal);
+ break;
+ case CMARK_INL_LINEBREAK:
+ case CMARK_INL_SOFTBREAK:
+ break;
+ case CMARK_INL_LINK:
+ case CMARK_INL_IMAGE:
+ free(e->content.linkable.url);
+ free(e->content.linkable.title);
+ splice_into_list(e, e->content.linkable.label);
+ break;
+ case CMARK_INL_EMPH:
+ case CMARK_INL_STRONG:
+ splice_into_list(e, e->content.inlines);
+ break;
+ default:
+ fprintf(stderr, "[WARN] (%s:%d) Unknown inline tag %d",
+ __FILE__, __LINE__, e->tag);
+ break;
+ }
+ next = e->next;
+ free(e);
+ e = next;
+ }
+}
+
+inline cmark_node_inl *cmark_make_link(cmark_node_inl *label, unsigned char *url, unsigned char *title)
+{
+ cmark_node_inl* e = calloc(1, sizeof(*e));
+ if(e != NULL) {
+ e->tag = CMARK_INL_LINK;
+ e->content.linkable.label = label;
+ e->content.linkable.url = url;
+ e->content.linkable.title = title;
+ e->next = NULL;
+ }
+ return e;
+}
+
+unsigned char *clean_autolink(chunk *url, int is_email)
+{
+ strbuf buf = GH_BUF_INIT;
+
+ chunk_trim(url);
+
+ if (url->len == 0)
+ return NULL;
+
+ if (is_email)
+ strbuf_puts(&buf, "mailto:");
+
+ houdini_unescape_html_f(&buf, url->data, url->len);
+ return strbuf_detach(&buf);
+}
+
+cmark_node_inl* cmark_make_autolink(cmark_node_inl* label, chunk url, int is_email)
+{
+ return cmark_make_link(label, clean_autolink(&url, is_email), NULL);
+}
+
+inline cmark_node_inl* cmark_make_inlines(int t, cmark_node_inl* contents)
+{
+ cmark_node_inl * e = calloc(1, sizeof(*e));
+ if(e != NULL) {
+ e->tag = t;
+ e->content.inlines = contents;
+ e->next = NULL;
+ }
+ return e;
+}
+
+// Create an inline with a literal string value.
+inline cmark_node_inl* cmark_make_literal(int t, cmark_chunk s)
+{
+ cmark_node_inl * e = calloc(1, sizeof(*e));
+ if(e != NULL) {
+ e->tag = t;
+ e->content.literal = s;
+ e->next = NULL;
+ }
+ return e;
+}
+
+// Create an inline with no value.
+inline cmark_node_inl* cmark_make_simple(int t)
+{
+ cmark_node_inl* e = calloc(1, sizeof(*e));
+ if(e != NULL) {
+ e->tag = t;
+ e->next = NULL;
+ }
+ return e;
+}
+
+// Append inline list b to the end of inline list a.
+// Return pointer to head of new list.
+inline cmark_node_inl* cmark_append_inlines(cmark_node_inl* a, cmark_node_inl* b)
+{
+ if (a == NULL) { // NULL acts like an empty list
+ return b;
+ }
+ cmark_node_inl* cur = a;
+ while (cur->next) {
+ cur = cur->next;
+ }
+ cur->next = b;
+ return a;
+}
diff --git a/src/cmark.h b/src/cmark.h
index 7371d33..7ab3995 100644
--- a/src/cmark.h
+++ b/src/cmark.h
@@ -4,7 +4,8 @@
#include <stdbool.h>
#include <stdio.h>
#include "buffer.h"
-#include "ast.h"
+#include "chunk.h"
+#include "references.h"
#ifdef __cplusplus
extern "C" {
@@ -15,6 +16,121 @@ extern "C" {
#define CMARK_MAX_LINK_LABEL_LENGTH 1000
+struct cmark_node_inl {
+ enum {
+ CMARK_INL_STRING,
+ CMARK_INL_SOFTBREAK,
+ CMARK_INL_LINEBREAK,
+ CMARK_INL_CODE,
+ CMARK_INL_RAW_HTML,
+ CMARK_INL_EMPH,
+ CMARK_INL_STRONG,
+ CMARK_INL_LINK,
+ CMARK_INL_IMAGE
+ } tag;
+ union {
+ cmark_chunk literal;
+ struct cmark_node_inl *inlines;
+ struct {
+ struct cmark_node_inl *label;
+ unsigned char *url;
+ unsigned char *title;
+ } linkable;
+ } content;
+ struct cmark_node_inl *next;
+};
+
+typedef struct cmark_node_inl cmark_node_inl;
+
+// Types for blocks
+struct cmark_ListData {
+ enum {
+ bullet,
+ ordered
+ } list_type;
+ int marker_offset;
+ int padding;
+ int start;
+ enum {
+ period,
+ parens
+ } delimiter;
+ unsigned char bullet_char;
+ bool tight;
+};
+
+struct cmark_FencedCodeData {
+ int fence_length;
+ int fence_offset;
+ unsigned char fence_char;
+ cmark_strbuf info;
+};
+
+struct cmark_node_block {
+ enum {
+ CMARK_BLOCK_DOCUMENT,
+ CMARK_BLOCK_BQUOTE,
+ CMARK_BLOCK_LIST,
+ CMARK_BLOCK_LIST_ITEM,
+ CMARK_BLOCK_FENCED_CODE,
+ CMARK_BLOCK_INDENTED_CODE,
+ CMARK_BLOCK_HTML,
+ CMARK_BLOCK_PARAGRAPH,
+ CMARK_BLOCK_ATX_HEADER,
+ CMARK_BLOCK_SETEXT_HEADER,
+ CMARK_BLOCK_HRULE,
+ CMARK_BLOCK_REFERENCE_DEF
+ } tag;
+ int start_line;
+ int start_column;
+ int end_line;
+ bool open;
+ bool last_line_blank;
+ struct cmark_node_block* children;
+ struct cmark_node_block* last_child;
+ struct cmark_node_block* parent;
+ struct cmark_node_block* top;
+ cmark_strbuf string_content;
+ cmark_node_inl* inline_content;
+
+ union {
+ struct cmark_ListData list;
+ struct cmark_FencedCodeData code;
+ struct {
+ int level;
+ } header;
+ struct {
+ cmark_reference_map *refmap;
+ } document;
+ } as;
+
+ struct cmark_node_block *next;
+ struct cmark_node_block *prev;
+};
+
+typedef struct cmark_node_block cmark_node_block;
+
+void cmark_free_blocks(cmark_node_block *e);
+void cmark_free_inlines(cmark_node_inl* e);
+void cmark_free_simple(cmark_node_inl *e);
+cmark_node_inl* cmark_append_inlines(cmark_node_inl* a, cmark_node_inl* b);
+
+cmark_node_inl *cmark_make_link(cmark_node_inl *label, unsigned char *url, unsigned char *title);
+cmark_node_inl* cmark_make_autolink(cmark_node_inl* label, cmark_chunk url, int is_email);
+
+cmark_node_inl* cmark_make_inlines(int t, cmark_node_inl* contents);
+cmark_node_inl* cmark_make_literal(int t, cmark_chunk s);
+cmark_node_inl* cmark_make_simple(int t);
+
+// Macros for creating various kinds of simple.
+#define cmark_make_str(s) cmark_make_literal(INL_STRING, s)
+#define cmark_make_code(s) cmark_make_literal(INL_CODE, s)
+#define cmark_make_raw_html(s) cmark_make_literal(INL_RAW_HTML, s)
+#define cmark_make_linebreak() cmark_make_simple(INL_LINEBREAK)
+#define cmark_make_softbreak() cmark_make_simple(INL_SOFTBREAK)
+#define cmark_make_emph(contents) cmark_make_inlines(INL_EMPH, contents)
+#define cmark_make_strong(contents) cmark_make_inlines(INL_STRONG, contents)
+
__attribute__((visibility("default")))
cmark_node_block *cmark_parse_document(const unsigned char *buffer, size_t len);
@@ -30,10 +146,52 @@ void cmark_render_html(cmark_strbuf *html, cmark_node_block *root);
__attribute__((visibility("default")))
unsigned char *cmark_markdown_to_html(unsigned char *text, int len);
+
+
#ifndef CMARK_NO_SHORT_NAMES
#define VERSION CMARK_VERSION
#define CODE_INDENT CMARK_CODE_INDENT
#define MAX_LINK_LABEL_LENGTH CMARK_MAX_LINK_LABEL_LENGTH
+ #define node_inl cmark_node_inl
+ #define INL_STRING CMARK_INL_STRING
+ #define INL_SOFTBREAK CMARK_INL_SOFTBREAK
+ #define INL_LINEBREAK CMARK_INL_LINEBREAK
+ #define INL_CODE CMARK_INL_CODE
+ #define INL_RAW_HTML CMARK_INL_RAW_HTML
+ #define INL_EMPH CMARK_INL_EMPH
+ #define INL_STRONG CMARK_INL_STRONG
+ #define INL_LINK CMARK_INL_LINK
+ #define INL_IMAGE CMARK_INL_IMAGE
+ #define ListData cmark_ListData
+ #define FencedCodeData cmark_FencedCodeData
+ #define node_block cmark_node_block
+ #define BLOCK_DOCUMENT CMARK_BLOCK_DOCUMENT
+ #define BLOCK_BQUOTE CMARK_BLOCK_BQUOTE
+ #define BLOCK_LIST CMARK_BLOCK_LIST
+ #define BLOCK_LIST_ITEM CMARK_BLOCK_LIST_ITEM
+ #define BLOCK_FENCED_CODE CMARK_BLOCK_FENCED_CODE
+ #define BLOCK_INDENTED_CODE CMARK_BLOCK_INDENTED_CODE
+ #define BLOCK_HTML CMARK_BLOCK_HTML
+ #define BLOCK_PARAGRAPH CMARK_BLOCK_PARAGRAPH
+ #define BLOCK_ATX_HEADER CMARK_BLOCK_ATX_HEADER
+ #define BLOCK_SETEXT_HEADER CMARK_BLOCK_SETEXT_HEADER
+ #define BLOCK_HRULE CMARK_BLOCK_HRULE
+ #define BLOCK_REFERENCE_DEF CMARK_BLOCK_REFERENCE_DEF
+ #define free_simple cmark_free_simple
+ #define free_blocks cmark_free_blocks
+ #define append_simple cmark_append_simple
+ #define make_link cmark_make_link
+ #define make_autolink cmark_make_autolink
+ #define make_str cmark_make_str
+ #define make_code cmark_make_code
+ #define make_raw_html cmark_make_raw_html
+ #define make_linebreak cmark_make_linebreak
+ #define make_softbreak cmark_make_softbreak
+ #define make_emph cmark_make_emph
+ #define make_strong cmark_make_strong
+ #define make_simple cmark_make_simple
+ #define make_simple cmark_make_simple
+ #define make_simple cmark_make_simple
#endif
#ifdef __cplusplus
diff --git a/src/inlines.c b/src/inlines.c
index 78ebaf4..0dabbd3 100644
--- a/src/inlines.c
+++ b/src/inlines.c
@@ -8,7 +8,6 @@
#include "html/houdini.h"
#include "utf8.h"
#include "scanners.h"
-#include "ast.h"
#include "inlines.h"
diff --git a/src/references.c b/src/references.c
index def4dd8..e39b836 100644
--- a/src/references.c
+++ b/src/references.c
@@ -2,6 +2,7 @@
#include "utf8.h"
#include "references.h"
#include "inlines.h"
+#include "chunk.h"
static unsigned int
refhash(const unsigned char *link_ref)
diff --git a/src/references.h b/src/references.h
index 1bc187a..c4ca6df 100644
--- a/src/references.h
+++ b/src/references.h
@@ -3,6 +3,8 @@
#define REFMAP_SIZE 16
+#include "chunk.h"
+
struct cmark_reference {
struct cmark_reference *next;
unsigned char *label;