=================================================================== RCS file: /cvs/mandoc/roff.7,v retrieving revision 1.47 retrieving revision 1.56 diff -u -p -r1.47 -r1.56 --- mandoc/roff.7 2014/02/14 23:50:57 1.47 +++ mandoc/roff.7 2014/08/13 20:34:29 1.56 @@ -1,4 +1,4 @@ -.\" $Id: roff.7,v 1.47 2014/02/14 23:50:57 schwarze Exp $ +.\" $Id: roff.7,v 1.56 2014/08/13 20:34:29 kristaps Exp $ .\" .\" Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons .\" Copyright (c) 2010, 2011, 2013, 2014 Ingo Schwarze @@ -15,7 +15,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: February 14 2014 $ +.Dd $Mdocdate: August 13 2014 $ .Dt ROFF 7 .Os .Sh NAME @@ -239,8 +239,9 @@ pica (~1/6 inch) .It p point (~1/72 inch) .It f -synonym for +scale .Sq u +by 65536 .It v default vertical span .It m @@ -254,7 +255,7 @@ width of rendered .Pq en character .It u -default horizontal span +default horizontal span for the terminal .It M mini-em (~1/100 em) .El @@ -262,7 +263,6 @@ mini-em (~1/100 em) Using anything other than .Sq m , .Sq n , -.Sq u , or .Sq v is necessarily non-portable across output media. @@ -409,24 +409,21 @@ and the number of arguments is not checked. Append to a macro definition. The syntax of this request is the same as that of .Sx \&de . -It is currently ignored by -.Xr mandoc 1 , -as are its children. .Ss \&ami Append to a macro definition, specifying the macro name indirectly. The syntax of this request is the same as that of .Sx \&dei . -It is currently ignored by -.Xr mandoc 1 , -as are its children. .Ss \&am1 Append to a macro definition, switching roff compatibility mode off during macro execution. The syntax of this request is the same as that of .Sx \&de1 . -It is currently ignored by -.Xr mandoc 1 , -as are its children. +Since +.Xr mandoc 1 +does not implement +.Nm +compatibility mode at all, it handles this request as an alias for +.Sx \&am . .Ss \&as Append to a user-defined string. The syntax of this request is the same as that of @@ -554,9 +551,13 @@ Define a macro, specifying the macro name indirectly. The syntax of this request is the same as that of .Sx \&de . -It is currently ignored by -.Xr mandoc 1 , -as are its children. +The request +.Pp +.D1 Pf . Cm \&dei Ar name Op Ar end +.Pp +has the same effect as: +.Pp +.D1 Pf . Cm \&de No \e* Ns Bo Ar name Bc Op \e* Ns Bq Ar end .Ss \&de1 Define a .Nm @@ -659,6 +660,34 @@ This line-scoped request is intended to have one argum the font family to be selected. It is a groff extension, and currently, it is ignored including its arguments, and the number of arguments is not checked. +.Ss \&ft +Change the font. +Its syntax is as follows: +.Pp +.D1 Pf . Cm \&ft Op Ar font +.Pp +The following +.Ar font +arguments are supported: +.Bl -tag -width 4n -offset indent +.It Cm B , BI , 3 , 4 +switches to +.Sy bold +font +.It Cm I , 2 +switches to +.Em underlined +font +.It Cm R , CW , 1 +switches to normal font +.It Cm P No "or no argument" +switches back to the previous font +.El +.Pp +This request takes effect only locally, may be overridden by macros +and escape sequences, and is only supported in +.Xr man 7 +for now. .Ss \&hw Specify hyphenation points in words. This line-scoped request is currently ignored. @@ -677,10 +706,67 @@ Its syntax is equivalent to .Sx \&if . .Ss \&if Begins a conditional. -Right now, the conditional evaluates to true -if and only if it starts with the letter -.Sy n , -indicating processing in nroff style as opposed to troff style. +This request has the following syntax: +.Bd -literal -offset indent +\&.if COND BODY +.Ed +.Bd -literal -offset indent +\&.if COND \e{BODY +BODY...\e} +.Ed +.Bd -literal -offset indent +\&.if COND \e{\e +BODY... +\&.\e} +.Ed +.Pp +COND is a conditional statement. +Currently, +.Xr mandoc 1 +supports the following subset of roff conditionals: +.Bl -bullet +.It +If +.Sq \&! +is prefixed to COND, the condition is logically inverted. +.It +If the first character of COND is +.Sq n +.Pq nroff mode +or +.Sq o +.Pq odd page , +COND evaluates to true. +.It +If the first character of COND is +.Sq c +.Pq character available , +.Sq d +.Pq string defined , +.Sq e +.Pq even page , +.Sq r +.Pq register accessed , +or +.Sq t +.Pq troff mode , +COND evaluates to false. +.It +If COND starts with a parenthesis or with an optionally signed +integer number, it is evaluated according to the rules of +.Sx Numerical expressions +explained below. +It evaluates to true if the the result is positive, +or to false if the result is zero or negative. +.It +Otherwise, the first character of COND is regarded as a delimiter +and COND evaluates to true if the string extending from its first +to its second occurrence is equal to the string extending from its +second to its third occurrence. +.It +If COND cannot be parsed, it evaluates to false. +.El +.Pp If a conditional is false, its children are not processed, but are syntactically interpreted to preserve the integrity of the input document. @@ -698,44 +784,12 @@ will continue to syntactically interpret to the block conditional. Sub-conditionals, in this case, obviously inherit the truth value of the parent. -This request has the following syntax: -.Bd -literal -offset indent -\&.if COND \e{\e -BODY... -\&.\e} -.Ed -.Bd -literal -offset indent -\&.if COND \e{ BODY -BODY... \e} -.Ed -.Bd -literal -offset indent -\&.if COND \e{ BODY -BODY... -\&.\e} -.Ed -.Bd -literal -offset indent -\&.if COND \e -BODY -.Ed .Pp -COND is a conditional statement. -roff allows for complicated conditionals; mandoc is much simpler. -At this time, mandoc supports only -.Sq n , -evaluating to true; -and -.Sq t , -.Sq e , -and -.Sq o , -evaluating to false. -All other invocations are read up to the next end of line or space and -evaluate as false. -.Pp If the BODY section is begun by an escaped brace .Sq \e{ , -scope continues until a closing-brace escape sequence -.Sq \.\e} . +scope continues until the end of the input line containing the +matching closing-brace escape sequence +.Sq \e} . If the BODY is not enclosed in braces, scope continues until the end of the line. If the COND is followed by a BODY on the same line, whether after a @@ -815,6 +869,23 @@ Otherwise, it only terminates the and arguments following it or the .Sq \&.. request are discarded. +.Ss \&ll +Change the output line length. +Its syntax is as follows: +.Pp +.D1 Pf . Cm \&ll Op Oo +|- Oc Ns Ar width +.Pp +If the +.Ar width +argument is omitted, the line length is reset to its previous value. +The default setting for terminal output is 78n. +If a sign is given, the line length is added to or subtracted from; +otherwise, it is set to the provided value. +Using this request in new manuals is discouraged for several reasons, +among others because it overrides the +.Xr mandoc 1 +.Fl O Cm width +command line option. .Ss \&ne Declare the need for the specified minimum vertical space before the next trap or the bottom of the page. @@ -822,23 +893,19 @@ This line-scoped request is currently ignored. .Ss \&nh Turn off automatic hyphenation mode. This line-scoped request is currently ignored. -.Ss \&rm -Remove a request, macro or string. -This request is intended to have one argument, -the name of the request, macro or string to be undefined. -Currently, it is ignored including its arguments, -and the number of arguments is not checked. .Ss \&nr Define or change a register. A register is an arbitrary string value that defines some sort of state, which influences parsing and/or formatting. Its syntax is as follows: .Pp -.D1 Pf \. Cm \&nr Ar name Oo +|- Oc Ns Ar value +.D1 Pf \. Cm \&nr Ar name Oo +|- Oc Ns Ar expression .Pp -The -.Ar value -may, at the moment, only be an integer. +For the syntax of +.Ar expression , +see +.Sx Numerical expressions +below. If it is prefixed by a sign, the register will be incremented or decremented instead of assigned to. .Pp @@ -873,6 +940,16 @@ Change point size. This line-scoped request is intended to take one numerical argument. Currently, it is ignored including its arguments, and the number of arguments is not checked. +.Ss \&rm +Remove a request, macro or string. +Its syntax is as follows: +.Pp +.D1 Pf \. Cm \&rm Ar name +.Ss \&rr +Remove a register. +Its syntax is as follows: +.Pp +.D1 Pf \. Cm \&rr Ar name .Ss \&so Include a source file. Its syntax is as follows: @@ -941,6 +1018,73 @@ Begin a table, which formats input in aligned rows and See .Xr tbl 7 for a description of the tbl language. +.Ss Numerical expressions +The +.Sx \&nr , +.Sx \&if , +and +.Sx \&ie +requests accept integer numerical expressions as arguments. +These are always evaluated using the C +.Vt int +type; integer overflow works the same way as in the C language. +Numbers consist of an arbitrary number of digits +.Sq 0 +to +.Sq 9 +prefixed by an optional sign +.Sq + +or +.Sq - . +.Pp +The following binary operators are implemented. +Unless otherwise stated, they behave as in the C language: +.Pp +.Bl -tag -width 2n -compact +.It Ic + +addition +.It Ic - +subtraction +.It Ic * +multiplication +.It Ic / +division +.It Ic % +remainder of division +.It Ic < +less than +.It Ic > +greater than +.It Ic == +equal to +.It Ic = +equal to, same effect as +.Ic == +(this differs from C) +.It Ic <= +less than or equal to +.It Ic >= +greater than or equal to +.It Ic <> +not equal to (corresponds to C +.Ic != ; +this one is of limited portability, it is supported by Heirloom roff, +but not by groff) +.It Ic & +logical and (corresponds to C +.Ic && ) +.It Ic \&: +logical or (corresponds to C +.Ic \&|| ) +.It Ic ? +maximum (not available in C) +.El +.Pp +There is no concept of precendence; evaluation proceeds from left to right, +except when subexpressions are enclosed in parantheses. +Inside parentheses, whitespace is ignored. .Sh ESCAPE SEQUENCE REFERENCE The .Xr mandoc 1 @@ -1029,10 +1173,15 @@ Digit width space character. Anchor definition; ignored by .Xr mandoc 1 . .Ss \eB\(aq Ns Ar string Ns \(aq -Test whether +Interpolate +.Sq 1 +if .Ar string -is a numerical expession; ignored by -.Xr mandoc 1 . +conforms to the syntax of +.Sx Numerical expressions +explained above and +.Sq 0 +otherwise. .Ss \eb\(aq Ns Ar string Ns \(aq Bracket building function; ignored by .Xr mandoc 1 . @@ -1156,9 +1305,13 @@ Vertical motion; ignored by .Xr mandoc 1 . .Ss \ew\(aq Ns Ar string Ns \(aq Interpolate the width of the -.Ar string ; -ignored by -.Xr mandoc 1 . +.Ar string . +The +.Xr mandoc 1 +implementation assumes that after expansion of user-defined strings, the +.Ar string +only contains normal characters, no escape sequences, and that each +character has a width of 24 basic units. .Ss \eX\(aq Ns Ar string Ns \(aq Output .Ar string @@ -1194,6 +1347,12 @@ The term refers to groff version 1.15. .Pp .Bl -dash -compact +.It +The +.Sq u +scaling unit is the default terminal unit. +In traditional troff systems, this unit would change depending on the +output media. .It In mandoc, the .Sx \&EQ ,