LOWDOWN_BUF(3)

NAME
lowdown_buf - parse a Markdown buffer into formatted output

LIBRARY
liblowdown

SYNOPSIS
#include <sys/queue.h>
#include <stdio.h>
#include <lowdown.h>
void
lowdown_buf(const struct lowdown_opts *opts, const char *buf, size_t bufsz, char **ret, size_t *retsz, struct lowdown_metaq *metaq);

DESCRIPTION
Parses a lowdown(5) buffer buf of size bufsz into an output buffer ret of size retsz according to a configuration opts. The output format is specified by opts->type. If LOWDOWN_METADATA is set in opts->feat and metaq is not NULL, metaq is filled with metadata rendered in the given output format.

The caller is responsible for freeing ret and metaq.

EXAMPLES
The following parses standard input into a standalone HTML5 document. It enables footnotes, autolinks, tables, superscript, strikethrough, fenced codeblocks, commonmark, definition lists, extended image attributes, and metadata processing. The output passes through raw HTML and has smart typography.

    struct lowdown_opts opts;
    char *buf = NULL, *obuf;
    char rbuf[1024];
    size_t sz, bufsz = 0, obufsz;
    while (!(feof(stdin) || ferror(stdin))) {
      sz = fread(rbuf, 1, sizeof(rbuf), stdin);
      if (sz == 0)
        err(1, "fread");
      buf = realloc(buf, bufsz + sz);
      if (buf == NULL)
        err(1, NULL);
      memcpy(buf + bufsz, rbuf, sz);
      bufsz += sz;
    }
    if (ferror(stdin))
      err(1, "fread");
    memset(&opts, 0, sizeof(struct opts));
    opts.type = LOWDOWN_HTML;
    opts.feat = LOWDOWN_FOOTNOTES |
      LOWDOWN_AUTOLINK |
      LOWDOWN_TABLES |
      LOWDOWN_SUPER |
      LOWDOWN_STRIKE |
      LOWDOWN_FENCED |
      LOWDOWN_COMMONMARK |
      LOWDOWN_DEFLIST |
      LOWDOWN_IMG_EXT |
      LOWDOWN_METADATA;
    opts.oflags = LOWDOWN_HTML_HEAD_IDS |
      LOWDOWN_HTML_NUM_ENT |
      LOWDOWN_HTML_OWASP |
      LOWDOWN_SMARTY |
      LOWDOWN_STANDALONE;
    if (!lowdown_buf(&opts, buf, bufsz, &obuf, &obufsz, NULL))
      errx(1, "lowdown_buf");
    fwrite(buf, 1, bufsz, stdout);
    free(buf);
    free(obuf);

SEE ALSO
lowdown(3), lowdown_metaq_free(3)

CAVEATS
This function will call exit(3) if internal memory allocation fails. There is no way to catch this condition.