]> git.cameronkatri.com Git - mandoc.git/blob - mdoc_action.c
4d0e9e9f20e1ee9994d21f55229b1ad1be9aaca2
[mandoc.git] / mdoc_action.c
1 /* $Id: mdoc_action.c,v 1.88 2010/11/30 12:59:20 kristaps Exp $ */
2 /*
3 * Copyright (c) 2008, 2009, 2010 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 #ifndef OSNAME
22 #include <sys/utsname.h>
23 #endif
24
25 #include <assert.h>
26 #include <stdio.h>
27 #include <stdlib.h>
28 #include <string.h>
29 #include <time.h>
30
31 #include "mandoc.h"
32 #include "libmdoc.h"
33 #include "libmandoc.h"
34
35 /*
36 * FIXME: this file is deprecated. All future "actions" should be
37 * pushed into mdoc_validate.c.
38 */
39
40 #define POST_ARGS struct mdoc *m, struct mdoc_node *n
41 #define PRE_ARGS struct mdoc *m, struct mdoc_node *n
42
43 struct actions {
44 int (*pre)(PRE_ARGS);
45 int (*post)(POST_ARGS);
46 };
47
48 static const struct actions mdoc_actions[MDOC_MAX] = {
49 { NULL, NULL }, /* Ap */
50 { NULL, NULL }, /* Dd */
51 { NULL, NULL }, /* Dt */
52 { NULL, NULL }, /* Os */
53 { NULL, NULL }, /* Sh */
54 { NULL, NULL }, /* Ss */
55 { NULL, NULL }, /* Pp */
56 { NULL, NULL }, /* D1 */
57 { NULL, NULL }, /* Dl */
58 { NULL, NULL }, /* Bd */
59 { NULL, NULL }, /* Ed */
60 { NULL, NULL }, /* Bl */
61 { NULL, NULL }, /* El */
62 { NULL, NULL }, /* It */
63 { NULL, NULL }, /* Ad */
64 { NULL, NULL }, /* An */
65 { NULL, NULL }, /* Ar */
66 { NULL, NULL }, /* Cd */
67 { NULL, NULL }, /* Cm */
68 { NULL, NULL }, /* Dv */
69 { NULL, NULL }, /* Er */
70 { NULL, NULL }, /* Ev */
71 { NULL, NULL }, /* Ex */
72 { NULL, NULL }, /* Fa */
73 { NULL, NULL }, /* Fd */
74 { NULL, NULL }, /* Fl */
75 { NULL, NULL }, /* Fn */
76 { NULL, NULL }, /* Ft */
77 { NULL, NULL }, /* Ic */
78 { NULL, NULL }, /* In */
79 { NULL, NULL }, /* Li */
80 { NULL, NULL }, /* Nd */
81 { NULL, NULL }, /* Nm */
82 { NULL, NULL }, /* Op */
83 { NULL, NULL }, /* Ot */
84 { NULL, NULL }, /* Pa */
85 { NULL, NULL }, /* Rv */
86 { NULL, NULL }, /* St */
87 { NULL, NULL }, /* Va */
88 { NULL, NULL }, /* Vt */
89 { NULL, NULL }, /* Xr */
90 { NULL, NULL }, /* %A */
91 { NULL, NULL }, /* %B */
92 { NULL, NULL }, /* %D */
93 { NULL, NULL }, /* %I */
94 { NULL, NULL }, /* %J */
95 { NULL, NULL }, /* %N */
96 { NULL, NULL }, /* %O */
97 { NULL, NULL }, /* %P */
98 { NULL, NULL }, /* %R */
99 { NULL, NULL }, /* %T */
100 { NULL, NULL }, /* %V */
101 { NULL, NULL }, /* Ac */
102 { NULL, NULL }, /* Ao */
103 { NULL, NULL }, /* Aq */
104 { NULL, NULL }, /* At */
105 { NULL, NULL }, /* Bc */
106 { NULL, NULL }, /* Bf */
107 { NULL, NULL }, /* Bo */
108 { NULL, NULL }, /* Bq */
109 { NULL, NULL }, /* Bsx */
110 { NULL, NULL }, /* Bx */
111 { NULL, NULL }, /* Db */
112 { NULL, NULL }, /* Dc */
113 { NULL, NULL }, /* Do */
114 { NULL, NULL }, /* Dq */
115 { NULL, NULL }, /* Ec */
116 { NULL, NULL }, /* Ef */
117 { NULL, NULL }, /* Em */
118 { NULL, NULL }, /* Eo */
119 { NULL, NULL }, /* Fx */
120 { NULL, NULL }, /* Ms */
121 { NULL, NULL }, /* No */
122 { NULL, NULL }, /* Ns */
123 { NULL, NULL }, /* Nx */
124 { NULL, NULL }, /* Ox */
125 { NULL, NULL }, /* Pc */
126 { NULL, NULL }, /* Pf */
127 { NULL, NULL }, /* Po */
128 { NULL, NULL }, /* Pq */
129 { NULL, NULL }, /* Qc */
130 { NULL, NULL }, /* Ql */
131 { NULL, NULL }, /* Qo */
132 { NULL, NULL }, /* Qq */
133 { NULL, NULL }, /* Re */
134 { NULL, NULL }, /* Rs */
135 { NULL, NULL }, /* Sc */
136 { NULL, NULL }, /* So */
137 { NULL, NULL }, /* Sq */
138 { NULL, NULL }, /* Sm */
139 { NULL, NULL }, /* Sx */
140 { NULL, NULL }, /* Sy */
141 { NULL, NULL }, /* Tn */
142 { NULL, NULL }, /* Ux */
143 { NULL, NULL }, /* Xc */
144 { NULL, NULL }, /* Xo */
145 { NULL, NULL }, /* Fo */
146 { NULL, NULL }, /* Fc */
147 { NULL, NULL }, /* Oo */
148 { NULL, NULL }, /* Oc */
149 { NULL, NULL }, /* Bk */
150 { NULL, NULL }, /* Ek */
151 { NULL, NULL }, /* Bt */
152 { NULL, NULL }, /* Hf */
153 { NULL, NULL }, /* Fr */
154 { NULL, NULL }, /* Ud */
155 { NULL, NULL }, /* Lb */
156 { NULL, NULL }, /* Lp */
157 { NULL, NULL }, /* Lk */
158 { NULL, NULL }, /* Mt */
159 { NULL, NULL }, /* Brq */
160 { NULL, NULL }, /* Bro */
161 { NULL, NULL }, /* Brc */
162 { NULL, NULL }, /* %C */
163 { NULL, NULL }, /* Es */
164 { NULL, NULL }, /* En */
165 { NULL, NULL }, /* Dx */
166 { NULL, NULL }, /* %Q */
167 { NULL, NULL }, /* br */
168 { NULL, NULL }, /* sp */
169 { NULL, NULL }, /* %U */
170 { NULL, NULL }, /* Ta */
171 };
172
173
174 int
175 mdoc_action_pre(struct mdoc *m, struct mdoc_node *n)
176 {
177
178 switch (n->type) {
179 case (MDOC_ROOT):
180 /* FALLTHROUGH */
181 case (MDOC_TEXT):
182 return(1);
183 default:
184 break;
185 }
186
187 if (NULL == mdoc_actions[n->tok].pre)
188 return(1);
189 return((*mdoc_actions[n->tok].pre)(m, n));
190 }
191
192
193 int
194 mdoc_action_post(struct mdoc *m)
195 {
196
197 if (MDOC_ACTED & m->last->flags)
198 return(1);
199 m->last->flags |= MDOC_ACTED;
200
201 switch (m->last->type) {
202 case (MDOC_TEXT):
203 /* FALLTHROUGH */
204 case (MDOC_ROOT):
205 return(1);
206 default:
207 break;
208 }
209
210 if (NULL == mdoc_actions[m->last->tok].post)
211 return(1);
212 return((*mdoc_actions[m->last->tok].post)(m, m->last));
213 }
214