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 struct 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.
58 .It Qq Pa mandoc_aux.h
63 Provides the utility functions documented in
74 .Vt enum mandoclevel ,
90 the function prototype typedef
94 the functions described in
101 Uses the opaque types
109 for function prototypes.
118 as opaque types for function prototypes.
124 The following two require
126 but no other mandoc headers.
127 Afterwards, any other mandoc headers can be included as needed.
143 .Vt enum mdoc_endbody ,
148 .Vt struct mdoc_meta ,
149 .Vt struct mdoc_argv ,
150 .Vt struct mdoc_arg ,
156 .Vt struct mdoc_node ,
166 as an opaque type for function prototypes.
167 Uses pointers to the types
171 as opaque struct members.
173 When this header is included, the same file should not include
185 .Vt struct man_meta ,
186 .Vt struct man_node ,
196 for function prototypes.
201 as an opaque type for function prototypes.
202 Uses pointers to the types
206 as opaque struct members.
208 When this header is included, the same file should not include
214 The following headers require inclusion of a parser interface header
215 before they can be included. All parser interface headers should
216 precede all parser internal headers. When any parser internal headers
217 are included, the same file should not include any formatter headers.
219 .It Qq Pa libmandoc.h
232 utility functions needed by multiple parsers,
233 and the top-level functions to call the parsers.
235 Uses the opaque types
243 for function prototypes.
257 as opaque types for function prototypes.
272 .Vt struct mdoc_macro ,
273 and many functions internal to the
277 Uses the opaque types
286 When this header is included, the same file should not include
302 .Vt struct man_macro ,
303 and many functions internal to the
307 Uses the opaque types
316 When this header is included, the same file should not include
338 .Vt struct tbl_node ,
340 .Vt struct eqn_node ,
341 and many functions internal to the
352 When this header is included, the same file should not include
359 .Ss Formatter interface
360 These headers should be included after any parser interface headers.
361 No parser internal headers should be included by the same file.
382 as an opaque type for function prototypes.
384 When this header is included, the same file should not include
402 .Vt struct termp_tbl ,
404 and many terminal formatting functions.
406 Uses the opaque types
420 as opaque types for function prototypes.
422 When this header is included, the same file should not include
447 .Vt struct htmlpair ,
449 and many HTML formatting functions.
456 When this header is included, the same file should not include
461 Provides the top level steering functions for all formatters.
475 as opaque types for function prototypes.
484 .Vt struct manpaths ,
485 .Vt struct manoutput ,
491 .It Qq Pa mansearch.h
504 .Vt struct mansearch ,
506 .Fn mansearch_setup ,
515 as an opaque type for function prototypes.
517 When this header is included, the same file should not include