rmultimarkdown 4.5.3.2 → 4.6.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/MultiMarkdown-4/beamer.c +2 -0
- data/MultiMarkdown-4/html.c +59 -15
- data/MultiMarkdown-4/latex.c +92 -24
- data/MultiMarkdown-4/libMultiMarkdown.h +18 -0
- data/MultiMarkdown-4/lyx.c +120 -21
- data/MultiMarkdown-4/lyx.h +1 -0
- data/MultiMarkdown-4/lyxbeamer.c +29 -31
- data/MultiMarkdown-4/memoir.c +1 -0
- data/MultiMarkdown-4/multimarkdown.c +4 -1
- data/MultiMarkdown-4/odf.c +30 -13
- data/MultiMarkdown-4/opml.c +1 -0
- data/MultiMarkdown-4/parse_utilities.c +106 -3
- data/MultiMarkdown-4/parser.c +6619 -6417
- data/MultiMarkdown-4/parser.h +8 -12
- data/MultiMarkdown-4/rtf.c +5 -2
- data/MultiMarkdown-4/transclude.c +83 -67
- data/MultiMarkdown-4/transclude.h +1 -0
- data/MultiMarkdown-4/writer.c +118 -2
- data/MultiMarkdown-4/writer.h +3 -0
- data/Rakefile +1 -1
- data/lib/multi_markdown.bundle +0 -0
- data/lib/multi_markdown/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d09abf7122bde215cae33570b460aa1d63874cfc
|
|
4
|
+
data.tar.gz: a9cf6ae5f6f8738f471266cd9594285dc32c32a8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: feba15b48f3fe5ba7340d3c2037b48ebb44d8f1ba82a125216018e646081cf4ce5dd2d67c23c2acc00d8bf3f4854cb2335ea9f885f63d4368221aa9f550dd192
|
|
7
|
+
data.tar.gz: 0f47cae9ff4087bd5ca8c1780a8aafcdc0b378e71387e580fa892708633f743cc571c66bea40444a447af172604e1495c6b632791a6c4cb9aa7b657dcbaabf1c
|
data/MultiMarkdown-4/beamer.c
CHANGED
|
@@ -124,6 +124,8 @@ void print_beamer_node(GString *out, node *n, scratch_pad *scratch) {
|
|
|
124
124
|
/* print_beamer_endnotes */
|
|
125
125
|
void print_beamer_endnotes(GString *out, scratch_pad *scratch) {
|
|
126
126
|
scratch->used_notes = reverse_list(scratch->used_notes);
|
|
127
|
+
scratch->printing_notes = 1;
|
|
128
|
+
|
|
127
129
|
node *note = scratch->used_notes;
|
|
128
130
|
#ifdef DEBUG_ON
|
|
129
131
|
fprintf(stderr, "start endnotes\n");
|
data/MultiMarkdown-4/html.c
CHANGED
|
@@ -68,8 +68,34 @@ void print_html_node(GString *out, node *n, scratch_pad *scratch) {
|
|
|
68
68
|
print_html_node_tree(out,n->children,scratch);
|
|
69
69
|
break;
|
|
70
70
|
case STR:
|
|
71
|
+
/* fprintf(stderr, "str: '%s'\n", n->str); */
|
|
71
72
|
print_html_string(out,n->str, scratch);
|
|
72
73
|
break;
|
|
74
|
+
case ABBR:
|
|
75
|
+
if (strlen(n->children->str) == 0) {
|
|
76
|
+
g_string_append_printf(out, "<abbr>");
|
|
77
|
+
} else {
|
|
78
|
+
g_string_append_printf(out, "<abbr title=\"");
|
|
79
|
+
print_html_string(out, n->children->str, scratch);
|
|
80
|
+
g_string_append_printf(out, "\">");
|
|
81
|
+
}
|
|
82
|
+
print_html_string(out,n->str, scratch);
|
|
83
|
+
g_string_append_printf(out, "</abbr>");
|
|
84
|
+
break;
|
|
85
|
+
case ABBRSTART:
|
|
86
|
+
if (strlen(n->children->str) == 0) {
|
|
87
|
+
g_string_append_printf(out, "<abbr>");
|
|
88
|
+
} else {
|
|
89
|
+
g_string_append_printf(out, "<abbr title=\"");
|
|
90
|
+
print_html_string(out, n->children->str, scratch);
|
|
91
|
+
g_string_append_printf(out, "\">");
|
|
92
|
+
}
|
|
93
|
+
print_html_string(out,n->str, scratch);
|
|
94
|
+
break;
|
|
95
|
+
case ABBRSTOP:
|
|
96
|
+
print_html_string(out,n->str, scratch);
|
|
97
|
+
g_string_append_printf(out, "</abbr>");
|
|
98
|
+
break;
|
|
73
99
|
case SPACE:
|
|
74
100
|
g_string_append_printf(out,"%s",n->str);
|
|
75
101
|
break;
|
|
@@ -110,6 +136,7 @@ void print_html_node(GString *out, node *n, scratch_pad *scratch) {
|
|
|
110
136
|
scratch->padded = 0;
|
|
111
137
|
break;
|
|
112
138
|
case VERBATIM:
|
|
139
|
+
case VERBATIMFENCE:
|
|
113
140
|
pad(out, 2, scratch);
|
|
114
141
|
if ((n->children != NULL) && (n->children->key == VERBATIMTYPE)) {
|
|
115
142
|
trim_trailing_whitespace(n->children->str);
|
|
@@ -217,6 +244,7 @@ void print_html_node(GString *out, node *n, scratch_pad *scratch) {
|
|
|
217
244
|
trim_trailing_whitespace(n->children->str);
|
|
218
245
|
print_raw_node(out, n->children);
|
|
219
246
|
g_string_append_printf(out, "\n");
|
|
247
|
+
} else if (strcmp(n->str, "mmdfooter") == 0) {
|
|
220
248
|
} else {
|
|
221
249
|
g_string_append_printf(out,"\t<meta name=\"%s\" content=\"",n->str);
|
|
222
250
|
print_html_node(out,n->children,scratch);
|
|
@@ -287,21 +315,23 @@ void print_html_node(GString *out, node *n, scratch_pad *scratch) {
|
|
|
287
315
|
g_string_append_printf(out, "<br/>\n");
|
|
288
316
|
break;
|
|
289
317
|
case MATHSPAN:
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
318
|
+
temp = strdup(n->str);
|
|
319
|
+
if (temp[0] == '$') {
|
|
320
|
+
temp[strlen(temp)-1] = '\0';
|
|
321
|
+
if (temp[1] == '$') {
|
|
322
|
+
temp[strlen(temp)-1] = '\0';
|
|
323
|
+
g_string_append_printf(out, "<span class=\"math\">\\[%s\\]</span>",&temp[2]);
|
|
295
324
|
} else {
|
|
296
|
-
g_string_append_printf(out, "<span class=\"math\">\\(%s\\)</span>",&
|
|
325
|
+
g_string_append_printf(out, "<span class=\"math\">\\(%s\\)</span>",&temp[1]);
|
|
297
326
|
}
|
|
298
|
-
} else if (
|
|
299
|
-
|
|
300
|
-
g_string_append_printf(out, "<span class=\"math\">%s\\]</span>",
|
|
327
|
+
} else if (temp[strlen(temp) - 1] == ']') {
|
|
328
|
+
temp[strlen(temp) - 3] = '\0';
|
|
329
|
+
g_string_append_printf(out, "<span class=\"math\">%s\\]</span>",temp);
|
|
301
330
|
} else {
|
|
302
|
-
|
|
303
|
-
g_string_append_printf(out, "<span class=\"math\">%s\\)</span>",
|
|
331
|
+
temp[strlen(temp) - 3] = '\0';
|
|
332
|
+
g_string_append_printf(out, "<span class=\"math\">%s\\)</span>",temp);
|
|
304
333
|
}
|
|
334
|
+
free(temp);
|
|
305
335
|
break;
|
|
306
336
|
case STRONG:
|
|
307
337
|
g_string_append_printf(out, "<strong>");
|
|
@@ -410,6 +440,12 @@ void print_html_node(GString *out, node *n, scratch_pad *scratch) {
|
|
|
410
440
|
#ifdef DEBUG_ON
|
|
411
441
|
fprintf(stderr, "print image\n");
|
|
412
442
|
#endif
|
|
443
|
+
/* Verify all is well */
|
|
444
|
+
if (n->link_data == NULL) {
|
|
445
|
+
fprintf(stderr, "Invalid IMAGEBLOCK or IMAGE -- (null) link_data\n");
|
|
446
|
+
exit(EXIT_FAILURE);
|
|
447
|
+
}
|
|
448
|
+
|
|
413
449
|
/* Stash a copy of the link data */
|
|
414
450
|
if (n->link_data != NULL)
|
|
415
451
|
temp_link_data = mk_link_data(n->link_data->label, n->link_data->source, n->link_data->title, n->link_data->attr);
|
|
@@ -510,10 +546,15 @@ void print_html_node(GString *out, node *n, scratch_pad *scratch) {
|
|
|
510
546
|
}
|
|
511
547
|
g_string_append_printf(out, " />");
|
|
512
548
|
if (n->key == IMAGEBLOCK) {
|
|
513
|
-
if (
|
|
514
|
-
|
|
515
|
-
print_html_node(
|
|
516
|
-
|
|
549
|
+
if (n->children != NULL) {
|
|
550
|
+
temp_str = g_string_new("");
|
|
551
|
+
print_html_node(temp_str,n->children,scratch);
|
|
552
|
+
if (temp_str->currentStringLength > 0) {
|
|
553
|
+
g_string_append_printf(out, "\n<figcaption>");
|
|
554
|
+
g_string_append(out, temp_str->str);
|
|
555
|
+
g_string_append_printf(out, "</figcaption>");
|
|
556
|
+
}
|
|
557
|
+
g_string_free(temp_str, true);
|
|
517
558
|
}
|
|
518
559
|
g_string_append_printf(out,"\n</figure>");
|
|
519
560
|
scratch->padded = 0;
|
|
@@ -715,6 +756,7 @@ void print_html_node(GString *out, node *n, scratch_pad *scratch) {
|
|
|
715
756
|
g_string_append_printf(out, "</table>\n");
|
|
716
757
|
scratch->cell_type = 0;
|
|
717
758
|
scratch->padded = 1;
|
|
759
|
+
scratch->table_alignment = NULL;
|
|
718
760
|
break;
|
|
719
761
|
case TABLESEPARATOR:
|
|
720
762
|
scratch->table_alignment = n->str;
|
|
@@ -801,6 +843,7 @@ void print_html_node(GString *out, node *n, scratch_pad *scratch) {
|
|
|
801
843
|
fprintf(stderr,"SOURCEBRANCH\n");
|
|
802
844
|
break;
|
|
803
845
|
case NOTELABEL:
|
|
846
|
+
case GLOSSARYLABEL:
|
|
804
847
|
break;
|
|
805
848
|
case SUPERSCRIPT:
|
|
806
849
|
g_string_append_printf(out, "<sup>%s</sup>",n->str);
|
|
@@ -808,6 +851,7 @@ void print_html_node(GString *out, node *n, scratch_pad *scratch) {
|
|
|
808
851
|
case SUBSCRIPT:
|
|
809
852
|
g_string_append_printf(out, "<sub>%s</sub>",n->str);
|
|
810
853
|
break;
|
|
854
|
+
case ABBREVIATION:
|
|
811
855
|
case KEY_COUNTER:
|
|
812
856
|
break;
|
|
813
857
|
default:
|
data/MultiMarkdown-4/latex.c
CHANGED
|
@@ -96,6 +96,42 @@ void print_latex_node(GString *out, node *n, scratch_pad *scratch) {
|
|
|
96
96
|
case STR:
|
|
97
97
|
print_latex_string(out,n->str, scratch);
|
|
98
98
|
break;
|
|
99
|
+
case ABBREVIATION:
|
|
100
|
+
/* We combine the short and full names, since stripping non-ascii characters may result
|
|
101
|
+
in a conflict otherwise. This at least makes it less likely. */
|
|
102
|
+
width = ascii_label_from_node(n->children);
|
|
103
|
+
temp = ascii_label_from_string(n->str);
|
|
104
|
+
g_string_append_printf(out, "\\newacro{%s%s}[",width,temp);
|
|
105
|
+
print_latex_node_tree(out, n->children, scratch);
|
|
106
|
+
g_string_append_printf(out, "]{");
|
|
107
|
+
trim_trailing_whitespace(n->str);
|
|
108
|
+
print_latex_string(out, n->str, scratch);
|
|
109
|
+
g_string_append_printf(out, "}\n");
|
|
110
|
+
free(temp);
|
|
111
|
+
free(width);
|
|
112
|
+
break;
|
|
113
|
+
case ABBRSTART:
|
|
114
|
+
/* Strip out nodes that are being replaced with the abbreviation */
|
|
115
|
+
temp_node = n->next;
|
|
116
|
+
while (temp_node->key != ABBRSTOP) {
|
|
117
|
+
n->next = temp_node->next;
|
|
118
|
+
temp_node->next = NULL;
|
|
119
|
+
free_node(temp_node);
|
|
120
|
+
temp_node = n->next;
|
|
121
|
+
}
|
|
122
|
+
n->next = temp_node->next;
|
|
123
|
+
temp_node->next = NULL;
|
|
124
|
+
free_node(temp_node);
|
|
125
|
+
case ABBR:
|
|
126
|
+
/* In either case, now we call on the abbreviation */
|
|
127
|
+
width = ascii_label_from_node(n->children->children);
|
|
128
|
+
temp = ascii_label_from_string(n->children->str);
|
|
129
|
+
g_string_append_printf(out, "\\ac{%s%s}", width, temp);
|
|
130
|
+
free(temp);
|
|
131
|
+
free(width);
|
|
132
|
+
break;
|
|
133
|
+
case ABBRSTOP:
|
|
134
|
+
break;
|
|
99
135
|
case SPACE:
|
|
100
136
|
g_string_append_printf(out,"%s",n->str);
|
|
101
137
|
break;
|
|
@@ -126,6 +162,7 @@ void print_latex_node(GString *out, node *n, scratch_pad *scratch) {
|
|
|
126
162
|
}
|
|
127
163
|
break;
|
|
128
164
|
case VERBATIM:
|
|
165
|
+
case VERBATIMFENCE:
|
|
129
166
|
pad(out, 2, scratch);
|
|
130
167
|
if ((n->children != NULL) && (n->children->key == VERBATIMTYPE)) {
|
|
131
168
|
trim_trailing_whitespace(n->children->str);
|
|
@@ -170,6 +207,8 @@ void print_latex_node(GString *out, node *n, scratch_pad *scratch) {
|
|
|
170
207
|
if (!(scratch->extensions & EXT_SNIPPET) && (is_latex_complete_doc(n))) {
|
|
171
208
|
scratch->extensions = scratch->extensions | EXT_COMPLETE;
|
|
172
209
|
}
|
|
210
|
+
/* print acronym definitions */
|
|
211
|
+
print_latex_node_tree(out, scratch->abbreviations, scratch);
|
|
173
212
|
break;
|
|
174
213
|
case METAKEY:
|
|
175
214
|
/* reformat the key */
|
|
@@ -221,6 +260,7 @@ void print_latex_node(GString *out, node *n, scratch_pad *scratch) {
|
|
|
221
260
|
} else if (strcmp(n->str, "css") == 0) {
|
|
222
261
|
} else if (strcmp(n->str, "xhtmlheader") == 0) {
|
|
223
262
|
} else if (strcmp(n->str, "htmlheader") == 0) {
|
|
263
|
+
} else if (strcmp(n->str, "mmdfooter") == 0) {
|
|
224
264
|
} else if (strcmp(n->str, "latexinput") == 0) {
|
|
225
265
|
trim_trailing_whitespace(n->children->str);
|
|
226
266
|
g_string_append_printf(out, "\\input{%s}\n", n->children->str);
|
|
@@ -327,35 +367,37 @@ void print_latex_node(GString *out, node *n, scratch_pad *scratch) {
|
|
|
327
367
|
g_string_append_printf(out, "\\\\\n");
|
|
328
368
|
break;
|
|
329
369
|
case MATHSPAN:
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
370
|
+
temp = strdup(n->str);
|
|
371
|
+
if (temp[0] == '$') {
|
|
372
|
+
if (temp[1] == '$') {
|
|
373
|
+
if (strncmp(&temp[2],"\\begin",5) == 0) {
|
|
374
|
+
temp[strlen(temp)-2] = '\0';
|
|
375
|
+
g_string_append_printf(out, "%s",&temp[1]);
|
|
335
376
|
} else {
|
|
336
|
-
g_string_append_printf(out, "%s",
|
|
377
|
+
g_string_append_printf(out, "%s",temp);
|
|
337
378
|
}
|
|
338
379
|
} else {
|
|
339
|
-
if (strncmp(&
|
|
340
|
-
|
|
341
|
-
g_string_append_printf(out, "%s",&
|
|
380
|
+
if (strncmp(&temp[1],"\\begin",5) == 0) {
|
|
381
|
+
temp[strlen(temp)-1] = '\0';
|
|
382
|
+
g_string_append_printf(out, "%s",&temp[1]);
|
|
342
383
|
} else {
|
|
343
|
-
g_string_append_printf(out, "%s",
|
|
384
|
+
g_string_append_printf(out, "%s",temp);
|
|
344
385
|
}
|
|
345
386
|
}
|
|
346
|
-
} else if (strncmp(&
|
|
387
|
+
} else if (strncmp(&temp[2],"\\begin",5) == 0) {
|
|
347
388
|
/* trim */
|
|
348
|
-
|
|
349
|
-
g_string_append_printf(out, "%s", &
|
|
389
|
+
temp[strlen(temp)-3] = '\0';
|
|
390
|
+
g_string_append_printf(out, "%s", &temp[2]);
|
|
350
391
|
} else {
|
|
351
|
-
if (
|
|
352
|
-
|
|
353
|
-
g_string_append_printf(out, "%s\\]",
|
|
392
|
+
if (temp[strlen(temp)-1] == ']') {
|
|
393
|
+
temp[strlen(temp)-3] = '\0';
|
|
394
|
+
g_string_append_printf(out, "%s\\]", temp);
|
|
354
395
|
} else {
|
|
355
|
-
|
|
356
|
-
g_string_append_printf(out, "$%s$", &
|
|
396
|
+
temp[strlen(temp)-3] = '\0';
|
|
397
|
+
g_string_append_printf(out, "$%s$", &temp[2]);
|
|
357
398
|
}
|
|
358
399
|
}
|
|
400
|
+
free(temp);
|
|
359
401
|
break;
|
|
360
402
|
case STRONG:
|
|
361
403
|
g_string_append_printf(out, "\\textbf{");
|
|
@@ -583,10 +625,16 @@ void print_latex_node(GString *out, node *n, scratch_pad *scratch) {
|
|
|
583
625
|
|
|
584
626
|
if (n->key == IMAGEBLOCK) {
|
|
585
627
|
if (n->children != NULL) {
|
|
586
|
-
|
|
587
|
-
print_latex_node_tree(
|
|
588
|
-
|
|
628
|
+
temp_str = g_string_new("");
|
|
629
|
+
print_latex_node_tree(temp_str,n->children,scratch);
|
|
630
|
+
if (temp_str->currentStringLength > 0) {
|
|
631
|
+
g_string_append_printf(out, "\n\\caption{");
|
|
632
|
+
g_string_append(out, temp_str->str);
|
|
633
|
+
g_string_append_printf(out, "}");
|
|
634
|
+
}
|
|
635
|
+
g_string_free(temp_str, true);
|
|
589
636
|
}
|
|
637
|
+
|
|
590
638
|
if (n->link_data->label != NULL) {
|
|
591
639
|
temp = label_from_string(n->link_data->label);
|
|
592
640
|
g_string_append_printf(out, "\n\\label{%s}",temp);
|
|
@@ -788,7 +836,12 @@ void print_latex_node(GString *out, node *n, scratch_pad *scratch) {
|
|
|
788
836
|
g_string_append_printf(temp_str,"%c",toupper(n->str[i]));
|
|
789
837
|
}
|
|
790
838
|
g_string_append_printf(out, "\\begin{tabulary}{\\textwidth}{@{}%s@{}} \\toprule\n", temp_str->str);
|
|
791
|
-
|
|
839
|
+
|
|
840
|
+
if (scratch->table_alignment != NULL)
|
|
841
|
+
free(scratch->table_alignment);
|
|
842
|
+
|
|
843
|
+
scratch->table_alignment = temp_str->str;
|
|
844
|
+
g_string_free(temp_str, false);
|
|
792
845
|
break;
|
|
793
846
|
case TABLECAPTION:
|
|
794
847
|
if ((n->children != NULL) && (n->children->key == TABLELABEL)) {
|
|
@@ -818,11 +871,14 @@ void print_latex_node(GString *out, node *n, scratch_pad *scratch) {
|
|
|
818
871
|
case TABLEROW:
|
|
819
872
|
print_latex_node_tree(out, n->children, scratch);
|
|
820
873
|
g_string_append_printf(out, "\\\\\n");
|
|
874
|
+
scratch->table_column = 0;
|
|
821
875
|
break;
|
|
822
876
|
case TABLECELL:
|
|
823
877
|
scratch->padded = 2;
|
|
878
|
+
temp = scratch->table_alignment;
|
|
824
879
|
if ((n->children != NULL) && (n->children->key == CELLSPAN)) {
|
|
825
|
-
g_string_append_printf(out, "\\multicolumn{%d}{c}{",
|
|
880
|
+
g_string_append_printf(out, "\\multicolumn{%d}{%c}{",
|
|
881
|
+
(int)strlen(n->children->str)+1,tolower(temp[scratch->table_column]));
|
|
826
882
|
}
|
|
827
883
|
print_latex_node_tree(out, n->children, scratch);
|
|
828
884
|
if ((n->children != NULL) && (n->children->key == CELLSPAN)) {
|
|
@@ -830,6 +886,10 @@ void print_latex_node(GString *out, node *n, scratch_pad *scratch) {
|
|
|
830
886
|
}
|
|
831
887
|
if (n->next != NULL)
|
|
832
888
|
g_string_append_printf(out, "&");
|
|
889
|
+
if ((n->children != NULL) && (n->children->key == CELLSPAN)) {
|
|
890
|
+
scratch->table_column += (int)strlen(n->children->str);
|
|
891
|
+
}
|
|
892
|
+
scratch->table_column++;
|
|
833
893
|
break;
|
|
834
894
|
case CELLSPAN:
|
|
835
895
|
break;
|
|
@@ -846,6 +906,7 @@ void print_latex_node(GString *out, node *n, scratch_pad *scratch) {
|
|
|
846
906
|
fprintf(stderr,"SOURCEBRANCH\n");
|
|
847
907
|
break;
|
|
848
908
|
case NOTELABEL:
|
|
909
|
+
case GLOSSARYLABEL:
|
|
849
910
|
break;
|
|
850
911
|
case SUPERSCRIPT:
|
|
851
912
|
g_string_append_printf(out, "\\textsuperscript{%s}",n->str);
|
|
@@ -1099,7 +1160,14 @@ void print_latex_string(GString *out, char *str, scratch_pad *scratch) {
|
|
|
1099
1160
|
}
|
|
1100
1161
|
break;
|
|
1101
1162
|
case '-':
|
|
1102
|
-
|
|
1163
|
+
str++;
|
|
1164
|
+
if (*str == '-') {
|
|
1165
|
+
g_string_append_printf(out, "-{}");
|
|
1166
|
+
str--;
|
|
1167
|
+
} else {
|
|
1168
|
+
str--;
|
|
1169
|
+
g_string_append_c(out,*str);
|
|
1170
|
+
}
|
|
1103
1171
|
break;
|
|
1104
1172
|
default:
|
|
1105
1173
|
g_string_append_c(out, *str);
|
|
@@ -105,6 +105,7 @@ enum keys {
|
|
|
105
105
|
RAW,
|
|
106
106
|
VERBATIM,
|
|
107
107
|
VERBATIMTYPE,
|
|
108
|
+
VERBATIMFENCE,
|
|
108
109
|
DEFLIST,
|
|
109
110
|
TERM,
|
|
110
111
|
DEFINITION,
|
|
@@ -127,6 +128,7 @@ enum keys {
|
|
|
127
128
|
CITATIONSOURCE,
|
|
128
129
|
SOURCEBRANCH,
|
|
129
130
|
NOTELABEL,
|
|
131
|
+
GLOSSARYLABEL,
|
|
130
132
|
ATTRVALUE,
|
|
131
133
|
ATTRKEY,
|
|
132
134
|
GLOSSARYSOURCE,
|
|
@@ -142,9 +144,14 @@ enum keys {
|
|
|
142
144
|
SUPERSCRIPT,
|
|
143
145
|
SUBSCRIPT,
|
|
144
146
|
VARIABLE,
|
|
147
|
+
ABBREVIATION,
|
|
148
|
+
ABBR,
|
|
149
|
+
ABBRSTART,
|
|
150
|
+
ABBRSTOP,
|
|
145
151
|
KEY_COUNTER /* This *MUST* be the last item in the list */
|
|
146
152
|
};
|
|
147
153
|
|
|
154
|
+
|
|
148
155
|
/* This is the element used in the resulting parse tree */
|
|
149
156
|
struct node {
|
|
150
157
|
short key; /* what type of element are we? */
|
|
@@ -155,3 +162,14 @@ struct node {
|
|
|
155
162
|
};
|
|
156
163
|
|
|
157
164
|
typedef struct node node;
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
/* Define a structure to simplify handling of links */
|
|
168
|
+
struct link_data {
|
|
169
|
+
char *label; /* if this is a reference link */
|
|
170
|
+
char *source; /* source URL */
|
|
171
|
+
char *title; /* title string */
|
|
172
|
+
node *attr; /* attribute tree */
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
typedef struct link_data link_data;
|
data/MultiMarkdown-4/lyx.c
CHANGED
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
/* allow the user to change the heading levels */
|
|
32
32
|
|
|
33
33
|
GString *heading_name[7];
|
|
34
|
+
GString *used_abbreviations;
|
|
34
35
|
|
|
35
36
|
#if defined(DEBUG_ON) || defined(DUMP_TREES)
|
|
36
37
|
const char * const node_types[] = {
|
|
@@ -99,6 +100,7 @@ GString *heading_name[7];
|
|
|
99
100
|
"CITATIONSOURCE",
|
|
100
101
|
"SOURCEBRANCH",
|
|
101
102
|
"NOTELABEL",
|
|
103
|
+
"GLOSSARYLABEL",
|
|
102
104
|
"ATTRVALUE",
|
|
103
105
|
"ATTRKEY",
|
|
104
106
|
"GLOSSARYSOURCE",
|
|
@@ -113,6 +115,11 @@ GString *heading_name[7];
|
|
|
113
115
|
"CRITICCOMMENT",
|
|
114
116
|
"SUPERSCRIPT",
|
|
115
117
|
"SUBSCRIPT",
|
|
118
|
+
"VARIABLE",
|
|
119
|
+
"ABBREVIATION",
|
|
120
|
+
"ABBR",
|
|
121
|
+
"ABBRSTART",
|
|
122
|
+
"ABBRSTOP",
|
|
116
123
|
"KEY_COUNTER"
|
|
117
124
|
};
|
|
118
125
|
|
|
@@ -154,6 +161,7 @@ void perform_lyx_output(GString *out, node* list, scratch_pad *scratch)
|
|
|
154
161
|
node *headings;
|
|
155
162
|
node *base_header_level;
|
|
156
163
|
char *key;
|
|
164
|
+
|
|
157
165
|
|
|
158
166
|
#ifdef DUMP_TREES
|
|
159
167
|
fprintf(stderr, "\n*** Base Tree ***\n");
|
|
@@ -179,6 +187,7 @@ void perform_lyx_output(GString *out, node* list, scratch_pad *scratch)
|
|
|
179
187
|
affect creating the prefixes */
|
|
180
188
|
|
|
181
189
|
GString *lyx_headings = g_string_new("");
|
|
190
|
+
used_abbreviations = g_string_new("");
|
|
182
191
|
int hcount;
|
|
183
192
|
hcount = 0;
|
|
184
193
|
const char s[2] = ",";
|
|
@@ -240,7 +249,7 @@ void perform_lyx_output(GString *out, node* list, scratch_pad *scratch)
|
|
|
240
249
|
for (i=0;i<=6;i++){
|
|
241
250
|
g_string_free(heading_name[i],TRUE);
|
|
242
251
|
}
|
|
243
|
-
|
|
252
|
+
g_string_free(used_abbreviations,TRUE);
|
|
244
253
|
}
|
|
245
254
|
|
|
246
255
|
/* begin_lyx_output -- Check metadata and open the document */
|
|
@@ -464,9 +473,6 @@ bool begin_lyx_output(GString *out, node* list, scratch_pad *scratch) {
|
|
|
464
473
|
free(tmp);
|
|
465
474
|
free(token);
|
|
466
475
|
}
|
|
467
|
-
}
|
|
468
|
-
if(isbeamer){
|
|
469
|
-
g_string_append(out,"beamer-fragile\n");
|
|
470
476
|
}
|
|
471
477
|
g_string_append(out,"\\end_modules\n");
|
|
472
478
|
|
|
@@ -560,7 +566,7 @@ void end_lyx_output(GString *out, node* list, scratch_pad *scratch) {
|
|
|
560
566
|
if (tree_contains_key(list, METAKEY)) {
|
|
561
567
|
content = metadata_for_key("bibtex",list);
|
|
562
568
|
if (content != NULL) {
|
|
563
|
-
g_string_append(out, "\n\\begin_layout
|
|
569
|
+
g_string_append(out, "\n\\begin_layout Standard\n");
|
|
564
570
|
g_string_append(out,"\n\\begin_inset CommandInset bibtex");
|
|
565
571
|
g_string_append(out,"\nLatexCommand bibtex");
|
|
566
572
|
value = metavalue_for_key("bibtex",list);
|
|
@@ -645,6 +651,56 @@ void print_lyx_node(GString *out, node *n, scratch_pad *scratch, bool no_newline
|
|
|
645
651
|
case STR:
|
|
646
652
|
print_lyx_string(out,n->str, scratch,LYX_NONE);
|
|
647
653
|
break;
|
|
654
|
+
case ABBREVIATION:
|
|
655
|
+
// this work was done in writer.c
|
|
656
|
+
break;
|
|
657
|
+
case ABBRSTART:
|
|
658
|
+
/* Strip out nodes that are being replaced with the abbreviation */
|
|
659
|
+
temp_node = n->next;
|
|
660
|
+
while (temp_node->key != ABBRSTOP) {
|
|
661
|
+
n->next = temp_node->next;
|
|
662
|
+
temp_node->next = NULL;
|
|
663
|
+
free_node(temp_node);
|
|
664
|
+
temp_node = n->next;
|
|
665
|
+
}
|
|
666
|
+
n->next = temp_node->next;
|
|
667
|
+
temp_node->next = NULL;
|
|
668
|
+
free_node(temp_node);
|
|
669
|
+
case ABBR:
|
|
670
|
+
/* In either case, now we call on the abbreviation */
|
|
671
|
+
// width = ascii_label_from_node(n->children->children);
|
|
672
|
+
width = string_from_node_tree(n->children->children);
|
|
673
|
+
// temp = ascii_label_from_string(n->children->str);
|
|
674
|
+
temp_str = g_string_new("");
|
|
675
|
+
g_string_append_printf(temp_str,"[%s]",width);
|
|
676
|
+
if(strstr(used_abbreviations->str,temp_str->str)){
|
|
677
|
+
g_string_append(out,width); // just the abbrev
|
|
678
|
+
}
|
|
679
|
+
else
|
|
680
|
+
{
|
|
681
|
+
g_string_append(used_abbreviations,temp_str->str);
|
|
682
|
+
|
|
683
|
+
|
|
684
|
+
g_string_append(out,n->children->str);
|
|
685
|
+
g_string_append_printf(out," (%s)",width);
|
|
686
|
+
|
|
687
|
+
|
|
688
|
+
g_string_append(out,"\n\\begin_inset CommandInset nomenclature");
|
|
689
|
+
g_string_append(out,"\nLatexCommand nomenclature");
|
|
690
|
+
g_string_append_printf(out,"\nsymbol \"%s\"",width);
|
|
691
|
+
g_string_append(out,"\ndescription \"");
|
|
692
|
+
// g_string_append(out,n->children->str);
|
|
693
|
+
temp = escape_string(n->children->str);
|
|
694
|
+
g_string_append(out,temp);
|
|
695
|
+
g_string_append(out,"\"");
|
|
696
|
+
g_string_append(out, "\n\\end_inset\n");
|
|
697
|
+
free(temp);
|
|
698
|
+
}
|
|
699
|
+
g_string_free(temp_str,TRUE);
|
|
700
|
+
free(width);
|
|
701
|
+
break;
|
|
702
|
+
case ABBRSTOP:
|
|
703
|
+
break;
|
|
648
704
|
case SPACE:
|
|
649
705
|
if (strncmp(n->str,"\n",1)==0){
|
|
650
706
|
if (no_newline){
|
|
@@ -684,16 +740,26 @@ void print_lyx_node(GString *out, node *n, scratch_pad *scratch, bool no_newline
|
|
|
684
740
|
break;
|
|
685
741
|
case ORDEREDLIST:
|
|
686
742
|
g_string_append(out, "\n\\begin_layout Enumerate\n");
|
|
743
|
+
if (scratch-> lyx_beamerbullet){
|
|
744
|
+
g_string_append(out,"\n\\begin_inset Argument 1");
|
|
745
|
+
g_string_append(out,"\nstatus open\n");
|
|
746
|
+
g_string_append(out,"\n\\begin_layout Plain Layout");
|
|
747
|
+
g_string_append(out,"\n<+->");
|
|
748
|
+
g_string_append(out,"\n\\end_layout\n");
|
|
749
|
+
g_string_append(out,"\n\\end_inset\n");
|
|
750
|
+
scratch -> lyx_beamerbullet = FALSE;
|
|
751
|
+
}
|
|
687
752
|
break;
|
|
688
753
|
case BULLETLIST:
|
|
689
754
|
g_string_append(out, "\n\\begin_layout Itemize\n");
|
|
690
755
|
if (scratch-> lyx_beamerbullet){
|
|
691
|
-
g_string_append(out,"\n\\begin_inset
|
|
692
|
-
g_string_append(out,"\nstatus
|
|
756
|
+
g_string_append(out,"\n\\begin_inset Argument 1");
|
|
757
|
+
g_string_append(out,"\nstatus open\n");
|
|
693
758
|
g_string_append(out,"\n\\begin_layout Plain Layout");
|
|
694
|
-
g_string_append(out,"\n
|
|
759
|
+
g_string_append(out,"\n+-");
|
|
695
760
|
g_string_append(out,"\n\\end_layout\n");
|
|
696
761
|
g_string_append(out,"\n\\end_inset\n");
|
|
762
|
+
scratch -> lyx_beamerbullet = FALSE;
|
|
697
763
|
}
|
|
698
764
|
break;
|
|
699
765
|
case NOTEREFERENCE:
|
|
@@ -742,12 +808,13 @@ void print_lyx_node(GString *out, node *n, scratch_pad *scratch, bool no_newline
|
|
|
742
808
|
if (strncmp(n->str,"<!--",4) == 0) {
|
|
743
809
|
/* trim "-->" from end */
|
|
744
810
|
n->str[strlen(n->str)-3] = '\0';
|
|
745
|
-
g_string_append(out, "\n\\begin_layout Plain\n\\begin_inset ERT\nstatus collapsed\n\n\\begin_layout Plain Layout\n\n");
|
|
811
|
+
g_string_append(out, "\n\\begin_layout Plain Layout\n\\begin_inset ERT\nstatus collapsed\n\n\\begin_layout Plain Layout\n\n");
|
|
746
812
|
print_latex_string(out,&n->str[4],scratch);
|
|
747
|
-
g_string_append(out,"\n\n\\end_layout\n\\end_inset\n\\end_layout\n");
|
|
813
|
+
g_string_append(out,"\n\n\\end_layout\n\n\\end_inset\n\\end_layout\n");
|
|
748
814
|
}
|
|
749
815
|
break;
|
|
750
816
|
case VERBATIM:
|
|
817
|
+
case VERBATIMFENCE:
|
|
751
818
|
old_type = scratch->lyx_para_type;
|
|
752
819
|
scratch->lyx_para_type = VERBATIM;
|
|
753
820
|
scratch->lyx_level++;
|
|
@@ -804,7 +871,6 @@ void print_lyx_node(GString *out, node *n, scratch_pad *scratch, bool no_newline
|
|
|
804
871
|
#ifdef DEBUG_ON
|
|
805
872
|
fprintf(stderr, "\nStart List Item\n");
|
|
806
873
|
#endif
|
|
807
|
-
i = 0;
|
|
808
874
|
old_type = scratch->lyx_para_type;
|
|
809
875
|
temp_node = n-> children; /* should be a list node */
|
|
810
876
|
if(temp_node->children == NULL) {
|
|
@@ -1431,8 +1497,10 @@ void print_lyx_node(GString *out, node *n, scratch_pad *scratch, bool no_newline
|
|
|
1431
1497
|
if (strncmp(n->str,"<!--",4) == 0) {
|
|
1432
1498
|
/* trim "-->" from end */
|
|
1433
1499
|
n->str[strlen(n->str)-3] = '\0';
|
|
1500
|
+
// g_string_append(out, "\n\\begin_layout Plain Layout\n\\begin_inset ERT\nstatus collapsed\n\n\\begin_layout Plain Layout\n\n");
|
|
1434
1501
|
g_string_append(out, "\n\\begin_inset ERT\nstatus collapsed\n\n\\begin_layout Plain Layout\n\n");
|
|
1435
1502
|
print_lyx_string(out,&n->str[4],scratch,LYX_NONE);
|
|
1503
|
+
// g_string_append(out,"\n\n\\end_layout\n\\end_inset\n\\end_layout\n");
|
|
1436
1504
|
g_string_append(out,"\n\n\\end_layout\n\\end_inset\n");
|
|
1437
1505
|
}
|
|
1438
1506
|
break;
|
|
@@ -1499,6 +1567,7 @@ void print_lyx_node(GString *out, node *n, scratch_pad *scratch, bool no_newline
|
|
|
1499
1567
|
g_string_append(out,"\n\\end_inset");
|
|
1500
1568
|
g_string_append(out, "\n\\end_layout\n");
|
|
1501
1569
|
scratch->lyx_table_caption = NULL;
|
|
1570
|
+
scratch->table_alignment = NULL;
|
|
1502
1571
|
break;
|
|
1503
1572
|
case TABLESEPARATOR:
|
|
1504
1573
|
colwidth = 100/scratch->lyx_table_total_cols;
|
|
@@ -1651,6 +1720,7 @@ void print_lyx_node(GString *out, node *n, scratch_pad *scratch, bool no_newline
|
|
|
1651
1720
|
fprintf(stderr,"SOURCEBRANCH\n");
|
|
1652
1721
|
break;
|
|
1653
1722
|
case NOTELABEL:
|
|
1723
|
+
case GLOSSARYLABEL:
|
|
1654
1724
|
break;
|
|
1655
1725
|
case SUPERSCRIPT:
|
|
1656
1726
|
g_string_append_printf(out, "\n\\begin_inset script superscript\n\n\\begin_layout Plain Layout\n%s\n\\end_layout\n\n\\end_inset\n",n->str);
|
|
@@ -1669,25 +1739,36 @@ void print_lyx_node(GString *out, node *n, scratch_pad *scratch, bool no_newline
|
|
|
1669
1739
|
/* print_lyx_endnotes */
|
|
1670
1740
|
void print_lyx_endnotes(GString *out, scratch_pad *scratch) {
|
|
1671
1741
|
node *temp_node;
|
|
1742
|
+
bool do_nomenclature;
|
|
1672
1743
|
scratch->used_notes = reverse_list(scratch->used_notes);
|
|
1673
1744
|
node *note = scratch->used_notes;
|
|
1674
1745
|
#ifdef DEBUG_ON
|
|
1675
1746
|
fprintf(stderr, "start endnotes\n");
|
|
1676
1747
|
#endif
|
|
1677
1748
|
|
|
1678
|
-
/* Handle Glossary */
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1749
|
+
/* Handle Glossary or abbreviations */
|
|
1750
|
+
do_nomenclature = false;
|
|
1751
|
+
if (strcmp(used_abbreviations->str,"")!=0){ // if any abbreviations have been used, print a glossary
|
|
1752
|
+
do_nomenclature = true;
|
|
1753
|
+
} else
|
|
1754
|
+
{
|
|
1755
|
+
temp_node = note;
|
|
1756
|
+
while (temp_node != NULL){
|
|
1757
|
+
if(temp_node->key == GLOSSARYSOURCE){
|
|
1758
|
+
do_nomenclature = true;
|
|
1759
|
+
break;
|
|
1760
|
+
}
|
|
1761
|
+
temp_node = temp_node->next;
|
|
1762
|
+
}
|
|
1763
|
+
}
|
|
1764
|
+
|
|
1765
|
+
if (do_nomenclature){
|
|
1682
1766
|
g_string_append(out,"\n\\begin_layout Standard");
|
|
1683
1767
|
g_string_append(out,"\n\\begin_inset CommandInset nomencl_print");
|
|
1684
1768
|
g_string_append(out,"\nLatexCommand printnomenclature");
|
|
1685
1769
|
g_string_append(out,"\nset_width \"auto\"\n");
|
|
1686
1770
|
g_string_append(out,"\n\\end_inset\n");
|
|
1687
1771
|
g_string_append(out,"\n\\end_layout\n");
|
|
1688
|
-
break;
|
|
1689
|
-
}
|
|
1690
|
-
temp_node = temp_node->next;
|
|
1691
1772
|
}
|
|
1692
1773
|
|
|
1693
1774
|
if (note == NULL)
|
|
@@ -1832,9 +1913,11 @@ void print_lyx_localized_typography(GString *out, unsigned char character, scrat
|
|
|
1832
1913
|
/* print_lyx_string - print string, escaping and formatting for LYX */
|
|
1833
1914
|
void print_lyx_string(GString *out, char *str, scratch_pad *scratch, short environment) {
|
|
1834
1915
|
char *tmp;
|
|
1916
|
+
char *start;
|
|
1835
1917
|
unsigned char extended_character;
|
|
1836
1918
|
if (str == NULL)
|
|
1837
1919
|
return;
|
|
1920
|
+
start = str; /* Store start of string */
|
|
1838
1921
|
if (environment == LYX_PLAIN) {
|
|
1839
1922
|
g_string_append(out,"\n\\begin_layout Plain Layout\n\n");
|
|
1840
1923
|
}
|
|
@@ -1871,7 +1954,7 @@ void print_lyx_string(GString *out, char *str, scratch_pad *scratch, short envir
|
|
|
1871
1954
|
} else {
|
|
1872
1955
|
tmp = str;
|
|
1873
1956
|
tmp--;
|
|
1874
|
-
if (*tmp == ' ') {
|
|
1957
|
+
if ((tmp > start) && (*tmp == ' ')) {
|
|
1875
1958
|
g_string_append(out,"\n");
|
|
1876
1959
|
} else {
|
|
1877
1960
|
g_string_append(out, "\n "); /* add a space */
|
|
@@ -1881,14 +1964,14 @@ void print_lyx_string(GString *out, char *str, scratch_pad *scratch, short envir
|
|
|
1881
1964
|
case '<': /* look for HTML comment LaTeX escape */
|
|
1882
1965
|
if ( (environment != LYX_CODE) && (environment != LYX_PLAIN) && (strncmp(str,"<!--",4) == 0)){
|
|
1883
1966
|
str+=4; /* move past delimeter */
|
|
1884
|
-
g_string_append(out, "\n\\begin_inset ERT\nstatus collapsed\n\n\\begin_layout Plain Layout\n\n");
|
|
1967
|
+
g_string_append(out, "\n\\begin_layoutPlain Layout\n\\begin_inset ERT\nstatus collapsed\n\n\\begin_layout Plain Layout\n\n");
|
|
1885
1968
|
while(strncmp(str,"-->",3) !=0){
|
|
1886
1969
|
switch (*str){
|
|
1887
1970
|
case '\\':
|
|
1888
1971
|
g_string_append(out,"\n\\backslash\n\n");
|
|
1889
1972
|
break;
|
|
1890
1973
|
case '\"':
|
|
1891
|
-
g_string_append(out,"\n\\begin_inset Quotes erd\n\\end_inset\n");
|
|
1974
|
+
g_string_append(out,"\n\\begin_inset Quotes erd\n\\end_inset\n\\end_layout\n");
|
|
1892
1975
|
break;
|
|
1893
1976
|
default:
|
|
1894
1977
|
g_string_append_c(out,*str);
|
|
@@ -2161,3 +2244,19 @@ void print_escaped_node(GString *out, node *n) {
|
|
|
2161
2244
|
}
|
|
2162
2245
|
print_escaped_node_tree(out, n->children);
|
|
2163
2246
|
}
|
|
2247
|
+
/* escape string - replace double quotes with escaped version */
|
|
2248
|
+
char * escape_string(char *str) {
|
|
2249
|
+
GString *out = g_string_new("");
|
|
2250
|
+
char *clean;
|
|
2251
|
+
while (*str != '\0') {
|
|
2252
|
+
if (*str == '"') {
|
|
2253
|
+
g_string_append(out, "\\\"");
|
|
2254
|
+
} else {
|
|
2255
|
+
g_string_append_c(out, *str);
|
|
2256
|
+
}
|
|
2257
|
+
str++;
|
|
2258
|
+
}
|
|
2259
|
+
clean = out->str;
|
|
2260
|
+
g_string_free(out, false);
|
|
2261
|
+
return clean;
|
|
2262
|
+
}
|