public
Description: An implementation of markdown in C, using a PEG grammar
Clone URL: git://github.com/jgm/peg-markdown.git
Renamed pushelt -> cons again.
jgm (author)
Thu Jun 12 11:13:15 -0700 2008
commit  2a7ef09fd8871565bd387d50cdd77ba9b36f5090
tree    b8d16513b1a05b76996dc980c8fbf9ddb631a3d0
parent  91ff22093d4881bffbfef61bd88e1733129eb453
...
28
29
30
31
 
32
33
34
...
55
56
57
58
 
59
60
61
62
63
64
 
65
66
67
 
68
69
70
...
75
76
77
78
79
80
 
 
 
81
82
83
...
86
87
88
89
90
 
 
91
92
93
 
94
95
96
...
106
107
108
109
 
110
111
112
...
116
117
118
119
 
120
121
122
...
124
125
126
127
128
 
 
129
130
131
...
134
135
136
137
138
 
 
139
140
141
142
143
144
 
145
146
147
 
 
148
149
150
...
152
153
154
155
 
156
157
158
...
162
163
164
165
 
166
167
168
...
328
329
330
331
332
 
 
333
334
335
...
382
383
384
385
 
386
387
388
...
391
392
393
394
 
395
396
397
...
402
403
404
405
 
406
407
408
...
410
411
412
413
 
414
415
416
...
432
433
434
435
436
 
 
437
438
439
...
447
448
449
450
 
451
452
453
...
492
493
494
495
 
496
497
498
...
512
513
514
515
 
516
517
518
...
563
564
565
566
 
567
568
569
...
602
603
604
605
 
606
607
608
...
612
613
614
615
 
616
617
618
...
639
640
641
642
643
 
 
644
645
646
...
648
649
650
651
 
652
653
654
655
656
657
 
658
659
660
661
662
 
 
663
664
665
...
28
29
30
 
31
32
33
34
...
55
56
57
 
58
59
60
61
62
63
 
64
65
66
 
67
68
69
70
...
75
76
77
 
 
 
78
79
80
81
82
83
...
86
87
88
 
 
89
90
91
92
 
93
94
95
96
...
106
107
108
 
109
110
111
112
...
116
117
118
 
119
120
121
122
...
124
125
126
 
 
127
128
129
130
131
...
134
135
136
 
 
137
138
139
140
141
142
143
 
144
145
 
 
146
147
148
149
150
...
152
153
154
 
155
156
157
158
...
162
163
164
 
165
166
167
168
...
328
329
330
 
 
331
332
333
334
335
...
382
383
384
 
385
386
387
388
...
391
392
393
 
394
395
396
397
...
402
403
404
 
405
406
407
408
...
410
411
412
 
413
414
415
416
...
432
433
434
 
 
435
436
437
438
439
...
447
448
449
 
450
451
452
453
...
492
493
494
 
495
496
497
498
...
512
513
514
 
515
516
517
518
...
563
564
565
 
566
567
568
569
...
602
603
604
 
605
606
607
608
...
612
613
614
 
615
616
617
618
...
639
640
641
 
 
642
643
644
645
646
...
648
649
650
 
651
652
653
654
655
656
 
657
658
659
660
 
 
661
662
663
664
665
0
@@ -28,7 +28,7 @@
0
 
0
 %}
0
 
0
-Doc = a:StartList ( Block { a = pushelt($$, a); } )*
0
+Doc = a:StartList ( Block { a = cons($$, a); } )*
0
             { parse_result = reverse(a); }
0
 
0
 Block = BlankLine*
0
@@ -55,16 +55,16 @@ AtxInline = !Newline !(Sp '#'* Sp Newline) Inline
0
 AtxStart = < ( "######" | "#####" | "####" | "###" | "##" | "#" ) >
0
             { $$ = mk_element(H1 + (strlen(yytext) - 1)); }
0
 
0
-AtxHeading = s:AtxStart Sp a:StartList ( AtxInline { a = pushelt($$, a); } )+ (Sp '#'* Sp)? Newline
0
+AtxHeading = s:AtxStart Sp a:StartList ( AtxInline { a = cons($$, a); } )+ (Sp '#'* Sp)? Newline
0
             { $$ = mk_list(s->key, a);
0
               free(s); }
0
 
0
 SetextHeading = SetextHeading1 | SetextHeading2
0
 
0
-SetextHeading1 = a:StartList ( !Endline Inline { a = pushelt($$, a); } )+ Newline "===" '='* Newline
0
+SetextHeading1 = a:StartList ( !Endline Inline { a = cons($$, a); } )+ Newline "===" '='* Newline
0
                   { $$ = mk_list(H1, a); }
0
 
0
-SetextHeading2 = a:StartList ( !Endline Inline { a = pushelt($$, a); } )+ Newline "---" '-'* Newline
0
+SetextHeading2 = a:StartList ( !Endline Inline { a = cons($$, a); } )+ Newline "---" '-'* Newline
0
                   { $$ = mk_list(H2, a); }
0
 
0
 Heading = AtxHeading | SetextHeading
0
@@ -75,9 +75,9 @@ BlockQuote = a:BlockQuoteRaw
0
              }
0
 
0
 BlockQuoteRaw = a:StartList
0
- (( '>' ' '? Line { a = pushelt($$, a); } )
0
- ( !'>' !BlankLine Line { a = pushelt($$, a); } )*
0
- ( BlankLine { a = pushelt(mk_str("\n"), a); } )*
0
+ (( '>' ' '? Line { a = cons($$, a); } )
0
+ ( !'>' !BlankLine Line { a = cons($$, a); } )*
0
+ ( BlankLine { a = cons(mk_str("\n"), a); } )*
0
                  )+
0
                  { $$ = mk_str_from_list(a, true);
0
                      $$->key = RAW;
0
@@ -86,11 +86,11 @@ BlockQuoteRaw = a:StartList
0
 NonblankIndentedLine = !BlankLine IndentedLine
0
 
0
 VerbatimChunk = a:StartList
0
- ( BlankLine { a = pushelt(mk_str("\n"), a); } )*
0
- ( NonblankIndentedLine { a = pushelt($$, a); } )+
0
+ ( BlankLine { a = cons(mk_str("\n"), a); } )*
0
+ ( NonblankIndentedLine { a = cons($$, a); } )+
0
                 { $$ = mk_str_from_list(a, false); }
0
 
0
-Verbatim = a:StartList ( VerbatimChunk { a = pushelt($$, a); } )+
0
+Verbatim = a:StartList ( VerbatimChunk { a = cons($$, a); } )+
0
                { $$ = mk_str_from_list(a, false);
0
                  $$->key = VERBATIM; }
0
 
0
@@ -106,7 +106,7 @@ Bullet = NonindentSpace ('+' | '*' | '-') Spacechar+
0
 BulletList = BulletListTight | BulletListLoose
0
 
0
 BulletListTight = a:StartList
0
- ( BulletListItem { a = pushelt($$, a); } )+
0
+ ( BulletListItem { a = cons($$, a); } )+
0
                   BlankLine* !BulletListLoose
0
                   { $$ = mk_list(BULLETLIST, a); }
0
 
0
@@ -116,7 +116,7 @@ BulletListLoose = a:StartList
0
                         li = b->children;
0
                         li->contents.str = realloc(li->contents.str, strlen(li->contents.str) + 3);
0
                         strcat(li->contents.str, "\n\n"); /* In loose list, \n\n added to end of each element */
0
- a = pushelt(b, a);
0
+ a = cons(b, a);
0
                     } )+
0
                   { $$ = mk_list(BULLETLIST, a); }
0
 
0
@@ -124,8 +124,8 @@ BulletListItem = !HorizontalRule &Bullet ListItem
0
 
0
 ListItem = ( Bullet | Enumerator )
0
                  a:StartList
0
- ListBlock { a = pushelt($$, a); }
0
- ( ListContinuationBlock { a = pushelt($$, a); } )*
0
+ ListBlock { a = cons($$, a); }
0
+ ( ListContinuationBlock { a = cons($$, a); } )*
0
                  { element *raw;
0
                     raw = mk_str_from_list(a, false);
0
                     raw->key = RAW;
0
@@ -134,17 +134,17 @@ ListItem = ( Bullet | Enumerator )
0
                  }
0
 
0
 ListBlock = a:StartList
0
- Line { a = pushelt($$, a); }
0
- ( ListBlockLine { a = pushelt($$, a); } )*
0
+ Line { a = cons($$, a); }
0
+ ( ListBlockLine { a = cons($$, a); } )*
0
             { $$ = mk_str_from_list(a, false); }
0
 
0
 ListContinuationBlock = a:StartList
0
                         ( < BlankLine* >
0
                           { if (strlen(yytext) == 0)
0
- a = pushelt(mk_str("\001"), a); /* block separator */
0
+ a = cons(mk_str("\001"), a); /* block separator */
0
                               else
0
- a = pushelt(mk_str(yytext), a); } )
0
- ( Indent ListBlock { a = pushelt($$, a); } )+
0
+ a = cons(mk_str(yytext), a); } )
0
+ ( Indent ListBlock { a = cons($$, a); } )+
0
                         { $$ = mk_str_from_list(a, false); }
0
 
0
 Enumerator = NonindentSpace [0-9]+ '.' Spacechar+
0
@@ -152,7 +152,7 @@ Enumerator = NonindentSpace [0-9]+ '.' Spacechar+
0
 OrderedList = OrderedListTight | OrderedListLoose
0
 
0
 OrderedListTight = a:StartList
0
- ( OrderedListItem { a = pushelt($$, a); } )+
0
+ ( OrderedListItem { a = cons($$, a); } )+
0
                   BlankLine* !OrderedListLoose
0
                   { $$ = mk_list(ORDEREDLIST, a); }
0
 
0
@@ -162,7 +162,7 @@ OrderedListLoose = a:StartList
0
                         li = b->children;
0
                         li->contents.str = realloc(li->contents.str, strlen(li->contents.str) + 3);
0
                         strcat(li->contents.str, "\n\n"); /* In loose list, \n\n added to end of each element */
0
- a = pushelt(b, a);
0
+ a = cons(b, a);
0
                     } )+
0
                   { $$ = mk_list(ORDEREDLIST, a); }
0
 
0
@@ -328,8 +328,8 @@ HtmlBlockType = "address" | "blockquote" | "center" | "dir" | "div" | "dl" | "fi
0
                 "H4" | "H5" | "H6" | "HR" | "ISINDEX" | "MENU" | "NOFRAMES" | "NOSCRIPT" | "OL" | "P" | "PRE" | "TABLE" |
0
                 "UL" | "DD" | "DT" | "FRAMESET" | "LI" | "TBODY" | "TD" | "TFOOT" | "TH" | "THEAD" | "TR" | "SCRIPT"
0
 
0
-Inlines = a:StartList ( !Endline Inline { a = pushelt($$, a); }
0
- | c:Endline &Inline { a = pushelt(c, a); } )+ Endline?
0
+Inlines = a:StartList ( !Endline Inline { a = cons($$, a); }
0
+ | c:Endline &Inline { a = cons(c, a); } )+ Endline?
0
             { $$ = mk_list(LIST, a); }
0
 
0
 Inline = Str
0
@@ -382,7 +382,7 @@ Emph = EmphStar | EmphUl
0
 
0
 EmphStar = OneStar !Spacechar !Newline
0
             a:StartList
0
- ( EmphInlineStar { a = pushelt($$, a); } )+
0
+ ( EmphInlineStar { a = cons($$, a); } )+
0
             OneStar
0
             { $$ = mk_list(EMPH, a); }
0
 
0
@@ -391,7 +391,7 @@ EmphInlineStar = StrongStar
0
 
0
 EmphUl = OneUl !Spacechar !Newline
0
             a:StartList
0
- ( EmphInlineUl { a = pushelt($$, a); } )+
0
+ ( EmphInlineUl { a = cons($$, a); } )+
0
             OneUl !Alphanumeric
0
             { $$ = mk_list(EMPH, a); }
0
 
0
@@ -402,7 +402,7 @@ Strong = StrongStar | StrongUl
0
 
0
 StrongStar = TwoStar !Spacechar !Newline
0
                 a:StartList
0
- ( StrongInlineStar { a = pushelt($$, a); } )+
0
+ ( StrongInlineStar { a = cons($$, a); } )+
0
                 TwoStar
0
                 { $$ = mk_list(STRONG, a); }
0
 
0
@@ -410,7 +410,7 @@ StrongInlineStar = !(Spnl TwoStar) Inline
0
 
0
 StrongUl = TwoUl !Spacechar !Newline
0
             a:StartList
0
- ( StrongInlineUl { a = pushelt($$, a); } )+
0
+ ( StrongInlineUl { a = cons($$, a); } )+
0
             TwoUl
0
             { $$ = mk_list(STRONG, a); }
0
 
0
@@ -432,8 +432,8 @@ ReferenceLinkDouble = a:Label < Spnl > !"[]" b:Label
0
                            } else {
0
                                element *result;
0
                                result = mk_element(LIST);
0
- result->children = pushelt(mk_str("["), pushelt(a, pushelt(mk_str("]"), pushelt(mk_str(yytext),
0
- pushelt(mk_str("["), pushelt(b, mk_str("]")))))));
0
+ result->children = cons(mk_str("["), cons(a, cons(mk_str("]"), cons(mk_str(yytext),
0
+ cons(mk_str("["), cons(b, mk_str("]")))))));
0
                                $$ = result;
0
                            }
0
                        }
0
@@ -447,7 +447,7 @@ ReferenceLinkSingle = a:Label < (Spnl "[]")? >
0
                            else {
0
                                element *result;
0
                                result = mk_element(LIST);
0
- result->children = pushelt(mk_str("["), pushelt(a, pushelt(mk_str("]"), mk_str(yytext))));
0
+ result->children = cons(mk_str("["), cons(a, cons(mk_str("]"), mk_str(yytext))));
0
                                $$ = result;
0
                            }
0
                        }
0
@@ -492,7 +492,7 @@ Reference = NonindentSpace !"[]" l:Label ':' Spnl s:RefSrc Spnl t:RefTitle Blank
0
 
0
 Label = '[' ( !'^' &{ extension(EXT_NOTES) } | &. &{ !extension(EXT_NOTES) } )
0
         a:StartList
0
- ( !']' Inline { a = pushelt($$, a); } )*
0
+ ( !']' Inline { a = cons($$, a); } )*
0
         ']'
0
         { $$ = mk_list(LIST, a); }
0
 
0
@@ -512,7 +512,7 @@ RefTitleDouble = '"' < ( !('"' Sp Newline | Newline) . )* > '"'
0
 RefTitleParens = '(' < ( !(')' Sp Newline | Newline) . )* > ')'
0
 
0
 References = a:StartList
0
- ( b:Reference { a = pushelt(b, a); } | SkipBlock )*
0
+ ( b:Reference { a = cons(b, a); } | SkipBlock )*
0
              { references = reverse(a); }
0
 
0
 Ticks1 = "`"
0
@@ -563,7 +563,7 @@ Indent = "\t" | " "
0
 IndentedLine = Indent Line
0
 OptionallyIndentedLine = Indent? Line
0
 
0
-# StartList starts a list data structure that can be added to with pushelt:
0
+# StartList starts a list data structure that can be added to with cons:
0
 StartList = &.
0
             { $$ = NULL; }
0
 
0
@@ -602,7 +602,7 @@ SingleQuoteEnd = '\'' !Alphanumeric
0
 
0
 SingleQuoted = SingleQuoteStart
0
                a:StartList
0
- ( !SingleQuoteEnd b:Inline { a = pushelt(b, a); } )+
0
+ ( !SingleQuoteEnd b:Inline { a = cons(b, a); } )+
0
                SingleQuoteEnd
0
                { $$ = mk_list(SINGLEQUOTED, a); }
0
 
0
@@ -612,7 +612,7 @@ DoubleQuoteEnd = '"'
0
 
0
 DoubleQuoted = DoubleQuoteStart
0
                 a:StartList
0
- ( !DoubleQuoteEnd b:Inline { a = pushelt(b, a); } )+
0
+ ( !DoubleQuoteEnd b:Inline { a = cons(b, a); } )+
0
                 DoubleQuoteEnd
0
                 { $$ = mk_list(DOUBLEQUOTED, a); }
0
 
0
@@ -639,8 +639,8 @@ RawNoteReference = "[^" < ( !Newline !']' . )+ > ']'
0
 Note = &{ extension(EXT_NOTES) }
0
                 NonindentSpace ref:RawNoteReference ':' Sp
0
                 a:StartList
0
- ( RawNoteBlock { a = pushelt($$, a); } )
0
- ( &Indent RawNoteBlock { a = pushelt($$, a); } )*
0
+ ( RawNoteBlock { a = cons($$, a); } )
0
+ ( &Indent RawNoteBlock { a = cons($$, a); } )*
0
                 { $$ = mk_list(NOTE, a);
0
                     $$->contents.str = strdup(ref->contents.str);
0
                 }
0
@@ -648,18 +648,18 @@ Note = &{ extension(EXT_NOTES) }
0
 InlineNote = &{ extension(EXT_NOTES) }
0
                 "^["
0
                 a:StartList
0
- ( !']' Inline { a = pushelt($$, a); } )+
0
+ ( !']' Inline { a = cons($$, a); } )+
0
                 ']'
0
                 { $$ = mk_list(NOTE, a);
0
                   $$->contents.str = 0; }
0
 
0
 Notes = a:StartList
0
- ( b:Note { a = pushelt(b, a); } | SkipBlock )*
0
+ ( b:Note { a = cons(b, a); } | SkipBlock )*
0
                 { notes = reverse(a); }
0
 
0
 RawNoteBlock = a:StartList
0
- ( !BlankLine OptionallyIndentedLine { a = pushelt($$, a); } )+
0
- ( < BlankLine* > { a = pushelt(mk_str(yytext), a); } )
0
+ ( !BlankLine OptionallyIndentedLine { a = cons($$, a); } )+
0
+ ( < BlankLine* > { a = cons(mk_str(yytext), a); } )
0
                 { $$ = mk_str_from_list(a, true);
0
                     $$->key = RAW;
0
                 }
...
9
10
11
12
13
 
 
14
15
16
...
22
23
24
25
 
26
27
28
...
98
99
100
101
102
 
 
103
104
105
...
9
10
11
 
 
12
13
14
15
16
...
22
23
24
 
25
26
27
28
...
98
99
100
 
 
101
102
103
104
105
0
@@ -9,8 +9,8 @@ extern int strcasecmp(const char *string1, const char *string2);
0
 
0
  ***********************************************************************/
0
 
0
-/* pushelt - push an element onto a list, returning pointer to new head */
0
-static element * pushelt(element *new, element *list) {
0
+/* cons - cons an element onto a list, returning pointer to new head */
0
+static element * cons(element *new, element *list) {
0
     assert(new != NULL);
0
     new->next = list;
0
     return new;
0
@@ -22,7 +22,7 @@ static element *reverse(element *list) {
0
     element *next = NULL;
0
     while (list != NULL) {
0
         next = list->next;
0
- new = pushelt(list, new);
0
+ new = cons(list, new);
0
         list = next;
0
     }
0
     return new;
0
@@ -98,8 +98,8 @@ static element * mk_str_from_list(element *list, bool extra_newline) {
0
 }
0
 
0
 /* mk_list - makes new list with key 'key' and children the reverse of 'lst'.
0
- * This is designed to be used with pushelt to build lists in a parser action.
0
- * The reversing is necessary because pushelt adds to the head of a list. */
0
+ * This is designed to be used with cons to build lists in a parser action.
0
+ * The reversing is necessary because cons adds to the head of a list. */
0
 static element * mk_list(int key, element *lst) {
0
     element *result;
0
     result = mk_element(key);

Comments

    No one has commented yet.