Home | History | Annotate | Line # | Download | only in dist
eqn.c revision 1.1
      1 /*	$Vendor-Id: eqn.c,v 1.4 2011/03/22 09:48:13 kristaps Exp $ */
      2 /*
      3  * Copyright (c) 2011 Kristaps Dzonsons <kristaps (at) bsd.lv>
      4  *
      5  * Permission to use, copy, modify, and distribute this software for any
      6  * purpose with or without fee is hereby granted, provided that the above
      7  * copyright notice and this permission notice appear in all copies.
      8  *
      9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
     10  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     11  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
     12  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     13  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
     14  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
     15  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     16  */
     17 #ifdef HAVE_CONFIG_H
     18 #include "config.h"
     19 #endif
     20 
     21 #include <assert.h>
     22 #include <stdio.h>
     23 #include <stdlib.h>
     24 #include <string.h>
     25 #include <time.h>
     26 
     27 #include "mandoc.h"
     28 #include "libmandoc.h"
     29 #include "libroff.h"
     30 
     31 /* ARGSUSED */
     32 enum rofferr
     33 eqn_read(struct eqn_node **epp, int ln, const char *p, int offs)
     34 {
     35 	size_t		 sz;
     36 	struct eqn_node	*ep;
     37 
     38 	if (0 == strcmp(p, ".EN")) {
     39 		*epp = NULL;
     40 		return(ROFF_EQN);
     41 	}
     42 
     43 	ep = *epp;
     44 
     45 	sz = strlen(&p[offs]);
     46 	ep->eqn.data = mandoc_realloc(ep->eqn.data, ep->eqn.sz + sz + 1);
     47 	if (0 == ep->eqn.sz)
     48 		*ep->eqn.data = '\0';
     49 
     50 	ep->eqn.sz += sz;
     51 	strlcat(ep->eqn.data, &p[offs], ep->eqn.sz + 1);
     52 	return(ROFF_IGN);
     53 }
     54 
     55 struct eqn_node *
     56 eqn_alloc(int pos, int line)
     57 {
     58 	struct eqn_node	*p;
     59 
     60 	p = mandoc_calloc(1, sizeof(struct eqn_node));
     61 	p->eqn.line = line;
     62 	p->eqn.pos = pos;
     63 
     64 	return(p);
     65 }
     66 
     67 /* ARGSUSED */
     68 void
     69 eqn_end(struct eqn_node *e)
     70 {
     71 
     72 	/* Nothing to do. */
     73 }
     74 
     75 void
     76 eqn_free(struct eqn_node *p)
     77 {
     78 
     79 	free(p->eqn.data);
     80 	free(p);
     81 }
     82