6 .Nd ordering of mandoc include files
8 To support a cleaner coding style, the mandoc header files do not
9 contain any include directives and do not guard against multiple
11 The application developer has to make sure that the headers are
12 included in a proper order, and that no header is included more
15 The headers and functions form three major groups:
16 .Sx Parser interface ,
17 .Sx Parser internals ,
19 .Sx Formatter interface .
21 Various rules are given below prohibiting the inclusion of certain
22 combinations of headers into the same file.
23 The intention is to keep the following functional components
24 separate from each other:
26 .Bl -dash -offset indent -compact
50 Note that mere usage of an opaque type does
52 require inclusion of the header where that type is defined.
54 Each of the following headers can be included without including
55 any other mandoc header.
56 These headers should be included before any other mandoc headers.
57 Afterwards, any other mandoc headers can be included as needed.
59 .It Qq Pa mandoc_aux.h
64 Provides the utility functions documented in
75 .Vt enum mandoclevel ,
91 the function prototype typedef
95 the functions described in
102 Uses the opaque types
110 for function prototypes.
119 as opaque types for function prototypes.
131 .Vt enum mdoc_endbody ,
136 .Vt struct mdoc_meta ,
137 .Vt struct mdoc_argv ,
138 .Vt struct mdoc_arg ,
144 .Vt struct mdoc_node ,
154 as an opaque type for function prototypes.
155 Uses pointers to the types
159 as opaque struct members.
161 When this header is included, the same file should not include
169 .Vt struct man_meta ,
170 .Vt struct man_node ,
180 for function prototypes.
185 as an opaque type for function prototypes.
186 Uses pointers to the types
190 as opaque struct members.
192 When this header is included, the same file should not include
198 The following headers require inclusion of a parser interface header
199 before they can be included. All parser interface headers should
200 precede all parser internal headers. When any parser internal headers
201 are included, the same file should not include any formatter headers.
203 .It Qq Pa libmandoc.h
212 utility functions needed by multiple parsers,
213 and the top-level functions to call the parsers.
215 Uses the opaque types
223 for function prototypes.
226 .Vt struct tbl_span ,
238 as opaque types for function prototypes.
253 .Vt struct mdoc_macro ,
254 and many functions internal to the
258 Uses the opaque types
267 When this header is included, the same file should not include
283 .Vt struct man_macro ,
284 and many functions internal to the
288 Uses the opaque types
297 When this header is included, the same file should not include
319 .Vt struct tbl_node ,
321 .Vt struct eqn_node ,
322 and many functions internal to the
333 When this header is included, the same file should not include
340 .Ss Formatter interface
341 These headers should be included after any parser interface headers.
342 No parser internal headers should be included by the same file.
363 as an opaque type for function prototypes.
365 When this header is included, the same file should not include
385 .Vt struct termp_tbl ,
387 and many terminal formatting functions.
389 Uses the opaque types
403 as opaque types for function prototypes.
405 When this header is included, the same file should not include
431 .Vt struct htmlpair ,
433 and many HTML formatting functions.
440 When this header is included, the same file should not include
446 Provides the top level steering functions for all formatters.
460 as opaque types for function prototypes.
470 .Fn manpath_manconf ,
475 When this header is included, the same file should not include
480 .It Qq Pa mansearch.h
493 .Vt struct mansearch ,
495 .Fn mansearch_setup ,
504 as an opaque type for function prototypes.
506 When this header is included, the same file should not include