lowdown_diff(3)

lowdown_diff3

Compute difference between parsed markdown trees

Usage

#include <sys/queue.h>

#include <stdio.h>

#include <lowdown.h>

struct lowdown_node *

lowdown_diff(const struct lowdown_node *nold, const struct lowdown_node *nnew, size_t *maxn);

Library

library “liblowdown”

Overview

Computes the difference between two Markdown trees, the source nold and destination nnew, parsed by lowdown_doc_parse(3). It uses the enum lowdown_chng type in the return tree's nodes to dictate insertions into and deletions from nold. The maxn argument, if not NULL, is set to one greater than the highest node identifier of the returned tree.

Return values

Returns a pointer to the difference tree or NULL on memory exhaustion. The pointer must be freed with lowdown_node_free(3).

Examples

The following parses and compares old of length osz and new of length nsz. 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 *no, *nn, *diff;
struct lowdown_buf *ob;
void *rndr;
if ((doc = lowdown_doc_new(NULL)) == NULL)
	err(1, NULL);
if ((no = lowdown_doc_parse(doc, NULL, old, osz, NULL)) == NULL)
	err(1, NULL);
if ((nn = lowdown_doc_parse(doc, NULL, new, nsz, NULL)) == NULL)
	err(1, NULL);
if ((diff = lowdown_diff(no, nn, 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, diff))
	err(1, NULL);
fwrite(stdout, 1, ob->size, ob->data);
lowdown_buf_free(ob);
lowdown_html_rndr_free(rndr);
lowdown_node_free(no);
lowdown_node_free(nn);
lowdown_node_free(diff);
lowdown_doc_free(doc);

Releases

4 releases since Debian 11 (Bullseye); the text changed 3 times.

  1. 11
  2. 12
  3. 13
  4. Arch

From lowdown 3.2.1-1 in Arch Linux 2026-11-01. Parsed by carta from the page's mdoc source.