public
Description: An implementation of markdown in C, using a PEG grammar
Clone URL: git://github.com/jgm/peg-markdown.git
Search Repo:
Made 'padded' an int, not a bool, to keep track of newlines printed.
jgm (author)
Mon May 05 10:29:10 -0700 2008
commit  5559b1897094f03b883f988e57ecc91d98b681f4
tree    9f3510cc81ca5d47267f11066b915286ed6cd7bc
parent  ff582f785dd007d901cb75be9cabd0a02c4b8d9e
...
19
20
21
22
23
 
24
25
26
27
28
...
30
31
32
33
 
 
 
34
35
 
36
37
38
39
40
 
 
 
41
42
43
44
45
46
47
48
49
50
51
52
...
157
158
159
160
 
161
162
163
164
165
 
166
167
168
169
170
171
172
 
173
174
175
176
177
 
178
179
180
181
182
 
183
184
185
186
187
188
189
 
190
191
192
193
194
 
195
196
197
198
 
199
200
201
202
203
 
204
205
206
207
 
208
209
210
211
...
218
219
220
221
 
222
223
224
225
226
227
228
 
229
230
231
...
365
366
367
368
 
369
370
371
...
19
20
21
 
22
23
24
25
26
27
28
...
30
31
32
 
33
34
35
36
 
37
38
 
 
 
 
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
...
158
159
160
 
161
162
163
164
165
 
166
167
168
169
170
171
172
 
173
174
175
176
177
 
178
179
180
181
182
 
183
184
185
186
187
188
189
 
190
191
192
193
194
 
195
196
197
198
 
199
200
201
202
203
 
204
205
206
207
 
208
209
210
211
212
...
219
220
221
 
222
223
224
225
226
227
228
 
229
230
231
232
...
366
367
368
 
369
370
371
372
0
@@ -19,8 +19,8 @@
0
 #include <stdlib.h>
0
 #include <string.h>
0
 #include <assert.h>
0
-#include "my_getopt-1.5/getopt.h"
0
 #include "markdown_peg.h"
0
+#include "my_getopt-1.5/getopt.h"
0
 
0
 extern char *strdup(const char *string);
0
 
0
0
0
@@ -30,14 +30,15 @@
0
 
0
  ***********************************************************************/
0
 
0
-static bool padded = true; /* If true, no blank line needed before next output */
0
+static int padded = 2; /* Number of newlines after last output.
0
+ Starts at 2 so no newlines are needed at start.
0
+ */
0
 
0
-/* pad - add a blank line if one is needed */
0
+/* pad - add newlines if needed */
0
 void pad(int num) {
0
- if (!padded)
0
- while (num-- > 0)
0
- printf("\n");
0
- padded = true;
0
+ while (num-- > padded)
0
+ printf("\n");
0
+ padded = num;
0
 }
0
 
0
 /**********************************************************************
0
0
0
0
0
0
0
0
0
0
@@ -157,54 +158,54 @@
0
         printf("<h%1d>", lev);
0
         print_html_element_list(elt.contents.list, obfuscate);
0
         printf("</h%1d>", lev);
0
- padded = false;
0
+ padded = 0;
0
         break;
0
     case PLAIN:
0
         pad(1);
0
         print_html_element_list(elt.contents.list, obfuscate);
0
- padded = false;
0
+ padded = 0;
0
         break;
0
     case PARA:
0
         pad(2);
0
         printf("<p>");
0
         print_html_element_list(elt.contents.list, obfuscate);
0
         printf("</p>");
0
- padded = false;
0
+ padded = 0;
0
         break;
0
     case HRULE:
0
         pad(2);
0
         printf("<hr />");
0
- padded = false;
0
+ padded = 0;
0
         break;
0
     case HTMLBLOCK:
0
         pad(2);
0
         printf(elt.contents.str);
0
- padded = false;
0
+ padded = 0;
0
         break;
0
     case VERBATIM:
0
         pad(2);
0
         printf("<pre><code>");
0
         print_html_string(elt.contents.str, obfuscate);
0
         printf("</code></pre>");
0
- padded = false;
0
+ padded = 0;
0
         break;
0
     case BULLETLIST:
0
         pad(2);
0
         printf("<ul>");
0
- padded = false;
0
+ padded = 0;
0
         print_html_element_list(elt.contents.list, obfuscate);
0
         pad(1);
0
         printf("</ul>");
0
- padded = false;
0
+ padded = 0;
0
         break;
0
     case ORDEREDLIST:
0
         pad(2);
0
         printf("<ol>");
0
- padded = false;
0
+ padded = 0;
0
         print_html_element_list(elt.contents.list, obfuscate);
0
         pad(1);
0
         printf("</ol>");
0
- padded = false;
0
+ padded = 0;
0
         break;
0
     case LISTITEM:
0
         pad(1);
0
0
@@ -218,14 +219,14 @@
0
         while ((contents = strtok(NULL, "\001")))
0
             print_html_element(markdown(contents), obfuscate);
0
         printf("</li>");
0
- padded = false;
0
+ padded = 0;
0
         break;
0
     case BLOCKQUOTE:
0
         pad(2);
0
         printf("<blockquote>");
0
         print_html_element(markdown(elt.contents.str), obfuscate);
0
         printf("</blockquote>");
0
- padded = false;
0
+ padded = 0;
0
         break;
0
     case REFERENCE:
0
         /* Nonprinting */
0
@@ -365,7 +366,7 @@
0
         break;
0
     case BULLETLIST:
0
         printf("\\begin{itemize}\n");
0
- padded = false;
0
+ padded = 0;
0
         print_latex_element_list(elt.contents.list);
0
         printf("\\end{itemize}\n\n");
0
         break;

Comments

    No one has commented yet.