From 18169a8174cd0c49d64d95a3b9509a66d359da27 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Wed, 19 Nov 2014 16:18:44 +0100 Subject: Rename {get|set}_content to {get|set}_string_content --- src/node.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/node.c') diff --git a/src/node.c b/src/node.c index c5ce642..9119c63 100644 --- a/src/node.c +++ b/src/node.c @@ -96,7 +96,7 @@ S_strdup(const char *str) { } const char* -cmark_node_get_content(cmark_node *node) { +cmark_node_get_string_content(cmark_node *node) { switch (node->type) { case NODE_STRING: case NODE_INLINE_HTML: @@ -110,7 +110,7 @@ cmark_node_get_content(cmark_node *node) { } int -cmark_node_set_content(cmark_node *node, const char *content) { +cmark_node_set_string_content(cmark_node *node, const char *content) { switch (node->type) { case NODE_STRING: case NODE_INLINE_HTML: -- cgit v1.2.3 From b93d0b3a479bfc05dfbba0ad84172302df7f48cc Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Wed, 19 Nov 2014 16:28:48 +0100 Subject: Accessors for string content of code and HTML blocks --- src/node.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/node.c') diff --git a/src/node.c b/src/node.c index 9119c63..1b767ae 100644 --- a/src/node.c +++ b/src/node.c @@ -98,6 +98,11 @@ S_strdup(const char *str) { const char* cmark_node_get_string_content(cmark_node *node) { switch (node->type) { + case NODE_INDENTED_CODE: + case NODE_FENCED_CODE: + case NODE_HTML: + return cmark_strbuf_cstr(&node->string_content); + case NODE_STRING: case NODE_INLINE_HTML: case NODE_INLINE_CODE: @@ -112,6 +117,11 @@ cmark_node_get_string_content(cmark_node *node) { int cmark_node_set_string_content(cmark_node *node, const char *content) { switch (node->type) { + case NODE_INDENTED_CODE: + case NODE_FENCED_CODE: + case NODE_HTML: + cmark_strbuf_sets(&node->string_content, content); + case NODE_STRING: case NODE_INLINE_HTML: case NODE_INLINE_CODE: -- cgit v1.2.3 From 3776d23d40b8f638a2a97d7e54f2660c7c435090 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Wed, 19 Nov 2014 16:38:22 +0100 Subject: Accessors for header level --- src/node.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'src/node.c') diff --git a/src/node.c b/src/node.c index 1b767ae..56f3937 100644 --- a/src/node.c +++ b/src/node.c @@ -134,6 +134,35 @@ cmark_node_set_string_content(cmark_node *node, const char *content) { return 0; } +int +cmark_node_get_header_level(cmark_node *node) { + switch (node->type) { + case CMARK_NODE_ATX_HEADER: + case CMARK_NODE_SETEXT_HEADER: + return node->as.header.level; + + default: + break; + } + + return 0; +} + +int +cmark_node_set_header_level(cmark_node *node, int level) { + switch (node->type) { + case CMARK_NODE_ATX_HEADER: + case CMARK_NODE_SETEXT_HEADER: + node->as.header.level = level; + return 1; + + default: + break; + } + + return 0; +} + const char* cmark_node_get_url(cmark_node *node) { switch (node->type) { -- cgit v1.2.3 From 285879585db2f284a1ce0896c4775be8a260d6db Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Wed, 19 Nov 2014 16:53:53 +0100 Subject: Accessors for list data Only 'list_type', 'start', and 'tight' should be relevant for rendering. Accessors for other list data could be added for completeness but they don't seem very useful. --- src/node.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) (limited to 'src/node.c') diff --git a/src/node.c b/src/node.c index 56f3937..c1f29d3 100644 --- a/src/node.c +++ b/src/node.c @@ -163,6 +163,69 @@ cmark_node_set_header_level(cmark_node *node, int level) { return 0; } +cmark_list_type +cmark_node_get_list_type(cmark_node *node) { + if (node->type == CMARK_NODE_LIST) { + return node->as.list.list_type; + } + else { + return CMARK_NO_LIST; + } +} + +int +cmark_node_set_list_type(cmark_node *node, cmark_list_type type) { + if (node->type == CMARK_NODE_LIST) { + node->as.list.list_type = type; + return 1; + } + else { + return 0; + } +} + +int +cmark_node_get_list_start(cmark_node *node) { + if (node->type == CMARK_NODE_LIST) { + return node->as.list.start; + } + else { + return 0; + } +} + +int +cmark_node_set_list_start(cmark_node *node, int start) { + if (node->type == CMARK_NODE_LIST) { + node->as.list.start = start; + return 1; + } + else { + return 0; + } +} + +int +cmark_node_get_list_tight(cmark_node *node) { + if (node->type == CMARK_NODE_LIST) { + return node->as.list.tight; + } + else { + return 0; + } +} + +int +cmark_node_set_list_tight(cmark_node *node, int tight) { + if (node->type == CMARK_NODE_LIST) { + node->as.list.tight = tight; + return 1; + } + else { + return 0; + } +} + const char* cmark_node_get_url(cmark_node *node) { switch (node->type) { -- cgit v1.2.3 From 14588ca3cd25982bdd34e5fc20e69c611e1c8817 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Wed, 19 Nov 2014 17:02:04 +0100 Subject: Accessors for fence info Only fence info should be relevant for rendering. Accessors for other fenced code data could be added for completeness but they don't seem very useful. --- src/node.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/node.c') diff --git a/src/node.c b/src/node.c index c1f29d3..814e0e1 100644 --- a/src/node.c +++ b/src/node.c @@ -226,6 +226,27 @@ cmark_node_set_list_tight(cmark_node *node, int tight) { } } +const char* +cmark_node_get_fence_info(cmark_node *node) { + if (node->type == NODE_FENCED_CODE) { + return cmark_strbuf_cstr(&node->as.code.info); + } + else { + return NULL; + } +} + +int +cmark_node_set_fence_info(cmark_node *node, const char *info) { + if (node->type == NODE_FENCED_CODE) { + cmark_strbuf_sets(&node->as.code.info, info); + return 1; + } + else { + return 0; + } +} + const char* cmark_node_get_url(cmark_node *node) { switch (node->type) { -- cgit v1.2.3 From fd13d0211f33a134a4c73882f1f2eaa423f1794a Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Wed, 19 Nov 2014 17:05:04 +0100 Subject: Accessors for link titles --- src/node.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/node.c') diff --git a/src/node.c b/src/node.c index 814e0e1..f2649e9 100644 --- a/src/node.c +++ b/src/node.c @@ -275,6 +275,34 @@ cmark_node_set_url(cmark_node *node, const char *url) { return 0; } +const char* +cmark_node_get_title(cmark_node *node) { + switch (node->type) { + case NODE_LINK: + case NODE_IMAGE: + return (char *)node->as.link.title; + default: + break; + } + + return NULL; +} + +int +cmark_node_set_title(cmark_node *node, const char *title) { + switch (node->type) { + case NODE_LINK: + case NODE_IMAGE: + free(node->as.link.title); + node->as.link.title = (unsigned char *)S_strdup(title); + return 1; + default: + break; + } + + return 0; +} + static inline bool S_is_block(cmark_node *node) { return node->type >= CMARK_NODE_FIRST_BLOCK -- cgit v1.2.3 From 7f8a0d96dd3ab34b4f8ec233fd243f53a01a4e6a Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Wed, 19 Nov 2014 17:08:03 +0100 Subject: Accessors for start_line, start_column, end_line These are read-only as they're only metadata returned by the parser. --- src/node.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/node.c') diff --git a/src/node.c b/src/node.c index f2649e9..8b8b988 100644 --- a/src/node.c +++ b/src/node.c @@ -303,6 +303,21 @@ cmark_node_set_title(cmark_node *node, const char *title) { return 0; } +int +cmark_node_get_start_line(cmark_node *node) { + return node->start_line; +} + +int +cmark_node_get_start_column(cmark_node *node) { + return node->start_column; +} + +int +cmark_node_get_end_line(cmark_node *node) { + return node->end_line; +} + static inline bool S_is_block(cmark_node *node) { return node->type >= CMARK_NODE_FIRST_BLOCK -- cgit v1.2.3 From ce4b717d6a05d707ea19eee68a74dd3621de3513 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Wed, 19 Nov 2014 18:06:03 +0100 Subject: Fix {get|set}_string_content --- src/node.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/node.c') diff --git a/src/node.c b/src/node.c index 8b8b988..190deb9 100644 --- a/src/node.c +++ b/src/node.c @@ -107,6 +107,7 @@ cmark_node_get_string_content(cmark_node *node) { case NODE_INLINE_HTML: case NODE_INLINE_CODE: return cmark_chunk_to_cstr(&node->as.literal); + default: break; } @@ -121,12 +122,14 @@ cmark_node_set_string_content(cmark_node *node, const char *content) { case NODE_FENCED_CODE: case NODE_HTML: cmark_strbuf_sets(&node->string_content, content); + return 1; case NODE_STRING: case NODE_INLINE_HTML: case NODE_INLINE_CODE: cmark_chunk_set_cstr(&node->as.literal, content); return 1; + default: break; } -- cgit v1.2.3 From f77dcb217261148de1c57c8b042873efbad81d20 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Wed, 19 Nov 2014 18:37:52 +0100 Subject: Input validation for setters --- src/node.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src/node.c') diff --git a/src/node.c b/src/node.c index 190deb9..624baad 100644 --- a/src/node.c +++ b/src/node.c @@ -153,6 +153,10 @@ cmark_node_get_header_level(cmark_node *node) { int cmark_node_set_header_level(cmark_node *node, int level) { + if (level < 1 || level > 6) { + return 0; + } + switch (node->type) { case CMARK_NODE_ATX_HEADER: case CMARK_NODE_SETEXT_HEADER: @@ -178,6 +182,10 @@ cmark_node_get_list_type(cmark_node *node) { int cmark_node_set_list_type(cmark_node *node, cmark_list_type type) { + if (!(type == CMARK_BULLET_LIST || type == CMARK_ORDERED_LIST)) { + return 0; + } + if (node->type == CMARK_NODE_LIST) { node->as.list.list_type = type; return 1; @@ -199,6 +207,10 @@ cmark_node_get_list_start(cmark_node *node) { int cmark_node_set_list_start(cmark_node *node, int start) { + if (start < 0) { + return 0; + } + if (node->type == CMARK_NODE_LIST) { node->as.list.start = start; return 1; -- cgit v1.2.3