0
@@ -572,7 +572,7 @@ Inline = Str
0
- { $$
.key = SPACE; $$.contents.str = strdup(" "); }
0
+ { $$
= mk_element(SPACE); $$.contents.str = strdup(" "); }
0
{ $$ = mk_str(yytext); }
0
@@ -587,13 +587,13 @@ Endline = TerminalEndline | NormalEndline
0
NormalEndline = Sp Newline !BlankLine !BlockQuote !AtxStart
0
!(Line ("===" '='* | "---" '-'*) Newline)
0
- { $$
.key = SPACE; $$.contents.str = strdup("\n"); }
0
+ { $$
= mk_element(SPACE); $$.contents.str = strdup("\n"); }
0
TerminalEndline = Sp Newline Eof
0
- { $$
.key = SPACE; $$.contents.str = strdup(""); }
0
+ { $$
= mk_element(SPACE); $$.contents.str = strdup(""); }
0
LineBreak = " " Endline
0
- { $$
.key = LINEBREAK; }
0
+ { $$
= mk_element(LINEBREAK); }
0
Symbol = < SpecialChar >
0
{ $$ = mk_str(yytext); }
0
@@ -869,36 +869,46 @@ RawNoteBlock = a:StartList
0
-/* free_element - free next and child elements recursively */
0
-static void free_element_tree(element * elt) {
0
+static void free_element_contents(element elt);
0
+/* free_element_list - free list of elements recursively */
0
+static void free_element_list(element * elt) {
0
- if (elt->children != NULL && elt->key != SPACE) {
0
- free_element_tree(elt->children);
0
+ free_element_contents(*elt);
0
+ if (elt->children != NULL) {
0
+ free_element_list(elt->children);
0
- if (elt->key == STR || elt->key == RAW) {
0
- free(elt->contents.str);
0
- elt->contents.str = NULL;
0
-/* free_element - free element recursively */
0
-void markdown_free(element result) {
0
- if (result.children) {
0
- free_element_tree(result.children);
0
- result.children = NULL;
0
- free_element_tree(result.next);
0
+/* free_element_contents - free element contents depending on type */
0
+static void free_element_contents(element elt) {
0
+ case STR: case SPACE: case RAW: case HTMLBLOCK: case HTML: case VERBATIM:
0
+ free(elt.contents.str);
0
+ elt.contents.str = NULL;
0
+ case LINK: case IMAGE:
0
+ free(elt.contents.link.url);
0
+ elt.contents.link.url = NULL;
0
+ free(elt.contents.link.title);
0
+ elt.contents.link.title = NULL;
0
+ free_element_list(elt.contents.link.label);
0
- if (result.key == STR || result.key == RAW)
0
- free(result.contents.str);
0
+/* markdown_free - free element contents and children recursively */
0
+void markdown_free(element elt) {
0
+ free_element_list(elt.children);
0
+ free_element_contents(elt);
0
element markdown(char *string, int extensions) {
Comments
No one has commented yet.