cmark

My personal build of CMark ✏️

Commit
a3ee335cd94818b47b2499568ef4bbc95efd37bb
Parent
b779a59313850e2b7fad45a6da8ed7acfb58d518
Author
Nick Wellnhofer <wellnhofer@aevum.de>
Date

Use named enum types

Needed for C++ compatibility.

Diffstat

3 files changed, 50 insertions, 42 deletions

Status File Name N° Changes Insertions Deletions
Modified src/ast.h 80 44 36
Modified src/blocks.c 6 3 3
Modified src/cmark.c 6 3 3
diff --git a/src/ast.h b/src/ast.h
@@ -15,18 +15,20 @@ extern "C" {
 #define REFMAP_SIZE 16
 #define CMARK_MAX_LINK_LABEL_LENGTH 1000
 
+typedef 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
+} cmark_inl_tag;
+
 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;
+	cmark_inl_tag tag;
 	union {
 		cmark_chunk literal;
 		struct cmark_node_inl *inlines;
@@ -55,19 +57,23 @@ struct cmark_reference_map {
 
 typedef struct cmark_reference_map cmark_reference_map;
 
+typedef enum {
+	bullet,
+	ordered
+}  cmark_list_type;
+
+typedef enum {
+	period,
+	parens
+} cmark_delim_type;
+
 // Types for blocks
 struct cmark_ListData {
-	enum {
-		bullet,
-		ordered
-	}  list_type;
+	cmark_list_type   list_type;
 	int               marker_offset;
 	int               padding;
 	int               start;
-	enum {
-		period,
-		parens
-	} delimiter;
+	cmark_delim_type  delimiter;
 	unsigned char     bullet_char;
 	bool              tight;
 };
@@ -79,21 +85,23 @@ struct cmark_FencedCodeData {
 	cmark_strbuf      info;
 };
 
+typedef 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
+} cmark_block_tag;
+
 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;
+	cmark_block_tag tag;
 	int start_line;
 	int start_column;
 	int end_line;
@@ -132,11 +140,11 @@ struct cmark_node_inl *cmark_make_link(struct cmark_node_inl *label, unsigned ch
 
 struct cmark_node_inl* cmark_make_autolink(struct cmark_node_inl* label, cmark_chunk url, int is_email);
 
-struct cmark_node_inl* cmark_make_inlines(int t, struct cmark_node_inl* contents);
+struct cmark_node_inl* cmark_make_inlines(cmark_inl_tag t, struct cmark_node_inl* contents);
 
-struct cmark_node_inl* cmark_make_literal(int t, cmark_chunk s);
+struct cmark_node_inl* cmark_make_literal(cmark_inl_tag t, cmark_chunk s);
 
-struct cmark_node_inl* cmark_make_simple(int t);
+struct cmark_node_inl* cmark_make_simple(cmark_inl_tag t);
 
 // Macros for creating various kinds of simple.
 #define cmark_make_str(s) cmark_make_literal(INL_STRING, s)
diff --git a/src/blocks.c b/src/blocks.c
@@ -16,7 +16,7 @@
 
 #define peek_at(i, n) (i)->data[n]
 
-static node_block* make_block(int tag, int start_line, int start_column)
+static node_block* make_block(cmark_block_tag tag, int start_line, int start_column)
 {
 	node_block* e;
 
@@ -85,7 +85,7 @@ static bool is_blank(strbuf *s, int offset)
 	return true;
 }
 
-static inline bool can_contain(int parent_type, int child_type)
+static inline bool can_contain(cmark_block_tag parent_type, cmark_block_tag child_type)
 {
 	return ( parent_type == BLOCK_DOCUMENT ||
 			parent_type == BLOCK_BQUOTE ||
@@ -251,7 +251,7 @@ static void finalize(node_block* b, int line_number)
 
 // Add a node_block as child of another.  Return pointer to child.
 static node_block* add_child(node_block* parent,
-		int block_type, int start_line, int start_column)
+		cmark_block_tag block_type, int start_line, int start_column)
 {
 	assert(parent);
 
diff --git a/src/cmark.c b/src/cmark.c
@@ -108,7 +108,7 @@ inline cmark_node_inl* cmark_make_autolink(cmark_node_inl* label, chunk url, int
 	return cmark_make_link(label, clean_autolink(&url, is_email), NULL);
 }
 
-inline cmark_node_inl* cmark_make_inlines(int t, cmark_node_inl* contents)
+inline cmark_node_inl* cmark_make_inlines(cmark_inl_tag t, cmark_node_inl* contents)
 {
 	cmark_node_inl * e = (cmark_node_inl *)calloc(1, sizeof(*e));
 	if(e != NULL) {
@@ -120,7 +120,7 @@ inline cmark_node_inl* cmark_make_inlines(int t, cmark_node_inl* contents)
 }
 
 // Create an inline with a literal string value.
-inline cmark_node_inl* cmark_make_literal(int t, cmark_chunk s)
+inline cmark_node_inl* cmark_make_literal(cmark_inl_tag t, cmark_chunk s)
 {
 	cmark_node_inl * e = (cmark_node_inl *)calloc(1, sizeof(*e));
 	if(e != NULL) {
@@ -132,7 +132,7 @@ inline cmark_node_inl* cmark_make_literal(int t, cmark_chunk s)
 }
 
 // Create an inline with no value.
-inline cmark_node_inl* cmark_make_simple(int t)
+inline cmark_node_inl* cmark_make_simple(cmark_inl_tag t)
 {
 	cmark_node_inl* e = (cmark_node_inl *)calloc(1, sizeof(*e));
 	if(e != NULL) {