version 1.11, 2010/01/07 19:10:09 |
version 1.12, 2010/02/17 19:22:01 |
|
|
.\" $Id$ |
.\" $Id$ |
.\" |
.\" |
.\" Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se> |
.\" Copyright (c) 2009-2010 Kristaps Dzonsons <kristaps@bsd.lv> |
.\" |
.\" |
.\" Permission to use, copy, modify, and distribute this software for any |
.\" Permission to use, copy, modify, and distribute this software for any |
.\" purpose with or without fee is hereby granted, provided that the above |
.\" purpose with or without fee is hereby granted, provided that the above |
Line 91 Both functions (see |
|
Line 91 Both functions (see |
|
and variables (see |
and variables (see |
.Sx Variables ) |
.Sx Variables ) |
may use the following types: |
may use the following types: |
.Bl -ohang -offset "XXXX" |
.Bl -ohang |
.\" LIST-ITEM |
.\" LIST-ITEM |
.It Vt struct man |
.It Vt struct man |
An opaque type defined in |
An opaque type defined in |
|
|
.\" SUBSECTION |
.\" SUBSECTION |
.Ss Functions |
.Ss Functions |
Function descriptions follow: |
Function descriptions follow: |
.Bl -ohang -offset "XXXX" |
.Bl -ohang |
.\" LIST-ITEM |
.\" LIST-ITEM |
.It Fn man_alloc |
.It Fn man_alloc |
Allocates a parsing structure. The |
Allocates a parsing structure. The |
Line 166 return 0, the data will be incomplete. |
|
Line 166 return 0, the data will be incomplete. |
|
.\" SUBSECTION |
.\" SUBSECTION |
.Ss Variables |
.Ss Variables |
The following variables are also defined: |
The following variables are also defined: |
.Bl -ohang -offset "XXXX" |
.Bl -ohang |
.\" LIST-ITEM |
.\" LIST-ITEM |
.It Va man_macronames |
.It Va man_macronames |
An array of string-ified token names. |
An array of string-ified token names. |
Line 215 fields) and some type-specific data. |
|
Line 215 fields) and some type-specific data. |
|
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. |
.Pp |
.Pp |
.Bl -tag -width "ELEMENTXX" -compact -offset "XXXX" |
.Bl -tag -width "ELEMENTXX" -compact |
.\" LIST-ITEM |
.\" LIST-ITEM |
.It ROOT |
.It ROOT |
\(<- mnode+ |
\(<- mnode+ |
Line 242 next-lint scope as documented in |
|
Line 242 next-lint scope as documented in |
|
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 |
.Fn parsed . |
.Fn parsed . |
Note that, if the last line of the file isn't newline-terminated, this |
This example does not error-check nor free memory upon failure. |
will truncate the file's last character (see |
.Bd -literal -offset indent |
.Xr fgetln 3 ) . |
|
Further, this example does not error-check nor free memory upon failure. |
|
.Bd -literal -offset "XXXX" |
|
struct man *man; |
struct man *man; |
struct man_node *node; |
struct man_node *node; |
char *buf; |
char *buf; |
|
|
|
|
line = 1; |
line = 1; |
man = man_alloc(NULL, 0, NULL); |
man = man_alloc(NULL, 0, NULL); |
|
buf = NULL; |
|
alloc_len = 0; |
|
|
while ((buf = fgetln(fp, &len))) { |
while ((len = getline(&buf, &alloc_len, stdin)) >= 0) { |
buf[len - 1] = '\e0'; |
if (len && buflen[len - 1] = '\en') |
if ( ! man_parseln(man, line, buf)) |
buf[len - 1] = '\e0'; |
errx(1, "man_parseln"); |
if ( ! man_parseln(man, line, buf)) |
line++; |
errx(1, "man_parseln"); |
|
line++; |
} |
} |
|
|
|
free(buf); |
|
|
if ( ! man_endparse(man)) |
if ( ! man_endparse(man)) |
errx(1, "man_endparse"); |
errx(1, "man_endparse"); |
if (NULL == (node = man_node(man))) |
if (NULL == (node = man_node(man))) |
errx(1, "man_node"); |
errx(1, "man_node"); |
|
|
parsed(man, node); |
parsed(man, node); |
man_free(man); |
man_free(man); |
|
|
The |
The |
.Nm |
.Nm |
utility was written by |
utility was written by |
.An Kristaps Dzonsons Aq kristaps@kth.se . |
.An Kristaps Dzonsons Aq kristaps@bsd.lv . |