![]() |
![]()
| ![]() |
![]()
NAME
LIBRARYlibrary “liblowdown” SYNOPSIS
struct lowdown_node *
DESCRIPTIONComputes 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
RETURN VALUESReturns a pointer to the difference tree or
EXAMPLESThe 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); SEE ALSOGregory Cobena, Serge Abiteboul, and Amelie Marian, Detecting Changes in XML Documents, https://www.cs.rutgers.edu/~amelie/papers/2002/diff.pdf, 2002. Wu Sun, Manber Udi, and Myers Gene, An O(NP) sequence comparison algorithm, Issue 6, Information Processing Letters, Volume 35, 1990.
|