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

  
 
  

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

NAME
     lowdown_diff -- compute difference between parsed Markdown trees

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

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  algo-
     rithm", Issue 6, Information Processing Letters, Volume 35, 1990.

FreeBSD ports 15.quarterly	   $Mdocdate$			 LOWDOWN_DIFF(3)

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

home | help