xref: /dragonfly/contrib/mdocml/eqn.c (revision 6e278935)
1 /*	$Id: eqn.c,v 1.4 2011/03/22 09:48:13 kristaps Exp $ */
2 /*
3  * Copyright (c) 2011 Kristaps Dzonsons <kristaps@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