summaryrefslogtreecommitdiff
path: root/man/man3
diff options
context:
space:
mode:
Diffstat (limited to 'man/man3')
-rw-r--r--man/man3/cmark.3388
1 files changed, 193 insertions, 195 deletions
diff --git a/man/man3/cmark.3 b/man/man3/cmark.3
index 0372d28..288fadc 100644
--- a/man/man3/cmark.3
+++ b/man/man3/cmark.3
@@ -1,98 +1,97 @@
.TH cmark 3 "July 12, 2015" "LOCAL" "Library Functions Manual"
-\&.SH
+.SH
NAME
-\&.PP
-\ef[B]cmark\ef[] \- CommonMark parsing, manipulating, and rendering
+.PP
+\f[B]cmark\f[] \- CommonMark parsing, manipulating, and rendering
-\&.SH
+.SH
DESCRIPTION
-\&.SS
+.SS
Simple Interface
.PP
\fIchar *\f[] \fBcmark_markdown_to_html\f[](\fIconst char *text\f[], \fIsize_t len\f[], \fIint options\f[])
-\&.PP
-Convert \ef[I]text\ef[] (assumed to be a UTF\-8 encoded string with
-length \ef[I]len\ef[] from CommonMark Markdown to HTML, returning a
+.PP
+Convert \f[I]text\f[] (assumed to be a UTF\-8 encoded string with length
+\f[I]len\f[] from CommonMark Markdown to HTML, returning a
null\-terminated, UTF\-8\-encoded string.
-\&.SS
+.SS
Node Structure
-\&.SS
+.SS
Creating and Destroying Nodes
.PP
\fIcmark_node*\f[] \fBcmark_node_new\f[](\fIcmark_node_type type\f[])
-\&.PP
-Creates a new node of type \ef[I]type\ef[]. Note that the node may have
+.PP
+Creates a new node of type \f[I]type\f[]. Note that the node may have
other required properties, which it is the caller's responsibility to
assign.
.PP
\fIvoid\f[] \fBcmark_node_free\f[](\fIcmark_node *node\f[])
-\&.PP
+.PP
Frees the memory allocated for a node.
-\&.SS
+.SS
Tree Traversal
.PP
\fIcmark_node*\f[] \fBcmark_node_next\f[](\fIcmark_node *node\f[])
-\&.PP
-Returns the next node in the sequence after \ef[I]node\ef[], or NULL if
+.PP
+Returns the next node in the sequence after \f[I]node\f[], or NULL if
there is none.
.PP
\fIcmark_node*\f[] \fBcmark_node_previous\f[](\fIcmark_node *node\f[])
-\&.PP
-Returns the previous node in the sequence after \ef[I]node\ef[], or NULL
+.PP
+Returns the previous node in the sequence after \f[I]node\f[], or NULL
if there is none.
.PP
\fIcmark_node*\f[] \fBcmark_node_parent\f[](\fIcmark_node *node\f[])
-\&.PP
-Returns the parent of \ef[I]node\ef[], or NULL if there is none.
+.PP
+Returns the parent of \f[I]node\f[], or NULL if there is none.
.PP
\fIcmark_node*\f[] \fBcmark_node_first_child\f[](\fIcmark_node *node\f[])
-\&.PP
-Returns the first child of \ef[I]node\ef[], or NULL if \ef[I]node\ef[]
-has no children.
+.PP
+Returns the first child of \f[I]node\f[], or NULL if \f[I]node\f[] has
+no children.
.PP
\fIcmark_node*\f[] \fBcmark_node_last_child\f[](\fIcmark_node *node\f[])
-\&.PP
-Returns the last child of \ef[I]node\ef[], or NULL if \ef[I]node\ef[]
-has no children.
+.PP
+Returns the last child of \f[I]node\f[], or NULL if \f[I]node\f[] has no
+children.
-\&.SS
+.SS
Iterator
-\&.PP
+.PP
An iterator will walk through a tree of nodes, starting from a root
node, returning one node at a time, together with information about
whether the node is being entered or exited. The iterator will first
descend to a child node, if there is one. When there is no child, the
iterator will go to the next sibling. When there is no next sibling, the
-iterator will return to the parent (but with a
-\ef[I]cmark_event_type\ef[] of \ef[C]CMARK_EVENT_EXIT\ef[]). The
-iterator will return \ef[C]CMARK_EVENT_DONE\ef[] when it reaches the
-root node again. One natural application is an HTML renderer, where an
-\ef[C]ENTER\ef[] event outputs an open tag and an \ef[C]EXIT\ef[] event
-outputs a close tag. An iterator might also be used to transform an AST
-in some systematic way, for example, turning all level\-3 headers into
-regular paragraphs.
-\&.IP
-\&.nf
-\ef[C]
+iterator will return to the parent (but with a \f[I]cmark_event_type\f[]
+of \f[C]CMARK_EVENT_EXIT\f[]). The iterator will return
+\f[C]CMARK_EVENT_DONE\f[] when it reaches the root node again. One
+natural application is an HTML renderer, where an \f[C]ENTER\f[] event
+outputs an open tag and an \f[C]EXIT\f[] event outputs a close tag. An
+iterator might also be used to transform an AST in some systematic way,
+for example, turning all level\-3 headers into regular paragraphs.
+.IP
+.nf
+\f[C]
void
usage_example(cmark_node *root) {
cmark_event_type ev_type;
@@ -105,313 +104,312 @@ usage_example(cmark_node *root) {
cmark_iter_free(iter);
}
-\ef[]
-\&.fi
-\&.PP
-Iterators will never return \ef[C]EXIT\ef[] events for leaf nodes, which
+\f[]
+.fi
+.PP
+Iterators will never return \f[C]EXIT\f[] events for leaf nodes, which
are nodes of type:
-\&.IP \e[bu] 2
+.IP \[bu] 2
CMARK_NODE_HTML
-\&.IP \e[bu] 2
+.IP \[bu] 2
CMARK_NODE_HRULE
-\&.IP \e[bu] 2
+.IP \[bu] 2
CMARK_NODE_CODE_BLOCK
-\&.IP \e[bu] 2
+.IP \[bu] 2
CMARK_NODE_TEXT
-\&.IP \e[bu] 2
+.IP \[bu] 2
CMARK_NODE_SOFTBREAK
-\&.IP \e[bu] 2
+.IP \[bu] 2
CMARK_NODE_LINEBREAK
-\&.IP \e[bu] 2
+.IP \[bu] 2
CMARK_NODE_CODE
-\&.IP \e[bu] 2
+.IP \[bu] 2
CMARK_NODE_INLINE_HTML
-\&.PP
-Nodes must only be modified after an \ef[C]EXIT\ef[] event, or an
-\ef[C]ENTER\ef[] event for leaf nodes.
+.PP
+Nodes must only be modified after an \f[C]EXIT\f[] event, or an
+\f[C]ENTER\f[] event for leaf nodes.
.PP
\fIcmark_iter*\f[] \fBcmark_iter_new\f[](\fIcmark_node *root\f[])
-\&.PP
-Creates a new iterator starting at \ef[I]root\ef[]. The current node and
-event type are undefined until \ef[C]cmark_iter_next\ef[] is called for
+.PP
+Creates a new iterator starting at \f[I]root\f[]. The current node and
+event type are undefined until \f[C]cmark_iter_next\f[] is called for
the first time.
.PP
\fIvoid\f[] \fBcmark_iter_free\f[](\fIcmark_iter *iter\f[])
-\&.PP
+.PP
Frees the memory allocated for an iterator.
.PP
\fIcmark_event_type\f[] \fBcmark_iter_next\f[](\fIcmark_iter *iter\f[])
-\&.PP
+.PP
Advances to the next node and returns the event type
-(\ef[C]CMARK_EVENT_ENTER\ef[], \ef[C]CMARK_EVENT_EXIT\ef[] or
-\ef[C]CMARK_EVENT_DONE\ef[]).
+(\f[C]CMARK_EVENT_ENTER\f[], \f[C]CMARK_EVENT_EXIT\f[] or
+\f[C]CMARK_EVENT_DONE\f[]).
.PP
\fIcmark_node*\f[] \fBcmark_iter_get_node\f[](\fIcmark_iter *iter\f[])
-\&.PP
+.PP
Returns the current node.
.PP
\fIcmark_event_type\f[] \fBcmark_iter_get_event_type\f[](\fIcmark_iter *iter\f[])
-\&.PP
+.PP
Returns the current event type.
.PP
\fIcmark_node*\f[] \fBcmark_iter_get_root\f[](\fIcmark_iter *iter\f[])
-\&.PP
+.PP
Returns the root node.
.PP
\fIvoid\f[] \fBcmark_iter_reset\f[](\fIcmark_iter *iter\f[], \fIcmark_node *current\f[], \fIcmark_event_type event_type\f[])
-\&.PP
-Resets the iterator so that the current node is \ef[I]current\ef[] and
-the event type is \ef[I]event_type\ef[]. The new current node must be a
+.PP
+Resets the iterator so that the current node is \f[I]current\f[] and the
+event type is \f[I]event_type\f[]. The new current node must be a
descendant of the root node or the root node itself.
-\&.SS
+.SS
Accessors
.PP
\fIvoid*\f[] \fBcmark_node_get_user_data\f[](\fIcmark_node *node\f[])
-\&.PP
-Returns the user data of \ef[I]node\ef[].
+.PP
+Returns the user data of \f[I]node\f[].
.PP
\fIint\f[] \fBcmark_node_set_user_data\f[](\fIcmark_node *node\f[], \fIvoid *user_data\f[])
-\&.PP
-Sets arbitrary user data for \ef[I]node\ef[]. Returns 1 on success, 0 on
+.PP
+Sets arbitrary user data for \f[I]node\f[]. Returns 1 on success, 0 on
failure.
.PP
\fIcmark_node_type\f[] \fBcmark_node_get_type\f[](\fIcmark_node *node\f[])
-\&.PP
-Returns the type of \ef[I]node\ef[], or \ef[C]CMARK_NODE_NONE\ef[] on
-error.
+.PP
+Returns the type of \f[I]node\f[], or \f[C]CMARK_NODE_NONE\f[] on error.
.PP
\fIconst char*\f[] \fBcmark_node_get_type_string\f[](\fIcmark_node *node\f[])
-\&.PP
-Like \ef[I]cmark_node_get_type\ef[], but returns a string representation
-of the type, or \ef[C]"<unknown>"\ef[].
+.PP
+Like \f[I]cmark_node_get_type\f[], but returns a string representation
+of the type, or \f[C]"<unknown>"\f[].
.PP
\fIconst char*\f[] \fBcmark_node_get_literal\f[](\fIcmark_node *node\f[])
-\&.PP
-Returns the string contents of \ef[I]node\ef[], or NULL if none.
+.PP
+Returns the string contents of \f[I]node\f[], or NULL if none.
.PP
\fIint\f[] \fBcmark_node_set_literal\f[](\fIcmark_node *node\f[], \fIconst char *content\f[])
-\&.PP
-Sets the string contents of \ef[I]node\ef[]. Returns 1 on success, 0 on
+.PP
+Sets the string contents of \f[I]node\f[]. Returns 1 on success, 0 on
failure.
.PP
\fIint\f[] \fBcmark_node_get_header_level\f[](\fIcmark_node *node\f[])
-\&.PP
-Returns the header level of \ef[I]node\ef[], or 0 if \ef[I]node\ef[] is
-not a header.
+.PP
+Returns the header level of \f[I]node\f[], or 0 if \f[I]node\f[] is not
+a header.
.PP
\fIint\f[] \fBcmark_node_set_header_level\f[](\fIcmark_node *node\f[], \fIint level\f[])
-\&.PP
-Sets the header level of \ef[I]node\ef[], returning 1 on success and 0
-on error.
+.PP
+Sets the header level of \f[I]node\f[], returning 1 on success and 0 on
+error.
.PP
\fIcmark_list_type\f[] \fBcmark_node_get_list_type\f[](\fIcmark_node *node\f[])
-\&.PP
-Returns the list type of \ef[I]node\ef[], or \ef[C]CMARK_NO_LIST\ef[] if
-\ef[I]node\ef[] is not a list.
+.PP
+Returns the list type of \f[I]node\f[], or \f[C]CMARK_NO_LIST\f[] if
+\f[I]node\f[] is not a list.
.PP
\fIint\f[] \fBcmark_node_set_list_type\f[](\fIcmark_node *node\f[], \fIcmark_list_type type\f[])
-\&.PP
-Sets the list type of \ef[I]node\ef[], returning 1 on success and 0 on
+.PP
+Sets the list type of \f[I]node\f[], returning 1 on success and 0 on
error.
.PP
\fIcmark_delim_type\f[] \fBcmark_node_get_list_delim\f[](\fIcmark_node *node\f[])
-\&.PP
-Returns the list delimiter type of \ef[I]node\ef[], or
-\ef[C]CMARK_NO_DELIM\ef[] if \ef[I]node\ef[] is not a list.
+.PP
+Returns the list delimiter type of \f[I]node\f[], or
+\f[C]CMARK_NO_DELIM\f[] if \f[I]node\f[] is not a list.
.PP
\fIint\f[] \fBcmark_node_set_list_delim\f[](\fIcmark_node *node\f[], \fIcmark_delim_type delim\f[])
-\&.PP
-Sets the list delimiter type of \ef[I]node\ef[], returning 1 on success
+.PP
+Sets the list delimiter type of \f[I]node\f[], returning 1 on success
and 0 on error.
.PP
\fIint\f[] \fBcmark_node_get_list_start\f[](\fIcmark_node *node\f[])
-\&.PP
-Returns starting number of \ef[I]node\ef[], if it is an ordered list,
+.PP
+Returns starting number of \f[I]node\f[], if it is an ordered list,
otherwise 0.
.PP
\fIint\f[] \fBcmark_node_set_list_start\f[](\fIcmark_node *node\f[], \fIint start\f[])
-\&.PP
-Sets starting number of \ef[I]node\ef[], if it is an ordered list.
-Returns 1 on success, 0 on failure.
+.PP
+Sets starting number of \f[I]node\f[], if it is an ordered list. Returns
+1 on success, 0 on failure.
.PP
\fIint\f[] \fBcmark_node_get_list_tight\f[](\fIcmark_node *node\f[])
-\&.PP
-Returns 1 if \ef[I]node\ef[] is a tight list, 0 otherwise.
+.PP
+Returns 1 if \f[I]node\f[] is a tight list, 0 otherwise.
.PP
\fIint\f[] \fBcmark_node_set_list_tight\f[](\fIcmark_node *node\f[], \fIint tight\f[])
-\&.PP
+.PP
Sets the "tightness" of a list. Returns 1 on success, 0 on failure.
.PP
\fIconst char*\f[] \fBcmark_node_get_fence_info\f[](\fIcmark_node *node\f[])
-\&.PP
+.PP
Returns the info string from a fenced code block, or NULL if none.
.PP
\fIint\f[] \fBcmark_node_set_fence_info\f[](\fIcmark_node *node\f[], \fIconst char *info\f[])
-\&.PP
+.PP
Sets the info string in a fenced code block, returning 1 on success and
0 on failure.
.PP
\fIconst char*\f[] \fBcmark_node_get_url\f[](\fIcmark_node *node\f[])
-\&.PP
-Gets the URL of a link or image \ef[I]node\ef[], or NULL if none.
+.PP
+Gets the URL of a link or image \f[I]node\f[], or NULL if none.
.PP
\fIint\f[] \fBcmark_node_set_url\f[](\fIcmark_node *node\f[], \fIconst char *url\f[])
-\&.PP
-Sets the URL of a link or image \ef[I]node\ef[]. Returns 1 on success, 0
+.PP
+Sets the URL of a link or image \f[I]node\f[]. Returns 1 on success, 0
on failure.
.PP
\fIconst char*\f[] \fBcmark_node_get_title\f[](\fIcmark_node *node\f[])
-\&.PP
-Gets the title of a link or image \ef[I]node\ef[], or NULL if none.
+.PP
+Gets the title of a link or image \f[I]node\f[], or NULL if none.
.PP
\fIint\f[] \fBcmark_node_set_title\f[](\fIcmark_node *node\f[], \fIconst char *title\f[])
-\&.PP
-Sets the title of a link or image \ef[I]node\ef[]. Returns 1 on success,
-0 on failure.
+.PP
+Sets the title of a link or image \f[I]node\f[]. Returns 1 on success, 0
+on failure.
.PP
\fIint\f[] \fBcmark_node_get_start_line\f[](\fIcmark_node *node\f[])
-\&.PP
-Returns the line on which \ef[I]node\ef[] begins.
+.PP
+Returns the line on which \f[I]node\f[] begins.
.PP
\fIint\f[] \fBcmark_node_get_start_column\f[](\fIcmark_node *node\f[])
-\&.PP
-Returns the column at which \ef[I]node\ef[] begins.
+.PP
+Returns the column at which \f[I]node\f[] begins.
.PP
\fIint\f[] \fBcmark_node_get_end_line\f[](\fIcmark_node *node\f[])
-\&.PP
-Returns the line on which \ef[I]node\ef[] ends.
+.PP
+Returns the line on which \f[I]node\f[] ends.
.PP
\fIint\f[] \fBcmark_node_get_end_column\f[](\fIcmark_node *node\f[])
-\&.PP
-Returns the column at which \ef[I]node\ef[] ends.
+.PP
+Returns the column at which \f[I]node\f[] ends.
-\&.SS
+.SS
Tree Manipulation
.PP
\fIvoid\f[] \fBcmark_node_unlink\f[](\fIcmark_node *node\f[])
-\&.PP
-Unlinks a \ef[I]node\ef[], removing it from the tree, but not freeing
-its memory. (Use \ef[I]cmark_node_free\ef[] for that.)
+.PP
+Unlinks a \f[I]node\f[], removing it from the tree, but not freeing its
+memory. (Use \f[I]cmark_node_free\f[] for that.)
.PP
\fIint\f[] \fBcmark_node_insert_before\f[](\fIcmark_node *node\f[], \fIcmark_node *sibling\f[])
-\&.PP
-Inserts \ef[I]sibling\ef[] before \ef[I]node\ef[]. Returns 1 on success,
-0 on failure.
+.PP
+Inserts \f[I]sibling\f[] before \f[I]node\f[]. Returns 1 on success, 0
+on failure.
.PP
\fIint\f[] \fBcmark_node_insert_after\f[](\fIcmark_node *node\f[], \fIcmark_node *sibling\f[])
-\&.PP
-Inserts \ef[I]sibling\ef[] after \ef[I]node\ef[]. Returns 1 on success,
-0 on failure.
+.PP
+Inserts \f[I]sibling\f[] after \f[I]node\f[]. Returns 1 on success, 0 on
+failure.
.PP
\fIint\f[] \fBcmark_node_prepend_child\f[](\fIcmark_node *node\f[], \fIcmark_node *child\f[])
-\&.PP
-Adds \ef[I]child\ef[] to the beginning of the children of
-\ef[I]node\ef[]. Returns 1 on success, 0 on failure.
+.PP
+Adds \f[I]child\f[] to the beginning of the children of \f[I]node\f[].
+Returns 1 on success, 0 on failure.
.PP
\fIint\f[] \fBcmark_node_append_child\f[](\fIcmark_node *node\f[], \fIcmark_node *child\f[])
-\&.PP
-Adds \ef[I]child\ef[] to the end of the children of \ef[I]node\ef[].
-Returns 1 on success, 0 on failure.
+.PP
+Adds \f[I]child\f[] to the end of the children of \f[I]node\f[]. Returns
+1 on success, 0 on failure.
.PP
\fIvoid\f[] \fBcmark_consolidate_text_nodes\f[](\fIcmark_node *root\f[])
-\&.PP
+.PP
Consolidates adjacent text nodes.
-\&.SS
+.SS
Parsing
-\&.PP
+.PP
Simple interface:
-\&.IP
-\&.nf
-\ef[C]
+.IP
+.nf
+\f[C]
cmark_node *document = cmark_parse_document("Hello *world*", 12,
CMARK_OPT_DEFAULT);
-\ef[]
-\&.fi
-\&.PP
+\f[]
+.fi
+.PP
Streaming interface:
-\&.IP
-\&.nf
-\ef[C]
+.IP
+.nf
+\f[C]
cmark_parser *parser = cmark_parser_new(CMARK_OPT_DEFAULT);
FILE *fp = fopen("myfile.md", "r");
while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) {
@@ -422,80 +420,80 @@ while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) {
}
document = cmark_parser_finish(parser);
cmark_parser_free(parser);
-\ef[]
-\&.fi
+\f[]
+.fi
.PP
\fIcmark_parser *\f[] \fBcmark_parser_new\f[](\fIint options\f[])
-\&.PP
+.PP
Creates a new parser object.
.PP
\fIvoid\f[] \fBcmark_parser_free\f[](\fIcmark_parser *parser\f[])
-\&.PP
+.PP
Frees memory allocated for a parser object.
.PP
\fIvoid\f[] \fBcmark_parser_feed\f[](\fIcmark_parser *parser\f[], \fIconst char *buffer\f[], \fIsize_t len\f[])
-\&.PP
-Feeds a string of length \ef[I]len\ef[] to \ef[I]parser\ef[].
+.PP
+Feeds a string of length \f[I]len\f[] to \f[I]parser\f[].
.PP
\fIcmark_node *\f[] \fBcmark_parser_finish\f[](\fIcmark_parser *parser\f[])
-\&.PP
+.PP
Finish parsing and return a pointer to a tree of nodes.
.PP
\fIcmark_node *\f[] \fBcmark_parse_document\f[](\fIconst char *buffer\f[], \fIsize_t len\f[], \fIint options\f[])
-\&.PP
-Parse a CommonMark document in \ef[I]buffer\ef[] of length
-\ef[I]len\ef[]. Returns a pointer to a tree of nodes.
+.PP
+Parse a CommonMark document in \f[I]buffer\f[] of length \f[I]len\f[].
+Returns a pointer to a tree of nodes.
.PP
\fIcmark_node *\f[] \fBcmark_parse_file\f[](\fIFILE *f\f[], \fIint options\f[])
-\&.PP
-Parse a CommonMark document in file \ef[I]f\ef[], returning a pointer to
-a tree of nodes.
+.PP
+Parse a CommonMark document in file \f[I]f\f[], returning a pointer to a
+tree of nodes.
-\&.SS
+.SS
Rendering
.PP
\fIchar *\f[] \fBcmark_render_xml\f[](\fIcmark_node *root\f[], \fIint options\f[])
-\&.PP
-Render a \ef[I]node\ef[] tree as XML.
+.PP
+Render a \f[I]node\f[] tree as XML.
.PP
\fIchar *\f[] \fBcmark_render_html\f[](\fIcmark_node *root\f[], \fIint options\f[])
-\&.PP
-Render a \ef[I]node\ef[] tree as an HTML fragment. It is up to the user
-to add an appropriate header and footer.
+.PP
+Render a \f[I]node\f[] tree as an HTML fragment. It is up to the user to
+add an appropriate header and footer.
.PP
\fIchar *\f[] \fBcmark_render_man\f[](\fIcmark_node *root\f[], \fIint options\f[], \fIint width\f[])
-\&.PP
-Render a \ef[I]node\ef[] tree as a groff man page, without the header.
+.PP
+Render a \f[I]node\f[] tree as a groff man page, without the header.
.PP
\fIchar *\f[] \fBcmark_render_commonmark\f[](\fIcmark_node *root\f[], \fIint options\f[], \fIint width\f[])
-\&.PP
-Render a \ef[I]node\ef[] tree as a commonmark document.
+.PP
+Render a \f[I]node\f[] tree as a commonmark document.
.PP
\fIchar *\f[] \fBcmark_render_latex\f[](\fIcmark_node *root\f[], \fIint options\f[], \fIint width\f[])
-\&.PP
-Render a \ef[I]node\ef[] tree as a LaTeX document.
+.PP
+Render a \f[I]node\f[] tree as a LaTeX document.
.PP
.nf
@@ -506,7 +504,7 @@ Render a \ef[I]node\ef[] tree as a LaTeX document.
\f[]
.fi
-\&.PP
+.PP
Default writer options.
.PP
@@ -518,8 +516,8 @@ Default writer options.
\f[]
.fi
-\&.PP
-Include a \ef[C]data\-sourcepos\ef[] attribute on all block elements.
+.PP
+Include a \f[C]data\-sourcepos\f[] attribute on all block elements.
.PP
.nf
@@ -530,8 +528,8 @@ Include a \ef[C]data\-sourcepos\ef[] attribute on all block elements.
\f[]
.fi
-\&.PP
-Render \ef[C]softbreak\ef[] elements as hard line breaks.
+.PP
+Render \f[C]softbreak\f[] elements as hard line breaks.
.PP
.nf
@@ -542,7 +540,7 @@ Render \ef[C]softbreak\ef[] elements as hard line breaks.
\f[]
.fi
-\&.PP
+.PP
Normalize tree by consolidating adjacent text nodes.
.PP
@@ -554,7 +552,7 @@ Normalize tree by consolidating adjacent text nodes.
\f[]
.fi
-\&.PP
+.PP
Convert straight quotes to curly, \-\-\- to em dashes, \-\- to en
dashes.
@@ -567,37 +565,37 @@ dashes.
\f[]
.fi
-\&.PP
+.PP
Validate UTF\-8 in the input before parsing, replacing illegal sequences
with the replacement character U+FFFD.
-\&.SS
+.SS
Version information
.PP
\fIint\f[] \fBcmark_version\f[](\fI\f[])
-\&.PP
+.PP
The library version as integer for runtime checks. Also available as
macro CMARK_VERSION for compile time checks.
-\&.IP \e[bu] 2
+.IP \[bu] 2
Bits 16\-23 contain the major version.
-\&.IP \e[bu] 2
+.IP \[bu] 2
Bits 8\-15 contain the minor version.
-\&.IP \e[bu] 2
+.IP \[bu] 2
Bits 0\-7 contain the patchlevel.
-\&.PP
+.PP
In hexadecimal format, the number 0x010203 represents version 1.2.3.
.PP
\fIconst char *\f[] \fBcmark_version_string\f[](\fI\f[])
-\&.PP
+.PP
The library version string for runtime checks. Also available as macro
CMARK_VERSION_STRING for compile time checks.
-\&.SH
+.SH
AUTHORS
-\&.PP
+.PP
John MacFarlane, Vicent Marti, Kārlis Gaņģis, Nick Wellnhofer.