]>
git.cameronkatri.com Git - mandoc.git/blob - mdoc.h
1 /* $Id: mdoc.h,v 1.102 2010/07/21 09:08:26 kristaps Exp $ */
3 * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
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.
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.
21 * This library implements a validating scanner/parser for ``mdoc'' roff
22 * macro documents, a.k.a. BSD manual page documents. The mdoc.c file
23 * drives the parser, while macro.c describes the macro ontologies.
24 * validate.c pre- and post-validates parsed macros, and action.c
25 * performs actions on parsed and validated macros.
28 /* What follows is a list of ALL possible macros. */
156 /* What follows is a list of ALL possible macro arguments. */
189 /* Type of a syntax node. */
200 /* Section (named/unnamed) of `Sh'. */
202 SEC_NONE
, /* No section, yet. */
223 SEC_CUSTOM
, /* User-defined. */
227 /* Information from prologue. */
238 /* An argument to a macro (multiple values = `It -column'). */
249 struct mdoc_argv
*argv
;
297 const char *offs
; /* -offset */
298 enum mdoc_disp type
; /* -ragged, etc. */
299 int comp
; /* -compact */
303 const char *width
; /* -width */
304 const char *offs
; /* -offset */
305 enum mdoc_list type
; /* -tag, -enum, etc. */
306 int comp
; /* -compact */
307 size_t ncols
; /* -column arg count */
308 const char **cols
; /* -column val ptr */
312 enum mdoc_font font
; /* font */
316 enum mdoc_auth auth
; /* -split, etc. */
321 struct mdoc_node
*parent
; /* parent AST node */
322 struct mdoc_node
*child
; /* first child AST node */
323 struct mdoc_node
*next
; /* sibling AST node */
324 struct mdoc_node
*prev
; /* prior sibling AST node */
325 int nchild
; /* number children */
326 int line
; /* parse line */
327 int pos
; /* parse column */
328 enum mdoct tok
; /* tok or MDOC__MAX if none */
330 #define MDOC_VALID (1 << 0) /* has been validated */
331 #define MDOC_ACTED (1 << 1) /* has been acted upon */
332 #define MDOC_EOS (1 << 2) /* at sentence boundary */
333 #define MDOC_LINE (1 << 3) /* first macro/text on line */
334 #define MDOC_SYNPRETTY (1 << 4) /* SYNOPSIS-style formatting */
335 #define MDOC_ENDED (1 << 5) /* rendering has been ended */
336 enum mdoc_type type
; /* AST node type */
337 enum mdoc_sec sec
; /* current named section */
338 /* FIXME: these can be union'd to shave a few bytes. */
339 struct mdoc_arg
*args
; /* BLOCK/ELEM */
340 struct mdoc_node
*pending
; /* BLOCK */
341 struct mdoc_node
*head
; /* BLOCK */
342 struct mdoc_node
*body
; /* BLOCK */
343 struct mdoc_node
*tail
; /* BLOCK */
344 char *string
; /* TEXT */
345 enum mdoc_endbody end
; /* BODY */
355 #define MDOC_IGN_SCOPE (1 << 0) /* Ignore scope violations. */
356 #define MDOC_IGN_ESCAPE (1 << 1) /* Ignore bad escape sequences. */
357 #define MDOC_IGN_MACRO (1 << 2) /* Ignore unknown macros. */
359 /* See mdoc.3 for documentation. */
361 extern const char *const *mdoc_macronames
;
362 extern const char *const *mdoc_argnames
;
368 /* See mdoc.3 for documentation. */
370 void mdoc_free(struct mdoc
*);
371 struct mdoc
*mdoc_alloc(struct regset
*, void *, int, mandocmsg
);
372 void mdoc_reset(struct mdoc
*);
373 int mdoc_parseln(struct mdoc
*, int, char *, int);
374 const struct mdoc_node
*mdoc_node(const struct mdoc
*);
375 const struct mdoc_meta
*mdoc_meta(const struct mdoc
*);
376 int mdoc_endparse(struct mdoc
*);