commonmarker 0.23.10 → 2.2.0
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/Cargo.lock +1156 -0
- data/Cargo.toml +7 -0
- data/README.md +237 -172
- data/ext/commonmarker/Cargo.toml +20 -0
- data/ext/commonmarker/extconf.rb +3 -6
- data/ext/commonmarker/src/lib.rs +103 -0
- data/ext/commonmarker/src/node.rs +1221 -0
- data/ext/commonmarker/src/options.rs +220 -0
- data/ext/commonmarker/src/plugins/syntax_highlighting.rs +166 -0
- data/ext/commonmarker/src/plugins.rs +6 -0
- data/ext/commonmarker/src/utils.rs +8 -0
- data/lib/commonmarker/config.rb +92 -40
- data/lib/commonmarker/constants.rb +7 -0
- data/lib/commonmarker/extension.rb +14 -0
- data/lib/commonmarker/node/ast.rb +8 -0
- data/lib/commonmarker/node/inspect.rb +14 -4
- data/lib/commonmarker/node.rb +29 -47
- data/lib/commonmarker/renderer.rb +1 -127
- data/lib/commonmarker/utils.rb +22 -0
- data/lib/commonmarker/version.rb +2 -2
- data/lib/commonmarker.rb +27 -25
- metadata +38 -191
- data/Rakefile +0 -109
- data/bin/commonmarker +0 -118
- data/commonmarker.gemspec +0 -38
- data/ext/commonmarker/arena.c +0 -104
- data/ext/commonmarker/autolink.c +0 -508
- data/ext/commonmarker/autolink.h +0 -8
- data/ext/commonmarker/blocks.c +0 -1622
- data/ext/commonmarker/buffer.c +0 -278
- data/ext/commonmarker/buffer.h +0 -116
- data/ext/commonmarker/case_fold_switch.inc +0 -4327
- data/ext/commonmarker/chunk.h +0 -135
- data/ext/commonmarker/cmark-gfm-core-extensions.h +0 -54
- data/ext/commonmarker/cmark-gfm-extension_api.h +0 -737
- data/ext/commonmarker/cmark-gfm-extensions_export.h +0 -42
- data/ext/commonmarker/cmark-gfm.h +0 -833
- data/ext/commonmarker/cmark-gfm_export.h +0 -42
- data/ext/commonmarker/cmark-gfm_version.h +0 -7
- data/ext/commonmarker/cmark.c +0 -55
- data/ext/commonmarker/cmark_ctype.c +0 -44
- data/ext/commonmarker/cmark_ctype.h +0 -33
- data/ext/commonmarker/commonmark.c +0 -514
- data/ext/commonmarker/commonmarker.c +0 -1308
- data/ext/commonmarker/commonmarker.h +0 -16
- data/ext/commonmarker/config.h +0 -76
- data/ext/commonmarker/core-extensions.c +0 -27
- data/ext/commonmarker/entities.inc +0 -2138
- data/ext/commonmarker/ext_scanners.c +0 -879
- data/ext/commonmarker/ext_scanners.h +0 -24
- data/ext/commonmarker/footnotes.c +0 -63
- data/ext/commonmarker/footnotes.h +0 -27
- data/ext/commonmarker/houdini.h +0 -57
- data/ext/commonmarker/houdini_href_e.c +0 -100
- data/ext/commonmarker/houdini_html_e.c +0 -66
- data/ext/commonmarker/houdini_html_u.c +0 -149
- data/ext/commonmarker/html.c +0 -502
- data/ext/commonmarker/html.h +0 -27
- data/ext/commonmarker/inlines.c +0 -1788
- data/ext/commonmarker/inlines.h +0 -29
- data/ext/commonmarker/iterator.c +0 -159
- data/ext/commonmarker/iterator.h +0 -26
- data/ext/commonmarker/latex.c +0 -468
- data/ext/commonmarker/linked_list.c +0 -37
- data/ext/commonmarker/man.c +0 -274
- data/ext/commonmarker/map.c +0 -129
- data/ext/commonmarker/map.h +0 -44
- data/ext/commonmarker/node.c +0 -1045
- data/ext/commonmarker/node.h +0 -167
- data/ext/commonmarker/parser.h +0 -59
- data/ext/commonmarker/plaintext.c +0 -218
- data/ext/commonmarker/plugin.c +0 -36
- data/ext/commonmarker/plugin.h +0 -34
- data/ext/commonmarker/references.c +0 -43
- data/ext/commonmarker/references.h +0 -26
- data/ext/commonmarker/registry.c +0 -63
- data/ext/commonmarker/registry.h +0 -24
- data/ext/commonmarker/render.c +0 -213
- data/ext/commonmarker/render.h +0 -62
- data/ext/commonmarker/scanners.c +0 -14056
- data/ext/commonmarker/scanners.h +0 -70
- data/ext/commonmarker/scanners.re +0 -341
- data/ext/commonmarker/strikethrough.c +0 -167
- data/ext/commonmarker/strikethrough.h +0 -9
- data/ext/commonmarker/syntax_extension.c +0 -149
- data/ext/commonmarker/syntax_extension.h +0 -34
- data/ext/commonmarker/table.c +0 -917
- data/ext/commonmarker/table.h +0 -12
- data/ext/commonmarker/tagfilter.c +0 -60
- data/ext/commonmarker/tagfilter.h +0 -8
- data/ext/commonmarker/tasklist.c +0 -156
- data/ext/commonmarker/tasklist.h +0 -8
- data/ext/commonmarker/utf8.c +0 -317
- data/ext/commonmarker/utf8.h +0 -35
- data/ext/commonmarker/xml.c +0 -182
- data/lib/commonmarker/renderer/html_renderer.rb +0 -256
data/ext/commonmarker/man.c
DELETED
@@ -1,274 +0,0 @@
|
|
1
|
-
#include <stdlib.h>
|
2
|
-
#include <stdio.h>
|
3
|
-
#include <string.h>
|
4
|
-
#include <assert.h>
|
5
|
-
|
6
|
-
#include "config.h"
|
7
|
-
#include "cmark-gfm.h"
|
8
|
-
#include "node.h"
|
9
|
-
#include "buffer.h"
|
10
|
-
#include "utf8.h"
|
11
|
-
#include "render.h"
|
12
|
-
#include "syntax_extension.h"
|
13
|
-
|
14
|
-
#define OUT(s, wrap, escaping) renderer->out(renderer, node, s, wrap, escaping)
|
15
|
-
#define LIT(s) renderer->out(renderer, node, s, false, LITERAL)
|
16
|
-
#define CR() renderer->cr(renderer)
|
17
|
-
#define BLANKLINE() renderer->blankline(renderer)
|
18
|
-
#define LIST_NUMBER_SIZE 20
|
19
|
-
|
20
|
-
// Functions to convert cmark_nodes to groff man strings.
|
21
|
-
static void S_outc(cmark_renderer *renderer, cmark_node *node,
|
22
|
-
cmark_escaping escape, int32_t c,
|
23
|
-
unsigned char nextc) {
|
24
|
-
(void)(nextc);
|
25
|
-
|
26
|
-
if (escape == LITERAL) {
|
27
|
-
cmark_render_code_point(renderer, c);
|
28
|
-
return;
|
29
|
-
}
|
30
|
-
|
31
|
-
switch (c) {
|
32
|
-
case 46:
|
33
|
-
if (renderer->begin_line) {
|
34
|
-
cmark_render_ascii(renderer, "\\&.");
|
35
|
-
} else {
|
36
|
-
cmark_render_code_point(renderer, c);
|
37
|
-
}
|
38
|
-
break;
|
39
|
-
case 39:
|
40
|
-
if (renderer->begin_line) {
|
41
|
-
cmark_render_ascii(renderer, "\\&'");
|
42
|
-
} else {
|
43
|
-
cmark_render_code_point(renderer, c);
|
44
|
-
}
|
45
|
-
break;
|
46
|
-
case 45:
|
47
|
-
cmark_render_ascii(renderer, "\\-");
|
48
|
-
break;
|
49
|
-
case 92:
|
50
|
-
cmark_render_ascii(renderer, "\\e");
|
51
|
-
break;
|
52
|
-
case 8216: // left single quote
|
53
|
-
cmark_render_ascii(renderer, "\\[oq]");
|
54
|
-
break;
|
55
|
-
case 8217: // right single quote
|
56
|
-
cmark_render_ascii(renderer, "\\[cq]");
|
57
|
-
break;
|
58
|
-
case 8220: // left double quote
|
59
|
-
cmark_render_ascii(renderer, "\\[lq]");
|
60
|
-
break;
|
61
|
-
case 8221: // right double quote
|
62
|
-
cmark_render_ascii(renderer, "\\[rq]");
|
63
|
-
break;
|
64
|
-
case 8212: // em dash
|
65
|
-
cmark_render_ascii(renderer, "\\[em]");
|
66
|
-
break;
|
67
|
-
case 8211: // en dash
|
68
|
-
cmark_render_ascii(renderer, "\\[en]");
|
69
|
-
break;
|
70
|
-
default:
|
71
|
-
cmark_render_code_point(renderer, c);
|
72
|
-
}
|
73
|
-
}
|
74
|
-
|
75
|
-
static int S_render_node(cmark_renderer *renderer, cmark_node *node,
|
76
|
-
cmark_event_type ev_type, int options) {
|
77
|
-
int list_number;
|
78
|
-
bool entering = (ev_type == CMARK_EVENT_ENTER);
|
79
|
-
bool allow_wrap = renderer->width > 0 && !(CMARK_OPT_NOBREAKS & options);
|
80
|
-
|
81
|
-
if (node->extension && node->extension->man_render_func) {
|
82
|
-
node->extension->man_render_func(node->extension, renderer, node, ev_type, options);
|
83
|
-
return 1;
|
84
|
-
}
|
85
|
-
|
86
|
-
switch (node->type) {
|
87
|
-
case CMARK_NODE_DOCUMENT:
|
88
|
-
if (entering) {
|
89
|
-
/* Define a strikethrough macro */
|
90
|
-
/* Commenting out because this makes tests fail
|
91
|
-
LIT(".de ST");
|
92
|
-
CR();
|
93
|
-
LIT(".nr ww \\w'\\\\$1'");
|
94
|
-
CR();
|
95
|
-
LIT("\\Z@\\v'-.25m'\\l'\\\\n[ww]u'@\\\\$1");
|
96
|
-
CR();
|
97
|
-
LIT("..");
|
98
|
-
CR();
|
99
|
-
*/
|
100
|
-
}
|
101
|
-
break;
|
102
|
-
|
103
|
-
case CMARK_NODE_BLOCK_QUOTE:
|
104
|
-
if (entering) {
|
105
|
-
CR();
|
106
|
-
LIT(".RS");
|
107
|
-
CR();
|
108
|
-
} else {
|
109
|
-
CR();
|
110
|
-
LIT(".RE");
|
111
|
-
CR();
|
112
|
-
}
|
113
|
-
break;
|
114
|
-
|
115
|
-
case CMARK_NODE_LIST:
|
116
|
-
break;
|
117
|
-
|
118
|
-
case CMARK_NODE_ITEM:
|
119
|
-
if (entering) {
|
120
|
-
CR();
|
121
|
-
LIT(".IP ");
|
122
|
-
if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) {
|
123
|
-
LIT("\\[bu] 2");
|
124
|
-
} else {
|
125
|
-
list_number = cmark_node_get_item_index(node);
|
126
|
-
char list_number_s[LIST_NUMBER_SIZE];
|
127
|
-
snprintf(list_number_s, LIST_NUMBER_SIZE, "\"%d.\" 4", list_number);
|
128
|
-
LIT(list_number_s);
|
129
|
-
}
|
130
|
-
CR();
|
131
|
-
} else {
|
132
|
-
CR();
|
133
|
-
}
|
134
|
-
break;
|
135
|
-
|
136
|
-
case CMARK_NODE_HEADING:
|
137
|
-
if (entering) {
|
138
|
-
CR();
|
139
|
-
LIT(cmark_node_get_heading_level(node) == 1 ? ".SH" : ".SS");
|
140
|
-
CR();
|
141
|
-
} else {
|
142
|
-
CR();
|
143
|
-
}
|
144
|
-
break;
|
145
|
-
|
146
|
-
case CMARK_NODE_CODE_BLOCK:
|
147
|
-
CR();
|
148
|
-
LIT(".IP\n.nf\n\\f[C]\n");
|
149
|
-
OUT(cmark_node_get_literal(node), false, NORMAL);
|
150
|
-
CR();
|
151
|
-
LIT("\\f[]\n.fi");
|
152
|
-
CR();
|
153
|
-
break;
|
154
|
-
|
155
|
-
case CMARK_NODE_HTML_BLOCK:
|
156
|
-
break;
|
157
|
-
|
158
|
-
case CMARK_NODE_CUSTOM_BLOCK:
|
159
|
-
CR();
|
160
|
-
OUT(entering ? cmark_node_get_on_enter(node) : cmark_node_get_on_exit(node),
|
161
|
-
false, LITERAL);
|
162
|
-
CR();
|
163
|
-
break;
|
164
|
-
|
165
|
-
case CMARK_NODE_THEMATIC_BREAK:
|
166
|
-
CR();
|
167
|
-
LIT(".PP\n * * * * *");
|
168
|
-
CR();
|
169
|
-
break;
|
170
|
-
|
171
|
-
case CMARK_NODE_PARAGRAPH:
|
172
|
-
if (entering) {
|
173
|
-
// no blank line if first paragraph in list:
|
174
|
-
if (node->parent && node->parent->type == CMARK_NODE_ITEM &&
|
175
|
-
node->prev == NULL) {
|
176
|
-
// no blank line or .PP
|
177
|
-
} else {
|
178
|
-
CR();
|
179
|
-
LIT(".PP");
|
180
|
-
CR();
|
181
|
-
}
|
182
|
-
} else {
|
183
|
-
CR();
|
184
|
-
}
|
185
|
-
break;
|
186
|
-
|
187
|
-
case CMARK_NODE_TEXT:
|
188
|
-
OUT(cmark_node_get_literal(node), allow_wrap, NORMAL);
|
189
|
-
break;
|
190
|
-
|
191
|
-
case CMARK_NODE_LINEBREAK:
|
192
|
-
LIT(".PD 0\n.P\n.PD");
|
193
|
-
CR();
|
194
|
-
break;
|
195
|
-
|
196
|
-
case CMARK_NODE_SOFTBREAK:
|
197
|
-
if (options & CMARK_OPT_HARDBREAKS) {
|
198
|
-
LIT(".PD 0\n.P\n.PD");
|
199
|
-
CR();
|
200
|
-
} else if (renderer->width == 0 && !(CMARK_OPT_NOBREAKS & options)) {
|
201
|
-
CR();
|
202
|
-
} else {
|
203
|
-
OUT(" ", allow_wrap, LITERAL);
|
204
|
-
}
|
205
|
-
break;
|
206
|
-
|
207
|
-
case CMARK_NODE_CODE:
|
208
|
-
LIT("\\f[C]");
|
209
|
-
OUT(cmark_node_get_literal(node), allow_wrap, NORMAL);
|
210
|
-
LIT("\\f[]");
|
211
|
-
break;
|
212
|
-
|
213
|
-
case CMARK_NODE_HTML_INLINE:
|
214
|
-
break;
|
215
|
-
|
216
|
-
case CMARK_NODE_CUSTOM_INLINE:
|
217
|
-
OUT(entering ? cmark_node_get_on_enter(node) : cmark_node_get_on_exit(node),
|
218
|
-
false, LITERAL);
|
219
|
-
break;
|
220
|
-
|
221
|
-
case CMARK_NODE_STRONG:
|
222
|
-
if (node->parent == NULL || node->parent->type != CMARK_NODE_STRONG) {
|
223
|
-
if (entering) {
|
224
|
-
LIT("\\f[B]");
|
225
|
-
} else {
|
226
|
-
LIT("\\f[]");
|
227
|
-
}
|
228
|
-
}
|
229
|
-
break;
|
230
|
-
|
231
|
-
case CMARK_NODE_EMPH:
|
232
|
-
if (entering) {
|
233
|
-
LIT("\\f[I]");
|
234
|
-
} else {
|
235
|
-
LIT("\\f[]");
|
236
|
-
}
|
237
|
-
break;
|
238
|
-
|
239
|
-
case CMARK_NODE_LINK:
|
240
|
-
if (!entering) {
|
241
|
-
LIT(" (");
|
242
|
-
OUT(cmark_node_get_url(node), allow_wrap, URL);
|
243
|
-
LIT(")");
|
244
|
-
}
|
245
|
-
break;
|
246
|
-
|
247
|
-
case CMARK_NODE_IMAGE:
|
248
|
-
if (entering) {
|
249
|
-
LIT("[IMAGE: ");
|
250
|
-
} else {
|
251
|
-
LIT("]");
|
252
|
-
}
|
253
|
-
break;
|
254
|
-
|
255
|
-
case CMARK_NODE_FOOTNOTE_DEFINITION:
|
256
|
-
case CMARK_NODE_FOOTNOTE_REFERENCE:
|
257
|
-
// TODO
|
258
|
-
break;
|
259
|
-
|
260
|
-
default:
|
261
|
-
assert(false);
|
262
|
-
break;
|
263
|
-
}
|
264
|
-
|
265
|
-
return 1;
|
266
|
-
}
|
267
|
-
|
268
|
-
char *cmark_render_man(cmark_node *root, int options, int width) {
|
269
|
-
return cmark_render_man_with_mem(root, options, width, cmark_node_mem(root));
|
270
|
-
}
|
271
|
-
|
272
|
-
char *cmark_render_man_with_mem(cmark_node *root, int options, int width, cmark_mem *mem) {
|
273
|
-
return cmark_render(mem, root, options, width, S_outc, S_render_node);
|
274
|
-
}
|
data/ext/commonmarker/map.c
DELETED
@@ -1,129 +0,0 @@
|
|
1
|
-
#include "map.h"
|
2
|
-
#include "utf8.h"
|
3
|
-
#include "parser.h"
|
4
|
-
|
5
|
-
// normalize map label: collapse internal whitespace to single space,
|
6
|
-
// remove leading/trailing whitespace, case fold
|
7
|
-
// Return NULL if the label is actually empty (i.e. composed solely from
|
8
|
-
// whitespace)
|
9
|
-
unsigned char *normalize_map_label(cmark_mem *mem, cmark_chunk *ref) {
|
10
|
-
cmark_strbuf normalized = CMARK_BUF_INIT(mem);
|
11
|
-
unsigned char *result;
|
12
|
-
|
13
|
-
if (ref == NULL)
|
14
|
-
return NULL;
|
15
|
-
|
16
|
-
if (ref->len == 0)
|
17
|
-
return NULL;
|
18
|
-
|
19
|
-
cmark_utf8proc_case_fold(&normalized, ref->data, ref->len);
|
20
|
-
cmark_strbuf_trim(&normalized);
|
21
|
-
cmark_strbuf_normalize_whitespace(&normalized);
|
22
|
-
|
23
|
-
result = cmark_strbuf_detach(&normalized);
|
24
|
-
assert(result);
|
25
|
-
|
26
|
-
if (result[0] == '\0') {
|
27
|
-
mem->free(result);
|
28
|
-
return NULL;
|
29
|
-
}
|
30
|
-
|
31
|
-
return result;
|
32
|
-
}
|
33
|
-
|
34
|
-
static int
|
35
|
-
labelcmp(const unsigned char *a, const unsigned char *b) {
|
36
|
-
return strcmp((const char *)a, (const char *)b);
|
37
|
-
}
|
38
|
-
|
39
|
-
static int
|
40
|
-
refcmp(const void *p1, const void *p2) {
|
41
|
-
cmark_map_entry *r1 = *(cmark_map_entry **)p1;
|
42
|
-
cmark_map_entry *r2 = *(cmark_map_entry **)p2;
|
43
|
-
int res = labelcmp(r1->label, r2->label);
|
44
|
-
return res ? res : ((int)r1->age - (int)r2->age);
|
45
|
-
}
|
46
|
-
|
47
|
-
static int
|
48
|
-
refsearch(const void *label, const void *p2) {
|
49
|
-
cmark_map_entry *ref = *(cmark_map_entry **)p2;
|
50
|
-
return labelcmp((const unsigned char *)label, ref->label);
|
51
|
-
}
|
52
|
-
|
53
|
-
static void sort_map(cmark_map *map) {
|
54
|
-
size_t i = 0, last = 0, size = map->size;
|
55
|
-
cmark_map_entry *r = map->refs, **sorted = NULL;
|
56
|
-
|
57
|
-
sorted = (cmark_map_entry **)map->mem->calloc(size, sizeof(cmark_map_entry *));
|
58
|
-
while (r) {
|
59
|
-
sorted[i++] = r;
|
60
|
-
r = r->next;
|
61
|
-
}
|
62
|
-
|
63
|
-
qsort(sorted, size, sizeof(cmark_map_entry *), refcmp);
|
64
|
-
|
65
|
-
for (i = 1; i < size; i++) {
|
66
|
-
if (labelcmp(sorted[i]->label, sorted[last]->label) != 0)
|
67
|
-
sorted[++last] = sorted[i];
|
68
|
-
}
|
69
|
-
|
70
|
-
map->sorted = sorted;
|
71
|
-
map->size = last + 1;
|
72
|
-
}
|
73
|
-
|
74
|
-
cmark_map_entry *cmark_map_lookup(cmark_map *map, cmark_chunk *label) {
|
75
|
-
cmark_map_entry **ref = NULL;
|
76
|
-
cmark_map_entry *r = NULL;
|
77
|
-
unsigned char *norm;
|
78
|
-
|
79
|
-
if (label->len < 1 || label->len > MAX_LINK_LABEL_LENGTH)
|
80
|
-
return NULL;
|
81
|
-
|
82
|
-
if (map == NULL || !map->size)
|
83
|
-
return NULL;
|
84
|
-
|
85
|
-
norm = normalize_map_label(map->mem, label);
|
86
|
-
if (norm == NULL)
|
87
|
-
return NULL;
|
88
|
-
|
89
|
-
if (!map->sorted)
|
90
|
-
sort_map(map);
|
91
|
-
|
92
|
-
ref = (cmark_map_entry **)bsearch(norm, map->sorted, map->size, sizeof(cmark_map_entry *), refsearch);
|
93
|
-
map->mem->free(norm);
|
94
|
-
|
95
|
-
if (ref != NULL) {
|
96
|
-
r = ref[0];
|
97
|
-
/* Check for expansion limit */
|
98
|
-
if (r->size > map->max_ref_size - map->ref_size)
|
99
|
-
return NULL;
|
100
|
-
map->ref_size += r->size;
|
101
|
-
}
|
102
|
-
|
103
|
-
return r;
|
104
|
-
}
|
105
|
-
|
106
|
-
void cmark_map_free(cmark_map *map) {
|
107
|
-
cmark_map_entry *ref;
|
108
|
-
|
109
|
-
if (map == NULL)
|
110
|
-
return;
|
111
|
-
|
112
|
-
ref = map->refs;
|
113
|
-
while (ref) {
|
114
|
-
cmark_map_entry *next = ref->next;
|
115
|
-
map->free(map, ref);
|
116
|
-
ref = next;
|
117
|
-
}
|
118
|
-
|
119
|
-
map->mem->free(map->sorted);
|
120
|
-
map->mem->free(map);
|
121
|
-
}
|
122
|
-
|
123
|
-
cmark_map *cmark_map_new(cmark_mem *mem, cmark_map_free_f free) {
|
124
|
-
cmark_map *map = (cmark_map *)mem->calloc(1, sizeof(cmark_map));
|
125
|
-
map->mem = mem;
|
126
|
-
map->free = free;
|
127
|
-
map->max_ref_size = UINT_MAX;
|
128
|
-
return map;
|
129
|
-
}
|
data/ext/commonmarker/map.h
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
#ifndef CMARK_MAP_H
|
2
|
-
#define CMARK_MAP_H
|
3
|
-
|
4
|
-
#include "chunk.h"
|
5
|
-
|
6
|
-
#ifdef __cplusplus
|
7
|
-
extern "C" {
|
8
|
-
#endif
|
9
|
-
|
10
|
-
struct cmark_map_entry {
|
11
|
-
struct cmark_map_entry *next;
|
12
|
-
unsigned char *label;
|
13
|
-
size_t age;
|
14
|
-
size_t size;
|
15
|
-
};
|
16
|
-
|
17
|
-
typedef struct cmark_map_entry cmark_map_entry;
|
18
|
-
|
19
|
-
struct cmark_map;
|
20
|
-
|
21
|
-
typedef void (*cmark_map_free_f)(struct cmark_map *, cmark_map_entry *);
|
22
|
-
|
23
|
-
struct cmark_map {
|
24
|
-
cmark_mem *mem;
|
25
|
-
cmark_map_entry *refs;
|
26
|
-
cmark_map_entry **sorted;
|
27
|
-
size_t size;
|
28
|
-
size_t ref_size;
|
29
|
-
size_t max_ref_size;
|
30
|
-
cmark_map_free_f free;
|
31
|
-
};
|
32
|
-
|
33
|
-
typedef struct cmark_map cmark_map;
|
34
|
-
|
35
|
-
unsigned char *normalize_map_label(cmark_mem *mem, cmark_chunk *ref);
|
36
|
-
cmark_map *cmark_map_new(cmark_mem *mem, cmark_map_free_f free);
|
37
|
-
void cmark_map_free(cmark_map *map);
|
38
|
-
cmark_map_entry *cmark_map_lookup(cmark_map *map, cmark_chunk *label);
|
39
|
-
|
40
|
-
#ifdef __cplusplus
|
41
|
-
}
|
42
|
-
#endif
|
43
|
-
|
44
|
-
#endif
|