summaryrefslogtreecommitdiff
path: root/src/print.c
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2014-12-28 20:28:11 -0800
committerJohn MacFarlane <jgm@berkeley.edu>2014-12-28 20:29:04 -0800
commit327be06f9e1741abb188bc1aa0df8a619972734b (patch)
treefa45972ef8a25fe5748bf31d56411bcf2374cc17 /src/print.c
parent010e64842352db62474f0c3a1d8a18207a547e14 (diff)
Removed old 'ast' format, now that we have 'xml'.
The xml representation of the AST is not quite as pretty, but it contains the same information and is not in an ad hoc format. See #53.
Diffstat (limited to 'src/print.c')
-rw-r--r--src/print.c168
1 files changed, 0 insertions, 168 deletions
diff --git a/src/print.c b/src/print.c
deleted file mode 100644
index 98e5fd2..0000000
--- a/src/print.c
+++ /dev/null
@@ -1,168 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include "cmark.h"
-#include "buffer.h"
-#include "node.h"
-
-#define INDENT 2
-
-static void print_str(cmark_strbuf* buffer, const unsigned char *s, int len)
-{
- int i;
-
- if (len < 0)
- len = strlen((char *)s);
-
- cmark_strbuf_putc(buffer, '"');
- for (i = 0; i < len; ++i) {
- unsigned char c = s[i];
-
- switch (c) {
- case '\n':
- cmark_strbuf_printf(buffer, "\\n");
- break;
- case '"':
- cmark_strbuf_printf(buffer, "\\\"");
- break;
- case '\\':
- cmark_strbuf_printf(buffer, "\\\\");
- break;
- default:
- cmark_strbuf_putc(buffer, (int)c);
- }
- }
- cmark_strbuf_putc(buffer, '"');
-}
-
-// Prettyprint an inline list, for debugging.
-static void render_nodes(cmark_strbuf* buffer, cmark_node* node, int indent)
-{
- int i;
- cmark_list *data;
-
- while(node != NULL) {
- for (i=0; i < indent; i++) {
- cmark_strbuf_putc(buffer, ' ');
- }
- switch(node->type) {
- case NODE_DOCUMENT:
- break;
- case NODE_BLOCK_QUOTE:
- cmark_strbuf_printf(buffer, "block_quote\n");
- break;
- case NODE_ITEM:
- cmark_strbuf_printf(buffer, "list_item\n");
- break;
- case NODE_LIST:
- data = &(node->as.list);
- if (data->list_type == CMARK_ORDERED_LIST) {
- cmark_strbuf_printf(buffer, "list (type=ordered tight=%s start=%d delim=%s)\n",
- (data->tight ? "true" : "false"),
- data->start,
- (data->delimiter == CMARK_PAREN_DELIM ? "parens" : "period"));
- } else {
- cmark_strbuf_printf(buffer, "list (type=bullet tight=%s bullet_char=%c)\n",
- (data->tight ? "true" : "false"),
- data->bullet_char);
- }
- break;
- case NODE_HEADER:
- cmark_strbuf_printf(buffer, "header (level=%d)\n", node->as.header.level);
- break;
- case NODE_PARAGRAPH:
- cmark_strbuf_printf(buffer, "paragraph\n");
- break;
- case NODE_HRULE:
- cmark_strbuf_printf(buffer, "hrule\n");
- break;
- case NODE_CODE_BLOCK:
- cmark_strbuf_printf(buffer, "code_block fenced=%d fence_length=%d info=", node->as.code.fenced, node->as.code.fence_length);
- print_str(buffer, node->as.code.info.data,
- node->as.code.info.len);
- cmark_strbuf_putc(buffer, ' ');
- print_str(buffer, node->as.code.literal.data,
- node->as.code.literal.len);
- cmark_strbuf_putc(buffer, '\n');
- break;
- case NODE_HTML:
- cmark_strbuf_printf(buffer, "html ");
- print_str(buffer, node->as.literal.data,
- node->as.literal.len);
- cmark_strbuf_putc(buffer, '\n');
- break;
- case NODE_TEXT:
- cmark_strbuf_printf(buffer, "text ");
- print_str(buffer, node->as.literal.data, node->as.literal.len);
- cmark_strbuf_putc(buffer, '\n');
- break;
- case NODE_LINEBREAK:
- cmark_strbuf_printf(buffer, "linebreak\n");
- break;
- case NODE_SOFTBREAK:
- cmark_strbuf_printf(buffer, "softbreak\n");
- break;
- case NODE_CODE:
- cmark_strbuf_printf(buffer, "code ");
- print_str(buffer, node->as.literal.data, node->as.literal.len);
- cmark_strbuf_putc(buffer, '\n');
- break;
- case NODE_INLINE_HTML:
- cmark_strbuf_printf(buffer, "inline_html ");
- print_str(buffer, node->as.literal.data, node->as.literal.len);
- cmark_strbuf_putc(buffer, '\n');
- break;
- case NODE_LINK:
- case NODE_IMAGE:
- cmark_strbuf_printf(buffer, "%s url=", node->type == NODE_LINK ? "link" : "image");
-
- if (node->as.link.url)
- print_str(buffer, node->as.link.url, -1);
-
- if (node->as.link.title) {
- cmark_strbuf_printf(buffer, " title=");
- print_str(buffer, node->as.link.title, -1);
- }
- cmark_strbuf_putc(buffer, '\n');
- break;
- case NODE_STRONG:
- cmark_strbuf_printf(buffer, "strong\n");
- break;
- case NODE_EMPH:
- cmark_strbuf_printf(buffer, "emph\n");
- break;
- default:
- break;
- }
- if (node->first_child) { // render children if any
- indent += INDENT;
- node = node->first_child;
- } else if (node->next) { // otherwise render next sibling
- node = node->next;
- } else {
- node = node->parent; // back up to parent
- while (node) {
- indent -= INDENT;
- if (node->next) {
- node = node->next;
- break;
- } else {
- node = node->parent;
- }
- if (!node) {
- break;
- }
- }
- }
- }
-}
-
-char *cmark_render_ast(cmark_node *root)
-{
- char* result;
- cmark_strbuf buffer = GH_BUF_INIT;
- render_nodes(&buffer, root, -2);
- result = (char *)cmark_strbuf_detach(&buffer);
- cmark_strbuf_free(&buffer);
- return result;
-}