NAME
lowdown_doc_parse
—
parse a Markdown document into an
AST
LIBRARY
library “liblowdown”
SYNOPSIS
#include
<sys/queue.h>
#include <stdio.h>
#include <lowdown.h>
struct lowdown_node *
lowdown_doc_parse
(struct lowdown_doc
*doc, size_t *maxn, const char
*input, size_t inputsz, struct
lowdown_metaq *metaq);
DESCRIPTION
Parse a lowdown(5) document input of length
inputsz into an AST with the parser
doc. The maxn argument, if not
NULL
, is set to one greater than the highest node
identifier. Its value is undefined if the function returns
NULL
.
If metaq is not
NULL
, it is filled in with document metadata (if
any). Metadata key names are canonicalised and duplicate names are ignored.
The results should be freed with
lowdown_metaq_free(3).
This function may be invoked multiple times with a single doc and different input.
RETURN VALUES
Returns the root of the parse tree or NULL
on memory allocation failure. If not NULL
, the
returned node is always of type LOWDOWN_ROOT
.
EXAMPLES
The following parses b of length bsz. It first allocates the parser, then the document, then the renderer (HTML is used in this case). Then it passes output to the renderer, prints it, and cleans up resources. On any memory errors, it exits with err(3).
struct lowdown_doc *doc; struct lowdown_node *n; struct lowdown_buf *ob; void *rndr; if ((doc = lowdown_doc_new(NULL)) == NULL) err(1, NULL); if ((n = lowdown_doc_parse(doc, NULL, b, bsz, NULL)) == NULL) err(1, NULL); if ((rndr = lowdown_html_new(NULL)) == NULL) err(1, NULL); if ((ob = lowdown_buf_new(1024)) == NULL) err(1, NULL); if (!lowdown_html_rndr(ob, rndr, n)) err(1, NULL); fwrite(stdout, 1, ob->size, ob->data); lowdown_buf_free(ob); lowdown_html_rndr_free(rndr); lowdown_node_free(n); lowdown_doc_free(doc);