public
Description: An implementation of markdown in C, using a PEG grammar
Clone URL: git://github.com/jgm/peg-markdown.git
Search Repo:
Added free_element function.  Free unneeded elements in Link parsers.
jgm (author)
Wed Jun 11 16:36:03 -0700 2008
commit  bd230235a9adfd57f2213e7051e3b27fd47fc9ac
tree    c35fc9388a44eca1a88add001df6a2b724cdb3a6
parent  ce774f0d62f25425e327592453cf71071bd12cc0
...
61
62
63
64
65
 
66
67
68
...
675
676
677
678
 
 
 
 
679
680
681
...
703
704
705
706
 
 
 
 
 
707
708
709
...
711
712
713
714
 
 
 
715
716
717
...
871
872
873
874
 
875
876
877
...
923
924
925
 
 
 
 
 
 
926
927
928
...
61
62
63
 
 
64
65
66
67
...
674
675
676
 
677
678
679
680
681
682
683
...
705
706
707
 
708
709
710
711
712
713
714
715
...
717
718
719
 
720
721
722
723
724
725
...
879
880
881
 
882
883
884
885
...
931
932
933
934
935
936
937
938
939
940
941
942
0
@@ -61,8 +61,7 @@ static GString *concat_string_list(element *list) {
0
         #ifdef __DEBUG__
0
           fprintf(stderr,"Freed element for %d - %d\n", list->key, list);
0
         #endif
0
- free(list->contents.str);
0
- free(list);
0
+ free_element(list);
0
         list = next;
0
     }
0
     return result;
0
@@ -675,7 +674,10 @@ ReferenceLinkSingle = a:Label < (Spnl "[]")? >
0
                        }
0
 
0
 ExplicitLink = l:Label Spnl '(' Sp s:Source Spnl t:Title Sp ')'
0
- { $$ = mk_link(l->children, s->contents.str, t->contents.str); }
0
+ { $$ = mk_link(l->children, s->contents.str, t->contents.str);
0
+ free_element(s);
0
+ free_element(t);
0
+ free(l); }
0
 
0
 Source = ( '<' < SourceContents > '>' | < SourceContents > )
0
           { $$ = mk_str(yytext); }
0
@@ -703,7 +705,11 @@ AutoLinkEmail = '<' < [-A-Za-z0-9+_]+ '@' ( !Newline !'>' . )+ > '>'
0
                 }
0
 
0
 Reference = NonindentSpace !"[]" l:Label ':' Spnl s:RefSrc Spnl t:RefTitle BlankLine*
0
- { $$ = mk_link(l->children, s->contents.str, t->contents.str); $$->key = REFERENCE; }
0
+ { $$ = mk_link(l->children, s->contents.str, t->contents.str);
0
+ free_element(s);
0
+ free_element(t);
0
+ free(l);
0
+ $$->key = REFERENCE; }
0
 
0
 Label = '[' ( !'^' &{ extension(EXT_NOTES) } | &. &{ !extension(EXT_NOTES) } )
0
         a:StartList
0
@@ -711,7 +717,9 @@ Label = '[' ( !'^' &{ extension(EXT_NOTES) } | &. &{ !extension(EXT_NOTES) } )
0
         ']'
0
         { $$ = mk_list(LIST, a); }
0
 
0
-RefSrc = < Nonspacechar+ > { $$ = mk_str(yytext); $$->key = HTML; }
0
+RefSrc = < Nonspacechar+ >
0
+ { $$ = mk_str(yytext);
0
+ $$->key = HTML; }
0
 
0
 RefTitle = ( RefTitleSingle | RefTitleDouble | RefTitleParens | EmptyTitle )
0
             { $$ = mk_str(yytext); }
0
@@ -871,7 +879,7 @@ Notes = a:StartList
0
                 { notes = reverse(a); }
0
 
0
 RawNoteBlock = a:StartList
0
- ( !BlankLine OptionallyIndentedLine { a = cons($$, a); } )+
0
+ ( !BlankLine OptionallyIndentedLine { a = cons($$, a); } )+
0
                 ( BlankLine { a = cons($$, a); } )*
0
                 { $$ = mk_str_from_list(a, true);
0
                     $$->key = RAW;
0
@@ -923,6 +931,12 @@ void free_element_contents(element elt) {
0
     }
0
 }
0
 
0
+/* free_element - free element and contents */
0
+void free_element(element *elt) {
0
+ free_element_contents(*elt);
0
+ free(elt);
0
+}
0
+
0
 element * parse_references(char *string, int extensions) {
0
 
0
     char *oldcharbuf;

Comments

    No one has commented yet.