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

FreeBSD Manual Pages

  
 
  

home | help
LOWDOWN_DIFF(3)		    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  ren-
       derer  (HTML  is	used in	this case).  Then it passes output to the ren-
       derer, 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.

FreeBSD	Ports 14.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+14.3.quarterly>

home | help