]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdoc.3
Renamed TERMP_NONOSPACE -> TERMP_DANGLE.
[mandoc.git] / mdoc.3
diff --git a/mdoc.3 b/mdoc.3
index 76f33555ddd2b9fd6d6b07f0c230c31ecef50ac3..8f667235fd06b8e9511a6d2282c47d3c1ba82fb3 100644 (file)
--- a/mdoc.3
+++ b/mdoc.3
@@ -1,23 +1,21 @@
-.\" $Id: mdoc.3,v 1.6 2009/02/23 09:33:34 kristaps Exp $
+.\"    $Id: mdoc.3,v 1.31 2009/07/05 19:30:49 kristaps Exp $
 .\"
 .\" Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
 .\"
 .\" Permission to use, copy, modify, and distribute this software for any
 .\"
 .\" Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
 .\"
 .\" Permission to use, copy, modify, and distribute this software for any
-.\" purpose with or without fee is hereby granted, provided that the
-.\" above copyright notice and this permission notice appear in all
-.\" copies.
+.\" purpose with or without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
 .\"
 .\"
-.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
-.\" WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
-.\" WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
-.\" AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
-.\" DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-.\" PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-.\" TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-.\" PERFORMANCE OF THIS SOFTWARE.
+.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 .\" 
 .\" 
-.Dd $Mdocdate: February 23 2009 $
-.Dt mdoc 3
+.Dd $Mdocdate: July 5 2009 $
+.Dt MDOC 3
 .Os
 .\" SECTION
 .Sh NAME
 .Os
 .\" SECTION
 .Sh NAME
@@ -26,7 +24,8 @@
 .Nm mdoc_endparse ,
 .Nm mdoc_node ,
 .Nm mdoc_meta ,
 .Nm mdoc_endparse ,
 .Nm mdoc_node ,
 .Nm mdoc_meta ,
-.Nm mdoc_free
+.Nm mdoc_free ,
+.Nm mdoc_reset
 .Nd mdoc macro compiler library
 .\" SECTION
 .Sh SYNOPSIS
 .Nd mdoc macro compiler library
 .\" SECTION
 .Sh SYNOPSIS
 .Vt extern const char * const * mdoc_macronames;
 .Vt extern const char * const * mdoc_argnames;
 .Ft "struct mdoc *"
 .Vt extern const char * const * mdoc_macronames;
 .Vt extern const char * const * mdoc_argnames;
 .Ft "struct mdoc *"
-.Fn mdoc_alloc "void *data" "const struct mdoc_cb *cb"
+.Fn mdoc_alloc "void *data" "int pflags" "const struct mdoc_cb *cb"
+.Ft int
+.Fn mdoc_reset "struct mdoc *mdoc"
 .Ft void
 .Fn mdoc_free "struct mdoc *mdoc"
 .Ft int
 .Fn mdoc_parseln "struct mdoc *mdoc" "int line" "char *buf"
 .Ft "const struct mdoc_node *"
 .Ft void
 .Fn mdoc_free "struct mdoc *mdoc"
 .Ft int
 .Fn mdoc_parseln "struct mdoc *mdoc" "int line" "char *buf"
 .Ft "const struct mdoc_node *"
-.Fn mdoc_node "struct mdoc *mdoc"
+.Fn mdoc_node "const struct mdoc *mdoc"
 .Ft "const struct mdoc_meta *"
 .Ft "const struct mdoc_meta *"
-.Fn mdoc_meta "struct mdoc *mdoc"
+.Fn mdoc_meta "const struct mdoc *mdoc"
 .Ft int
 .Fn mdoc_endparse "struct mdoc *mdoc"
 .\" SECTION
 .Sh DESCRIPTION
 The
 .Nm mdoc
 .Ft int
 .Fn mdoc_endparse "struct mdoc *mdoc"
 .\" SECTION
 .Sh DESCRIPTION
 The
 .Nm mdoc
-library parses lines of mdoc input into an abstract syntax tree.  
-.Dq mdoc
-is a macro package of the
-.Dq roff
-language, which is used to format BSD manual pages.  The 
-.Nm
-library implements only those macros documented in the
+library parses lines of 
 .Xr mdoc 7
 .Xr mdoc 7
-and
-.Xr mdoc.samples 7
-manuals.
-.\" PARAGRAPH
-.Pp
-.Nm
-is
-.Ud
+input (and
+.Em only
+mdoc) into an abstract syntax tree (AST).
 .\" PARAGRAPH
 .Pp
 In general, applications initiate a parsing sequence with
 .\" PARAGRAPH
 .Pp
 In general, applications initiate a parsing sequence with
@@ -79,7 +69,10 @@ and
 .Fn mdoc_meta ,
 then free all allocated memory with
 .Fn mdoc_free .
 .Fn mdoc_meta ,
 then free all allocated memory with
 .Fn mdoc_free .
-See the
+The
+.Fn mdoc_reset
+function may be used in order to reset the parser for another input
+sequence.  See the
 .Sx EXAMPLES
 section for a full example.
 .\" PARAGRAPH
 .Sx EXAMPLES
 section for a full example.
 .\" PARAGRAPH
@@ -89,9 +82,9 @@ This section further defines the
 .Sx Functions 
 and
 .Sx Variables
 .Sx Functions 
 and
 .Sx Variables
-available to programmers.  The last sub-section,
-.Sx Abstract Syntax Tree ,
-documents the output tree.
+available to programmers.  Following that, the
+.Sx Abstract Syntax Tree 
+section documents the output tree.
 .\" SUBSECTION
 .Ss Types
 Both functions (see
 .\" SUBSECTION
 .Ss Types
 Both functions (see
@@ -99,7 +92,7 @@ Both functions (see
 and variables (see
 .Sx Variables )
 may use the following types:
 and variables (see
 .Sx Variables )
 may use the following types:
-.Bl -ohang
+.Bl -ohang -offset "XXXX"
 .\" LIST-ITEM
 .It Vt struct mdoc
 An opaque type defined in
 .\" LIST-ITEM
 .It Vt struct mdoc
 An opaque type defined in
@@ -120,17 +113,27 @@ for details.
 .\" SUBSECTION
 .Ss Functions
 Function descriptions follow:
 .\" SUBSECTION
 .Ss Functions
 Function descriptions follow:
-.Bl -ohang 
+.Bl -ohang -offset "XXXX"
 .\" LIST-ITEM
 .It Fn mdoc_alloc
 Allocates a parsing structure.  The
 .Fa data
 pointer is passed to callbacks in
 .Fa cb , 
 .\" LIST-ITEM
 .It Fn mdoc_alloc
 Allocates a parsing structure.  The
 .Fa data
 pointer is passed to callbacks in
 .Fa cb , 
-which are documented further in the header file.  Returns NULL on
-failure.  If non-NULL, the pointer must be freed with
+which are documented further in the header file.  
+The
+.Fa pflags
+arguments are defined in
+.Pa mdoc.h .
+Returns NULL on failure.  If non-NULL, the pointer must be freed with
 .Fn mdoc_free .
 .\" LIST-ITEM
 .Fn mdoc_free .
 .\" LIST-ITEM
+.It Fn mdoc_reset
+Reset the parser for another parse routine.  After its use, 
+.Fn mdoc_parseln
+behaves as if invoked for the first time.  If it returns 0, memory could
+not be allocated.
+.\" LIST-ITEM
 .It Fn mdoc_free
 Free all resources of a parser.  The pointer is no longer valid after
 invocation.
 .It Fn mdoc_free
 Free all resources of a parser.  The pointer is no longer valid after
 invocation.
@@ -165,7 +168,7 @@ return 0, the data will be incomplete.
 .\" SUBSECTION
 .Ss Variables
 The following variables are also defined:
 .\" SUBSECTION
 .Ss Variables
 The following variables are also defined:
-.Bl -ohang
+.Bl -ohang -offset "XXXX"
 .\" LIST-ITEM
 .It Va mdoc_macronames
 An array of string-ified token names.
 .\" LIST-ITEM
 .It Va mdoc_macronames
 An array of string-ified token names.
@@ -177,8 +180,8 @@ An array of string-ified token argument names.
 .Ss Abstract Syntax Tree
 The 
 .Nm
 .Ss Abstract Syntax Tree
 The 
 .Nm
-functions produce an abstract syntax tree (AST) describing the input
-lines in a regular form.  It may be reviewed at any time with
+functions produce an abstract syntax tree (AST) describing input in a
+regular form.  It may be reviewed at any time with
 .Fn mdoc_nodes ;
 however, if called before
 .Fn mdoc_endparse ,
 .Fn mdoc_nodes ;
 however, if called before
 .Fn mdoc_endparse ,
@@ -186,7 +189,18 @@ or after
 .Fn mdoc_endparse 
 or
 .Fn mdoc_parseln
 .Fn mdoc_endparse 
 or
 .Fn mdoc_parseln
-fail, it may be incomplete.
+fail, it may be incomplete.  
+.\" PARAGRAPH
+.Pp
+This AST is governed by the ontological
+rules dictated in
+.Xr mdoc 7
+and derives its terminology accordingly.  
+.Qq In-line
+elements described in
+.Xr mdoc 7
+are described simply as 
+.Qq elements .
 .\" PARAGRAPH
 .Pp
 The AST is composed of 
 .\" PARAGRAPH
 .Pp
 The AST is composed of 
@@ -205,15 +219,13 @@ fields), its position in the tree (the
 .Va next 
 and
 .Va prev 
 .Va next 
 and
 .Va prev 
-fields) and type-specific data (the
-.Va data
-field).
+fields) and some type-specific data.
 .\" PARAGRAPH
 .Pp
 The tree itself is arranged according to the following normal form,
 where capitalised non-terminals represent nodes.
 .Pp
 .\" PARAGRAPH
 .Pp
 The tree itself is arranged according to the following normal form,
 where capitalised non-terminals represent nodes.
 .Pp
-.Bl -tag -width "ELEMENTXX" -compact
+.Bl -tag -width "ELEMENTXX" -compact -offset "XXXX"
 .\" LIST-ITEM
 .It ROOT
 \(<- mnode+
 .\" LIST-ITEM
 .It ROOT
 \(<- mnode+
@@ -238,31 +250,10 @@ where capitalised non-terminals represent nodes.
 .Pp
 Of note are the TEXT nodes following the HEAD, BODY and TAIL nodes of
 the BLOCK production.  These refer to punctuation marks.  Furthermore,
 .Pp
 Of note are the TEXT nodes following the HEAD, BODY and TAIL nodes of
 the BLOCK production.  These refer to punctuation marks.  Furthermore,
-although a TEXT node will generally have a non-zero-length string, it
-certain cases, such as 
-.Dq \&.Bd \-literal ,
+although a TEXT node will generally have a non-zero-length string, in
+the specific case of 
+.Sq \&.Bd \-literal ,
 an empty line will produce a zero-length string.
 an empty line will produce a zero-length string.
-.\" PARAGRAPH
-.Pp
-The rule-of-thumb for mapping node types to macros follows: in-line
-elements, such as 
-.Dq \&.Em foo ,
-are classified as ELEMENT nodes, which can only contain text.
-Multi-line elements such as
-.Dq \&.Sh
-are BLOCK elements, where the HEAD constitutes line contents and the
-BODY constitutes subsequent lines.  In-line elements with matching
-pairs, such as
-.Dq \&.So
-and
-.Dq \&.Sc ,
-are BLOCK elements with no HEAD tag.  The only exception to this is
-.Dq \&.Eo 
-and
-.Dq \&.Ec ,
-which has a HEAD and TAIL node corresponding to the enclosure string.
-TEXT nodes, obviously, constitute text; the ROOT node is the document's
-root.
 .\" SECTION
 .Sh EXAMPLES
 The following example reads lines from stdin and parses them, operating
 .\" SECTION
 .Sh EXAMPLES
 The following example reads lines from stdin and parses them, operating
@@ -272,15 +263,15 @@ Note that, if the last line of the file isn't newline-terminated, this
 will truncate the file's last character (see 
 .Xr fgetln 3 ) .
 Further, this example does not error-check nor free memory upon failure.
 will truncate the file's last character (see 
 .Xr fgetln 3 ) .
 Further, this example does not error-check nor free memory upon failure.
-.Bd -literal
+.Bd -literal -offset "XXXX"
 struct mdoc *mdoc;
 struct mdoc *mdoc;
-struct mdoc_node *node;
+const struct mdoc_node *node;
 char *buf;
 size_t len;
 int line;
 
 line = 1;
 char *buf;
 size_t len;
 int line;
 
 line = 1;
-mdoc = mdoc_alloc(NULL, NULL);
+mdoc = mdoc_alloc(NULL, 0, NULL);
 
 while ((buf = fgetln(fp, &len))) {
        buf[len - 1] = '\\0';
 
 while ((buf = fgetln(fp, &len))) {
        buf[len - 1] = '\\0';
@@ -299,10 +290,8 @@ mdoc_free(mdoc);
 .Ed
 .\" SECTION
 .Sh SEE ALSO
 .Ed
 .\" SECTION
 .Sh SEE ALSO
-.Xr mdoc 7 ,
-.Xr mdoc.samples 7 ,
-.Xr groff 1 ,
-.Xr mdocml 1
+.Xr mandoc 1 ,
+.Xr mdoc 7
 .\" SECTION
 .Sh AUTHORS
 The
 .\" SECTION
 .Sh AUTHORS
 The
@@ -310,45 +299,46 @@ The
 utility was written by 
 .An Kristaps Dzonsons Aq kristaps@kth.se .
 .\" SECTION
 utility was written by 
 .An Kristaps Dzonsons Aq kristaps@kth.se .
 .\" SECTION
-.Sh BUGS
-Bugs, un-implemented macros and incompabilities are documented in this
-section.  The baseline for determining whether macro parsing is 
-.Qq incompatible
-is the default
-.Xr groff 1
-system bundled with 
-.Ox .
-.Pp
-Un-implemented: the 
-.Sq \&Xc
+.Sh CAVEATS
+.Bl -dash -compact
+.\" LIST-ITEM
+.It
+The 
+.Sq \&.Xc
 and
 and
-.Sq \&Xo
+.Sq \&.Xo
 macros aren't handled when used to span lines for the
 macros aren't handled when used to span lines for the
-.Sq \&It
-macro.  Such usage is specifically discouraged in
-.Xr mdoc.samples 7 .
-.Pp
-Bugs: when 
-.Sq \&It \-column
-is invoked, whitespace is not stripped around
-.Sq \&Ta
-or tab-character separators.
-.Pp
-Incompatible: the 
-.Sq \&At
-macro only accepts a single parameter.  Furthermore, several macros 
-.Pf ( Sq \&Pp ,
-.Sq \&It ,
-and possibly others) accept multiple arguments with a warning.
-.Pp
-Incompatible: only those macros specified by
-.Xr mdoc.samples 7
+.Sq \&.It
+macro. 
+.\" LIST-ITEM
+.It
+The 
+.Sq \&.Bsx
+macro family doesn't yet understand version arguments.
+.\" LIST-ITEM
+.It
+If not given a value, the \-offset argument to
+.Sq \&.Bd
 and
 and
-.Xr mdoc 7
-for
-.Ox
-are supported; support for
-.Nx
-and other 
-.Bx
-systems is in progress.
+.Sq \&.Bl
+should be the width of 
+.Qq <string> ;
+instead, a value of 
+.Li 10n
+is provided.
+.\" LIST-ITEM
+.It
+Columns widths in
+.Sq \&.Bl \-column
+should default to width
+.Qq <stringx>
+if not included.
+.\" LIST-ITEM
+.It
+List-width suffix
+.Qq m
+isn't handled.
+.\" LIST-ITEM
+.It
+Contents of the SYNOPSIS section aren't checked.
+.El