cmark

My personal build of CMark ✏️

cmark.3 (19075B)

  1 .TH cmark 3 "February 09, 2020" "LOCAL" "Library Functions Manual"
  2 .SH
  3 NAME
  4 .PP
  5 \f[B]cmark\f[] \- CommonMark parsing, manipulating, and rendering
  6 
  7 .SH
  8 DESCRIPTION
  9 .SS
 10 Simple Interface
 11 
 12 .PP
 13 \fIchar *\f[] \fBcmark_markdown_to_html\f[](\fIconst char *text\f[], \fIsize_t len\f[], \fIint options\f[])
 14 
 15 .PP
 16 Convert \f[I]text\f[] (assumed to be a UTF\-8 encoded string with length
 17 \f[I]len\f[]) from CommonMark Markdown to HTML, returning a
 18 null\-terminated, UTF\-8\-encoded string. It is the caller's
 19 responsibility to free the returned buffer.
 20 
 21 .SS
 22 Node Structure
 23 
 24 .PP
 25 .nf
 26 \fC
 27 .RS 0n
 28 typedef enum {
 29   /* Error status */
 30   CMARK_NODE_NONE,
 31 
 32   /* Block */
 33   CMARK_NODE_DOCUMENT,
 34   CMARK_NODE_BLOCK_QUOTE,
 35   CMARK_NODE_LIST,
 36   CMARK_NODE_ITEM,
 37   CMARK_NODE_CODE_BLOCK,
 38   CMARK_NODE_HTML_BLOCK,
 39   CMARK_NODE_CUSTOM_BLOCK,
 40   CMARK_NODE_PARAGRAPH,
 41   CMARK_NODE_HEADING,
 42   CMARK_NODE_THEMATIC_BREAK,
 43 
 44   CMARK_NODE_FIRST_BLOCK = CMARK_NODE_DOCUMENT,
 45   CMARK_NODE_LAST_BLOCK = CMARK_NODE_THEMATIC_BREAK,
 46 
 47   /* Inline */
 48   CMARK_NODE_TEXT,
 49   CMARK_NODE_SOFTBREAK,
 50   CMARK_NODE_LINEBREAK,
 51   CMARK_NODE_CODE,
 52   CMARK_NODE_HTML_INLINE,
 53   CMARK_NODE_CUSTOM_INLINE,
 54   CMARK_NODE_EMPH,
 55   CMARK_NODE_STRONG,
 56   CMARK_NODE_LINK,
 57   CMARK_NODE_IMAGE,
 58 
 59   CMARK_NODE_FIRST_INLINE = CMARK_NODE_TEXT,
 60   CMARK_NODE_LAST_INLINE = CMARK_NODE_IMAGE,
 61 } cmark_node_type;
 62 .RE
 63 \f[]
 64 .fi
 65 
 66 
 67 
 68 .PP
 69 .nf
 70 \fC
 71 .RS 0n
 72 typedef enum {
 73   CMARK_NO_LIST,
 74   CMARK_BULLET_LIST,
 75   CMARK_ORDERED_LIST
 76 } cmark_list_type;
 77 .RE
 78 \f[]
 79 .fi
 80 
 81 
 82 
 83 .PP
 84 .nf
 85 \fC
 86 .RS 0n
 87 typedef enum {
 88   CMARK_NO_DELIM,
 89   CMARK_PERIOD_DELIM,
 90   CMARK_PAREN_DELIM
 91 } cmark_delim_type;
 92 .RE
 93 \f[]
 94 .fi
 95 
 96 
 97 
 98 .SS
 99 Custom memory allocator support
100 
101 .PP
102 .nf
103 \fC
104 .RS 0n
105 typedef struct cmark_mem {
106   void *(*calloc)(size_t, size_t);
107   void *(*realloc)(void *, size_t);
108   void (*free)(void *);
109 } cmark_mem;
110 .RE
111 \f[]
112 .fi
113 
114 .PP
115 Defines the memory allocation functions to be used by CMark when parsing
116 and allocating a document tree
117 
118 .PP
119 \fIcmark_mem *\f[] \fBcmark_get_default_mem_allocator\f[](\fI\f[])
120 
121 .PP
122 Returns a pointer to the default memory allocator.
123 
124 .SS
125 Creating and Destroying Nodes
126 
127 .PP
128 \fIcmark_node *\f[] \fBcmark_node_new\f[](\fIcmark_node_type type\f[])
129 
130 .PP
131 Creates a new node of type \f[I]type\f[]. Note that the node may have
132 other required properties, which it is the caller's responsibility to
133 assign.
134 
135 .PP
136 \fIcmark_node *\f[] \fBcmark_node_new_with_mem\f[](\fIcmark_node_type type\f[], \fIcmark_mem *mem\f[])
137 
138 .PP
139 Same as \f[C]cmark_node_new\f[], but explicitly listing the memory
140 allocator used to allocate the node. Note: be sure to use the same
141 allocator for every node in a tree, or bad things can happen.
142 
143 .PP
144 \fIvoid\f[] \fBcmark_node_free\f[](\fIcmark_node *node\f[])
145 
146 .PP
147 Frees the memory allocated for a node and any children.
148 
149 .SS
150 Tree Traversal
151 
152 .PP
153 \fIcmark_node *\f[] \fBcmark_node_next\f[](\fIcmark_node *node\f[])
154 
155 .PP
156 Returns the next node in the sequence after \f[I]node\f[], or NULL if
157 there is none.
158 
159 .PP
160 \fIcmark_node *\f[] \fBcmark_node_previous\f[](\fIcmark_node *node\f[])
161 
162 .PP
163 Returns the previous node in the sequence after \f[I]node\f[], or NULL
164 if there is none.
165 
166 .PP
167 \fIcmark_node *\f[] \fBcmark_node_parent\f[](\fIcmark_node *node\f[])
168 
169 .PP
170 Returns the parent of \f[I]node\f[], or NULL if there is none.
171 
172 .PP
173 \fIcmark_node *\f[] \fBcmark_node_first_child\f[](\fIcmark_node *node\f[])
174 
175 .PP
176 Returns the first child of \f[I]node\f[], or NULL if \f[I]node\f[] has
177 no children.
178 
179 .PP
180 \fIcmark_node *\f[] \fBcmark_node_last_child\f[](\fIcmark_node *node\f[])
181 
182 .PP
183 Returns the last child of \f[I]node\f[], or NULL if \f[I]node\f[] has no
184 children.
185 
186 .SS
187 Iterator
188 .PP
189 An iterator will walk through a tree of nodes, starting from a root
190 node, returning one node at a time, together with information about
191 whether the node is being entered or exited. The iterator will first
192 descend to a child node, if there is one. When there is no child, the
193 iterator will go to the next sibling. When there is no next sibling, the
194 iterator will return to the parent (but with a \f[I]cmark_event_type\f[]
195 of \f[C]CMARK_EVENT_EXIT\f[]). The iterator will return
196 \f[C]CMARK_EVENT_DONE\f[] when it reaches the root node again. One
197 natural application is an HTML renderer, where an \f[C]ENTER\f[] event
198 outputs an open tag and an \f[C]EXIT\f[] event outputs a close tag. An
199 iterator might also be used to transform an AST in some systematic way,
200 for example, turning all level\-3 headings into regular paragraphs.
201 .IP
202 .nf
203 \f[C]
204 void
205 usage_example(cmark_node *root) {
206     cmark_event_type ev_type;
207     cmark_iter *iter = cmark_iter_new(root);
208 
209     while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
210         cmark_node *cur = cmark_iter_get_node(iter);
211         // Do something with `cur` and `ev_type`
212     }
213 
214     cmark_iter_free(iter);
215 }
216 \f[]
217 .fi
218 .PP
219 Iterators will never return \f[C]EXIT\f[] events for leaf nodes, which
220 are nodes of type:
221 .IP \[bu] 2
222 CMARK_NODE_HTML_BLOCK
223 .IP \[bu] 2
224 CMARK_NODE_THEMATIC_BREAK
225 .IP \[bu] 2
226 CMARK_NODE_CODE_BLOCK
227 .IP \[bu] 2
228 CMARK_NODE_TEXT
229 .IP \[bu] 2
230 CMARK_NODE_SOFTBREAK
231 .IP \[bu] 2
232 CMARK_NODE_LINEBREAK
233 .IP \[bu] 2
234 CMARK_NODE_CODE
235 .IP \[bu] 2
236 CMARK_NODE_HTML_INLINE
237 .PP
238 Nodes must only be modified after an \f[C]EXIT\f[] event, or an
239 \f[C]ENTER\f[] event for leaf nodes.
240 
241 .PP
242 .nf
243 \fC
244 .RS 0n
245 typedef enum {
246   CMARK_EVENT_NONE,
247   CMARK_EVENT_DONE,
248   CMARK_EVENT_ENTER,
249   CMARK_EVENT_EXIT
250 } cmark_event_type;
251 .RE
252 \f[]
253 .fi
254 
255 
256 
257 .PP
258 \fIcmark_iter *\f[] \fBcmark_iter_new\f[](\fIcmark_node *root\f[])
259 
260 .PP
261 Creates a new iterator starting at \f[I]root\f[]. The current node and
262 event type are undefined until \f[I]cmark_iter_next\f[] is called for
263 the first time. The memory allocated for the iterator should be released
264 using \f[I]cmark_iter_free\f[] when it is no longer needed.
265 
266 .PP
267 \fIvoid\f[] \fBcmark_iter_free\f[](\fIcmark_iter *iter\f[])
268 
269 .PP
270 Frees the memory allocated for an iterator.
271 
272 .PP
273 \fIcmark_event_type\f[] \fBcmark_iter_next\f[](\fIcmark_iter *iter\f[])
274 
275 .PP
276 Advances to the next node and returns the event type
277 (\f[C]CMARK_EVENT_ENTER\f[], \f[C]CMARK_EVENT_EXIT\f[] or
278 \f[C]CMARK_EVENT_DONE\f[]).
279 
280 .PP
281 \fIcmark_node *\f[] \fBcmark_iter_get_node\f[](\fIcmark_iter *iter\f[])
282 
283 .PP
284 Returns the current node.
285 
286 .PP
287 \fIcmark_event_type\f[] \fBcmark_iter_get_event_type\f[](\fIcmark_iter *iter\f[])
288 
289 .PP
290 Returns the current event type.
291 
292 .PP
293 \fIcmark_node *\f[] \fBcmark_iter_get_root\f[](\fIcmark_iter *iter\f[])
294 
295 .PP
296 Returns the root node.
297 
298 .PP
299 \fIvoid\f[] \fBcmark_iter_reset\f[](\fIcmark_iter *iter\f[], \fIcmark_node *current\f[], \fIcmark_event_type event_type\f[])
300 
301 .PP
302 Resets the iterator so that the current node is \f[I]current\f[] and the
303 event type is \f[I]event_type\f[]. The new current node must be a
304 descendant of the root node or the root node itself.
305 
306 .SS
307 Accessors
308 
309 .PP
310 \fIvoid *\f[] \fBcmark_node_get_user_data\f[](\fIcmark_node *node\f[])
311 
312 .PP
313 Returns the user data of \f[I]node\f[].
314 
315 .PP
316 \fIint\f[] \fBcmark_node_set_user_data\f[](\fIcmark_node *node\f[], \fIvoid *user_data\f[])
317 
318 .PP
319 Sets arbitrary user data for \f[I]node\f[]. Returns 1 on success, 0 on
320 failure.
321 
322 .PP
323 \fIcmark_node_type\f[] \fBcmark_node_get_type\f[](\fIcmark_node *node\f[])
324 
325 .PP
326 Returns the type of \f[I]node\f[], or \f[C]CMARK_NODE_NONE\f[] on error.
327 
328 .PP
329 \fIconst char *\f[] \fBcmark_node_get_type_string\f[](\fIcmark_node *node\f[])
330 
331 .PP
332 Like \f[I]cmark_node_get_type\f[], but returns a string representation
333 of the type, or \f[C]"<unknown>"\f[].
334 
335 .PP
336 \fIconst char *\f[] \fBcmark_node_get_literal\f[](\fIcmark_node *node\f[])
337 
338 .PP
339 Returns the string contents of \f[I]node\f[], or an empty string if none
340 is set. Returns NULL if called on a node that does not have string
341 content.
342 
343 .PP
344 \fIint\f[] \fBcmark_node_set_literal\f[](\fIcmark_node *node\f[], \fIconst char *content\f[])
345 
346 .PP
347 Sets the string contents of \f[I]node\f[]. Returns 1 on success, 0 on
348 failure.
349 
350 .PP
351 \fIint\f[] \fBcmark_node_get_heading_level\f[](\fIcmark_node *node\f[])
352 
353 .PP
354 Returns the heading level of \f[I]node\f[], or 0 if \f[I]node\f[] is not
355 a heading.
356 
357 .PP
358 \fIint\f[] \fBcmark_node_set_heading_level\f[](\fIcmark_node *node\f[], \fIint level\f[])
359 
360 .PP
361 Sets the heading level of \f[I]node\f[], returning 1 on success and 0 on
362 error.
363 
364 .PP
365 \fIcmark_list_type\f[] \fBcmark_node_get_list_type\f[](\fIcmark_node *node\f[])
366 
367 .PP
368 Returns the list type of \f[I]node\f[], or \f[C]CMARK_NO_LIST\f[] if
369 \f[I]node\f[] is not a list.
370 
371 .PP
372 \fIint\f[] \fBcmark_node_set_list_type\f[](\fIcmark_node *node\f[], \fIcmark_list_type type\f[])
373 
374 .PP
375 Sets the list type of \f[I]node\f[], returning 1 on success and 0 on
376 error.
377 
378 .PP
379 \fIcmark_delim_type\f[] \fBcmark_node_get_list_delim\f[](\fIcmark_node *node\f[])
380 
381 .PP
382 Returns the list delimiter type of \f[I]node\f[], or
383 \f[C]CMARK_NO_DELIM\f[] if \f[I]node\f[] is not a list.
384 
385 .PP
386 \fIint\f[] \fBcmark_node_set_list_delim\f[](\fIcmark_node *node\f[], \fIcmark_delim_type delim\f[])
387 
388 .PP
389 Sets the list delimiter type of \f[I]node\f[], returning 1 on success
390 and 0 on error.
391 
392 .PP
393 \fIint\f[] \fBcmark_node_get_list_start\f[](\fIcmark_node *node\f[])
394 
395 .PP
396 Returns starting number of \f[I]node\f[], if it is an ordered list,
397 otherwise 0.
398 
399 .PP
400 \fIint\f[] \fBcmark_node_set_list_start\f[](\fIcmark_node *node\f[], \fIint start\f[])
401 
402 .PP
403 Sets starting number of \f[I]node\f[], if it is an ordered list.
404 Returns 1 on success, 0 on failure.
405 
406 .PP
407 \fIint\f[] \fBcmark_node_get_list_tight\f[](\fIcmark_node *node\f[])
408 
409 .PP
410 Returns 1 if \f[I]node\f[] is a tight list, 0 otherwise.
411 
412 .PP
413 \fIint\f[] \fBcmark_node_set_list_tight\f[](\fIcmark_node *node\f[], \fIint tight\f[])
414 
415 .PP
416 Sets the "tightness" of a list. Returns 1 on success, 0 on failure.
417 
418 .PP
419 \fIconst char *\f[] \fBcmark_node_get_fence_info\f[](\fIcmark_node *node\f[])
420 
421 .PP
422 Returns the info string from a fenced code block.
423 
424 .PP
425 \fIint\f[] \fBcmark_node_set_fence_info\f[](\fIcmark_node *node\f[], \fIconst char *info\f[])
426 
427 .PP
428 Sets the info string in a fenced code block, returning 1 on success
429 and 0 on failure.
430 
431 .PP
432 \fIconst char *\f[] \fBcmark_node_get_url\f[](\fIcmark_node *node\f[])
433 
434 .PP
435 Returns the URL of a link or image \f[I]node\f[], or an empty string if
436 no URL is set. Returns NULL if called on a node that is not a link or
437 image.
438 
439 .PP
440 \fIint\f[] \fBcmark_node_set_url\f[](\fIcmark_node *node\f[], \fIconst char *url\f[])
441 
442 .PP
443 Sets the URL of a link or image \f[I]node\f[]. Returns 1 on success, 0
444 on failure.
445 
446 .PP
447 \fIconst char *\f[] \fBcmark_node_get_title\f[](\fIcmark_node *node\f[])
448 
449 .PP
450 Returns the title of a link or image \f[I]node\f[], or an empty string
451 if no title is set. Returns NULL if called on a node that is not a link
452 or image.
453 
454 .PP
455 \fIint\f[] \fBcmark_node_set_title\f[](\fIcmark_node *node\f[], \fIconst char *title\f[])
456 
457 .PP
458 Sets the title of a link or image \f[I]node\f[]. Returns 1 on success, 0
459 on failure.
460 
461 .PP
462 \fIconst char *\f[] \fBcmark_node_get_on_enter\f[](\fIcmark_node *node\f[])
463 
464 .PP
465 Returns the literal "on enter" text for a custom \f[I]node\f[], or an
466 empty string if no on_enter is set. Returns NULL if called on a
467 non\-custom node.
468 
469 .PP
470 \fIint\f[] \fBcmark_node_set_on_enter\f[](\fIcmark_node *node\f[], \fIconst char *on_enter\f[])
471 
472 .PP
473 Sets the literal text to render "on enter" for a custom \f[I]node\f[].
474 Any children of the node will be rendered after this text. Returns 1 on
475 success 0 on failure.
476 
477 .PP
478 \fIconst char *\f[] \fBcmark_node_get_on_exit\f[](\fIcmark_node *node\f[])
479 
480 .PP
481 Returns the literal "on exit" text for a custom \f[I]node\f[], or an
482 empty string if no on_exit is set. Returns NULL if called on a
483 non\-custom node.
484 
485 .PP
486 \fIint\f[] \fBcmark_node_set_on_exit\f[](\fIcmark_node *node\f[], \fIconst char *on_exit\f[])
487 
488 .PP
489 Sets the literal text to render "on exit" for a custom \f[I]node\f[].
490 Any children of the node will be rendered before this text. Returns 1 on
491 success 0 on failure.
492 
493 .PP
494 \fIint\f[] \fBcmark_node_get_start_line\f[](\fIcmark_node *node\f[])
495 
496 .PP
497 Returns the line on which \f[I]node\f[] begins.
498 
499 .PP
500 \fIint\f[] \fBcmark_node_get_start_column\f[](\fIcmark_node *node\f[])
501 
502 .PP
503 Returns the column at which \f[I]node\f[] begins.
504 
505 .PP
506 \fIint\f[] \fBcmark_node_get_end_line\f[](\fIcmark_node *node\f[])
507 
508 .PP
509 Returns the line on which \f[I]node\f[] ends.
510 
511 .PP
512 \fIint\f[] \fBcmark_node_get_end_column\f[](\fIcmark_node *node\f[])
513 
514 .PP
515 Returns the column at which \f[I]node\f[] ends.
516 
517 .SS
518 Tree Manipulation
519 
520 .PP
521 \fIvoid\f[] \fBcmark_node_unlink\f[](\fIcmark_node *node\f[])
522 
523 .PP
524 Unlinks a \f[I]node\f[], removing it from the tree, but not freeing its
525 memory. (Use \f[I]cmark_node_free\f[] for that.)
526 
527 .PP
528 \fIint\f[] \fBcmark_node_insert_before\f[](\fIcmark_node *node\f[], \fIcmark_node *sibling\f[])
529 
530 .PP
531 Inserts \f[I]sibling\f[] before \f[I]node\f[]. Returns 1 on success, 0
532 on failure.
533 
534 .PP
535 \fIint\f[] \fBcmark_node_insert_after\f[](\fIcmark_node *node\f[], \fIcmark_node *sibling\f[])
536 
537 .PP
538 Inserts \f[I]sibling\f[] after \f[I]node\f[]. Returns 1 on success, 0 on
539 failure.
540 
541 .PP
542 \fIint\f[] \fBcmark_node_replace\f[](\fIcmark_node *oldnode\f[], \fIcmark_node *newnode\f[])
543 
544 .PP
545 Replaces \f[I]oldnode\f[] with \f[I]newnode\f[] and unlinks
546 \f[I]oldnode\f[] (but does not free its memory). Returns 1 on success, 0
547 on failure.
548 
549 .PP
550 \fIint\f[] \fBcmark_node_prepend_child\f[](\fIcmark_node *node\f[], \fIcmark_node *child\f[])
551 
552 .PP
553 Adds \f[I]child\f[] to the beginning of the children of \f[I]node\f[].
554 Returns 1 on success, 0 on failure.
555 
556 .PP
557 \fIint\f[] \fBcmark_node_append_child\f[](\fIcmark_node *node\f[], \fIcmark_node *child\f[])
558 
559 .PP
560 Adds \f[I]child\f[] to the end of the children of \f[I]node\f[].
561 Returns 1 on success, 0 on failure.
562 
563 .PP
564 \fIvoid\f[] \fBcmark_consolidate_text_nodes\f[](\fIcmark_node *root\f[])
565 
566 .PP
567 Consolidates adjacent text nodes.
568 
569 .SS
570 Parsing
571 .PP
572 Simple interface:
573 .IP
574 .nf
575 \f[C]
576 cmark_node *document = cmark_parse_document("Hello *world*", 13,
577                                             CMARK_OPT_DEFAULT);
578 \f[]
579 .fi
580 .PP
581 Streaming interface:
582 .IP
583 .nf
584 \f[C]
585 cmark_parser *parser = cmark_parser_new(CMARK_OPT_DEFAULT);
586 FILE *fp = fopen("myfile.md", "rb");
587 while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) {
588 	   cmark_parser_feed(parser, buffer, bytes);
589 	   if (bytes < sizeof(buffer)) {
590 	       break;
591 	   }
592 }
593 document = cmark_parser_finish(parser);
594 cmark_parser_free(parser);
595 \f[]
596 .fi
597 
598 .PP
599 \fIcmark_parser *\f[] \fBcmark_parser_new\f[](\fIint options\f[])
600 
601 .PP
602 Creates a new parser object.
603 
604 .PP
605 \fIcmark_parser *\f[] \fBcmark_parser_new_with_mem\f[](\fIint options\f[], \fIcmark_mem *mem\f[])
606 
607 .PP
608 Creates a new parser object with the given memory allocator
609 
610 .PP
611 \fIvoid\f[] \fBcmark_parser_free\f[](\fIcmark_parser *parser\f[])
612 
613 .PP
614 Frees memory allocated for a parser object.
615 
616 .PP
617 \fIvoid\f[] \fBcmark_parser_feed\f[](\fIcmark_parser *parser\f[], \fIconst char *buffer\f[], \fIsize_t len\f[])
618 
619 .PP
620 Feeds a string of length \f[I]len\f[] to \f[I]parser\f[].
621 
622 .PP
623 \fIcmark_node *\f[] \fBcmark_parser_finish\f[](\fIcmark_parser *parser\f[])
624 
625 .PP
626 Finish parsing and return a pointer to a tree of nodes.
627 
628 .PP
629 \fIcmark_node *\f[] \fBcmark_parse_document\f[](\fIconst char *buffer\f[], \fIsize_t len\f[], \fIint options\f[])
630 
631 .PP
632 Parse a CommonMark document in \f[I]buffer\f[] of length \f[I]len\f[].
633 Returns a pointer to a tree of nodes. The memory allocated for the node
634 tree should be released using \f[I]cmark_node_free\f[] when it is no
635 longer needed.
636 
637 .PP
638 \fIcmark_node *\f[] \fBcmark_parse_file\f[](\fIFILE *f\f[], \fIint options\f[])
639 
640 .PP
641 Parse a CommonMark document in file \f[I]f\f[], returning a pointer to a
642 tree of nodes. The memory allocated for the node tree should be released
643 using \f[I]cmark_node_free\f[] when it is no longer needed.
644 
645 .SS
646 Rendering
647 
648 .PP
649 \fIchar *\f[] \fBcmark_render_xml\f[](\fIcmark_node *root\f[], \fIint options\f[])
650 
651 .PP
652 Render a \f[I]node\f[] tree as XML. It is the caller's responsibility to
653 free the returned buffer.
654 
655 .PP
656 \fIchar *\f[] \fBcmark_render_html\f[](\fIcmark_node *root\f[], \fIint options\f[])
657 
658 .PP
659 Render a \f[I]node\f[] tree as an HTML fragment. It is up to the user to
660 add an appropriate header and footer. It is the caller's responsibility
661 to free the returned buffer.
662 
663 .PP
664 \fIchar *\f[] \fBcmark_render_man\f[](\fIcmark_node *root\f[], \fIint options\f[], \fIint width\f[])
665 
666 .PP
667 Render a \f[I]node\f[] tree as a groff man page, without the header. It
668 is the caller's responsibility to free the returned buffer.
669 
670 .PP
671 \fIchar *\f[] \fBcmark_render_commonmark\f[](\fIcmark_node *root\f[], \fIint options\f[], \fIint width\f[])
672 
673 .PP
674 Render a \f[I]node\f[] tree as a commonmark document. It is the caller's
675 responsibility to free the returned buffer.
676 
677 .PP
678 \fIchar *\f[] \fBcmark_render_latex\f[](\fIcmark_node *root\f[], \fIint options\f[], \fIint width\f[])
679 
680 .PP
681 Render a \f[I]node\f[] tree as a LaTeX document. It is the caller's
682 responsibility to free the returned buffer.
683 
684 .SS
685 Options
686 
687 .PP
688 .nf
689 \fC
690 .RS 0n
691 #define CMARK_OPT_DEFAULT 0
692 .RE
693 \f[]
694 .fi
695 
696 .PP
697 Default options.
698 
699 .SS
700 Options affecting rendering
701 
702 .PP
703 .nf
704 \fC
705 .RS 0n
706 #define CMARK_OPT_SOURCEPOS (1 << 1)
707 .RE
708 \f[]
709 .fi
710 
711 .PP
712 Include a \f[C]data\-sourcepos\f[] attribute on all block elements.
713 
714 .PP
715 .nf
716 \fC
717 .RS 0n
718 #define CMARK_OPT_HARDBREAKS (1 << 2)
719 .RE
720 \f[]
721 .fi
722 
723 .PP
724 Render \f[C]softbreak\f[] elements as hard line breaks.
725 
726 .PP
727 .nf
728 \fC
729 .RS 0n
730 #define CMARK_OPT_SAFE (1 << 3)
731 .RE
732 \f[]
733 .fi
734 
735 .PP
736 \f[C]CMARK_OPT_SAFE\f[] is defined here for API compatibility, but it no
737 longer has any effect. "Safe" mode is now the default: set
738 \f[C]CMARK_OPT_UNSAFE\f[] to disable it.
739 
740 .PP
741 .nf
742 \fC
743 .RS 0n
744 #define CMARK_OPT_UNSAFE (1 << 17)
745 .RE
746 \f[]
747 .fi
748 
749 .PP
750 Render raw HTML and unsafe links (\f[C]javascript:\f[],
751 \f[C]vbscript:\f[], \f[C]file:\f[], and \f[C]data:\f[], except for
752 \f[C]image/png\f[], \f[C]image/gif\f[], \f[C]image/jpeg\f[], or
753 \f[C]image/webp\f[] mime types). By default, raw HTML is replaced by a
754 placeholder HTML comment. Unsafe links are replaced by empty strings.
755 
756 .PP
757 .nf
758 \fC
759 .RS 0n
760 #define CMARK_OPT_NOBREAKS (1 << 4)
761 .RE
762 \f[]
763 .fi
764 
765 .PP
766 Render \f[C]softbreak\f[] elements as spaces.
767 
768 .SS
769 Options affecting parsing
770 
771 .PP
772 .nf
773 \fC
774 .RS 0n
775 #define CMARK_OPT_NORMALIZE (1 << 8)
776 .RE
777 \f[]
778 .fi
779 
780 .PP
781 Legacy option (no effect).
782 
783 .PP
784 .nf
785 \fC
786 .RS 0n
787 #define CMARK_OPT_VALIDATE_UTF8 (1 << 9)
788 .RE
789 \f[]
790 .fi
791 
792 .PP
793 Validate UTF\-8 in the input before parsing, replacing illegal sequences
794 with the replacement character U+FFFD.
795 
796 .PP
797 .nf
798 \fC
799 .RS 0n
800 #define CMARK_OPT_SMART (1 << 10)
801 .RE
802 \f[]
803 .fi
804 
805 .PP
806 Convert straight quotes to curly, \-\-\- to em dashes, \-\- to en
807 dashes.
808 
809 .SS
810 Version information
811 
812 .PP
813 \fIint\f[] \fBcmark_version\f[](\fIvoid\f[])
814 
815 .PP
816 The library version as integer for runtime checks. Also available as
817 macro CMARK_VERSION for compile time checks.
818 .IP \[bu] 2
819 Bits 16\-23 contain the major version.
820 .IP \[bu] 2
821 Bits 8\-15 contain the minor version.
822 .IP \[bu] 2
823 Bits 0\-7 contain the patchlevel.
824 .PP
825 In hexadecimal format, the number 0x010203 represents version 1.2.3.
826 
827 .PP
828 \fIconst char *\f[] \fBcmark_version_string\f[](\fIvoid\f[])
829 
830 .PP
831 The library version string for runtime checks. Also available as macro
832 CMARK_VERSION_STRING for compile time checks.
833 
834 .SH
835 AUTHORS
836 .PP
837 John MacFarlane, Vicent Marti, Kārlis Gaņģis, Nick Wellnhofer.
838