]> git.cameronkatri.com Git - mandoc.git/blob - eqn.c
Add initial EQN support to mandoc. This parses, then throws away, data
[mandoc.git] / eqn.c
1 /* $Id: eqn.c,v 1.1 2011/02/06 20:36:36 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->line = line;
63 p->pos = pos;
64
65 return(p);
66 }
67
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 }