diff options
Diffstat (limited to 'upstream/opensuse-leap-15-6/man5/groff_out.5')
-rw-r--r-- | upstream/opensuse-leap-15-6/man5/groff_out.5 | 2006 |
1 files changed, 2006 insertions, 0 deletions
diff --git a/upstream/opensuse-leap-15-6/man5/groff_out.5 b/upstream/opensuse-leap-15-6/man5/groff_out.5 new file mode 100644 index 00000000..51493eb7 --- /dev/null +++ b/upstream/opensuse-leap-15-6/man5/groff_out.5 @@ -0,0 +1,2006 @@ +'\" e +.TH GROFF_OUT 5 "7 February 2022" "groff 1.22.4" +.SH NAME +groff_out \- groff intermediate output format +. +.\" groff_out(5): +.\" Source file position: <groff_source>/man/groff_out.man +.\" Installed position: <prefix>/share/man/man5/groff_out.5 +. +. +.\" Save and disable compatibility mode (for, e.g., Solaris 10/11). +.do nr groff_out_C \n[.C] +.cp 0 +. +. +.\" ==================================================================== +.\" Legal Terms +.\" ==================================================================== +.\" +.\" Copyright (C) 1989-2018 Free Software Foundation, Inc. +.\" +.\" This file is part of groff, the GNU roff type-setting system. +.\" +.\" Permission is granted to copy, distribute and/or modify this +.\" document under the terms of the GNU Free Documentation License, +.\" Version 1.3 or any later version published by the Free Software +.\" Foundation; with no Invariant Sections, with no Front-Cover Texts, +.\" and with no Back-Cover Texts. +.\" +.\" A copy of the Free Documentation License is included as a file +.\" called FDL in the main directory of the groff source package. +. +. +.\" ==================================================================== +.\" Setup +.\" ==================================================================== +. +.\" ================= Document configuration +. +.\" Number register to decide whether the commands '{' and '}' are used +.\" 0: disable (actual default); 1: enable +.nr @USE_ENV_STACK 0 +. +.ig +Unfortunately, old versions of groff used an illogical position change +after some D\~commands (Dp, DP, Dt). If the number register +@STUPID_DRAWING_POSITIONING is 1 (actual default) then change position +after these commands, otherwise the position is not changed. +.. +.nr @STUPID_DRAWING_POSITIONING 1 +. +.\" ================= Semantical definitions +. +.nr @maxcolor 65536 +.ds @backslash \[rs]\" +.ds @linebreak \fR\[la]line-break\[ra]\fP\" +. +.\" Begin of macro definitions +. +.de offset +.RI ( \,\\$1\/ ,\ \,\\$2\/ )\\$3 +.. +.de indexed_offset +.offset \fI\\$1\/\fP\d\s-3\\$2\s+3\u\x'\n[.v]/4' \fI\\$3\/\fP\ +\d\s-3\\$4\s+3\u\x'\n[.v]/4' \\$5\x'\n[.v]/4' +.. +.\" format: .command <name> "<arguments>" <punctuation> +.de command +\fB\\$1\fP\ \fI\,\\$2\/\fP\\$3 +.. +.\" format: .D-command <subcommand> "<arguments>" +.de D-command +\fBD\\$1\fP\ \fI\,\\$2\/\fP\|\*[@linebreak] +.. +. +.\" We set these as troff micromotions rather than eqn because \d and \u +.\" can be lifted to XML subscript/superscript tags. Don't change +.\" these to a parameterized string, man2html won't handle that. +.ds hv1 \fIh\d\s-3\&1\s+3\u\~v\d\s-3\&1\s+3\u\fP\x'\n[.v]/4' +.ds hv2 \fIh\d\s-3\&2\s+3\u\~v\d\s-3\&2\s+3\u\fP\x'\n[.v]/4' +.ds hvn \fIh\d\s-3\&n\s+3\u\~v\d\s-3\&n\s+3\u\fP\x'\n[.v]/4' +. +.de Da-command +\fBDa\fP\ \*[hv1] \*[hv2]\|\*[@linebreak] +.. +.\" graphics command .D with a variable number of arguments +.\" format: .D-multiarg <subcommand> +.de D-multiarg +\fBD\\$1\fP\ \*[hv1] \*[hv2] .\|.\|. \*[hvn]\|\*[@linebreak] +.. +.\" format: .x-command <subname> "<arguments>" +.de x-command +\fBx\\$1\fP\ \fI\\$2\fP\|\*[@linebreak] +.. +.de xsub +.RI "(" "\\$1" " control command)" +.br +.. +.\" End of macro definitions +. +. +.\" ==================================================================== +.SH DESCRIPTION +.\" ==================================================================== +. +This manual page describes the +.I intermediate output +format of the GNU +.BR roff (7) +text processing system +.BR groff (1). +. +This output is produced by a run of the GNU +.BR troff (1) +program. +. +It contains already all device-specific information, but it is not yet +fed into a device postprocessor program. +. +. +.P +As the GNU +.I roff +processor +.BR groff (1) +is a wrapper program around +.B troff +that automatically calls a +postprocessor, this output does not show up normally. +. +This is why it is called +.I intermediate +within the +.I groff +.IR system . +. +The +.B groff +program provides the option +.B \-Z +to inhibit postprocessing, such that the produced +.I intermediate output +is sent to standard output just like calling +.B troff +manually. +. +. +.P +In this document, the term +.I troff output +describes what is output by the GNU +.B troff +program, while +.I intermediate output +refers to the language that is accepted by the parser that prepares +this output for the postprocessors. +. +This parser is smarter on whitespace and implements obsolete elements +for compatibility, otherwise both formats are the same. +. +Both formats can be viewed directly with +.BR \%gxditview (1). +. +. +.P +The main purpose of the +.I intermediate output +concept is to facilitate the development of postprocessors by +providing a common programming interface for all devices. +. +It has a language of its own that is completely different from the +.BR groff (7) +language. +. +While the +.I groff +language is a high-level programming language for text processing, the +.I intermediate output +language is a kind of low-level assembler language by specifying all +positions on the page for writing and drawing. +. +. +.P +The +.RI pre- groff +.I roff +versions are denoted as +.I classical +.IR troff . +The +.I intermediate output +produced by +.B groff +is fairly readable, while +.I classical troff +output was hard to understand because of strange habits that are +still supported, but not used any longer by +.I GNU +.IR troff . +. +. +.\" ==================================================================== +.SH "LANGUAGE CONCEPTS" +.\" ==================================================================== +. +During the run of +.BR troff , +the +.I roff +input is cracked down to the information on what has to be printed at +what position on the intended device. +. +So the language of the +.I intermediate output +format can be quite small. +. +Its only elements are commands with or without arguments. +. +In this document, the term \[lq]command\[rq] always refers to the +.I intermediate output +language, never to the +.I roff +language used for document formatting. +. +There are commands for positioning and text writing, for drawing, and +for device controlling. +. +. +.\" ==================================================================== +.SS "Separation" +.\" ==================================================================== +. +.I Classical troff output +had strange requirements on whitespace. +. +The +.B groff +output parser, however, is smart about whitespace by making it +maximally optional. +. +The whitespace characters, i.e., the +.IR tab , +.IR space , +and +.I newline +characters, always have a syntactical meaning. +. +They are never printable because spacing within the output is always +done by positioning commands. +. +. +.P +Any sequence of +.I space +or +.I tab +characters is treated as a single +.I syntactical +.IR space . +. +It separates commands and arguments, but is only required when there +would occur a clashing between the command code and the arguments +without the space. +. +Most often, this happens when variable length command names, +arguments, argument lists, or command clusters meet. +. +Commands and arguments with a known, fixed length need not be +separated by +.I syntactical +.IR space . +. +. +.P +A line break is a syntactical element, too. +. +Every command argument can be followed by whitespace, a comment, or a +newline character. +. +Thus a +.I syntactical line break +is defined to consist of optional +.I syntactical space +that is optionally followed by a comment, and a newline character. +. +. +.P +The normal commands, those for positioning and text, consist of a +single letter taking a fixed number of arguments. +. +For historical reasons, the parser allows stacking of such commands on +the same line, but fortunately, in +.I groff intermediate +.IR output , +every command with at least one argument is followed by a line break, +thus providing excellent readability. +. +.P +The other commands \[em] those for drawing and device controlling \[em] +have a more complicated structure; some recognize long command names, +and some take a variable number of arguments. +. +So all +.B D +and +.B x +commands were designed to request a +.I syntactical line break +after their last argument. +. +Only one command, +.RB \[oq] x\ X \[cq] +has an argument that can stretch over several lines, all other +commands must have all of their arguments on the same line as the +command, i.e., the arguments may not be split by a line break. +. +.P +Empty lines, i.e., lines containing only space and/or a comment, can +occur everywhere. +. +They are just ignored. +. +. +.\" ==================================================================== +.SS "Argument Units" +.\" ==================================================================== +. +Some commands take integer arguments that are assumed to represent +values in a measurement unit, but the letter for the corresponding +.I scale indicator +is not written with the output command arguments; +see +.BR groff (7) +and +.IR "Groff: The GNU Implementation of troff" , +the +.I groff +Texinfo manual, +for more on this topic. +. +Most commands assume the scale indicator\~\c +.BR u , +the basic unit of the device, some use\~\c +.BR z , +the +.I scaled point unit +of the device, while others, such as the color commands expect plain +integers. +. +Note that these scale indicators are relative to the chosen device. +. +They are defined by the parameters specified in the device's +.I DESC +file; see +.BR groff_font (5). +. +. +.P +Note that single characters can have the eighth bit set, as can the +names of fonts and special characters (this is, glyphs). +. +The names of glyphs and fonts can be of arbitrary length. +. +A glyph that is to be printed will always be in the current font. +. +. +.P +A string argument is always terminated by the next whitespace +character (space, tab, or newline); an embedded +.B # +character is regarded as part of the argument, not as the beginning of +a comment command. +. +An integer argument is already terminated by the next non-digit +character, which then is regarded as the first character of the next +argument or command. +. +. +.\" ==================================================================== +.SS "Document Parts" +.\" ==================================================================== +A correct +.I intermediate output +document consists of two parts, the +.I prologue +and the +.IR body . +. +.P +The task of the +.I prologue +is to set the general device parameters using three exactly specified +commands. +. +The +.I groff prologue +is guaranteed to consist of the following three lines (in that order): +.RS +.P +.B x\ T +.I device +.br +.B x\ res +.I n\ h\ v +.br +.B x init +.RE +.P +with the arguments set as outlined in subsection \[lq]Device Control +Commands\[rq] below. +. +However, the parser for the +.I intermediate output +format is able to swallow additional whitespace and comments as well. +. +. +.P +The +.I body +is the main section for processing the document data. +. +Syntactically, it is a sequence of any commands different from the +ones used in the +.IR prologue . +. +Processing is terminated as soon as the first +.B x\ stop +command is encountered; the last line of any +.I groff intermediate output +always contains such a command. +. +. +.P +Semantically, the +.I body +is page oriented. +. +A new page is started by a +.BR p \~command. +. +Positioning, writing, and drawing commands are always done within the +current page, so they cannot occur before the first +.BR p \~command. +. +Absolute positioning (by the +.B H +and +.BR V \~commands) +is done relative to the current page, all other positioning +is done relative to the current location within this page. +. +. +.\" ==================================================================== +.SH "COMMAND REFERENCE" +.\" ==================================================================== +. +This section describes all +.I intermediate output +commands, the classical commands as well as the +.I groff +extensions. +. +. +.\" ==================================================================== +.SS "Comment Command" +.\" ==================================================================== +. +.TP +.BI # anything \[la]end-of-line\[ra] +A comment. +. +Ignore any characters from the +.BR # \~\c +character up to the next newline character. +. +.P +This command is the only possibility for commenting in the +.I intermediate +.IR output . +. +Each comment can be preceded by arbitrary +.I syntactical +.IR space ; +every command can be terminated by a comment. +. +. +.\" ==================================================================== +.SS "Simple Commands" +.\" ==================================================================== +. +The commands in this subsection have a command code consisting of a +single character, taking a fixed number of arguments. +. +Most of them are commands for positioning and text writing. +. +These commands are smart about whitespace. +. +Optionally, +.I syntactical space +can be inserted before, after, and between the command letter and its +arguments. +. +All of these commands are stackable, i.e., they can be preceded by +other simple commands or followed by arbitrary other commands on the +same line. +. +A separating +.I syntactical space +is only necessary when two integer arguments would clash or if the +preceding argument ends with a string argument. +. +. +.if \n[@USE_ENV_STACK]=1 \{\ +.TP +.command { +Open a new environment by copying the actual device configuration data +to the environment stack. +. +The current environment is setup by the device specification and +manipulated by the setting commands. +. +. +.TP +.command } +Close the actual environment (opened by a preceding +.BR { \~command) +and restore the previous environment from the environment +stack as the actual device configuration data. +. +.\} \" endif @USE_ENV_STACK +. +. +.TP +.command C xxx \[la]white-space\[ra] +Print a glyph (special character) named +.IR xxx . +. +The trailing +.I syntactical space +or +.I line break +is necessary to allow glyph names of arbitrary length. +. +The glyph is printed at the current print position; the +glyph's size is read from the font file. +. +The print position is not changed. +. +. +.TP +.command c c +Print glyph with single-letter name\~\c +.I c +at the current print position; +the glyph's size is read from the font file. +. +The print position is not changed. +. +. +.TP +.command f n +Set font to font number\~\c +.I n +(a non-negative integer). +. +. +.TP +.command H n +Move right to the absolute vertical position\~\c +.I n +(a non-negative integer in basic units\~\c +.BR u ) +relative to left edge of current page. +. +. +.TP +.command h n +Move +.I n +(a non-negative integer) basic units\~\c +.B u +horizontally to the right. +. +[CSTR\~#54] +allows negative values for +.I n +also, but +.I groff +doesn't use this. +. +. +.TP +.command m "color-scheme \fR[\fPcomponent .\|.\|.\fR]\fP" +Set the color for text (glyphs), line drawing, and the outline of +graphic objects using different color schemes; the analogous command +for the filling color of graphic objects is +.BR DF . +. +The color components are specified as integer arguments between 0 and +\n[@maxcolor]. +. +The number of color components and their meaning vary for the +different color schemes. +. +These commands are generated by the +.I groff +escape sequence +.BR \*[@backslash]m . +. +No position changing. +. +These commands are a +.I groff +extension. +. +. +.RS +. +.TP +.command mc "cyan magenta yellow" +Set color using the CMY color scheme, having the 3\~color components +cyan, magenta, and yellow. +. +. +.TP +.command md +Set color to the default color value +(black in most cases). +. +No component arguments. +. +. +.TP +.command mg "gray" +Set color to the shade of gray given by the argument, an integer +between 0 (black) and \n[@maxcolor] (white). +. +. +.TP +.command mk "cyan magenta yellow black" +Set color using the CMYK color scheme, having the 4\~color components +cyan, magenta, yellow, and black. +. +.TP +.command mr "red green blue" +Set color using the RGB color scheme, having the 3\~color components +red, green, and blue. +. +.RE +. +. +.TP +.command N n +Print glyph with index\~\c +.I n +(an integer, normally non-negative) of the current font. +. +The print position is not changed. +. +If +.B \-T\~html +or +.B \-T\~xhtml +is used, negative values are emitted also to indicate an unbreakable +space with given width. +. +For example, +.B N\~\-193 +represents an unbreakable space which has a width of 193\|u. +. +This command is a +.I groff +extension. +. +. +.TP +.command n b\ a +Inform the device about a line break, but no positioning is done by +this command. +. +In +.I classical +.IR troff , +the integer arguments +.I b +and\~\c +.I a +informed about the space before and after the current line to +make the +.I intermediate output +more human readable without performing any action. +. +In +.IR groff , +they are just ignored, but they must be provided for compatibility +reasons. +. +. +.TP +.command p n +Begin a new page in the outprint. +. +The page number is set to\~\c +.IR n . +. +This page is completely independent of pages formerly processed even +if those have the same page number. +. +The vertical position on the outprint is automatically set to\~0. +. +All positioning, writing, and drawing is always done relative to a +page, so a +.BR p \~command +must be issued before any of these commands. +. +. +.TP +.command s n +Set point size to +.I n +scaled points +(this is unit\~\c +.B z +in GNU +.BR troff ). +. +.I Classical troff +used the unit +.I points +(\c +.BR p ) +instead; +see section \[lq]Compatibility\[rq] below. +. +. +.TP +.command t xyz\|.\|.\|. \[la]white-space\[ra] +.TQ +.command t "xyz\|.\|.\|.\& dummy-arg" \[la]white-space\[ra] +Print a word, i.e., a sequence of glyphs with single-letter names +.IR x , +.IR y , +.IR z , +etc., terminated by a space character or a line break; an optional +second integer argument is ignored (this allows the formatter to +generate an even number of arguments). +. +The first glyph should be printed at the current position, the +current horizontal position should then be increased by the width of +the first glyph, and so on for each glyph. +. +The widths of the glyph are read from the font file, scaled for the +current point size, and rounded to a multiple of the horizontal +resolution. +. +Special characters (glyphs with names longer than a single letter) +cannot be printed using this command; use the +.B C +command for those glyphs. +. +This command is a +.I groff +extension; it is only used for devices whose +.I DESC +file contains the +.B tcommand +keyword; see +.BR groff_font (5). +. +. +.TP +.command u "n xyz\|.\|.\|." \[la]white-space\[ra] +Print word with track kerning. +. +This is the same as the +.B t +command except that after printing each glyph, the current +horizontal position is increased by the sum of the width of that +glyph and\~\c +.I n +(an integer in +basic units\~\c +.BR u ). +This command is a +.I groff +extension; it is only used for devices whose +.I DESC +file contains the +.B tcommand +keyword; see +.BR groff_font (5). +. +. +.TP +.command V n +Move down to the absolute vertical position\~\c +.I n +(a non-negative integer in basic units\~\c +.BR u ) +relative to upper edge of current page. +. +. +.TP +.command v n +Move +.I n +basic units\~\c +.B u +down +.RI ( n +is a non-negative integer). +. +[CSTR\~#54] +allows negative values for +.I n +also, but +.I groff +doesn't use this. +. +. +.TP +.command w +Informs about a paddable whitespace to increase readability. +. +The spacing itself must be performed explicitly by a move command. +. +. +.\" ==================================================================== +.SS "Graphics Commands" +.\" ==================================================================== +. +Each graphics or drawing command in the +.I intermediate output +starts with the letter\~\c +.B D +followed by one or two characters that specify a subcommand; this +is followed by a fixed or variable number of integer arguments that +are separated by a single space character. +. +A +.BR D \~command +may not be followed by another command on the same line (apart from a +comment), so each +.BR D \~command +is terminated by a +.I syntactical line +.IR break . +. +. +.P +.B troff +output follows the classical spacing rules (no space between command +and subcommand, all arguments are preceded by a single space +character), but the parser allows optional space between the command +letters and makes the space before the first argument optional. +. +As usual, each space can be any sequence of tab and space characters. +. +. +.P +Some graphics commands can take a variable number of arguments. +. +In this case, they are integers representing a size measured in basic +units\~\c +.BR u . +. +The +.I h +arguments +stand for horizontal distances where positive means right, negative +left. +. +The +.I v +arguments +stand for vertical distances where positive means down, negative up. +. +All these distances are offsets relative to the current location. +. +. +.P +Unless indicated otherwise, each graphics command directly corresponds +to a similar +.I groff +.B \*[@backslash]D +escape sequence; see +.BR groff (7). +. +. +.P +Unknown +.BR D \~commands +are assumed to be device-specific. +. +Its arguments are parsed as strings; the whole information is then +sent to the postprocessor. +. +. +.P +In the following command reference, the syntax element +.I \[la]line-break\[ra] +means a +.I syntactical line break +as defined in subsection \[lq]Separation\[rq] above. +. +. +.TP +.D-multiarg \[ti] +Draw B-spline from current position to offset +.indexed_offset h 1 v 1 , +then to offset +.indexed_offset h 2 v 2 +if given, etc., up to +.indexed_offset h n v n . +This command takes a variable number of argument pairs; the current +position is moved to the terminal point of the drawn curve. +. +. +.TP +.Da-command +Draw arc from current position to +.indexed_offset h 1 v 1 \|+\|\c +.indexed_offset h 2 v 2 +with center at +.indexed_offset h 1 v 1 ; +then move the current position to the final point of the arc. +. +. +.TP +.D-command C d +.TQ +.D-command C "d dummy-arg" +Draw a solid circle using the current fill color with diameter\~\c +.I d +(integer in basic units\~\c +.BR u ) +with leftmost point at the current position; then move the current +position to the rightmost point of the circle. +. +An optional second integer argument is ignored (this allows the +formatter to generate an even number of arguments). +. +This command is a +.I groff +extension. +. +. +.TP +.D-command c d +Draw circle line with diameter\~\c +.I d +(integer in basic units\~\c +.BR u ) +with leftmost point at the current position; then move the current +position to the rightmost point of the circle. +. +. +.TP +.D-command E "h v" +Draw a solid ellipse in the current fill color with a horizontal +diameter of\~\c +.I h +and a vertical diameter of\~\c +.I v +(both integers in basic units\~\c +.BR u ) +with the leftmost point at the current position; then move to the +rightmost point of the ellipse. +. +This command is a +.I groff +extension. +. +. +.TP +.D-command e "h v" +Draw an outlined ellipse with a horizontal diameter of\~\c +.I h +and a vertical diameter of\~\c +.I v +(both integers in basic units\~\c +.BR u ) +with the leftmost point at current position; then move to the +rightmost point of the ellipse. +. +. +.TP +.D-command F "color-scheme \fR[\fPcomponent .\|.\|.\fR]\fP" +Set fill color for solid drawing objects using different color +schemes; the analogous command for setting the color of text, line +graphics, and the outline of graphic objects is +.BR m . +. +The color components are specified as integer arguments between 0 and +\n[@maxcolor]. +. +The number of color components and their meaning vary for the +different color schemes. +. +These commands are generated by the +.I groff +escape sequences +.BR \*[@backslash]D'F\ .\|.\|. ' +and +.B \*[@backslash]M +(with no other corresponding graphics commands). +. +No position changing. +. +This command is a +.I groff +extension. +. +. +.RS +. +.TP +.D-command Fc "cyan magenta yellow" +Set fill color for solid drawing objects using the CMY color scheme, +having the 3\~color components cyan, magenta, and yellow. +. +. +.TP +.D-command Fd +Set fill color for solid drawing objects to the default fill color value +(black in most cases). +. +No component arguments. +. +. +.TP +.D-command Fg "gray" +Set fill color for solid drawing objects to the shade of gray given by +the argument, an integer between 0 (black) and \n[@maxcolor] (white). +. +. +.TP +.D-command Fk "cyan magenta yellow black" +Set fill color for solid drawing objects using the CMYK color scheme, +having the 4\~color components cyan, magenta, yellow, and black. +. +.TP +.D-command Fr "red green blue" +Set fill color for solid drawing objects using the RGB color scheme, +having the 3\~color components red, green, and blue. +. +.RE +. +. +.TP +.D-command f n +The argument +.I n +must be an integer in the range \-32767 to 32767. +. +.RS +.TP +.RI 0\|\[<=]\| n \|\[<=]\|1000 +Set the color for filling solid drawing objects to a shade of gray, +where 0 corresponds to solid white, 1000 (the default) to solid black, +and values in between to intermediate shades of gray; this is +obsoleted by command +.BR DFg . +. +.TP +.IR n "\|<\|0 or " n \|>\|1000 +Set the filling color to the color that is currently being used for +the text and the outline, see command +.BR m . +For example, the command sequence +. +.RS +.IP +.EX +mg 0 0 \n[@maxcolor] +Df \-1 +.EE +.RE +. +.IP +sets all colors to blue. +. +.P +No position changing. +. +This command is a +.I groff +extension. +. +.RE +. +. +.TP +.D-command l "h v" +Draw line from current position to offset +.offset h v +(integers in basic units\~\c +.BR u ); +then set current position to the end of the drawn line. +. +. +.TP +.D-multiarg p +Draw a polygon line from current position to offset +.indexed_offset h 1 v 1 , +from there to offset +.indexed_offset h 2 v 2 , +etc., up to offset +.indexed_offset h n v n , +and from there back to the starting position. +. +.ie \n[@STUPID_DRAWING_POSITIONING]=1 \{\ +For historical reasons, the position is changed by adding the sum of +all arguments with odd index to the actual horizontal position and the +even ones to the vertical position. +. +Although this doesn't make sense it is kept for compatibility. +. +.\} +.el \{\ +As the polygon is closed, the end of drawing is the starting point, so +the position doesn't change. +.\} +. +This command is a +.I groff +extension. +. +. +.TP +.D-multiarg P +The same macro as the corresponding +.B Dp +command with the same arguments, but draws a solid polygon in the +current fill color rather than an outlined polygon. +. +.ie \n[@STUPID_DRAWING_POSITIONING]=1 \{\ +The position is changed in the same way as with +.BR Dp . +.\} +.el \ +No position changing. +. +This command is a +.I groff +extension. +. +. +.TP +.D-command t n +Set the current line thickness to\~\c +.I n +(an integer in basic units\~\c +.BR u ) +if +.IR n \|>\|0; +if +.IR n \|=\|0 +select the smallest available line thickness; if +.IR n \|<\|0 +set the line thickness proportional to the point size (this is the +default before the first +.B Dt +command was specified). +. +.ie \n[@STUPID_DRAWING_POSITIONING]=1 \{\ +For historical reasons, the horizontal position is changed by adding +the argument to the actual horizontal position, while the vertical +position is not changed. +. +Although this doesn't make sense it is kept for compatibility. +. +.\} +.el \ +No position changing. +. +This command is a +.I groff +extension. +. +. +.\" ==================================================================== +.SS "Device Control Commands" +.\" ==================================================================== +. +Each device control command starts with the letter +.B x +followed by a space character (optional or arbitrary space/\:tab in +.IR groff ) +and a subcommand letter or word; each argument (if any) must be +preceded by a +.I syntactical +.IR space . +. +All +.B x +commands are terminated by a +.IR "syntactical line break" ; +no device control command can be followed by another command on the same +line (except a comment). +. +.P +The subcommand is basically a single letter, but to increase +readability, it can be written as a word, i.e., an arbitrary sequence +of characters terminated by the next tab, space, or newline character. +. +All characters of the subcommand word but the first are simply ignored. +. +For example, +.B troff +outputs the initialization command +.B x\ i +as +.B x\ init +and the resolution command +.B x\ r +as +.BR "x\ res" . +. +But writings like +.B x\ i_like_groff +and +.B x\ roff_is_groff +are accepted as well to mean the same commands. +. +.P +In the following, the syntax element +.I \[la]line-break\[ra] +means a +.I syntactical line break +as defined in subsection \[lq]Separation\[rq] above. +. +.TP +.x-command F name +.xsub Filename +Use +.I name +as the intended name for the current file in error reports. +. +This is useful for remembering the original file name when +.B groff +uses an internal piping mechanism. +. +The input file is not changed by this command. +. +This command is a +.I groff +extension. +. +. +.TP +.x-command f "n\ s" +.xsub font +Mount font position\~\c +.I n +(a non-negative integer) with font named\~\c +.I s +(a text word); +see +.BR groff_font (5). +. +. +.TP +.x-command H n +.xsub Height +Set character height to\~\c +.I n +(a positive integer in scaled points\~\c +.BR z ). +. +.I Classical troff +used the unit points (\c +.BR p ) +instead; +see section \[lq]Compatibility\[rq] below. +. +. +.TP +.x-command i +.xsub init +Initialize device. +. +This is the third command of the +.IR prologue . +. +. +.TP +.x-command p +.xsub pause +Parsed but ignored. +. +The classical documentation reads +.I pause device, can be +.IR restarted . +. +. +.TP +.x-command r "n\ h\ v" +.xsub resolution +Resolution is\~\c +.IR n , +while +.I h +is the minimal horizontal motion, and +.I v +the minimal vertical motion possible with this device; all arguments +are positive integers in basic units\~\c +.B u +per inch. +. +This is the second command of the +.IR prologue . +. +. +.TP +.x-command S n +.xsub Slant +Set slant to\~\c +.I n +degrees (an integer in basic units\~\c +.BR u ). +. +. +.TP +.x-command s +.xsub stop +Terminates the processing of the current file; issued as the last +command of any +.I intermediate troff +.IR output . +. +. +.TP +.x-command t +.xsub trailer +Generate trailer information, if any. +. +In +.BR groff , +this is actually just ignored. +. +. +.TP +.x-command T xxx +.xsub Typesetter +Set name of device to word +.IR xxx , +a sequence of characters ended by the next whitespace character. +. +The possible device names coincide with those from the groff +.B \-T +option. +. +This is the first command of the +.IR prologue . +. +. +.TP +.x-command u n +.xsub underline +Configure underlining of spaces. +. +If +.I n +is\~1, start underlining of spaces; +if +.I n +is\~0, stop underlining of spaces. +. +This is needed for the +.B cu +request in +.B nroff +mode and is ignored otherwise. +. +This command is a +.I groff +extension. +. +. +.TP +.x-command X anything +.xsub X-escape +Send string +.I anything +uninterpreted to the device. +. +If the line following this command starts with a +.B + +character this line is interpreted as a continuation line in the +following sense. +. +The +.B + +is ignored, but a newline character is sent instead to the device, the +rest of the line is sent uninterpreted. +. +The same applies to all following lines until the first character of a +line is not a +.B + +character. +. +This command is generated by the +.I groff +escape sequence +.BR \*[@backslash]X . +. +The line-continuing feature is a +.I groff +extension. +. +. +.\" ==================================================================== +.SS "Obsolete Command" +.\" ==================================================================== +. +In +.I classical troff +output, emitting a single glyph was mostly done by a very +strange command that combined a horizontal move and the printing of a +glyph. +. +It didn't have a command code, but is represented by a 3-character +argument consisting of exactly 2\~digits and a character. +. +.TP +.I ddc +Move right +.I dd +(exactly two decimal digits) basic units\~\c +.BR u , +then print glyph with single-letter name\~\c +.IR c . +. +. +.RS +.P +In +.IR groff , +arbitrary +.I syntactical space +around and within this command is allowed to be added. +. +Only when a preceding command on the same line ends with an argument +of variable length a separating space is obligatory. +. +In +.I classical +.IR troff , +large clusters of these and other commands were used, mostly without +spaces; this made such output almost unreadable. +. +.RE +. +. +.P +For modern high-resolution devices, this command does not make sense +because the width of the glyphs can become much larger than two +decimal digits. +. +In +.BR groff , +this is only used for the devices +.BR X75 , +.BR X75-12 , +.BR X100 , +and +.BR X100-12 . +. +For other devices, +the commands +.B t +and\~\c +.B u +provide a better functionality. +. +. +.\" ==================================================================== +.SH "POSTPROCESSING" +.\" ==================================================================== +. +The +.I roff +postprocessors are programs that have the task to translate the +.I intermediate output +into actions that are sent to a device. +. +A device can be some piece of hardware such as a printer, or a software +file format suitable for graphical or text processing. +. +The +.I groff +system provides powerful means that make the programming of such +postprocessors an easy task. +.P +There is a library function that parses the +.I intermediate output +and sends the information obtained to the device via methods of a +class with a common interface for each device. +. +So a +.I groff +postprocessor must only redefine the methods of this class. +. +For details, +see the reference in section \[lq]Files\[rq] below. +. +. +.\" ==================================================================== +.SH "EXAMPLES" +.\" ==================================================================== +. +This section presents the +.I intermediate output +generated from the same input for three different devices. +. +The input is the sentence +.I hell world +fed into +.B groff +on the command line. +. +. +.IP \[bu] 2m +High-resolution device +.I ps +. +. +.RS +.P +.EX +\fBshell>\fP echo "hell world" | groff \-Z \-T ps +.EE +. +. +.P +.nf +.ft CB +x T ps +x res 72000 1 1 +x init +p1 +x font 5 TR +f5 +s10000 +V12000 +H72000 +thell +wh2500 +tw +H96620 +torld +n12000 0 +x trailer +V792000 +x stop +.ft P +.fi +.RE +. +. +.P +This output can be fed into the postprocessor +.BR grops (1) +to get its representation as a PostScript file, or +.BR gropdf (1) +to output directly to PDF. +. +. +.IP \[bu] 2m +Low-resolution device +.I latin1 +. +. +.RS +.P +This is similar to the high-resolution device except that the +positioning is done at a minor scale. +. +Some comments (lines starting with +.IR # ) +were added for clarification; they were not generated by the +formatter. +. +. +.P +.EX +\fBshell>\fP "hell world" | groff \-Z \-T latin1 +.EE +. +. +.P +.nf +.I "# prologue" +.ft CB +x T latin1 +x res 240 24 40 +x init +.I "# begin a new page" +.ft CB +p1 +.I "# font setup" +.ft CB +x font 1 R +f1 +s10 +.I "# initial positioning on the page" +.ft CB +V40 +H0 +.I "# write text \[oq]hell\[cq]" +.ft CB +thell +.I "# inform about a space, and do it by a horizontal jump" +.ft CB +wh24 +.I "# write text \[oq]world\[cq]" +.ft CB +tworld +.I "# announce line break, but do nothing because ..." +.ft CB +n40 0 +.I "# ... the end of the document has been reached" +.ft CB +x trailer +V2640 +x stop +.ft P +.fi +.RE +. +. +.P +This output can be fed into the postprocessor +.BR grotty (1) +to get a formatted text document. +. +. +.IP \[bu] 2m +Classical style output +. +. +.RS +.P +As a computer monitor has a very low resolution compared to modern +printers the +.I intermediate output +for the X\~devices can use the jump-and-write command with its 2-digit +displacements. +. +. +.P +.EX +\fBshell>\fP "hell world" | groff \-Z \-T X100 +.EE +. +. +.P +.nf +.ft CB +x T X100 +x res 100 1 1 +x init +p1 +x font 5 TR +f5 +s10 +V16 +H100 +.I "# write text with old-style jump-and-write command" +.ft CB +ch07e07l03lw06w11o07r05l03dh7 +n16 0 +x trailer +V1100 +x stop +.ft P +.fi +.RE +. +. +.P +This output can be fed into the postprocessor +.BR \%xditview (1x) +or +.BR \%gxditview (1) +for displaying in\~X. +. +. +.P +Due to the obsolete jump-and-write command, the text clusters in the +classical output are almost unreadable. +. +. +.\" ==================================================================== +.SH "COMPATIBILITY" +.\" ==================================================================== +. +The +.I intermediate output +language of the +.I classical troff +was first documented in +[CSTR\~#97] . +. +The +.I groff intermediate output +format is compatible with this specification except for the following +features. +. +. +.IP \[bu] 2m +The classical quasi device independence is not yet implemented. +. +. +.IP \[bu] 2m +The old hardware was very different from what we use today. +. +So the +.I groff +devices are also fundamentally different from the ones in +.I classical +.IR troff . +. +For example, the classical PostScript device was called +.I post +and had a resolution of 720 units per inch, +while +.IR groff 's +.I ps +device has a resolution of 72000 units per inch. +. +Maybe, by implementing some rescaling mechanism similar to the +classical quasi device independence, these could be integrated into +modern +.IR groff . +. +. +.IP \[bu] 2m +The B-spline command +.B D\[ti] +is correctly handled by the +.I intermediate output +parser, but the drawing routines aren't implemented in some of the +postprocessor programs. +. +. +.IP \[bu] 2m +The argument of the commands +.B s +and +.B x H +has the implicit unit scaled point\~\c +.B z +in +.IR groff , +while +.I classical troff +had point (\c +.BR p ). +. +This isn't an incompatibility, but a compatible extension, for both +units coincide for all devices without a +.I sizescale +parameter, including all classical and the +.I groff +text devices. +. +The few +.I groff +devices with a sizescale parameter either did not exist, had a +different name, or seem to have had a different resolution. +. +So conflicts with classical devices are very unlikely. +. +. +.ie \n[@STUPID_DRAWING_POSITIONING]=1 \{\ +.IP \[bu] 2m +The position changing after the commands +.BR Dp , +.BR DP , +and +.B Dt +is illogical, but as old versions of groff used this feature it is +kept for compatibility reasons. +.\} \" @STUPID_DRAWING_POSITIONING +.el \{\ +.IP \[bu] 2m +Temporarily, there existed some confusion on the positioning after the +.B D +commands that are +.I groff +extensions. +. +This has been clarified by establishing the classical rule for all +groff drawing commands: +. +. +.RS +.P +.ft I +The position after a graphic object has been drawn is at its end; +for circles and ellipses, the "end" is at the right side. +.ft +.RE +. +. +.P +From this, the positionings specified for the drawing commands above +follow quite naturally. +.\} \" @STUPID_DRAWING_POSITIONING +. +.P +The differences between +.I groff +and +.I classical troff +are documented in +.BR groff_diff (7). +. +. +.\" ==================================================================== +.SH "FILES" +.\" ==================================================================== +. +.TP +.IR /usr/\:share/\:groff/\:1.22.4/\:font/dev name /DESC +Device description file for device +.IR name . +. +.TP +.I src/libs/libdriver/input.cpp +Defines the parser and postprocessor for the +.I intermediate +.IR output . +. +It is located relative to the top directory of the +.I groff +source tree. +. +This parser is the definitive specification of the +.I groff intermediate output +format. +. +. +.\" ==================================================================== +.SH AUTHORS +.\" ==================================================================== +James Clark wrote an early version of this document, which described +only the differences between +.BR ditroff (7)'s +output format and that of GNU +.IR roff . +. +The present version was completely rewritten in 2001 by +.MT groff\-bernd.warken\-72@\:web.de +Bernd Warken +.ME . +. +. +.\" ==================================================================== +.SH "SEE ALSO" +.\" ==================================================================== +. +A reference like +.BR groff (7) +refers to a manual page; here +.B groff +in section\~\c +.I 7 +of the man page documentation system. +. +To read the example, look up section\~7 in your desktop help +system or call from the shell prompt +. +. +.RS +.P +.EX +\fBshell>\fP man 7 groff +.EE +.RE +. +. +.P +For more details, see +.BR man (1). +. +. +.TP +.BR groff (1) +option +.B \-Z +and further readings on groff. +. +. +.TP +.BR groff (7) +for details of the +.I groff +language such as numerical units and escape sequences. +. +. +.TP +.BR groff_font (5) +for details on the device scaling parameters of the +.I DESC +file. +. +. +.TP +.BR troff (1) +generates the device-independent intermediate output. +. +. +.TP +.BR roff (7) +for historical aspects and the general structure of roff systems. +. +. +.TP +.BR groff_diff (7) +The differences between the intermediate output in groff and classical +troff. +. +. +.TP +.BR gxditview (1) +Viewer for the +.I intermediate +.IR output . +. +. +.P +.BR \%grodvi (1), +.BR \%grohtml (1), +.BR \%grolbp (1), +.BR \%grolj4 (1), +.BR \%grops (1), +.BR \%grotty (1) +.br +.RS +the groff postprocessor programs. +.RE +. +. +.P +.IR "Groff: The GNU Implementation of troff" , +by Trent A.\& Fisher and Werner Lemberg, +is the primary +.I groff +manual. +. +You can browse it interactively with \[lq]info groff\[rq]. +. +. +.P +The +.I classical troff output language +is described in two AT&T Bell Labs CSTR documents available on-line at +.UR http://\:cm.bell\-labs.com/\:cm/\:cs/\:cstr.html +Bell Labs CSTR site +.UE . +. +. +.TP +[CSTR #97] +.I A Typesetter-independent TROFF +by +.I Brian Kernighan +is the original and most comprehensive documentation on the output +language; see +.UR http://\:cm.bell\-labs.com/\:cm/\:cs/\:cstr/\:97.ps.gz +CSTR\~#97 +.UE . +. +. +.TP +[CSTR\~#54] +The 1992 revision of the +.I Nroff/\:Troff User's Manual +by +.I J.\& F.\& Ossanna +and +.I Brian Kernighan +isn't as comprehensive as +[CSTR\~#97] +regarding the output language; see +.UR http://\:cm.bell\-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz +CSTR\~#54 +.UE . +. +. +.\" Restore compatibility mode (for, e.g., Solaris 10/11). +.cp \n[groff_out_C] +. +. +.\" ==================================================================== +.\" Editor settings +.\" ==================================================================== +. +.\" Local Variables: +.\" mode: nroff +.\" fill-column: 72 +.\" End: +.\" vim: set filetype=groff textwidth=72: |