diff options
| -rw-r--r-- | src/print.c | 141 | 
1 files changed, 61 insertions, 80 deletions
diff --git a/src/print.c b/src/print.c index 8847d12..643c262 100644 --- a/src/print.c +++ b/src/print.c @@ -3,7 +3,8 @@  #include <string.h>  #include "cmark.h"  #include "node.h" -#include "debug.h" + +#define INDENT 2  static void print_str(const unsigned char *s, int len)  { @@ -34,91 +35,29 @@ static void print_str(const unsigned char *s, int len)  }  // Prettyprint an inline list, for debugging. -static void print_inlines(cmark_node* ils, int indent) +static void print_nodes(cmark_node* node, int indent)  {  	int i; - -	while(ils != NULL) { -		for (i=0; i < indent; i++) { -			putchar(' '); -		} -		switch(ils->type) { -		case NODE_TEXT: -			printf("text "); -			print_str(ils->as.literal.data, ils->as.literal.len); -			putchar('\n'); -			break; -		case NODE_LINEBREAK: -			printf("linebreak\n"); -			break; -		case NODE_SOFTBREAK: -			printf("softbreak\n"); -			break; -		case NODE_INLINE_CODE: -			printf("code "); -			print_str(ils->as.literal.data, ils->as.literal.len); -			putchar('\n'); -			break; -		case NODE_INLINE_HTML: -			printf("html "); -			print_str(ils->as.literal.data, ils->as.literal.len); -			putchar('\n'); -			break; -		case NODE_LINK: -		case NODE_IMAGE: -			printf("%s url=", ils->type == NODE_LINK ? "link" : "image"); - -			if (ils->as.link.url) -				print_str(ils->as.link.url, -1); - -			if (ils->as.link.title) { -				printf(" title="); -				print_str(ils->as.link.title, -1); -			} -			putchar('\n'); -			print_inlines(ils->first_child, indent + 2); -			break; -		case NODE_STRONG: -			printf("strong\n"); -			print_inlines(ils->first_child, indent + 2); -			break; -		case NODE_EMPH: -			printf("emph\n"); -			print_inlines(ils->first_child, indent + 2); -			break; -		default: -			break; -		} -		ils = ils->next; -	} -} - -// Functions to pretty-print inline and cmark_node lists, for debugging. -// Prettyprint an inline list, for debugging. -static void print_blocks(cmark_node* b, int indent) -{  	cmark_list *data; -	int i; -	while(b != NULL) { +	while(node != NULL) {  		for (i=0; i < indent; i++) {  			putchar(' ');  		} - -		switch(b->type) { +		switch(node->type) {  		case NODE_DOCUMENT: -			print_blocks(b->first_child, 0); +			print_nodes(node->first_child, 0);  			break;  		case NODE_BLOCK_QUOTE:  			printf("block_quote\n"); -			print_blocks(b->first_child, indent + 2); +			print_nodes(node->first_child, indent + INDENT);  			break;  		case NODE_LIST_ITEM:  			printf("list_item\n"); -			print_blocks(b->first_child, indent + 2); +			print_nodes(node->first_child, indent + INDENT);  			break;  		case NODE_LIST: -			data = &(b->as.list); +			data = &(node->as.list);  			if (data->list_type == CMARK_ORDERED_LIST) {  				printf("list (type=ordered tight=%s start=%d delim=%s)\n",  				       (data->tight ? "true" : "false"), @@ -129,43 +68,85 @@ static void print_blocks(cmark_node* b, int indent)  				       (data->tight ? "true" : "false"),  				       data->bullet_char);  			} -			print_blocks(b->first_child, indent + 2); +			print_nodes(node->first_child, indent + INDENT);  			break;  		case NODE_HEADER: -			printf("setext_header (level=%d)\n", b->as.header.level); -			print_inlines(b->first_child, indent + 2); +			printf("setext_header (level=%d)\n", node->as.header.level); +			print_nodes(node->first_child, indent + INDENT);  			break;  		case NODE_PARAGRAPH:  			printf("paragraph\n"); -			print_inlines(b->first_child, indent + 2); +			print_nodes(node->first_child, indent + INDENT);  			break;  		case NODE_HRULE:  			printf("hrule\n");  			break;  		case NODE_CODE_BLOCK:  			printf("code block info="); -			print_str(b->as.code.info.ptr, -1); +			print_str(node->as.code.info.ptr, -1);  			putchar(' '); -			print_str(b->string_content.ptr, -1); +			print_str(node->string_content.ptr, -1);  			putchar('\n');  			break;  		case NODE_HTML:  			printf("html_block "); -			print_str(b->string_content.ptr, -1); +			print_str(node->string_content.ptr, -1);  			putchar('\n');  			break;  		case NODE_REFERENCE_DEF:  			printf("reference_def\n");  			break; +		case NODE_TEXT: +			printf("text "); +			print_str(node->as.literal.data, node->as.literal.len); +			putchar('\n'); +			break; +		case NODE_LINEBREAK: +			printf("linebreak\n"); +			break; +		case NODE_SOFTBREAK: +			printf("softbreak\n"); +			break; +		case NODE_INLINE_CODE: +			printf("code "); +			print_str(node->as.literal.data, node->as.literal.len); +			putchar('\n'); +			break; +		case NODE_INLINE_HTML: +			printf("html "); +			print_str(node->as.literal.data, node->as.literal.len); +			putchar('\n'); +			break; +		case NODE_LINK: +		case NODE_IMAGE: +			printf("%s url=", node->type == NODE_LINK ? "link" : "image"); + +			if (node->as.link.url) +				print_str(node->as.link.url, -1); + +			if (node->as.link.title) { +				printf(" title="); +				print_str(node->as.link.title, -1); +			} +			putchar('\n'); +			print_nodes(node->first_child, indent + INDENT); +			break; +		case NODE_STRONG: +			printf("strong\n"); +			print_nodes(node->first_child, indent + INDENT); +			break; +		case NODE_EMPH: +			printf("emph\n"); +			print_nodes(node->first_child, indent + INDENT); +			break;  		default: -			printf("# NOT IMPLEMENTED (%d)\n", b->type);  			break;  		} -		b = b->next; +		node = node->next;  	}  }  void cmark_debug_print(cmark_node *root)  { -	print_blocks(root, 0); +	print_nodes(root, 0);  }  | 
