version 1.15, 2010/03/31 06:37:57 |
version 1.16, 2010/04/13 05:26:49 |
|
|
.Dd $Mdocdate$ |
.Dd $Mdocdate$ |
.Dt MAN 3 |
.Dt MAN 3 |
.Os |
.Os |
. |
|
. |
|
.Sh NAME |
.Sh NAME |
.Nm man , |
.Nm man , |
.Nm man_alloc , |
.Nm man_alloc , |
|
|
.Nm man_free , |
.Nm man_free , |
.Nm man_reset |
.Nm man_reset |
.Nd man macro compiler library |
.Nd man macro compiler library |
. |
|
. |
|
.Sh SYNOPSIS |
.Sh SYNOPSIS |
.In man.h |
.In man.h |
.Vt extern const char * const * man_macronames; |
.Vt extern const char * const * man_macronames; |
|
|
.Fn man_meta "const struct man *man" |
.Fn man_meta "const struct man *man" |
.Ft int |
.Ft int |
.Fn man_endparse "struct man *man" |
.Fn man_endparse "struct man *man" |
. |
|
. |
|
.Sh DESCRIPTION |
.Sh DESCRIPTION |
The |
The |
.Nm |
.Nm |
Line 58 library parses lines of |
|
Line 52 library parses lines of |
|
input (and |
input (and |
.Em only |
.Em only |
man) into an abstract syntax tree (AST). |
man) into an abstract syntax tree (AST). |
. |
|
.Pp |
.Pp |
In general, applications initiate a parsing sequence with |
In general, applications initiate a parsing sequence with |
.Fn man_alloc , |
.Fn man_alloc , |
Line 78 function may be used in order to reset the parser for |
|
Line 71 function may be used in order to reset the parser for |
|
sequence. See the |
sequence. See the |
.Sx EXAMPLES |
.Sx EXAMPLES |
section for a full example. |
section for a full example. |
. |
|
.Pp |
.Pp |
Beyond the full set of macros defined in |
Beyond the full set of macros defined in |
.Xr man 7 , |
.Xr man 7 , |
the |
the |
.Nm |
.Nm |
library also accepts the following macros: |
library also accepts the following macros: |
. |
|
.Pp |
.Pp |
.Bl -tag -width Ds -compact |
.Bl -tag -width Ds -compact |
.It am |
.It am |
Line 100 and may begin anywhere, although they may not break th |
|
Line 91 and may begin anywhere, although they may not break th |
|
scoping rules specified in |
scoping rules specified in |
.Xr man 7 . |
.Xr man 7 . |
These blocks are discarded. |
These blocks are discarded. |
. |
|
.It PD |
.It PD |
Has no effect. Handled as a current-scope line macro. |
Has no effect. Handled as a current-scope line macro. |
. |
|
.It Sp |
.It Sp |
A synonym for |
A synonym for |
.Sq sp 0.5v |
.Sq sp 0.5v |
.Pq part of the standard preamble for Perl documentation . |
.Pq part of the standard preamble for Perl documentation . |
Handled as a line macro. |
Handled as a line macro. |
. |
|
.It UC |
.It UC |
Has no effect. Handled as a current-scope line macro. |
Has no effect. Handled as a current-scope line macro. |
. |
|
.It Vb |
.It Vb |
A synonym for |
A synonym for |
.Sq nf |
.Sq nf |
.Pq part of the standard preamble for Perl documentation . |
.Pq part of the standard preamble for Perl documentation . |
Handled as a current-scope line macro. |
Handled as a current-scope line macro. |
. |
|
.It Ve |
.It Ve |
A synonym for |
A synonym for |
.Sq fi , |
.Sq fi , |
Line 151 documents to be correctly formatted: |
|
Line 137 documents to be correctly formatted: |
|
\e*(Th (Thorn), |
\e*(Th (Thorn), |
and |
and |
\e*(th (thorn). |
\e*(th (thorn). |
. |
|
. |
|
.Sh REFERENCE |
.Sh REFERENCE |
This section further defines the |
This section further defines the |
.Sx Types , |
.Sx Types , |
|
|
available to programmers. Following that, the |
available to programmers. Following that, the |
.Sx Abstract Syntax Tree |
.Sx Abstract Syntax Tree |
section documents the output tree. |
section documents the output tree. |
. |
|
. |
|
.Ss Types |
.Ss Types |
Both functions (see |
Both functions (see |
.Sx Functions ) |
.Sx Functions ) |
Line 171 and variables (see |
|
Line 153 and variables (see |
|
.Sx Variables ) |
.Sx Variables ) |
may use the following types: |
may use the following types: |
.Bl -ohang |
.Bl -ohang |
. |
|
.It Vt struct man |
.It Vt struct man |
An opaque type defined in |
An opaque type defined in |
.Pa man.c . |
.Pa man.c . |
Its values are only used privately within the library. |
Its values are only used privately within the library. |
. |
|
.It Vt struct man_cb |
.It Vt struct man_cb |
A set of message callbacks defined in |
A set of message callbacks defined in |
.Pa man.h . |
.Pa man.h . |
. |
|
.It Vt struct man_node |
.It Vt struct man_node |
A parsed node. Defined in |
A parsed node. Defined in |
.Pa man.h . |
.Pa man.h . |
|
|
.Sx Abstract Syntax Tree |
.Sx Abstract Syntax Tree |
for details. |
for details. |
.El |
.El |
. |
|
. |
|
.Ss Functions |
.Ss Functions |
Function descriptions follow: |
Function descriptions follow: |
.Bl -ohang |
.Bl -ohang |
. |
|
.It Fn man_alloc |
.It Fn man_alloc |
Allocates a parsing structure. The |
Allocates a parsing structure. The |
.Fa data |
.Fa data |
Line 206 arguments are defined in |
|
Line 182 arguments are defined in |
|
.Pa man.h . |
.Pa man.h . |
Returns NULL on failure. If non-NULL, the pointer must be freed with |
Returns NULL on failure. If non-NULL, the pointer must be freed with |
.Fn man_free . |
.Fn man_free . |
. |
|
.It Fn man_reset |
.It Fn man_reset |
Reset the parser for another parse routine. After its use, |
Reset the parser for another parse routine. After its use, |
.Fn man_parseln |
.Fn man_parseln |
behaves as if invoked for the first time. |
behaves as if invoked for the first time. |
. |
|
.It Fn man_free |
.It Fn man_free |
Free all resources of a parser. The pointer is no longer valid after |
Free all resources of a parser. The pointer is no longer valid after |
invocation. |
invocation. |
. |
|
.It Fn man_parseln |
.It Fn man_parseln |
Parse a nil-terminated line of input. This line should not contain the |
Parse a nil-terminated line of input. This line should not contain the |
trailing newline. Returns 0 on failure, 1 on success. The input buffer |
trailing newline. Returns 0 on failure, 1 on success. The input buffer |
.Fa buf |
.Fa buf |
is modified by this function. |
is modified by this function. |
. |
|
.It Fn man_endparse |
.It Fn man_endparse |
Signals that the parse is complete. Note that if |
Signals that the parse is complete. Note that if |
.Fn man_endparse |
.Fn man_endparse |
is called subsequent to |
is called subsequent to |
.Fn man_node , |
.Fn man_node , |
the resulting tree is incomplete. Returns 0 on failure, 1 on success. |
the resulting tree is incomplete. Returns 0 on failure, 1 on success. |
. |
|
.It Fn man_node |
.It Fn man_node |
Returns the first node of the parse. Note that if |
Returns the first node of the parse. Note that if |
.Fn man_parseln |
.Fn man_parseln |
|
|
.Fn man_endparse |
.Fn man_endparse |
return 0, the data will be incomplete. |
return 0, the data will be incomplete. |
.El |
.El |
. |
|
. |
|
.Ss Variables |
.Ss Variables |
The following variables are also defined: |
The following variables are also defined: |
.Bl -ohang |
.Bl -ohang |
. |
|
.It Va man_macronames |
.It Va man_macronames |
An array of string-ified token names. |
An array of string-ified token names. |
.El |
.El |
. |
|
. |
|
.Ss Abstract Syntax Tree |
.Ss Abstract Syntax Tree |
The |
The |
.Nm |
.Nm |
|
|
or |
or |
.Fn man_parseln |
.Fn man_parseln |
fail, it may be incomplete. |
fail, it may be incomplete. |
. |
|
.Pp |
.Pp |
This AST is governed by the ontological |
This AST is governed by the ontological |
rules dictated in |
rules dictated in |
.Xr man 7 |
.Xr man 7 |
and derives its terminology accordingly. |
and derives its terminology accordingly. |
. |
|
.Pp |
.Pp |
The AST is composed of |
The AST is composed of |
.Vt struct man_node |
.Vt struct man_node |
Line 292 fields), its position in the tree (the |
|
Line 256 fields), its position in the tree (the |
|
and |
and |
.Va prev |
.Va prev |
fields) and some type-specific data. |
fields) and some type-specific data. |
. |
|
.Pp |
.Pp |
The tree itself is arranged according to the following normal form, |
The tree itself is arranged according to the following normal form, |
where capitalised non-terminals represent nodes. |
where capitalised non-terminals represent nodes. |
Line 313 where capitalised non-terminals represent nodes. |
|
Line 276 where capitalised non-terminals represent nodes. |
|
.It TEXT |
.It TEXT |
\(<- [[:alpha:]]* |
\(<- [[:alpha:]]* |
.El |
.El |
. |
|
.Pp |
.Pp |
The only elements capable of nesting other elements are those with |
The only elements capable of nesting other elements are those with |
next-lint scope as documented in |
next-lint scope as documented in |
.Xr man 7 . |
.Xr man 7 . |
. |
|
. |
|
.Sh EXAMPLES |
.Sh EXAMPLES |
The following example reads lines from stdin and parses them, operating |
The following example reads lines from stdin and parses them, operating |
on the finished parse tree with |
on the finished parse tree with |
Line 355 if (NULL == (node = man_node(man))) |
|
Line 315 if (NULL == (node = man_node(man))) |
|
parsed(man, node); |
parsed(man, node); |
man_free(man); |
man_free(man); |
.Ed |
.Ed |
. |
|
. |
|
.Sh SEE ALSO |
.Sh SEE ALSO |
.Xr mandoc 1 , |
.Xr mandoc 1 , |
.Xr man 7 |
.Xr man 7 |
. |
|
. |
|
.Sh AUTHORS |
.Sh AUTHORS |
The |
The |
.Nm |
.Nm |