=================================================================== RCS file: /cvs/mandoc/mdoc.7,v retrieving revision 1.105 retrieving revision 1.129 diff -u -p -r1.105 -r1.129 --- mandoc/mdoc.7 2010/05/14 16:02:29 1.105 +++ mandoc/mdoc.7 2010/07/02 13:07:46 1.129 @@ -1,4 +1,4 @@ -.\" $Id: mdoc.7,v 1.105 2010/05/14 16:02:29 kristaps Exp $ +.\" $Id: mdoc.7,v 1.129 2010/07/02 13:07:46 kristaps Exp $ .\" .\" Copyright (c) 2009 Kristaps Dzonsons .\" @@ -14,7 +14,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: May 14 2010 $ +.Dd $Mdocdate: July 2 2010 $ .Dt MDOC 7 .Os .Sh NAME @@ -33,7 +33,7 @@ section describes compatibility with other troff \-mdo .Pp An .Nm -document follows simple rules: lines beginning with the control +document follows simple rules: lines beginning with the control character .Sq \. are parsed for macros. Other lines are interpreted within the scope of @@ -55,7 +55,7 @@ Text following a whether in a macro or free-form text line, is ignored to the end of line. A macro line with only a control character and comment escape, .Sq \&.\e" , -is also ignored. Macro lines with only a control charater and optionally +is also ignored. Macro lines with only a control character and optionally whitespace are stripped from input. .Ss Reserved Characters Within a macro line, the following characters are reserved: @@ -122,7 +122,7 @@ escape followed by an indicator: B (bold), I, (italic) A numerical representation 3, 2, or 1 (bold, italic, and Roman, respectively) may be used instead. A text decoration is valid within -the current font scope only: if a macro opens a font scope alongside +the current font scope only: if a macro opens a font scope alongside its own scope, such as .Sx \&Bf .Cm \&Sy , @@ -167,7 +167,7 @@ also defined a set of package-specific .Dq predefined strings , which, like .Sx Special Characters , -demark special output characters and strings by way of input codes. +mark special output characters and strings by way of input codes. Predefined strings are escaped with the slash-asterisk, .Sq \e* : single-character @@ -301,10 +301,18 @@ When composing a manual, make sure that your sentences a line. By doing so, front-ends will be able to apply the proper amount of spacing after the end of sentence (unescaped) period, exclamation mark, -or question mark. +or question mark followed by zero or more non-sentence closing +delimiters ( +.Ns Sq \&) , +.Sq \&] , +.Sq \&' , +.Sq \&" ) . .Pp The proper spacing is also intelligently preserved if a sentence ends at -the boundary of a macro line. +the boundary of a macro line, e.g., +.Pp +.D1 \&Xr mandoc 1 \. +.D1 \&Fl T \&Ns \&Cm ascii \. .Sh MANUAL STRUCTURE A well-formed .Nm @@ -325,8 +333,11 @@ must be the NAME section, consisting of at least one followed by .Sx \&Nd . .Pp -Following that, convention dictates specifying at least the SYNOPSIS and -DESCRIPTION sections, although this varies between manual sections. +Following that, convention dictates specifying at least the +.Em SYNOPSIS +and +.Em DESCRIPTION +sections, although this varies between manual sections. .Pp The following is a well-formed skeleton .Nm @@ -335,18 +346,15 @@ file: \&.Dd $\&Mdocdate$ \&.Dt mdoc 7 \&.Os -\&. \&.Sh NAME \&.Nm foo \&.Nd a description goes here -\&.\e\*q The next is for sections 2 & 3 only. +\&.\e\*q The next is for sections 2, 3, & 9 only. \&.\e\*q .Sh LIBRARY -\&. \&.Sh SYNOPSIS \&.Nm foo \&.Op Fl options \&.Ar -\&. \&.Sh DESCRIPTION The \&.Nm @@ -401,7 +409,7 @@ and .Sx \&Nd . .It Em LIBRARY The name of the library containing the documented material, which is -assumed to be a function in a section 2 or 3 manual. +assumed to be a function in a section 2, 3, or 9 manual. The syntax for this is as follows: .Bd -literal -offset indent \&.Lb libarm @@ -445,13 +453,44 @@ And for the third, configurations (section 4): Manuals not in these sections generally don't need a .Em SYNOPSIS . .Pp -See -.Sx \&Op , +Some macros are displayed differently in the +.Em SYNOPSIS +section, particularly +.Sx \&Nm , .Sx \&Cd , +.Sx \&Fd , .Sx \&Fn , -.Sx \&Ft , +.Sx \&Fo , +.Sx \&In , +.Sx \&Vt , and -.Sx \&Vt . +.Sx \&Ft . +All of these macros are output on their own line. If two such +dissimilar macros are pair-wise invoked (except for +.Sx \&Ft +before +.Sx \&Fo +or +.Sx \&Fn ) , +they are separated by a vertical space, unless in the case of +.Sx \&Fo , +.Sx \&Fn , +and +.Sx \&Ft , +which are always separated by vertical space. +.Pp +When text and macros following an +.Sx \&Nm +macro starting an input line span multiple output lines, +all output lines but the first will be indented to align +with the text immediately following the +.Sx \&Nm +macro, up to the next +.Sx \&Nm , +.Sx \&Sx , +or +.Sx \&Ss +macro or the end of an enclosing block, whichever comes first. .It Em DESCRIPTION This expands upon the brief, one-line description in .Em NAME . @@ -646,9 +685,20 @@ has multiple heads. .It Em Macro Ta Em Callable Ta Em Parsable Ta Em Scope .It Sx \&It Ta \&No Ta Yes Ta closed by Sx \&It , Sx \&El .It Sx \&Nd Ta \&No Ta \&No Ta closed by Sx \&Sh +.It Sx \&Nm Ta \&No Ta Yes Ta closed by Sx \&Nm , Sx \&Sh , Sx \&Ss .It Sx \&Sh Ta \&No Ta \&No Ta closed by Sx \&Sh .It Sx \&Ss Ta \&No Ta \&No Ta closed by Sx \&Sh , Sx \&Ss .El +.Pp +Note that the +.Sx \&Nm +macro is a +.Sx Block full-implicit +macro only when invoked as the first macro +in a +.Em SYNOPSIS +section line, else it is +.Sx In-line . .Ss Block partial-explicit Like block full-explicit, but also with single-line scope. Each has at least a body and, in limited circumstances, a head @@ -723,7 +773,9 @@ Note that the macro is a .Sx Block partial-implicit only when invoked as the first macro -in a SYNOPSIS section line, else it is +in a +.Em SYNOPSIS +section line, else it is .Sx In-line . .Ss In-line Closed by @@ -945,7 +997,7 @@ See also .Sx \&Aq . .Ss \&Ap Inserts an apostrophe without any surrounding white-space. -This is generally used as a grammatic device when referring to the verb +This is generally used as a grammatical device when referring to the verb form of a function: .Bd -literal -offset indent \&.Fn execve Ap d @@ -1066,10 +1118,7 @@ As a scaling unit following the syntax described in As the calculated string length of the opaque string. .El .Pp -If unset, it will revert to the value of -.Ar 8n -as described in -.Sx Scaling Widths . +If not provided an argument, it will be ignored. .It Fl compact Do not assert a vertical space before the block. .It Fl file Ar file @@ -1090,7 +1139,62 @@ See also and .Sx \&Dl . .Ss \&Bf +Change the font mode for a scoped block of text. +Its syntax is as follows: +.Bd -ragged -offset indent +.Pf \. Sx \&Bf +.Oo +.Fl emphasis | literal | symbolic | +.Cm \&Em | \&Li | \&Sy +.Oc +.Ed +.Pp +The +.Fl emphasis +and +.Cm \&Em +argument are equivalent, as are +.Fl symbolic +and +.Cm \&Sy, +and +.Fl literal +and +.Cm \&Li . +Without an argument, this macro does nothing. +The font mode continues until broken by a new font mode in a nested +scope or +.Sx \&Ef +is encountered. +.Pp +See also +.Sx \&Li , +.Sx \&Ef , +and +.Sx \&Sy . .Ss \&Bk +Begins a keep block, containing a collection of macros or text +to be kept together in the output. +One argument is required; additional arguments are ignored. +Currently, the only argument implemented is +.Fl words , +requesting to keep together all words of the contained text +on the same output line. +A +.Fl lines +argument to keep together all lines of the contained text +on the same page has been desired for a long time, +but has never been implemented. +.Pp +Examples: +.Bd -literal -offset indent +\&.Bk \-words +\&.Op o Ar output_file +\&.Ek +.Ed +.Pp +See also +.Sx \&Ek . .Ss \&Bl Begins a list composed of one or more list entries. A list is associated with a type, which is a required argument. @@ -1129,22 +1233,18 @@ macro. These dictate the width of columns either as .Sx Scaling Widths or literal text. -List entry bodies must be left empty. -Column bodies have the following syntax: -.Pp -.D1 .It col1 ... coln -.D1 .It col1 Ta ... coln -.D1 .It col1 col2 Ta coln -.Pp -where columns may be separated by tabs, the literal string -.Qq Ta , -or a mixture of both. -These are equivalent except that quoted sections propogate over tabs, -for example, -.Pp -.D1 .It \(dqcol1 ; col2 ;\(dq ; -.Pp -will preserve the semicolon whitespace except for the last. +If the initial macro of a +.Fl column +list is not an +.Sx \&It , +an +.Sx \&It +context spanning each line is implied until an +.Sx \&It +line macro is encountered, at which point list bodies are interpreted as +described in the +.Sx \&It +documentation. .It Fl dash A list offset by a dash (hyphen). The head of list entries must be empty. @@ -1199,6 +1299,9 @@ after the head as specified by the .Fl width argument. .El +.Pp +See also +.Sx \&It . .Ss \&Bo Begins a block enclosed by square brackets. Does not have any head arguments. @@ -1326,6 +1429,11 @@ See also and .Sx \&Dl . .Ss \&Db +Start a debugging context. +This macro is parsed, but generally ignored. +Its syntax is as follows: +.Pp +.D1 Pf \. Sx \&Db Cm on | off .Ss \&Dc Closes a .Sx \&Do @@ -1335,9 +1443,9 @@ Document date. This is the mandatory first macro of any .Nm manual. -Its calling syntax is as follows: +Its syntax is as follows: .Pp -.D1 \. Ns Sx \&Dd Cm date +.D1 Pf \. Sx \&Dd Cm date .Pp The .Cm date @@ -1396,15 +1504,25 @@ Document title. This is the mandatory second macro of any .Nm file. -Its calling syntax is as follows: +Its syntax is as follows: +.Bd -ragged -offset indent +.Pf \. Sx \&Dt +.Oo +.Cm title +.Oo +.Cm section +.Op Cm volume | arch +.Oc +.Oc +.Ed .Pp -.D1 \. Ns Sx \&Dt Cm title section Op Cm volume | arch -.Pp Its arguments are as follows: .Bl -tag -width Ds -offset Ds .It Cm title -The document's title (name). -This should be capitalised and is required. +The document's title (name), defaulting to +.Qq UNKNOWN +if unspecified. +It should be capitalised. .It Cm section The manual section. This may be one of @@ -1441,8 +1559,9 @@ This may be one of or .Ar paper .Pq paper . -It is also required and should correspond to the manual's filename -suffix. +It should correspond to the manual's filename suffix and defaults to +.Qq 1 +if unspecified. .It Cm volume This overrides the volume inferred from .Ar section . @@ -1514,7 +1633,6 @@ Examples: .D1 \&.Dt FOO 1 .D1 \&.Dt FOO 4 KM .D1 \&.Dt FOO 9 i386 -.D1 \&.Dt FOO 9 KM i386 .Pp See also .Sx \&Dd @@ -1549,8 +1667,19 @@ and .Ss \&Ec .Ss \&Ed .Ss \&Ef +Ends a font mode context started by +.Sx \&Bf . .Ss \&Ek +Ends a keep context started by +.Sx \&Bk . .Ss \&El +Ends a list context started by +.Sx \&Bl . +.Pp +See also +.Sx \&Bl +and +.Sx \&It . .Ss \&Em Denotes text that should be emphasised. Note that this is a presentation term and should not be used for @@ -1590,8 +1719,47 @@ is not provided, the document's name as stipulated in .Sx \&Nm is provided. .Ss \&Fa +Function argument. +Its syntax is as follows: +.Bd -ragged -offset indent +.Pf \. Sx \&Fa +.Op Cm argtype +.Cm argname +.Ed +.Pp +This may be invoked for names with or without the corresponding type. +It is also used to specify the field name of a structure. +Most often, the +.Sx \&Fa +macro is used in the +.Em SYNOPSIS +within +.Sx \&Fo +section when documenting multi-line function prototypes. +If invoked with multiple arguments, the arguments are separated by a +comma. +Furthermore, if the following macro is another +.Sx \&Fa , +the last argument will also have a trailing comma. +.Pp +Examples: +.D1 \&.Fa \(dqconst char *p\(dq +.D1 \&.Fa \(dqint a\(dq \(dqint b\(dq \(dqint c\(dq +.D1 \&.Fa foo +.Pp +See also +.Sx \&Fo . .Ss \&Fc .Ss \&Fd +Historically used to document include files. +This usage has been deprecated in favour of +.Sx \&In . +Do not use this macro. +.Pp +See also +.Sx MANUAL STRUCTURE +and +.Sx \&In . .Ss \&Fl Command-line flag. Used when listing arguments to command-line utilities. @@ -1611,9 +1779,80 @@ Examples: See also .Sx \&Cm . .Ss \&Fn +A function name. +Its syntax is as follows: +.Bd -ragged -offset indent +.Pf \. Ns Sx \&Fn +.Op Cm functype +.Cm funcname +.Op Oo Cm argtype Oc Cm argname +.Ed +.Pp +Function arguments are surrounded in parenthesis and +are delimited by commas. +If no arguments are specified, blank parenthesis are output. +.Pp +Examples: +.D1 \&.Fn "int funcname" "int arg0" "int arg1" +.D1 \&.Fn funcname "int arg0" +.D1 \&.Fn funcname arg0 +.Bd -literal -offset indent -compact +\&.Ft functype +\&.Fn funcname +.Ed +.Pp +See also +.Sx MANUAL STRUCTURE +and +.Sx \&Ft . .Ss \&Fo -.Ss \&Fr +Begin a function block. +This is a multi-line version of +.Sx \&Fn . +Its syntax is as follows: +.Pp +.D1 Pf \. Sx \&Fo Cm funcname +.Pp +Invocations usually occur in the following context: +.Bd -ragged -offset indent +.Pf \. Sx \&Ft Cm functype +.br +.Pf \. Sx \&Fo Cm funcname +.br +.Pf \. Sx \&Fa Oo Cm argtype Oc Cm argname +.br +\.\.\. +.br +.Pf \. Sx \&Fc +.Ed +.Pp +A +.Sx \&Fo +scope is closed by +.Pp +See also +.Sx MANUAL STRUCTURE , +.Sx \&Fa , +.Sx \&Fc , +and .Ss \&Ft +A function type. +Its syntax is as follows: +.Pp +.D1 Pf \. Sx \&Ft Cm functype +.Pp +Examples: +.D1 \&.Ft int +.Bd -literal -offset indent -compact +\&.Ft functype +\&.Fn funcname +.Ed +.Pp +See also +.Sx MANUAL STRUCTURE , +.Sx \&Fn , +and +.Sx \&Fo . .Ss \&Fx Format the FreeBSD version provided as an argument, or a default value if no argument is provided. @@ -1634,14 +1873,132 @@ and .Ss \&Hf .Ss \&Ic .Ss \&In +An +.Qq include +file. +In the +.Em SYNOPSIS +section (only if invoked as the line macro), the first argument is +preceded by +.Qq #include , +the arguments is enclosed in angled braces. +.Pp +Examples: +.D1 \&.In sys/types +.Pp +See also +.Sx MANUAL STRUCTURE . .Ss \&It +A list item. +The syntax of this macro depends on the list type. +.Pp +Lists +of type +.Fl hang , +.Fl ohang , +.Fl inset , +and +.Fl diag +have the following syntax: +.Pp +.D1 Pf \. Sx \&It Cm args +.Pp +Lists of type +.Fl bullet , +.Fl dash , +.Fl enum , +.Fl hyphen +and +.Fl item +have the following syntax: +.Pp +.D1 Pf \. Sx \&It +.Pp +with subsequent lines interpreted within the scope of the +.Sx \&It +until either a closing +.Sx \&El +or another +.Sx \&It . +.Pp +The +.Fl tag +list has the following syntax: +.Pp +.D1 Pf \. Sx \&It Op Cm args +.Pp +Subsequent lines are interpreted as with +.Fl bullet +and family. +The line arguments correspond to the list's left-hand side; body +arguments correspond to the list's contents. +.Pp +The +.Fl column +list is the most complicated. +Its syntax is as follows: +.Pp +.D1 Pf \. Sx \&It Op Cm args +.Pp +The +.Cm args +are phrases, a mix of macros and text corresponding to a line column, +delimited by tabs or the special +.Sq \&Ta +pseudo-macro. +Lines subsequent the +.Sx \&It +are interpreted within the scope of the last phrase. +Calling the pseudo-macro +.Sq \&Ta +will open a new phrase scope (this must occur on a macro line to be +interpreted as a macro). Note that the tab phrase delimiter may only be +used within the +.Sx \&It +line itself. +Subsequent this, only the +.Sq \&Ta +pseudo-macro may be used to delimit phrases. +Furthermore, note that quoted sections propagate over tab-delimited +phrases on an +.Sx \&It , +for example, +.Pp +.D1 .It \(dqcol1 ; col2 ;\(dq \&; +.Pp +will preserve the semicolon whitespace except for the last. +.Pp +See also +.Sx \&Bl . .Ss \&Lb +Specify a library. +The syntax is as follows: +.Pp +.D1 Pf \. Sx \&Lb Cm library +.Pp +The +.Cm library +parameter may be a system library, such as +.Cm libz +or +.Cm libpam , +in which case a small library description is printed next to the linker +invocation; or a custom library, in which case the library name is +printed in quotes. +This is most commonly used in the +.Em SYNOPSIS +section as described in +.Sx MANUAL STRUCTURE . +.Pp +Examples: +.D1 \&.Lb libz +.D1 \&.Lb mdoc .Ss \&Li .Ss \&Lk Format a hyperlink. -The calling syntax is as follows: +Its syntax is as follows: .Pp -.D1 \. Ns Sx \&Lk Cm uri Op Cm name +.D1 Pf \. Sx \&Lk Cm uri Op Cm name .Pp Examples: .D1 \&.Lk http://bsd.lv "The BSD.lv Project" @@ -1652,8 +2009,53 @@ See also .Ss \&Lp .Ss \&Ms .Ss \&Mt +Format a +.Qq mailto: +hyperlink. +Its syntax is as follows: +.Pp +.D1 Pf \. Sx \&Mt Cm address +.Pp +Examples: +.D1 \&.Mt discuss@manpages.bsd.lv .Ss \&Nd .Ss \&Nm +The name of the manual page, or \(em in particular in section 1, 6, +and 8 pages \(em of an additional command or feature documented in +the manual page. +When first invoked, the +.Sx \&Nm +macro expects a single argument, the name of the manual page. +Usually, the first invocation happens in the +.Em NAME +section of the page. +The specified name will be remembered and used whenever the macro is +called again without arguments later in the page. +The +.Sx \&Nm +macro uses +.Sx Block full-implicit +semantics when invoked as the first macro on an input line in the +.Em SYNOPSIS +section; otherwise, it uses ordinary +.Sx In-line +semantics. +.Pp +Examples: +.Bd -literal -offset indent +\&.Sh SYNOPSIS +\&.Nm cat +\&.Op Fl benstuv +\&.Op Ar +.Ed +.Pp +In the +.Em SYNOPSIS +of section 2, 3 and 9 manual pages, use the +.Sx \&Fn +macro rather than +.Sx \&Nm +to mark up the name of the manual page. .Ss \&No .Ss \&Ns .Ss \&Nx @@ -1681,9 +2083,10 @@ Document operating system version. This is the mandatory third macro of any .Nm -file. Its calling syntax is as follows: +file. +Its syntax is as follows: .Pp -.D1 \. Ns Sx \&Os Op Cm system +.D1 Pf \. Sx \&Os Op Cm system .Pp The optional .Cm system @@ -1755,6 +2158,7 @@ The block macro may only contain .Sx \&%Q , .Sx \&%R , .Sx \&%T , +.Sx \&%U , and .Sx \&%V child macros (at least one must be specified). @@ -1788,6 +2192,8 @@ line. .Ss \&Sy .Ss \&Tn .Ss \&Ud +Prints out +.Dq currently under development. .Ss \&Ux Format the UNIX name. Accepts no argument. @@ -1807,12 +2213,14 @@ and .Ss \&Va .Ss \&Vt A variable type. -This is also used for indicating global variables in the SYNOPSIS +This is also used for indicating global variables in the +.Em SYNOPSIS section, in which case a variable name is also specified. Note that it accepts .Sx Block partial-implicit -syntax when invoked as the first macro in the SYNOPSIS section, else it -accepts ordinary +syntax when invoked as the first macro in the +.Em SYNOPSIS +section, else it accepts ordinary .Sx In-line syntax. .Pp @@ -1822,10 +2230,10 @@ which is used for function return types. .Pp Examples: .D1 \&.Vt unsigned char -.D1 \&.Vt extern const char * const sys_signame[] ; +.D1 \&.Vt extern const char * const sys_signame[] \&; .Pp See also -.Sx \&Ft +.Sx MANUAL STRUCTURE and .Sx \&Va . .Ss \&Xc @@ -1838,9 +2246,9 @@ since this limit has been lifted, the macro has been d .Ss \&Xr Link to another manual .Pq Qq cross-reference . -Its calling syntax is +Its syntax is as follows: .Pp -.D1 \. Ns Sx \&Xr Cm name section +.D1 Pf \. Sx \&Xr Cm name section .Pp The .Cm name @@ -1857,7 +2265,7 @@ This behaviour is for compatibility with .Pp Examples: .D1 \&.Xr mandoc 1 -.D1 \&.Xr mandoc 1 ; +.D1 \&.Xr mandoc 1 \&; .D1 \&.Xr mandoc 1 \&Ns s behaviour .Ss \&br .Ss \&sp @@ -1877,6 +2285,52 @@ Heirloom troff, the other significant troff implementa .Pp .Bl -dash -compact .It +Old groff fails to assert a newline before +.Sx \&Bd Fl ragged compact . +.It +groff behaves inconsistently when encountering +.Pf non- Sx \&Fa +children of +.Sx \&Fo +regarding spacing between arguments. +In mandoc, this is not the case: each argument is consistently followed +by a single space and the trailing +.Sq \&) +suppresses prior spacing. +.It +groff behaves inconsistently when encountering +.Sx \&Ft +and +.Sx \&Fn +in the +.Em SYNOPSIS : +at times newline(s) are suppressed depending on whether a prior +.Sx \&Fn +has been invoked. +In mandoc, this is not the case. +See +.Sx \&Ft +and +.Sx \&Fn +for the normalised behaviour. +.It +Historic groff does not break before an +.Sx \&Fn +when not invoked as the line macro in the +.Em SYNOPSIS +section. +.It +Historic groff formats the +.Sx \&In +badly: trailing arguments are trashed and +.Em SYNOPSIS +is not specially treated. +.It +groff does not accept the +.Sq \&Ta +pseudo-macro as a line macro. +mandoc does. +.It The comment syntax .Sq \e." is no longer accepted. @@ -1908,16 +2362,15 @@ In quoted literals, groff allowed pair-wise double-quo standalone double-quote in formatted output. This idiosyncratic behaviour is not applicable in mandoc. .It -Display types +Display offsets .Sx \&Bd -.Fl center +.Fl offset Ar center and -.Fl right -are aliases for -.Fl left -in manodc. Furthermore, the +.Fl offset Ar right +are disregarded in mandoc. +Furthermore, the .Fl file Ar file -argument is ignored. +argument is not supported in mandoc. Lastly, since text is not right-justified in mandoc (or even groff), .Fl ragged and @@ -1949,15 +2402,11 @@ delimiter to render. This is not supported in mandoc. .It In groff, the -.Sx \&Fo -macro only produces the first parameter. -This is not the case in mandoc. -.It -In groff, the .Sx \&Cd , .Sx \&Er , +.Sx \&Ex , and -.Sx \&Ex +.Sx \&Rv macros were stipulated only to occur in certain manual sections. mandoc does not have these restrictions. .It