]> git.cameronkatri.com Git - mandoc.git/blob - eqn.c
Clean-up in libman: make all calls to man_*msg not check return value.
[mandoc.git] / eqn.c
1 /* $Id: eqn.c,v 1.3 2011/03/15 16:23:51 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 "roff.h"
29 #include "libmandoc.h"
30 #include "libroff.h"
31
32 /* ARGSUSED */
33 enum rofferr
34 eqn_read(struct eqn_node **epp, int ln, const char *p, int offs)
35 {
36 size_t sz;
37 struct eqn_node *ep;
38
39 if (0 == strcmp(p, ".EN")) {
40 *epp = NULL;
41 return(ROFF_EQN);
42 }
43
44 ep = *epp;
45
46 sz = strlen(&p[offs]);
47 ep->eqn.data = mandoc_realloc(ep->eqn.data, ep->eqn.sz + sz + 1);
48 if (0 == ep->eqn.sz)
49 *ep->eqn.data = '\0';
50
51 ep->eqn.sz += sz;
52 strlcat(ep->eqn.data, &p[offs], ep->eqn.sz + 1);
53 return(ROFF_IGN);
54 }
55
56 struct eqn_node *
57 eqn_alloc(int pos, int line)
58 {
59 struct eqn_node *p;
60
61 p = mandoc_calloc(1, sizeof(struct eqn_node));
62 p->eqn.line = line;
63 p->eqn.pos = pos;
64
65 return(p);
66 }
67
68 /* ARGSUSED */
69 void
70 eqn_end(struct eqn_node *e)
71 {
72
73 /* Nothing to do. */
74 }
75
76 void
77 eqn_free(struct eqn_node *p)
78 {
79
80 free(p->eqn.data);
81 free(p);
82 }