Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
LOWDOWN_DIFF(3)		 BSD Library Functions Manual	       LOWDOWN_DIFF(3)

NAME
     lowdown_diff -- compute difference	between	parsed Markdown	trees

LIBRARY
     library "liblowdown"

SYNOPSIS
     #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);

DESCRIPTION
     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	exhaution.
     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);

SEE ALSO
     lowdown(3)

     Gregory 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.

BSD			       January 17, 2022				   BSD

NAME | LIBRARY | SYNOPSIS | DESCRIPTION | RETURN VALUES | EXAMPLES | SEE ALSO

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=lowdown_diff&sektion=3&manpath=FreeBSD+13.0-RELEASE+and+Ports>

home | help