diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 19:44:05 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 19:44:05 +0000 |
commit | d318611dd6f23fcfedd50e9b9e24620b102ba96a (patch) | |
tree | 8b9eef82ca40fdd5a8deeabf07572074c236095d /contrib/mm | |
parent | Initial commit. (diff) | |
download | groff-f22bf21391d2b916c7303c565592ae6e99efbb58.tar.xz groff-f22bf21391d2b916c7303c565592ae6e99efbb58.zip |
Adding upstream version 1.23.0.upstream/1.23.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
45 files changed, 22472 insertions, 0 deletions
diff --git a/contrib/mm/ChangeLog b/contrib/mm/ChangeLog new file mode 100644 index 0000000..6c17811 --- /dev/null +++ b/contrib/mm/ChangeLog @@ -0,0 +1,1672 @@ +2023-05-25 G. Branden Robinson <g.branden.robinson@gmail.com> + + * groff_mm.7.man (Macros) <INDP>: Clarify operation. + + Fixes <https://savannah.gnu.org/bugs/?64206>. + +2023-02-17 G. Branden Robinson <g.branden.robinson@gmail.com> + + [mm]: Add `--help` option support to mmroff. + + * mmroff.pl: Recognize `--help` option. + * mmroff.1.man (Synopsis, Options): Document. + +2023-02-01 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (H, SETR): Trivially refactor. Rename register to + conform to convention: `hd-mark-trimmed` -> `hd@mark-trimmed`. + This register is used outside of its "module", "hd". + +2023-02-01 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (H, LI): Trivially refactor. Annotate and test + threshold registers consistently. + +2023-02-01 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac: Fix code style nit. Except for initial register + tests for GNU troff formatter and compatibility mode, migrate + special character, register, and string interpolation escape + sequences from `(xx` form to `[xx]`. Also rewrite an instance + of `\nP` to `\n[P]`. + +2023-01-24 G. Branden Robinson <g.branden.robinson@gmail.com> + + When register `Pt` was 2, paragraphs immediately following + displays and lists were being indented, contrary to DWB mm + behavior. + + * m.tmac: Replace `par@ind-flag` register with two separate + state bits, `par*indentation-eligible` and + `par@suppress-indentation`. + (P, nP): Remove complex test for deciding whether the current + paragraph is being set immediately after a heading. + (P): Set `par*indentation-eligible` to the logical complement of + `par@suppress-indentation`. Call `par@doit` (which underlies + both `P` and `nP`) unconditionally. + (nP): Force `par*indentation-eligible` off, since numbered + paragraphs are not influenced by a `Pt` value of "2" in DWB mm. + {The paragraph number occupies the indentation space.} + (par@doit): Introduce local register `par*do-indent`, + manipulate it, and use it to control `ti` request instead of + scattering the request across multiple locations. Remove this + register when done. Clear `par@suppress-indentation` at end, + since after indentation is suppressed once, it should not happen + again until a special circumstance (the setting of a heading, + display, or list) arises. + (H): Convert test of `hd*htype` register, which tells us if + we're setting a run-in heading or not, from `if` to `ie`. (The + first paragraphing macro call after a run-in heading should + _not_ have its indentation suppressed, because the material + after the heading title constitutes a first pagraph.) In the + true arm, set `par@suppress-indentation`; in the new else arm, + clear it. This replaces the "complex test" above, and seems + much more straightforward and reliable. Stop manipulating + `par@ind-flag`. + (df@end, ds@end, LC): Set `par@suppress-indentation` instead of + clearing `par@ind-flag`. + (LE): Set `par@suppress-indentation`. + + Fixes <https://savannah.gnu.org/bugs/?54909>. Thanks to Jeff + Conrad for the report. + +2023-01-24 G. Branden Robinson <g.branden.robinson@gmail.com> + + Regression-test Savannah #54909. + + * tests/P-indentation-works.sh: Do it. + * mm.am (mm_TESTS): Run test. + +2023-01-24 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (df@print-float): Eliminate spew at high debug levels. + This macro gets called even when there aren't any floating + displays pending, so we cannot assume that related registers are + defined. + +2023-01-24 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (P): Fix missing backslash after brace escape sequence. + Problem introduced by me in 3b1afbdb8e, 6 January. + +2023-01-22 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac: Help user navigate the document type macros. Stop + setting up the formatter to throw "unrecognized macro" + diagnostics for macros that are plainly documented in + groff_mm(7). + (@disable): New macro takes a list of macros whose definitions + are replaced with a warning diagnostic about how they're no + longer unavailable due to use of another document type macro + already called, identified by new string `@cover`. + (TL, MT, COVER, LT, LO): Define `@cover` and call `@disable`. + Drop existing diagnostics that did a similar thing as above, + more verbosely. + +2023-01-17 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac: Revise diagnostic messages. Use a consistent message + format, including a space after a colon and the name of the + complaining macro. + (pg@header): Drop unnecessary empty comment at end of macro + call. Macro call syntax differs from `ds` request syntax. + (2C, MC, FD, FS, FE, DF, LB, LI, LE, LC, AL, ML, VL, BL, DL, RL) + (BVL, TH, TE, PS, B1, B2, APPSK, AS, SETR, GETST, GETHN, GETPN) + (INITI, IND, LT, LO): Refer to self with `\$0` escape sequence + instead of a literal. + (2C, MC, PS): Throw fatal error immediately instead of doing + other processing first. + (2C, MC, FD, FS, FE, DF, ds@set-format, ds@end, LB, LI, LE, LC) + (AL, ML, VL, BL, DL, RL, BVL, TH, TE, B1, B2, APPSK, AS, SETR) + (GETST, GETHN, GETPN, INITI, IND, let*lt-sign, LT, LO): Stop + unnecessarily quoting arguments to @error macro. + (FD, LB, VL, BVL, APPSK, SETR, GETST, GETHN, GETPN, INITI): + State quantities of expected and actual arguments. + (FS, FE, LC, B1, INITI): Clarify message. + (DF, DS): Store macro name in `ds@macro` for use in later + diagnostics thrown by internal macros. + (DS): Drop dead store to register `XXX`; debugging detritus? + (ds@set-format): Use `ds@macro`. + (ds@set-format, let*lt-sign, LT, LO): Bracket unrecognized + argument in single quotes. + (ds@set-format): Characterize argument as "unrecognized", not + "wrong". Similarly with the fill style. + (LI, LE, IND): Offer advice. + (LE): Describe problem in same terms as `LI` ("no list active"). + (LC): Validate argument as numeric expression and die with + diagnostic if it isn't one. + (AL, ML, VL, BL, DL, RL, BVL): Weaken fatal diagnostic to + warning; excess arguments are not a serious problem. + (PS): Simplify control flow; since @error does not return, + convert `ie` request to `if` and make `el` branch unconditional. + (RP): Weaken fatal diagnostic to warning and return early; + calling this macro without any references defined does no + structural damage to a document. + (INITI): Remove redundant conditional. + +2023-01-16 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (IX): Delete. + +2023-01-16 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (MC): Throw internal error if we don't leave + `pg*cols-per-page` in a valid state after invalidating it to + count columns. Also simplify expression. + +2023-01-16 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (1C): Warn and return early instead of bombing out if + called when multiple columnation is inactive. A no-op should + not be a fatal error. + +2023-01-16 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (@abort): Introduce macro for internal errors, + unconditionally reporting a backtrace... + (misc@pop-set, hd@split, MULN, df@print-float, IND): ..and use + it instead of `@error` for problems with internal state. + (IND): Also fix botch in reported error. + +2023-01-16 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (SA): Reject an argument value > 1 as invalid. + +2023-01-16 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (P): Quote unrecognized argument in warning diagnostic. + (OK, PM): Refactor to use `\$0`. + (1C): Clarify that formatting can go wrong if you suppress a + page break when returning from multi- to single-column mode with + a footnote pending. + +2023-01-16 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (Tm): Align with definition of `Sm`, with analogous + fallback definitions. + +2023-01-16 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (Sm): Implement string for service mark, for DWB mm + compatibility. + * groff_mm.7.man: Document it. + +2023-01-16 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (CS): Define to throw diagnostic when used without ".MT + 4". (Later, if the "4.MT" file is sourced, this definition is + replaced.) + * groff_mm.7.man (Description): Clarify `CS` support status. + +2023-01-16 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (MOVE, SM, AT, LO): Weaken diagnostics when given no + arguments from (fatal) errors to warnings, then return. + +2023-01-16 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (PIC): Bomb out (with diagnostic) if either of the + width or height arguments are not numeric expressions. + +2023-01-16 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (EPIC): Handle and shift off a leading "-L" argument + before checking argument count. Then, if fewer than two + arguments remain, throw warning diagnostic and return early + instead of bombing out. Do bomb out (with diagnostic) if either + of the width or height arguments are not numeric expressions. + Fix bug which prevented third argument from being interpreted. + Annotate potential future development. + +2023-01-16 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (AU): Partially revert commit 4fd984adc9, 2021-07-17. + `AU` can be called for the sole purpose of "closing" a document + title "opened" with `TL`. + * groff_mm.7.man (Macros) <AU>: Update description. + +2023-01-16 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (TM): Warn if called without arguments. + +2023-01-16 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (AST): Preserve any user-specified leading spaces in + argument. + +2023-01-06 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (P): Warn if argument is non-numeric, and discard it. + Also warn if argument is out of range; people accustomed to + setting the `Pt` register to 2 might mistakenly believe it to be + meaningful here. + +2023-01-03 G. Branden Robinson <g.branden.robinson@gmail.com> + + * mm/0.MT: + * mm/5.MT: Drop never-read register `cov*mt0-ind`. + +2023-01-03 G. Branden Robinson <g.branden.robinson@gmail.com> + + Improve cover sheet diagnostics. + + * m.tmac (MT): Warn and ignore if `COVER` or self already + called. + (COVER): Warn and ignore if `MT` already called. + * mm/0.MT (cov@print-title): Abort if title not defined; tell + user how to use the macros. + (cov@print-authors): Add similar paranoid diagnostic that I + don't think is reachable (since you _have_ to call `AU` to + "close" `TL`). + * mm/4.MT (cov@print-title, cov@print-authors): + * mm/5.MT (cov@print-title): As "0.MT". + + * mm/4.MT: Get rid of spurious blank line in file. + +2023-01-03 G. Branden Robinson <g.branden.robinson@gmail.com> + + Fix Savannah #63613. + + * mm/0.MT (cov*print-authors): Iterate through _all_ technical + memorandum numbers instead of stopping one shy of the last. + Problem appears to date back to introduction of TM support for + memorandum type 1 in commit a48ab7b6d (groff 1.05, 1992-03-18). + + Fixes <https://savannah.gnu.org/bugs/?63613>. + +2023-01-03 G. Branden Robinson <g.branden.robinson@gmail.com> + + Regression-test Savannah #63613. + + * tests/MT-1-reports-all-TM-numbers.sh: Do it. + * mm.am (mm_TESTS): Run test. + +2022-12-17 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (let*mt-sign): Check strings populated by optional + arguments to `AU` macro for existence before interpolating them. + + Fixes <https://savannah.gnu.org/bugs/?24049>. Thanks to Werner + Lemberg for the report. + +2022-11-22 G. Branden Robinson <g.branden.robinson@gmail.com> + + * mse.tmac: Set `pg*footer-size` to four vees, not four basic + units; the latter is too small by orders of magnitude on + typesetting output devices. + + Fixes <https://savannah.gnu.org/bugs/?63398>. Thanks to Hans + Bezemer for the report. + +2022-11-21 G. Branden Robinson <g.branden.robinson@gmail.com> + + Regression-test Savannah #63398. + + * tests/mse_has-sufficient-footnote-space.sh: Do it. + * mm.am (mm_TESTS): Run test. + +2022-10-09 G. Branden Robinson <g.branden.robinson@gmail.com> + + [mm]: Add `--version` option support to mmroff. + + * mm.am (mmroff): Replace `@VERSION@` token in script. + * mmroff.pl: Recognize `--version` option. + * mmroff.1.man (Synopsis, Options): Document. + +2022-10-09 G. Branden Robinson <g.branden.robinson@gmail.com> + + * mmroff.pl: Add proper diagnostic subroutine. Add "progname" + scalar to store the name of the program. + (Die): New subroutine. + (print_index, top level): Call Die() when encountering + prohibitive problems instead of flinging a string into a void + context. + +2022-10-09 G. Branden Robinson <g.branden.robinson@gmail.com> + + * mmroff.pl: Enable Perl warnings. + +2022-10-09 G. Branden Robinson <g.branden.robinson@gmail.com> + + [mm]: Refactor generation of "mmroff" script. + + * mmroff.pl: Replace absolute filespec with `@PERL@` replacement + token. This is documentary; the filespec was getting replaced + anyway. + * mm.am (mmroff): Use more idiomatic token replacement strategy. + Also create target as a .tmp-suffixed file at first since it is + not initially executable, so that we don't race against anything + needing to run it in a parallelized build. (This is a + hypothetical concern; at present, nothing runs mmroff during the + build.) + +2022-10-02 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (pg@header): Add page length sufficiency check. + + Fixes <https://savannah.gnu.org/bugs/?24048>. Thanks to Werner + Lemberg for the report. + +2022-10-02 G. Branden Robinson <g.branden.robinson@gmail.com> + + Regression-test Savannah #24048. + + * tests/short-pages-do-not-overflow-stack.sh: Test it. + * mm.am (mm_TESTS): Run test. + +2022-09-17 Nikita Ivanov <nikita.vyach.ivanov@gmail.com> + + * mm/ms.cov (cov@print-title, cov@print-authors): Escape + newlines when beginning conditional blocks. + + Fixes <https://savannah.gnu.org/bugs/?63075>. [Problems + introduced by me in commits 59d1fd7a5e and 4fd984adc9, both + 2021-07-17. --GBR] + +2022-09-16 Nikita Ivanov <nikita.vyach.ivanov@gmail.com> + + * m.tmac (misc@ev-keep): Select configured default font family, + as with `.fam H` at the top of the document, for example, when + switching to new environment. + + Fixes <https://savannah.gnu.org/bugs/?63067>. + +2022-08-14 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (PY): Add new macro. + (PE): Replace `init@reset` call with `PY` (and then space by + half a vee as before). + + * groff_mm.7.man (PY): Document it. + + Fixes <https://savannah.gnu.org/bugs/?62900>. + +2022-08-14 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (@warning, @error): Stop pointlessly using no-break + control character when invoking the `tm` request, which never + causes a break in formatted output. (Management of the standard + output and standard error streams is the user's responsibility.) + (@error): Drop old-fashioned asterisk banners around error + diagnostics. Stop invoking `ab` with redundant and sometimes + misleading arguments. In groff 1.23, `ab` exits silently if + given none. We've already issued a diagnostic and moreover not + all problems are with "syntax"; some are semantic. + +2022-08-14 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (PS): Validate better; check for 2 arguments exactly. + +2022-08-14 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (PS): Refactor; drop dead code. The `pic*in` register + was used only for dead stores; it was never read or tested. + +2022-08-04 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (initialization): In nroff mode, surround automatically + numbered footnote markers in body text with square brackets, as + groff me(7) and ms(7) do. + +2022-08-04 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (initialization): Recognize new register `V` for + setting the vertical spacing from the command line, instead of + blindly setting the vertical spacing two points larger than the + type size. Handle setting of `V` and type size `S` in case they + are given with an appended scaling unit, using the same + technique as groff ms(7)--if the values are over 1,000, assume + that conversion to basic units by the formatter has already + taken place. + * groff_mm.7.man (Registers) <S, V>: Document it. + +2022-08-03 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (:p): Define register as an alias of `ft*nr`; the + former name is a documented DWB mm feature. + +2022-08-01 G. Branden Robinson <g.branden.robinson@gmail.com> + + * groff_mm.7.man: Document more features. + (Macros) <)E, VM>: Document these DWB mm internals as exposed by + groff mm. + (Macros) <B1, B2, MC>: Document as GNU extensions. + (Strings) <BU, Ci, F>: Document. + (Registers) <:R, Au, Ex, Fg, H8...H14, Oc, S>: Document. + +2022-07-29 G. Branden Robinson <g.branden.robinson@gmail.com> + + * groff_mm.7.man: Document further differences between DWB mm + and groff mm, including several unimplemented features. + +2022-07-29 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac: Remove pointless conditionals in initialization. + Simplify if-else request pairs that did the same thing in both + branches. + +2022-07-28 G. Branden Robinson <g.branden.robinson@gmail.com> + + * groff_mm.7.man: Document `NE` macro. + +2022-03-15 Damian McGuckin <damianm@esi.com.au> + + * m.tmac (eq@check): Compensate for display indentation when + setting equation label. + + Fixes <https://savannah.gnu.org/bugs/?62190>. + +2022-04-27 G. Branden Robinson <g.branden.robinson@gmail.com> + + Regression-test Savannah #62190. + + * tests/place-equation-labels-correctly-in-displays.sh: Test it. + * mm.am (mm_TESTS): Run test. + +2021-08-12 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac (R): Alter to work analogously to `B` and `I` macros; + accept multiple arguments if given, and alternate roman with + previous font. Stop explicitly turning off underlining. + +2021-07-17 G. Branden Robinson <g.branden.robinson@gmail.com> + + Refactor author title handling. + + * m.tmac (AU): Initialize `cov*at!` array element to zero for + current author number (`AT` already updates it). + + * mm/ms.cov (cov@print-authors): Enforce requirement documented + in groff_mm(7) that .AU is mandatory if .COVER is used. Emit + diagnostic if `cov*au` is not defined, and skip remainder of + macro definition. Test for existence of authors' titles + differently; now that `cov*at!` (a count of titles for the + current author) is guaranteed to be initialized, we can use it + as part of a while loop condition, instead of the hard-coded "9" + as an arbitrary limit on the allowed quantity of author titles + {though surely even that is obnoxiously high in practice}, and + more importantly avoid using a \w escape to measure the width of + the interpolation of a potentially undefined string. Use `nop` + to indent text output. Delete apparent typo causing `mac` + warning with respect to undefined `.` macro. Introduce + temporary strings for the author and author title "loop indices" + to shorten and clarify logic. Remove them when done. + + Fixes <https://savannah.gnu.org/bugs/?60926>. + +2021-07-17 G. Branden Robinson <g.branden.robinson@gmail.com> + + * mm/ms.cov (cov@print-title): Enforce requirement documented in + groff_mm(7) that .TL is mandatory if .COVER is used. Emit + diagnostic if `cov*title` is not defined, and skip remainder of + macro definition. + +2021-07-17 G. Branden Robinson <g.branden.robinson@gmail.com> + + * mm/ms.cov (COVEND): Fix thinko; test for existence of + `cov*abs-arg` register with `r` conditional operator, not `d`. + +2021-07-17 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac: Stop emitting debugging diagnostic using undefined + string. Problem exposed by commit + d6d98d2b3e0ad070037073bb288bbaee3fc04cf0, 8 December 2013. + + Fixes <https://savannah.gnu.org/bugs/?60397>. + +2021-07-17 G. Branden Robinson <g.branden.robinson@gmail.com> + + Stop installing empty macro files. + + * mm.am: Delete variable `MMLOCALE`. + (install_mm): Delete `for` loop that touches the files. + (uninstall_mm): Delete `for` loop that deletes the files. + * m.tmac: Update initializtion. + - Load the `\*[@country]_locale` file with `msoquiet` instead + of `mso`. + - Add version check to require groff 1.23 or later, since + the `msoquiet` request is now being used. + - Move "include guard" to follow the compatibility mode and + groff version checks. Remove its `do` prefix. + * groff_mm.7.man (Localization): Migrate topic into its own + subsection and update discussion. + + Fixes <https://savannah.gnu.org/bugs/?60700>. + +2021-07-17 G. Branden Robinson <g.branden.robinson@gmail.com> + + * mm/ms.cov (cov@print-firm): Do nothing if the `cov*firm` + string is not defined. Silences a `mac` warning and prevents + the document date from being incorrectly aligned. + + * tests/ms_cover_sheet_robust_to_missing_AF.sh: Test it. + * mm.am (mm_TESTS): Run test. + + Fixes <https://savannah.gnu.org/bugs/?60915>. + +2021-07-14 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac: Rename `cov*mt-addresse` to `cov*mt-addressee`. + * NOTES: Update the only place the foregoing is documented. + +2021-05-31 G. Branden Robinson <g.branden.robinson@gmail.com> + + * groff_mm.7.man (Description/Macros) <LT>: Document the "SP" + {simplified} letter style more completely. Salutations and + formal closings are omitted. + + Solves the remaining part of bug #60373, "the formal closing is + omitted completely". And, regarding the salutation, #60390. + + Fixes <https://savannah.gnu.org/bugs/?60373> and + <https://savannah.gnu.org/bugs/index.php?60390>. + +2021-05-30 Bjarni Ingi Gislason <bjarniig@rhi.hi.is> + + * m.tmac (let@sg_SP): Stop placing a comma after the first + argument (an author name set by AU) if the second argument is + empty (an author title set by AT). + + Solves another part of bug #60373, "the writer's name at the + bottom is followed by a trailing comma". + + Fixes <https://savannah.gnu.org/bugs/?60389>. + +2021-05-30 Bjarni Ingi Gislason <bjarniig@rhi.hi.is> + + * m.tmac (let@print-head): Quote the interpolation of the string + `let*lo-SJ`. + + Solves part of bug #60373, "[t]he subject line shows only the + first word". + + Fixes <https://savannah.gnu.org/bugs/?60388>. + +2021-05-30 G. Branden Robinson <g.branden.robinson@gmail.com> + + Add regression tests for Savannah #60373. + + * tests/LT_SP_AU_without_AT_works.sh: + * tests/LT_SP_multi-word_LO_SJ_works.sh: Add tests. + * mm.am (mm_TESTS): Run tests. + +2021-05-30 Tadziu Hoffman <hoffmann@usm.uni-muenchen.de> + + Fix Savannah #57034. + + * m.tmac (AT): Count author title declarations. + (let*mt-sign): Use correct index when iterating author names. + Prevent page break between author names and titles. Iterate + author titles and write them. + + Fixes <https://savannah.gnu.org/bugs/?57034>. + +2021-05-30 G. Branden Robinson <g.branden.robinson@gmail.com> + + Add regression test for Savannah #57034. + + * tests/MT_5_includes_AT_in_SG.sh: Test it. Thanks to Ken + Mandelberg for the reproducer. + * mm.am (mm_TESTS): Add variable storing script name. + (TESTS): Append `mm_TESTS` to run it. + (EXTRA_DIST): Append `mm_TESTS` to ship it. + +2021-05-30 Bjarni Ingi Gislason <bjarniig@rhi.hi.is> + + * mm/5.MT (cov@print-title): Fix missing diagnostic. Memorandum + type 5 now requires a title to be declared with .TL. + + Fixes <https://savannah.gnu.org/bugs/?59563>. + +2021-05-30 G. Branden Robinson <g.branden.robinson@gmail.com> + + [mm]: Cease warning level manipulation. + + Stop mm macro package from manipulating warnings. + + * m.tmac: Remove code that attempted to enable all warnings if + none were given on the command line. It did this by simply + comparing the value of the warning register (\n[.warn]) against + the default value; but of course, a user could specify -w + options that exactly matched the default and the test would not + be able to tell, causing puzzling and undesired behavior. + Furthermore, the hard-coded default was out of date and did not + correspond to recent releases of groff. If you want all + warnings on, use the ".warn" request with no arguments in your + mm document or pass "-w w" to groff (see troff(1) or the Texinfo + manual for more on warnings). + + See commit 5aa934e7, 20 February 2020. + +2021-05-30 G. Branden Robinson <g.branden.robinson@gmail.com> + + * examples/letter.mm: Revise to be a better example: use macro + package more effectively, follow *roff input conventions more + carefully, and incorporate more accurate comments. + +2021-05-30 G. Branden Robinson <g.branden.robinson@gmail.com> + + * m.tmac: Update diagnostics. When aborting, explicitly tell + the user we are doing so (see + a334cc97abbdfb9c41e28fcd7c187b81a0a3ceac, 25 September 2020). + (@mm): Define new string to hold prefix for diagnostic messages. + (@warning, @error): Use @mm. Reorder diagnostic messages to + conform with GNU Coding Standards. + (OK, PM): Use @warning instead of `tm` request directly. + +2019-09-10 G. Branden Robinson <g.branden.robinson@gmail.com> + + * Makefile.sim: Delete sed transformation of @G@. It is no + longer needed. + +2018-03-01 Werner LEMBERG <wl@gnu.org> + + * m.tmac: Fix `.hy' value. + + * groff_mm.7.man: Updated. + +2018-02-28 Werner LEMBERG <wl@gnu.org> + + * mm.am (mmroff): Use $(AM_V_GEN) to silence file generation. + +2017-11-02 G. Branden Robinson <g.branden.robinson@gmail.com> + + * examples/letter.mm: New; simple example of mm usage. + * mm.am: Ship the file. + +2015-08-22 Bernd Warken <groff-bernd.warken-72@web.de> + + * mmroff.1.man: Rename `mmroff.man'. + + * groff_mm.7.man: Rename `groff_mm.man'. + + * groff_mmse.7.man: Rename `groff_mmse.man'. + + * mm.am: Include renamings. + +2015-08-05 Bernd Warken <groff-bernd.warken-72@web.de> + + * mm.am, Makefile.sim: Add `Last update'. Setup Emacs mode. + +Thu Jul 16 11:52:03 2015 Carsten Kunze <carsten.kunze@arcor.de> + + Fix line length of `.DS' with indentation (#45452). + + If `.DS' with first argument `1' or `I' is used the output should + use an indentation of `\n[Si]n'. To make this work, the line length + within the `.DS' diversion must be set to zero, otherwise the + effective line length is too large. + + * m.tmac (DS): Call `ds@set-new-ev' with correct indentation value. + +Fri Apr 3 16:33:22 2015 Werner LEMBERG <wl@gnu.org> + + Make man pages work in compatibility mode. + + * groff_mm.man, groff_mmse.man, mmroff.man: Do it. + +Wed Sep 3 21:29:00 2014 Bernd Warken <groff-bernd.warken-72@web.de> + + * all files in contrib/mm: Copying and Emacs setting. + +Thu Aug 28 07:20:00 2014 Werner LEMBERG <wl@gnu.org> + + * m.tmac (misc@tag): Fix horizontal position. + Problem reported by Blake McBride <blake@mcbride.name>. + +Sun Mar 30 21:45:00 2014 Steffen Nurpmeso <sdaoden@yandex.com> + + * Makefile.sim, Makefile.sub: Put straight error-prevention prefixes + for `rm'. + +Wed Mar 6 22:18:00 2013 Deri James <deri@chuzzlewit.myzen.co.uk> + + * groff_mm.man: Document .PIC flag -B (box). Default position of + picture is left (-L) + +Fri Mar 1 08:41:18 2013 Jim Avera <james_avera@yahoo.com> + + * m.tmac (ds@set-format, LI): s/.ie/.if/ if no else clause. + +Sat Nov 17 18:36:56 2012 Anton Shepelev <anton.txt@gmail.com> + + Fixed the format of header numbers in references. + + * m.tmac (hd-mark-trimmed): New string to hold `hd-mark' without + spaces. + (SETR): Use it. + +Sun Aug 14 07:36:29 2011 Anton Shepelev <anton.txt@gmail.com> + + Fix indents in nested static displays. + + * m.tmac (DS, ds@end): Save indent with a stack. + See http://lists.gnu.org/archive/html/groff/2011-07/msg00068.html + for an example. + +Sun Mar 27 09:25:01 2011 Anton Shepelev <anton.txt@gmail.com> + + * m.tmac (misc@tag): Fix last patch. + +Sat Mar 19 13:46:50 2011 James Avera <jimav> + + * m.tmac (RD): Don't use `.ie' but `.if'. + +Fri Mar 18 09:10:19 2011 Anton Shepelev <anton.txt@gmail.com> + + * m.tmac (misc@tag): Retain temporary indentation. + +Sat Feb 5 08:06:39 2011 Anton Shepelev <anton.txt@gmail.com> + + Fix vertical space around displays. + + * m.tmac (ds@end): Use `.SP', not `.sp'. + +Fri Jan 28 11:15:29 2011 Werner LEMBERG <wl@gnu.org> + + Handle `refer-mm.tmac' file. + + * refer-mm.tmac: New file. + * Makefile.sub (install_data, uninstall_sub): Handle it. + +Fri Jan 28 10:56:29 2011 Werner LEMBERG <wl@gnu.org> + + Add `refer' support. + + * m.tmac: Include `refer-mm.tmac'. + +Fri Jan 28 10:26:29 2011 Werner LEMBERG <wl@gnu.org> + + Prepare `refer' support. + + * m.tmac (\n[Rpe]): New register to control page eject status of the + `RP' macro. + (RP): Updated. + (ref@start-print): Move the trailing full stop in reference number + to... + (RS): This macro. + + * groff_mm.man: Document `Rpe' register. + +Fri Jan 28 10:05:29 2011 Werner LEMBERG <wl@gnu.org> + + * mmroff.man, groff_mm.man: s/reference/cross reference/ where + appropriate. + +Wed Jan 5 15:05:47 2011 Werner LEMBERG <wl@gnu.org> + + Fix use of .DEVTAG-* macros. + Reported by Anton Shepelev <anton.txt@gmail.com>. + + * m.tmac (misc@tag): Wrapper around .DEVTAG-* to compensate unwanted + vertical space. + (H): Use it. + +Mon Dec 27 09:39:20 2010 Werner LEMBERG <wl@gnu.org> + + * groff_mm.man: Fix indentation. + +Thu Jun 24 12:43:27 2010 Tadziu Hoffmann <hoffmann@usm.uni-muenchen.de> + + * m.tmac (misc@pop-nr): Fix assignment. + Reported as + http://lists.gnu.org/archive/html/groff/2010-06/msg00096.html + +Sat Jun 5 08:06:21 2010 Larry Jones <lawrence.jones@siemens.com> + + * m.tmac (\*[BU]): Always define. + +Sat Jun 5 08:00:10 2010 Larry Jones <lawrence.jones@siemens.com> + + Improve compatibility. + + * m.tmac (}b, }f, }p): Define aliases for orthogonality with the + already available }t, }e, and }o for page headers. + +Wed Jun 2 16:03:39 2010 Larry Jones <lawrence.jones@siemens.com> + + Fix .EOP handling and non-numeric format of \n[P]. + + * m.tmac (pg@header): Set `.af' temporarily to numeric format. + (pg@print-footer): Disable vertical traps for call to .EOP also. + +Wed Jun 2 16:03:39 2010 Larry Jones <lawrence.jones@siemens.com> + + * m.tmac (toc@entry): Use MM page number (\nP). + +Sun May 30 07:14:15 2010 Larry Jones <lawrence.jones@siemens.com> + + * m.tmac (P, nP): Fix handling of short paragraphs. + Otherwise, + + .H 1 Bug + .P + one + .P + two + .P + three + + results in: + + 1. Bug + + one two three + + whereas it should, of course, produce: + + 1. Bug + + one + + two + + three + +Sat Jan 3 08:55:15 2009 Werner LEMBERG <wl@gnu.org> + + * groff_mm.man: Use new `x' table modifier for all tables which use + T{...T}. This greatly improves formatting. + +Tue Feb 6 00:00:00 2007 Eric S. Raymond <esr@snark.thyrsus.com> + + * groff_mm.man: Typo fix. + +Sat Feb 3 00:00:00 2007 Eric S. Raymond <esr@snark.thyrsus.com> + + * groff_mm.man: Eliminate nonportable macro hackery in the + definition of T2 in favor or TBL tables. + +Fri Jan 5 14:35:35 2007 Werner LEMBERG <wl@gnu.org> + + Fix installation. Reported by Jennifer Sayers. + + * Makefile.sub (install, install_mm): Remove. + (install_bin, install_data): New targets. + +Sat Aug 12 23:33:45 2006 Nick Stoughton <nick@msbit.com> + + * m.tmac (P): Ignore P after H, as documented. + +Tue Apr 4 07:19:57 2006 Werner LEMBERG <wl@gnu.org> + + * groff_mm.man: Document strings TPh, TPeh, and TPoh. + +Wed Mar 29 06:58:24 2006 Werner LEMBERG <wl@gnu.org> + + * m.tmac (pg@print-footer): Disable vertical traps while emitting + the footer. This fixes an endless loop caused by + + .S 27 59 + foo + .SK + + Problem reported by Bill Brelsford <k2di2@att.net>. + + (LI): Remove superfluous line which sets number register `x' without + reason. Problem reported by Morris Stern <mstern@mail.utexas.edu>. + + (eq@check): Correctly flush labels to the right. + Problem reported by Morris Stern <mstern@mail.utexas.edu>. + Fix vertical positions of labels. + + (ds@end): Emit pre-display space earlier. + + * groff_mm.man: Document that only the last equation label of + .EQ/.EN blocks within .DS/.DE is printed. + +Tue Mar 28 14:00:06 2006 Werner LEMBERG <wl@gnu.org> + + . Hardwire first four font positions with R, I, B, and BI -- the + documentation explicitly refers to this feature (cf. the `HF' + string register). + + . Don't use `%' register in numeric calculations because it is + affected by `.af'. + + Patches for both problems have been contributed by Nick Stoughton + <nick@usenix.org>. + + * m.tmac: s/@language/@country/. + s/\n[%]/\n[P]/ where appropriate. + s/\fR/\f1/. + s/.ft R/.ft 1/. + s/\fI/\f2/. + s/.ft I/.ft 2/. + s/\fB/\f3/. + s/.ft B/.ft 3/. + + * mse.tmac: s/@language/@country/. + + * groff_mm.man (Fonts): New subsection. + + * groff_mmse.man: Load `sv.tmac'. + Reformatted. + + examples/README: Cleanups and updates. + +Mon Mar 27 15:44:24 2006 Werner LEMBERG <wl@gnu.org> + + * groff_mm.man: Completely revised and reformatted to use as many + man macros as possible. + +Thu Mar 2 09:12:06 2006 Werner LEMBERG <wl@gnu.org> + + * mse.tmac: Remove common Swedish strings and load sv.tmac instead. + +Sun Feb 26 13:57:13 2006 Claudio Fontana <claudio@gnu.org> + + * Makefile.sub: Add DESTDIR to install and uninstall targets + to support staged installations. + +Fri Nov 25 14:31:02 2005 Werner LEMBERG <wl@gnu.org> + + * mm/ms.cov (COVEND): Protect argument for `cov@print-abstract' + with doublequotes. Reported by Fabrice Ménard + <menard.fabrice@wanadoo.fr>. + +Tue Oct 25 21:59:04 2005 Bob Diertens <bobd@science.uva.nl> + + * m.tmac (lix@print-line): Add parentheses to if-else clause to + fix logic. + +Thu May 26 08:23:40 2005 Werner LEMBERG <wl@gnu.org> + + * m.tmac: Load devtag.tmac. + +Mon May 16 00:00:00 CEST 2005 Keith Marshall <keith.d.marshall@ntlworld.com> + + * mmroff.pl: Add space in shebang prototype for generated + conftest.sh script, conforming to portability recommendation in + autoconf docs. + +Wed Mar 16 06:56:02 2005 Larry Kollar <kollar@alltel.net> + + Add rudimentary support for grohtml. + + * m.tmac (H): Call DEVTAG-NH and DEVTAG-EO-H. + (pg@enable-trap, pg@header): Do nothing for devhtml. + +Sun Mar 7 16:34:46 2004 Jeff Conrad <jeff_conrad@msn.com> + + * m.tmac (S): Improve debug message. + +Wed Mar 05:38:57 2004 Joergen Haegg <jh@axis.com> + + * Changed default value for Hy in manual to 0 + * Check Hy at each new page + +Mon Mar 1 22:16:38 2004 Jeff Conrad <jeff_conrad@msn.com> + + * m.tmac (S): Fix scaling indicator for vertical spacing. + +Tue Nov 05:14:45 2003 Joergen Haegg <jh@axis.com> + + * another patch from ulrich lauther to fix the + TOC up to 14 heading levels. + +Mon Oct 13:48:25 2003 Joergen Haegg <jh@axis.com> + + * problem with more than 7 levels of headings fixed with + patch from ulrich lauther. + +Wed Apr 06:42:35 2003 Joergen Haegg <jh@axis.com> + + * the footer was not adjusted by VM due to a missing + pg*extra-footer-size in the calculation of pg*last-pos + +Wed Apr 06:04:58 2003 Joergen Haegg <jh@axis.com> + + * space adjustments in 4.MT to make it more like + the original + +Sun Mar 21:45:10 2003 Joergen Haegg <jh@axis.com> + + * removed error check i 4.MT, .AF is not mandatory anymore + +Sat Mar 21:56:57 2003 Joergen Haegg <jh@axis.com> + + * cov*firm now defined only if arg to AF is non-empty + That will also enable cov*default-firm from the mm locale-file + to work. + +Sat Mar 21:05:29 2003 Joergen Haegg <jh@axis.com> + + * added .ll in pg@set-env to initialize the + header environment properly + +Wed Mar 19 23:02:16 2003 Werner LEMBERG <wl@gnu.org> + + * groff_mm.man: Some fixes from Robert D. Goulding + <goulding@Princeton.EDU>. + +Wed Sep 09:53:06 2002 Joergen Haegg <jh@axis.com> + + * added implicit -mm to mmroff, it's now possible + to use mmroff with or without -mm as argument. + +Thu Aug 08 00:31:00 Bob Diertens <bobd@science.uva.nl> + + * m.tmac (VM): Add missing backslash. + +Fri Jun 10:37:58 2002 Joergen Haegg <jh@axis.com> + + * added init@reset for LT-macros so .S works for letters + +Thu May 06:30:06 2002 Joergen Haegg <jh@axis.com> + + * adding -T to VM for setting the total + header and footer size. + * changing pg*extra-header-size unit from v to u in DS-size + calculation + +Mon May 05:40:16 2002 Joergen Haegg <jh@axis.com> + + * All lists now get an empty line before the list + even if there is no empty lines between the items (bug in LB) + +Sat May 07:36:08 2002 Joergen Haegg <jh@axis.com> + + * PIC is now drawn 1v higher, making it + possible to put a picture at 0,0. + * Indentbug in P fixed, Pt=2 now behaves as it should + +Wed May 10:18:26 2002 Joergen Haegg <jh@axis.com> + + * added L, W and O in groff_mm.man + * extra space in expression removed in EPIC + * EPIC can leftadjust with -L + * EPIC was drawing 1v down + * forgot to add mmse.tmac and mm.tmac to cvs + +Fri May 20:35:32 2002 Joergen Haegg <jh@axis.com> + + * Clarified manual about INITR + * Added mm.tmac and mmse.tmac wrappers + * Fixed bug in mmroff so a .qrf-file always will be created + * .EQ mark was not correctly positioned anymore. + * changed SP to sp in DS/DE to further correct .EQ + +Sun Dec 9 00:00:00 2001 Werner LEMBERG (wl@gnu.org) + + * Makefile.sim, groff_mm.man, groff_mmse.man: Minor fixes. + * mmroff.man: This is a section 1 man page. + Minor fixes. + * Makefile.sub: Install mmroff.man in section 1. + +Wed Nov 28 00:00:00 2001 Werner LEMBERG (wl@gnu.org) + + * m.tmac: Assure that the macro package is loaded only once. + +Wed Sep 5 00:00:00 2001 Werner LEMBERG (wl@gnu.org) + + * m.tmac: Enable all warnings only if no -W or -w option is given on + the command line (or rather, if only the default warnings are + set). + +Mon Sep 3 00:00:00 2001 Werner LEMBERG (wl@gnu.org) + + * groff_mm.man: Don't use .ne for TTY devices. + +Thu Jul 26 00:00:00 2001 Werner LEMBERG (wl@gnu.org) + + * groff_mm.man: Start always a new line after end of sentence. Add + some compatibility info to the HF variable. + +Thu Jul 26 00:00:00 2001 Larry Jones (larry.jones@sdrc.com) + + * m.tmac: Fix initialization of Hps1 and Hps2. + +Wed May 16 00:00:00 2001 Bruce Lilly (blilly@erols.com) + + * m.tmac (TH): Fix incorrect error message. + +Thu Apr 12 00:00:00 2001 Ruslan Ermilov (ru@FreeBSD.org) + + * groff_mm.man: Fixing some typos. + +Mon Mar 5 09:30:18 2001 Jörgen Hägg (jh@axis.com) + + * S didn't reset to default point size + * (dummy line to force cvs update...) + +Sat Jan 06 10:30:00 2001 Werner LEMBERG (wl@gnu.org) + + * Fixed assignment of page offset given as a command line argument. + +Fri Nov 17 05:34:17 2000 Jörgen Hägg (jh@axis.com) + + * Renamed tmac.m and tmac.mse to m.tmac and mse.tmac + +Thu Sep 14 05:52:48 2000 Jörgen Hägg (jh@axis.com) + + * New Changelog-format, it will show changes better. + Easier for other to use. (Somehow I didn't really + understand why the e-mail address was supposed to be + 'jh at axis.com' in the Changelog. :-) + +Mon Aug 28 00:00:00 2000 Bruno Haible (haible at clisp.cons.org) + + * Makefile.sub: New target 'all', makes all prerequisites of + 'install'. + +Thu Sep 7 06:17:42 2000 Jörgen Hägg (jh at axis.com) + + * version 2.0 + * Had to do something about my version numbering. + The main CVS archive was not in sync with mine. + So, now it is 2.0. :-) + +Sat Jun 17 23:00:00 2000 Eli Zaretskii (eliz@is.elta.co.il) + + * Makefile.sim (.man.n): Replace `;' with `|', since DOS/Windows + path lists use the semicolon as a separator. + +Sun Jun 4 21:39:00 2000 Kaneda Hiroshi (vanitas at ma3.seikyou.ne.jp) + + * Fixing a lot of typos in groff_mm.man + +Tue Mar 7 00:00:00 2000 OKAZAKI Tetsurou (okazaki at be.to) + + * Makefile.sub: Use $(INSTALL_SCRIPT) for script files. + +Sun Jan 30 22:52:20 2000 Jörgen Hägg (jh at axis.com) + + * version 1.34 + * Changed the version number in the CVS repository + * MC had a bug in column calculation, (thanks to T. Kurt Bond) + +Fri Sep 3 07:33:14 1999 Jörgen Hägg (jh at axis.com) + + * version 1.33 + * At last! I finally tracked down the PGFORM bug! + It didn't setup the @pl, @ll and @po as it should, now it does. + * mgm_ref/mgm_roff renamed to mmroff [-x] + * fixed y2k-bug in \*[DT] + * \n[cov*year] removed, hope no one used that. + * ISODATE added with Iso as command line flag + (iso-date suggested by Paul Eggert) + * Added ISODATE to tmac.mse and removed local settings + of new-date. + * INITI syntax changed and enhanced. Index processing is now + done with mmroff. + * A few examples has been added, new subdirectory 'examples'. + * Fixed bug with SETR, header references are now only saved + when Ref > 0 + * Problem with register H1h fixed + * Added test for missing abstract in 4.MT + * Updated Makefile.sub, using tmac_m_prefix. + +Mon Mar 15 22:22:42 1999 Jörgen Hägg (jh at axis.com) + + * OK, let's release this as a beta, 1.33 will be better. :-) + * version 1.32 + * fixed .el-error + * Added number variable Hss + * Changed Hps1 and Hps2 to units + * added hd*h1-text to be used in user defined macro TP. + * -U needed for SETR (I really need 'mv', 'echo', 'rm' + and 'test' builtin!) + * Rewritten the reference system, SETR now prints to stderr + if the number register Qrf > 0. Store in the filename + that is the argument to .INITR + The old behaviour is returned if number register Initr > 0. + * Fixed bug with List of XXXX, long lines messed up the result. + * added number register H1dot. + * added string variable H1txt + * added string variable Tcst + * added number register Dsp. + * added alias APPX for user-defined appendix title. + * added string variable Apptxt + * added H1h for use in TP in headers + * added macro EPIC + * added macro PIC (safe replacement for PSPIC) + * fixed Hps-bug, should be 1, not 1v. + * fixed bug with APPSK, variable not set. + +Wed Feb 4 15:46:04 1998 Jörgen Hägg (jh at axis.se) + + * version 1.31 + * .LI will now honor a space mark. + * Another fix for .AU to let it be used without arguments. + * uninitialized eq*label fixed + +Fri Sep 6 07:13:07 1996 Jörgen Hägg (jh at axis.se) + + * version 1.30 + * This is more like a beta-release, bugs might pop up. :-) + * last line in TOC was not correctly terminated (missing .br) + * changed the indentation for displays, it will now + indent to the current indent, not the one at the definition + of the display. + * Equation marks should now work better, indentation also. + * included these bug fixes from Larry Jones: + * The documentation for the argument to .AS was incorrect for MT 4. + * \*(EM should be a double-dash for nroff. + * \nS is in points, not units. + * If \nO isn't set, the default page offset should be .75i for nroff + and .963i for troff. + * .S D should set the point size to \nS, not 10. + * .S was setting the vertical spacing based on the old point size + instead of the new point size. + * Got rid of a spurious .br that prevented run-in headings from + working. + * Reset the .SP counters in pg@header so that spacing on one page + won't affect spacing on subsequent pages. + * Allow .AU and .AF with no arguments (real mm does, even though it + isn't documented). + * Do .init@reset first thing to initialize the default environment. + * For MT 4, the title should be 4 points larger than the default size, + not 12 point. + * The cover environment needs to be initialized. + * Printing the abstract on the first page needs to be controlled by + the .AS argument. + * Heading eject should be suppressed if the heading immediately + follows the first page stuff (title, author, etc.). + * support for table of contents numbering style (.nr Oc) + * changes the troff empty line height from .25v to .5v + * fixed section page numbering + * fixed a really nasty bug in footnotes that could cause you + to lose the page footer completely if the very first + footnote on the page occurred at just the wrong place + + +Wed May 15 07:39:32 1996 Jörgen Hägg (jh at axis.se) + + * version 1.29 + * Syntax and scaling error fixed, (thanks to Frazer Williams) + * DF/DE will now do a line-break before printing the display. + * Updated the manual for TB,FG,EX and EC. + * Added support for the ms- (and mgs-)macro .IX + * Added indexmacro IX, INITI, IND and INDP, support for + TXIND, TYIND and TZIND. + * PGFORM will now always really reset to the default + values for unspecified arguments. + * Floating displays tested and repaired, it should + now (finanlly) work exactly as the original (I hope :-). + * Should now set year correctly even after 2000. + * Stupid bug in PGNH fixed. + * Corrected line length for figure caption (FG and friends) + + +Mon Apr 24 07:37:52 1995 Jörgen Hägg (jh at axis.se) + + * version 1.28 + * Added AVL (AV without date) + * Fixed nroff scaling for W and L. + * Added support for register E and roman/bold + for all Subject/Date/From strings. + * Added support for register C (1-4), (for DRAFTs and other types) + * Will protest if not used with groff. + * Change of the internal number registers @ps and @vs, they + are now in units, and is set in the new macros .@ps and .@vs. + @ps and @vs is now corrected to the real point and vertical size. + * Macro EQ has now correct pointsize. + * Figures should now get the right page number in the index. + * User-defined macros can now be defined for list of + figures, tables, equations and exhibits (T{X,Y}{FG,TB,EC,EX}. + * Space may be omitted between prefix and mark in automatic lists (.AL) + See .LI + +Tue Jan 10 07:51:37 1995 Jörgen Hägg (jh at axis.se) + + * version 1.27 + * Manual updated + * More bugs fixed in DS/DF + * added alias for :g + * LC can now be used without argument (as the manual says. :-) + * Register :R now supported (RS/RF) + * footnote line was printed even if there was no room for + any footnotes. Fixed. + * Fixed 1C so that it can be used without page eject + * Added support for EOP (TPs twin) + * Hyphenation turned off by default. (Hy == 0) + +Fri Nov 4 08:14:50 1994 Jörgen Hägg (jh at axis.se) + + * version 1.25 + * DS/DF separated and several bugs fixed. Watch out for new though. :-) + * string DT was emptied by mistake in the previous version. + * RD made prettier. + * typo in AV and let@print-head fixed. + +Mon Oct 31 08:19:24 1994 Jörgen Hägg (jh at axis.se) + + * version 1.24 + * Bug fixed and format extended in .SG and .FC. + * date is always printed unless .ND without argument is used. + (I wonder what's the right thing to do, this might change.) + * Swedish letter-standards implemented in tmac.mse. + * .ND can be used to turn off the date. (Empty argument) + +Mon Oct 31 08:14:09 1994 Jörgen Hägg (jh at axis.se) + + * version 1.23 + * An attempt to get in sync with RCS. This is the distributed + version. + +Thu Oct 27 08:29:34 1994 Jörgen Hägg (jh at axis.se) + + * version 1.22 + * (version 1.21 lost... :-) + * Letter macros added!! + * The following macros are added: + * AV, FC, IA ,IE, LT, LO, NE, NS, SG, WA, WE + * nP also added. + +Tue Dec 14 16:26:36 1993 Joergen Haegg (jh at efd.lth.se) + + * version 1.20 + * spelling-corrections + * Makefile.sim updated to the correct version, and a uninstall + target added. + * @cur-lib removed from tmac.m (obsolete) + * fixed check for references i .TC, .RP now resets the flag correctly. + * floating display should now be printed if there is space. + * first version using RCS. I've been avoiding version control until it + became necessary. + * WC WD now works in two-column-mode. + +Tue Sep 7 08:37:00 1993 Jörgen Hägg (jh at efd.lth.se) + + * version 1.19 + * .lt is called in the header for .TP also. + * Variable Pgps added to control the header and footer point-size. + * Error-text printed with .APP removed. + * Error with .FG, .TB, .EC and .EX indentation fixed. + * header and footer line-length is not changed by MC or 2C. + * Default for page-length and page-offset is now taken from + \n[.p] and \n[.o]. + * Argument to .ab (abort) is supplied. + * Argument to .1C added. + * Argument to .PGFORM added. + * RP/RS/RF totally rewritten. Should work with 2C now. + +Fri Apr 23 10:37:25 1993 Joergen Haegg (jh at efd.lth.se) + + * version 1.18 + * Height of display is now more exactly calculated. + * tabs and blankspaces where wrong in .VERBON. + * error in manual for escape-character in VERBON. + * Makefile.sub: installed tmac.m as tmac.m and tmac.mse + * Installation of tmac.mse now supports TMAC_M. + * bug with N fixed. + +Mon Apr 5 09:36:01 1993 Joergen Haegg (jh at efd.lth.se) + + * version 1.17 + * MULB preserves size. + * bug in VERBON fixed, causing strange errors. + * section-page footer fixed. + * added support for numberregister S + * fixed bug with floating displays which made floats to + generate space on a page, but broke page anyway. + * end-of-page trap reinstalled. + +Mon Mar 29 10:53:13 1993 Joergen Haegg (jh at efd.lth.se) + + * version 1.16 + * MUL* now use the previous font and family. + * extra blank page at end-of-text eliminated. + +Mon Mar 8 10:27:47 1993 Joergen Haegg (jh at efd.lth.se) + + * version 1.15 + * Didn't restore pointsize to current size in .H. + * B1/B2 did not work with indent. (MULE and friends) + * fixed old problem with trailing empty pages. + +Fri Mar 5 15:20:49 1993 Joergen Haegg (jh at efd.lth.se) + + * version 1.14 + * Sigh. Amazing what a missing \} can do. If the string + HP was set, then all text disappeared... + +Fri Mar 5 14:12:43 1993 Joergen Haegg (jh at efd.lth.se) + + * version 1.13 + * Fixed bug with handling ps/vs in .H. (again, sigh... ) + +Wed Mar 3 09:21:20 1993 Joergen Haegg (jh at efd.lth.se) + + * version 1.12 + * Line-break added to PGFORM. + * added more features to VERBON + * .S is not used anymore in H, it caused confusion with + normal text, but it will still set .vs. + * SK was broken, will now produce the requested number of + empty pages. + * dotted lines added to LIST OF FIGURES and friends. + Also better linespacing. + +Mon Feb 22 12:41:06 1993 Joergen Haegg (jh at efd.lth.se) + + * version 1.11 + * missing left-parenthesis gave ") .sp" when N=4. + * N=4 removed user-specified header also. + * MOVE made linelength pageoffset wider than wanted. + * fixed (again) parenthesis in RP. + +Thu Jan 21 12:10:39 1993 Joergen Haegg (jh at efd.lth.se) + + * version 1.10 + * changed PROG_PREFIX to g in the manual-pages. + * Better check if new page is needed in .H, when Ej>0. + * Usage of variable Lsp now more complete. + * Space added in TOC when mark is equal to size. + * Usermacro HY moved after font-calulations. + * .S used instead of .ps, which will use .vs correct. + * Now possible to set Hps1/2 inside HX. + * .FD "" 1 is now fixed. + * section-page numbering bug fixed. + * several bugs in VERBON/OFF fixed. + +Tue Dec 8 16:43:15 1992 Joergen Haegg (jh at efd.lth.se) + + * version 1.09 + * N==4 gives no default header + +Sat Nov 21 14:28:20 1992 Joergen Haegg (jh at efd.lth.se) + + * version 1.08 + * Escape-character disabled between + VERBON/VERBOFF (turned on by an argument). + Pointsize and fontchange also added as arguments. + * MULB, MULN and MULE added to get multicolumn output + with different width. + * Number register N can now use 1-5. + * Register Sectp and Sectf added. + * Register P is now updated correctly for "section-page" numbering. + +Thu Nov 19 11:19:33 1992 Joergen Haegg (jh at efd.lth.se) + + * version 1.07 + * .OP fixed to eject a blank page if not odd. + +Fri Nov 13 09:46:09 1992 Joergen Haegg (jh at efd.lth.se) + + * version 1.06 + * Macro TL rewritten. TL depends now on a following .AU. + * NOTES updated. + * .lt is now used more frequent when linelength is changed. + * macro AST added. + * removed PH/EH/OH not needed in ?.MT. + +Wed Oct 28 14:35:43 1992 Joergen Haegg (jh at efd.lth.se) + + * version 1.05 + * .VM implemented. + * Possible bug in page heading fixed. Changed .sp to 'sp in HEADER. + +Thu Aug 20 13:56:31 1992 Joergen Haegg (jh at efd.lth.se) + + * version 1.04 + * page-break in .EQ moved. + * changed unit for footer-size and header-size from units to lines. + Fixes problems with .S and page-breaks. + * \n[%] is now treated as a string, which makes it possible + to assign new formats to it. Unfortunately, it was necessary + to change the page-number-variable in GETPN to a string. + * Makefile.sub included. (Thank you, James) + +Thu May 7 16:14:10 1992 Joergen Haegg (jh at efd.lth.se) + + * version 1.03 + * Typo and centering in DS/DE fixed. + Even and odd pageheaders were reversed. + * LI: pad and mark-indent was lost in some earlier versions. Now fixed. + * fixed bug in reference to .FG, .TB, ... + * APP did not clear headercounters. + * Pointsize in titles is now only set at the beginning and + when PH, PF, OH, OF, EH and EF are used. + +Thu May 6 16:01:35 1992 Joergen Haegg (jh at efd.lth.se) + + * version 1.02 + * OP fixed. + +Fri Mar 6 09:36:09 1992 Joergen Haegg (jh at efd.lth.se) + + * version 1.01 + * two .LI without text between should not be printed + on the same row. Now fixed. + * figure titles and friends fixed, now possible with many .FG + in a DS/DE. Didn't always position correctly in previous version, + but is now always printed as it should. + * Makefile fixed for Ultrix. + * DS/DF could not handle empty arguments correct + * Missing .br i EQ added. + +Sat Jan 25 15:47:21 1992 Joergen Haegg (jh at efd.lth.se) + + * version 1.00 + * No betaversion anymore! + * Fixed headernumbers within appendixes. + * DS did not keep the same font as before DS. + * mmse did a line break. + +Fri Jan 24 14:38:16 1992 Joergen Haegg (jh at efd.lth.se) + + * version 0.16 + * bug in TC, multiple line headers did not wrap correctly. + * added support for mm/locale and mm/language_locale. + * cov*default-firm in locale sets name of firm in the MT covers. + * cov*location-xxxx in locale sets location xxxx to the contents + of cov*location-xxxx. Used in the MT covers. + * hanging indent in lists fixed. + * use larger empty lines if .nroff is defined. + * macros, like .P, can now be used inside abstracts. + * .S do not reset indentation anymore. + * .RS aA now sets a string, not an integer. + * appendix with .APP or .APPSK added. + +Thu Nov 28 22:00:59 1991 Joergen Haegg (jh at efd.lth.se) + + * version 0.15 + * Fixed .AU in MT 0-3, added support for variable Au. + * Bug in the positioning of the foot-notes. + * lists not indented properly. + * Hps1 and Hps2 added. + * COVER had to have an argument. + * table of contents can now have multiline header. + * .HU now increments headingvariable H? + * added the inclusion of a locale file. + +Sat Nov 23 14:40:17 1991 Joergen Haegg (jh at efd.lth.se) + + * version 0.14 + * bug when using -rO fixed. + * MT 1-4 added. + * default is now MT 1 + * .EQ/.EN can be used outside of .DS/.DE without complaints. But + I don't recommend it. Neither does the DWB books. + * LI don't break lines now if arg too big. + * PGFORM did not reset indent. + * Added the numbervariable Hps. + * Rewritten and added MT 0-5 + "string". + * Added TM. + * Indent to AS added + +Wed Nov 6 15:18:40 1991 Joergen Haegg (jh at efd.lth.se) + + * version 0.13 + * ds*format nod defined if PS/PE is used without DS/DE. + * GETST added, fourth argument to EX, FG, TB and EC added. + +Mon Nov 4 13:38:01 1991 Joergen Haegg (jh at efd.lth.se) + + * version 0.12 + * Fixed C,D,P,+-size in .S + +Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se) + * Next version will have ChangeLog entries... + * Bug in INITR fixed. + * VERBON/VERBOFF added to include programlistings + * Bug in .DE fixed, addition overflow +Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se) + * spelling error in month-names. + * WC should work now (no warranty :-) + * FD almost finished, some details missing. + * incorrect calculation of foot-notes fixed. + * DS/DE did not break page when the size was smaller than the paper + * Forward/backward referencesystem added. Se .INITR in README. + * mgmsw changed name to mgmse. +Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se) + * embarrassing bug in .P fixed + * .H did always eject page, now fixed. + * lost floating displays now found. + * accents added (from mgs) + * empty line in .EQ/.EN removed + * indentation in .TC corrected. + * indentation of DS/DE in lists fixed. + * .TB and friends now work inside DS/DE and outside. + * .WC partially implemented (WF and WD). Still working on it. + * .mso used if version>=1.02 +Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se) + * register P was not working. + * support for register Fg, Tb, Ec and Ex. + * list items was left on the previous page at a page break. + * tlevel in .TC now defaults to 2. + * string DT, EM and Tm supported. + * new macro: PGNH, see comments. + * bug in MOVE fixed. + * pagenumber in .TC fixed. + * a blank page was ejected if Ej==1, now fixed + * bug in floating display fixed (did break and SP wrong) + * bug in .SP fixed, no lines is now printed at top of page + * There are still problems with footnotes and displays in two column mode. +Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se) + * register P added (same as %) + * bug in floating displays fixed + * MOVE added + * MT added, see comment below + * COVER/COVEND added + * fixed bug in figure titles + * extended S, se comment below + * MT 0 added + * ms-cover added (COVER ms) +Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se) + * bugs in RD and comb. fonts fixed +Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se) + * HC added + * Combined fonts (IB,BI...) + * HM added + * RD added + * OP added + * TP&PX supported + * warnings for unimplemented macros + +________________________________________________________________________ + +Copyright 1991-2020 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. + +Local Variables: +fill-column: 72 +mode: change-log +version-control: never +End: +vim:set autoindent textwidth=72: diff --git a/contrib/mm/Makefile.sim b/contrib/mm/Makefile.sim new file mode 100644 index 0000000..2d2d6b6 --- /dev/null +++ b/contrib/mm/Makefile.sim @@ -0,0 +1,84 @@ +# Copyright 1991-2020 Free Software Foundation, Inc. +# +# This file is part of groff. +# +# groff is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# groff is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# Makefile.sim +# +# To install mm separately as gm.tmac: +# make -f Makefile.sub tmacdir=/usr/local/lib/groff/tmac srcdir=. \ +# INSTALL_DATA='install -m 644' tmac_m=gm install +# +# or as m.tmac: +# +# tmacdir is the destination for your groff/tmac-directory, srcdir is +# this directory and INSTALL_DATA is the command to install a file with. +# If you dont have 'install': use 'cp'. + + +# change this to whatever you like +tmacdir=/usr/local/lib/groff/tmac +#tmac_m = gm +tmac_m = m +indexdir = xx +install = install -m 644 + +# Do not change anything below this line +srcdir = . +version = 2.8 +mdate = 2002-05-11 + +.SUFFIXES: .n .man + +all: + +install: groff_mm.n groff_mmse.n + $(MAKE) -f Makefile.sub tmacdir=$(tmacdir) srcdir=$(srcdir) \ + INSTALL_DATA='$(install)' tmac_m=$(tmac_m) install + +uninstall: groff_mm.n groff_mmse.n + $(MAKE) -f Makefile.sub tmacdir=$(tmacdir) srcdir=$(srcdir) \ + INSTALL_DATA='$(install)' tmac_m=$(tmac_m) uninstall_sub + +.man.n: + @echo Making $@ from $< + @rm -f $@ + @sed -e "s|@HYPHENFILE@|$(hyphenfile)|g" \ + -e "s|@FONTDIR@|$(fontdir)|g" \ + -e "s|@FONTPATH@|$(fontpath)|g" \ + -e "s|@MACRODIR@|$(tmacdir)|g" \ + -e "s|@MACROPATH@|$(tmacpath)|g" \ + -e "s|@DEVICE@|$(DEVICE)|g" \ + -e "s|@DEFAULT_INDEX@|$(indexdir)/$(indexname)|g" \ + -e "s|@DEFAULT_INDEX_NAME@|$(indexname)|g" \ + -e "s|@INDEX_SUFFIX@|$(indexext)|g" \ + -e "s|@COMMON_WORDS_FILE@|$(common_words_file)|g" \ + -e "s|@MAN1EXT@|$(man1ext)|g" \ + -e "s|@MAN5EXT@|$(man5ext)|g" \ + -e "s|@MAN7EXT@|$(man7ext)|g" \ + -e "s|@TMAC_S@|$(tmac_s)|g" \ + -e "s|@TMAC_M@|$(tmac_m)|g" \ + -e "s|@TMAC_MDIR@|$(tmacdir)/mm|g" \ + -e "s|@BROKEN_SPOOLER_FLAGS@|$(BROKEN_SPOOLER_FLAGS)|g" \ + -e "s|@VERSION@|$(version)|g" \ + -e "s|@MDATE@|$(mdate)|g" \ + -e "s|@g@|$(g)|g" \ + $< >$@ + +# Local Variables: +# mode: makefile +# fill-column: 72 +# End: +# vim: set filetype=make textwidth=72: diff --git a/contrib/mm/NOTES b/contrib/mm/NOTES new file mode 100644 index 0000000..1c35133 --- /dev/null +++ b/contrib/mm/NOTES @@ -0,0 +1,116 @@ + Copyright (C) 1989-2020 Free Software Foundation, Inc. + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. + +###################################################################### + +Beware! +This may be old information. Trust only the source. :-) + +Implementation notes. (Or how to make your own national mm) + +Different commands: + +COVER [arg] +MT [arg [addressee]] +The arg is part of a filename in mm/*.MT or mm/*.cov. +This file is read when the macro is executed. Therefore it must be +put before any text output. +In each file there are definitions of all extra macros needed for the +cover sheet. MT files is only for compatibility reasons, and has several +limits due to that it don't know when the cover starts, and cannot +change sizes. Use COVER for new coversheet macros. + +But with MT it is possible to write all of the AT&T covers. +An example can be found in mm/0.MT. + +When writing a new cover using COVER, have in mind that the cover +should print the page with the COVEND macro. This macro +should be defined by the new macrofile. + +Here is a part of ms.cov: +> .\"----------------- +> .de COVEND +> .sp |4.2c +> .cov@print-title +> .cov@print-authors +> .cov@print-firm +> .cov@print-abstract +> .cov@print-date +This is important, since COVER disables the page header. +> .pg@enable-top-trap +Should begin with page one (normally). +> .bp 1 +And enable the trap at the page footer. +> .pg@enable-trap +> .. + +######################### + +Variables for covers: +I = integer +S = string +D = diversion +M = macro + +Name Type Desc. +cov*au I The number of authors. + +cov*title M Title collected with .TL. + +cov*au!x!y S Author(s) given to .AU +cov*at!x!y S Author(s) title given to .AT + x is the author-index [1-cov*au], + y is the argument-index [1-9]. + Look at the table with indexes. + +cov*firm I Author(s) firm. + +cov*abs-arg I Argument to abstract. + +cov*abs-ind I Indent for abstract. + +cov*abs-name S The string 'ABSTRACT', changed with .AST + +cov*abstract M The abstract. + +cov*new-date S date (today if .ND not used) + +cov*mt-type S memorandum type set by .MT +cov*mt-addressee S memorandum addressee set by .MT + + +########################## +Argument-index for cov*au: + +Index Desc. +1 name +2 initials +3 location +4 department +5 extension +6 room +7 arg 7 +8 arg 8 +9 arg 9 + +The location is set to the contents of string cov*location-xxxx +if location is equal to xxxx and cov*location-xxxx is defined +in the file locale. + + +Argument-index for cov*at: + +Index Desc. +1 title 1 +. . +. . +9 title 9 + + +##### Editor settings +Local Variables: +mode: text +End: diff --git a/contrib/mm/README b/contrib/mm/README new file mode 100644 index 0000000..6c6ca5b --- /dev/null +++ b/contrib/mm/README @@ -0,0 +1,27 @@ + Copyright (C) 1989-2020 Free Software Foundation, Inc. + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. + +This is mm, a macro package for groff. + +It is supposed to be compatible with the Documenter's Workbench (DWB) mm +macros, and has several extensions. + +Please submit bug reports using groff's 'BUG-REPORT' file to +http://savannah.gnu.org/bugs/?group=groff. + +Any new ideas or improvements are welcome. + +This README should be bigger :-) + +/Jörgen Hägg + +Thanks to everyone who have sent me bug reports and fixes. + + +##### Editor settings +Local Variables: +mode: text +End: diff --git a/contrib/mm/examples/APP b/contrib/mm/examples/APP new file mode 100644 index 0000000..e2c017f --- /dev/null +++ b/contrib/mm/examples/APP @@ -0,0 +1,359 @@ +.\" -*- nroff -*- +.\" Copyright (C) 1989-2014 Free Software Foundation, Inc. +.\" +.\" Copying and distribution of this file, with or without modification, +.\" are permitted in any medium without royalty provided the copyright +.\" notice and this notice are preserved. +. +.H 1 " granary grand grandchild grandchildren granddaughter grandeur" +granary +grapheme +graphic +graphite +grapple +grasp +grass +grassland +grassy +grata +grate +grateful +grater +gratify +gratis +gratitude +gratuitous +gratuity +grave +gravel +.H 2 "grapefruit grapevine graph grapheme graphic graphite" +granary +grand +graphic +graphite +grapple +grasp +grass +grassland +grassy +grata +grate +grateful +grater +gratify +gratis +gratitude +gratuitous +gratuity +grave +gravel +.H 3 "grapple" +granary +grand +grandchild +grandchildren +granddaughter +grandeur +grandfather +grandiloquent +grandiose +grandma +grandmother +grateful +grater +gratify +gratis +gratitude +gratuitous +gratuity +grave +gravel +.H 1 "Graves gravestone graveyard gravid gravitate gravy gray" +granary +grand +grandchild +grandchildren +granddaughter +grandeur +grandfather +grandiloquent +grandiose +grata +grate +grateful +grater +gratify +gratis +gratitude +gratuitous +gratuity +grave +gravel +.H 1 "Greenfield greengrocer greenhouse greenish Greenland Greensboro" +granary +grand +grandchild +grandchildren +granddaughter +grandeur +grandfather +grandiloquent +grassy +grata +grate +grateful +grater +gratify +gratis +gratitude +gratuitous +gratuity +grave +gravel +.H 1 "greensward greenware Greenwich greenwood Greer greet" +graven +Graves +gravestone +graveyard +gravid +gravitate +gravy +gray +graybeard +grayish +Grayson +graywacke +graze +grease +.APP "" "Graves app a gravestone graveyard gravid gravitate gravy gray" +granary +grand +grandchild +grandchildren +granddaughter +grandeur +grandfather +grandiloquent +grandiose +grata +grate +grateful +grater +gratify +gratis +gratitude +gratuitous +gratuity +grave +gravel +.APP "" "Greenfield app b greengrocer greenhouse greenish Greenland Greensboro" +granary +grand +grandchild +grandchildren +granddaughter +grandeur +.H 2 "grandfather grandiloquent grandiose grandma grandmother grandnephew" +.H 2 "grandniece grandpa grandparent grandson grandstand granite granitic" +.H 2 "granny granola grant grantee grantor granular granulate" +.H 2 "granule Granville grape" +.H 2 "grapefruit grapevine graph grapheme graphic graphite" +.H 3 "grapple" +grandfather +grandiloquent +grassy +grata +grate +grateful +grater +gratify +gratis +gratitude +gratuitous +gratuity +grave +gravel +.APP ABC "greensward app abc greenware Greenwich greenwood Greer greet" +graven +Graves +.APP "" "handstand app f handwrite handwritten handy handyman handymen" +gravestone +graveyard +gravid +gravitate +gravy +gray +graybeard +grayish +Grayson +graywacke +graze +grease +.APPSK "" 10 "Handel app c 10 handhold handicap handicapped handicapper" +.APPSK "" 23 "handicapping app d 23 handicraftsmen handiwork" +.APPSK "" 99 "handmade app e 99 handset handshake handsome handspike" +.nr Aph 0 +.APP "" "handstand app f handwrite handwritten handy handyman handymen" +headsmen +headstand +headstone +headstrong +headwall +headwater +headway +headwind +.H 2 "graybeard grayish Grayson graywacke graze grease greasy great greatcoat" +.H 2 "greater grebe Grecian Greece greed greedy Greek green Greenbelt Greenberg" +.H 2 "Greenblatt Greenbriar Greene greenery" +.H 3 "Greenfield greengrocer greenhouse greenish Greenland Greensboro" +.H 3 "greensward greenware Greenwich greenwood Greer greet" +heady +heal +Healey +health +healthful +healthy +Healy +heap +hear +heard +hearken +hearsay +hearse +Hearst +heart +heartbeat +heartbreak +hearten +heartfelt +hearth +hearty +heat +heater +heath +heathen +heathenish +Heathkit +heave +heaven +heavenward +heavy +heavyweight +Hebe +hebephrenic +Hebraic +Hebrew +Hecate +hecatomb +heck +heckle +Heckman +hectic +hector +.APP "" "hang hangable app f hangar hangman hangmen hangout hangover hank" +Hecuba +he'd +hedge +.H 2 "graybeard grayish Grayson graywacke graze grease greasy great greatcoat" +hedgehog +hedonism +hedonist +heed +heel +.H 2 "greater grebe Grecian Greece greed greedy Greek green Greenbelt Greenberg" +heft +hefty +Hegelian +hegemony +Heidelberg +heigh +height +heighten +Heine +Heinrich +Heinz +heir +heiress +Heisenberg +held +Helen +Helena +Helene +Helga +helical +helicopter +heliocentric +heliotrope +helium +helix +he'll +hell +hellbender +hellebore +Hellenic +hellfire +hellgrammite +hellish +hello +helm +helmet +Helmholtz +helmsman +helmsmen +Helmut +help +helpful +helpmate +.APP "" "Hankel app g Hanley Hanlon Hanna Hannah Hannibal Hanoi Hanover" +Helsinki +Helvetica +hem +hematite +Hemingway +hemisphere +hemispheric +hemlock +hemoglobin +hemolytic +hemorrhage +hemorrhoid +hemosiderin +hemp +Hempstead +hen +henbane +hence +henceforth +henchman +henchmen +.H 2 "greater grebe Grecian Greece greed greedy Greek green Greenbelt Greenberg" +Henderson +Hendrick +Hendricks +Hendrickson +henequen +Henley +henpeck +Henri +Henrietta +henry +hepatica +hepatitis +Hepburn +heptane +her +Hera +Heraclitus +herald +herb +Herbert +Herculean +Hercules +herd +herdsman +here +hereabout +hereafter +hereby +hereditary +.TC diff --git a/contrib/mm/examples/B1B2 b/contrib/mm/examples/B1B2 new file mode 100644 index 0000000..5847d67 --- /dev/null +++ b/contrib/mm/examples/B1B2 @@ -0,0 +1,98 @@ +.\" -*- nroff -*- +.\" Copyright (C) 1989-2014 Free Software Foundation, Inc. +.\" +.\" Copying and distribution of this file, with or without modification, +.\" are permitted in any medium without royalty provided the copyright +.\" notice and this notice are preserved. +. +abetting +abeyance +abeyant +abhorred +abhorrent +abide +Abidjan +Abigail +abject +ablate +ablaze +able +ablution +Abner +abnormal +Abo +aboard +abode +abolish +.B1 +abolition +abominable +abominate +aboriginal +AAA +ABORIGINE +ABORNING +ABORT +ABOUND +ABOUT +ABOVE +ABOVEBOARD +ABOVEGROUND +abovementioned +abrade +Abraham +Abram +Abramson +abrasion +abrasive +abreact +.B2 +abreast +abrogate +abrupt +abscess +abscissa +abscissae +absence +absent +absentee +absenteeism +absentia +absentminded +absinthe +absolute +absolution +absolve +absorb +absorbent +absorption +absorptive +abstain +abstention +abstract +abstracter +abstractor +ABSURD +ABUILDING +ABUNDANT +ABUSABLE +ABUSE +ABUSIVE +ABUT +ABUTTED +ABUTTING +ABYSMAL +ABYSS +ABYSSINIA +AC +ACADEME +ACADEMIA +ACADEMIC +ACADEMICIAN +ACADEMY +ACADIA +ACANTHUS +ACAPULCO +ACCEDE +ACCELERATE +ACCELEROMETER diff --git a/contrib/mm/examples/COVER b/contrib/mm/examples/COVER new file mode 100644 index 0000000..affdd2d --- /dev/null +++ b/contrib/mm/examples/COVER @@ -0,0 +1,242 @@ +.\" -*- nroff -*- +.\" Copyright (C) 1989-2014 Free Software Foundation, Inc. +.\" +.\" Copying and distribution of this file, with or without modification, +.\" are permitted in any medium without royalty provided the copyright +.\" notice and this notice are preserved. +. +.COVER +.ND 911123 +.TL "charge" "filing" +This is a test +granary +grand +grandchild +grandchildren +granddaughter +grandeur +grandfather +grandiloquent +grandiose +grandma +grandmother +grandnephew +grandniece +grandpa +grandparent +grandson +.AU "Nisse Svensson" "DGY" "BF" "Computer Center" "5488" "5-2115" "nisse@vira.sture.elm" +.AF "MT GRANDSTAND GRANITE GRANITIC" +.AS 1 10 +grant +grantee +grantor +granular +granulate +granule +Granville +grape +grapefruit +grapevine +graph +grapheme +graphic +graphite +grapple +grasp +grass +grassland +grassy +grata +grate +grateful +grater +gratify +gratis +gratitude +gratuitous +gratuity +grave +gravel +graven +Graves +gravestone +graveyard +gravid +gravitate +gravy +gray +graybeard +grayish +Grayson +graywacke +graze +grease +greasy +great +greatcoat +greater +grebe +Grecian +.AE +.COVEND +Greece +greed +greedy +Greek +green +Greenbelt +Greenberg +Greenblatt +Greenbriar +Greene +greenery +Greenfield +greengrocer +greenhouse +greenish +Greenland +Greensboro +greensward +greenware +Greenwich +greenwood +Greer +greet +Greg +gregarious +Gregg +Gregory +gremlin +grenade +Grendel +Grenoble +Gresham +Greta +Gretchen +grew +grey +greyhound +greylag +grid +griddle +gridiron +grief +grievance +grieve +grievous +griffin +Griffith +grill +grille +grilled +grillwork +grim +grimace +Grimaldi +grime +Grimes +Grimm +grin +grind +grindstone +grip +gripe +grippe +grisly +grist +gristmill +Griswold +grit +gritty +grizzle +granary +grand +grandchild +grandchildren +granddaughter +grandeur +grandfather +grandiloquent +grandiose +grandma +grandmother +grandnephew +grandniece +grandpa +grandparent +grandson +grandstand +granite +granitic +granny +granola +grant +grantee +grantor +granular +granulate +granule +Granville +grape +grapefruit +grapevine +graph +grapheme +graphic +graphite +grapple +grasp +grass +grassland +grassy +grata +grate +grateful +grater +gratify +gratis +gratitude +gratuitous +gratuity +grave +gravel +graven +Graves +gravestone +graveyard +gravid +gravitate +gravy +gray +graybeard +grayish +Grayson +graywacke +graze +grease +greasy +great +greatcoat +greater +grebe +Grecian +Greece +greed +greedy +Greek +green +Greenbelt +Greenberg +Greenblatt +Greenbriar +Greene +greenery +Greenfield +greengrocer +greenhouse +greenish +Greenland +Greensboro +greensward +greenware diff --git a/contrib/mm/examples/IND b/contrib/mm/examples/IND new file mode 100644 index 0000000..ad4ee5a --- /dev/null +++ b/contrib/mm/examples/IND @@ -0,0 +1,4198 @@ +.\" -*- nroff -*- +.\" Copyright (C) 1989-2014 Free Software Foundation, Inc. +.\" +.\" Copying and distribution of this file, with or without modification, +.\" are permitted in any medium without royalty provided the copyright +.\" notice and this notice are preserved. +. +.de foo +a=\\$1, b=\\$2 +.br +.. +.INITI N ind-data +.H 1 "halve" +.IND granary +grand +grandchild +grandchildren +granddaughter +grandeur +grandfather +grandiloquent +grandiose +grandma +grandmother +.IND grandnephew +grandniece +grandpa +grandparent +grandson +grandstand +granite +granitic +granny +granola +grant +grantee +grantor +granular +.IND granulate +granule +Granville +grape +.H 2 "grandfather grandiloquent grandiose grandma grandmother grandnephew" +grapefruit +grapevine +graph +grapheme +graphic +.H 1 "halo halocarbon halogen Halpern Halsey Halstead halt halvah" +graphite +grapple +grasp +grass +grassland +grassy +grata +grate +grateful +grater +gratify +gratis +gratitude +gratuitous +gratuity +.IND grave +gravel +graven +Graves +gravestone +graveyard +gravid +gravitate +gravy +gray +graybeard +grayish +Grayson +graywacke +graze +grease +greasy +great +greatcoat +greater +.H 1 "Han Hancock hand handbag handbook handclasp handcuff Handel handful" +grebe +Grecian +Greece +greed +greedy +.IND Greek +green +Greenbelt +Greenberg +.H 1 " granary grand grandchild grandchildren granddaughter grandeur" +Greenblatt +Greenbriar +Greene +greenery +Greenfield +greengrocer +greenhouse +greenish +Greenland +Greensboro +greensward +.H 1 "handgun" +greenware +Greenwich +greenwood +Greer +greet +Greg +gregarious +Gregg +Gregory +.IND gremlin +grenade +Grendel +Grenoble +Gresham +Greta +Gretchen +grew +grey +greyhound +greylag +grid +griddle +gridiron +grief +grievance +grieve +grievous +griffin +Griffith +grill +grille +grilled +grillwork +grim +.IND grimace +Grimaldi +grime +Grimes +Grimm +grin +grind +grindstone +grip +gripe +grippe +grisly +grist +gristmill +Griswold +grit +gritty +grizzle +grizzly +groan +groat +grocer +grocery +groggy +.IND groin +grommet +groom +groove +grope +grosbeak +gross +.H 1 "handicapped handicapper handicapping handicraft handicraftsman" +Grosset +Grossman +Grosvenor +grotesque +Groton +ground +groundsel +groundskeep +groundwork +group +groupoid +grout +grove +grovel +Grover +grow +growl +grown +grownup +.IND growth +grub +grubby +grudge +gruesome +gruff +grumble +Grumman +grunt +gryphon +g's +GSA +GU +Guam +guanidine +guanine +guano +guarantee +guaranteeing +guarantor +guaranty +guard +guardhouse +.IND Guardia +guardian +Guatemala +.IND gubernatorial +Guelph +Guenther +guerdon +guernsey +guerrilla +guess +guesswork +guest +guffaw +Guggenheim +Guiana +guidance +guide +guidebook +guideline +guidepost +guiding +guignol +guild +.H 1 "handicraftsmen handiwork handkerchief handle" +guildhall +guile +Guilford +guillemot +guillotine +guilt +.IND guilty +guinea +guise +guitar +gules +gulf +.H 1 "handleable handlebar handline handmade handmaiden handout" +gull +Gullah +gullet +gullible +gully +gulp +gum +gumbo +gumdrop +gummy +gumption +gumshoe +gun +Gunderson +.IND gunfight +gunfire +gunflint +gunk +gunky +gunman +.IND gunmen +gunnery +gunny +gunplay +gunpowder +gunshot +gunsling +Gunther +gurgle +Gurkha +guru +Gus +gush +gusset +gust +Gustafson +Gustav +Gustave +Gustavus +gusto +gusty +gut +.H 1 "handset" +Gutenberg +Guthrie +gutsy +guttural +.IND guy +Guyana +guzzle +Gwen +Gwyn +gym +gymnasium +gymnast +gymnastic +gymnosperm +gyp +gypsite +gypsum +gypsy +gyrate +gyrfalcon +gyro +.IND gyrocompass +gyroscope +h +ha +Haag +Haas +habeas +haberdashery +Haberman +.IND Habib +habit +habitant +habitat +habitation +habitual +habituate +hacienda +hack +hackberry +Hackett +hackle +hackmatack +.H 1 "handshake handsome handspike handstand handwaving handwrite handwritten" +hackney +hackneyed +hacksaw +had +Hadamard +Haddad +haddock +Hades +Hadley +hadn't +Hadrian +hadron +hafnium +.IND Hagen +Hager +haggard +haggle +Hagstrom +Hague +Hahn +Haifa +haiku +hail +hailstone +hailstorm +Haines +hair +.IND haircut +hairdo +hairpin +hairy +Haiti +Haitian +Hal +halcyon +hale +Haley +half +halfback +.IND halfhearted +halfway +halibut +halide +.H 1 "handy handyman handymen Haney Hanford hang hangable hangar" +Halifax +halite +hall +hallelujah +Halley +hallmark +hallow +Halloween +hallucinate +hallway +halma +halo +halocarbon +halogen +Halpern +Halsey +Halstead +halt +halvah +halve +Halverson +ham +.IND Hamal +Hamburg +hamburger +Hamilton +hamlet +Hamlin +hammerhead +hammock +Hammond +hamper +Hampshire +.IND Hampton +hamster +Han +.H 1 "hangman hangmen hangout hangover hank Hankel Hanley" +Hancock +hand +handbag +handbook +handclasp +handcuff +Handel +handful +handgun +handhold +handicap +handicapped +.IND handicapper +handicapping +handicraft +handicraftsman +handicraftsmen +handiwork +handkerchief +handle +handleable +handlebar +handline +handmade +handmaiden +handout +handset +handshake +handsome +handspike +handstand +handwaving +.H 1 "Hanlon Hanna Hannah Hannibal Hanoi Hanover Hanoverian Hans" +handwrite +handwritten +handy +handyman +handymen +Haney +.IND Hanford +hang +hangable +hangar +hangman +hangmen +hangout +hangover +.IND hank +Hankel +Hanley +Hanlon +Hanna +Hannah +Hannibal +Hanoi +Hanover +Hanoverian +Hans +Hansel +Hansen +hansom +Hanson +Hanukkah +hap +.H 1 "Hansel" +haphazard +.IND haploid +haploidy +haplology +happen +happenstance +happy +Hapsburg +harangue +harass +Harbin +harbinger +Harcourt +hard +hardbake +hardboard +hardboiled +hardcopy +harden +hardhat +Hardin +.H 1 "Hansen hansom Hanson Hanukkah hap haphazard haploid haploidy" +Harding +hardscrabble +hardtack +hardtop +hardware +hardwood +.IND hardworking +hardy +hare +harelip +harem +.IND hark +Harlan +Harlem +Harley +harm +harmful +Harmon +harmonic +harmonica +harmonious +.H 1 "haplology happen happenstance happy Hapsburg harangue harass Harbin" +harmony +harness +Harold +harp +harpoon +harpsichord +Harpy +Harriet +Harriman +Harrington +Harris +.IND Harrisburg +Harrison +harrow +harry +harsh +harshen +hart +Hartford +Hartley +Hartman +Harvard +harvest +harvestman +Harvey +hash +hashish +hasn't +hasp +hassle +hast +haste +hasten +Hastings +hasty +hat +hatch +.IND hatchet +hatchway +.IND hate +hateful +hater +Hatfield +hath +Hathaway +hatred +Hatteras +Hattie +Hattiesburg +Haugen +haughty +haul +haulage +haunch +haunt +Hausdorff +Havana +have +haven +haven't +Havilland +havoc +haw +.IND Hawaii +Hawaiian +hawk +Hawkins +Hawley +hawthorn +.H 2 "hammock Hammond hamper Hampshire Hampton hamster" +Hawthorne +hay +Hayden +Haydn +Hayes +hayfield +Haynes +Hays +haystack +Hayward +hayward +hazard +hazardous +haze +hazel +hazelnut +hazy +he +head +.IND headache +.IND headboard +headdress +headland +headlight +headline +headmaster +headphone +headquarter +headquarters +headroom +headset +headsman +headsmen +headstand +headstone +headstrong +headwall +headwater +headway +headwind +heady +heal +Healey +health +healthful +healthy +.IND Healy +heap +hear +heard +hearken +hearsay +hearse +Hearst +heart +heartbeat +heartbreak +hearten +heartfelt +hearth +hearty +heat +heater +heath +heathen +heathenish +Heathkit +heave +.IND heaven +heavenward +heavy +heavyweight +.IND Hebe +hebephrenic +Hebraic +Hebrew +Hecate +hecatomb +heck +heckle +Heckman +hectic +hector +Hecuba +he'd +hedge +hedgehog +hedonism +hedonist +heed +heel +heft +hefty +Hegelian +hegemony +Heidelberg +heigh +height +.IND heighten +Heine +Heinrich +Heinz +heir +heiress +Heisenberg +held +Helen +Helena +Helene +Helga +helical +helicopter +heliocentric +heliotrope +helium +helix +he'll +.IND hell +hellbender +hellebore +Hellenic +hellfire +hellgrammite +hellish +.IND hello +helm +helmet +.H 1 "Halverson ham Hamal Hamburg hamburger Hamilton hamlet Hamlin hammerhead" +Helmholtz +helmsman +helmsmen +Helmut +help +helpful +helpmate +Helsinki +Helvetica +hem +hematite +Hemingway +hemisphere +hemispheric +hemlock +hemoglobin +hemolytic +hemorrhage +hemorrhoid +hemosiderin +hemp +Hempstead +hen +.IND henbane +hence +henceforth +henchman +henchmen +Henderson +Hendrick +Hendricks +Hendrickson +henequen +Henley +henpeck +Henri +Henrietta +henry +hepatica +.IND hepatitis +Hepburn +heptane +her +Hera +Heraclitus +herald +herb +Herbert +Herculean +.IND Hercules +herd +herdsman +here +hereabout +hereafter +hereby +hereditary +heredity +Hereford +herein +hereinabove +hereinafter +hereinbelow +hereof +heresy +heretic +hereto +heretofore +hereunder +hereunto +herewith +heritable +heritage +Herkimer +Herman +.IND Hermann +hermeneutic +Hermes +hermetic +Hermite +hermitian +Hermosa +Hernandez +hero +Herodotus +heroes +heroic +heroin +.IND heroine +heroism +heron +herpes +herpetology +Herr +herringbone +Herschel +herself +Hershel +Hershey +hertz +Hertzog +.IND hesitant +hesitate +hesitater +Hesperus +Hess +Hesse +Hessian +Hester +heterocyclic +heterodyne +heterogamous +heterogeneity +heterogeneous +heterosexual +heterostructure +heterozygous +Hetman +Hettie +Hetty +Heublein +heuristic +Heusen +Heuser +hew +Hewett +Hewitt +.IND Hewlett +hewn +hex +hexachloride +hexadecimal +hexafluoride +hexagon +hexagonal +hexameter +hexane +.IND hey +heyday +hi +Hiatt +hiatus +Hiawatha +hibachi +Hibbard +hibernate +Hibernia +hick +Hickey +Hickman +hickory +Hicks +hid +.IND hidalgo +hidden +hide +hideaway +hideous +hideout +hierarchal +hierarchic +hierarchy +hieratic +hieroglyphic +Hieronymus +hifalutin +Higgins +high +highball +highboy +highest +highfalutin +highhanded +highland +highlight +highroad +hightail +highway +highwayman +.IND highwaymen +hijack +hijinks +hike +hilarious +hilarity +Hilbert +.IND Hildebrand +hill +hillbilly +Hillcrest +Hillel +hillman +hillmen +hillock +hillside +hilltop +hilly +hilt +Hilton +hilum +him +Himalaya +himself +hind +hindmost +.IND hindrance +hindsight +Hindu +Hinduism +Hines +hinge +Hinman +hint +hinterland +hip +hippo +Hippocrates +Hippocratic +hippodrome +hippopotamus +hippy +hipster +Hiram +hire +hireling +Hiroshi +Hiroshima +Hirsch +hirsute +his +Hispanic +.IND hiss +histamine +histidine +histochemic +.IND histochemistry +histogram +histology +historian +historic +historiography +history +histrionic +hit +Hitachi +hitch +Hitchcock +.H 1 "harbinger" +hither +hitherto +Hitler +hive +ho +hoagie +Hoagland +hoagy +hoar +hoard +.IND hoarfrost +hoarse +hob +Hobart +Hobbes +hobble +Hobbs +hobby +hobbyhorse +hobgoblin +hobo +Hoboken +hoc +hock +hockey +hocus +hodge +hodgepodge +Hodges +Hodgkin +hoe +Hoff +Hoffman +hog +hogan +hogging +.IND hoi +.IND Hokan +Holbrook +Holcomb +hold +holden +holdout +holdover +holdup +hole +holeable +holiday +Holland +Hollandaise +holler +Hollerith +Hollingsworth +Hollister +hollow +Holloway +hollowware +holly +hollyhock +Hollywood +Holm +Holman +.IND Holmdel +Holmes +holmium +holocaust +Holocene +hologram +holography +Holst +Holstein +holster +holt +Holyoke +.IND holystone +.INDP +inject injudicious Injun injunct injunction injure injurious injury +injustice ink inkling inlaid inland inlay inlet Inman inmate inn innards +innate inner innermost innkeeper innocent innocuous innovate innuendo +innumerable inoculate inoffensive inoperable inoperative inopportune +inordinate inorganic input inputting inquest inquire inquiry inquisition +inquisitive inquisitor inroad insane insatiable inscribe inscription +inscrutable insect insecticide insecure inseminate insensible insensitive +inseparable insert inset inshore inside insidious insight insightful +insignia insignificant insincere insinuate insipid insist insistent +insofar insolent insoluble insolvable insolvent insomnia insomniac +insouciant inspect inspector inspiration inspire instable install +installation instalment instance instant instantaneous instantiate +.INITI H ind-data2 +.H 1 "halve" +.IND granary +grand +grandchild +grandchildren +granddaughter +grandeur +grandfather +grandiloquent +grandiose +grandma +grandmother +.IND grandnephew +grandniece +grandpa +grandparent +grandson +grandstand +granite +granitic +granny +granola +grant +grantee +grantor +granular +.IND granulate +granule +Granville +grape +.H 2 "grandfather grandiloquent grandiose grandma grandmother grandnephew" +grapefruit +grapevine +graph +grapheme +graphic +.H 1 "halo halocarbon halogen Halpern Halsey Halstead halt halvah" +graphite +grapple +grasp +grass +grassland +grassy +grata +grate +grateful +grater +gratify +gratis +gratitude +gratuitous +gratuity +.IND grave +gravel +graven +Graves +gravestone +graveyard +gravid +gravitate +gravy +gray +graybeard +grayish +Grayson +graywacke +graze +grease +greasy +great +greatcoat +greater +.H 1 "Han Hancock hand handbag handbook handclasp handcuff Handel handful" +grebe +Grecian +Greece +greed +greedy +.IND Greek +green +Greenbelt +Greenberg +.H 1 " granary grand grandchild grandchildren granddaughter grandeur" +Greenblatt +Greenbriar +Greene +greenery +Greenfield +greengrocer +greenhouse +greenish +Greenland +Greensboro +greensward +.H 1 "handgun" +greenware +Greenwich +greenwood +Greer +greet +Greg +gregarious +Gregg +Gregory +.IND gremlin +grenade +Grendel +Grenoble +Gresham +Greta +Gretchen +grew +grey +greyhound +greylag +grid +griddle +gridiron +grief +grievance +grieve +grievous +griffin +Griffith +grill +grille +grilled +grillwork +grim +.IND grimace +Grimaldi +grime +Grimes +Grimm +grin +grind +grindstone +grip +gripe +grippe +grisly +grist +gristmill +Griswold +grit +gritty +grizzle +grizzly +groan +groat +grocer +grocery +groggy +.IND groin +grommet +groom +groove +grope +grosbeak +gross +.H 1 "handicapped handicapper handicapping handicraft handicraftsman" +Grosset +Grossman +Grosvenor +grotesque +Groton +ground +groundsel +groundskeep +groundwork +group +groupoid +grout +grove +grovel +Grover +grow +growl +grown +grownup +.IND growth +grub +grubby +grudge +gruesome +gruff +grumble +Grumman +grunt +gryphon +g's +GSA +GU +Guam +guanidine +guanine +guano +guarantee +guaranteeing +guarantor +guaranty +guard +guardhouse +.IND Guardia +guardian +Guatemala +.IND gubernatorial +Guelph +Guenther +guerdon +guernsey +guerrilla +guess +guesswork +guest +guffaw +Guggenheim +Guiana +guidance +guide +guidebook +guideline +guidepost +guiding +guignol +guild +.H 1 "handicraftsmen handiwork handkerchief handle" +guildhall +guile +Guilford +guillemot +guillotine +guilt +.IND guilty +guinea +guise +guitar +gules +gulf +.H 1 "handleable handlebar handline handmade handmaiden handout" +gull +Gullah +gullet +gullible +gully +gulp +gum +gumbo +gumdrop +gummy +gumption +gumshoe +gun +Gunderson +.IND gunfight +gunfire +gunflint +gunk +gunky +gunman +.IND gunmen +gunnery +gunny +gunplay +gunpowder +gunshot +gunsling +Gunther +gurgle +Gurkha +guru +Gus +gush +gusset +gust +Gustafson +Gustav +Gustave +Gustavus +gusto +gusty +gut +.H 1 "handset" +Gutenberg +Guthrie +gutsy +guttural +.IND guy +Guyana +guzzle +Gwen +Gwyn +gym +gymnasium +gymnast +gymnastic +gymnosperm +gyp +gypsite +gypsum +gypsy +gyrate +gyrfalcon +gyro +.IND gyrocompass +gyroscope +h +ha +Haag +Haas +habeas +haberdashery +Haberman +.IND Habib +habit +habitant +habitat +habitation +habitual +habituate +hacienda +hack +hackberry +Hackett +hackle +hackmatack +.H 1 "handshake handsome handspike handstand handwaving handwrite handwritten" +hackney +hackneyed +hacksaw +had +Hadamard +Haddad +haddock +Hades +Hadley +hadn't +Hadrian +hadron +hafnium +.IND Hagen +Hager +haggard +haggle +Hagstrom +Hague +Hahn +Haifa +haiku +hail +hailstone +hailstorm +Haines +hair +.IND haircut +hairdo +hairpin +hairy +Haiti +Haitian +Hal +halcyon +hale +Haley +half +halfback +.IND halfhearted +halfway +halibut +halide +.H 1 "handy handyman handymen Haney Hanford hang hangable hangar" +Halifax +halite +hall +hallelujah +Halley +hallmark +hallow +Halloween +hallucinate +hallway +halma +halo +halocarbon +halogen +Halpern +Halsey +Halstead +halt +halvah +halve +Halverson +ham +.IND Hamal +Hamburg +hamburger +Hamilton +hamlet +Hamlin +hammerhead +hammock +Hammond +hamper +Hampshire +.IND Hampton +hamster +Han +.H 1 "hangman hangmen hangout hangover hank Hankel Hanley" +Hancock +hand +handbag +handbook +handclasp +handcuff +Handel +handful +handgun +handhold +handicap +handicapped +.IND handicapper +handicapping +handicraft +handicraftsman +handicraftsmen +handiwork +handkerchief +handle +handleable +handlebar +handline +handmade +handmaiden +handout +handset +handshake +handsome +handspike +handstand +handwaving +.H 1 "Hanlon Hanna Hannah Hannibal Hanoi Hanover Hanoverian Hans" +handwrite +handwritten +handy +handyman +handymen +Haney +.IND Hanford +hang +hangable +hangar +hangman +hangmen +hangout +hangover +.IND hank +Hankel +Hanley +Hanlon +Hanna +Hannah +Hannibal +Hanoi +Hanover +Hanoverian +Hans +Hansel +Hansen +hansom +Hanson +Hanukkah +hap +.H 1 "Hansel" +haphazard +.IND haploid +haploidy +haplology +happen +happenstance +happy +Hapsburg +harangue +harass +Harbin +harbinger +Harcourt +hard +hardbake +hardboard +hardboiled +hardcopy +harden +hardhat +Hardin +.H 1 "Hansen hansom Hanson Hanukkah hap haphazard haploid haploidy" +Harding +hardscrabble +hardtack +hardtop +hardware +hardwood +.IND hardworking +hardy +hare +harelip +harem +.IND hark +Harlan +Harlem +Harley +harm +harmful +Harmon +harmonic +harmonica +harmonious +.H 1 "haplology happen happenstance happy Hapsburg harangue harass Harbin" +harmony +harness +Harold +harp +harpoon +harpsichord +Harpy +Harriet +Harriman +Harrington +Harris +.IND Harrisburg +Harrison +harrow +harry +harsh +harshen +hart +Hartford +Hartley +Hartman +Harvard +harvest +harvestman +Harvey +hash +hashish +hasn't +hasp +hassle +hast +haste +hasten +Hastings +hasty +hat +hatch +.IND hatchet +hatchway +.IND hate +hateful +hater +Hatfield +hath +Hathaway +hatred +Hatteras +Hattie +Hattiesburg +Haugen +haughty +haul +haulage +haunch +haunt +Hausdorff +Havana +have +haven +haven't +Havilland +havoc +haw +.IND Hawaii +Hawaiian +hawk +Hawkins +Hawley +hawthorn +.H 2 "hammock Hammond hamper Hampshire Hampton hamster" +Hawthorne +hay +Hayden +Haydn +Hayes +hayfield +Haynes +Hays +haystack +Hayward +hayward +hazard +hazardous +haze +hazel +hazelnut +hazy +he +head +.IND headache +.IND headboard +headdress +headland +headlight +headline +headmaster +headphone +headquarter +headquarters +headroom +headset +headsman +headsmen +headstand +headstone +headstrong +headwall +headwater +headway +headwind +heady +heal +Healey +health +healthful +healthy +.IND Healy +heap +hear +heard +hearken +hearsay +hearse +Hearst +heart +heartbeat +heartbreak +hearten +heartfelt +hearth +hearty +heat +heater +heath +heathen +heathenish +Heathkit +heave +.IND heaven +heavenward +heavy +heavyweight +.IND Hebe +hebephrenic +Hebraic +Hebrew +Hecate +hecatomb +heck +heckle +Heckman +hectic +hector +Hecuba +he'd +hedge +hedgehog +hedonism +hedonist +heed +heel +heft +hefty +Hegelian +hegemony +Heidelberg +heigh +height +.IND heighten +Heine +Heinrich +Heinz +heir +heiress +Heisenberg +held +Helen +Helena +Helene +Helga +helical +helicopter +heliocentric +heliotrope +helium +helix +he'll +.IND hell +hellbender +hellebore +Hellenic +hellfire +hellgrammite +hellish +.IND hello +helm +helmet +.H 1 "Halverson ham Hamal Hamburg hamburger Hamilton hamlet Hamlin hammerhead" +Helmholtz +helmsman +helmsmen +Helmut +help +helpful +helpmate +Helsinki +Helvetica +hem +hematite +Hemingway +hemisphere +hemispheric +hemlock +hemoglobin +hemolytic +hemorrhage +hemorrhoid +hemosiderin +hemp +Hempstead +hen +.IND henbane +hence +henceforth +henchman +henchmen +Henderson +Hendrick +Hendricks +Hendrickson +henequen +Henley +henpeck +Henri +Henrietta +henry +hepatica +.IND hepatitis +Hepburn +heptane +her +Hera +Heraclitus +herald +herb +Herbert +Herculean +.IND Hercules +herd +herdsman +here +hereabout +hereafter +hereby +hereditary +heredity +Hereford +herein +hereinabove +hereinafter +hereinbelow +hereof +heresy +heretic +hereto +heretofore +hereunder +hereunto +herewith +heritable +heritage +Herkimer +Herman +.IND Hermann +hermeneutic +Hermes +hermetic +Hermite +hermitian +Hermosa +Hernandez +hero +Herodotus +heroes +heroic +heroin +.IND heroine +heroism +heron +herpes +herpetology +Herr +herringbone +Herschel +herself +Hershel +Hershey +hertz +Hertzog +.IND hesitant +hesitate +hesitater +Hesperus +Hess +Hesse +Hessian +Hester +heterocyclic +heterodyne +heterogamous +heterogeneity +heterogeneous +heterosexual +heterostructure +heterozygous +Hetman +Hettie +Hetty +Heublein +heuristic +Heusen +Heuser +hew +Hewett +Hewitt +.IND Hewlett +hewn +hex +hexachloride +hexadecimal +hexafluoride +hexagon +hexagonal +hexameter +hexane +.IND hey +heyday +hi +Hiatt +hiatus +Hiawatha +hibachi +Hibbard +hibernate +Hibernia +hick +Hickey +Hickman +hickory +Hicks +hid +.IND hidalgo +hidden +hide +hideaway +hideous +hideout +hierarchal +hierarchic +hierarchy +hieratic +hieroglyphic +Hieronymus +hifalutin +Higgins +high +highball +highboy +highest +highfalutin +highhanded +highland +highlight +highroad +hightail +highway +highwayman +.IND highwaymen +hijack +hijinks +hike +hilarious +hilarity +Hilbert +.IND Hildebrand +hill +hillbilly +Hillcrest +Hillel +hillman +hillmen +hillock +hillside +hilltop +hilly +hilt +Hilton +hilum +him +Himalaya +himself +hind +hindmost +.IND hindrance +hindsight +Hindu +Hinduism +Hines +hinge +Hinman +hint +hinterland +hip +hippo +Hippocrates +Hippocratic +hippodrome +hippopotamus +hippy +hipster +Hiram +hire +hireling +Hiroshi +Hiroshima +Hirsch +hirsute +his +Hispanic +.IND hiss +histamine +histidine +histochemic +.IND histochemistry +histogram +histology +historian +historic +historiography +history +histrionic +hit +Hitachi +hitch +Hitchcock +.H 1 "harbinger" +hither +hitherto +Hitler +hive +ho +hoagie +Hoagland +hoagy +hoar +hoard +.IND hoarfrost +hoarse +hob +Hobart +Hobbes +hobble +Hobbs +hobby +hobbyhorse +hobgoblin +hobo +Hoboken +hoc +hock +hockey +hocus +hodge +hodgepodge +Hodges +Hodgkin +hoe +Hoff +Hoffman +hog +hogan +hogging +.IND hoi +.IND Hokan +Holbrook +Holcomb +hold +holden +holdout +holdover +holdup +hole +holeable +holiday +Holland +Hollandaise +holler +Hollerith +Hollingsworth +Hollister +hollow +Holloway +hollowware +holly +hollyhock +Hollywood +Holm +Holman +.IND Holmdel +Holmes +holmium +holocaust +Holocene +hologram +holography +Holst +Holstein +holster +holt +Holyoke +.IND holystone +.INDP +inject injudicious Injun injunct injunction injure injurious injury +injustice ink inkling inlaid inland inlay inlet Inman inmate inn innards +innate inner innermost innkeeper innocent innocuous innovate innuendo +innumerable inoculate inoffensive inoperable inoperative inopportune +inordinate inorganic input inputting inquest inquire inquiry inquisition +.INITI B ind-data3 +.H 1 "halve" +.IND granary +grand +grandchild +grandchildren +granddaughter +grandeur +grandfather +grandiloquent +grandiose +grandma +grandmother +.IND grandnephew +grandniece +grandpa +grandparent +grandson +grandstand +granite +granitic +granny +granola +grant +grantee +grantor +granular +.IND granulate +granule +Granville +grape +.H 2 "grandfather grandiloquent grandiose grandma grandmother grandnephew" +grapefruit +grapevine +graph +grapheme +graphic +.H 1 "halo halocarbon halogen Halpern Halsey Halstead halt halvah" +graphite +grapple +grasp +grass +grassland +grassy +grata +grate +grateful +grater +gratify +gratis +gratitude +gratuitous +gratuity +.IND grave +gravel +graven +Graves +gravestone +graveyard +gravid +gravitate +gravy +gray +graybeard +grayish +Grayson +graywacke +graze +grease +greasy +great +greatcoat +greater +.H 1 "Han Hancock hand handbag handbook handclasp handcuff Handel handful" +grebe +Grecian +Greece +greed +greedy +.IND Greek +green +Greenbelt +Greenberg +.H 1 " granary grand grandchild grandchildren granddaughter grandeur" +Greenblatt +Greenbriar +Greene +greenery +Greenfield +greengrocer +greenhouse +greenish +Greenland +Greensboro +greensward +.H 1 "handgun" +greenware +Greenwich +greenwood +Greer +greet +Greg +gregarious +Gregg +Gregory +.IND gremlin +grenade +Grendel +Grenoble +Gresham +Greta +Gretchen +grew +grey +greyhound +greylag +grid +griddle +gridiron +grief +grievance +grieve +grievous +griffin +Griffith +grill +grille +grilled +grillwork +grim +.IND grimace +Grimaldi +grime +Grimes +Grimm +grin +grind +grindstone +grip +gripe +grippe +grisly +grist +gristmill +Griswold +grit +gritty +grizzle +grizzly +groan +groat +grocer +grocery +groggy +.IND groin +grommet +groom +groove +grope +grosbeak +gross +.H 1 "handicapped handicapper handicapping handicraft handicraftsman" +Grosset +Grossman +Grosvenor +grotesque +Groton +ground +groundsel +groundskeep +groundwork +group +groupoid +grout +grove +grovel +Grover +grow +growl +grown +grownup +.IND growth +grub +grubby +grudge +gruesome +gruff +grumble +Grumman +grunt +gryphon +g's +GSA +GU +Guam +guanidine +guanine +guano +guarantee +guaranteeing +guarantor +guaranty +guard +guardhouse +.IND Guardia +guardian +Guatemala +.IND gubernatorial +Guelph +Guenther +guerdon +guernsey +guerrilla +guess +guesswork +guest +guffaw +Guggenheim +Guiana +guidance +guide +guidebook +guideline +guidepost +guiding +guignol +guild +.H 1 "handicraftsmen handiwork handkerchief handle" +guildhall +guile +Guilford +guillemot +guillotine +guilt +.IND guilty +guinea +guise +guitar +gules +gulf +.H 1 "handleable handlebar handline handmade handmaiden handout" +gull +Gullah +gullet +gullible +gully +gulp +gum +gumbo +gumdrop +gummy +gumption +gumshoe +gun +Gunderson +.IND gunfight +gunfire +gunflint +gunk +gunky +gunman +.IND gunmen +gunnery +gunny +gunplay +gunpowder +gunshot +gunsling +Gunther +gurgle +Gurkha +guru +Gus +gush +gusset +gust +Gustafson +Gustav +Gustave +Gustavus +gusto +gusty +gut +.H 1 "handset" +Gutenberg +Guthrie +gutsy +guttural +.IND guy +Guyana +guzzle +Gwen +Gwyn +gym +gymnasium +gymnast +gymnastic +gymnosperm +gyp +gypsite +gypsum +gypsy +gyrate +gyrfalcon +gyro +.IND gyrocompass +gyroscope +h +ha +Haag +Haas +habeas +haberdashery +Haberman +.IND Habib +habit +habitant +habitat +habitation +habitual +habituate +hacienda +hack +hackberry +Hackett +hackle +hackmatack +.H 1 "handshake handsome handspike handstand handwaving handwrite handwritten" +hackney +hackneyed +hacksaw +had +Hadamard +Haddad +haddock +Hades +Hadley +hadn't +Hadrian +hadron +hafnium +.IND Hagen +Hager +haggard +haggle +Hagstrom +Hague +Hahn +Haifa +haiku +hail +hailstone +hailstorm +Haines +hair +.IND haircut +hairdo +hairpin +hairy +Haiti +Haitian +Hal +halcyon +hale +Haley +half +halfback +.IND halfhearted +halfway +halibut +halide +.H 1 "handy handyman handymen Haney Hanford hang hangable hangar" +Halifax +halite +hall +hallelujah +Halley +hallmark +hallow +Halloween +hallucinate +hallway +halma +halo +halocarbon +halogen +Halpern +Halsey +Halstead +halt +halvah +halve +Halverson +ham +.IND Hamal +Hamburg +hamburger +Hamilton +hamlet +Hamlin +hammerhead +hammock +Hammond +hamper +Hampshire +.IND Hampton +hamster +Han +.H 1 "hangman hangmen hangout hangover hank Hankel Hanley" +Hancock +hand +handbag +handbook +handclasp +handcuff +Handel +handful +handgun +handhold +handicap +handicapped +.IND handicapper +handicapping +handicraft +handicraftsman +handicraftsmen +handiwork +handkerchief +handle +handleable +handlebar +handline +handmade +handmaiden +handout +handset +handshake +handsome +handspike +handstand +handwaving +.H 1 "Hanlon Hanna Hannah Hannibal Hanoi Hanover Hanoverian Hans" +handwrite +handwritten +handy +handyman +handymen +Haney +.IND Hanford +hang +hangable +hangar +hangman +hangmen +hangout +hangover +.IND hank +Hankel +Hanley +Hanlon +Hanna +Hannah +Hannibal +Hanoi +Hanover +Hanoverian +Hans +Hansel +Hansen +hansom +Hanson +Hanukkah +hap +.H 1 "Hansel" +haphazard +.IND haploid +haploidy +haplology +happen +happenstance +happy +Hapsburg +harangue +harass +Harbin +harbinger +Harcourt +hard +hardbake +hardboard +hardboiled +hardcopy +harden +hardhat +Hardin +.H 1 "Hansen hansom Hanson Hanukkah hap haphazard haploid haploidy" +Harding +hardscrabble +hardtack +hardtop +hardware +hardwood +.IND hardworking +hardy +hare +harelip +harem +.IND hark +Harlan +Harlem +Harley +harm +harmful +Harmon +harmonic +harmonica +harmonious +.H 1 "haplology happen happenstance happy Hapsburg harangue harass Harbin" +harmony +harness +Harold +harp +harpoon +harpsichord +Harpy +Harriet +Harriman +Harrington +Harris +.IND Harrisburg +Harrison +harrow +harry +harsh +harshen +hart +Hartford +Hartley +Hartman +Harvard +harvest +harvestman +Harvey +hash +hashish +hasn't +hasp +hassle +hast +haste +hasten +Hastings +hasty +hat +hatch +.IND hatchet +hatchway +.IND hate +hateful +hater +Hatfield +hath +Hathaway +hatred +Hatteras +Hattie +Hattiesburg +Haugen +haughty +haul +haulage +haunch +haunt +Hausdorff +Havana +have +haven +haven't +Havilland +havoc +haw +.IND Hawaii +Hawaiian +hawk +Hawkins +Hawley +hawthorn +.H 2 "hammock Hammond hamper Hampshire Hampton hamster" +Hawthorne +hay +Hayden +Haydn +Hayes +hayfield +Haynes +Hays +haystack +Hayward +hayward +hazard +hazardous +haze +hazel +hazelnut +hazy +he +head +.IND headache +.IND headboard +headdress +headland +headlight +headline +headmaster +headphone +headquarter +headquarters +headroom +headset +headsman +headsmen +headstand +headstone +headstrong +headwall +headwater +headway +headwind +heady +heal +Healey +health +healthful +healthy +.IND Healy +heap +hear +heard +hearken +hearsay +hearse +Hearst +heart +heartbeat +heartbreak +hearten +heartfelt +hearth +hearty +heat +heater +heath +heathen +heathenish +Heathkit +heave +.IND heaven +heavenward +heavy +heavyweight +.IND Hebe +hebephrenic +Hebraic +Hebrew +Hecate +hecatomb +heck +heckle +Heckman +hectic +hector +Hecuba +he'd +hedge +hedgehog +hedonism +hedonist +heed +heel +heft +hefty +Hegelian +hegemony +Heidelberg +heigh +height +.IND heighten +Heine +Heinrich +Heinz +heir +heiress +Heisenberg +held +Helen +Helena +Helene +Helga +helical +helicopter +heliocentric +heliotrope +helium +helix +he'll +.IND hell +hellbender +hellebore +Hellenic +hellfire +hellgrammite +hellish +.IND hello +helm +helmet +.H 1 "Halverson ham Hamal Hamburg hamburger Hamilton hamlet Hamlin hammerhead" +Helmholtz +helmsman +helmsmen +Helmut +help +helpful +helpmate +Helsinki +Helvetica +hem +hematite +Hemingway +hemisphere +hemispheric +hemlock +hemoglobin +hemolytic +hemorrhage +hemorrhoid +hemosiderin +hemp +Hempstead +hen +.IND henbane +hence +henceforth +henchman +henchmen +Henderson +Hendrick +Hendricks +Hendrickson +henequen +Henley +henpeck +Henri +Henrietta +henry +hepatica +.IND hepatitis +Hepburn +heptane +her +Hera +Heraclitus +herald +herb +Herbert +Herculean +.IND Hercules +herd +herdsman +here +hereabout +hereafter +hereby +hereditary +heredity +Hereford +herein +hereinabove +hereinafter +hereinbelow +hereof +heresy +heretic +hereto +heretofore +hereunder +hereunto +herewith +heritable +heritage +Herkimer +Herman +.IND Hermann +hermeneutic +Hermes +hermetic +Hermite +hermitian +Hermosa +Hernandez +hero +Herodotus +heroes +heroic +heroin +.IND heroine +heroism +heron +herpes +herpetology +Herr +herringbone +Herschel +herself +Hershel +Hershey +hertz +Hertzog +.IND hesitant +hesitate +hesitater +Hesperus +Hess +Hesse +Hessian +Hester +heterocyclic +heterodyne +heterogamous +heterogeneity +heterogeneous +heterosexual +heterostructure +heterozygous +Hetman +Hettie +Hetty +Heublein +heuristic +Heusen +Heuser +hew +Hewett +Hewitt +.IND Hewlett +hewn +hex +hexachloride +hexadecimal +hexafluoride +hexagon +hexagonal +hexameter +hexane +.IND hey +heyday +hi +Hiatt +hiatus +Hiawatha +hibachi +Hibbard +hibernate +Hibernia +hick +Hickey +Hickman +hickory +Hicks +hid +.IND hidalgo +hidden +hide +hideaway +hideous +hideout +hierarchal +hierarchic +hierarchy +hieratic +hieroglyphic +Hieronymus +hifalutin +Higgins +high +highball +highboy +highest +highfalutin +highhanded +highland +highlight +highroad +hightail +highway +highwayman +.IND highwaymen +hijack +hijinks +hike +hilarious +hilarity +Hilbert +.IND Hildebrand +hill +hillbilly +Hillcrest +Hillel +hillman +hillmen +hillock +hillside +hilltop +hilly +hilt +Hilton +hilum +him +Himalaya +himself +hind +hindmost +.IND hindrance +hindsight +Hindu +Hinduism +Hines +hinge +Hinman +hint +hinterland +hip +hippo +Hippocrates +Hippocratic +hippodrome +hippopotamus +hippy +hipster +Hiram +hire +hireling +Hiroshi +Hiroshima +Hirsch +hirsute +his +Hispanic +.IND hiss +histamine +histidine +histochemic +.IND histochemistry +histogram +histology +historian +historic +historiography +history +histrionic +hit +Hitachi +hitch +Hitchcock +.H 1 "harbinger" +hither +hitherto +Hitler +hive +ho +hoagie +Hoagland +hoagy +hoar +hoard +.IND hoarfrost +hoarse +hob +Hobart +Hobbes +hobble +Hobbs +hobby +hobbyhorse +hobgoblin +hobo +Hoboken +hoc +hock +hockey +hocus +hodge +hodgepodge +Hodges +Hodgkin +hoe +Hoff +Hoffman +hog +hogan +hogging +.IND hoi +.IND Hokan +Holbrook +Holcomb +hold +holden +holdout +holdover +holdup +hole +holeable +holiday +Holland +Hollandaise +holler +Hollerith +Hollingsworth +Hollister +hollow +Holloway +hollowware +holly +hollyhock +Hollywood +Holm +Holman +.IND Holmdel +Holmes +holmium +holocaust +Holocene +hologram +holography +Holst +Holstein +holster +holt +Holyoke +.IND holystone +.INDP +inject injudicious Injun injunct injunction injure injurious injury +injustice ink inkling inlaid inland inlay inlet Inman inmate inn innards +innate inner innermost innkeeper innocent innocuous innovate innuendo +innumerable inoculate inoffensive inoperable inoperative inopportune +inordinate inorganic input inputting inquest inquire inquiry inquisition +.INITI B ind-data4 foo +.H 1 "halve" +.IND granary +grand +grandchild +grandchildren +granddaughter +grandeur +grandfather +grandiloquent +grandiose +grandma +grandmother +.IND grandnephew +grandniece +grandpa +grandparent +grandson +grandstand +granite +granitic +granny +granola +grant +grantee +grantor +granular +.IND granulate +granule +Granville +grape +.H 2 "grandfather grandiloquent grandiose grandma grandmother grandnephew" +grapefruit +grapevine +graph +grapheme +graphic +.H 1 "halo halocarbon halogen Halpern Halsey Halstead halt halvah" +graphite +grapple +grasp +grass +grassland +grassy +grata +grate +grateful +grater +gratify +gratis +gratitude +gratuitous +gratuity +.IND grave +gravel +graven +Graves +gravestone +graveyard +gravid +gravitate +gravy +gray +graybeard +grayish +Grayson +graywacke +graze +grease +greasy +great +greatcoat +greater +.H 1 "Han Hancock hand handbag handbook handclasp handcuff Handel handful" +grebe +Grecian +Greece +greed +greedy +.IND Greek +green +Greenbelt +Greenberg +.H 1 " granary grand grandchild grandchildren granddaughter grandeur" +Greenblatt +Greenbriar +Greene +greenery +Greenfield +greengrocer +greenhouse +greenish +Greenland +Greensboro +greensward +.H 1 "handgun" +greenware +Greenwich +greenwood +Greer +greet +Greg +gregarious +Gregg +Gregory +.IND gremlin +grenade +Grendel +Grenoble +Gresham +Greta +Gretchen +grew +grey +greyhound +greylag +grid +griddle +gridiron +grief +grievance +grieve +grievous +griffin +Griffith +grill +grille +grilled +grillwork +grim +.IND grimace +Grimaldi +grime +Grimes +Grimm +grin +grind +grindstone +grip +gripe +grippe +grisly +grist +gristmill +Griswold +grit +gritty +grizzle +grizzly +groan +groat +grocer +grocery +groggy +.IND groin +grommet +groom +groove +grope +grosbeak +gross +.H 1 "handicapped handicapper handicapping handicraft handicraftsman" +Grosset +Grossman +Grosvenor +grotesque +Groton +ground +groundsel +groundskeep +groundwork +group +groupoid +grout +grove +grovel +Grover +grow +growl +grown +grownup +.IND growth +grub +grubby +grudge +gruesome +gruff +grumble +Grumman +grunt +gryphon +g's +GSA +GU +Guam +guanidine +guanine +guano +guarantee +guaranteeing +guarantor +guaranty +guard +guardhouse +.IND Guardia +guardian +Guatemala +.IND gubernatorial +Guelph +Guenther +guerdon +guernsey +guerrilla +guess +guesswork +guest +guffaw +Guggenheim +Guiana +guidance +guide +guidebook +guideline +guidepost +guiding +guignol +guild +.H 1 "handicraftsmen handiwork handkerchief handle" +guildhall +guile +Guilford +guillemot +guillotine +guilt +.IND guilty +guinea +guise +guitar +gules +gulf +.H 1 "handleable handlebar handline handmade handmaiden handout" +gull +Gullah +gullet +gullible +gully +gulp +gum +gumbo +gumdrop +gummy +gumption +gumshoe +gun +Gunderson +.IND gunfight +gunfire +gunflint +gunk +gunky +gunman +.IND gunmen +gunnery +gunny +gunplay +gunpowder +gunshot +gunsling +Gunther +gurgle +Gurkha +guru +Gus +gush +gusset +gust +Gustafson +Gustav +Gustave +Gustavus +gusto +gusty +gut +.H 1 "handset" +Gutenberg +Guthrie +gutsy +guttural +.IND guy +Guyana +guzzle +Gwen +Gwyn +gym +gymnasium +gymnast +gymnastic +gymnosperm +gyp +gypsite +gypsum +gypsy +gyrate +gyrfalcon +gyro +.IND gyrocompass +gyroscope +h +ha +Haag +Haas +habeas +haberdashery +Haberman +.IND Habib +habit +habitant +habitat +habitation +habitual +habituate +hacienda +hack +hackberry +Hackett +hackle +hackmatack +.H 1 "handshake handsome handspike handstand handwaving handwrite handwritten" +hackney +hackneyed +hacksaw +had +Hadamard +Haddad +haddock +Hades +Hadley +hadn't +Hadrian +hadron +hafnium +.IND Hagen +Hager +haggard +haggle +Hagstrom +Hague +Hahn +Haifa +haiku +hail +hailstone +hailstorm +Haines +hair +.IND haircut +hairdo +hairpin +hairy +Haiti +Haitian +Hal +halcyon +hale +Haley +half +halfback +.IND halfhearted +halfway +halibut +halide +.H 1 "handy handyman handymen Haney Hanford hang hangable hangar" +Halifax +halite +hall +hallelujah +Halley +hallmark +hallow +Halloween +hallucinate +hallway +halma +halo +halocarbon +halogen +Halpern +Halsey +Halstead +halt +halvah +halve +Halverson +ham +.IND Hamal +Hamburg +hamburger +Hamilton +hamlet +Hamlin +hammerhead +hammock +Hammond +hamper +Hampshire +.IND Hampton +hamster +Han +.H 1 "hangman hangmen hangout hangover hank Hankel Hanley" +Hancock +hand +handbag +handbook +handclasp +handcuff +Handel +handful +handgun +handhold +handicap +handicapped +.IND handicapper +handicapping +handicraft +handicraftsman +handicraftsmen +handiwork +handkerchief +handle +handleable +handlebar +handline +handmade +handmaiden +handout +handset +handshake +handsome +handspike +handstand +handwaving +.H 1 "Hanlon Hanna Hannah Hannibal Hanoi Hanover Hanoverian Hans" +handwrite +handwritten +handy +handyman +handymen +Haney +.IND Hanford +hang +hangable +hangar +hangman +hangmen +hangout +hangover +.IND hank +Hankel +Hanley +Hanlon +Hanna +Hannah +Hannibal +Hanoi +Hanover +Hanoverian +Hans +Hansel +Hansen +hansom +Hanson +Hanukkah +hap +.H 1 "Hansel" +haphazard +.IND haploid +haploidy +haplology +happen +happenstance +happy +Hapsburg +harangue +harass +Harbin +harbinger +Harcourt +hard +hardbake +hardboard +hardboiled +hardcopy +harden +hardhat +Hardin +.H 1 "Hansen hansom Hanson Hanukkah hap haphazard haploid haploidy" +Harding +hardscrabble +hardtack +hardtop +hardware +hardwood +.IND hardworking +hardy +hare +harelip +harem +.IND hark +Harlan +Harlem +Harley +harm +harmful +Harmon +harmonic +harmonica +harmonious +.H 1 "haplology happen happenstance happy Hapsburg harangue harass Harbin" +harmony +harness +Harold +harp +harpoon +harpsichord +Harpy +Harriet +Harriman +Harrington +Harris +.IND Harrisburg +Harrison +harrow +harry +harsh +harshen +hart +Hartford +Hartley +Hartman +Harvard +harvest +harvestman +Harvey +hash +hashish +hasn't +hasp +hassle +hast +haste +hasten +Hastings +hasty +hat +hatch +.IND hatchet +hatchway +.IND hate +hateful +hater +Hatfield +hath +Hathaway +hatred +Hatteras +Hattie +Hattiesburg +Haugen +haughty +haul +haulage +haunch +haunt +Hausdorff +Havana +have +haven +haven't +Havilland +havoc +haw +.IND Hawaii +Hawaiian +hawk +Hawkins +Hawley +hawthorn +.H 2 "hammock Hammond hamper Hampshire Hampton hamster" +Hawthorne +hay +Hayden +Haydn +Hayes +hayfield +Haynes +Hays +haystack +Hayward +hayward +hazard +hazardous +haze +hazel +hazelnut +hazy +he +head +.IND headache +.IND headboard +headdress +headland +headlight +headline +headmaster +headphone +headquarter +headquarters +headroom +headset +headsman +headsmen +headstand +headstone +headstrong +headwall +headwater +headway +headwind +heady +heal +Healey +health +healthful +healthy +.IND Healy +heap +hear +heard +hearken +hearsay +hearse +Hearst +heart +heartbeat +heartbreak +hearten +heartfelt +hearth +hearty +heat +heater +heath +heathen +heathenish +Heathkit +heave +.IND heaven +heavenward +heavy +heavyweight +.IND Hebe +hebephrenic +Hebraic +Hebrew +Hecate +hecatomb +heck +heckle +Heckman +hectic +hector +Hecuba +he'd +hedge +hedgehog +hedonism +hedonist +heed +heel +heft +hefty +Hegelian +hegemony +Heidelberg +heigh +height +.IND heighten +Heine +Heinrich +Heinz +heir +heiress +Heisenberg +held +Helen +Helena +Helene +Helga +helical +helicopter +heliocentric +heliotrope +helium +helix +he'll +.IND hell +hellbender +hellebore +Hellenic +hellfire +hellgrammite +hellish +.IND hello +helm +helmet +.H 1 "Halverson ham Hamal Hamburg hamburger Hamilton hamlet Hamlin hammerhead" +Helmholtz +helmsman +helmsmen +Helmut +help +helpful +helpmate +Helsinki +Helvetica +hem +hematite +Hemingway +hemisphere +hemispheric +hemlock +hemoglobin +hemolytic +hemorrhage +hemorrhoid +hemosiderin +hemp +Hempstead +hen +.IND henbane +hence +henceforth +henchman +henchmen +Henderson +Hendrick +Hendricks +Hendrickson +henequen +Henley +henpeck +Henri +Henrietta +henry +hepatica +.IND hepatitis +Hepburn +heptane +her +Hera +Heraclitus +herald +herb +Herbert +Herculean +.IND Hercules +herd +herdsman +here +hereabout +hereafter +hereby +hereditary +heredity +Hereford +herein +hereinabove +hereinafter +hereinbelow +hereof +heresy +heretic +hereto +heretofore +hereunder +hereunto +herewith +heritable +heritage +Herkimer +Herman +.IND Hermann +hermeneutic +Hermes +hermetic +Hermite +hermitian +Hermosa +Hernandez +hero +Herodotus +heroes +heroic +heroin +.IND heroine +heroism +heron +herpes +herpetology +Herr +herringbone +Herschel +herself +Hershel +Hershey +hertz +Hertzog +.IND hesitant +hesitate +hesitater +Hesperus +Hess +Hesse +Hessian +Hester +heterocyclic +heterodyne +heterogamous +heterogeneity +heterogeneous +heterosexual +heterostructure +heterozygous +Hetman +Hettie +Hetty +Heublein +heuristic +Heusen +Heuser +hew +Hewett +Hewitt +.IND Hewlett +hewn +hex +hexachloride +hexadecimal +hexafluoride +hexagon +hexagonal +hexameter +hexane +.IND hey +heyday +hi +Hiatt +hiatus +Hiawatha +hibachi +Hibbard +hibernate +Hibernia +hick +Hickey +Hickman +hickory +Hicks +hid +.IND hidalgo +hidden +hide +hideaway +hideous +hideout +hierarchal +hierarchic +hierarchy +hieratic +hieroglyphic +Hieronymus +hifalutin +Higgins +high +highball +highboy +highest +highfalutin +highhanded +highland +highlight +highroad +hightail +highway +highwayman +.IND highwaymen +hijack +hijinks +hike +hilarious +hilarity +Hilbert +.IND Hildebrand +hill +hillbilly +Hillcrest +Hillel +hillman +hillmen +hillock +hillside +hilltop +hilly +hilt +Hilton +hilum +him +Himalaya +himself +hind +hindmost +.IND hindrance +hindsight +Hindu +Hinduism +Hines +hinge +Hinman +hint +hinterland +hip +hippo +Hippocrates +Hippocratic +hippodrome +hippopotamus +hippy +hipster +Hiram +hire +hireling +Hiroshi +Hiroshima +Hirsch +hirsute +his +Hispanic +.IND hiss +histamine +histidine +histochemic +.IND histochemistry +histogram +histology +historian +historic +historiography +history +histrionic +hit +Hitachi +hitch +Hitchcock +.H 1 "harbinger" +hither +hitherto +Hitler +hive +ho +hoagie +Hoagland +hoagy +hoar +hoard +.IND hoarfrost +hoarse +hob +Hobart +Hobbes +hobble +Hobbs +hobby +hobbyhorse +hobgoblin +hobo +Hoboken +hoc +hock +hockey +hocus +hodge +hodgepodge +Hodges +Hodgkin +hoe +Hoff +Hoffman +hog +hogan +hogging +.IND hoi +.IND Hokan +Holbrook +Holcomb +hold +holden +holdout +holdover +holdup +hole +holeable +holiday +Holland +Hollandaise +holler +Hollerith +Hollingsworth +Hollister +hollow +Holloway +hollowware +holly +hollyhock +Hollywood +Holm +Holman +.IND Holmdel +Holmes +holmium +holocaust +Holocene +hologram +holography +Holst +Holstein +holster +holt +Holyoke +.IND holystone +.INDP +inject injudicious Injun injunct injunction injure injurious injury +injustice ink inkling inlaid inland inlay inlet Inman inmate inn innards +innate inner innermost innkeeper innocent innocuous innovate innuendo +innumerable inoculate inoffensive inoperable inoperative inopportune +inordinate inorganic input inputting inquest inquire inquiry inquisition diff --git a/contrib/mm/examples/LT b/contrib/mm/examples/LT new file mode 100644 index 0000000..2dbf189 --- /dev/null +++ b/contrib/mm/examples/LT @@ -0,0 +1,1065 @@ +.\" -*- nroff -*- +.\" Copyright (C) 1989-2014 Free Software Foundation, Inc. +.\" +.\" Copying and distribution of this file, with or without modification, +.\" are permitted in any medium without royalty provided the copyright +.\" notice and this notice are preserved. +. +.ND 1994-10-26 +.\" .WA "Nisse Nilsson" notitle +.\" .WE +.WA "Sven Olsson" title +Return address +Street +City, State Zip Code +Text +.WE +.IA "Inside address" title +Addressee name XXXXXXX +Title XXXXXXXXXXXXXXX +Company xxxxxxxxxxxx +Street xxxxxxxxxxxxxx +City, State Zip Code +Text xxxxxxxxxxxxxxxxxx +.IE +.LO CN +.LO RN "referens" +.LO AT Attention +.LO SA "Hej hopp" +.LO SJ "Subject line" +.LT BL +hepp +granary +grand +grandchild +grandchildren +granddaughter +grandeur +grandfather +grandiloquent +grandiose +grandma +grandmother +grandnephew +grandniece +grandpa +grandparent +grandson +grandstand +granite +granitic +granny +granola +grant +grantee +grantor +granular +granulate +granule +Granville +grape +grapefruit +grapevine +graph +grapheme +graphic +graphite +grapple +grasp +grass +grassland +grassy +grata +grate +grateful +grater +gratify +gratis +gratitude +gratuitous +gratuity +grave +gravel +graven +Graves +gravestone +graveyard +gravid +gravitate +gravy +gray +graybeard +grayish +Grayson +graywacke +graze +grease +greasy +great +greatcoat +greater +grebe +Grecian +Greece +greed +greedy +Greek +green +Greenbelt +Greenberg +Greenblatt +Greenbriar +Greene +greenery +Greenfield +greengrocer +greenhouse +greenish +Greenland +Greensboro +greensward +greenware +Greenwich +greenwood +Greer +greet +Greg +gregarious +Gregg +Gregory +gremlin +grenade +Grendel +Grenoble +Gresham +Greta +Gretchen +grew +grey +greyhound +greylag +grid +griddle +gridiron +grief +grievance +grieve +grievous +griffin +Griffith +grill +grille +grilled +grillwork +grim +grimace +Grimaldi +grime +Grimes +Grimm +grin +grind +grindstone +grip +.P +gripe +grippe +grisly +grist +gristmill +Griswold +grit +gritty +grizzle +grizzly +groan +groat +grocer +grocery +groggy +groin +grommet +groom +groove +grope +grosbeak +gross +Grosset +Grossman +Grosvenor +grotesque +Groton +ground +groundsel +groundskeep +groundwork +group +groupoid +grout +grove +grovel +Grover +grow +growl +grown +grownup +growth +grub +grubby +grudge +gruesome +gruff +grumble +Grumman +grunt +gryphon +g's +GSA +GU +Guam +guanidine +guanine +guano +guarantee +guaranteeing +guarantor +guaranty +guard +guardhouse +Guardia +guardian +Guatemala +gubernatorial +Guelph +Guenther +guerdon +guernsey +guerrilla +guess +guesswork +guest +guffaw +Guggenheim +Guiana +guidance +guide +guidebook +guideline +guidepost +guiding +guignol +guild +guildhall +guile +Guilford +guillemot +guillotine +guilt +guilty +guinea +guise +guitar +gules +gulf +gull +Gullah +gullet +gullible +gully +gulp +gum +gumbo +gumdrop +gummy +gumption +gumshoe +gun +Gunderson +gunfight +gunfire +gunflint +gunk +gunky +gunman +gunmen +gunnery +gunny +gunplay +gunpowder +gunshot +gunsling +Gunther +gurgle +Gurkha +guru +Gus +gush +gusset +gust +Gustafson +Gustav +Gustave +Gustavus +gusto +gusty +gut +Gutenberg +Guthrie +gutsy +guttural +guy +.P +Guyana +guzzle +Gwen +Gwyn +gym +gymnasium +gymnast +gymnastic +gymnosperm +gyp +gypsite +gypsum +gypsy +gyrate +gyrfalcon +gyro +gyrocompass +gyroscope +h +ha +Haag +Haas +habeas +haberdashery +Haberman +Habib +habit +habitant +habitat +habitation +habitual +habituate +hacienda +hack +hackberry +Hackett +hackle +hackmatack +hackney +hackneyed +hacksaw +had +Hadamard +Haddad +haddock +Hades +Hadley +hadn't +Hadrian +hadron +hafnium +Hagen +Hager +haggard +haggle +Hagstrom +Hague +Hahn +Haifa +haiku +hail +hailstone +hailstorm +Haines +hair +haircut +hairdo +hairpin +hairy +Haiti +Haitian +Hal +halcyon +hale +Haley +half +halfback +halfhearted +halfway +halibut +halide +Halifax +halite +hall +hallelujah +Halley +hallmark +hallow +Halloween +hallucinate +hallway +halma +halo +halocarbon +halogen +Halpern +Halsey +Halstead +halt +halvah +halve +Halverson +ham +Hamal +Hamburg +hamburger +Hamilton +hamlet +Hamlin +hammerhead +hammock +Hammond +hamper +Hampshire +Hampton +hamster +Han +Hancock +hand +handbag +handbook +handclasp +handcuff +Handel +handful +handgun +handhold +handicap +handicapped +handicapper +handicapping +handicraft +handicraftsman +handicraftsmen +handiwork +handkerchief +handle +handleable +handlebar +handline +handmade +handmaiden +handout +handset +handshake +handsome +handspike +handstand +handwaving +handwrite +handwritten +handy +handyman +handymen +Haney +Hanford +hang +hangable +hangar +hangman +hangmen +hangout +hangover +hank +Hankel +Hanley +Hanlon +Hanna +Hannah +Hannibal +Hanoi +Hanover +Hanoverian +Hans +Hansel +Hansen +hansom +Hanson +Hanukkah +hap +haphazard +haploid +haploidy +haplology +happen +happenstance +happy +Hapsburg +harangue +harass +Harbin +harbinger +Harcourt +hard +hardbake +hardboard +hardboiled +hardcopy +harden +hardhat +Hardin +Harding +hardscrabble +hardtack +hardtop +hardware +hardwood +hardworking +hardy +hare +harelip +harem +hark +Harlan +Harlem +Harley +harm +harmful +Harmon +harmonic +harmonica +harmonious +harmony +harness +Harold +harp +harpoon +harpsichord +Harpy +Harriet +Harriman +Harrington +Harris +Harrisburg +Harrison +harrow +harry +harsh +harshen +hart +Hartford +Hartley +Hartman +Harvard +.P +harvest +harvestman +Harvey +hash +hashish +hasn't +hasp +hassle +hast +haste +hasten +Hastings +hasty +hat +hatch +hatchet +hatchway +hate +hateful +hater +Hatfield +hath +Hathaway +hatred +Hatteras +Hattie +Hattiesburg +Haugen +haughty +haul +haulage +haunch +haunt +Hausdorff +Havana +have +haven +haven't +Havilland +havoc +haw +Hawaii +Hawaiian +hawk +Hawkins +Hawley +hawthorn +Hawthorne +hay +Hayden +Haydn +Hayes +hayfield +Haynes +Hays +haystack +Hayward +hayward +hazard +hazardous +haze +hazel +hazelnut +hazy +he +head +headache +headboard +headdress +headland +headlight +headline +headmaster +headphone +headquarter +headquarters +headroom +headset +headsman +headsmen +headstand +headstone +headstrong +headwall +headwater +headway +headwind +heady +heal +Healey +health +healthful +healthy +Healy +heap +hear +heard +hearken +hearsay +hearse +Hearst +heart +heartbeat +heartbreak +hearten +heartfelt +hearth +hearty +heat +heater +heath +heathen +heathenish +Heathkit +heave +heaven +heavenward +heavy +heavyweight +Hebe +hebephrenic +Hebraic +Hebrew +Hecate +hecatomb +heck +heckle +Heckman +hectic +hector +Hecuba +he'd +hedge +hedgehog +hedonism +hedonist +heed +heel +heft +hefty +Hegelian +hegemony +Heidelberg +heigh +height +heighten +Heine +Heinrich +Heinz +heir +heiress +Heisenberg +held +Helen +Helena +Helene +Helga +helical +helicopter +heliocentric +heliotrope +helium +helix +he'll +hell +hellbender +hellebore +Hellenic +hellfire +hellgrammite +hellish +hello +helm +helmet +Helmholtz +helmsman +helmsmen +Helmut +help +helpful +helpmate +Helsinki +Helvetica +hem +hematite +Hemingway +hemisphere +hemispheric +hemlock +hemoglobin +hemolytic +hemorrhage +hemorrhoid +hemosiderin +hemp +Hempstead +hen +henbane +hence +henceforth +henchman +henchmen +Henderson +Hendrick +Hendricks +Hendrickson +henequen +Henley +henpeck +Henri +Henrietta +henry +hepatica +hepatitis +Hepburn +heptane +her +Hera +Heraclitus +herald +herb +Herbert +Herculean +Hercules +herd +herdsman +here +hereabout +hereafter +hereby +hereditary +heredity +Hereford +herein +hereinabove +hereinafter +hereinbelow +hereof +heresy +heretic +hereto +heretofore +hereunder +hereunto +.P +herewith +heritable +heritage +Herkimer +Herman +Hermann +hermeneutic +Hermes +hermetic +Hermite +hermitian +Hermosa +Hernandez +hero +Herodotus +heroes +heroic +heroin +heroine +heroism +heron +herpes +herpetology +Herr +herringbone +Herschel +herself +Hershel +Hershey +hertz +Hertzog +hesitant +hesitate +hesitater +Hesperus +Hess +Hesse +Hessian +Hester +heterocyclic +heterodyne +heterogamous +heterogeneity +heterogeneous +heterosexual +heterostructure +heterozygous +Hetman +Hettie +Hetty +Heublein +heuristic +Heusen +Heuser +hew +Hewett +Hewitt +Hewlett +hewn +hex +hexachloride +hexadecimal +hexafluoride +hexagon +hexagonal +hexameter +hexane +hey +heyday +hi +Hiatt +hiatus +Hiawatha +hibachi +Hibbard +hibernate +Hibernia +hick +Hickey +Hickman +hickory +Hicks +hid +hidalgo +hidden +hide +hideaway +hideous +hideout +hierarchal +hierarchic +hierarchy +hieratic +hieroglyphic +Hieronymus +hifalutin +Higgins +high +highball +highboy +highest +highfalutin +highhanded +highland +highlight +highroad +hightail +highway +highwayman +highwaymen +hijack +hijinks +hike +hilarious +hilarity +Hilbert +Hildebrand +hill +hillbilly +Hillcrest +Hillel +hillman +hillmen +hillock +hillside +hilltop +hilly +hilt +Hilton +hilum +him +Himalaya +himself +hind +hindmost +hindrance +hindsight +Hindu +Hinduism +Hines +hinge +Hinman +hint +hinterland +hip +hippo +Hippocrates +Hippocratic +hippodrome +hippopotamus +hippy +hipster +Hiram +hire +hireling +Hiroshi +Hiroshima +Hirsch +hirsute +his +Hispanic +hiss +histamine +histidine +histochemic +histochemistry +histogram +histology +historian +historic +historiography +history +histrionic +hit +Hitachi +hitch +Hitchcock +hither +hitherto +Hitler +hive +ho +hoagie +Hoagland +hoagy +hoar +hoard +hoarfrost +hoarse +hob +Hobart +Hobbes +hobble +Hobbs +hobby +.P +hobbyhorse +hobgoblin +hobo +Hoboken +hoc +hock +hockey +hocus +hodge +hodgepodge +Hodges +Hodgkin +hoe +Hoff +Hoffman +hog +hogan +hogging +hoi +Hokan +Holbrook +Holcomb +hold +holden +holdout +holdover +holdup +hole +holeable +holiday +Holland +Hollandaise +holler +Hollerith +Hollingsworth +Hollister +hollow +Holloway +hollowware +holly +hollyhock +Hollywood +Holm +Holman +Holmdel +Holmes +holmium +holocaust +Holocene +hologram +holography +Holst +Holstein +holster +holt +Holyoke +holystone +.FC +.SG +.NS 7 +text text text +text text text +.NS 12 +Holyoke +holystone +.NS +holt +.NE diff --git a/contrib/mm/examples/LT.se b/contrib/mm/examples/LT.se new file mode 100644 index 0000000..6635c70 --- /dev/null +++ b/contrib/mm/examples/LT.se @@ -0,0 +1,1069 @@ +.\" -*- nroff -*- +.\" Copyright (C) 1989-2014 Free Software Foundation, Inc. +.\" +.\" Copying and distribution of this file, with or without modification, +.\" are permitted in any medium without royalty provided the copyright +.\" notice and this notice are preserved. +. +.\" groff -mmse LT.se +.ND 1994-10-26 +.WA "Sven Olsson" title +Return address +Street +City, State Zip Code +Text +.WE +.IA "Inside address" title +Addressee name XXXXXXX +Title XXXXXXXXXXXXXXX +Company xxxxxxxxxxxx +Street xxxxxxxxxxxxxx +City, State Zip Code +Text xxxxxxxxxxxxxxxxxx +.IE +.LO DNAMN Dokumentnamn +.LO MDAT 1994-01-01 +.LO BIL 2 +.LO KOMP Kompletteringsuppgift +.LO DBET dokumentnummer +.LO BET ärendebeteckning +.LO MBET "Mottagarens b" +.LO SIDOR 22 +.\" vänster eller högerställt brev +.\" .LT SVH +.LT SVV +hepp +granary +grand +grandchild +grandchildren +granddaughter +grandeur +grandfather +grandiloquent +grandiose +grandma +grandmother +grandnephew +grandniece +grandpa +grandparent +grandson +grandstand +granite +granitic +granny +granola +grant +grantee +grantor +granular +granulate +granule +Granville +grape +grapefruit +grapevine +graph +grapheme +graphic +graphite +grapple +grasp +grass +grassland +grassy +grata +grate +grateful +grater +gratify +gratis +gratitude +gratuitous +gratuity +grave +gravel +graven +Graves +gravestone +graveyard +gravid +gravitate +gravy +gray +graybeard +grayish +Grayson +graywacke +graze +grease +greasy +great +greatcoat +greater +grebe +Grecian +Greece +greed +greedy +Greek +green +Greenbelt +Greenberg +Greenblatt +Greenbriar +Greene +greenery +Greenfield +greengrocer +greenhouse +greenish +Greenland +Greensboro +greensward +greenware +Greenwich +greenwood +Greer +greet +Greg +gregarious +Gregg +Gregory +gremlin +grenade +Grendel +Grenoble +Gresham +Greta +Gretchen +grew +grey +greyhound +greylag +grid +griddle +gridiron +grief +grievance +grieve +grievous +griffin +Griffith +grill +grille +grilled +grillwork +grim +grimace +Grimaldi +grime +Grimes +Grimm +grin +grind +grindstone +grip +.P +gripe +grippe +grisly +grist +gristmill +Griswold +grit +gritty +grizzle +grizzly +groan +groat +grocer +grocery +groggy +groin +grommet +groom +groove +grope +grosbeak +gross +Grosset +Grossman +Grosvenor +grotesque +Groton +ground +groundsel +groundskeep +groundwork +group +groupoid +grout +grove +grovel +Grover +grow +growl +grown +grownup +growth +grub +grubby +grudge +gruesome +gruff +grumble +Grumman +grunt +gryphon +g's +GSA +GU +Guam +guanidine +guanine +guano +guarantee +guaranteeing +guarantor +guaranty +guard +guardhouse +Guardia +guardian +Guatemala +gubernatorial +Guelph +Guenther +guerdon +guernsey +guerrilla +guess +guesswork +guest +guffaw +Guggenheim +Guiana +guidance +guide +guidebook +guideline +guidepost +guiding +guignol +guild +guildhall +guile +Guilford +guillemot +guillotine +guilt +guilty +guinea +guise +guitar +gules +gulf +gull +Gullah +gullet +gullible +gully +gulp +gum +gumbo +gumdrop +gummy +gumption +gumshoe +gun +Gunderson +gunfight +gunfire +gunflint +gunk +gunky +gunman +gunmen +gunnery +gunny +gunplay +gunpowder +gunshot +gunsling +Gunther +gurgle +Gurkha +guru +Gus +gush +gusset +gust +Gustafson +Gustav +Gustave +Gustavus +gusto +gusty +gut +Gutenberg +Guthrie +gutsy +guttural +guy +.P +Guyana +guzzle +Gwen +Gwyn +gym +gymnasium +gymnast +gymnastic +gymnosperm +gyp +gypsite +gypsum +gypsy +gyrate +gyrfalcon +gyro +gyrocompass +gyroscope +h +ha +Haag +Haas +habeas +haberdashery +Haberman +Habib +habit +habitant +habitat +habitation +habitual +habituate +hacienda +hack +hackberry +Hackett +hackle +hackmatack +hackney +hackneyed +hacksaw +had +Hadamard +Haddad +haddock +Hades +Hadley +hadn't +Hadrian +hadron +hafnium +Hagen +Hager +haggard +haggle +Hagstrom +Hague +Hahn +Haifa +haiku +hail +hailstone +hailstorm +Haines +hair +haircut +hairdo +hairpin +hairy +Haiti +Haitian +Hal +halcyon +hale +Haley +half +halfback +halfhearted +halfway +halibut +halide +Halifax +halite +hall +hallelujah +Halley +hallmark +hallow +Halloween +hallucinate +hallway +halma +halo +halocarbon +halogen +Halpern +Halsey +Halstead +halt +halvah +halve +Halverson +ham +Hamal +Hamburg +hamburger +Hamilton +hamlet +Hamlin +hammerhead +hammock +Hammond +hamper +Hampshire +Hampton +hamster +Han +Hancock +hand +handbag +handbook +handclasp +handcuff +Handel +handful +handgun +handhold +handicap +handicapped +handicapper +handicapping +handicraft +handicraftsman +handicraftsmen +handiwork +handkerchief +handle +handleable +handlebar +handline +handmade +handmaiden +handout +handset +handshake +handsome +handspike +handstand +handwaving +handwrite +handwritten +handy +handyman +handymen +Haney +Hanford +hang +hangable +hangar +hangman +hangmen +hangout +hangover +hank +Hankel +Hanley +Hanlon +Hanna +Hannah +Hannibal +Hanoi +Hanover +Hanoverian +Hans +Hansel +Hansen +hansom +Hanson +Hanukkah +hap +haphazard +haploid +haploidy +haplology +happen +happenstance +happy +Hapsburg +harangue +harass +Harbin +harbinger +Harcourt +hard +hardbake +hardboard +hardboiled +hardcopy +harden +hardhat +Hardin +Harding +hardscrabble +hardtack +hardtop +hardware +hardwood +hardworking +hardy +hare +harelip +harem +hark +Harlan +Harlem +Harley +harm +harmful +Harmon +harmonic +harmonica +harmonious +harmony +harness +Harold +harp +harpoon +harpsichord +Harpy +Harriet +Harriman +Harrington +Harris +Harrisburg +Harrison +harrow +harry +harsh +harshen +hart +Hartford +Hartley +Hartman +Harvard +.P +harvest +harvestman +Harvey +hash +hashish +hasn't +hasp +hassle +hast +haste +hasten +Hastings +hasty +hat +hatch +hatchet +hatchway +hate +hateful +hater +Hatfield +hath +Hathaway +hatred +Hatteras +Hattie +Hattiesburg +Haugen +haughty +haul +haulage +haunch +haunt +Hausdorff +Havana +have +haven +haven't +Havilland +havoc +haw +Hawaii +Hawaiian +hawk +Hawkins +Hawley +hawthorn +Hawthorne +hay +Hayden +Haydn +Hayes +hayfield +Haynes +Hays +haystack +Hayward +hayward +hazard +hazardous +haze +hazel +hazelnut +hazy +he +head +headache +headboard +headdress +headland +headlight +headline +headmaster +headphone +headquarter +headquarters +headroom +headset +headsman +headsmen +headstand +headstone +headstrong +headwall +headwater +headway +headwind +heady +heal +Healey +health +healthful +healthy +Healy +heap +hear +heard +hearken +hearsay +hearse +Hearst +heart +heartbeat +heartbreak +hearten +heartfelt +hearth +hearty +heat +heater +heath +heathen +heathenish +Heathkit +heave +heaven +heavenward +heavy +heavyweight +Hebe +hebephrenic +Hebraic +Hebrew +Hecate +hecatomb +heck +heckle +Heckman +hectic +hector +Hecuba +he'd +hedge +hedgehog +hedonism +hedonist +heed +heel +heft +hefty +Hegelian +hegemony +Heidelberg +heigh +height +heighten +Heine +Heinrich +Heinz +heir +heiress +Heisenberg +held +Helen +Helena +Helene +Helga +helical +helicopter +heliocentric +heliotrope +helium +helix +he'll +hell +hellbender +hellebore +Hellenic +hellfire +hellgrammite +hellish +hello +helm +helmet +Helmholtz +helmsman +helmsmen +Helmut +help +helpful +helpmate +Helsinki +Helvetica +hem +hematite +Hemingway +hemisphere +hemispheric +hemlock +hemoglobin +hemolytic +hemorrhage +hemorrhoid +hemosiderin +hemp +Hempstead +hen +henbane +hence +henceforth +henchman +henchmen +Henderson +Hendrick +Hendricks +Hendrickson +henequen +Henley +henpeck +Henri +Henrietta +henry +hepatica +hepatitis +Hepburn +heptane +her +Hera +Heraclitus +herald +herb +Herbert +Herculean +Hercules +herd +herdsman +here +hereabout +hereafter +hereby +hereditary +heredity +Hereford +herein +hereinabove +hereinafter +hereinbelow +hereof +heresy +heretic +hereto +heretofore +hereunder +hereunto +.P +herewith +heritable +heritage +Herkimer +Herman +Hermann +hermeneutic +Hermes +hermetic +Hermite +hermitian +Hermosa +Hernandez +hero +Herodotus +heroes +heroic +heroin +heroine +heroism +heron +herpes +herpetology +Herr +herringbone +Herschel +herself +Hershel +Hershey +hertz +Hertzog +hesitant +hesitate +hesitater +Hesperus +Hess +Hesse +Hessian +Hester +heterocyclic +heterodyne +heterogamous +heterogeneity +heterogeneous +heterosexual +heterostructure +heterozygous +Hetman +Hettie +Hetty +Heublein +heuristic +Heusen +Heuser +hew +Hewett +Hewitt +Hewlett +hewn +hex +hexachloride +hexadecimal +hexafluoride +hexagon +hexagonal +hexameter +hexane +hey +heyday +hi +Hiatt +hiatus +Hiawatha +hibachi +Hibbard +hibernate +Hibernia +hick +Hickey +Hickman +hickory +Hicks +hid +hidalgo +hidden +hide +hideaway +hideous +hideout +hierarchal +hierarchic +hierarchy +hieratic +hieroglyphic +Hieronymus +hifalutin +Higgins +high +highball +highboy +highest +highfalutin +highhanded +highland +highlight +highroad +hightail +highway +highwayman +highwaymen +hijack +hijinks +hike +hilarious +hilarity +Hilbert +Hildebrand +hill +hillbilly +Hillcrest +Hillel +hillman +hillmen +hillock +hillside +hilltop +hilly +hilt +Hilton +hilum +him +Himalaya +himself +hind +hindmost +hindrance +hindsight +Hindu +Hinduism +Hines +hinge +Hinman +hint +hinterland +hip +hippo +Hippocrates +Hippocratic +hippodrome +hippopotamus +hippy +hipster +Hiram +hire +hireling +Hiroshi +Hiroshima +Hirsch +hirsute +his +Hispanic +hiss +histamine +histidine +histochemic +histochemistry +histogram +histology +historian +historic +historiography +history +histrionic +hit +Hitachi +hitch +Hitchcock +hither +hitherto +Hitler +hive +ho +hoagie +Hoagland +hoagy +hoar +hoard +hoarfrost +hoarse +hob +Hobart +Hobbes +hobble +Hobbs +hobby +.P +hobbyhorse +hobgoblin +hobo +Hoboken +hoc +hock +hockey +hocus +hodge +hodgepodge +Hodges +Hodgkin +hoe +Hoff +Hoffman +hog +hogan +hogging +hoi +Hokan +Holbrook +Holcomb +hold +holden +holdout +holdover +holdup +hole +holeable +holiday +Holland +Hollandaise +holler +Hollerith +Hollingsworth +Hollister +hollow +Holloway +hollowware +holly +hollyhock +Hollywood +Holm +Holman +Holmdel +Holmes +holmium +holocaust +Holocene +hologram +holography +Holst +Holstein +holster +holt +Holyoke +holystone +.FC +.SG +.NS 7 +text text text +text text text +.NS 12 +Holyoke +holystone +.NS +holt +.NE diff --git a/contrib/mm/examples/ML b/contrib/mm/examples/ML new file mode 100644 index 0000000..3ca16ad --- /dev/null +++ b/contrib/mm/examples/ML @@ -0,0 +1,176 @@ +.\" -*- nroff -*- +.\" Copyright (C) 1989-2014 Free Software Foundation, Inc. +.\" +.\" Copying and distribution of this file, with or without modification, +.\" are permitted in any medium without royalty provided the copyright +.\" notice and this notice are preserved. +. +granary +grand +grandchild +grandchildren +granddaughter +grandeur +grandfather +grandiloquent +grandiose +grandma +grandmother +grandnephew +grandniece +grandpa +.ML MARK +.LI "LOCALMARK" +granola +grant +grantee +grantor +granular +granulate +granule +Granville +grape +grapefruit +grapevine +.LI +.DS +Where shall we put this. +Where shall we put this. +Where shall we put this. +.DE +.LI +granola +grant +grantee +grantor +granular +granulate +granule +Granville +grape +grapefruit +grapevine +.LI +.DS +Where shall we put this. +.DE +.LI +graphic +graphite +grapple +grasp +grass +grassland +grassy +.LI +grata +grate +grateful +grater +gratify +gratis +gratitude +gratuitous +.LI +gratuity +grave +gravel +.LE +.SP 3 +.ML $ 1c +.LI +graven +Graves +gravestone +graveyard +gravid +gravitate +gravy +gray +.LI +graybeard +grayish +Grayson +graywacke +graze +grease +greasy +great +greatcoat +.LI +greater +grebe +Grecian +Greece +greed +greedy +Greek +green +.LI +Greenbelt +Greenberg +Greenblatt +Greenbriar +Greene +greenery +.LE +.SP 3 +.ML X 1c 1 +.LI +Greenfield +greengrocer +grandson +grandstand +granite +granitic +granny +graph +.LI +grapheme +greenhouse +greenish +Greenland +Greensboro +granary +grand +grandchild +grandchildren +granddaughter +grandeur +grandfather +grandiloquent +grandiose +.LI +grandma +grandmother +grandnephew +grandniece +grandpa +grandparent +grandson +grandstand +granite +granitic +granny +.LI +granola +grant +grantee +grantor +granular +granulate +granule +Granville +grape +grapefruit +.LI +grapevine +graph +grapheme +graphic +graphite +grapple +grasp +grass +grassland +.LE diff --git a/contrib/mm/examples/MOVE b/contrib/mm/examples/MOVE new file mode 100644 index 0000000..d2a31e5 --- /dev/null +++ b/contrib/mm/examples/MOVE @@ -0,0 +1,182 @@ +.\" -*- nroff -*- +.\" Copyright (C) 1989-2014 Free Software Foundation, Inc. +.\" +.\" Copying and distribution of this file, with or without modification, +.\" are permitted in any medium without royalty provided the copyright +.\" notice and this notice are preserved. +. +.PH "'hej'hopp'i skogen'" +.PF "'livet'är'härligt'" +.OH "'ojämn'%'sida'" +.EH "'ojämn'%'sida'" +.OF "'ojämn'%'sida'" +.EF "'ojämn'%'sida'" +10th +1st +2nd +3rd +4th +5th +6th +7th +8th +9th +a +AAA +AAAS +Aarhus +Aaron +AAU +ABA +Ababa +aback +abacus +abalone +abandon +abase +abash +abate +abater +abbas +abbe +abbey +abbot +Abbott +abbreviate +abc +abdicate +abdomen +abdominal +abet +abetted +abetting +abeyance +abeyant +abhorred +abhorrent +abide +Abidjan +Abigail +abject +ablate +ablaze +able +ablution +Abner +.MOVE 50 20 +abnormal +Abo +aboard +abode +abolish +abolition +abominable +abominate +aboriginal +AAA +ABORIGINE +ABORNING +ABORT +ABOUND +ABOUT +ABOVE +ABOVEBOARD +ABOVEGROUND +abovementioned +abrade +Abraham +Abram +Abramson +abrasion +abrasive +abreact +abreast +BBB +ABRIDGE +ABRIDGMENT +ABROAD +abrogate +abrupt +abscess +abscissa +abscissae +absence +absent +absentee +absenteeism +absentia +absentminded +.MOVE 30 10 +absinthe +absolute +absolution +absolve +absorb +absorbent +absorption +absorptive +abstain +abstention +abstinent +abstract +abstracter +abstractor +CCC +ABSTRUSE +ABSURD +ABUILDING +ABUNDANT +ABUSABLE +ABUSE +ABUSIVE +ABUT +ABUTTED +ABUTTING +ABYSMAL +ABYSS +ABYSSINIA +AC +ACADEME +ACADEMIA +ACADEMIC +ACADEMICIAN +ACADEMY +ACADIA +ACANTHUS +ACAPULCO +ACCEDE +ACCELERATE +ACCELEROMETER +ACCENT +ACCENTUAL +ACCENTUATE +ACCEPT +ACCEPTANT +acceptor +access +.MOVE 62 0 20 +accessible +accession +accessory +accident +accidental +accipiter +acclaim +acclamation +acclimate +accolade +accommodate +accompaniment +accompanist +accompany +accomplice +accomplish +accord +accordant +DDD +ACCORDION +ACCOST +ACCOUNT +ACCOUNTANT +ACCRA +.PGFORM diff --git a/contrib/mm/examples/MUL b/contrib/mm/examples/MUL new file mode 100644 index 0000000..bd8cf22 --- /dev/null +++ b/contrib/mm/examples/MUL @@ -0,0 +1,542 @@ +.\" -*- nroff -*- +.\" Copyright (C) 1989-2014 Free Software Foundation, Inc. +.\" +.\" Copying and distribution of this file, with or without modification, +.\" are permitted in any medium without royalty provided the copyright +.\" notice and this notice are preserved. +. +inject +injudicious +Injun +injunct +injunction +injure +injurious +injury +injustice +ink +inkling +inlaid +inland +inlay +inlet +Inman +inmate +inn +innards +innate +inner +innermost +innkeeper +innocent +innocuous +innovate +innuendo +innumerable +inoculate +inoffensive +inoperable +inoperative +inopportune +inordinate +inorganic +input +inputting +inquest +inquire +inquiry +inquisition +inquisitive +inquisitor +inroad +insane +insatiable +inscribe +inscription +inscrutable +insect +insecticide +insecure +inseminate +insensible +insensitive +inseparable +insert +inset +inshore +inside +insidious +insight +insightful +insignia +insignificant +insincere +insinuate +insipid +insist +insistent +insofar +insolent +insoluble +insolvable +insolvent +insomnia +insomniac +insouciant +inspect +inspector +inspiration +inspire +instable +install +installation +instalment +instance +instant +instantaneous +instantiate +instead +instep +instigate +instill +instillation +instinct +instinctual +institute +institution +instruct +instructor +instrument +instrumentation +insubordinate +insubstantial +insufferable +insufficient +insular +insulate +insulin +insult +insuperable +insupportable +insuppressible +insurance +insure +insurgent +insurmountable +insurrect +insurrection +intact +intake +intangible +integer +integrable +.MULB 4c 1 5c 1 4c 1 3c +Grenoble +Gresham +Greta +Gretchen +grew +grieve +grievous +griffin +Griffith +grill +grille +grilled +grillwork +grim +grimace +Grimaldi +grime +Grimes +Grimm +grin +grind +grindstone +grip +gripe +grippe +grisly +grist +gristmill +Griswold +grit +gritty +grizzle +grizzly +groan +groat +grocer +grocery +groggy +groin +grommet +groom +groove +grope +grosbeak +gross +.MULN +h +ha +Haag +Haas +habeas +haberdashery +Haberman +Habib +habit +habitant +habitat +habitation +habitual +habituate +hacienda +hack +hackberry +Hackett +hackle +hackmatack +hackney +hackneyed +hacksaw +had +Hadamard +Haddad +haddock +Hades +Hadley +hadn't +Hadrian +hadron +hafnium +Hagen +Hager +haggard +haggle +Hagstrom +Hague +Hahn +Haifa +haiku +hail +hailstone +hailstorm +Haines +hair +haircut +hairdo +hairpin +hairy +Haiti +Haitian +Hal +halcyon +hale +Haley +half +halfback +halfhearted +halfway +halibut +halide +Halifax +halite +hall +hallelujah +Halley +hallmark +hallow +Halloween +hallucinate +hallway +halma +halo +halocarbon +halogen +Halpern +Halsey +Halstead +halt +halvah +halve +Halverson +ham +Hamal +Hamburg +hamburger +Hamilton +hamlet +Hamlin +hammerhead +hammock +Hammond +hamper +Hampshire +Hampton +hamster +Han +Hancock +hand +handbag +handbook +handclasp +handcuff +.MULN +coliform +coliseum +collaborate +collage +collagen +collapse +collapsible +collar +collarbone +collard +collate +collateral +colleague +collect +collectible +collector +college +collegial +collegian +collegiate +collet +collide +collie +Collier +collimate +collinear +Collins +collision +collocation +colloidal +Colloq +colloquia +colloquial +colloquium +colloquy +command +commandant +commandeer +commando +commemorate +commend +commendation +commendatory +commensurable +commensurate +comment +commentary +commentator +commerce +commercial +commingle +commiserate +commissariat +commissary +commission +commit +committable +committal +committed +committee +committeeman +committeemen +committeewoman +committeewomen +committing +commodious +commodity +commodore +common +commonality +.MULN +locoweed +lunch +luncheon +lunchroom +lunchtime +Lund +Lundberg +Lundquist +lung +lunge +lupine +Lura +lurch +lure +lurid +lurk +Lusaka +luscious +lush +lust +lustful +lustrous +lusty +lutanist +lute +lutetium +Luther +Lutheran +Lutz +lymphocyte +lymphoma +lynch +Lynchburg +Lynn +lynx +Lyon +Lyons +Lyra +lyric +lyricism +Lysenko +lysergic +lysine +.MULE +m +ma +Mabel +Mac +macabre +macaque +MacArthur +Macassar +Macbeth +MacDonald +MacDougall +mace +Macedon +Macedonia +MacGregor +Mach +Machiavelli +machination +machine +machinelike +machinery +machismo +macho +macintosh +mack +MacKenzie +mackerel +Mackey +Mackinac +Mackinaw +mackintosh +MacMillan +Macon +macrame +macro +macromolecular +macromolecule +macrophage +macroprocessor +macroscopic +macrostructure +mad +Madagascar +madam +Madame +madcap +madden +Maddox +made +Madeira +Madeleine +Madeline +madhouse +Madison +madman +madmen +Madonna +Madras +Madrid +madrigal +Madsen +madstone +Mae +Maelstrom +maestro +Mafia +magazine +Magdalene +magenta +Maggie +maggot +maggoty +magi +magic +magician +magisterial +magistrate +magma +magna +magnanimity +magnanimous +magnate +magnesia +magnesite +magnesium +magnet +magnetic +magnetite +magneto +magnetron +magnificent +magnify +magnitude +magnolia +magnum +Magnuson +Magog +magpie +Magruder +Mahayana +Mahayanist +mahogany +Mahoney +maid +maiden +maidenhair +maidservant +Maier +mail +mailbox +mailman +mailmen +maim +main +Maine +mainland +mainline +mainstay +mainstream +maintain +maintenance +maitre +majestic +majesty +major +make +makeshift +makeup +Malabar +maladapt +maladaptive +maladjust +maladroit +malady +Malagasy +malaise +malaprop +malaria +malarial +Malawi +Malay +Malaysia diff --git a/contrib/mm/examples/NCOL b/contrib/mm/examples/NCOL new file mode 100644 index 0000000..8a5e001 --- /dev/null +++ b/contrib/mm/examples/NCOL @@ -0,0 +1,203 @@ +.\" -*- nroff -*- +.\" Copyright (C) 1989-2014 Free Software Foundation, Inc. +.\" +.\" Copying and distribution of this file, with or without modification, +.\" are permitted in any medium without royalty provided the copyright +.\" notice and this notice are preserved. +. +granary +grand +grandchild +grandchildren +granddaughter +grandeur +grandfather +grandiloquent +grandiose +grandma +grandmother +grandnephew +grandniece +grandpa +grandparent +grandson +grandstand +granite +granitic +granny +granola +grant +grantee +grantor +granular +granulate +granule +Granville +grape +grapefruit +grapevine +graph +grapheme +graphic +graphite +grapple +grasp +grass +grassland +grassy +.MC 3c +grata +grate +grateful +grater +gratify +gratis +gratitude +gratuitous +gratuity +grave +gravel +graven +Graves +gravestone +graveyard +gravid +gravitate +gravy +gray +graybeard +grayish +Grayson +graywacke +graze +grease +greasy +great +greatcoat +greater +grebe +Grecian +Greece +greed +greedy +.NCOL +Greek +green +Greenbelt +Greenberg +Greenblatt +Greenbriar +Greene +greenery +Greenfield +greengrocer +greenhouse +greenish +Greenland +Greensboro +greensward +greenware +Greenwich +greenwood +Greer +greet +Greg +gregarious +Gregg +Gregory +gremlin +grenade +Grendel +Grenoble +Gresham +Greta +Gretchen +grew +grey +greyhound +greylag +grid +griddle +gridiron +grief +grievance +grieve +grievous +griffin +Griffith +grill +grille +grilled +grillwork +.NCOL +grim +grimace +Grimaldi +grime +Grimes +Grimm +grin +grind +grindstone +grip +gripe +grippe +grisly +grist +gristmill +Griswold +grit +gritty +grizzle +grizzly +groan +groat +grocer +grocery +groggy +groin +grommet +groom +groove +grope +grosbeak +gross +Grosset +Grossman +Grosvenor +grotesque +Groton +ground +groundsel +groundskeep +groundwork +group +groupoid +grout +grove +grovel +Grover +grow +growl +grown +grownup +growth +grub +grubby +grudge +gruesome +gruff +grumble +Grumman +grunt +gryphon +g's +GSA +GU +Guam +guanidine +guanine +guano +guarantee +guaranteeing +guarantor diff --git a/contrib/mm/examples/ND b/contrib/mm/examples/ND new file mode 100644 index 0000000..fdbc55d --- /dev/null +++ b/contrib/mm/examples/ND @@ -0,0 +1,24 @@ +.\" -*- nroff -*- +.\" Copyright (C) 1989-2014 Free Software Foundation, Inc. +.\" +.\" Copying and distribution of this file, with or without modification, +.\" are permitted in any medium without royalty provided the copyright +.\" notice and this notice are preserved. +. +.nf +---------------------------------------------------------------------- +.ce +Testing +---------------------------------------------------------------------- +Date = \*[DT] +.ISODATE +Date = \*[DT] +.ISODATE 0 + +.ND "13 August 1992" +Date = \*[DT] + +.ISODATE +.ND "14 August 1992" +Date = \*[DT] +---------------------------------------------------------------------- diff --git a/contrib/mm/examples/README b/contrib/mm/examples/README new file mode 100644 index 0000000..cb0956a --- /dev/null +++ b/contrib/mm/examples/README @@ -0,0 +1,40 @@ + -*- text -*- + Copyright (C) 1989-2020 Free Software Foundation, Inc. + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. + + +This directory contains examples of my enhancements to MM. + +APP The appendix macro. +B1B2 Box macro with text. +COVER My general cover macro, this example is using + ms.cov. +IND A general indexing method, see manual for INITI. +LT The letter macro. +LT.se A Swedish example with extra Swedish macros for + composing a letter conforming to Swedish standard style, + adjusted to left and right margins. +ML Marked list, an extended list type. +MOVE The MOVE macro, how to begin to print on an exact position. +MUL Enhanced multicolumn mode. +NCOL Start on next column. (Not for MUL*) +ND New date, with ISO date example. +References How to use references. +SETR General reference system, see manual for INITR. + + +Examples that I should have: + +PIC How to include postscript pictures, see manual for PIC. +VERBON Begin verbatim output. + + +And remember, check the manual for all string and number registers, +I've made sure that mm is useful in several languages; +all English output can be redefined. + +For Swedish localization, check the manual for groff_mse and the +macro files 'mse.tmac' and 'sv.tmac'. diff --git a/contrib/mm/examples/References b/contrib/mm/examples/References new file mode 100644 index 0000000..7b54471 --- /dev/null +++ b/contrib/mm/examples/References @@ -0,0 +1,982 @@ +.\" -*- nroff -*- +.\" Copyright (C) 1989-2014 Free Software Foundation, Inc. +.\" +.\" Copying and distribution of this file, with or without modification, +.\" are permitted in any medium without royalty provided the copyright +.\" notice and this notice are preserved. +. +.PH "'this'is'a header'" +.PF "'this'is'a footer'" +.OH "'odd'%'page'" +.EH "'even'%'page'" +.OF "'odd'%'page'" +.EF "'even'%'page'" +10th +1st +2nd +3rd +4th +5th +6th +7th +8th +9th +a +AAA +.B +AAAS +Aarhus +Aaron +.R +AAU +ABA +Ababa +aback +abacus +abalone +abandon +abase +.H 1 "hej hopp" +abash +abate +abater +abbas +abbe +abbey +abbot +Abbott +abbreviate +abc +abdicate +abdomen +abet +abetted +abetting +abeyance +abeyant +.H 2 "hej hopp" +abhorred +abhorrent +abide +Abidjan +Abigail +abject +ablate +ablaze +able +ablution +Abner +abnormal +.H 2 "hej hopp" +Abo +aboard +abode +abolish +.HU "hej hopp" +.B1 +abolition +abominable +abominate\*(Rf +aboriginal +.RS +AAA +ABORIGINE +ABORNING +ABORT +ABOUND +ABOUT +ABOVE +ABOVEBOARD +ABOVEGROUND +.RF +abovementioned +abrade +Abraham\*(Rf +Abram\*(Rf +Abramson\*(Rf +abrasion\*(Rf +abrasive\*(Rf +abreact\*(Rf +.B2 +abreast\*(Rf +.RS +BBB +ABRIDGE +ABRIDGMENT +ABROAD +.RF +abrogate +abrupt +abscess\*(Rf +abscissa\*(Rf +abscissae\*(Rf +absence\*(Rf +absent +absentee +absenteeism +absentia +.H 3 "hej hopp" +absentminded +absinthe +absolute +absolution +absolve +absorb +absorbent +absorption +absorptive +abstain +abstention +abstinent\*(Rf +abstract +abstracter +abstractor +.RS nisse +CCC +ABSTRUSE +ABSURD +ABUILDING +ABUNDANT +ABUSABLE +ABUSE +ABUSIVE +ABUT +ABUTTED +ABUTTING +ABYSMAL +ABYSS +ABYSSINIA +AC +ACADEME +ACADEMIA +ACADEMIC +ACADEMICIAN +ACADEMY +ACADIA +ACANTHUS +ACAPULCO +ACCEDE +ACCELERATE +ACCELEROMETER +ACCENT +ACCENTUAL +ACCENTUATE +ACCEPT +ACCEPTANT +.RF +acceptor +access +accessible +accession +Ref \*[nisse] +accessory +.H 4 "hej hopp" +accident +accidental +accipiter +acclaim +acclamation +acclimate +accolade +accommodate +accompaniment +accompanist +accompany +accomplice +accomplish\*(Rf +accord +accordant +.RS +DDD +ACCORDION +ACCOST +ACCOUNT +ACCOUNTANT +ACCRA +ACCREDIT +ACCREDITATE +ACCREDITATION +ACCRETION +ACCRUAL +ACCRUE +.RF +acculturate +accumulate +accuracy +accurate +accusation +accusative +accusatory +accuse +accustom +ace +acerbic +acerbity +acetate +acetic +acetone +acetylene +ache +achieve +Achilles +aching +achromatic +acid +acidic +acidulous +.H 5 "hej hopp" +Ackerman +Ackley +acknowledge +acknowledgeable +ACM +acme +acolyte +acorn +acoustic +acquaint +acquaintance +acquiesce +acquiescent +acquire +acquisition +acquisitive +acquit +acquittal +acquitting +acre +acreage +acrid +acrimonious +acrimony +acrobacy +acrobat +acrobatic +acronym +acropolis +across +acrylate +acrylic +ACS +act +Actaeon +actinic +actinide +actinium +actinolite +actinometer +activate +activation +activism +Acton +actor +actress +Acts +actual +actuarial +actuate +.H 6 "hej hopp" +acuity +acumen +acute +acyclic +ad +Ada +adage +adagio +Adair +Adam +adamant +Adams +Adamson +adapt +adaptation +adaptive +add +added +addend +addenda +addendum +addict +Addis +Addison +addition +additional +additive +addle +address +addressee +Addressograph +adduce +Adelaide +Adele +Adelia +Aden +adenine +adenoma +adenosine +adept +adequacy +adequate +adhere +adherent +adhesion +adhesive +adiabatic +adieu +adipic +Adirondack +.H 7 "hej hopp" +adjacent +adject +adjectival +adjective +adjoin +adjoint +adjourn +adjudge +adjudicate +adjunct +adjust +adjutant +Adkins +Adler +administer +administrable +administrate +administratrix +admiral +admiralty +admiration +admire +admissible +admission +admit +admittance +admitted +admitting +admix +admixture +admonish +admonition +ado +adobe +adolescent +Adolph +Adolphus +Adonis +adopt +adoption +adoptive +adore +adorn +adposition +adrenal +adrenaline +Adrian +Adriatic +Adrienne +adrift +adroit +adsorb +adsorbate +adsorption +adsorptive +adulate +adult +adulterate +adulterous +adultery +adulthood +advance +advantage +advantageous +advent +adventitious +adventure +adventurous +adverb +adverbial +adversary +adverse +advert +advertise +advice +advisable +advise +advisee +advisor +advisory +advocacy +advocate +Aegean +aegis +Aeneas +Aeneid +aeolian +Aeolus +aerate +aerial +Aerobacter +aerobic +aerodynamic +aerogene +aeronautic +aerosol +aerospace +Aeschylus +aesthete +aesthetic +10th +1st +2nd +3rd +4th +5th +6th +7th +8th +9th +a +AAA +AAAS +Aarhus +Aaron +AAU +ABA +Ababa +aback +abacus +abalone +abandon +abase +.H 1 "hej hopp" +abash +abate +abater +abbas +abbe +abbey +abbot +Abbott +abbreviate +abc +abdicate +abdomen +abdominal +abduct +Abe +abed +Abel +Abelian +Abelson +Aberdeen +Abernathy +aberrant +aberrate +abet +abetted +abetting +abeyance +abeyant +.H 2 "hej hopp" +abhorred +abhorrent +abide +Abidjan +Abigail +abject +ablate +ablaze +able +ablution +Abner +abnormal +Abo +aboard +abode +abolish +abolition +abominable +abominate +aboriginal +aborigine +aborning +abort +abound +about +above +aboveboard +aboveground +abovementioned +abrade +Abraham +Abram +Abramson +abrasion +abrasive +abreact +abreast +abridge +abridgment +abroad +abrogate +abrupt +abscess +abscissa +abscissae +absence +absent +absentee +absenteeism +absentia +.H 3 "hej hopp" +absentminded +absinthe +absolute +absolution +absolve +absorb +absorbent +absorption +absorptive +abstain +abstention +abstinent +abstract +abstracter +abstractor +abstruse +absurd +abuilding +abundant +abusable +abuse +abusive +abut +abutted +abutting +abysmal +abyss +Abyssinia +AC +academe +academia +academic +academician +academy +Acadia +acanthus +Acapulco +accede +accelerate +accelerometer +accent +accentual +accentuate +accept +acceptant +acceptor +access +accessible +accession +accessory +.H 4 "hej hopp" +accident +accidental +accipiter +acclaim +acclamation +acclimate +accolade +accommodate +accompaniment +accompanist +accompany +accomplice +accomplish +accord +accordant +accordion +accost +account +accountant +Accra +accredit +accreditate +accreditation +accretion +accrual +accrue +acculturate +accumulate +accuracy +accurate +accusation +accusative +accusatory +accuse +accustom +ace +acerbic +acerbity +acetate +acetic +acetone +acetylene +ache +achieve +Achilles +aching +achromatic +acid +acidic +acidulous +.H 5 "hej hopp" +Ackerman +Ackley +acknowledge +acknowledgeable +ACM +acme +acolyte +acorn +acoustic +acquaint +acquaintance +acquiesce +acquiescent +acquire +acquisition +acquisitive +acquit +acquittal +acquitting +acre +acreage +acrid +acrimonious +acrimony +acrobacy +acrobat +acrobatic +acronym +acropolis +across +acrylate +acrylic +ACS +act +Actaeon +actinic +actinide +actinium +actinolite +actinometer +activate +activation +activism +Acton +actor +actress +Acts +actual +actuarial +actuate +.H 6 "hej hopp" +acuity +acumen +acute +acyclic +ad +Ada +adage +adagio +Adair +Adam +adamant +Adams +Adamson +adapt +adaptation +adaptive +add +added +addend +addenda +addendum +addict +Addis +Addison +addition +additional +additive +addle +address +addressee +Addressograph +adduce +Adelaide +Adele +Adelia +Aden +adenine +adenoma +adenosine +adept +adequacy +adequate +adhere +adherent +adhesion +adhesive +adiabatic +adieu +adipic +Adirondack +.H 7 "hej hopp" +adjacent +adject +adjectival +adjective +adjoin +adjoint +adjourn +adjudge +adjudicate +adjunct +adjust +adjutant +Adkins +Adler +administer +administrable +administrate +administratrix +admiral +admiralty +admiration +admire +admissible +admission +admit +admittance +admitted +admitting +admix +admixture +admonish +admonition +ado +adobe +adolescent +Adolph +Adolphus +Adonis +adopt +adoption +adoptive +adore +adorn +adposition +adrenal +adrenaline +Adrian +Adriatic +Adrienne +adrift +adroit +adsorb +adsorbate +adsorption +adsorptive +adulate +adult +adulterate +adulterous +adultery +adulthood +advance +advantage +advantageous +advent +adventitious +adverse +advert +advertise +advice +advisable +advise +advisee +advisor +advisory +advocacy +advocate +Aegean +aegis +Aeneas +Aeneid +aeolian +Aeolus +aerate +aerial +Aerobacter +aerobic +aerodynamic +aerogene +aeronautic +aerosol +aerospace +Aeschylus +aesthete +aesthetic +.H 1 "hej hopp" +acuity +acumen +acute +acyclic +ad +Ada +adage +adagio +Adair +Adam +adamant +Adams +Adamson +adapt +adaptation +adaptive +add +added +addend +addenda +addendum +addict +Addis +Addison +addition +additional +additive +addle +address +addressee +Addressograph +adduce +Adelaide +Adele +Adelia +Aden +adenine +adenoma +adenosine +adept +adequacy +adequate +adhere +adherent +adhesion +adhesive +adiabatic +adieu +adipic +Adirondack +.H 2 "hej hopp" +adjacent +adject +adjectival +adjective +adjoin +adjoint +adjourn +adjudge +adjudicate +.H 2 "hej hopp" +adjunct +adjust +adjutant +Adkins +Adler +administer +administrable +administrate +administratrix +admiral +admiralty +admiration +admire +admissible +admission +admit +admittance +admitted +admitting +admix +admixture +admonish +admonition +ado +adobe +adolescent +Adolph +Adolphus +Adonis +adopt +adoption +adoptive +adore +adorn +adposition +adrenal +adrenaline +Adrian +Adriatic +Adrienne +adrift +adroit +adsorb +adsorbate +adsorption +adsorptive +adulate +adult +adulterate +adulterous +adultery +adulthood +advance +advantage +advantageous +advent +adventitious +adverse +advert +advertise +advice +advisable +advise +advisee +advisor +advisory +advocacy +advocate +Aegean +aegis +Aeneas +Aeneid +aeolian +Aeolus +aerate +aerial +Aerobacter +aerobic +aerodynamic +aerogene +aeronautic +aerosol +aerospace +Aeschylus +aesthete +aesthetic +.RP 0 1 +.TC diff --git a/contrib/mm/examples/SETR b/contrib/mm/examples/SETR new file mode 100644 index 0000000..e2fcbd5 --- /dev/null +++ b/contrib/mm/examples/SETR @@ -0,0 +1,116 @@ +.\" -*- nroff -*- +.\" Copyright (C) 1989-2014 Free Software Foundation, Inc. +.\" +.\" Copying and distribution of this file, with or without modification, +.\" are permitted in any medium without royalty provided the copyright +.\" notice and this notice are preserved. +. +.nr Cl 6 +.INITR setr +.H 1 " granary grand grandchild grandchildren granddaughter grandeur" +.SETR ref1 +.H 2 "grandfather grandiloquent grandiose grandma grandmother grandnephew" +.H 2 "grandniece grandpa grandparent grandson grandstand granite granitic" +.H 2 "granny granola grant grantee grantor granular granulate" +.SETR ref2 +.H 2 "granule Granville grape" +grant +grantee +grantor +granular +granulate +.br +granule +.B +REF 9: +.GETHN ref9 +, page number +.GETPN ref9 +.R +Granville +grape +.br +grapefruit +grapevine +graph +grapheme +graphic +graphite +\fBExhibit\fP +.GETHN ex1 + +grapple +grasp +grass +grassland +grassy +grata +grate +.H 2 "grapefruit grapevine graph grapheme graphic graphite" +.H 3 "grapple" +.SETR ref3 +.H 3 "grasp grass grassland grassy grata grate grateful" +.H 3 "grater gratify gratis gratitude" +.H 4 "gratuitous gratuity grave" +.H 4 "gravel graven" +.SETR ref4 +.H 1 "Graves gravestone graveyard gravid gravitate gravy gray" +.H 2 "graybeard grayish Grayson graywacke graze grease greasy great greatcoat" +.H 2 "greater grebe Grecian Greece greed greedy Greek green Greenbelt Greenberg" +.H 2 "Greenblatt Greenbriar Greene greenery" +.SETR ref5 +.H 1 "Greenfield greengrocer greenhouse greenish Greenland Greensboro" +.H 1 "greensward greenware Greenwich greenwood Greer greet" +grant +grantee +.DS + +Advertisements contain the only truths to be relied on in a newspaper. + -- Thomas Jefferson +.EX fortune "" "" ex1 +.DE +grantor +granular +.GETR ref1 +granulate +granule +.H 2 "Using variables" +.B +REF 2: +.GETHN ref2 c +.GETPN ref2 bbb +\*c, page number \*[bbb] +.R +Granville +grape +grapefruit +grapevine +graph +grapheme +.H 2 "Greg gregarious Gregg Gregory gremlin grenade Grendel" +.H 2 "Grenoble Gresham Greta Gretchen" +.SETR ref6 +.H 2 "grew" +.H 1 "grey greyhound greylag grid griddle gridiron grief" +.H 1 "grievance grieve grievous griffin Griffith grill grille grilled grillwork" +.H 3 "grim grimace Grimaldi grime Grimes Grimm grin grind grindstone" +.H 3 "grip gripe grippe grisly grist gristmill Griswold grit" +.SETR ref7 +.H 3 "gritty grizzle grizzly groan groat grocer grocery groggy groin" +.H 1 "grommet groom groove grope grosbeak gross Grosset Grossman Grosvenor grotesque" +.H 1 "Groton ground groundsel groundskeep groundwork group groupoid" +.H 4 "grout grove grovel Grover grow growl grown grownup growth grub grubby" +.H 4 "grudge gruesome gruff grumble Grumman grunt gryphon g's" +.SETR ref8 +.H 4 "GSA GU Guam guanidine guanine guano guarantee guaranteeing guarantor" +.H 4 "guaranty" +.H 1 "guard guardhouse Guardia guardian Guatemala gubernatorial Guelph Guenther" +.H 1 "guerdon guernsey guerrilla guess guesswork guest guffaw Guggenheim" +.SETR ref9 +.H 1 "Guiana guidance guide guidebook guideline guidepost guiding" +.H 1 "guignol" +.GETR ref6 +.H 1 "guild guildhall guile Guilford guillemot guillotine guilt" +.SETR ref10 +.H 1 "guilty guinea guise guitar gules gulf gull Gullah" +.H 1 "gullet gullible gully gulp gum gumbo gumdrop gummy gumption" diff --git a/contrib/mm/examples/letter.mm b/contrib/mm/examples/letter.mm new file mode 100644 index 0000000..3683849 --- /dev/null +++ b/contrib/mm/examples/letter.mm @@ -0,0 +1,51 @@ +.\" Set a blank page header; our letter is a single page and does not +.\" require the default numbering. +.PH ''' +.\" Set point size to 14. +.S 14 +.\" Set paragraph type to "indented". +.nr Pt 1 +.\" Put the date in a right-aligned display. +.DS R +30 May 2021 +.DE +.\" Start display (left-aligned). +.DS +Mr. Ty Coon +President of Vice, Intellectual Property and Licensing +Very Big Corporation of America +Silly Valley, CA 94043 +.\" End display. +.DE +Dear Mr. Coon, +. +. +.\" Start new paragraph. +.P +I would like to request that your wholly-owned subsidiary, +Yoyodyne, Inc., +disclaim all copyright interest in the program `Gnomovision' +(which makes passes at compilers) +written by Juliet Hacker prior to her employment with Yoyodyne. +. +. +.P +Our colleagues at the Software Freedom Conservancy have determined and +informed us that Ms.\& Hacker's employment agreement is a contract of +adhesion. +. +. +.P +Thank you for your prompt attention to this matter. +. +. +.\" Put the closing and signature in a right-aligned display as well. +.DS R +Sincerely yours, +.\" Leave three "vees" (3 text line heights) of room for signature. +.SP 3v +. +. +Tracy T.\& Jordan +.DE +.\" vim: set noexpandtab textwidth=72: diff --git a/contrib/mm/groff_mm.7.man b/contrib/mm/groff_mm.7.man new file mode 100644 index 0000000..4f94191 --- /dev/null +++ b/contrib/mm/groff_mm.7.man @@ -0,0 +1,5428 @@ +'\" t +.TH groff_mm @MAN7EXT@ "@MDATE@" "groff @VERSION@" +.SH Name +groff_mm \- memorandum macros for GNU +.I roff +. +. +.\" ==================================================================== +.\" Legal Terms +.\" ==================================================================== +.\" +.\" Copyright (C) 1989-2023 Free Software Foundation, Inc. +.\" +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of +.\" this manual under the conditions for verbatim copying, provided that +.\" the entire resulting derived work is distributed under the terms of +.\" a permission notice identical to this one. +.\" +.\" Permission is granted to copy and distribute translations of this +.\" manual into another language, under the above conditions for +.\" modified versions, except that this permission notice may be +.\" included in translations approved by the Free Software Foundation +.\" instead of in the original English. +. +. +.\" Save and disable compatibility mode (for, e.g., Solaris 10/11). +.do nr *groff_groff_mm_7_man_C \n[.cp] +.cp 0 +. +.\" Define fallback for groff 1.23's MR macro if the system lacks it. +.nr do-fallback 0 +.if !\n(.f .nr do-fallback 1 \" mandoc +.if \n(.g .if !d MR .nr do-fallback 1 \" older groff +.if !\n(.g .nr do-fallback 1 \" non-groff *roff +.if \n[do-fallback] \{\ +. de MR +. ie \\n(.$=1 \ +. I \%\\$1 +. el \ +. IR \%\\$1 (\\$2)\\$3 +. . +.\} +.rr do-fallback +. +. +.\" ==================================================================== +.SH Synopsis +.\" ==================================================================== +. +.SY "groff \-m@TMAC_M_PREFIX@m" +.RI [ option\~ .\|.\|.\&] +.RI [ file\~ .\|.\|.] +. +.SY "groff \-m m@TMAC_M_PREFIX@m" +.RI [ option\~ .\|.\|.\&] +.RI [ file\~ .\|.\|.] +.YS +. +. +.\" ==================================================================== +.SH Description +.\" ==================================================================== +. +The GNU implementation of the +.I mm +macro package is part of the +.I groff +document formatting system. +. +The +.I mm +package is suitable for the composition of +letters, +memoranda, +reports, +and books. +. +. +.P +Call an +.I mm +macro at the beginning of a document to initialize the package. +. +A simple +.I mm +document might use only +.B P +for paragraphing. +. +Set numbered and unnumbered section headings with +.B H +and +.BR HU , +respectively. +. +Change the style of the typeface with +.BR B , +.BR I , +and +.BR R ; +you can alternate styles with +.BR BI , +.BR BR , +.BR IB , +.BR IR , +.BR RB , +and +.BR RI . +. +Several nestable list types are available via +.BR AL , +.BR BL , +.BR BVL , +.BR DL , +.BR ML , +.BR RL , +and +.BR VL ; +each of these begins a list, +to which +.B LI +adds an item and +.B LE +ends the (nested) list. +. +Customized list arrangements are supported by +.BR LB . +. +.B DS +and +.B DF +start static and floating displays, +respectively; +either is terminated with +.BR DE . +. +. +.P +.I groff mm +is intended to be compatible with the +.I mm +implementation found in the AT&T Documenter's Workbench (DWB), +with the following limitations. +. +. +.IP \[bu] 2n +Omitted features include +the logo and company name strings, +.B }Z +and +.BR ]S , +respectively; +the encoded company site location addresses recognized as the third +argument to the +.B AU +macro; +the +.B Pv +(\[lq]private\[rq] heading) +register; +and the +.B OK +(other keywords), +and +.B PM +(proprietary markings) +macros. +. +. +.IP \[bu] 2n +The +.B CS +(output cover sheet) +macro is implemented only for memorandum type 4. +. +. +.IP \[bu] +The +.I grap +preprocessor is not explicitly supported; +no +.B G1 +and +.B G2 +macros +are defined. +. +. +.IP \[bu] +The registers +.BR A , +.BR C , +.BR E , +.BR T , +and +.BR U , +typically set from the +.I troff \" generic +or +.I nroff \" generic +command lines with DWB +.IR mm , +are not recognized. +. +. +.IP \[bu] +When setting the registers +.B L +or +.B W +from the command line, +use an explicit scaling unit to avoid surprises. +. +. +.IP \[bu] +DWB +.IR mm 's +.B nP +macro indented the second line of a paragraph to align it with the start +of the text of the first +(after the paragraph number); +.IR "groff mm" 's +does not. +. +. +.IP \[bu] +Cut marks are not supported. +. +. +.P +DWB +.I mm +supported only seven levels of heading. +. +As a compatible extension, +.I groff mm +supports fourteen, +introducing new registers +.B H8 +through +.BR H14 , +and affecting the interpretation of the +.B HF +and +.B HP +strings. +. +. +.P +Macro, +register, +and string descriptions in this page frequently mention each other; +most cross references are to macros. +. +Where a register or string is referenced, +its type is explicitly identified. +. +.IR mm 's +macro names are usually in full capitals; +registers and strings tend to have mixed-case names. +. +. +.\" ==================================================================== +.SS "Document styles" +.\" ==================================================================== +. +.I groff mm +offers three different frameworks for document organization. +. +.BR \%COVER /\: \%COVEND +is a flexible means of preparing any document requiring a cover page. +. +.BR LT / LO +aids preparation of typical Anglophone correspondence +(business letters, +for example). +. +The +.B MT +memorandum type mechanism implements a group of formal styles +historically used by AT&T Bell Laboratories. +. +Your document can select at most one of these approaches; +when used, +each disables the others. +. +. +.\" ==================================================================== +.SS Localization +.\" ==================================================================== +. +.I groff mm +is designed to be easily localized. +. +For languages other than English, +strings that can appear in output are collected in the file +.IR @MACRODIR@/\: xx \:.tmac , +where +.I xx +is an ISO\~639 two-letter language identifier. +. +Localization packages should be loaded after +.IR mm ; +for example, +you might format a Swedish +.I mm +document with the command +.RB \[lq] "groff \-mm \-msv" \[rq]. +. +. +.P +This package can also be localized by site or territory; +for example, +.I @MACRODIR@/\:@TMAC_M_PREFIX@mse\:.tmac +illustrates how to adapt the output to a national standard using its ISO +3166 territory code. +. +Such a package can define a string that causes a macro file +.IR @MACRODIR@/\:mm/\:\% territory _locale +to be loaded at package initialization. +. +If this mechanism is not used, +.I @MACRODIR@/\:mm/\:\%locale +is loaded instead. +. +No diagnostic is produced if these files do not exist. +. +. +.\" ==================================================================== +.SS "Registers and strings" +.\" ==================================================================== +. +Much +.I mm +behavior can be configured by registers and strings. +. +A register is assigned with the +.B nr +request. +. +. +.RS +.P +.B .nr +.I ident +.RB [ \[+-] ]\c +.I n +.RI [ i ] +.RE +. +. +.P +.I ident +is the name of the register, +and +.IR n \~is +the value to be assigned. +. +.IR n \~can +be prefixed with a plus or minus sign if incrementation or +decrementation (respectively) of the register's existing value +.RI by\~ n +is desired. +. +If assignment of a (possibly) negative +.IR n \~is +required, +further prefix it with a zero or enclose it in parentheses. +. +If +.IR i \~is +specified, +the register is automatically modified +.RI by \~i +prior to interpolation if a plus or minus sign is included in the escape +sequence as follows. +. +. +.RS +.P +.B \[rs]n\c +.RB [ \[+-] ]\c +.BI [ ident ] +.RE +. +. +.P +.IR i \~can +be negative; +it combines algebraically with the sign in the interpolation escape +sequence. +. +. +.P +Strings are defined with the +.B ds +request. +. +. +.RS +.P +.B .ds +.I ident contents +.RE +. +. +.P +.I contents +consumes everything up to the end of the line, +including trailing spaces. +. +It is a good practice to end +.I contents +with a comment escape sequence +.RB ( \[rs]\[dq] ) +so that extraneous spaces do not intrude during document maintenance. +. +To include leading spaces in +.IR contents , +prefix it with a double quote. +. +Strings are interpolated with the +.B \[rs]* +escape sequence. +. +. +.RS +.P +.B \[rs]*\c +.BI [ ident ] +.RE +. +. +.P +Register and string name spaces are distinct, +but strings and macros share a name space. +. +Defining a string with the same name as an +.I mm +macro is not supported and may cause incorrect rendering, +the emission of diagnostic messages, +and an error exit status from +.IR @g@troff . +. +. +.\" ==================================================================== +.SS "Register format" +.\" ==================================================================== +. +A register is interpolated using Arabic numerals if no other format has +been assigned to it. +. +Assign a format to a register with the +.B af +request. +. +. +.RS +.LP +.BI .af\~ "R c" +.RE +. +. +.LP +.IR R \~is +the name of the register, +and +.IR c \~is +the format. +. +If +.IR c \~is +a sequence of Arabic numerals, +their quantity defines a zero-padded minimum width for the interpolated +register value. +. +. +.RS +.LP +.TS +tab(@); +lb lb +l l. +Form@Sequence +1@0, 1, 2, 3, .\|.\|., 10, .\|.\|. +001@000, 001, 002, 003, .\|.\|., 1000, .\|.\|. +i@0, i, ii, iii, iv, .\|.\|. +I@0, I, II, III, IV, .\|.\|. +a@0, a, b, c, .\|.\|., z, aa, ab, .\|.\|. +A@0, A, B, C, .\|.\|., Z, AA, AB, .\|.\|. +.TE +.RE +. +. +.\" ==================================================================== +.SS Fonts +.\" ==================================================================== +. +In +.IR "groff mm" , +the fonts +(or rather, +font styles) +.BR R \~(roman), +.BR I \~(italic), +and +.BR B \~(bold) +are mounted at font positions +.BR 1 , +.BR 2 , +.RB and\~ 3 , +respectively. +. +Internally, +font positions are used for backward compatibility. +. +From a practical point of view, +it doesn't make a big difference\[em]a different font family can still +be selected by invoking +.IR groff 's +.B fam +request or using its +.B \-f +command-line option. +. +On the other hand, +if you want to replace just, +for example, +.RB font\~ I +with Zapf Chancery Medium italic +(available on +.IR groff 's +.B pdf +and +.B ps +output devices), +you have to use the +.B fp +request, +replacing the font at position\~2 with +.RB \[lq] .fp\~2\~ZCMI \[rq]). +. +Because the cover sheet, +memorandum type, +and +.MR @g@refer @MAN1EXT@ +integration macros explicitly request fonts named +.BR B , +.BR I , +and +.BR R , +you will also need to remap these font names with the +.B ftr +request, +for instance with +.RB \[lq] .ftr\~I\~ZCMI \[rq]. +. +. +.\" ==================================================================== +.SH Macros +.\" ==================================================================== +. +An explicitly empty argument may be specified with a pair of double +quotes; +to call a macro +.B XX +with an empty second argument but non-empty first and third ones, +you could input the following. +. +. +.P +.RS +.EX +\&.XX foo \[dq]\[dq] baz +.EE +.RE +. +. +.P +Macro names longer than two characters are GNU extensions; +some shorter names were not part of DWB +.IR mm 's +published interface but are documented aspects of +.I groff mm. +. +. +.TP +.BI )E\ "level text" +Add heading text +.I text +to the table of contents with +.IR level , +which is either\~0 or in the range 1 to\~7. +. +See also +.BR H . +. +This undocumented DWB +.I mm +macro is exposed by +.I groff mm +to enable customized tables of contents. +. +. +.TP +.BR 1C\~ [ 1 ] +Format page text in one column. +. +The page is broken. +. +.RB A\~ 1 +argument suppresses this break; +its use may cause body text and a pending footnote to overprint. +. +See +.BR 2C , +.BR MC , +and +.BR NCOL . +. +. +.TP +.B 2C +Begin two-column formatting. +. +This is a special case of +.BR MC . +. +See +.B 1C +and +.BR NCOL . +. +. +.TP +.B AE +Abstract end; +stop collecting abstract text. +. +See +.BR AS . +. +. +.\" In DWB mm, the mnemonic for `AF` was "alternate first-page format", +.\" and was described in the context of the `A` and `E` registers and +.\" `}Z` and `]S` strings, none of which we support. +.TP +.BR AF \~[\c +.IR firm-name ] +Specify firm associated with the document. +. +At most one can be declared; +the firm name is used by memorandum types and available to cover sheets. +. +.B AF +terminates a document title started with +.BR TL , +and can be called without an argument for that purpose. +. +See +.B MT +and +.BR COVER . +. +. +.TP +.BR AL \~[\c +.IR type \~[ text-indent \~[\c +.BR 1 ]]] +Begin an auto-incrementing numbered list. +. +Item numbers start at one. +. +The +.I type +argument assigns the register format +(see above) +of the list item enumerators. +. +The default +.RB is\~ 1 . +. +An explicitly empty +.I type +also indicates the default. +. +A +.I text-indent +argument overrides register +.BR Li . +. +A third argument suppresses the blank line that normally precedes each +list item. +. +Use +.B LI +to declare list items, +and +.B LE +to end the list. +. +. +.TP +.BR APP \~\c +.RI [ id\~ [ title ]] +Begin an appendix. +. +If the identifier +.I id +is omitted, +it is incremented +(or initialized, +if necessary). +. +The register format used for +.I id +is \[lq]A\[rq]. +. +The page is broken. +. +The register +.B Aph +determines whether an appendix heading is then formatted. +. +This heading uses the string +.B App +followed by +.IR id . +. +Appendices appear in any table of contents +(see +.BR TC ). +. +The string +.B Apptxt +is set to +.I title +if the latter is present, +and made empty otherwise. +. +. +.TP +.BI APPSK\~ "id n" \~\c +.RI [ title ] +As +.BR APP , +but increment the page number by +.IR n . +. +Use this macro to \[lq]skip pages\[rq] when diagrams or other materials +not formatted by +.I @g@troff +are included in appendices. +. +. +.TP +.BR AS\~ [\c +.IR placement \~[ indentation ]] +Abstract start; +begin collecting abstract. +. +Input up to the next +.B AE +call is included in the abstract. +. +.I placement +influences the location of the abstract on the cover sheet of a +memorandum +(see +.BR MT ). +. +.BR \%COVER , +by contrast, +ignores +.I placement +by default, +but can be customized to interpret it. +. +. +.IP +.TS +tab(@); +lf(BI) lb +l lx. +placement@Effect +0@T{ +The abstract appears on page\~1 and cover sheet if the document is a +\[lq]released paper\[rq] memorandum +.RB (\[lq] ".MT 4" \[rq]); +otherwise, +it appears on page\~1 without a cover sheet. +T} +1@T{ +The abstract appears only on the cover sheet +.RB (\[lq] ".MT 4" \[rq] +only). +T} +.\" XXX: This does not appear to be implemented. +.\"2@T{ +.\"The abstract is printed only on the cover sheet (if not +.\".BR ".MT 4" ) +.\". +.\"The cover sheet is printed without a need for \fBCS\fP. +.\"T} +.TE +. +. +.IP +An abstract does not appear at all in external letters +.RB (\[lq] ".MT 5" \[rq]). +. +.RI A\~ placement +of +.B 2 +was supported by DWB +.I mm +but is not by +.IR "groff mm" . +. +. +.IP +A second argument increases the indentation by +.I indentation +and reduces the line length by twice this amount. +. +A scaling unit of ens is assumed. +. +The default is\~0. +. +. +.\" XXX: Do we need a macro for this? Why is it not a string like App +.\" or Licon? It is usefully localizable. +.TP +.BR AST \~\c +.RI [ caption ] +Set the caption above the abstract to +.IR caption , +or clear it if there is no argument. +. +The default is \[lq]ABSTRACT\[rq]. +. +. +.TP +.BI AT\~ title\c +\~.\|.\|. +Specify author's title(s). +. +If present, +.B AT +must appear just after the corresponding author's +.BR AU . +. +Each +.I title +occupies an output line beneath the author's name in the signature block +used by +.B LT +letters +(see +.BR SG ) +and in +.B MT +memoranda. +. +The +.B ms +cover sheet style also uses it. +. +. +.br +.ne 7v +.TP +.BR AU \~\c +.RI [ name\~\c +.RI [ initials\~\c +.RI [ loc\~\c +.RI [ dept\~\c +.RI [ ext\~\c +.RI [ room\~\c +.RI [ arg1\~\c +.RI [ arg2\~\c +.RI [ arg3 ]]]]]]]]] +Specify author. +. +.B AU +terminates a document title started with +.BR TL , +and can be called without arguments for that purpose. +. +Author information is used by cover sheets, +.B MT +memoranda, +and +.BR SG . +. +Further arguments comprise +initials, +location, +department, +telephone extension, +room number or name, +and up to three additional items. +. +Repeat +.B AU +to identify multiple authors. +. +. +.IP +Use +.BR WA / WE +instead to identify the author for documents employing +.BR LT . +. +. +.TP +.BR AV \~[\c +.IR name \~[\c +.BR 1 ]] +Format approval lines for a handwritten signature and date. +. +Two horizontal rules are drawn, +with the specified +.I name +and the text of the string +.B Letdate +beneath them. +. +Above these rules, +the text in the string +.B Letapp +is formatted; +a second argument replaces this text with a blank line. +. +See +.BR LT . +. +. +.\" XXX: AVL is misnamed; it should have been called SGL or similar. +.TP +.BR AVL \~[\c +.IR name ] +As +.BR AV , +but the date, +date rule, +and approval notation +.B Letapp +are omitted. +. +. +.TP +.BR B \~\c \" space in roman; we must use 2-font macro with \c +.RI [ bold-text\~\c +.RI [ previous-font-text ]]\~.\|.\|. +Join +.I bold-text +in boldface with +.I previous-font-text +in the previous font, +without space between the arguments. +. +If no arguments, +switch font to bold style. +. +. +.TP +.B B1 +Begin boxed, +kept display. +. +The text is indented one character, +and the right margin is one character shorter. +. +This is a GNU extension. +. +. +.TP +.B B2 +End boxed, +kept display. +. +This is a GNU extension. +. +. +.TP +.B BE +End bottom block; see +.BR BS . +. +. +.TP +.BR BI \~\c \" space in roman; we must use 2-font macro with \c +.RI [ bold-text\~\c +.RI [ italic-text ]]\~.\|.\|. +Join +.I bold-text +in boldface with +.I italic-text +in italics, +without space between the arguments. +. +. +.TP +.BR BL \~[\c +.IR text-indent \~[\c +.BR 1 ]] +Begin bulleted list. +. +Items are prefixed with a bullet and a space. +. +A +.I text-indent +argument overrides register +.BR Pi . +. +A second argument suppresses blank lines between items. +. +Use +.B LI +to declare list items, +and +.B LE +to end the list. +. +. +.TP +.BR BR \~\c \" space in roman; we must use 2-font macro with \c +.RI [ bold-text\~\c +.RI [ roman-text ]]\~.\|.\|. +Join +.I bold-text +in boldface with +.I roman-text +in roman style, +without space between the arguments. +. +. +.TP +.B BS +Begin bottom block. +. +Input is collected until +.B BE +is called, +and output between the footnote area and footer of each page. +. +. +.\" XXX: Couldn't this have been done with an extra parameter to `VL`? +.\" Or a register influencing VL behavior? +.TP +.BR BVL \~[\c +.IR text-indent \~[ mark-indent \~[\c +.BR 1 ]]] +Begin broken variable-item +(or \[lq]tagged\[rq]) +list. +. +Each item is expected to supply its own mark. +. +The line is always broken after the mark; +contrast +.BR VL . +. +.I text-indent +sets the indentation of the text, +and +.I mark-indent +the distance from the current list indentation to the mark. +. +A third argument suppresses the blank line that normally precedes each +list item. +. +Use +.B LI +to declare list items, +and +.B LE +to end the list. +. +. +.TP +.BR \%COVER \~\c \" space in roman; we must use 2-font macro with \c +.RI [ style ] +Begin a cover page description. +. +.B \%COVER +must appear before the body text +(or main matter) +of a document. +. +The argument +.I style +is used to construct the file name +.IR @TMAC_MDIR@/\: style \:.cov +and load it with the +.B mso +request. +. +The default +.I style +is +.BR ms ; +the +.I ms.cov +file prepares a cover page resembling those of the +.I ms +package. +. +A +.I .cov +file must define a +.B \%COVEND +macro, +which a document must call at the end of the cover description. +. +Use cover description macros in the following order; +only +.B TL +and +.B AU +are required. +. +. +.IP +.EX +\&.COVER +\&.TL +\&.AF +\&.AU +\&.AT +\&.AS +.ne 2v +\&.AE +\&.COVEND +.EE +. +. +.TP +.B COVEND +End the cover description. +. +. +.TP +.B DE +End static or floating display begun with +.B DS +or +.BR DF . +. +. +.TP +.BR DF\~ [\c +.IR format \~[ fill \~[ right-indentation ]]] +Begin floating display. +. +A floating display is saved in a queue and output in the order entered. +. +Arguments are handled as in +.BR DS . +. +Floating displays cannot be nested. +. +Placement of floating displays is controlled by the registers +.B De +and +.BR Df . +. +. +.TP +.BR DL \~[\c +.IR text-indent \~[\c +.BR 1 ]] +Begin dashed list. +. +Items are prefixed with an em dash and a space. +. +A +.I text-indent +argument overrides register +.BR Pi . +. +A second argument suppresses blank lines between items. +. +Use +.B LI +to declare list items, +and +.B LE +to end the list. +. +. +.TP +.BR DS \~[\c +.IR format \~[\c +.IR fill \~[\c +.IR right-indentation ]]] +Begin static display. +. +Input until +.B DE +is called is collected into a display. +. +The display is output on a single page unless it is taller than the +height of the page. +. +.B DS +can be nested +(contrast with +.BR DF ). +. +. +.IP +.TS +tab(@); +Lf(BI) Lb +L Lx. +format@Effect +\f[I]none\f[]@Do not indent the display. +L@Do not indent the display. +I@T{ +Indent text by +.BR \[rs]n[Si] . +T} +C@Center each line. +CB@Center the whole display as a block. +R@Right-adjust the lines. +RB@Right-adjust the whole display as a block. +.TE +. +. +.IP +The values \[lq]L\[rq], +\[lq]I\[rq], +\[lq]C\[rq], +and \[lq]CB\[rq] can also be specified as \[lq]0\[rq], +\[lq]1\[rq], +\[lq]2\[rq], +and +\[lq]3\[rq], +respectively, +for compatibility with +.RI DWB\~ mm. +. +. +.IP +.TS +tab(@); +Lf(BI) Lb +L Lx. +fill@Effect +\f[I]none\f[]@Disable filling. +N@Disable filling. +F@Enable filling. +.TE +. +. +.IP +\[lq]N\[rq] and \[lq]F\[rq] can also be specified as \[lq]0\[rq] and +\[lq]1\[rq], +respectively, +for compatibility with +.RI DWB\~ mm. +. +. +.IP +A third argument +reduces the line length by +.I right-indentation. +. +. +.IP +.I mm +normally +places blank lines before and after the display. +. +Set register +.B Ds +to\~0 to suppress these. +. +. +.TP +.BR EC \~\c +.RI [ title \~[ override \~[ flag \~[ refname ]]]] +Caption an equation. +. +The caption consists of the string +.B Liec +followed by an automatically incrementing counter stored in the register +.BR Ec , +punctuation configured by the register +.BR Of , +then +.I title +(if any). +. +Use the +.B af +request to configure +.BR Ec 's +number format. +. +.I override +and +.I flag +alter the equation number as follows. +. +Omitting +.I flag +and specifying +.B 0 +in its place are equivalent. +. +. +.IP +.TS +tab(@); +Lf(BI) Lb +L Lx. +flag@Effect +0@T{ +Prefix number with +.IR override . +T} +1@T{ +Suffix number with +.IR override . +T} +2@T{ +Replace number with +.IR override . +T} +.TE +. +. +.IP +Equation captions are centered irrespective of the alignment of any +enclosing display. +. +. +.IP +.I refname +stores the equation number using +.BR SETR ; +it can be retreived with +.RB \[lq] .GETST +.IR refname \[rq]. +. +This argument is a GNU extension. +. +. +.IP +Captioned equations are listed in a table of contents +(see +.BR TC ) +if the Boolean register +.B Le +is true. +. +Such a list uses the string +.B Le +as a heading. +. +. +.TP +.BR EF\~ [ \[dq]\|\[aq]\c +.IB left \[aq] center \[aq] right \[aq]\|\[dq]\c +] +Define the even-page footer, +which is formatted just above the normal page footer on even-numbered +pages. +. +See +.BR PF . +. +.B EF +defines the string +.BR EOPef . +. +. +.TP +.BR EH\~ [ \[dq]\|\[aq]\c +.IB left \[aq] center \[aq] right \[aq]\|\[dq]\c +] +Define the even-page header, +which is formatted just below the normal page header on even-numbered +pages. +. +See +.BR PH . +. +.B EH +defines the string +.BR TPeh . +. +. +.TP +.B EN +End equation input preprocessed by +.MR @g@eqn @MAN1EXT@ ; +see +.BR EQ . +. +. +.TP +.B EOP +If defined, +this macro is called in lieu of normal page footer layout. +. +Headers and footers are formatted in a separate environment. +. +See +.BR TP . +. +. +.IP +.TS +tab(@); +Cb S +Lb L. +Strings available to EOP +_ +EOPf@argument to \fBPF\fP +EOPef@argument to \fBEF\fP +EOPof@argument to \fBOF\fP +.TE +. +. +.TP +.BI EPIC\ "\fR[\fP\fB\-L\fP\fR]\fP width height \fR[\fPname\fR]\fP" +Draw a box with the given +.I width +and +.IR height . +. +It also prints the text +.I name +or a default string if +.I name +is not specified. +. +This is used to include external pictures; +just give the size of the picture. +. +.B \-L +left-aligns the picture; +the default is to center. +. +See +.BR PIC . +. +. +.TP +.BR EQ \~[\c +.IR label ] +Start equation input preprocessed by +.MR @g@eqn @MAN1EXT@ . +. +.B EQ +and +.B EN +macro calls bracket an equation region. +. +Such regions must be contained in displays +.RB ( DS / DE ), +except when the region is used only to configure +.I @g@eqn +and not to produce output. +. +If present, +.I label +appears aligned to the right and +centered vertically within the display; +see register +.BR Eq . +. +. +If multiple +.I eqn \" generic +regions occur within a display, +only the last +.I label +(if any) +is used. +. +. +.TP +.BR EX \~\c +.RI [ title \~[ override \~[ flag \~[ refname ]]]] +Caption an exhibit. +. +Arguments are handled analogously to +.BR EC . +. +The register +.B Ex +is the exhibit counter. +. +The string +.B Liex +precedes the exhibit number and any +.I title. +. +Exhibit captions are centered irrespective of the alignment of any +enclosing display. +. +. +.IP +Captioned exhibits are listed in a table of contents +(see +.BR TC ) +if the Boolean register +.B Lx +is true. +. +Such a list uses the string +.B Lx +as a heading. +. +. +.TP +.BR FC \~[\c +.IR closing-text ] +Output the string +.BR Letfc , +or the specified +.I closing-text, +as the formal closing of a letter. +. +. +.TP +.BR FD \~[\c +.IR arg \~[\c +.BR 1 ]] +Configure display of footnotes. +. +The first argument encodes enablement of +automatic hyphenation, +adjustment to the right margin, +indentation of footnote text, +and left- vs.\& right-alignment of the footnote label within the space +allocated for it. +. +. +.br +.ne 5v +.IP +.\" XXX: We can fit one more row using "nokeep" vs. not using it. +.TS +tab(@) nokeep; +Lf(BI) Lb Lb Lb Lb +L L L L L. +arg@Hyphenate?@Adjust?@Indent?@Label alignment +0@no@yes@yes@left +1@yes@yes@yes@left +2@no@no@yes@left +3@yes@no@yes@left +4@no@yes@no@left +5@yes@yes@no@left +6@no@no@no@left +7@yes@no@no@left +8@no@yes@yes@right +9@yes@yes@yes@right +10@no@no@yes@right +11@yes@no@yes@right +.TE +. +. +.IP +An +.I arg +greater than 11 is treated +.RB as\~ 0 . +. +.IR mm 's +default +.RB is\~ 0 . +. +. +.IP +If a second argument, +conventionally +.BR 1 , +is given, +footnote numbering is reset when a first-level heading is encountered. +. +See +.BR FS . +. +. +.TP +.B FE +End footnote; +see +.BR FS . +. +. +.TP +.BR FG \~\c +.RI [ title \~[ override \~[ flag \~[ refname ]]]] +Caption a figure. +. +Arguments are handled analogously to +.BR EC . +. +The register +.B Fg +is the figure counter. +. +The string +.B Lifg +precedes the figure number and any +.I title. +. +Figure captions are centered irrespective of the alignment of any +enclosing display. +. +. +.IP +Captioned figures are listed in a table of contents +(see +.BR TC ) +if the Boolean register +.B Lf +is true. +. +Such a list uses the string +.B Lf +as a heading. +. +. +.TP +.BR FS \~[\c +.IR label ] +Start footnote. +. +Input until +.B FE +is called is collected into a footnote. +. +By default, +footnotes are automatically numbered starting at 1; +the number is available in register +.B :p +and, +with a trailing period, +in +.RB string\~ F . +. +This string precedes the footnote text at the bottom of the column or +page. +. +Footnotes are vertically separated by the product of +.RB registers\~ Fs +and +.BR Lsp . +. +In +.IR "groff mm" , +footnotes may be used in displays. +. +. +.IP +A +.I label +argument replaces the contents of the string +.BR F ; +it need not be numeric. +. +In this event, +the footnote marker in the body text must be explicitly written. +. +. +.TP +.BI GETHN\ "refname \fR[\fPvarname\fR]\fP" +Include the heading number where the corresponding +.RB \[lq] .SETR +.IR refname \[rq] +was placed. +. +This is displayed as \[lq]X.X.X.\[rq] in pass\~1. +. +See +.BR INITR . +. +If +.I varname +is used, +.B GETHN +sets the string +.I varname +to the heading number. +. +.TP +.BI GETPN\ "refname \fR[\fPvarname\fR]\fP" +Include the page number where the corresponding +.RB \[lq] .SETR +.IR refname \[rq] +was placed. +. +This is displayed as \[lq]9999\[rq] in pass\~1. +. +See +.BR INITR . +. +If +.I varname +is used, +.B GETPN +sets the string +.I varname +to the page number. +. +.TP +.BI GETR\ refname +Combine +.B GETHN +and +.B GETPN +with the text \[lq]chapter\[rq] and \[lq],\~page\[rq]. +. +The string +.B Qrf +contains the text for the cross reference: +. +.RS +.IP +\&.ds Qrf See chapter \[rs]\[rs]*[Qrfh], page \[rs]\[rs]*[Qrfp]. +.RE +. +.IP +.B Qrf +may be changed to support other languages. +. +Strings +.B Qrfh +and +.B Qrfp +are set by +.B GETR +and contain the page and heading number, +respectively. +. +.TP +.BI GETST\ "refname \fR[\fPvarname\fR]\fP" +Include the string saved with the second argument to +.BR .SETR . +. +This is a dummy string in pass\~1. +. +If +.I varname +is used, +.B GETST +sets it to the saved string. +. +See +.BR INITR . +. +. +.TP +.BI H\~ level\~\c +.RI [ title \~[ suffix ]] +Set a numbered section heading at +.IR level . +. +.I mm +produces numbered +.I "heading marks" +of the form +.IR a . b . c .\|.\|., +with up to fourteen levels of nesting. +. +Each level's number increases automatically with each +.B H +call and is reset to zero when a more significant +.I level +is specified. +. +.RB \[lq] 1 \[rq]\~is +the most significant or coarsest division of the document. +. +Text after an +.B H +call is formatted as a paragraph; +calling +.B P +is unnecessary. +. +. +.IP +.I title +specifies an optional title; +it must be double-quoted if it contains spaces. +. +.I mm +appends +.I suffix +to +.I title +in the body of the document, +but omits it from any table of contents +(see +.BR TC ). +. +This facility can be used to annotate the heading title with a footnote. +. +.I suffix +should not interpolate +.RB the\~ F +string; +specify a footnote mark explicitly. +. +See +.BR FS . +. +. +.IP +Heading behavior is highly configurable. +. +Several registers set a +.I threshold, +where heading levels at or below the threshold value are handled in one +way, +and those above it another. +. +For example, +a heading level within the threshold of register +.B Cl +is included in the table of contents +(see +.BR TC ). +. +. +.IP +.I Heading layout. +. +Register +.B Ej +sets a threshold for page breaking (ejection) prior to a heading. +. +If not preceded by a page break, +a heading level below the threshold in register +.B Hps +is preceded by the amount of vertical space in register +.BR Hps1 , +and by the amount in +.B Hps2 +otherwise. +. +The +.B Hb +register sets a threshold below which a break occurs after the heading, +and register +.B Hs +sets a threshold below which vertical space follows it. +. +If the heading level is not less than both of these, +a +.I run-in heading +is produced; +paragraph text follows on the same output line. +. +Otherwise, +register +.B Hi +configures the indentation of text after headings. +. +Threshold register +.B Hc +enables the centering of headings; +a heading level below both of the +.B Hb +and +.B Hc +thresholds is centered. +. +. +.IP +.I Heading typeface and size. +. +The fonts used for heading numbers and titles at each level are +configured by the +.B HF +string. +. +The string +.B HP +likewise assigns a type size to each heading level. +. +.\" XXX: Why not an "Hvs" string? +The vertical spacing used by headings may be controlled by +the user-definable macros +.B HX +and/or +.BR HZ . +. +. +.IP +.I Heading number format. +. +Registers named +.B H1 +through +.B H14 +store counters for each heading level. +. +Their values are printed using Arabic numerals by default; +see +.BR HM . +. +The heading levels are catenated with dots for formatting; +to typeset only the deepest, +set the +.B Ht +register. +. +Heading numbers are not suffixed with a trailing dot except when only +the first level is output; +to omit a dot in this case as well, +clear the +.B H1dot +register. +. +. +.IP +.I Customizing heading behavior. +. +.I mm +calls +.I hook +macros to enable further customization of headings. +. +(DWB +.I mm +called these \[lq]exits\[rq].) +. +They can be used to change the heading's +.I mark +(the numbered portion before any heading title), +its vertical spacing, +and its vertical space requirements +(for instance, +to require a minimum quantity of subsequent output lines). +. +Define hook macros in expectation of the following parameters. +. +The argument +.I declared-level +is the +.I level +argument to +.BR H , +.RB or\~ 0 +for unnumbered headings (see +.BR HU ). +. +.I actual-level +is the same as +.I declared-level +for numbered headings, +and the value of +.RB register\~ Hu +for unnumbered headings. +. +.I title +is the corresponding argument to +.B H +or +.BR HU . +. +. +.RS +.TP +.BI HX\~ "declared-level actual-level title" +.I mm +calls +.B HX +before setting the heading. +. +Your definition may alter +.BR }0 , +.BR }2 , +and +.BR ;3 . +. +. +.\" XXX: These names are ugly and of no obvious meaning. Make +.\" documented aliases for them. +.RS +.TP +.BR }0\~ (string) +contains the heading mark plus two spaces if +.I declared-level +is non-zero, +and otherwise is empty. +. +. +.TP +.BR ;0\~ (register) +encodes a position for the text after the heading. +. +0\~means that the heading is to be run in, +1\~means that a break is to occur before the text, +and 2\~means that vertical space is to separate heading and text. +. +. +.TP +.BR }2\~ (string) +is the suffix that separates a run-in heading from the text. +. +It contains two spaces if register +.B ;0 +is\~0, +and otherwise is empty. +. +. +.TP +.BR ;3\~ (register) +contains the vertical space required for the heading to be typeset. +. +If that amount is not available, +the page is broken prior to the heading. +. +The default is +.BR 2v . +.RE +. +. +.TP +.BI HY\~ "declared-level actual-level title" +.I mm +calls +.B HY +after determing the heading typeface and size. +. +It could be used to change indentation. +. +. +.TP +.BI HZ\~ "declared-level actual-level title" +.I mm +calls +.B HZ +after formatting the heading, +just before +.B H +or +.B HU +returns. +. +It could be used to change the page header to include a section heading. +.\" XXX: ...but only for the _next_ page, not the current one. See +.\" Savannah #62825. +.RE +. +. +.TP +.BI HC\ \fR[\fPhyphenation-character\fR]\fP +Set hyphenation character. +. +Default value is \[lq]\[rs]%\[rq]. +. +Resets to the default if called without argument. +. +Hyphenation can be turned off by setting register +.B Hy +to\~0 at the beginning of the file. +. +. +.TP +.BI HM\ "\fR[\fParg1 \fR[\fParg2 \fR[.\|.\|.\& [\fParg14\fR]]]]\fP" +Set the heading mark style. +. +Each argument assigns the specified register format +(see above) +to the corresponding heading level. +. +The default +.RB is\~ 1 +for all levels. +. +An explicitly empty argument also indicates the default. +. +. +.TP +.BI HU\~ heading-text +Set an unnumbered section heading. +. +Except for a heading number, +it is treated as a numbered heading of the level stored in +.RB register\~ Hu ; +.RB see\~ H . +. +. +.TP +.BR I \~\c \" space in roman; we must use 2-font macro with \c +.RI [ italic-text\~\c +.RI [ previous-font-text ]]\~.\|.\|. +Join +.I italic-text +in italics with +.I previous-font-text +in the previous font, +without space between the arguments. +. +If no arguments, +switch font to italic style. +. +. +.TP +.BR IA \~[\c +.IR recipient-name \~[\c +.IR title ]] +Specify the inside address in a letter. +. +Input is collected into the inside address until +.B IE +is called, +and then output. +. +You can specify multiple recipients with empty +.BR IA / IE +pairs; +only the last address is used. +. +The arguments give each recipient a name and title. +. +See +.BR LT . +. +. +.TP +.BR IB \~\c \" space in roman; we must use 2-font macro with \c +.RI [ italic-text\~\c +.RI [ bold-text ]]\~.\|.\|. +Join +.I italic-text +in italics with +.I bold-text +in boldface, +without space between the arguments. +. +. +.TP +.B IE +End the inside address begun with +.BR IA . +. +. +.TP +.BI IND\~ argument\~\c +\&.\|.\|. +If the Boolean register +.B Ref +is true, +write an index entry as a specially prepared +.I roff +comment to the standard error stream, +with each +.I argument +separated from its predecessor by a tab character. +. +The entry's location information is arranged as configured by the most +recent +.B INITI +call. +. +. +.TP +.B INDP +Output the index set up by +.B INITI +and populated by +.B IND +calls. +. +By default, +.B INDP +calls +.B SK +and writes a centered caption interpolating the string +.BR Index . +. +It then disables filling and calls +.BR 2C ; +afterward, +it restores filling and calls +.BR 1C . +. +. +.IP +Define macros to customize this behavior. +. +.B INDP +calls +.B TXIND +before the caption, +.B TYIND +.I instead +of writing the caption, +and +.B TZIND +after formatting the index. +. +. +.TP +.BI INITI\~ "location-type file-name\~"\c +.RI [ macro ] +Initialize +.IR "groff mm" 's +indexing system. +. +Argument +.I location-type +selects how the location of each index entry is reported. +. +.I file-name +populates an internal string used later by +.BR INDP . +. +. +.IP +.TS +tab(@); +Lf(BI) Lb +L Lx. +location-type@Entry format +N@page number +H@heading mark +B@page number, tab character, heading mark +.TE +. +. +.IP +If +.I macro +is specified, +it is called for each index entry +with the arguments given to +.BR IND . +. +. +.TP +.BI INITR\~ id +Initialize the cross reference macros. +. +Cross references are written to the standard error stream, +which should be redirected into a file named +.RI id .qrf . +. +.MR mmroff @MAN1EXT@ +handles this and the two formatting passes it requires. +.\". +.\"This program exists because +.\".MR groff @MAN1EXT@ +.\"by default deactivates the unsafe operations that are required by +.\".BR INITR . +. +The first pass identifies cross references, +and the second one includes them. +.\" +.\".B INITR +.\"can be used several times, +.\"but it is only the first occurrence of +.\".B INITR +.\"that is active. +. +. +.IP +See +.BR SETR , +.BR GETPN , +and +.BR GETHN . +. +. +.TP +.BR IR \~\c \" space in roman; we must use 2-font macro with \c +.RI [ italic-text\~\c +.RI [ roman-text ]]\~.\|.\|. +Join +.I italic-text +in italics with +.I roman-text +in roman style, +without space between the arguments. +. +. +.TP +.BR ISODATE\~ [ 0 ] +Use ISO\~8601 format for the date string +.B DT +used by some cover sheet and memorandum types; +that is, +.IR YYYY - MM - DD . +. +Must be called before +.B ND +to be effective. +. +If given an argument +.RB of\~ 0, +the traditional date format for the +.I groff +locale is used; +this is also the default. +. +. +.TP +.BI LB\~ "text-indent mark-indent pad type"\~\c +.RI [ mark \~[ pre-item-space \~[ pre-list-space ]]] +Begin list. +. +The macros +.BR AL , +.BR BL , +.BR BVL , +.BR DL , +.BR ML , +.BR RL , +and +.B VL +call +.B LB +in various ways; +they are simpler to use and may be preferred if they suit the desired +purpose. +. +. +.br +.ne 5v +.IP +The nesting level of lists is tracked by +.I mm; +the outermost level is\~0. +. +The text of each list item is indented by +.I text-indent; +the default is taken from the +.B Li +register +(in ens). +. +Each item's mark is indented by +.I mark-indent; +the default is +.BR 0n . +. +The mark is normally left-aligned. +. +If +.I pad +is greater than zero, +.I mark-indent +is overridden such that +.I pad +ens of space follow the mark. +. +.I type +selects one of six possible ways to display the mark. +. +. +.IP +.TS +tab(@); +Lf(BI) Lb +L L. +type@Output for a mark \[lq]x\[rq] +1@x. +2@x) +3@(x) +4@[x] +5@<x> +6@{x} +.TE +. +. +.IP +If +.I type +is\~0 and +.I mark +is unspecified, +the items are set with a hanging indent. +. +Otherwise, +.I mark +is interpreted as a string defining the mark. +. +If +.I type +is greater than zero, +items are automatically numbered; +.I mark +is interpreted as a register format. +. +The default +.I type +.RB is\~ 0 . +. +. +.IP +The last two arguments manage vertical space. +. +Unless a list's nesting level is greater than the value of register +.BR Ls , +its items are preceded by +.I pre-item-space +multiplied by the register +.BR Lsp ; +the default +.RB is\~ 1 . +. +.B LB +precedes the list by +.I pre-list-space +multiplied by the register +.BR Lsp ; +the default +.RB is\~ 0 . +. +. +.TP +.BR LC \~[\c +.IR list-level ] +Clear list state. +. +Active lists are terminated as if with +.BR LE , +either all +(the default) +or only those from the current level down to +.I list-level +if specified. +. +.B H +calls +.B LC +automatically. +. +. +.TP +.BR LE \~[ 1 ] +End list. +. +The current list is terminated. +. +An argument +.RB of\~ 1 +causes +vertical space in the amount of register +.B Lsp +to follow the list. +. +. +.TP +.BR LI \~[\c +.IR mark \~[ item-mark-mode ]] +Begin a list item. +. +Input is collected into a list item until the current list is terminated +or +.B LI +is called again. +. +By default, +the item's text is preceded by any mark configured by the current list. +. +If only +.I mark +is specified, +it replaces the configured mark. +. +A second argument +prefixes +.I mark +to the configured mark; +an +.I item-mark-mode +value of\~1 places an unbreakable space after +.I mark, +while +a value of\~2 does not +(rendering the two adjacent). +. +Also see register +.BR Limsp . +. +. +.TP +.BI LO\~ option\~\c +.RI [ value ] +Specify letter options; +see +.BR LT . +. +Standard options are as follows. +. +See +.B IA +regarding the inside address and string +.B DT +regarding the date. +. +. +.IP +.TS +tab(@); +Lf(BI) Lb +L Lx. +option@Effect +AT@T{ +Attention; +put contents of string +.B LetAT +and +.I value +left-aligned after the inside address. +T} +CN@T{ +Confidential; +put +.I value, +or contents of string +.BR LetCN , +left-aligned after the date. +T} +RN@T{ +Reference; +put contents of string +.B LetRN +and +.I value +after the confidental notation +(if any) +and the date, +aligned with the latter. +T} +SA@T{ +Salutation; +put +.I value, +or contents of string +.BR LetSA , +left-aligned after the inside address +and the confidental notation +(if any). +T} +SJ@T{ +Subject; +put contents of string +.B LetSJ +and +.I value +left-aligned after the inside address +and the attention and salutation notations +(if any). +. +In letter type \[lq]SP\[rq], +.B LetSJ +is ignored and +.I value +is set in full capitals. +T} +.TE +. +. +.br +.ne 5v +.TP +.BR LT \~[\c +.IR style ] +Format a letter in the designated +.I style, +defaulting to +.B BL +(see below). +. +A letter begins with the writer's address +.RB ( WA / WE ), +followed by the date +.RB ( ND ), +the inside address +.RB ( IA / IE ), +the body of the letter +.RB ( P +and other general-purpose +.I mm +macros), +the formal closing +.RB ( FC ), +the signature +.RB ( SG ), +and notations +.RB ( NS / NE ). +. +Any of these may be omitted. +. +Letter options specified with +.B LO +add further annotations, +which are extensible; +see section \[lq]Internals\[rq] below. +. +. +.br +.ne 6v +.IP +.TS +tab(@); +Lf(BI) Lb +Lb Lx. +style@Description +BL@T{ +Blocked: +the writer's address, +date, +formal closing, +and signature are indented to the center of the line. +. +Everything else is left-aligned. +T} +SB@T{ +Semi-blocked: +as +.BR BL , +but the first line of each paragraph is indented by +.BR 5m . +.\" XXX: https://savannah.gnu.org/bugs/?64315 +T} +FB@T{ +Fully blocked: +everything begins at the left margin. +T} +SP@T{ +Simplified: +as +.BR FB , +but a formal closing is omitted, +and the signature is set in full capitals. +T} +.TE +. +. +.TP +.BI MC\~ column-width\~\c +.RI [ gutter-width ] +Begin multi-column layout. +. +.I groff mm +creates as many columns of +.I column-width +as the line length will permit. +. +.I gutter-width +is the interior spacing between columns. +. +It defaults to +.IR column-width /15. +. +.B 1C +returns to single-column layout. +. +.B MC +is a GNU extension. +. +See +.B MULB +for an alternative. +. +. +.TP +.BI ML\~ "mark \fR[\fPtext-indent\~" \fR[\fP1\fR]]\fP +Start a list with the +.I mark +argument preceding each list item. +. +.I text-indent +overrides the default indentation of the list items set by register +.BR Li . +. +If a third argument, +conventionally +.BR 1 , +is given, +the blank line that normally precedes each list item is suppressed. +. +Use +.B LI +to declare list items, +and +.B LE +to end the list. +. +. +.TP +.BR MT \~\c \" space in roman; we must use 2-font macro with \c +.RI [ type \~[ addressee ]] +Select memorandum type. +. +These correspond to formats used by AT&T Bell Laboratories, +where the +.I mm +package was initially developed, +affecting the document layout. +. +Some of these included a cover page with a caption categorizing the +document. +. +.I groff mm +uses +.I type +to construct the file name +.IR @TMAC_MDIR@/\:\% type \:.MT +and load it with the +.B mso +request. +. +Memorandum types 0 to\~5 are supported; +any other value of +.I type +is mapped to type\~6. +. +If +.I type +is omitted, +.B 0 +is implied. +. +.I addressee +sets a string analogous to one used by AT&T cover sheet macros that are +not implemented in +.IR "groff mm" . +. +. +.IP +.TS +tab(@); +Lf(BI) Lb +L L. +type@Description +0@normal memorandum; no caption +1@captioned \[lq]MEMORANDUM FOR FILE\[rq] +2@captioned \[lq]PROGRAMMER'S NOTES\[rq] +3@captioned \[lq]ENGINEER'S NOTES\[rq] +4@released paper +5@external letter +.TE +. +. +.IP +See +.B \%COVER +for a more flexible cover sheet mechanism. +. +. +.TP +.BI MOVE\ "y-pos \fR[\fPx-pos \fR[\fPline-length\fR]]\fP" +Move to a position, setting page offset to +.IR x-pos . +. +If +.I line-length +is not given, the difference between current and new page offset is +used. +. +Use +.B PGFORM +without arguments to return to normal. +. +. +.TP +.BR MULB \~\c \" space in roman; we must use 2-font macro with \c +.IR "cw1 space1\~" [ "cw2 space2" "] .\|.\|.\~" cwn +Begin alternative multi-column mode. +. +All column widths must be specified, +as must the amount of space between each column pair. +. +The arguments' default scaling unit is +.BR n . +. +.B MULB +uses a diversion and operates in a separate environment. +. +. +.TP +.B MULN +Begin next column in alternative column mode. +. +. +.TP +.B MULE +End alternative multi-column mode and emit the columns. +. +. +.TP +.B NCOL +Move to the start of the next column +(only when using +.B 2C +or +.BR MC ). +. +Contrast with +.BR MULN . +. +. +.TP +.BR ND \~[\c +.IR arg ] +Set the document's date. +. +.I mm +does not interpret +.IR arg ; +it can be a revision identifier +(or empty). +. +. +.TP +.B NE +End notation begun with +.BR NS ; +filling is enabled. +. +. +.TP +.BI nP\ \fR[\fPtype\fR]\fP +Begin a numbered paragraph at heading level two. +. +See +.BR P . +. +. +.br +.ne 6v +.TP +.BR NS \~[\c +.IR code \~[\c +.BR 1 ]] +Declare notations, +typically for letters or memoranda, +of the type specified by +.IR code . +. +The text corresponding to +.I code +is output, +and filling is disabled +until +.B NE +is called. +. +Typically, +a list of names or attachments lies within +.BR NS / NE . +. +If +.I code +is absent or does not match one of the values listed under the +.B Letns +string description below, +each line of notations is formatted as +.RI "\[lq]Copy (" line ") to\[rq]." +. +If a second argument, +conventionally +.BR 1 , +is given, +.I code +becomes the entire notation and +.B NE +is not necessary. +. +In +.IR "groff mm" , +you can set up further notations to be recognized by +.BR NS ; +see the strings +.B Letns +and +.B Letnsdef +below. +. +. +.TP +.BR OF\~ [ \[dq]\|\[aq]\c +.IB left \[aq] center \[aq] right \[aq]\|\[dq]\c +] +Define the odd-page footer, +which is formatted just above the normal page footer on odd-numbered +pages. +. +See +.BR PF . +. +.B OF +defines the string +.BR EOPof . +. +. +.TP +.BR OH\~ [ \[dq]\|\[aq]\c +.IB left \[aq] center \[aq] right \[aq]\|\[dq]\c +] +Define the odd-page header, +which is formatted just below the normal page header on odd-numbered +pages. +. +See +.BR PH . +. +.B OH +defines the string +.BR TPoh . +. +. +.TP +.B OP +Make sure that the following text is printed at the top of an +odd-numbered page. +. +Does not output an empty page if currently at the top of an odd page. +. +. +.br +.ne 4v +.TP +.BR P \~[\c +.IR type ] +Begin new paragraph. +. +If +.I type +is missing or\~ 0, +.BR P \~sets +the paragraph fully left\-aligned. +. +A +.I type +of\~1 +idents the first line by +.B \[rs][Pi] +ens. +. +Set the register +.B Pt +to select a default paragraph indentation style. +. +The register +.B Ps +controls the vertical spacing between paragraphs. +. +. +.TP +.B PE +Picture end; +see +.MR @g@pic @MAN1EXT@ . +. +. +.TP +.BR PF\~ [ \[dq]\|\[aq]\c +.IB left \[aq] center \[aq] right \[aq]\|\[dq]\c +] +Define the page footer. +. +The footer is formatted at the bottom of each page; +the argument is otherwise as described in +.BR PH . +. +.B PF +defines the string +.BR EOPf . +. +See +.BR EF , +.BR OF , +and +.BR EOP . +. +.TP +.BI PGFORM\ "\fR[\fPlinelength \fR[\fPpagelength \fR[\fPpageoffset\ " \fR[\fP1\fR]]]]\fP +Set line length, page length, and/or page offset. +. +This macro can be used for letterheads and similar. +. +It is normally the first macro call in a file, +though it is not necessary. +. +.B PGFORM +can be used without arguments to reset everything after a +.B MOVE +call. +. +A line break is done unless the fourth argument is given. +. +This can be used to avoid the page number on the first page +while setting new width and length. +. +(It seems as if this macro sometimes doesn't work too well. +. +Use the command-line arguments to change +line length, page length, and page offset instead.) +. +.TP +.B PGNH +Suppress header on the next page. +. +This macro must be called before any macros that produce output to +affect the layout of the first page. +. +. +.TP +.BR PH\~ [ \[dq]\|\[aq]\c +.IB left \[aq] center \[aq] right \[aq]\|\[dq]\c +] +.RS +Define the page header, +formatted at the top of each page, +as the argument, +where +.IR left , +.IR center , +and +.I right +are aligned to the respective locations on the line. +. +A +.RB \[lq] % \[rq] +character in +.I arg +is replaced by the page number. +. +If the argument is absent, +no page header is set. +. +The default page header is +. +.RS +.EX +\[dq]\[aq]\[aq]\- % \-\[aq]\[aq]\[dq] +.EE +.RE +. +which centers the page number between hyphens and formats nothing at the +upper left and right. +. +Header macros call +.B PX +(if defined) +after formatting the header. +. +.B PH +defines the string +.BR TPh . +. +See +.BR EH , +.BR OH , +and +.BR TP . +.RE +. +. +.TP +.BR PIC \~\c +.RB [ \-B ]\~\c +.RB [ \-C |\c +.BI \-I\~ n\c +.RB | \-L \c +.RB | \-R ]\~\c +.IR file \~[ width \~[ height ]] +Include PostScript document +.IR file . +. +The optional +.B \-B +argument draws a box around the picture. +. +The optional +.BR \-L , +.BR \-C , +.BR \-R , +and +.BI \-I\~ n +arguments align the picture or indent it by +.I n +(assuming a scaling unit of +.BR m ). +. +By default, +the picture is left-aligned. +. +Optional +.I width +and +.I height +arguments resize the picture. +. +Use of this macro requires two-pass processing; +see +.B INITR +and +.MR mmroff @MAN1EXT@ . +. +. +.TP +.B PS +Picture start; see +.MR @g@pic @MAN1EXT@ . +. +. +.TP +.B PY +Picture end with flyback. +. +Ends a +.MR @g@pic @MAN1EXT@ +picture, +returning the vertical position to where it was prior to the picture. +. +This is a GNU extension. +. +. +.TP +.BR R \~\c \" space in roman; we must use 2-font macro with \c +.RI [ roman-text\~\c +.RI [ previous-font-text ]]\~.\|.\|. +Join +.I roman-text +in roman style with +.I previous-font-text +in the previous font, +without space between the arguments. +. +If no arguments, +switch font to roman style. +. +. +.TP +.BR RB \~\c \" space in roman; we must use 2-font macro with \c +.RI [ roman-text\~\c +.RI [ bold-text ]]\~.\|.\|. +Join +.I roman-text +in roman style with +.I bold-text +in boldface, +without space between the arguments. +. +. +.TP +.BI RD\ "\fR[\fPprompt \fR[\fPdiversion \fR[\fPstring\fR]]]\fP" +Read from standard input to diversion and/or string. +. +The text is saved in a diversion named +.IR diversion . +. +Recall the text by writing the name of the diversion after a dot +on an empty line. +. +A string is also defined if +.I string +is given. +. +.I Diversion +and/or +.I prompt +can be empty (\[dq]\[dq]). +. +.TP +.B RF +Reference end. +. +Ends a reference definition and returns to normal processing. +. +See +.BR RS . +. +. +.TP +.BR RI \~\c \" space in roman; we must use 2-font macro with \c +.RI [ roman-text\~\c +.RI [ italic-text ]]\~.\|.\|. +Join +.I roman-text +in roman style with +.I italic-text +in italics, +without space between the arguments. +. +. +.TP +.BR RL \~[\c +.IR text-indent \~[\c +.BR 1 ]] +Begin reference list. +. +Each item is preceded by an automatically incremented number between +square brackets; +compare +.BR AL . +. +.I text-indent +changes the default indentation. +. +Use +.B LI +to declare list items, +and +.B LE +to end the list. +. +A second argument, +conventionally +.BR 1 , +suppresses the blank line that normally precedes each list item. +. +. +.TP +.BR RP \~\c \" space in roman; we must use 2-font macro with \c +.RI [ suppress-counter-reset \~[ page-ejection-policy ]] +Format a reference page, +listing items accumulated within +.BR RS / RF +pairs. +. +The reference counter is reset unless the first argument +.RB is\~ 1 . +. +Normally, +page breaks occur before and after the references are output; +the register +.B Rpe +configures this behavior, +and a second argument overrides its value. +. +.B TC +calls +.B RP +automatically if references have accumulated. +. +. +.IP +References are list items, +and thus are vertically separated +(see +.BR LB ). +. +Setting register +.B Ls +.RB to\~ 0 +suppresses this spacing. +. +The string +.B Rp +contains the reference page caption. +. +. +.br +.ne 5v +.TP +.BR RS \~[\c +.IR reference-string ] +Begin an automatically numbered reference definition. +. +By default, +references are numbered starting at 1; +the number is available in register +.BR :R . +. +Interpolate the string +.B Rf +where the reference mark should be and write the reference between +.BR RS / RF +on an input line after the reference mark. +. +If +.I reference-string +is specified, +.I "groff ms" +also stores the reference mark in a string of that name, +which can be interpolated as +.BI \[rs]*[ reference-string ] +subsequently. +. +. +.TP +.BR S \~[\c +.IR type-size \~[ vertical-spacing ]] +Set type size and vertical spacing. +. +Each argument is a +.I groff +measurement, +using an appropriate scaling unit and an optional +.B + +or +.B \- +prefix to increment or decrement the current value. +. +An argument of +.B P +restores the previous value, +.B C +indicates the current value, +and +.B D +requests the default. +. +An empty or omitted argument is treated as +.BR P . +. +. +.TP +.BR SA \~\c +.RI [ mode ] +Set or restore the default enablement of adjustment. +. +Specify +.B 0 +or +.B 1 +as +.I mode +to set a document's default explicitly; +.B 1 +is assumed by +.IR mm . +. +Adjustment can be temporarily suspended with the +.B na +request. +. +When the +.B H +or +.B HU +macros are used to format a heading, +or when +.B SA +is called without a +.I mode +argument, +the default adjustment is restored. +. +. +.TP +.BI SETR\ "refname \fR[\fPstring\fR]\fP" +Remember the current heading and page numbers as +.IR refname . +. +Saves +.I string +if +.I string +is defined. +. +.I string +is retrieved with +.BR GETST . +. +See +.BR INITR . +. +.TP +.BI SG\ \fR[\fParg\ \fR[\fP1\fR]]\fP +Signature line. +. +Prints the authors name(s) after the formal closing. +. +The argument is appended to the reference data, printed at either the +first or last author. +. +The reference data is the location, department, and initials specified +with +.BR AU . +. +It is printed at the first author if the second argument is given, +otherwise at the last. +. +No reference data is printed if the author(s) is specified through +.BR WA / WE . +. +See section \[lq]Internals\[rq] below. +. +. +.TP +.BR SK \~\c +.RI [ n ] +Skip +.I n +pages. +. +If +.I n +is\~0 or omitted, +the page is broken unless the drawing position is already at the top of +a page. +. +Otherwise, +.I n +pages, +blank except for any headers and footers, +are printed. +. +. +.br +.ne 4v \" XXX: 3v should suffice +.TP +.BI SM\~ text\~\c +.RI [ post ] +.TQ +.BI SM\~ "pre text post" +Format +.I text +at a smaller type size, +joined with any specified +.I pre +and +.I post +at normal size. +. +. +.TP +.BI SP\ \fR[\fPlines\fR]\fP +Space vertically. +. +.I lines +can have any scaling factor, +like \[lq]3i\[rq] or \[lq]8v\[rq]. +. +Several +.B SP +calls in a line only produces the maximum number of lines, not the sum. +. +.B SP +is ignored also until the first text line in a page. +. +Add +.B \[rs]& +before a call to +.B SP +to avoid this. +. +. +.TP +.B TAB +Reset tab stops to every 5\~ens. +. +. +.br +.ne 4v +.TP +.BR TB \~\c +.RI [ title \~[ override \~[ flag \~[ refname ]]]] +Caption a table. +. +Arguments are handled analogously to +.BR EC . +. +The register +.B Tb +is the table counter. +. +The string +.B Litb +precedes the table number and any +.I title. +. +Table captions are centered irrespective of the alignment of any +enclosing display. +. +. +.IP +Captioned tables are listed in a table of contents +(see +.BR TC ) +if the Boolean register +.B Lt +is true. +. +Such a list uses the string +.B Lt +as a heading. +. +. +.TP +.BR TC \~\c +.RI [ slevel\~\c +.RI [ spacing\~\c +.RI [ tlevel\~\c +.RI [ tab\~\c +.RI [ h1\~\c +.RI [ h2\~\c +.RI [ h3\~\c +.RI [ h4\~\c +.RI [ h5 ]]]]]]]]] +Output table of contents. +. +This macro is normally the last called in the document. +. +It flushes any pending displays and, +if any references are pending +(see +.BR RS ), +calls +.BR RP . +. +It then begins a new page with the contents caption, +stored in the string +.BR Licon , +centered at the top. +. +The entries follow after three vees of space. +. +Each entry is a +saved section +(number and) +heading title +(see the +.B Cl +register), +along with its associated page number. +. +By default, +an entry is indented by an amount corresponding to its heading level +and the maximum heading length encountered at that heading level; +if defined, +the string +.B Ci +overrides these indentations. +. +Entries at heading levels up to and including +.I slevel +are preceded by +.I spacing +vees of space. +. +Entries at heading levels up to and including +.I tlevel +are followed by a leader and a right-aligned page number. +. +If the Boolean-valued +.I tab +argument is true, +the leader is replaced with horizontal motion in the same amount. +. +For entries above heading level +.IR tlevel , +the page number follows the heading text after a word space. +. +Each argument +.IR h1 .\|.\|. h5 +appears in order on its own line, +centered, +above the contents caption. +. +Page numbering restarts at 1, +in register format \[lq]i\[rq]. +. +If the +.B Oc +register is true, +numbering of these pages is suppressed. +. +. +.IP +If +.B TC +is called with at most four arguments, +it calls the user-defined macro +.B TX +(if defined) +prior to formatting the contents caption, +and +.B TY +(if defined) +.I instead +of formatting the contents caption. +. +. +.IP +Analogous handling of lists of figures, +tables, +equations, +and exhibits is achieved by defining +.BI TX xx +and +.BI TY xx +macros, +where +.I xx +is \[lq]FG\[rq], +\[lq]TB\[rq], +\[lq]EC\[rq], +or \[lq]EX\[rq], +respectively. +. +Similarly, +the strings +.BR Lifg , +.BR Litb , +.BR Liex , +and +.B Liec +determine captions for their respective lists. +. +. +.TP +.B TE +Table end. +. +See +.BR TS . +. +.TP +.B TH +End table heading. +. +It is repeated after page breaks within a table. +. +See +.BR TS . +. +The +.B N +argument supported by DWB +.I mm +is not implemented by +.I "groff mm." +. +. +.TP +.BR TL \~[\c +.IR charging-case-number \~[\c +.IR filing-case-number ]] +Begin document title. +. +Input is collected into the title until +.B AF +or +.B AU +is called, +and output as directed by the cover page. +. +.I charging-case-number +and +.I filing-case-number +are saved for use in memorandum types 0 and 5. +. +See +.BR MT . +. +. +.TP +.BI TM\~ number\c +\~.\|.\|. +Declare technical memorandum number(s) used by +.BR MT . +. +. +.br +.ne 6v +.TP +.B TP +If defined, +this macro is called in lieu of normal page header layout. +. +Headers and footers are formatted in a separate environment. +. +See +.BR EOP . +. +. +.IP +.TS +tab(@); +Cb S +Lb L. +Strings available to TP +_ +TPh@argument to \fBPH\fP +TPeh@argument to \fBEH\fP +TPoh@argument to \fBOH\fP +.TE +. +. +.TP +.B TS \fR[\fPH\fR]\fP +Table start. +. +Argument \[lq]H\[rq] tells +.I mm +that the table has a heading. +. +See +.BR TE , +.BR TH , +and +.MR @g@tbl @MAN1EXT@ . +. +. +.TP +.BR VERBON \~\c \" space in roman; we must use 2-font macro with \c +.RI [ format \~[ type-size \~[ font ]]] +Begin verbatim display, +where characters have equal width. +. +.I format +controls several parameters. +. +Add up the values of desired features; +the default +.RB is\~ 0 . +. +On typesetting devices, +further arguments configure the +.I type-size +in scaled points, +and the face +.RI ( font ); +the default is +.B CR +(Courier roman). +. +. +.IP +.TS +tab(@); +lb lb +l lx. +Value@Effect +1@Disable the formatter's escape character (\[rs]). +2@Vertically space before the display. +4@Vertically space after the display. +8@T{ +Number output lines; call formatter's +.B nm +request with arguments in string +.BR Verbnm . +T} +16@T{ +Indent by the amount stored in register +.BR Verbin . +T} +.TE +. +. +.TP +.B VERBOFF +End verbatim display. +. +. +.TP +.BR VL \~[\c +.IR text-indent \~[ mark-indent \~[\c +.BR 1 ]]] +Begin variable-item +(or \[lq]tagged\[rq]) +list. +. +Each item should supply its own mark, +or tag. +. +If the mark is wider than +.I mark-indent, +one space separates it from subsequent text; +contrast +.BR BVL . +. +.I text-indent +sets the indentation of the text, +and +.I mark-indent +the distance from the current list indentation to the mark. +. +A third argument suppresses the blank line that normally precedes each +list item. +. +Use +.B LI +to declare list items, +and +.B LE +to end the list. +. +. +.TP +.BI "VM \fR[\fP\-T\fR] [\fP" "top \fR[\fPbottom\fR]]\fP" +Vertical margin. +. +Increase the top and bottom margin by +.I top +and +.IR bottom , +respectively. +. +If option +.B \-T +is specified, set those margins to +.I top +and +.IR bottom . +. +If no argument is given, reset the margin to zero, or to the default +(\[lq]7v 5v\[rq]) +if +.B \-T +is used. +. +It is highly recommended that macros +.B TP +and/or +.B EOP +are defined if using +.B \-T +and setting top and/or bottom margin to less than the default. +. +This undocumented DWB +.I mm +macro is exposed by +.I groff mm +to increase user control of page layout. +. +. +.TP +.BR WA \~[\c +.IR writer's-name \~[\c +.IR title ]] +Specify the writer(s) of an +.B LT +letter. +. +Input is collected into the writer's address until +.B WA +is called, +and then output. +. +You can specify multiple writers with empty +.BR WA / WE +pairs; +only the last address is used. +. +The arguments give each writer a name and title. +. +. +.TP +.BR WC \~[\c +.IR format \~.\|.\|.] +Control width of footnotes and displays. +. +. +.IP +.RS +.TS +tab(@); +Lf(BI) Lb +Lb Lx. +format@Effect +N@T{ +equivalent to +.RB \[lq] "\-WF \-FF \-WD" \[rq] +.\" FB \" XXX: see Savannah ticket reference below +(default) +T} +WF@T{ +set footnotes at full line length, +even in two-column mode +.\" XXX: what about multi-column modes more generally? +T} +\-WF@T{ +set footnotes using column line length +T} +FF@T{ +apply width of first footnote to encountered to subsequent ones +T} +\-FF@T{ +footnote width determined by +.B WF +and +.B \-WF +T} +WD@T{ +set displays at full line length, +even in two-column mode +.\" XXX: what about multi-column modes more generally? +T} +\-WD@T{ +set displays using column line length +T} +.TE +.RE +.\" XXX: See <https://savannah.gnu.org/bugs/?64316>. +.\"FB@T{ +.\"Break when outputting floating displays. +.\"T} +.\"\-FB@T{ +.\"Do not break when outputting floating displays. +.\"T} +. +. +.TP +.B WE +End the writer's address begun with +.BR WA . +. +. +.br +.ne 4v +.\" ==================================================================== +.SH Strings +.\" ==================================================================== +. +Many +.I mm +strings interpolate predefined, +localizable text. +. +These are presented in quotation marks. +. +. +.TP +.B App +\[lq]APPENDIX\[rq] +. +. +.TP +.B Apptxt +stores the +.I title +argument to the last +.B APP +call. +. +. +.TP +.B BU +interpolates a bullet +(see +.BR BL ). +. +. +.TP +.B Ci +is a list of indentation amounts to use for table of contents heading +levels, +overriding their automatic computation. +. +Each word must be a horizontal measurement +(like +.RB \[lq] 1i \[rq]) +and is mapped one-to-one to heading levels 1, +2, +and so on. +. +. +.TP +.B DT +The date; +set by the +.B ND +macro +(defaults to the date the document is formatted). +. +The format is the conventional one for the +.I groff +locale, +but see the +.B ISODATE +macro and +.B Iso +register. +. +. +.TP +.B EM +interpolates an em dash. +. +. +.TP +.B F +interpolates an automatically numbered footnote marker; +the number is used by the next +.B FS +call without an argument. +. +In +.I troff +mode, +the marker is superscripted; +in +.I nroff +mode, +it is surrounded by square brackets. +. +. +.TP +.B H1txt +Updated by +.B .H +and +.B .HU +to the current heading text. +. +Also updated in table of contents & friends. +. +. +.TP +.B HF +assigns font identifiers, +separated by spaces, +to heading levels in one-to-one correspondence. +. +Each identifier may be a font mounting position, +font name, +or style name. +. +Omitted values are assumed to be\~1. +. +The default is +.RB \[lq] "2 2 2 2 2 2 2 2 2 2 2 2 2 2" \[rq], +which places all headings in italics. +. +DWB +.IR mm 's +default was +.RB \[lq] "3 3 2 2 2 2 2" \[rq]. +. +. +.TP +.B HP +assigns type sizes, +separated by spaces, +to heading levels in one-to-one correspondence. +. +Each size is interpreted in scaled points; +zero values are translated to +.BR 10 . +. +Omitted values are assumed to be\~0 +(and are translated accordingly). +. +The default is +.RB \[lq] "0 0 0 0 0 0 0 0 0 0 0 0 0 0" \[rq]. +. +. +.TP +.B Index +\[lq]INDEX\[rq] +. +. +.TP +.B Le +\[lq]LIST OF EQUATIONS\[rq] +. +. +.TP +.B Letfc +\[lq]Yours very truly,\[rq] +(see +.BR FC ) +. +. +.TP +.B Letapp +\[lq]APPROVED:\[rq] +(see +.BR AV ) +. +. +.TP +.B LetAT +\[lq]ATTENTION:\[rq] +(see +.BR LO ) +. +. +.TP +.B LetCN +\[lq]CONFIDENTIAL\[rq] +(see +.BR LO ) +. +. +.TP +.B Letdate +\[lq]Date\[rq] +(see +.BR AV ) +. +. +.TP +.B Letns +is a group of strings structuring the notations produced by +.BR NS . +. +If the +.I code +argument to +.B NS +has no corresponding string, +the notation is included between parentheses, +prefixed with +.BR Letns!copy , +and suffixed with +.BR Letns!to . +. +Observe the spaces after \[lq]Copy\[rq] and before \[lq]to\[rq]. +. +. +.RS +.P +.TS +tab(@); +Lb Lb Lb +L L L. +NS code@String@Contents +0@Letns!0@Copy to +1@Letns!1@Copy (with att.\&) to +2@Letns!2@Copy (without att.\&) to +3@Letns!3@Att. +4@Letns!4@Atts. +5@Letns!5@Enc. +6@Letns!6@Encs. +7@Letns!7@Under separate cover +8@Letns!8@Letter to +9@Letns!9@Memorandum to +10@Letns!10@Copy (with atts.\&) to +11@Letns!11@Copy (without atts.\&) to +12@Letns!12@Abstract Only to +13@Letns!13@Complete Memorandum to +14@Letns!14@CC +\[em]@Letns!copy@Copy \fI(with trailing space)\fP +\[em]@Letns!to@ to \fI(note leading space)\fP +.TE +.RE +. +. +.TP +.B Letnsdef +Select the notation format used by +.B NS +when it is given no argument. +. +The default is +.RB \[lq] 0 \[rq]. +. +. +.TP +.B LetRN +\[lq]In reference to:\[rq] +(see +.BR LO ) +. +. +.TP +.B LetSA +\[lq]To Whom It May Concern:\[rq] +(see +.BR LO ) +. +. +.TP +.B LetSJ +\[lq]SUBJECT:\[rq] +(see +.BR LO ) +. +. +.TP +.B Lf +\[lq]LIST OF FIGURES\[rq] +. +. +.TP +.B Licon +\[lq]CONTENTS\[rq] +. +. +.TP +.B Liec +\[lq]Equation\[rq] +. +. +.TP +.B Liex +\[lq]Exhibit\[rq] +. +. +.TP +.B Lifg +\[lq]Figure\[rq] +. +. +.TP +.B Litb +\[lq]TABLE\[rq] +. +. +.TP +.B Lt +\[lq]LIST OF TABLES\[rq] +. +. +.TP +.B Lx +\[lq]LIST OF EXHIBITS\[rq] +. +. +.TP +.BR MO1 \|.\|.\|.\| MO12 +\[lq]January\[rq] through \[lq]December\[rq] +. +. +.TP +.B Qrf +\[lq]See chapter \[rs]\[rs]*[Qrfh], +page \[rs]\[rs]n[Qrfp].\[rq] +. +. +.TP +.B Rf +interpolates an automatically numbered reference mark; +the number is used by the next +.B RS +call. +. +In +.I troff +mode, +the marker is superscripted; +in +.I nroff +mode, +it is surrounded by square brackets. +. +. +.TP +.B Rp +\[lq]REFERENCES\[rq] +. +. +. +.TP +.B Sm +interpolates +.if c \[u2120] \[u2120], +the service mark sign. +. +. +.TP +.B Tcst +interpolates an indicator of the +.B TC +macro's processing status. +. +If +.B TC +is not operating, +it is empty. +. +User-defined +.B TP +or +.B EOP +macros might condition page headers or footers on its contents. +. +. +.IP +.TS +tab(@); +lb lb +l l. +Value@Meaning +co@Table of contents +fg@List of figures +tb@List of tables +ec@List of equations +ex@List of exhibits +ap@Appendix +.TE +. +. +.TP +.B Tm +interpolates +.if c \[tm] \[tm], +the trade mark sign. +. +. +.TP +.B Verbnm +supplies argument(s) to the +.B nm +request employed by the +.B VERBON +macro. +. +The default is\~\[lq]1\[rq]. +. +. +.br +.ne 4v +.\" ==================================================================== +.SH Registers +.\" ==================================================================== +. +Default register values, +where meaningful, +are shown in parentheses. +. +Many are also marked as Boolean-valued, +meaning that they are considered \[lq]true\[rq] +(on, +enabled) +when they have a positive value, +and \[lq]false\[rq] +(off, +disabled) +otherwise. +. +. +.TP +.B .mgm +indicates that +.I groff mm +is in use +(Boolean-valued; +.BR 1 ). +. +. +.TP +.B :p +is an auto-incrementing footnote counter; +see +.BR FS . +. +. +.TP +.B :R +is an auto-incrementing reference counter; +see +.BR RS . +. +. +.TP +.B Aph +formats an appendix heading +(and title, +if supplied); +see +.B APP +(Boolean-valued; +.BR 1 ). +. +. +.TP +.B Au +includes supplemental author information +(the third and subsequent arguments to +.BR AU ) +in memorandum \[lq]from\[rq] information; +see +.B COVER +and +.B MT +(Boolean-valued; +.BR 1 ). +. +. +.TP +.B Cl +sets the threshold for inclusion of headings in a table of contents. +. +Headings at levels above this value are excluded; +see +.B H +and +.B TC +.RB ( 2 ). +. +The +.B Cl +register controls whether a heading is +.I saved +for output in the table of contents at the time +.B H +or +.B HU +is called; +if you change +.BR Cl 's +value immediately prior to calling +.BR TC , +you are unlikely to get the result you want. +. +. +.TP +.B Cp +suppresses page breaks before lists of captioned +equations, +exhibits, +figures, +and tables, +and before an index; +see +.BR EC , +.BR EX , +.BR FG , +.BR TB , +and +.B INDP +(Boolean-valued; +.\" DWB 3.3's manual said this was 1, but the code said 0. +.BR 0 ). +. +. +.TP +.B D +produces debugging information for the +.I mm +package on the standard error stream. +. +A value of\~0 outputs nothing; +1\~reports formatting progress. +. +Higher values communicate internal state information of increasing +verbosity +.RB ( 0 ). +. +. +.TP +.B De +causes a page break after a floating display is output; +see +.B DF +(Boolean-valued; +.BR 0 ). +. +. +.TP +.B Df +configures the behavior of +.BR DF . +. +The following values are recognized; +4 and 5 do not override the +.B De +register +.RB ( 5 ). +. +. +.IP +.TS +tab(@); +Lb Lb +L Lx. +Value@Effect +0@T{ +Flush pending displays +at the end of each section +when section-page numbering is active, +otherwise at the end of the document. +T} +1@T{ +Flush a pending display +on the current page or column +if there is enough space, +otherwise at the end of the document. +T} +2@T{ +Flush one pending display +at the top of each page or column. +T} +3@T{ +Flush a pending display +on the current page or column +if there is enough space, +otherwise at the top of the next. +T} +4@T{ +Flush as many pending displays +as possible in a new page or column. +T} +5@T{ +Fill columns or pages with flushed displays +until none remain. +T} +.TE +. +. +.TP +.B Ds +puts vertical space in the amount of register +.B Dsp +(if defined) or +.B Lsp +before and after each static display; +see +.B DS +(Boolean-valued; +.BR 1 ). +. +. +.TP +.B Dsp +configures the amount of vertical space placed +before and after static displays; +see +.B DS +and register +.B Ds +.RI ( undefined ). +. +. +.TP +.B Ec +is an auto-incrementing equation counter; +see +.BR EC . +. +. +.TP +.B Ej +sets the threshold for page breaks (ejection) prior to the format of +headings. +. +Headings at levels above this value are set on the same page and column +if possible; +see +.B H +.RB ( 0 ). +. +. +.TP +.B Eq +aligns an equation label to the left of a display instead of the right +(Boolean-valued; +.BR 0 ). +. +. +.TP +.B Ex +is an auto-incrementing exhibit counter; +see +.BR EX . +. +. +.TP +.B Fg +is an auto-incrementing figure counter; +see +.BR FG . +. +. +.TP +.B Fs +is multiplied by register +.B Lsp +to vertically separate footnotes; +see +.B FS +.RB ( 1 ). +. +. +.TP +.BR H1 \|.\|.\|.\| H14 +are auto-incrementing counters corresponding to each heading level; +see +.BR H . +. +. +.\" XXX: This could be generalized to an "Hdot" threshold register with +.\" a default of 2. +.TP +.B H1dot +appends a period to the number of a level one heading; +see +.B H +(Boolean-valued; +.BR 1 ). +. +. +.\" XXX: This may be insufficiently general; see Savannah #62825. +.TP +.B H1h +is a copy of +A copy of register +.RB register\~ H1 , +but it is incremented just before a page break. +. +This can be useful in user-defined macros; +see +.B H +and +.BR HX . +. +. +.TP +.B Hb +sets the threshold for breaking the line after formatting a heading. +. +Text after headings at levels above this value are set on the same +output line if possible; +see +.B H +.RB ( 2 ). +. +. +.TP +.B Hc +sets the threshold for centering a heading. +. +Headings at levels above this value use the prevailing alignment +(that is, +they are not centered); +see +.B H +.RB ( 0 ). +. +. +.TP +.B Hi +configures the indentation of text after headings. +. +It does not affect \[lq]run-in\[rq] headings. +. +The following values are recognized; +see +.B H +and +.B P +.RB ( 1 ). +. +. +.IP +.TS +tab(@); +Lb Lb +L Lx. +Value@Effect +0@no indentation +1@indent per the paragraph type +2@indent to align with heading title +.TE +. +. +.TP +.B Hps +sets the heading level threshold for application of preceding vertical +space; +see +.BR H . +. +Headings at levels above the value in register +.B Hps +use the amount of space in register +.BR Hps1 ; +otherwise that in +.BR Hps2 . +. +The value of +.B Hps +should be strictly greater than that of +.B Ej +.RB ( 1 ). +. +. +.TP +.B Hps1 +configures the amount of vertical space preceding a heading above the +.B Hps +threshold; +see +.B H +.RI ( troff +devices: +.BR 0.5v ; +.I nroff +devices: +.BR 1v ). +. +. +.TP +.B Hps2 +configures the amount of vertical space preceding a heading at or below +the +.B Hps +threshold; +see +.B H +.RI ( troff +devices: +.BR 1v ; +.I nroff +devices: +.BR 2v ). +. +. +.TP +.B Hs +sets the heading level threshold for application of succeeding vertical +space. +. +If the heading level is greater than +.BR Hs , +the heading is followed by vertical space in the amount of +.RB register\~ Hss ; +see +.B H +.RB ( 2 ). +. +. +.TP +.B Hss +is multiplied by register +.B Lsp +to produce vertical space after headings above the +threshold in +.RB register\~ Hs ; +see +.B H +.RB ( 1 ). +. +. +.TP +.B Ht +suppresses output of heading level counters above the lowest when the +heading is formatted; +see +.B H +(Boolean-valued; +.BR 0 ). +. +. +. +.TP +.B Hu +sets the heading level used by unnumbered headings; +see +.B HU +.RB ( 2 ). +. +. +.TP +.B Hy +enables automatic hyphenation of words +(Boolean-valued; +.BR 0 ). +. +. +.TP +.B Iso +configures the use of ISO\~8601 date format +if specified +(with any value) +on the command line; +see +.BR ISODATE . +. +The default is determined by localization files. +. +. +.TP +.B L +defines the page length for the document, +and must be set from the command line. +. +A scaling unit should be appended. +. +The default is that of the selected +.I groff +output device. +. +. +.TP +.B Le +.TQ +.B Lf +.TQ +.B Lt +.TQ +.B Lx +configure the report of lists of equation, +figure, +table, +and exhibit captions, +respectively, +after a table of contents; +see +.B TC +(Boolean-valued; +.BR Le :\~ 0 ; +.BR Lf , +.BR Lt , +.BR Lx :\~ 1 ). +. +. +.\" XXX: What is the rationale for this feature? +.TP +.B Letwam +sets the maximum number of input lines permitted in a writer's address; +see +.B WA +and +.B WE +.RB ( 14 ). +. +. +.TP +.B Li +configures the amount of indentation in ens applied to list items; +see +.B LI +.RB ( 6 ). +. +. +.TP +.B Limsp +inserts a space between the prefix and the mark +in automatically numbered lists; +see +.B AL +(Boolean-valued; +.BR 1 ). +. +. +.TP +.B Ls +sets a threshold for placement of vertical space before list items. +. +If the list nesting level is greater than this value, +no such spacing occurs; +see +.B LI +.RB ( 99 ). +. +. +.TP +.B Lsp +configures the base amount of vertical space used for separation +in the document. +. +.I mm +applies this spacing to many contexts, +sometimes with multipliers; +see +.BR DS , +.BR FS , +.BR H , +.BR LI , +and +.B P +.RI ( troff +devices: +.BR 0.5v ; +.I nroff +devices: +.BR 1v ). +. +. +.TP +.B N +configures the header and footer placements used by +.BR PH . +. +The default footer is empty. +. +If \[lq]section-page\[rq] numbering is selected, +the default header becomes empty +and the default footer becomes +.RI \[lq] x - y \[rq], +where +.IR x \~is +is the section number +(the number of the current first-level heading) +.RI and\~ y +the page number within the section. +.\" XXX: section-figure numbering needs more documentation. +. +The following values are recognized; +for finer control, +see +.BR PH , +.BR PF , +.BR EH , +.BR EF , +.BR OH , +and +.BR OF , +and registers +.B Sectf +and +.BR Sectp . +. +Value 5 is a GNU extension +.RB ( 0 ). +. +. +.IP +.TS +tab(@); +Lb Lb +L Lx. +Value@Effect +0@Set header on all pages. +1@Move header to footer on page 1. +2@Omit header on page 1. +3@Use \[lq]section-page\[rq] numbering style on all pages. +4@Omit header on all pages. +5@T{ +Use \[lq]section-page\[rq] and \[lq]section-figure\[rq] \ +numbering style on all pages. +T} +.TE +. +. +.TP +.B Np +causes paragraphs after first-level headings (only) to be numbered +in the format +.IR s . p , +where +.IR s \~is +is the section number +(the number of the current first-level heading) +and +.IR p \~is +the paragraph number, +starting at 1; +see +.B H +and +.B P +(Boolean-valued; +.BR 0 ). +. +. +.TP +.B O +defines the page offset of the document, +and must be set from the command line. +. +A scaling unit should be appended. +. +The default +.RB is\~ \&.75i +on terminal devices. +. +On typesetters, +it is +.B \&.963i +or set to +.B 1i +by the +.I papersize.tmac +package; +see +.MR groff_tmac @MAN5EXT@ . +. +. +.TP +.B Oc +suppresses the appearance of page numbers in the table of contents; +see +.B TC +(Boolean-valued; +.BR 0 ). +. +. +.\" XXX: This really should just be a string, shouldn't it? +.TP +.B Of +selects a separator format within equation, +exhibit, +figure, +and table captions; +see +.BR EC , +.BR EX , +.BR FG , +and +.BR TB . +. +The following values are recognized; +the spaces shown are unpaddable +.RB ( 0 ). +. +. +.IP +.TS +tab(@); +Lb Lb +L Lx. +Value@Effect +0@\[dq]. \[dq] +1@\[dq] \[em] \[dq] +.TE +. +. +.TP +.B P +interpolates the current page number; +it is the same as +.RB register\~ % +except when +\[lq]section-page\[rq] numbering is enabled. +. +. +.TP +.B Pi +configures the amount of indentation in ens applied to the first line of +a paragraph; +see +.B P +.RB ( 5 ). +. +. +.TP +.B Pgps +causes the type size and vertical spacing set by +.B S +to apply to headers and footers, +overriding the +.B HP +string. +. +If not set, +.B S +calls affect headers and footers only when followed by +.BR PH , +.BR PF , +.BR OH , +.BR EH , +.BR OF , +or +.B OE +calls +(Boolean-valued; +.BR 1 ). +. +. +.TP +.B Ps +is multiplied by register +.B Lsp +to vertically separate paragraphs; +see +.B P +.RB ( 1 ). +. +. +.TP +.B Pt +determines when a first-line indentation is applied to a paragraph; +see +.B P +.RB ( 0 ). +. +. +.IP +.TS +tab(@); +Lb Lb +L Lx. +Value@Effect +0@never +1@always +2@T{ +always, +except immediately after +.BR H , +.BR DE , +or +.B LE +T} +.TE +. +. +.TP +.B Ref +is used internally to control +.MR mmroff 1 's +two-pass approach to index and reference management; +see +.B INITI +and +.B RS +(Boolean-valued; +.BR 0 ). +. +. +.\" XXX: Why is this not named `Rpej`? +.TP +.B Rpe +configures the default page ejection policy for reference pages; +see +.B RP +.RB ( 0 ). +. +. +.IP +.TS +tab(@); +Lb Lb +L Lx. +Value@Effect +0@Break the page before and after the list of references. +1@Suppress page break after the list. +2@Suppress page break before the list. +3@Suppress page breaks before and after the list. +.TE +. +. +.TP +.B S +defines the type size for the document, +and must be set from the command line. +. +A scaling unit should be appended; +.B p +is typical +.RB ( 10p ). +. +. +.TP +.B Sectf +selects the \[lq]section-figure\[rq] numbering style. +. +Its default +.RB is\~ 0 +unless +.RB register\~ N +is set +.RB to\~ 5 +at the command line +(Boolean-valued). +. +. +.TP +.B Sectp +selects the \[lq]section-page\[rq] numbering style. +. +Its default +.RB is\~ 0 +unless +.RB register\~ N +is set +.RB to\~ 3 +.RB or\~ 5 +at the command line +(Boolean-valued). +. +. +.TP +.B Si +configures the amount of display indentation in ens; +see +.B DS +.RB ( 5 ). +. +. +.TP +.B Tb +is an auto-incrementing table counter; +see +.BR TB . +. +. +.TP +.B V +defines the vertical spacing for the document, +and must be set from the command line. +. +A scaling unit should be appended; +.B p +is typical. +. +The default vertical spacing is 120% of the type size. +. +. +.TP +.B Verbin +configures the amount of indentation for verbatim displays +when indentation is selected; +see +.B \%VERBON +.RB ( 5n ). +. +. +.TP +.B W +defines the \[lq]width\[rq] +of the document +(that is, +the length of an output line with no indentation); +it must be set from the command line. +. +A scaling unit should be appended. +. +The default +.RB is\~ 6i +or assigned by the +.I papersize.tmac +package; +see +.MR groff_tmac @MAN5EXT@ . +. +. +. +.\" ==================================================================== +.SH Internals +.\" ==================================================================== +. +The +.B LT +letter macros call further macros depending on the letter type, +with which they are suffixed. +. +It is therefore possible to define additional letter types, +either in the territory-specific macro file, +or as local additions. +. +.B LT +sets the registers +.B Pt +and +.B Pi +to 0 and\~5, \" XXX: ...but doesn't use Pi for indentation... +respectively. +.\" XXX: and why aren't both of these actions the responsibility of +.\" let@init_type as described below? +. +The following macros must be defined to support a new letter type. +. +. +.TP +.BI let@init_ type +.B LT +calls this macro to initialize any registers and other data needed by +the letter type. +. +. +.TP +.BI let@head_ type +formats the letterhead; +it is called instead of the usual page header macro. +. +Its definition should remove the alias +.B let@header +unless the letterhead is desired on subsequent pages. +. +. +.TP +.BI let@sg_ type\~\c +.IR "name title n is-final\~" [ SG-arg\~ .\|.\|.] +.B SG +calls this macro only for letters; +.B MT +memoranda have their own signature processing. +. +.I name +and +.I title +are specified through +.BR WA / WE . +. +.IR n \~is +the index of the +.IR n th +writer, +and +.I is-final +is true for the last writer to be listed. +. +Further +.B SG +arguments are appended to the signature line. +. +. +.TP +.BI let@fc_ "type closing" +This macro is called by +.BR FC , +and has the formal closing as the argument. +. +. +.P +.B LO +implements letter options. +. +It requires that a string named +.BI Let type +be defined, +where +.I type +is the letter type. +. +.B LO +then assigns its second argument +.RI ( value ) +to the string +.BI let*lo\- type\c +\&. +. +. +.\" ==================================================================== +.\".SH BUGS +.\" ==================================================================== +. +. +.\" ==================================================================== +.SH Files +.\" ==================================================================== +. +.TP +.I @MACRODIR@/@TMAC_M_PREFIX@m.tmac +is the +.I groff +implementation of the memorandum macros. +. +. +.TP +.I @MACRODIR@/mm.tmac +is wrapper to load +.IR m.tmac . +. +. +.TP +.I @MACRODIR@/refer\-mm.tmac +implements +.MR @g@refer @MAN1EXT@ +support for +.IR mm . +. +. +.TP +.I @TMAC_MDIR@/ms.cov +implements an +.IR ms -like +cover sheet. +. +. +.TP +.I @TMAC_MDIR@/0.MT +implements memorandum types 0\[en]3 and 6. +. +. +.TP +.I @TMAC_MDIR@/4.MT +implements memorandum type 4. +. +. +.TP +.I @TMAC_MDIR@/5.MT +implements memorandum type 5. +. +. +.TP +.I @TMAC_MDIR@/locale +performs any (further) desired necessary localization; +empty by default. +. +. +.\" ==================================================================== +.SH Authors +.\" ==================================================================== +. +The GNU version of the +.I mm +macro package was written by +.MT jh@\:axis\:.se +J\[:o]rgen H\[:a]gg +.ME +of Lund, Sweden. +. +. +.\" ==================================================================== +.SH "See also" +.\" ==================================================================== +. +.UR https://tkurtbond\:.github\:.io/\:troff/\:mm\-all\:.pdf +.I MM \- A Macro Package for Generating Documents +.UE , +the DWB\~3.3 +.I mm +manual, +introduces the package but does not document GNU extensions. +. +. +.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 +.MR groff @MAN1EXT@ , +.MR @g@troff @MAN1EXT@ , +.MR @g@tbl @MAN1EXT@ , +.MR @g@pic @MAN1EXT@ , +.MR @g@eqn @MAN1EXT@ , +.MR @g@refer @MAN1EXT@ , +.MR groff_mmse @MAN7EXT@ +. +. +.\" Restore compatibility mode (for, e.g., Solaris 10/11). +.cp \n[*groff_groff_mm_7_man_C] +.do rr *groff_groff_mm_7_man_C +. +. +.\" Local Variables: +.\" fill-column: 72 +.\" mode: nroff +.\" End: +.\" vim: set filetype=groff textwidth=72: diff --git a/contrib/mm/groff_mmse.7.man b/contrib/mm/groff_mmse.7.man new file mode 100644 index 0000000..6ba94eb --- /dev/null +++ b/contrib/mm/groff_mmse.7.man @@ -0,0 +1,183 @@ +.TH groff_mmse @MAN7EXT@ "@MDATE@" "groff @VERSION@" +.SH Namn +groff_mmse \- svenska \(rqmemorandum\(rq makro f\(:or GNU +.I roff +. +. +.\" Skrivet av Jörgen Hägg, Lund, Sverige +. +.\" ==================================================================== +.\" Legal Terms +.\" ==================================================================== +.\" +.\" Copyright (C) 1989-2020 Free Software Foundation, Inc. +.\" +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of +.\" this manual under the conditions for verbatim copying, provided that +.\" the entire resulting derived work is distributed under the terms of +.\" a permission notice identical to this one. +.\" +.\" Permission is granted to copy and distribute translations of this +.\" manual into another language, under the above conditions for +.\" modified versions, except that this permission notice may be +.\" included in translations approved by the Free Software Foundation +.\" instead of in the original English. +. +. +.\" Save and disable compatibility mode (for, e.g., Solaris 10/11). +.do nr *groff_groff_mmse_7_man_C \n[.cp] +.cp 0 +. +.\" Define fallback for groff 1.23's MR macro if the system lacks it. +.nr do-fallback 0 +.if !\n(.f .nr do-fallback 1 \" mandoc +.if \n(.g .if !d MR .nr do-fallback 1 \" older groff +.if !\n(.g .nr do-fallback 1 \" non-groff *roff +.if \n[do-fallback] \{\ +. de MR +. ie \\n(.$=1 \ +. I \%\\$1 +. el \ +. IR \%\\$1 (\\$2)\\$3 +. . +.\} +.rr do-fallback +. +. +.\" ==================================================================== +.SH Syntax +.\" ==================================================================== +. +.SY "groff \-m@TMAC_M_PREFIX@mse" +.RI [ flaggor\~ .\|.\|.\&] +.RI [ filer\~ .\|.\|.] +. +.SY "groff \-m m@TMAC_M_PREFIX@mse" +.RI [ flaggor\~ .\|.\|.\&] +.RI [ filer\~ .\|.\|.] +.YS +. +. +.\" ==================================================================== +.SH Beskrivning +.\" ==================================================================== +. +.I m@TMAC_M_PREFIX@mse +är en svensk variant av +.IR m@TMAC_M_PREFIX@m . +Alla texter är översatta. +En A4 sida får text som är 13\~cm bred, +3,5\~cm indragning samt är 28,5\~cm hög. +Det finns stöd för brevuppställning enligt svensk standard +för vänster och högerjusterad text. +. +.LP +.B COVER +kan använda +.I se_ms +som argument. +Detta ger ett svenskt försättsblad. +Se +.MR groff_mm @MAN7EXT@ +för övriga detaljer. +. +. +.\" ==================================================================== +.SH Brev +.\" ==================================================================== +. +Tillgängliga brevtyper: +. +.TP +.B ".LT SVV" +Vänsterställd löptext med adressat i position T0 (vänsterställt). +. +.TP +.B ".LT SVH" +Högerställd löptext med adressat i position T4 (passar +fönsterkuvert). +. +.LP +Följande extra LO-variabler används. +. +.TP +.BI ".LO DNAMN\ " namn +Anger dokumentets namn. +. +.TP +.BI ".LO MDAT\ " datum +Mottagarens datum, anges under +.B Ert datum: +.RB ( LetMDAT ). +. +.TP +.BI ".LO BIL\ " sträng +Anger bilaga, nummer eller sträng med +.B Bilaga +.RB ( LetBIL ) +som prefix. +. +.TP +.BI ".LO KOMP\ " text +Anger kompletteringsuppgift. +. +.TP +.BI ".LO DBET\ " beteckning +Anger dokumentbeteckning eller dokumentnummer. +. +.TP +.BI ".LO BET\ " beteckning +Anger beteckning +(ärendebeteckning i form av diarienummer eller liknande). +. +.TP +.BI ".LO SIDOR\ " antal +Anger totala antalet sidor och skrivs ut efter sidnumret inom +parenteser. +. +.LP +Om makrot +.B .TP +är definierat anropas det efter utskrift av brevhuvudet. +Där lägger man lämpligen in postadress och annat som brevfot. +. +. +.\" ==================================================================== +.SH "Skrivet av" +.\" ==================================================================== +. +Jörgen Hägg, Lund, Sweden <Jorgen.Hagg@axis.se> +. +. +.\" ==================================================================== +.SH Filer +.\" ==================================================================== +. +.TP +.I @MACRODIR@/@TMAC_M_PREFIX@mse.tmac +.TP +.IR @TMAC_MDIR@/se_ * .cov +. +. +.\" ==================================================================== +.SH "Se också" +.\" ==================================================================== +. +.MR groff_mm @MAN7EXT@ +. +. +.\" Restore compatibility mode (for, e.g., Solaris 10/11). +.cp \n[*groff_groff_mmse_7_man_C] +.do rr *groff_groff_mmse_7_man_C +. +. +.\" Local Variables: +.\" coding: latin-1 +.\" fill-column: 72 +.\" mode: nroff +.\" End: +.\" vim: set filetype=groff textwidth=72: diff --git a/contrib/mm/m.tmac b/contrib/mm/m.tmac new file mode 100644 index 0000000..c679a70 --- /dev/null +++ b/contrib/mm/m.tmac @@ -0,0 +1,3734 @@ +.ig + +Copyright (C) 1991-2023 Free Software Foundation, Inc. +mm is written by Jörgen Hägg <jh@axis.com> + +mm is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +mm is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. + +Please submit bug reports using groff's 'BUG-REPORT' file to +http://savannah.gnu.org/bugs/?group=groff. + +Naming convention adapted from groff ms. +Local names module*name +Extern names module@name +Env.var environ:name +Index array!index +.. +.if !\n(.g \ +. ab groff mm macros require groff extensions; aborting +. +.if \n(.C \ +. ab groff mm macros do not work in compatibility mode; aborting +. +.ds @mm m.tmac\" +. +.if (\n[.x]\n[.y] < 123) \{\ +. ds mm-msg \*[@mm]: groff mm macros require groff 1.23 or later,\" +. as mm-msg " but found groff \n[.x].\n[.y]; aborting\" +. ab \*[mm-msg] +.\} +. +.if d PH .nx +. +.mso devtag.tmac +.\" ######## init ####### +.\" create table of contents entry for headings of level <= Cl +.nr Cl 2 +.\" Eject page between LIST OF XXXX if Cp == 0 +.nr Cp 0 +.\" Debugflag +.if !r D .nr D 0 +.\" Eject after floating display is output [0:1] +.nr De 0 +.\" Floating keep output [0;5] +.nr Df 5 +.\" space before and after display if == 1 [0:1] +.nr Ds 1 +.\" eject page before headings of level <= Ej +.nr Ej 0 +.\" Equation label adjust 0=left, 1=right +.nr Eq 0 +.\" Bullet string (for .BL) +.ie n .ds BU \[bu] +.el .ds BU \s-2\[bu]\s0 +.\" Em dash string +.ie n .ds EM " -- +.el .ds EM \[em] +.\" Footnote spacing +.nr Fs 1 +.\" H1-H7 heading counters +.nr H1 0 1 +.nr H2 0 1 +.nr H3 0 1 +.nr H4 0 1 +.nr H5 0 1 +.nr H6 0 1 +.nr H7 0 1 +.nr H8 0 1 +.nr H9 0 1 +.nr H10 0 1 +.nr H11 0 1 +.nr H12 0 1 +.nr H13 0 1 +.nr H14 0 1 +.\" break after headings of level <= Hb +.nr Hb 2 +.\" center headings of level <= Hc +.nr Hc 0 +.\" header format +.ds HF 2 2 2 2 2 2 2 2 2 2 2 2 2 2 +.\" heading temp. indent [0:2] +.\" 0 -> 0 indent, left margin +.\" 1 -> indent to right , like .P 1 +.\" 2 -> indent to line up with text part of preceding heading +.nr Hi 1 +.\" header pointsize +.ds HP 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +.\" put vertical space of \n[Hss] after headings of level <= Hs +.nr Hs 2 +.\" heading numbering type +.\" 0 -> multiple (1.1.1 ...) +.\" 1 -> single +.nr Ht 0 +.\" Unnumbered heading level +.nr Hu 2 +.\" hyphenation in body +.\" 0 -> no hyphenation +.\" 1 -> hyphenation 14 on +.nr Hy 0 +.\" text for toc, selfexplanatory. Look in the new variable section +.ds Lf LIST OF FIGURES +.nr Lf 1 +.ds Lt LIST OF TABLES +.nr Lt 1 +.ds Lx LIST OF EXHIBITS +.nr Lx 1 +.ds Le LIST OF EQUATIONS +.nr Le 0 +.\" List indentation in ens, used by .AL +.nr Li 6 +.\" put vertical space before list items of nesting level <= Ls +.nr Ls 99 \" TODO: use \n[.R]; see Savannah #63587 +.\" Numbering style [0:5] +.if !r N .nr N 0 +.\" numbered paragraphs +.\" 0 == not numbered +.\" 1 == numbered in first level headings. +.nr Np 0 +.\" Format of figure,table,exhibit,equation titles. +.\" 0= ". ", 1=" - " +.nr Of 0 +.\" Table of contents page numbering style +.nr Oc 0 +.\" Page-number, normally same as %. +.nr P 0 +.\" paragraph indentation in ens +.nr Pi 5 +.\" paragraph spacing +.nr Ps 1 +.\" paragraph type +.\" 0 == left-justified +.\" 1 == indented .P +.\" 2 == indented .P except after .H, .DE or .LE. +.nr Pt 0 +.\" Reference title +.ds Rp REFERENCES +.\" Reference page eject status +.nr Rpe 0 +.\" display indentation in ens +.nr Si 5 +.\" +.\" Current state of TOC, empty outside TC, inside +.\" it will be set to co,fg,tb,ec,ex or ap. +.ds Tcst +.\" +.ie t .ds Sm \v'-.4m'\s-3SM\s0\v'.4m'\" +.el \{\ +. ie c \[u2120] .ds Sm \[u2120]\" +. el .ds Sm (SM)\" +.\} +. +.ie t .ds Tm \v'-.4m'\s-3TM\s0\v'.4m'\" +.el \{\ +. ie c \[tm] .ds Tm \[tm]\" +. el .ds Tm (TM)\" +.\} +.\" +.\"--------------------------------------------- +.\" Internal global variables +.\" +.\" This is for cover macro .MT +.\" .ds @country +.\" +.nr @copy_type 0 +.if r C .nr @copy_type \n[C] +.\" >0 if Subject/Date/From should be bold, roman otherwise +.ie n .ds @sdf_font R +.el .ds @sdf_font B +.if \n[@copy_type]=4 \{\ +. ls 2 +. nr Pi 10 +. nr Pt 1 +.\} +.\" +.\" +.if r E \{\ +. ie \n[E] .ds @sdf_font B +. el .ds @sdf_font R +.\} +.\" +.\" Set the type size and vertical spacing. If given on the command +.\" line, these have already been converted to basic units. +.if !r S .nr S 10 +.ie (\n[S] >= 1000) .ps \n[S]z/1000u +.el .ps \n[S] +.nr *vs-default \n[.ps]*120/100 +.if !r V .nr V \n[*vs-default] +.ie (\n[V] >= 1000) .vs \n[V]p/1000u +.el .vs \n[V] +.rm *vs-default +.\" +.nr @ps \n[.ps] +.nr @vs \n[.v] +.if \n[D]>1 .tm @ps=\n[@ps], @vs=\n[@vs] +.if \n[D]>3 .tm INIT: l:\n[.l] p:\n[.p] o:\n[.o] +.\" +.\" page length +.if r L \{\ +. pl \n[L]u +.\} +.nr @pl \n[.p] +.\" +.\" line length +.ie r W \{\ +. ll \n[W]u +.\} +.el .ll 6i +.nr @ll \n[.l] +.nr @cur-ll \n[@ll] +.lt \n[@ll]u +.\" +.\" page offset +.ie r O .po \n[O]u +.el \{\ +. ie n .po .75i +. el .po .963i +.\} +.\" +.nr @po \n[.o] +.\" +.\" non-zero if escape mechanism is turned off. Used by VERBON/OFF +.nr @verbose-flag 0 +.\"--------------------------------------------- +.\" New variables +.\" +.\" Appendix name +.ds App APPENDIX +.\" print appendixheader, 0 == don't +.nr Aph 1 +.\" +.\" Current appendix text +.ds Apptext +.\" Controls the space before and after static displays if defined. +.\" Lsp is used otherwise +.\" .nr Dsp 1v +.\" +.\" Add a dot after level one heading number if >0 +.nr H1dot 1 +.\" +.\" put vertical space of \n[Hps2] before headings of level <= Hps +.nr Hps 1 +.\" +.\" amount of vertical space before headings when level > Hps +.nr Hps1 0.5v +.if n .nr Hps1 1v +.\" +.\" amount of vertical space before headings when level <= Hps +.nr Hps2 1v +.if n .nr Hps2 2v +.\" +.\" Hss is the number of lines (Lsp) after the header. +.nr Hss 1 +.\" +.\" H1txt will be updated by .H and .HU, containing the heading text. +.\" Will also be updated in table of contents & friends +.\" +.ds H1txt +.\" +.\" header text for the index +.ds Index INDEX +.\" command to sort the index +.ds Indcmd sort +.\" +.\" flag for mkindex +.if !r Idxf .nr Idxf 0 +.\" Change these in the national configuration file +.ds Lifg Figure +.ds Litb TABLE +.ds Liex Exhibit +.ds Liec Equation +.ds Licon CONTENTS +.\" Flag for space between mark and prefix 1==space, 0==no space +.\" Can also be controlled by using '.LI mark 2' +.nr Limsp 1 +.\" +.\" Lsp controls the height of an empty line. Normally 0.5v +.\" Normally used for nroff compatibility. +.nr Lsp 0.5v +.if n .nr Lsp 1v +.ds MO1 January +.ds MO2 February +.ds MO3 March +.ds MO4 April +.ds MO5 May +.ds MO6 June +.ds MO7 July +.ds MO8 August +.ds MO9 September +.ds MO10 October +.ds MO11 November +.ds MO12 December +.\" for GETR +.ds Qrf See chapter \\*[Qrfh], page \\*[Qrfp]. +.\" +.\" header- and footer-size will only change to the current +.\" if Pgps is > 0. +.nr Pgps 1 +.\" +.\" section-page if Sectp > 0 +.nr Sectp 0 +.if (\n[N]=3):(\n[N]=5) \{\ +. nr Sectp 1 +. nr Ej 1 +.\} +.\" section-figure if Sectf > 0 +.nr Sectf 0 +.if \n[N]=5 .nr Sectf 1 +.\" +.\" argument to .nm in .VERBON. +.ds Verbnm 1\" +.\" indent for VERBON +.nr Verbin 5n +.\" +.\" Letter section +.\" Formal closing (.FC) +.ds Letfc Yours very truly, +.\" +.\" Approval line +.ds Letapp APPROVED: +.\" Approval date-string +.ds Letdate Date +.\" +.ds LetCN CONFIDENTIAL\" Confidential default +.ds LetSA To Whom It May Concern:\" Salutation default +.ds LetAT ATTENTION:\" Attention string +.ds LetSJ SUBJECT:\" Subject string +.ds LetRN In reference to:\" Reference string +.\" +.\" Copy to (.NS) +.ds Letnsdef 0 +.ds Letns!copy Copy \" space! +.ds Letns!to " to +.ds Letns!0 Copy to +.ds Letns!1 Copy (with att.\&) to +.ds Letns!2 Copy (without att.\&) to +.ds Letns!3 Att. +.ds Letns!4 Atts. +.ds Letns!5 Enc. +.ds Letns!6 Encs. +.ds Letns!7 Under separate cover +.ds Letns!8 Letter to +.ds Letns!9 Memorandum to +.ds Letns!10 Copy (with atts.\&) to +.ds Letns!11 Copy (without atts.\&) to +.ds Letns!12 Abstract Only to +.ds Letns!13 Complete Memorandum to +.ds Letns!14 CC: +.\" +.\" Text printed below the footer. Controlled by @copy_type (C). +.ds Pg_type!0 +.ds Pg_type!1 OFFICIAL FILE COPY +.ds Pg_type!2 DATE FILE COPY +.ds Pg_type!3 D\ R\ A\ F\ T +.ds Pg_type!4 D\ R\ A\ F\ T +.\" Max lines in return address +.nr Letwam 14 +.\"-------------------------- +.\" test for mgm macro. This can be used if the text must test +.\" what macros is used. +.nr .mgm 1 +.\" +.\" Due to security problems with groff I had to rewrite +.\" the reference system. It's not as elegant as before, you +.\" have to run groff with '-z -rRef=1' and put stderr into the filename +.\" for .INITR +.\" +.\" Output references to stderr if non-zero +.ie !r Ref \{\ +. nr Ref 0 +.\} +.el .warn 0 +.\" +.\"--------------------------------------------- +.\" set local variables. +.ie d @country .msoquiet mm/\*[@country]_locale +.el .msoquiet mm/locale +.\"--------------------------------------------- +.\" ####### module init ###### +.\" reset all things +.\" XXX: Resets .cu and .ul but _not_ .ce or .rj. +.de init@reset +.ie \\n[misc@adjust] 'ad +.el 'na +.ie \\n[Hy] 'hy 14 +.el 'nh +'in 0 +'ti 0 +.ps \\n[@ps]u +.vs \\n[@vs]u +.. +.de @warning +.tm \\*[@mm]:\\n[.F]:\\n[.c]: warning: \\$* +.if \\n[D] .backtrace +.. +.\" All errors are fatal. +.de @error +.tm \\*[@mm]:\\n[.F]:\\n[.c]: error: \\$* +.if \\n[D] .backtrace +.ab +.. +. +.de @abort +.tm \\*[@mm]:\\n[.F]:\\n[.c]: internal error: \\$* +.backtrace +.ab +.. +.de misc@toupper +.tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ +.br +\\$1 +.tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz +.br +.. +.\" ####### module debug ################################# +.de debug +'tm \\$1:\\n[.F]:\\n[c.] ll=\\n[.l] vs=\\n[.v] ps=\\n[.s],\\n[.ps] \ +in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%] +.. +.de debug-all +.nr debug*n 1n +.nr debug*m 1m +'tm \\$1:\\n[.F]:\\n[c.] ll=\\n[.l] vs=\\n[.v] ps=\\n[.s] in=\\n[.i]\ + ad=\\n[.j] fi=\\n[.u] pl=\\n[.p] page=\\n[%] .o=\\n[.o] +'tm _______ .d=\\n[.d] .f=\\n[.f] .h=\\n[.h] .k=\\n[.k] .n=\\n[.n]\ + .p=\\n[.p] .t=\\n[.t] .z=\\n[.z] nl=\\n[nl] dn=\\n[dn] n=\\n[debug*n] +.. +.\" ####### module par ################################# +.nr par*indentation-eligible 1 \" indent following P if Pt=2 +.nr par@suppress-indentation 0 +.nr hd*last-pos -1 +.nr hd*last-hsize -1 +.nr par*number 0 1 +.af par*number 01 +.nr par*number2 0 1 +.af par*number2 01 +.nr par*num-count 0 1 +.af par*num-count 01 +.\" reset numbered paragraphs, arg1 = headerlevel +.de par@reset-num +.if \\$1<3 .nr par*num-count 0 +.if (\\$1=1)&(\\n[Np]=1) .nr par*number 0 +.. +.\"------------ +.\" paragraph +.de P +.if \\n[.$] \{\ +. ie !\B'\\$1' \{\ +. @warning \\$0: expected numeric argument, got '\\$1' +. shift +. \} +. el .if (\\$1 > 1) \ +. @warning \\$0: ignoring unsupported paragraph type \ +'\\$1' +.\} +.\" skip P if previous heading +.if \\n[D]>2 \{\ +. tm Paragraph nl=\\n[nl], last=\\n[hd*last-pos] +. tm Paragraph .k=\\n[.k], hsize=\\n[hd*last-hsize] +.\} +.nr par*indentation-eligible 1-\\n[par@suppress-indentation] +.par@doit \\$* +.if \\n[Np] \\n[H1].\\n+[par*number]\ \ \c +.. +.\"------------ +.de nP +.if \\n[D]>2 \{\ +. tm Paragraph nl=\\n[nl], last=\\n[hd*last-pos] +. tm Paragraph .k=\\n[.k], hsize=\\n[hd*last-hsize] +.\} +.\" A first-line indentation is meaningless for a numbered paragraph. +.nr par*indentation-eligible 0 +.par@doit +\\n[H2].\\n+[par*number2]\ \ \c +.. +.\"------------ +.de par@doit +.SP (u;\\n[Ps]*\\n[Lsp]) +.nr par*do-indent 0 +.ie \\n[.$] \{\ +. if \\$1=1 .nr par*do-indent 1 +.\} +.el \{\ +. if \\n[Pt]=1 .nr par*do-indent 1 +. if (\\n[Pt]=2)&\\n[par*indentation-eligible] \ +. nr par*do-indent 1 +.\} +.if \\n[par*do-indent] .ti +\\n[Pi]n +.rr par*do-indent +.nr par@suppress-indentation 0 +.. +.\" ####### module line ####################################### +.de SP +.br +.if !r line*lp\\n[.z] .nr line*lp\\n[.z] 0 +.if !r line*ac\\n[.z] .nr line*ac\\n[.z] 0 +.ie \\n[.$] .nr line*temp (v;\\$1) +.el .nr line*temp 1v +.\" +.ie \\n[line*lp\\n[.z]]=\\n[.d] \{\ +. \" go here if no output since the last .SP +. nr line*output \\n[line*temp]-\\n[line*ac\\n[.z]] +. if \\n[line*output]<0 .nr line*output 0 +. nr line*ac\\n[.z] +\\n[line*output] +.\} +.el \{\ +. nr line*ac\\n[.z] \\n[line*temp] +. nr line*output \\n[line*temp] +. \" no extra space in the beginning of a page +. if (\\n[.d]<0):(\\n[pg*head-mark]=\\n[.d]) .nr line*output 0 +.\} +.if \\n[line*output] .sp \\n[line*output]u +.nr line*lp\\n[.z] \\n[.d] +.. +.\" ######## module misc ############### +.\" XXX: This register value is meaningless. +.\" .ad b +.\" .nr misc@adjust \n[.j] +.\" might be better... +.nr misc@adjust 14 +.de SA +.if \\n[.$] \{\ +. if ((\\$1 < 0) : (\\$1 > 1)) .@error \\$0: invalid argument \ +'\\$1' +.\" XXX: ...then... +.\" .ad l +.\" .nr misc@adjust \\n[.j] +. nr misc@adjust 0\\$1 +.\} +.\" XXX: ...and finally an unconditional. +.\" .ad \\n[.j] +.ie \\n[misc@adjust] 'ad +.el 'na +.. +.\"------------- +.\" switch environment, keep all important settings. +.de misc@ev-keep +.nr misc*ll \\n[.l] +.ds misc*fam \\n[.fam] +.ev \\$1 +.ll \\n[misc*ll]u +.lt \\n[misc*ll]u +.fam \\*[misc*fam] +.. +.\"------------- +.\" .misc@push stackname value +.de misc@push +.ie d misc*st-\\$1 .ds misc*st-\\$1 \\$2 \\*[misc*st-\\$1] +.el .ds misc*st-\\$1 \\$2 +.. +.\"------------- +.\" .misc@pop stackname +.\" value returned in the string misc*pop +.de misc@pop +.misc@pop-set misc*st-\\$1 \\*[misc*st-\\$1] +.. +.\"------------- +.de misc@pop-set +.ds misc*st-name \\$1 +.shift +.if \\n[.$]<1 .@abort stack '\\*[misc*st-name]' empty +.ds misc*pop \\$1 +.shift +.ds \\*[misc*st-name] \\$* +.. +.\"------------- +.\" .misc@pop-nr stackname varname +.de misc@pop-nr +.misc@pop \\$1 +.nr \\$2 0\\*[misc*pop] +.. +.\"------------- +.\" .misc@pop-ds stackname varname +.de misc@pop-ds +.misc@pop \\$1 +.ds \\$2 \\*[misc*pop] +.. +.\"----------- +.\" reset tabs +.de TAB +.ta T 5n +.. +.\"------------- +.\" .PGFORM linelength [ pagelength [ pageoffset [1]]] +.de PGFORM +.\" Break here to avoid problems with new linesetting of the previous line. +.\" Hope this doesn't break anything else :-) +.\" Don't break if arg_4 is a '1'. +.if \\n[D]>2 .tm PGFORM: \\$* +.if ''\\$4' .br +.if \\n[D]>3 .tm PGFORM: IN l:\\n[.l] p:\\n[.p] o:\\n[.o] +.ie !''\\$1' \{\ +. ll \\$1 +. nr @ll \\n[.l] +. nr @cur-ll \\n[@ll] +. lt \\n[@ll]u +.\} +.el \{\ +. ll \\n[@ll]u +. lt \\n[@ll]u +.\} +.\" +.ie !''\\$2' \{\ +. pl \\$2 +. nr @pl \\n[.p] +.\} +.el .pl \\n[@pl]u +.\" +.ie !''\\$3' \{\ +. po \\$3 +. nr @po \\n[.o] +.\} +.el .po \\n[@po]u +.if \\n[D]>3 .tm PGFORM: OUT l:\\n[.l] p:\\n[.p] o:\\n[.o] +.if \\n[D]>2 .tm PGFORM: ll=\\n[@ll], pl=\\n[@pl], po=\\n[@po] +'in 0 +.pg@move-trap +.if \\n[D]>2 \{\ +. tm Traps: +. ptr +.\} +.. +.\"------------- +.\" .MOVE y [[x] linelength] +.\" move to line y, indent to x +.de MOVE +.if !\\n[.$] \{\ +. @warning \\$0: ignoring; no arguments specified +. return +.\} +.if \\n[nl]<0 \c +.\" move to Y-pos +.sp |(v;\\$1) +.\" calc linelength +.ie \\n[.$]>2 .nr pg*i (n;\\$3) +.el \{\ +. ie \\n[.$]>1 .nr pg*i (n;\\n[@ll]u-\\$2) +. el .nr pg*i \\n[@ll]u +.\} +.\" move to X-pos, if any +.if !''\\$2' .po \\$2 +.\" set linelength +.ll \\n[pg*i]u +.. +.\"------------- +.de SM +.if !\\n[.$] \{\ +. @warning \\$0: ignoring; no arguments specified +. return +.\} +.if \\n[.$]=1 \s-1\\$1\s0 +.if \\n[.$]=2 \s-1\\$1\s0\\$2 +.if \\n[.$]=3 \\$1\s-1\\$2\s0\\$3 +.. +.\"------------- +.nr misc*S-ps \n[@ps] +.nr misc*S-vs \n[@vs] +.nr misc*S-ps1 \n[@ps] +.nr misc*S-vs1 \n[@vs] +.ds misc*a +.ds misc*b +.de S +.ie !\\n[.$] \{\ +. ds misc*a P +. ds misc*b P +.\} +.el \{\ +. ie \\n[.$]=1 .ds misc*b D +. el \{\ +. ie \w@\\$2@=0 .ds misc*b C +. el .ds misc*b \\$2 +. \} +. ie \w@\\$1@=0 .ds misc*a C +. el .ds misc*a \\$1 +.\} +.\" +.\" set point size +.if !'\\*[misc*a]'C' \{\ +. ie '\\*[misc*a]'P' .ps \\n[misc*S-ps]u +. el \{\ +. ie '\\*[misc*a]'D' .ps \\n[S] +. el .ps \\*[misc*a] +. if \\n[D]>2 .tm S: .ps \\*[misc*a] +. \} +.\} +.\" +.\" set vertical spacing +.if !'\\*[misc*b]'C' \{\ +. ie '\\*[misc*b]'P' .vs \\n[misc*S-vs]u +. el \{\ +. ie '\\*[misc*b]'D' .vs \\n[.ps]s+2p +. el .vs \\*[misc*b] +. if \\n[D]>2 .tm S: .vs \\*[misc*b] +. \} +.\} +.nr @ps \\n[.ps] +.nr @psu \\n[.ps]s +.nr @vs \\n[.v] +.nr @vsp \\n[.v]u/1p +.nr @res 1i +.\" +.if \\n[D]>1 \{\ +. tmc "S(\\$*): ma:\\*[misc*a], mb:\\*[misc*b] +. tm1 " => ps:\\n[.s]p (\\n[@psu]u), vs:\\n[@vsp]p (\\n[@vs]u) (res:\\n[@res]) +.\} +.nr misc*S-ps \\n[misc*S-ps1] +.nr misc*S-vs \\n[misc*S-vs1] +.nr misc*S-ps1 \\n[@ps] +.nr misc*S-vs1 \\n[@vs] +.pg@move-trap +.. +.\"------------ +.de HC +.ev 0 +.hc \\$1 +.ev +.ev 1 +.hc \\$1 +.ev +.ev 2 +.hc \\$1 +.ev +.. +.\"------------ +.de RD +.di misc*rd +'fl +.rd \\$1\t +.br +.di +.if !''\\$3' \{\ +. di misc*rd2 +. ds \\$3 "\\*[misc*rd] +. br +. di +.\} +.if !''\\$2' .rn misc*rd \\$2 +.rm misc*rd misc*rd2 +.. +.\"------------ +.\" VERBON [flag [type-size [font]]] +.\" flag +.\" bit function +.\" 0 escape character disablement +.\" 1 add an empty line before verbose text +.\" 2 add an empty line after verbose text +.\" 3 number output lines using Verbnm string for .nm args +.\" 4 indent text by amount in register Verbin +.de VERBON +.br +.nr misc*verb 0\\$1 +.if (0\\n[misc*verb]%4)/2 .SP \\n[Lsp]u +.misc@ev-keep misc*verb-ev +.nf +.if (0\\n[misc*verb]%16)/8 .nm \\*[Verbnm] +.ie !'\\$3'' .ft \\$3 +.el .ft CR +.ie 0\\$2 \{\ +. ss \\$2 +. ps \\$2 +. vs \\$2 +.\} +.el .ss 12 +.ta T 8u*\w@n@u +.if (0\\n[misc*verb]%32)/16 .in +\\n[Verbin]u +.if 0\\n[misc*verb]%2 \{\ +. eo +. nr @verbose-flag 1 \" tell pageheader to set ec/eo +.\} +.. +.de VERBOFF +.ec +.br +.if (0\\n[misc*verb]%8)/4 .SP \\n[Lsp]u +.if (0\\n[misc*verb]%16)/8 .nm +.if (0\\n[misc*verb]%32)/16 .in +.ev +.nr @verbose-flag 0 +.. +.\" Wrapper to cancel the side effect of .tag + .br generating +.\" unwanted vertical space. +.de misc@tag +.\" This macro is currently used solely to give information to the +.\" HTML postprocessor. If for PostScript or PDF output macro .H +.\" had been followed by .DS both .H post-space and .DS pre-space +.\" had been output because of this macro. So it is now enabled +.\" only when postprocessor tags are required. +.if '\*[.T]'html' \{\ +.\" retain temporary indentation and horizontal position +.if !(\\n[.in]-\\n[.i]=0) .nr misc*ti \\n[.in] +.nr misc*.k \\n[.k] +.vpt 0 +.DEVTAG-\\$1 \\$2 +.br +.if r misc*ti \{\ +. ti \\n[misc*ti]u +. rr misc*ti +. sp -1 +.\} +.sp -1 +\h'\\n[misc*.k]u'\c +.rr misc*.k +.vpt 1 +.\} +.. +.\" ######## module pict ################# +.nr pict*width 0 +.nr pict*height 0 +.nr pict*mode 0 +.nr pict*ind 0 +.nr pict*id 0 1 +.\" I assume that the number variable pict*id is the same +.\" between two runs. +.de PIC +.br +.nr pict*ind 0 +.nr pict*box 0 +.while \\n[.$]>0 \{\ +. if '-B'\\$1' \{\ +. nr pict*box 1 +. shift +. continue +. \} +. if '-L'\\$1' \{\ +. nr pict*mode 0 +. shift +. continue +. \} +. if '-R'\\$1' \{\ +. nr pict*mode 1 +. shift +. continue +. \} +. if '-I'\\$1' \{\ +. nr pict*ind (m;\\$2) +. nr pict*mode 2 +. shift 2 +. continue +. \} +. if '-C'\\$1' \{\ +. nr pict*mode 3 +. shift +. continue +. \} +. ds pict*f \\$1 +. nr pict*id +1 +. shift +. if \\n[.$]>0 \{\ +. if !\B'\\$1' .@error \\$0: width parameter is not \ +numeric; got '\\$1' +. nr pict*width (i;\\$1) +. shift +. \} +. if \\n[.$]>0 \{\ +. if !\B'\\$1' .@error \\$0: height parameter is not \ +numeric; got '\\$1' +. nr pict*height (i;\\$1) +. shift +. \} +.\} +.\" let mmroff know the filename and id +.if \\n[Ref]>0 \{\ +. tm .\\\\" PIC id \\n[pict*id] +. tm .\\\\" PIC file \\*[pict*f] +.\} +.\" these are defined by mmroff in the second pass +.if d pict*file!\\n[pict*id] \{\ +. ds pict*f \\*[pict*file!\\n[pict*id]] +. nr pict*llx \\n[pict*llx!\\n[pict*id]] +. nr pict*lly \\n[pict*lly!\\n[pict*id]] +. nr pict*urx \\n[pict*urx!\\n[pict*id]] +. nr pict*ury \\n[pict*ury!\\n[pict*id]] +. \" +. nr pict*w (p;\\n[pict*urx]-\\n[pict*llx]) +. if \\n[pict*w]<0 .nr pict*w 0-\\n[pict*w] +. nr pict*h (p;\\n[pict*ury]-\\n[pict*lly]) +. if \\n[pict*h]<0 .nr pict*h 0-\\n[pict*h] +. if \\n[pict*width]>0 \{\ +. nr pict*rs (u;1000*\\n[pict*width]/\\n[pict*w]) +. nr pict*w (u;\\n[pict*w]*\\n[pict*rs]/1000) +. nr pict*h (u;\\n[pict*h]*\\n[pict*rs]/1000) +. \} +. if \\n[pict*height]>0 \{\ +. nr pict*rs (u;1000*\\n[pict*height]/\\n[pict*h]) +. nr pict*h (u;\\n[pict*h]*\\n[pict*rs]/1000) +. \} +. if '0'\\n[pict*mode]' \{\ +. nr pict*in \\n[.i]u +. \} +. if '1'\\n[pict*mode]' \{\ +. nr pict*in (u;\\n[.l]-\\n[.i]-\\n[pict*w]) +. \} +. if '2'\\n[pict*mode]' \{\ +. nr pict*in \\n[pict*ind]u +. \} +. if '3'\\n[pict*mode]' \{\ +. nr pict*in (u;(\\n[.l]-\\n[.i]-\\n[pict*w])/2) +. \} +. ds pict*h " +. if \\n[pict*h]>0 .ds pict*h \\n[pict*h] +. \" +. ne \\n[pict*h]u-1v +. \" +. \" these lines are copied and modified from pspic.tmac. +. \" Originally written by James Clark +. br +. ie \\n[pict*box]>0 \{\ +\v'-1v'\h'\\n[pict*in]u'\ +\Z'\D'p 0 \\n[pict*h]u \\n[pict*w]u 0 0 -\\n[pict*h]u''\ +\v'\\n[pict*h]u'\X'ps: import \\*[pict*f] \ +\\n[pict*llx] \\n[pict*lly] \ +\\n[pict*urx] \\n[pict*ury] \ +\\n[pict*w] \\n[pict*h]' +.\} +. el \{\ +\v'-1v'\h'\\n[pict*in]u'\ +\X'ps: invis'\ +\Z'\D'p 0 \\n[pict*h]u \\n[pict*w]u 0 0 -\\n[pict*h]u''\ +\X'ps: endinvis'\ +\v'\\n[pict*h]u'\X'ps: import \\*[pict*f] \ +\\n[pict*llx] \\n[pict*lly] \ +\\n[pict*urx] \\n[pict*ury] \ +\\n[pict*w] \\n[pict*h]' +. \} +. br +. sp \\n[pict*h]u-1v +.\} +.. +.\" external picture +.\" -L left align +.de EPIC +.nr pict*adj 0 \" centered +.if '\\$1'-L' \{\ +. shift +. nr pict*adj 1 +.\} +.if \\n[.$]<2 \{\ +. @warning \\$0: ignoring; expected width and height arguments +. return +.\} +.\" Permit a document to start with EPIC. +.if \\n[nl]<0 \& +.ie \B'\\$1' .nr pict*w \\$1 +.el .@error \\$0: width parameter is not numeric; got '\\$1' +.ie \B'\\$2' .nr pict*h \\$2 +.el .@error \\$0: height parameter is not numeric; got '\\$2' +.\" XXX: This is kind of lame. It's also not localized. +.ds pict*name External picture\" +.if !''\\$3' .ds pict*name " \\$3\" +.ne \\n[pict*h]u +.sp \\n[pict*h]u-1v +.nr pict*ind 0 +.if !\\n[pict*adj] .nr pict*ind (u;(\\n[.l]-\\n[.i]-\\n[pict*w])/2) +.mk +.in +\\n[pict*ind]u +\D'l \\n[pict*w]u 0'\ +\D'l 0 -\\n[pict*h]u'\ +\D'l -\\n[pict*w]u 0'\ +\D'l 0 \\n[pict*h]u'\ +\v'-(u;\\n[pict*h]/2)'\ +\h'(u;(\\n[pict*w]-\w'\\*[pict*name]'/2))'\\*[pict*name] +.in +.rt +.sp 1v +.. +.\" ######## module acc ################# +.\"----------- +.\" accents. These are copied from mgs, written by James Clark. +.de acc@over-def +.ds \\$1 \Z'\v'(u;\w'x'*0+\En[rst]-\En[.cht])'\ +\h'(u;-\En[skw]+(-\En[.w]-\w'\\$2'/2)+\En[.csk])'\\$2' +.. +.de acc@under-def +.ds \\$1 \Z'\v'\En[.cdp]u'\h'(u;-\En[.w]-\w'\\$2'/2)'\\$2' +.. +.acc@over-def ` \` +.acc@over-def ' \' +.acc@over-def ^ ^ +.acc@over-def ~ ~ +.acc@over-def : \[ad] +.acc@over-def ; \[ad] +.acc@under-def , \[ac] +.\" ######## module uni ################# +.\" unimplemented macros +.de @disable +.ds @end \" empty +.while \\n[.$] \{\ +. rm \\$1 \" in case it's aliased +. de \\$1 @end +. @warning \\$1: ignoring; unavailable after \\*[@cover] +. @end +. shift +.\} +.. +.rm @end +. +.de CS +.@warning \\$0: not implemented except with ".MT 4" +.. +.de OK +.@warning \\$0: not implemented +.. +.de PM +.@warning \\$0: not implemented +.. +.\" ######## module hd ################# +.\" support for usermacro +.nr hd*h1-page 1 \" last page-number for level 1 header. +.nr hd*htype 0 +.ds hd*sect-pg +.ds hd*mark +.ds hd*suf-space +.nr hd*need 0 +.aln ;0 hd*htype +.als }0 hd*mark +.als }2 hd*suf-space +.aln ;3 hd*need +.\"------------- +.\" .hd@split variable index name val1 val2 ... +.de hd@split +.\" TODO: Verify that this isn't reachable due to ordinary user error; +.\" if it is, make it an @error. +.if \\$2>(\\n[.$]-3) .@abort \\$3 must have at least \\$2 values \ +(\\*[\\$3]) +.nr hd*sp-tmp \\$2+3 +.ds \\$1 \\$[\\n[hd*sp-tmp]] +.. +.de HU +.H 0 "\\$1" +.. +.\"------------- +.de H +.if !r hd*cur-bline .nr hd*cur-bline \\n[nl] +.br +.df@print-float 2\" $$$ could be wrong... +.\" terminate all lists +.LC +.init@reset +.nr hd*level 0\\$1 +.nr hd*arg1 0\\$1 +.if !\\n[hd*level] .nr hd*level \\n[Hu] +.\" +.\" clear lower counters +.nr hd*i 1 1 +.while \\n+[hd*i]<15 .if \\n[hd*level]<\\n[hd*i] .nr H\\n[hd*i] 0 1 +.\" +.\" save last text for use in TP +.if \\n[hd*level]=1 .ds H1txt \\$2\\$3 +.\" +.\" This is a little fix to be able to get correct H1 heading number +.\" in page headers. Special attention was needed when other formats are used. +.ie !''\\g[H1]' \{\ +. ds hd*format \\g[H1] +. af H1 0 +. nr H1h \\n[H1] 1 +. af H1 \\*[hd*format] +.\} +.el .nr H1h \\n[H1] 1 +.if \\n[hd*level]=1 .nr H1h +1 +.\" +.\" Break page before headings of level <= Ej. +.if ((\\n[hd*level]<=\\n[Ej])&(\\n[nl]>\\n[hd*cur-bline])) .pg@next-page +.\" +.\" increment current counter +.nr H\\n[hd*level] +1 +.\" +.\" update pagenumber if section-page is used +.if (\\n[hd*level]=1)&(\\n[Sectp]>0) .hd@set-page 1 +.\" +.\" hd*mark is the text written to the left of the header. +.ds hd*mark \\n[H1]. +.\" +.if \\n[hd*level]>1 .as hd*mark \\n[H2] +.\" +.nr hd*i 2 1 +.while \\n+[hd*i]<15 .if \\n[hd*level]>(\\n[hd*i]-1) \ +. as hd*mark .\\n[H\\n[hd*i]] +.if \\n[Ht] .ds hd*mark \\n[H\\n[hd*level]]. +.\" +.\" special case, no dot after level one heading if not H1dot true +.if (\\n[hd*level]=1)&(\\n[H1dot]=0) .ds hd*mark \\n[H1] +.\" +.ds hd@mark-trimmed \\*[hd*mark]\" mark without spaces, for references +.as hd*mark \ \ \" add spaces between heading mark and title +.if !\\n[hd*arg1] .ds hd*mark \" empty; no mark for unnumbered heading +.\" +.if \\n[D]>1 .tm At header \\*[hd*mark] "\\$2" +.nr hd*htype 0 \" hd*htype = check break and space +. \" 0 = run-in, 1 = break only, 2 = space +.if \\n[hd*level]<=\\n[Hb] .nr hd*htype 1 +.if \\n[hd*level]<=\\n[Hs] .nr hd*htype 2 +. \" two spaces if hd*htype == 0 +.ie (\\n[hd*htype]=0)&(\w@\\$2@) .ds hd*suf-space " \" +.el .ds hd*suf-space \" empty +.nr hd*need 2v \" hd*need = header need space +.\"---------- user macro HX ------------ +.\" User exit macro to override numbering. +.\" May change hd*mark (}0), hd*suf-space (}2) and hd*need (;3) +.\" Can also change Hps1/2. +.if d HX .HX \\n[hd*level] \\n[hd*arg1] "\\$2\\$3" +.\"-------------------------------------- +.\" pre-space +.ie \\n[hd*level]<=\\n[Hps] .SP (u;\\n[Hps2]) +.el .SP (u;\\n[Hps1]) +.\" +.par@reset-num \\n[hd*level]\" reset numbered paragraph +.\" start diversion to measure size of header +.di hd*div +\\*[hd*mark]\\$2\\$3\\*[hd*suf-space] +.br +.di +.rm hd*div +.if \\n[hd*htype] .na \" do not adjust heading if not run-in +.if \\n[hd*htype]<2 .nr hd*need +\\n[Lsp]u \" add some extra space +.ne \\n[hd*need]u+\\n[dn]u+.5p-1v \" space needed for a heading +.\" +.\" size and font calculations +.hd@split hd*font \\n[hd*level] HF \\*[HF]\" get font for this level +.ft \\*[hd*font]\" set new font +.hd@split hd*new-ps \\n[hd*level] HP \\*[HP]\" get point size +.ie (\\*[hd*new-ps]=0):(\w@\\*[hd*new-ps]@=0) \{\ +. if \\n[hd*htype] \{\ +. if '\\*[hd*font]'3' \{\ +. ps -1 +. vs -1 +. \} +. if '\\*[hd*font]'B' \{\ +. ps -1 +. vs -1 +. \} +. \} +.\} +.el \{\ +. ps \\*[hd*new-ps] +. vs \\*[hd*new-ps]+2 +.\} +.\" +.\"---------- user macro HY ------------- +.\" user macro to reset indents +.if d HY .HY \\n[hd*level] \\n[hd*arg1] "\\$2\\$3" +.\" HTML: mark beginning of heading +.misc@tag NH \\n[hd*level] +.\"-------------------------------------- +.nr hd*mark-size \w@\\*[hd*mark]@ +.if (\\n[hd*level]<=\\n[Hc])&\\n[hd*htype] .ce\" center if level<=Hc +.\" +.\" finally, output the header +\\*[hd*mark]\&\c +.\" and the rest of the header +.ie \\n[hd*htype] \{\ +\\$2\\$3 +. br +.\} +.el \\$2\\$3\\*[hd*suf-space]\&\c +.ft 1 +.\" restore pointsize and vertical size. +.ps \\n[@ps]u +.vs \\n[@vs]u +.\" +.\" table of contents +.if (\\n[hd*level]<=\\n[Cl])&\w@\\$2@ .toc@entry \\n[hd*level] "\\$2" +.\" set adjust to previous value +.SA +.\" do break or space +.if \\n[hd*htype] .br +.if \\n[hd*htype]>1 .SP (u;\\n[Lsp]*\\n[Hss]) +.ie \\n[hd*htype] \{\ +. \" indent if Hi=1 and Pt=1 +. if (\\n[Hi]=1)&(\\n[Pt]=1) .ti +\\n[Pi]n +. \" indent size of mark if Hi=2 +. if \\n[hd*htype]&(\\n[Hi]>1) .ti +\\n[hd*mark-size]u +. nr par@suppress-indentation 1 +.\} +.\" We're setting a run-in heading; the next paragraph is normal. +.el .nr par@suppress-indentation 0 +.\" +.\" check if it is time to reset footnotes +.if (\\n[hd*level]=1)&\\n[ft*clear-at-header] .nr ft*nr 0 1 +.\" +.\" check if it is time to reset indexes +.if (\\n[hd*level]=1)&\\n[Sectf] \{\ +. nr lix*fg-nr 0 1 +. nr lix*tb-nr 0 1 +. nr lix*ec-nr 0 1 +. nr lix*ex-nr 0 1 +.\} +.\"---------- user macro HZ ---------- +.if d HZ .HZ \\n[hd*level] \\n[hd*arg1] "\\$2\\$3" +.nr hd*last-pos \\n[nl] +.nr hd*last-hsize \\n[.k] +.\" HTML: end of heading +.misc@tag EO-H +.. +.\"-------- +.de HM +.nr hd*i 0 1 +.while \\n+[hd*i]<15 .af H\\n[hd*i] \\$[\\n[hd*i]] 1 +.. +.\"---------------------- +.\" set page-nr, called from header +.\" +.de hd@set-page +.\" +.ie \\n[.$]>0 .nr P \\$1 +.el .nr P +1 +.\" Set section-page-string +.ds hd*sect-pg \\n[H1]-\\n[P] +.if \\n[Sectp]>1 .if '\\n[H1]'0' .ds hd*sect-pg " +.. +.\"########### module pg #################### +.\" set end of text trap +.wh 0 pg@header +.em pg@end-of-text +.\" +.ds pg*header ''- \\n[P] -'' +.ds pg*footer +.if \n[N]=4 .ds pg*header '''' +.if (\n[N]=3):(\n[N]=5) \{\ +. ds pg*header '''' +. ds pg*footer ''\\*[hd*sect-pg]'' +.\} +.ds pg*even-footer +.ds pg*odd-footer +.ds pg*even-header +.ds pg*odd-header +.\" +.nr pg*top-margin 0 +.nr pg*foot-margin 0 +.nr pg*block-size 0 +.nr pg*footer-size 5v\" 1v+footer+even/odd footer+2v +.nr pg*header-size 7v\" 3v+header+even/odd header+2v +.nr pg*extra-footer-size 0 +.nr pg*extra-header-size 0 +.nr ft*note-size 0 +.nr pg*cur-column 0 +.nr pg*cols-per-page 1 +.nr pg*cur-po \n[@po] +.nr pg*head-mark 0 +.\" +.nr pg*ps \n[@ps] +.nr pg*vs \n[@vs] +.\"------------------------- +.\" footer TRAPS: set, enable and disable +.de pg@set-new-trap +.nr pg*foot-trap \\n[@pl]u-(\\n[pg*block-size]u+\\n[ft*note-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]u+\\n[pg*extra-footer-size]u) +.\" +.if \\n[D]>2 .tm pg*foot-trap \\n[@pl]u-(\\n[pg*block-size]u+\\n[ft*note-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]u+\\n[pg*extra-footer-size]u) = \\n[pg*foot-trap] +.\" +.\" last-pos points to the position of the footer and bottom +.\" block below foot-notes. +.nr pg*last-pos \\n[@pl]u-(\\n[pg*block-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]u+\\n[pg*extra-footer-size]u) +.if \\n[D]>2 .tm pg*last-pos \\n[@pl]u-(\\n[pg*block-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]u+\\n[pg*extra-footer-size]u) = \\n[pg*last-pos] +.. +.de pg@enable-trap +.\" Disable in HTML mode +.if !'\*[.T]'html' \{\ +.wh \\n[pg*foot-trap]u pg@footer +.if \\n[D]>2 .tm pg@enable-trap .t=\\n[.t] nl=\\n[nl] +.if \\n[D]>2 .ptr +.\} +.. +.de pg@disable-trap +.ch pg@footer +.. +.\" move to new trap (if changed). +.de pg@move-trap +.pg@disable-trap +.pg@set-new-trap +.pg@enable-trap +.. +.de pg@enable-top-trap +.\" set trap for pageheader. +.nr pg*top-enabled 1 +.. +.de pg@disable-top-trap +.\" remove trap for pageheader. +.nr pg*top-enabled 0 +.. +.\" no header on the next page +.de PGNH +.nr pg*top-enabled (-1) +.. +.\" set first trap for pagefooter +.pg@enable-top-trap +.pg@set-new-trap +.pg@enable-trap +.\"------------------------- +.\" stop output and begin on next page. Fix footnotes and all that. +.de pg@next-page +.\".debug next-page +.ne 999i \" activate trap +.\" .pg@footer +.. +.\"------------------------- +.\" support for PX, TP and EOP. +.als }t pg*header +.als }e pg*even-header +.als }o pg*odd-header +.als TPh pg*header +.als TPeh pg*even-header +.als TPoh pg*odd-header +.\" +.als }b pg*footer +.als }f pg*even-footer +.als }p pg*odd-footer +.als EOPf pg*footer +.als EOPef pg*even-footer +.als EOPof pg*odd-footer +.\"------------------------------------------------------------ +.\" HEADER +.de pg@header +.\" Disable in HTML mode +.if !'\*[.T]'html' \{\ +.if \\n[D]>1 .tm Page# \\n[%] (\\n[.F]:\\n[c.]) +. if (u;(\\n[pg*header-size] + \\n[pg*extra-header-size] \ + + \\n[pg*footer-size] + \\n[pg*extra-footer-size] \ + + \\n[.V]) >= \\n[.p]) \{\ +. pl \\n[nl]u +. @error insufficient page length; aborting +. \} +.\} +.\" check if Hy has been changed +.ie \\n[Hy] 'hy 14 +.el 'nh +.if \\n[Idxf] \{\ +.tl '<pagenr\ \\n[%]>''' +.\} +.\" assign current page-number to P +.hd@set-page +.\" reset spacing +.nr line*lp\\n[.z] 0 +.nr line*ac\\n[.z] 0 +.\" +.\" suppress pageheader if pagenumber == 1 and N == [124] +.if \\n[pg*top-enabled] \{\ +.\" must be fixed!! +.\". pg@disable-top-trap +. if \\n[pg*extra-header-size] 'sp \\n[pg*extra-header-size]u +. if \\n[pg*top-margin] 'sp \\n[pg*top-margin]u +. ev pg*tl-ev +. pg@set-env +. ie d let@header .let@header +. el \{\ +. ie d TP .TP +. el \{\ +' sp 3 +. ds hd*format \\g[P] +. af P 0 +. ie ((\\n[P]=1)&((\\n[N]=1):(\\n[N]=2))) .sp +. el .tl \\*[pg*header] +. af P \\*[hd*format] +. ie o .tl \\*[pg*odd-header] +. el .tl \\*[pg*even-header] +' sp 2 +. \} +. \} +. ev +. \" why no-space?? +. if d PX \{\ +. ns +. PX +. rs +. \} +. \" check for pending footnotes +. ft@check-old +. \" +. \" back to normal text processing +. pg@enable-trap +. \" mark for multicolumn +. nr pg*head-mark \\n[nl]u +. \" reset NCOL pointer at each new page. +. nr pg*last-ncol 0 +. \" set multicolumn +. \" +. pg@set-po +. \" print floating displays +. df@print-float 4 +. tbl@top-hook +. ns +.\} +.if \\n[pg*top-enabled]<0 .nr pg*top-enabled 1 +.nr hd*cur-bline \\n[nl] \" .H needs to know if output has occurred +.\} +.. +.\"--------------------------------------------------------- +.\" FOOTER +.de pg@footer +.ec +.if \\n[D]>2 .tm Footer# \\n[%] (\\n[.F]:\\n[c.]) nl=\\n[nl] +.pg@disable-trap +.\".debug footer +.tbl@bottom-hook +.\" increment pageoffset for MC +.\" move to the exact start of footer. +'sp |\\n[pg*foot-trap]u+1v +.\" +.if \\n[D]>3 .tm FOOTER after .sp, nl=\\n[nl] +.\" print footnotes +.if d ft*div .ft@print +.\" +.pg@inc-po +.if !\\n[pg*cur-column] .pg@print-footer +.\" next column +.pg@set-po +.pg@enable-trap +.if \\n[@verbose-flag] .eo \" to help VERBON/VERBOFF +.. +.\"------------------------- +.de pg@print-footer +.\" jump to the position just below the foot-notes. +'sp |\\n[pg*last-pos]u+1v +.if \\n[D]>3 .tm print-footer nl=\\n[nl] +.\" check if there are any bottom block +.if d pg*block-div .pg@block +.\" +.\" print the footer and eject new page +.ev pg*tl-ev +.pg@set-env +.vpt 0 +.\" user defined end-of-page macro +.ie d EOP .EOP +.el \{\ +. ie o .tl \\*[pg*odd-footer] +. el .tl \\*[pg*even-footer] +. ds hd*format \\g[P] +. af P 0 +. ie (\\n[P]=1)&(\\n[N]=1) .tl \\*[pg*header] +. el .tl \\*[pg*footer] +. af P \\*[hd*format] +. tl ''\\*[Pg_type!\\n[@copy_type]]'' +.\} +.vpt 1 +.ev +.\" be sure that floating displays and footnotes will be +.\" printed at the end of the document. +.ie (\\n[df*fnr]>=\\n[df*o-fnr]):\\n[ft*exist] \{\ +. ev ne +' bp +. ev +.\} +.el 'bp +.. +.\"------------------------- +.\" +.\" Initialize the title environment +.de pg@set-env +'na +'nh +'in 0 +'ti 0 +.ie \\n[Pgps] \{\ +. ps \\n[@ps]u +. vs \\n[@vs]u +.\} +.el \{\ +. ps \\n[pg*ps]u +. vs \\n[pg*vs]u +.\} +.lt \\n[@ll]u +.ll \\n[@ll]u +.. +.\"------------------------- +.de PH +.ds pg*header "\\$1 +.pg@set-new-size +.. +.de PF +.ds pg*footer "\\$1 +.pg@set-new-size +.. +.de OH +.ds pg*odd-header "\\$1 +.pg@set-new-size +.. +.de EH +.ds pg*even-header "\\$1 +.pg@set-new-size +.. +.de OF +.ds pg*odd-footer "\\$1 +.pg@set-new-size +.. +.de EF +.ds pg*even-footer "\\$1 +.pg@set-new-size +.. +.de pg@clear-hd +.ds pg*even-header +.ds pg*odd-header +.ds pg*header +.. +.de pg@clear-ft +.ds pg*even-footer +.ds pg*odd-footer +.ds pg*footer +.. +.de pg@set-new-size +.nr pg*ps \\n[@ps] +.nr pg*vs \\n[@vs] +.pg@move-trap +.. +.\"------------------------- +.\" end of page processing +.de pg@footnotes +.\".debug footnotes +.\" output footnotes. set trap for block +.\" +.. +.\"------------------------- +.\" print bottom block +.de pg@block +.ev pg*block-ev +'nf +'in 0 +.ll 100i +.pg*block-div +.br +.ev +.. +.\"------------------------- +.\" define bottom block +.de BS +.misc@ev-keep pg*block-ev +.init@reset +.br +.di pg*block-div +.. +.\"------------------------- +.de BE +.br +.di +.nr pg*block-size \\n[dn]u +.ev +.pg@move-trap +.. +.\"------------------------- +.\" print out all pending text +.de pg@end-of-text +.if \\n[D]>2 .tm ---------- End of text processing ---------------- +.df@eot-print +.ref@eot-print +.. +.\"------------------------- +.\" set top and bottom margins +.\" -T sets pg*footer-size and pg*header-size instead +.de VM +.ie '\\$1'-T' \{\ +. shift +. if \\n[.$]=0 \{\ +. nr pg*footer-size 5v +. nr pg*header-size 7v +. \} +. if \\n[.$]>0 .nr pg*header-size (v;\\$1) +. if \\n[.$]>1 .nr pg*footer-size (v;\\$2) +.\} +.el \{\ +. if \\n[.$]=0 \{\ +. nr pg*extra-footer-size 0 +. nr pg*extra-header-size 0 +. \} +. if \\n[.$]>0 .nr pg*extra-header-size (v;\\$1) +. if \\n[.$]>1 .nr pg*extra-footer-size (v;\\$2) +. if \\n[D]>2 \{\ +. tm extra top \\n[pg*extra-footer-size] +. tm extra bottom \\n[pg*extra-header-size] +. \} +.\} +.pg@move-trap +.. +.\"--------------------- +.\" multicolumn output. +.de pg@set-po +.if \\n[pg*cols-per-page]>1 \{\ +. ll \\n[pg*column-size]u +.\} +.. +.de pg@inc-po +.if \\n[pg*cols-per-page]>1 \{\ +. ie \\n+[pg*cur-column]>=\\n[pg*cols-per-page] \{\ +. nr pg*cur-column 0 1 +. nr pg*cur-po \\n[@po]u +. po \\n[@po]u +. ll \\n[@ll]u +. \} +. el \{\ +. nr pg*cur-po +(\\n[pg*column-size]u+\\n[pg*column-sep]u) +. po \\n[pg*cur-po]u +' sp |\\n[pg*head-mark]u +. tbl@top-hook +. \} +.\} +.. +.\" An argument disables the page-break. +.de 1C +.if \\n[pg*cols-per-page]<=1 \{\ +. @warning \\$0: multicolumn mode not active +. return +.\} +.br +.nr pg*cols-per-page 1 +.nr pg*column-sep 0 +.nr pg*column-size \\n[@ll] +.nr pg*ncol-i \\n[pg*cur-column]\" temp variable +.nr pg*cur-column 0 1 +.nr pg*cur-po \\n[@po]u +.PGFORM +.ie !'\\$1'1' .SK +.el \{\ +. if d ft*div \{\ +. if \\n[pg*ncol-i]>0 \{\ +. @warning \\$0: returning to single-column \ +layout with suppressed page break and footnote pending; output may be \ +messy +. \} +. \} +. if \\n[pg*last-ncol]>0 \{\ +. sp |\\n[pg*last-ncol]u +. nr pg*last-ncol 0 +. \} +.\} +.. +.de 2C +.if \\n[pg*cols-per-page]>1 .@error \\$0: multicolumn mode already \ +active +.br +.nr pg*head-mark \\n[nl]u +.nr pg*cols-per-page 2 +.nr pg*column-sep \\n[@ll]/15 +.nr pg*column-size (\\n[@ll]u*7)/15 +.nr pg*cur-column 0 1 +.nr pg*cur-po \\n[@po]u +.ll \\n[pg*column-size]u +.\" .lt \\n[pg*column-size]u +.. +.\" MC column-size [ column-separation ] +.de MC +.if \\n[pg*cols-per-page]>1 .@error \\$0: multicolumn mode already \ +active +.br +.nr pg*head-mark \\n[nl]u +.ie ''\\$1' .nr pg*column-size \\n[.l] +.el .nr pg*column-size (n;\\$1) +.ie ''\\$2' .nr pg*column-sep \\n[pg*column-size]/15 +.el .nr pg*column-sep (n;\\$2) +.\" +.\" calculate the number of columns/page +.nr pg*cols-per-page 0 \" temporarily invalid! +.nr pg*i \\n[pg*column-size] +.while \\n[pg*i]<=\\n[.l] \{\ +. nr pg*cols-per-page +1 +. nr pg*i \\n[pg*i]+\\n[pg*column-sep]+\\n[pg*column-size] +.\} +.if \\n[pg*cols-per-page]<0 .@abort \\n[pg*cols-per-page] columns in \ +page +.nr pg*cur-column 0 1 +.nr pg*cur-po \\n[@po]u +.ll \\n[pg*column-size]u +.\" .lt \\n[pg*column-size]u +.. +.\" begin a new column +.de NCOL +.br +.if \\n[nl]>\\n[pg*last-ncol] .nr pg*last-ncol \\n[nl] +.pg@footer +.. +.\" skip pages +.de SK +.br +.bp +.nr pg*i 0 1 +.\" force new page by writing something invisible. +.while \\n+[pg*i]<=(0\\$1) \{\ +\& +. bp +.\} +.. +.\"------------------------------- +.\" MULB width1 space1 width2 space2 width3 space3 ... +.de MULB +.br +.nr pg*i 0 1 +.nr pg*mul-x 0 1 +.nr pg*mul-ind 0 +.nr pg*mul-last 0 +.while \\n[.$] \{\ +. nr pg*mul!\\n+[pg*i] (n;0\\$1) +. nr pg*muls!\\n[pg*i] (n;0\\$2) +. shift 2 +.\} +.nr pg*mul-max-col \\n[pg*i] +.ds pg*mul-fam \\n[.fam] +.nr pg*mul-font \\n[.f] +.ev pg*mul-ev +.ps \\n[@ps]u +.vs \\n[@vs]u +.fam \\*[pg*mul-fam] +.ft \\n[pg*mul-font] +.fi +.hy 6 +.di pg*mul-div +.MULN +.. +.\"----------- +.de MULN +.if \\n[pg*mul-x]>=\\n[pg*mul-max-col] .@abort undefined column width \ +(pg*mul-x=\\n[pg*mul-x >= pg*mul-max-col=\\n[pg*mul-max]) +.br +.if \\n[.d]>\\n[pg*mul-last] .nr pg*mul-last \\n[.d] +.rt +0 +.in \\n[pg*mul-ind]u +.ll (u;\\n[.i]+\\n[pg*mul!\\n+[pg*mul-x]])u +.nr pg*mul-ind +(u;\\n[pg*mul!\\n[pg*mul-x]]+\\n[pg*muls!\\n[pg*mul-x]]) +.. +.\"----------- +.\" MULE +.de MULE +.br +.if \\n[.d]>\\n[pg*mul-last] .nr pg*mul-last \\n[.d] +.di +.ev +.ne \\n[pg*mul-last]u +.nf +.mk +.pg*mul-div +.rt +.sp \\n[pg*mul-last]u +.fi +.. +.\"----------- +.de OP +.br +.ie o .if !\\n[pg*head-mark]=\\n[nl] \{\ +. bp +1 +. bp +1 +.\} +.el .bp +.. +.\"########### module footnotes ################### +.nr ft*note-size 0 +.nr ft*busy 0 +.nr ft*nr 0 1 +.aln :p ft*nr +.nr ft*wide 0 +.nr ft*hyphen 0\" hyphenation value +.nr ft*adjust 1\" >0 if adjust true +.nr ft*indent 1\" >0 if text indent true (not imp. $$$) +.nr ft*just 0\" 0=left justification, 1=right (not imp. $$$) +.nr ft*exist 0\" not zero if there are any footnotes to be printed +.nr ft*clear-at-header 0\" >0 if footnotes should be reset at first level head. +.\" +.ie t .ds F \v'-.4m'\s-3\\n+[ft*nr]\s0\v'.4m' +.el .ds F [\\n+[ft*nr]] +.\" +.\"----------------- +.\" init footnote environment +.de ft@init +.\" indentcontrol not implemented $$$ +.\" label justification not implemented $$$ +'in 0 +'fi +.ie \\n[ft*adjust] 'ad +.el 'na +.ie \\n[ft*hyphen] 'hy 6 +.el 'hy 0 +.ll \\n[@cur-ll]u +.lt \\n[@cur-ll]u +.ps (p;\\n[@ps]u-2) +.vs (p;\\n[@vs]u-1) +.. +.\"----------------- +.\" set footnote format +.\" no support for two column processing (yet). $$$ +.de FD +.if \\n[.$]=0 .@error \\$0: expected 1 or 2 arguments, got \\n[.$] +.ie \\n[.$]=2 .nr ft*clear-at-header 1 +.el .nr ft*clear-at-header 0 +.\" +.if !'\\$1'' \{\ +. ie \\$1>11 .nr ft*format 0 +. el .nr ft*format \\$1 +. \" +. nr ft*hyphen (\\n[ft*format]%2)*6 +. nr ft*format \\n[ft*format]/2 +. \" +. nr ft*adjust 1-(\\n[ft*format]%2) +. nr ft*format \\n[ft*format]/2 +. \" +. nr ft*indent 1-(\\n[ft*format]%2) +. nr ft*format \\n[ft*format]/2 +. \" +. nr ft*just \\n[ft*format]%2 +.\} +.. +.\"--------------- +.\" Footnote and display width control $$$ +.de WC +.nr ft*i 0 1 +.while \\n+[ft*i]<=\\n[.$] \{\ +. ds ft*x \\$[\\n[ft*i]] +. if '\\*[ft*x]'N' \{\ +. nr ft*wide 0 +. nr ft*first-fn 0 +. nr ds*wide 0 +. nr ds*float-break 1 +. \} +. if '\\*[ft*x]'-WF' .nr ft*wide 0 +. if '\\*[ft*x]'WF' .nr ft*wide 1 +. if '\\*[ft*x]'-FF' .nr ft*first-fn 0 +. if '\\*[ft*x]'FF' .nr ft*first-fn 1 +. if '\\*[ft*x]'-WD' \{\ +. nr ds*wide 0 +. if r ft*df-save \{\ +. nr Df \\n[ft*df-save] +. rm ft*df-save +. \} +. \} +. if '\\*[ft*x]'WD' \{\ +. nr ds*wide 1 +. nr ft*df-save \\n[Df] +. nr Df 4 +. \} +. if '\\*[ft*x]'-FB' .nr ds*float-break 0 +. if '\\*[ft*x]'FB' .nr ds*float-break 1 +. if \\n[D]>1 .tm WC WF=\\n[ft*wide] WD=\\n[ds*wide] +.\} +.. +.\"----------------- +.\" begin footnote +.\" Change environment, switch to diversion and print the foot-note mark. +.de FS +.if \\n[ft*busy] .@error \\$0: cannot nest; missing FE? +.nr ft*busy 1 +.ev ft*ev +.ft@init +.if !\\n[ft*wide] .pg@set-po +.di ft*tmp-div +.nr ft*space (u;\\n[Fs]*\\n[Lsp]) +.sp \\n[ft*space]u +.\" print mark +.ie \\n[.$] .ds ft*mark \\$1 +.el .ds ft*mark \\n[ft*nr]. +\\*[ft*mark] +.in +.75c +.sp -1 +.nr ft*exist 1 +.. +.\"----------------- +.\" init footnote diversion +.de ft@init-footnote +.di ft*div +\l'20n' +.br +.di +.nr ft*note-size \\n[dn] +.. +.\"----------------- +.\" end footnote +.\" End the diversion, back to previous environment, and adjust +.\" the trap to the new foot-note size. +.de FE +.nr ft*busy 0 +.br +.di +'in 0 +'nf +.if \\n[@pl]u<\\n[dn]u .@error \\$0: footnote bigger than page area +.if !d ft*div .nr dn +1v +.if \\n[D]>3 .tm FE: foot-trap=\\n[pg*foot-trap] .d=\\n[.d] dn=\\n[dn] +.ie (\\n[pg*foot-trap]u-\\n[.d]u)<\\n[dn]u \{\ +. da ft*next-div +. ft*tmp-div +. br +. di +.\} +.el \{\ +. if !d ft*div .ft@init-footnote +. da ft*div +. ft*tmp-div +. di +. nr ft*note-size +\\n[dn] +.\} +.rm ft*tmp-div +.ev +.pg@move-trap +.. +.\"----------------- +.\" print footnotes, see pg@footer +.de ft@print +.ev ft*print-ev +'nf +'in 0 +.ll 100i +.ft*div +.br +.ev +.rm ft*div +.nr ft*note-size 0 +.pg@move-trap +.. +.\"----------------- +.\" check if any pending footnotes, see pg@header +.de ft@check-old +.if d ft*next-div \{\ +. ev ft*ev +. ft@init +. ft@init-footnote +. nf +. in 0 +. da ft*div +. ft*next-div +. di +. nr ft*note-size +\\n[dn] +. rm ft*next-div +. ev +. nr ft*exist 0 +. pg@move-trap +.\} +.. +.\"########### module display ################### +.nr ds*wide 0\" >0 if wide displays wanted +.nr df*fnr 0 1\" floating display counter +.nr df*o-fnr 1\" floating display counter, already printed +.nr ds*snr 0 1\" static display counter +.nr ds*lvl 0 1\" display level +.nr ds*float-busy 0\" >0 if printing float +.nr df*float 0\" >0 if previous display was floating +.\"-------------------------------------------- +.de DE +.ie \\n[df*float] .df@end \\$@ +.el .ds@end \\$@ +.. +.\"-------------------------------------------- +.\" floating display start +.\" nested DF/DE is not allowed. +.de DF +.if \\n[df*float] .@error \\$0: cannot nest floating keeps; use DS \ +within DF/DE +.ds ds@macro \\$0 +.ds@set-format \\$@ +.\" +.nr df*old-ll \\n[.l] +.nr ds*ftmp \\n[.f] +.misc@ev-keep df*ev +.ft \\n[ds*ftmp] +.\" +.init@reset +.di df*div +'in 0 +.\" +.ds@set-new-ev \\n[df*old-ll] +.SP \\n[Lsp]u +.nr df*float 1 +.. +.\"-------------------------------------------- +.de df@end +.br +.SP \\n[Lsp]u +.di +.nr df*width!\\n+[df*fnr] \\n[dl] +.nr df*height!\\n[df*fnr] \\n[dn] +.nr df*wide!\\n[df*fnr] \\n[ds*wide] +.nr df*format!\\n[df*fnr] \\n[ds*format] +.ev +.if \\n[D]>2 .tm DF:fnr=\\n[df*fnr] w=\\n[dl] h=\\n[dn] wide=\\n[ds*wide] \ + form=\\n[ds*format] +.\" move div to the floating display list +.rn df*div df*fdiv!\\n[df*fnr] +.\" +.nr par@suppress-indentation 1 \" no indentation after displays +.\" print float if queue is empty and the display fits into +.\" the current page +.if ((\\n[df*fnr]>=\\n[df*o-fnr])&(\\n[dn]<\\n[.t])) .df@print-float 1 +.nr df*float 0 +.. +.\"------------- +.\" called by end-of-text +.de df@eot-print +.br +.if \\n[df*o-fnr]<=\\n[df*fnr] \{\ +. if \\n[D]>2 .tm Print remaining displays. +.\" still some floats left, make non-empty environment +. misc@ev-keep ne +. init@reset +\c +. df@print-float 3 +. ev +.\} +.. +.\"--------------- +.\" print according to Df and De. +.\" .df@print-float type +.\" type called from +.\" 1 .DE +.\" 2 end of section +.\" 3 end of document +.\" 4 beginning of new page +.\" +.de df@print-float +.if \\n[Df]>5 .@abort invalid float type: 5 < Df (\\n[Df]) +.if !\\n[ds*float-busy] \{\ +. nr ds*float-busy 1 +.\" at .DE +. if \\n[D]>3 \{\ +. tmc print-float: .t=\\n[.t] +. if r df*height!\\n[df*o-fnr] \ +. tmc , h=\\n[df*height!\\n[df*o-fnr]] +. tm +. \} +. \" Df = 1 or 5 +. if (\\$1=1)&((\\n[Df]=1):(\\n[Df]=5)) \{\ +. if \\n[.t]>\\n[df*height!\\n[df*o-fnr]] \{\ +. \" Print only new displays. +. if \\n[df*o-fnr]=\\n[df*fnr] \{\ +. br +. ds@print-one-float +. \} +. \} +. \} +. \" Df = 3 +. if (\\$1=1)&(\\n[Df]=3) \{\ +. if \\n[.t]>\\n[df*height!\\n[df*o-fnr]] \{\ +. br +. ds@print-one-float +. \} +. \} +.\" print all if Df<2 and end of section +. if (\\$1=2)&(\\n[Sectp]>0)&(\\n[Df]<2) \{\ +. br +. ds@print-all-floats +. \} +.\" print all if end of document. Where should they go instead? +. if \\$1=3 \{\ +. br +. ds@print-all-floats +.\} +.\" new page +. if (\\$1=4)&(\\n[Df]>1) \{\ +. if \\n[Df]=2 .ds@print-one-float +. if \\n[Df]=3 .ds@print-one-float +. if \\n[Df]>3 \{\ +. ie \\n[De] .ds@print-all-floats +. el .ds@print-this-page +. \} +. \} +. nr ds*float-busy 0 +.\} +.. +.\"--------------- +.\" DF out +.\" print a floating diversion +.de ds@output-float +.nr df*old-ll \\n[.l] +.nr df*old-in \\n[.i] +.ev ds*fev +.nf +.nr df*i \\n[df*o-fnr] +.nr df*f \\n[df*format!\\n[df*i]] +.\" +.in \\n[df*old-in]u +.if \\n[df*f]=1 'in +\\n[Si]n +.if \\n[df*f]>=2 'in 0 +.if \\n[df*f]=2 'ce 9999 +.if \\n[df*f]=3 'in (u;(\\n[.l]-\\n[df*width!\\n[df*i]])/2) +.if \\n[df*f]=4 'rj 9999 +.if \\n[df*f]=5 'in (u;\\n[.l]-\\n[df*width!\\n[df*i]]) +.\" +.\" +.df*fdiv!\\n[df*o-fnr] +.\" +.if \\n[df*f]=2 'ce 0 +.if \\n[df*f]=4 'rj 0 +.ev +.rm df*fdiv!\\n[df*i] +.rm df*height!\\n[df*i] +.rm df*format!\\n[df*i] +.if \\n[df*wide!\\n[df*i]] .nr pg*head-mark \\n[nl]u +.nr df*o-fnr +1 +.. +.\"--------------- +.\" print one floating display if there is one. +.de ds@print-one-float +.if \\n[df*o-fnr]<=\\n[df*fnr] \{\ +. if \\n[D]>3 .tm print-one-float: .t=\\n[.t], h=\\n[df*height!\\n[df*o-fnr]] +. if \\n[.t]<\\n[df*height!\\n[df*o-fnr]] .pg@next-page +. ds@output-float +. if \\n[De] .pg@next-page +.\} +.. +.\"--------------- +.\" print all queued floats. +.\" if De>0 do a page eject between the floats. +.de ds@print-all-floats +.while \\n[df*o-fnr]<=\\n[df*fnr] \{\ +. if \\n[D]>3 .tm print-all-floats: .t=\\n[.t], h=\\n[df*height!\\n[df*o-fnr]] +. if \\n[.t]<\\n[df*height!\\n[df*o-fnr]] .pg@next-page +. br +\c +. ds@output-float +. if \\n[De] .pg@next-page +.\} +.. +.\"--------------- +.\" print as many floats as will fit on the current page +.de ds@print-this-page +.while \\n[df*o-fnr]<=\\n[df*fnr] \{\ +. if \\n[D]>3 .tm print-this-page: .t=\\n[.t], h=\\n[df*height!\\n[df*o-fnr]] +. if \\n[.t]<\\n[df*height!\\n[df*o-fnr]] .break +. ds@output-float +.\} +.. +.\"--------------------------------------------------- +.\" get format of the display +.de ds@set-format +.ie \\n[.$] \{\ +. ie r ds*format!\\$1 .nr ds*format \\n[ds*format!\\$1] +. el .@error \\*[ds@macro]: unrecognized format '\\$1' +.\} +.el .nr ds*format 0 +.if \\n[D]>2 .tm set format=\\n[ds*format] +.\" fill or not to fill, that is the... +.nr ds*fill 0 +.if \\n[.$]>1 \{\ +. ie r ds*fill!\\$2 .nr ds*fill \\n[ds*fill!\\$2] +. el .@error \\*[ds@macro]: unrecognized fill style '\\$2' +.\} +.if \\n[D]>2 .tm set fill=\\n[ds*fill] +.nr ds*rindent 0 +.if \\n[.$]>2 .nr ds*rindent \\$3 +.if \\n[D]>2 .tm set indent=\\n[ds*rindent] +.. +.\"----------------------------- +.\" .ds@set-new-ev previous-line-length +.de ds@set-new-ev +.ll \\$1u +.lt \\$1u +.if \\n[ds*rindent] \{\ +. ll -\\n[ds*rindent]n +. lt -\\n[ds*rindent]n +.\} +.if \\n[ds*wide] \{\ +. ll \\n[@ll]u +. lt \\n[@ll]u +.\} +.\" +.ie \\n[ds*fill] 'fi +.el 'nf +.. +.\"-------------------------------------------------------- +.nr ds*format 0\" dummy value for .En/.EQ +.nr ds*format! 0\" no indent +.nr ds*format!0 0\" no indent +.nr ds*format!L 0\" no indent +.nr ds*format!I 1\" indent +.nr ds*format!1 1\" indent +.nr ds*format!C 2\" center each line +.nr ds*format!2 2\" center each line +.nr ds*format!CB 3\" center as block +.nr ds*format!3 3\" center as block +.nr ds*format!R 4\" right justify each line +.nr ds*format!4 4\" right justify each line +.nr ds*format!RB 5\" right justify as block +.nr ds*format!5 5\" right justify as block +.\"--------------- +.nr ds*fill! 0\" no fill +.nr ds*fill!N 0\" no fill +.nr ds*fill!0 0\" no fill +.nr ds*fill!F 1\" fill on +.nr ds*fill!1 1\" fill on +.\"-------------------------------------------- +.\" static display start +.\" nested DS/DE is allowed. No limit on depth. +.de DS +.ds ds@macro \\$0 +.br +.nr ds*lvl +1 +.ds@set-format \\$@ +.\" +.nr ds*old-ll \\n[.l] +.nr ds*old-in \\n[.i] +.misc@push ds-in \\n[ds*old-in] \" Saving indent and line length of +.misc@push ds-ll \\n[ds*old-ll] \" the text outside the display. +.misc@push ds-form \\n[ds*format] +.nr ds*i \\n[.i] +.nr ds*ftmp \\n[.f] +.misc@ev-keep ds*ev!\\n+[ds*snr] +.ft \\n[ds*ftmp] +.\" +.init@reset +.\" indent in a diversion doesn't seem like a good idea. +'in 0 +.di ds*div!\\n[ds*snr] +.\" +.nr ds*div-ll \\n[ds*old-ll] +.if \\n[ds*format]=1 .nr ds*div-ll -\\n[Si]n +.ds@set-new-ev \\n[ds*div-ll] +.nr df*float 0 +.. +.\"-------------------------------------------- +.de ds@end +.\" We hard-code the DE macro name here since this macro is internal but +.\" only DE calls it. We also know we're closing a static keep because +.\" df@end is called otherwise. See `DE`. +.if \\n-[ds*lvl]<0 .@error DE: no corresponding DS +.br +.di +.\" ********** +.nr ds*width \\n[dl] +.nr ds*height \\n[dn] +.misc@pop-nr ds-ll ds*old-ll \" Restore indent and +.misc@pop-nr ds-in ds*old-in \" line length +.misc@pop-nr ds-form ds*format +.\" +.\" ********** +'nf +.\" calculate needed space +.nr ds*need \\n[ds*height] +.nr ds*i \\n[pg*foot-trap]-\\n[pg*header-size]u-\\n[pg*extra-header-size]u +.if (\\n[ds*height]>\\n[ds*i])&(\\n[.t]<(\\n[ds*i]/2)) .nr ds*need \\n[.t]u+1v +.if (\\n[ds*height]<\\n[ds*i])&(\\n[.t]<(\\n[ds*height])) .nr ds*need \\n[.t]u+1v +.\" Eject page if display will fit one page and +.\" there are less than half of the page left. +.if \\n[ds*need] .ne \\n[ds*need]u +.\" +.\" Print static display +.nr ds*i \\n[Lsp] +.if r Dsp .nr ds*i \\n[Dsp] +.\" +.if \\n[Ds] .SP \\n[ds*i]u \" Space before display +.\" check if pending equation label +.eq@check \\n[ds*need] +'in \\n[ds*old-in]u +.if \\n[ds*format]=1 'in \\n[ds*old-in]u+\\n[Si]n +.if \\n[ds*format]>=2 'in 0 +.if \\n[ds*format]=2 'ce 9999 +.if \\n[ds*format]=3 'in (u;(\\n[.l]-\\n[ds*width])/2) +.if \\n[ds*format]=4 'rj 9999 +.if \\n[ds*format]=5 'in (u;\\n[.l]-\\n[ds*width]) +.\" ********** +.\" +.ds*div!\\n[ds*snr] +.if \\n[Ds] .SP \\n[ds*i]u \" Space after display +.\" +.if \\n[ds*format]=2 'ce 0 +.if \\n[ds*format]=4 'rj 0 +.rm ds*div!\\n[ds*snr] +.nr ds*snr -1 +.nr par@suppress-indentation 1 \" no indentation after displays +.ev +.. +.\"########### module list ################### +.\" .LI text-indent mark-indent pad type [mark [LI-space [LB-space] ] ] +.\" +.nr li*tind 0 +.nr li*mind 0 +.nr li*pad 0 +.nr li*type 0 +.ds li*mark 0 +.nr li*li-spc 0 +.nr li*lvl 0 1 +.aln :g li*lvl +.nr li*cur-vpos 0 +.\"-------------------------- +.\" the major list-begin macro. +.\" If type == -1 a 'break' will occur. +.de LB +.if \\n[.$]<4 .@error \\$0: expected at least 4 arguments, got \\n[.$] +.misc@push cind \\n[.i] +.misc@push tind \\n[li*tind] +.misc@push mind \\n[li*mind] +.misc@push pad \\n[li*pad] +.misc@push type \\n[li*type] +.misc@push li-spc \\n[li*li-spc] +.ds li*mark-list!\\n[li*lvl] \\*[li*mark] +.nr li*lvl +1 +.\" +.nr li*tind (n;0\\$1)\" text-indent +.nr li*mind (n;0\\$2)\" mark-indent +.nr li*pad (n;0\\$3)\" pad +.nr li*type 0\\$4\" type +.ds li*mark \\$5\" mark +.ie !'\\$6'' .nr li*li-spc \\$6\" LI-space +.el .nr li*li-spc 1 +.ie !'\\$7'' .nr li*lb-spc \\$7\" LB-space +.el .nr li*lb-spc 0 +.\" init listcounter +.nr li*cnt!\\n[li*lvl] 0 1 +.\" assign format +.af li*cnt!\\n[li*lvl] 1 +.if \\n[li*type] .if !'\\*[li*mark]'' .af li*cnt!\\n[li*lvl] \\*[li*mark] +.\" +.if \\n[li*lb-spc] .SP (u;\\n[li*lb-spc]*\\n[Lsp]) +.in +\\n[li*tind]u +.. +.\"--------------- +.de LI +.if \\n[li*lvl]<1 .@error \\$0: no list active; call AL, BL, BVL, ... \ +first +.if \\n[li*li-spc]&(\\n[li*lvl]<=\\n[Ls]) \ +. SP (u;\\n[li*li-spc]*\\n[Lsp]) +.ne 2v +.\" +.ds li*c-mark \\*[li*mark] +.nr li*cnt!\\n[li*lvl] +1 +.if \\n[li*type]=1 .ds li*c-mark \\n[li*cnt!\\n[li*lvl]]. +.if \\n[li*type]=2 .ds li*c-mark \\n[li*cnt!\\n[li*lvl]]) +.if \\n[li*type]=3 .ds li*c-mark (\\n[li*cnt!\\n[li*lvl]]) +.if \\n[li*type]=4 .ds li*c-mark [\\n[li*cnt!\\n[li*lvl]]] +.if \\n[li*type]=5 .ds li*c-mark <\\n[li*cnt!\\n[li*lvl]]> +.if \\n[li*type]=6 .ds li*c-mark {\\n[li*cnt!\\n[li*lvl]]} +.if \\n[.$]=1 .ds li*c-mark \\$1 +.if \\n[.$]=2 \{\ +. ie (\\$2=2):(\\n[Limsp]=0) .ds li*c-mark \\$1\\*[li*c-mark] +. el .ds li*c-mark \\$1\ \\*[li*c-mark] +.\} +.\" +.\" determine where the text begins +.nr li*text-begin \\n[li*tind]>?\w@\\*[li*c-mark]\ @ +.\" +.\" determine where the mark begin +.ie !\\n[li*pad] .nr li*in \\n[li*mind] +.el .nr li*in \\n[li*text-begin]-\\n[li*pad]-\w@\\*[li*c-mark]@ +.if !\\n[li*in] .nr li*in 0 +.\" +.ti -\\n[li*tind]u +.\" no indentation if hanging indent +.if (\w@\\*[li*c-mark]@=0)&((\\n[.$]=0):(\w@\\$1@=0)) .nr li*text-begin 0 +\Z'\&\h'\\n[li*in]u'\\*[li*c-mark]'\h'\\n[li*text-begin]u'\&\c +.if \\n[li*type]=-1 .br +.. +.\" +.\"------------- +.de li@pop +.nr li*lvl -1 +.misc@pop-nr cind li*tmp +.in \\n[li*tmp]u +.misc@pop-nr tind li*tind +.misc@pop-nr mind li*mind +.misc@pop-nr pad li*pad +.misc@pop-nr type li*type +.misc@pop-nr li-spc li*li-spc +.ds li*mark \\*[li*mark-list!\\n[li*lvl]] +.. +.de LE +.if \\n[li*lvl]<1 .@error \\$0: no list active; call AL, BL, BVL, ... \ +and LI first +.li@pop +.if '\\$1'1' .SP \\n[Lsp]u +.nr par@suppress-indentation 1 \" no indentation after lists +.. +.\"------------- +.\" list status clear. +.\" terminate all lists to level i +.de LC +.nr li*i 0 +.if \\n[.$] \{\ +. ie \B'\\$1' .nr li*i \\$1 +. el .@error \\$0: argument not numeric: '\\n[li*i]' +.\} +.if \\n[li*i]>\\n[li*lvl] .@error \\$0 invalid argument: \\n[li*i] \ +exceeds depth of nested lists (\\n[li*lvl]) +.while \\n[li*lvl]>\\n[li*i] .li@pop +.nr par@suppress-indentation 1 \" no indentation after lists +.. +.\"------------- +.de AL +.if \\n[.$]>3 .@warning \\$0: ignoring excess arguments +.if \\n[D]>2 .tm AL $* +.ie \\n[.$]<=1 .LB \\n[Li] 0 2 1 "\\$1" +.el \{\ +. ie \\n[.$]=2 .LB 0\\$2 0 2 1 "\\$1" +. el \{\ +. ie !'\\$2'' .LB \\$2 0 2 1 "\\$1" 0 1 +. el .LB \\n[Li] 0 2 1 "\\$1" 0 1 +. \} +.\} +.. +.de ML +.if \\n[.$]>3 .@warning \\$0: ignoring excess arguments +.if \\n[D]>2 .tm ML $* +.nr li*ml-width \w@\\$1@u+1n +.if \\n[.$]<2 .LB \\n[li*ml-width]u 0 1 0 "\\$1" +.if \\n[.$]=2 .LB 0\\$2 0 1 0 "\\$1" +.if \\n[.$]=3 \{\ +. ie '\\$2'' .LB \\n[li*ml-width]u 0 1 0 "\\$1" 0 1 +. el .LB \\n[Li] 0 1 0 "\\$1" 0 1 +.\} +.. +.de VL +.if \\n[D]>2 .tm VL $* +.if \\n[.$]>3 .@warning \\$0: ignoring excess arguments +.if \\n[.$]<1 .@error \\$0: expected 1 to 3 arguments, got \\n[.$] +.ie \\n[.$]<3 .LB 0\\$1 0\\$2 0 0 +.el .LB 0\\$1 0\\$2 0 0 \& 0 1 +.. +.de BL +.if \\n[D]>2 .tm BL $* +.if \\n[.$]>2 .@warning \\$0: ignoring excess arguments +.if \\n[.$]<1 .LB \\n[Pi] 0 1 0 \\*[BU] +.if \\n[.$]=1 .LB 0\\$1 0 1 0 \\*[BU] +.if \\n[.$]=2 \{\ +. ie '\\$1'' .LB \\n[Pi] 0 1 0 \\*[BU] 0 1 +. el .LB 0\\$1 0 1 0 \\*[BU] 0 1 +.\} +.. +.de DL +.if \\n[D]>2 .tm DL $* +.if \\n[.$]>2 .@warning \\$0: ignoring excess arguments +.if \\n[.$]<1 .LB \\n[Pi] 0 1 0 \[em] +.if \\n[.$]=1 .LB 0\\$1 0 1 0 \[em] +.if \\n[.$]=2 \{\ +. ie '\\$1'' .LB \\n[Pi] 0 1 0 \[em] 0 1 +. el .LB 0\\$1 0 1 0 \[em] 0 1 +.\} +.. +.de RL +.if \\n[D]>2 .tm RL $* +.if \\n[.$]>2 .@warning \\$0: ignoring excess arguments +.if \\n[.$]<1 .LB 6 0 2 4 +.if \\n[.$]=1 .LB 0\\$1 0 2 4 +.if \\n[.$]=2 \{\ +. ie '\\$1'' .LB 6 0 2 4 1 0 1 +. el .LB 0\\$1 0 2 4 1 0 1 +.\} +.. +.\" Broken Variable List. As .VL but text begin on the next line +.de BVL +.if \\n[D]>2 .tm BVL $* +.if \\n[.$]>3 .@warning \\$0: ignoring excess arguments +.if \\n[.$]<1 .@error \\$0: expected 1 to 3 arguments, got \\n[.$] +.ie \\n[.$]<3 .LB 0\\$1 0\\$2 0 -1 +.el .LB 0\\$1 0\\$2 0 -1 \& 0 1 +.. +.\" ####### module tbl ####################################### +.\" This module is copied from groff_ms and modified for mm. +.\" Yes, it does not resemble the original anymore :-). +.\" Don't know if I missed something important. +.\" Groff_ms is written by James Clark. +.nr tbl*have-header 0 +.nr tbl*header-written 0 +.de TS +.br +.if ''\\n[.z]' .SP +.if '\\$1'H' .di tbl*header-div +.. +.de tbl@top-hook +.if \\n[tbl*have-header] \{\ +. ie \\n[.t]-\\n[tbl*header-ht]-1v .tbl@print-header +. el .sp \\n[.t]u +.\} +.. +.de tbl@bottom-hook +.if \\n[tbl*have-header] \{\ +. nr T. 1 +.\" draw bottom and side lines of boxed tables. +. T# +.\} +.nr tbl*header-written 0 +.. +.de tbl@print-header +.ev tbl*ev +'nf +.tbl*header-div +.ev +.mk #T +.nr tbl*header-written 1 +.. +.de TH +.ie '\\n[.z]'tbl*header-div' \{\ +. nr T. 0 +. T# +. br +. di +. nr tbl*header-ht \\n[dn] +. ne \\n[dn]u+1v +. nr tbl*have-header 1 +. ie '\\$1'N' .if !\\n[tbl*header-written] .tbl@print-header +. el .tbl@print-header +.\} +.el .@error \\$0: .TH without .TS H" +.. +.de TE +.ie '\\n[.z]'tbl*header-div' .@error \\$0: .TS H but no .TH before .TE +.el \{\ +. nr tbl*have-header 0 +.\} +.\" reset tabs +.TAB +.. +.de T& +.. +.\" ####### module pic ####################################### +.de PS +.if !\\n[.$]=2 \{\ +. ds pic*msg \\$0: expected 2 arguments, got \\n[.$]\" +. as pic*msg ; not preprocessed with pic?\" +. @error \\*[pic*msg] +.\} +.br +.SP .5 +.if r ds*format .if !\\n[ds*lvl] .ne (u;\\$1)+1v +.. +.de PY +.init@reset +.. +.de PE +.PY +.SP .5 +.. +.\" ####### module eq ####################################### +.\" +.nr eq*number 0 1 +.ds eq*label +.de EQ +.ds eq*label "\\$1 +.. +.de eq@check +.if !'\\*[eq*label]'' \{\ +. mk +. \" space down to middle of equation +' sp (u;(\\$1-1v)/2) +. ie (\\n[Eq]%2) \{\ +. \" label to the left +\h'|0'\\*[eq*label] +. \} +. el \{\ +. \" label to the right, possibly compensating for +. \" indented display +. ie \\n[ds*format]=1 \ +\h'|\\n[.l]u-\w'\\*[eq*label]'u+\\n[Si]n'\\*[eq*label] +. el \h'|\\n[.l]u-\w'\\*[eq*label]'u'\\*[eq*label] +. \} +. rt +.\} +.ds eq*label +.. +.de EN +.. +.\"########### module toc ################### +.\" table of contents +.nr toc*slevel 1 +.nr toc*spacing \n[Lsp]u +.nr toc*tlevel 2 +.nr toc*tab 0 +.\"----------- +.\" Table of contents with friends (module lix) +.de TC +.br +.\" print any pending displays and references +.df@print-float 3 +.if \\n[ref*flag] .RP 0 1 +.\" +.if \w@\\$1@>0 .nr toc*slevel \\$1 +.if \w@\\$2@>0 .nr toc*spacing (u;\\$2*\\n[Lsp]) +.if \w@\\$3@>0 .nr toc*tlevel \\$3 +.if \w@\\$4@>0 .nr toc*tab \\$4 +.if \\n[pg*cols-per-page]>1 .1C +.ds H1txt \\*[Licon] +.ds Tcst co +.pg@clear-hd +.EF "" +.OF "" +.pg@next-page +.\"------------- +.if d Ci .toc@read-Ci \\*[Ci] +.nf +.in 0 +.ie \\n[Oc] .hd@set-page 1 +.el \{\ +. nr toc*pn 1 1 +. af toc*pn i +. aln ;g toc*pn +. PF "''\\\\\\\\n[toc*pn]''" +. am pg@header +. nr toc*pn +1 +\\.. +.\} +.nr toc*i 4 1 +.while \\n+[toc*i]<10 \{\ +. if !'\\$\\n[toc*i]'' \{\ +. ce +\\$\\n[toc*i] +. br +. \} +.\} +.if \\n[.$]<=4 .if d TX .TX +.ie d TY .if \\n[.$]<=4 .TY +.el \{\ +. ce +\\*[Licon] +. br +. SP 3 +.\} +.if d toc*list .toc*list +.br +.\" print LIST OF XXX +.if d lix*dsfg .lix@print-ds fg FG "\\*[Lf]" \\n[.$] +.if d lix*dstb .lix@print-ds tb TB "\\*[Lt]" \\n[.$] +.if d lix*dsec .lix@print-ds ec EC "\\*[Le]" \\n[.$] +.if d lix*dsex .lix@print-ds ex EX "\\*[Lx]" \\n[.$] +.. +.\"----------- +.\" .toc@read-Ci lev1 lev2 lev3 lev4 ... lev7 +.de toc@read-Ci +.nr toc*i 0 1 +.while \\n+[toc*i]<15 \{\ +. nr toc*hl!\\n[toc*i] \\$[\\n[toc*i]] +.\} +.. +.\"----------- +.de toc@entry +.ie \\n[Sectp] \{\ +. toc@save \\$1 "\\*[hd*mark]" "\\$2" \\*[hd*sect-pg] +.\} +.el .toc@save \\$1 "\\*[hd*mark]" "\\$2" \\n[P] +.. +.als )E toc@entry +.\"----------- +.de toc@save +.\" collect maxsize of mark if string Ci don't exist. +.if !d Ci \{\ +. if !r toc*hl!\\$1 .nr toc*hl!\\$1 0 +. if \\n[toc*hl!\\$1]<=\w@\\$2@ \{\ +. nr toc*hl!\\$1 \w@\\$2@u +. \} +.\} +.am toc*list +.\" .toc@set level headernumber text pagenumber +.toc@set \\$1 "\\$2" "\\$3" \\$4 +\\.. +.. +.\"----------- +.\" level mark text pagenumber +.de toc@set +.if \\$1<=\\n[toc*slevel] .SP \\n[toc*spacing]u +.na +.fi +.nr toc*ind 0 +.nr toc*i 0 1 +.ie d Ci \{\ +. nr toc*ind +\\n[toc*hl!\\$1]u +.\} +.el \{\ +. while \\n+[toc*i]<\\$1 \{\ +. nr toc*ind +\\n[toc*hl!\\n[toc*i]]u +. \} +.\} +.nr toc*text \\n[toc*ind]u+\\n[toc*hl!\\$1]u +.in \\n[toc*text]u +.ti -\\n[toc*hl!\\$1]u +.\" +.\" length of headernumber space +.nr toc*i \\n[toc*hl!\\$1]-\w@\\$2@ +.\" +.ll \\n[@ll]u-\w@\\$4@u-2m +.ne 2v +.\" ragged right --------------------------------- +.ie \\$1>\\n[toc*tlevel] \{\ +\\$2 +. sp -1 +\\$3\ \ \ \\$4 +. br +.\} +.el \{\ +. \" unnumbered heading -------------------- +. ie '\\$2'' \{\ +. in \\n[toc*ind]u +\\$3\h'1m' +. \} +. \" normal heading ------------------------ +. el \{\ +\\$2 +. sp -1 +\\$3\h'1m' +. \} +. ll \\n[@ll]u +. sp -1 +. nr toc*sep (u;\\n[.l]-\\n[.n]-\\n[.i]-\w@\\$4@)-1m +\h'|\\n[.n]u'\l'\\n[toc*sep]u.'\h'1m'\\$4 +.\} +.ll \\n[@ll]u +.. +.\"########################### module lix ############################ +.\" LIST OF figures, tables, exhibits and equations +.nr lix*fg-nr 0 1 +.nr lix*tb-nr 0 1 +.nr lix*ec-nr 0 1 +.nr lix*ex-nr 0 1 +.aln Fg lix*fg-nr +.aln Tb lix*tb-nr +.aln Ec lix*ec-nr +.aln Ex lix*ex-nr +.\"------------ +.de FG +.lix@print-line fg Lf \\n+[lix*fg-nr] "\\$1" "\\$2" "\\$3" "\\$4" +.. +.de TB +.lix@print-line tb Lt \\n+[lix*tb-nr] "\\$1" "\\$2" "\\$3" "\\$4" +.. +.de EC +.lix@print-line ec Le \\n+[lix*ec-nr] "\\$1" "\\$2" "\\$3" "\\$4" +.. +.de EX +.lix@print-line ex Lx \\n+[lix*ex-nr] "\\$1" "\\$2" "\\$3" "\\$4" +.. +.\"------------ +.\" print line with 'figure' in the text +.\" type stringvar number text override flag refname +.de lix@print-line +.ds lix*text "\\$4 +.\" +.ie \\n[Sectf] .ds lix*numb \\n[H1]-\\$3 +.el .ds lix*numb \\$3 +.\" +.ie !\\n[Of] .ds lix*ds-form .\ \ \" +.el .ds lix*ds-form "\ \[em]\ \" +.nr lix*in \\n[.i] +.ds lix*label \\*[Li\\$1]\ \\*[lix*numb]\\*[lix*ds-form] +.if !'\\$5'' \{\ +. if !0\\$6 .ds lix*label \\*[Li\\$1]\ \\$5\\*[lix*numb]\\*[lix*ds-form] +. if 0\\$6=1 .ds lix*label \\*[Li\\$1]\ \\*[lix*numb]\\$5\\*[lix*ds-form] +. if 0\\$6=2 .ds lix*label \\*[Li\\$1]\ \\$5\\*[lix*ds-form] +.\} +.\" print line if not between DS/DE +.ie (\\n[ds*lvl]<1)&(\\n[df*float]=0) \{\ +. lix@print-text "\\*[lix*label]" "\\*[lix*text]" \\$1 \\$2 \\$7 +.\} +.el \{\ +. lix@embedded-text "\\*[lix*label]" "\\*[lix*text]" \\$1 \\$2 \\$7 +.\} +.\" +.. +.\"----------- +.\" label text type stringvar refname +.de lix@print-text +.ie \\n[Sectp] .ds lix*pgnr \\*[hd*sect-pg] +.el .ds lix*pgnr \\n[%] +.SP \\n[Lsp]u +.misc@ev-keep lix +.init@reset +.br +.ie (\w@\\$1\\$2@)>(\\n[.l]-\\n[.i]) \{\ +. in +\w@\\$1@u +. ti 0 +.\} +.el .ce 1 +\f3\\$1\fP\\$2 +.br +.ev +.\" save line for LIST OF XXX, wth is the width of the label +.if !r lix*wth\\$3 .nr lix*wth\\$3 0 +.\" find the maximum width +.if \w@\\*[lix*label]@>\\n[lix*wth\\$3] .nr lix*wth\\$3 \w@\\*[lix*label]@ +.if \\n[\\$4] .lix@ds-save \\$3 \\*[lix*pgnr] "\\*[lix*text]" "\\*[lix*label]" +.\" save reference to the figure +.if !'\\$5'' .SETR \\$5 \\*[lix*numb] +.. +.\" hide printout until diversion is evaluated +.de lix@embedded-text +\!.ie \\\\n[Sectp] .ds lix*pgnr \\\\*[hd*sect-pg] +\!.el .ds lix*pgnr \\\\n[%] +\!.SP \\\\n[Lsp]u +\!.misc@ev-keep lix +\!.ll \\n[.l]u +\!.init@reset +\!.fi +\!.ie (\w@\\$1\\$2@)>(\\\\n[.l]-\\\\n[.i]) \{\ +. in +\w@\\$1@u +\!. ti 0 +\!\f3\\$1\fP\\$2 +\!.\} +\!.el \{\ +. ce 1 +\!\f3\\$1\fP\\$2 +\!.\} +\!.br +\!.ev +.\" save line for LIST OF XXX, wth is the width of the label +\!.if !r lix*wth\\$3 .nr lix*wth\\$3 0 +.\" find the maximum width +\!.if \w@\\*[lix*label]@>\\\\n[lix*wth\\$3] .nr lix*wth\\$3 \w@\\*[lix*label]@ +\!.if \\\\n[\\$4] .lix@ds-save \\$3 \\\\*[lix*pgnr] "\\*[lix*text]" "\\*[lix*label]" +.\" save reference to the figure +\!.if !'\\$5'' .SETR \\$5 \\*[lix*numb] +.. +.\"------------ +.\" print complete list of XXXX +.de lix@print-ds +.\" arg: fg,tb,ec,ex text +.ds H1txt \\$3 +.ds Tcst \\$1 +.if !\\n[Cp] .pg@next-page +.\" print LIST OF XXXX +.\" execute user-defined macros +.if \\$4<=4 .if d TX\\$2 .TX\\$2 +.ie d TY\\$2 .if \\$4<=4 .TY\\$2 +.el \{\ +. ce +\\$3 +. SP 3 +.\} +.in \\n[lix*wth\\$1]u +.fi +.lix*ds\\$1 +.. +.\"------------ +.\" save line of list in macro +.de lix@ds-save +.\" type pagenumber text +.am lix*ds\\$1 +.lix@dsln \\$1 \\$2 "\\$3" "\\$4" \\$5 +\\.. +.. +.\"------------ +.\" print appended macro +.\" lix@dsln type pagenumber text headernumber +.de lix@dsln +.nr lix*i \\n[lix*wth\\$1]-\w@\\$4@ +.ne 4v +.ll \\n[@ll]u-\w@\\$4@u-\w@\\$2@u-2m +.ti -\\n[lix*wth\\$1]u +\\$4 +.sp -1 +\\$3\h'1m' +.sp -1 +.ll +.nr lix*sep (u;\\n[.l]-\\n[.n]-\\n[.i]-\w@\\$2@)-1m +\h'|\\n[.n]u'\l'\\n[lix*sep]u.'\h'1m'\\$2 +.SP \\n[toc*spacing]u +.. +.\"########################### module fnt ############################ +.\" some font macros. +.\"----------- +.de fnt@switch +.ul 0 +.ds fnt*tmp +.nr fnt*prev \\n[.f] +.nr fnt*i 2 1 +.while \\n+[fnt*i]<=\\n[.$] \{\ +. if \\n[fnt*i]>3 .as fnt*tmp \, +. ie (\\n[fnt*i]%2)=1 .as fnt*tmp \\$1\\$[\\n[fnt*i]] +. el .as fnt*tmp \\$2\\$[\\n[fnt*i]] +. if \\n[fnt*i]<\\n[.$] .as fnt*tmp \/ +.\} +\&\\*[fnt*tmp]\f[\\n[fnt*prev]] +.. +.\"----------- +.de B +.ie \\n[.$] .fnt@switch \f3 \f[\\n[.f]] \\$@ +.el .ft 3 +.. +.de I +.ie \\n[.$] .fnt@switch \f2 \f[\\n[.f]] \\$@ +.el .ft 2 +.. +.de R +.ie \\n[.$] .fnt@switch \f1 \f[\\n[.f]] \\$@ +.el .ft 1 +.. +.de IB +.if \\n[.$] .fnt@switch \f2 \f3 \\$@ +.. +.de BI +.if \\n[.$] .fnt@switch \f3 \f2 \\$@ +.. +.de IR +.if \\n[.$] .fnt@switch \f2 \f1 \\$@ +.. +.de RI +.if \\n[.$] .fnt@switch \f1 \f2 \\$@ +.. +.de RB +.if \\n[.$] .fnt@switch \f1 \f3 \\$@ +.. +.de BR +.if \\n[.$] .fnt@switch \f3 \f1 \\$@ +.. +.\"########################### module box ############################ +.\" draw a box around some text. Text will be kept on the same page. +.\" +.nr box*ll 0 +.\" .B1 and .B2 works like .DS +.de B1 +.if \\n[box*ll] .@error \\$0: cannot nest; missing B2? +.nr box*ll \\n[.l] +.nr box*ind \\n[.i] +.nr box*hyp \\n[.hy] +.nr box*wid \\n[.l]-\\n[.i] +.\" +.\" jump to new environment. +.ev box*ev +.di box*div +.ps \\n[@ps]u +.vs \\n[@vs]u +.in 1n +.ll (u;\\n[box*wid]-1n) +.hy \\n[.hy] +.. +.de B2 +.if !\\n[box*ll] .@error \\$0: no corresponding B1 +.br +.di +.nr box*height \\n[dn] +.ne \\n[dn]u+1v +.ll \\n[box*ll]u +.in \\n[box*ind]u +.nr box*y-pos \\n[.d]u +.nf +.box*div +.fi +\v'-1v+.25m'\ +\D'l \\n[box*wid]u 0'\ +\D'l 0 -\\n[box*height]u'\ +\D'l -\\n[box*wid]u 0'\ +\D'l 0 \\n[box*height]u' +.br +.sp -1 +.ev +.sp .20v +.in \\n[box*ind]u +.ll \\n[box*ll]u +.rm box*div +.nr box*ll 0 +.. +.\"########################### module ref ############################ +.mso refer-mm.tmac +.nr ref*nr 0 1 +.aln :R ref*nr +.nr ref*nr-width 5n +.nr ref*flag 0 \" for end-of-text +.ds Rf \v'-.4m'\s-3[\\n+[ref*nr]]\s0\v'.4m' +.\" +.\" start reference +.\"------------ +.de RS +.if !''\\$1' .ds \\$1 \v'-.4m'\s-3[\\n[ref*nr]]\s0\v'.4m' +.nr ref*flag 1 +.am ref*mac +.ref@start-print \\n[ref*nr]. +\\.. +.eo +.am ref*mac RF +.. +.\"------------ +.de RF +.ec +.am ref*mac +.ref@stop-print +\\.. +.. +.\"------------ +.de ref@start-print +.di ref*div +.in \\n[ref*nr-width]u +.ti -(\w@\\$1@u+1n) +\\$1 +.sp -1 +.. +.de ref@stop-print +.br +.di +.ne \\n[dn]u +.ev ref*ev2 +.nf +.ref*div +.ev +.rm ref*div +.if \\n[Ls] .SP \\n[Lsp]u +.. +.\"----------- +.de RP +.if !d ref*mac \{\ +. @warning \\$0: ignoring; no references defined +. return +.\} +.ie !''\\$2' .nr ref*i 0\\$2 +.el .nr ref*i \\n[Rpe] +.if \\n[ref*i]<2 .SK +.SP 2 +.ref@print-refs +.if 0\\$1<1 .nr ref*nr 0 1 +.if ((\\n[ref*i]=0):(\\n[ref*i]=2)) .SK +.. +.\"----------- +.\" called by end-of-text! +.de ref@eot-print +.\".if \\n[ref*flag] \{\ +.if d ref*mac \{\ +. if \\n[D]>2 .tm Print references, called by eot +. nr ref*flag 0 +. br +. misc@ev-keep ne +. init@reset +\c +' bp +. ev +. ref@print-refs +.\} +.. +.\"----------- +.\" prints the references +.de ref@print-refs +.toc@save 1 "" "\\*[Rp]" \\n[%] +.ce +\f2\\*[Rp]\fP +.sp +.nr ref*ll \\n[.l] +.misc@ev-keep ref*ev +.ll \\n[ref*ll]u +.in 0 +.ref*mac +.in +.rm ref*mac +.ev +.nr ref*flag 0 1 +.. +.\"########################### module app ############################ +.\" +.nr app*nr 0 1 +.af app*nr A +.nr app*dnr 0 1 +.nr app*flag 0 +.\"------------ +.\" .APP name text +.\" name == "" -> autonumber +.de APP +.\" .if \\n[.$]<2 .@error "APP: too few arguments" +.app@set-ind "\\$1" +.\" +.ds Tcst ap +.ds Apptxt \\$2 +.\" +.ie \\n[Aph] .app@header \\*[app*ind] "\\$2" +.el .bp +.app@index "\\*[app*ind]" "\\$2" +.. +.\"------------ +.\" .APPSK name pages text +.\" name == "" -> autonumber +.de APPSK +.if \\n[.$]<2 .@error \\$0: expected 2 or 3 arguments, got \\n[.$] +.app@set-ind "\\$1" +.\" +.ds Tcst ap +.ds Apptxt \\$3 +.\" +.ie \\n[Aph] .app@header \\*[app*ind] "\\$3" +.el .bp +.app@index "\\*[app*ind]" "\\$3" +.pn +\\$2 +.. +.\"------------ +.de app@set-ind +.ie \w@\\$1@ .ds app*ind \\$1 +.el \{\ +. if !\\n[app*flag] \{\ +. nr H1 0 1 +. af H1 A +. af H1h A +. nr app*flag 1 +. \} +. ds app*ind \\n+[app*nr] +. nr H1 \\n+[app*dnr] +. nr H1h \\n[app*dnr] +.\} +.\" clear lower counters +.nr app*i 1 1 +.while \\n+[app*i]<15 .nr H\\n[app*i] 0 1 +.. +.\"------------ +.de app@index +.toc@save 1 "" "\\*[App] \\$1: \\$2" \\n[%] +.. +.\"------------ +.\" app@header name text +.de app@header +.bp +.SP (u;\\n[Lsp]*4) +.ce 1 +\s+4\f3\\*[App]\ \\$1\fP\s0 +.SP (u;\\n[Lsp]*2) +.if \w@\\$2@<\\n[.l] .ce 1 +\f3\s+2\\$2\s0\fP +.SP (u;\\n[Lsp]*4) +.. +.als APPX app@header +.\"########################### module cov ############################ +.\" title stored in diversion cov*title +.\" abstract stored in diversion cov*abstract +.\" arg to abstract stored in cov*abs-arg +.\" indent stored in cov*abs-ind +.\" number of authors stored in cov*au +.\" author(s) stored in cov*au!x!y +.\" number of authors' titles stored in cov*at!x +.\" title(s) of author(s) stored in cov*at!x!y +.\" x is the author-index [1-cov*au], y is the argument-index [1-9]. +.\" author(s) firm stored in cov*firm +.\" new date (if .ND exists) is stored in cov*new-date +.\" +.\" +.ds cov*abs-name ABSTRACT +.\" +.nr cov*au 0 +.de TL +.ds @cover \\$0 +.@disable IA IE WA WE LO LT \" can't use with LT and friends +.if \\n[.$]>0 .ds cov*title-charge-case \\$1 +.if \\n[.$]>1 .ds cov*title-file-case \\$2 +.pg@disable-top-trap +.eo +.de cov*title AU +.. +.\"------------------- +.de cov@title-end +.ec +.. +.\"------------------- +.\" .AU [name [initials [loc [dept [ext [room [arg [arg [arg]]]]]]]]] +.de AU +.cov@title-end +.if !\\n[.$] .return \" AU is being used only to end a TL. +.pg@disable-top-trap +.nr cov*au +1 +.nr cov*at!\\n[cov*au] 0 \" no titles for this author yet +.nr cov*i 0 1 +.ds cov*au!\\n[cov*au]!1 +.while \\n[.$]>=\\n+[cov*i] \{\ +. ds cov*au!\\n[cov*au]!\\n[cov*i] "\\$[\\n[cov*i]] +.\} +.if (\\n[.$]>=3)&(\w@\\$3@) \{\ +. if d cov*location-\\$3] \{\ +. ds cov*au!3!\\n[cov*au] \\*[cov*location-\\$3] +. \} +.\} +.. +.\"------------------- +.\" .AT title [...] +.\" Any quantity of titles may be declared. +.\" Must be called directly after the corresponding .AU. +.de AT +.if !\\n[.$] \{\ +. @warning \\$0: ignoring; no arguments specified +. return +.\} +.nr cov*at!\\n[cov*au] \\n[.$] +.nr cov*i 0 1 +.while \\n[.$]>=\\n+[cov*i] \{\ +. ds cov*at!\\n[cov*au]!\\n[cov*i] "\\$[\\n[cov*i]] +.\} +.. +.\"------------------- +.de AF +.cov@title-end +.if !''\\$1' .ds cov*firm \\$1 +.. +.de AST +.ds cov*abs-name "\\$1\" +.. +.de AS +.pg@disable-top-trap +.if d cov*abstract .@error \\$0: only one abstract allowed +.if !''\\n[.z]' .@error \\$0: no diversion allowed (previous .AS?) +.nr cov*abs-arg 0\\$1 +.nr cov*abs-ind (n;0\\$2) +.de cov*abstract AE +.. +.de AE +.. +.\" fixed for 2000, now uses \n[year]. +.de ISODATE +. \" support for ISO-date +. nr cov*mm \\n[mo] +. nr cov*dd \\n[dy] +. af cov*mm 01 +. af cov*dd 01 +. ie '0'\\$1' \{\ +. ds cov*new-date \\*[MO\\n[mo]] \\n[dy], \\n[year] +. \} +. el \{\ +. ds cov*new-date \\n[year]-\\n[cov*mm]-\\n[cov*dd] +. \} +.. +.ISODATE 0 +.als DT cov*new-date +.de ND +.ds cov*new-date \\$1 +.. +.\" switch to ISO-date if register Iso exist: YYYY-MM-DD +.if r Iso .ISODATE 1 +.\"------------------- +.\" Save technical memorandum numbers. +.de TM +.if !\\n[.$] \{\ +. @warning \\$0: ignoring; no arguments specified +. return +.\} +.nr cov*i 0 1 +.while \\n[.$]>=\\n+[cov*i] .ds cov*mt-tm!\\n[cov*i] \\$[\\n[cov*i]] +.nr cov*mt-tm-max \\n[.$] +.. +.\"----------------------- +.\" cover sheet +.\" the file must have the following last lines (somewhere): +.\" .pg@enable-top-trap +.\" .bp 1 +.\" .pg@enable-trap +.ds cov*mt-file!0 0.MT +.ds cov*mt-file!1 0.MT +.ds cov*mt-file!2 0.MT +.ds cov*mt-file!3 0.MT +.ds cov*mt-file!4 4.MT +.ds cov*mt-file!5 5.MT +.ds cov*mt-file!6 0.MT +.\"------------ +.de MT +.ds @cover \\$0 +.@disable COVER IA IE WA WE LO LT +.ie \\n[.$] \{\ +. ie d cov*mt-file!\\$1 .ds cov*mt-type \\$1 +. el .ds cov*mt-type 6 +.\} +.el .ds cov*mt-type 1 +.ds cov*mt-addressee "\\$2 +.ds cov*mt-type-text "\\$1 +.ie d @country .ds cov*str mm/\\*[@country]_ +.el .ds cov*str mm/ +.mso \\*[cov*str]\\*[cov*mt-file!\\*[cov*mt-type]] +.. +.de COVER +.ds @cover \\$0 +.@disable IA IE WA WE LO LT MT +.ie !\\n[.$] .ds cov*cov-type ms +.el .ds cov*cov-type \\$1 +.pg@disable-top-trap +.ie d @country .ds cov*str mm/\\*[@country]_\\*[cov*cov-type].cov +.el .ds cov*str mm/\\*[cov*cov-type].cov +.mso \\*[cov*str] +.. +.\"########################### module qrf ############################ +.\" forward and backward reference thru special files. +.\" +.\" check if stderr-method is wanted +.\" This was needed when I discovered that groff was considered unsafe +.\" and groff -U didn't work. It's a workaround like the original +.\" index method, but not in my view elegant enough. +.\" +.\" init reference system +.de INITR +.ds qrf*file \\$1.qrf +.nr qrf*pass 2 +.if \\n[D]>1 .tm INITR: source \\*[qrf*file] +.ie \\n[Ref] \{\ +. tm .\\\\" Rfilename: \\*[qrf*file] +.\} +.el 'so \\*[qrf*file] +.. +.\"--------------- +.\" set a reference. +.de SETR +.if \\n[.$]<1 .@error \\$0: expected 1 or 2 arguments, got \\n[.$] +.if !r qrf*pass .tm \\$0: no .INITR in this file \" XXX: .@error? +.if \\n[Ref] \{\ +. ds qrf*name qrf*ref-\\$1 +. if \\n[D]>2 .tm SETR: ref \\*[qrf*name]=\\*[hd@mark-trimmed],\\n[%] +. \" heading-number +. ds \\*[qrf*name]-hn \\*[hd@mark-trimmed] +. \" page-number +. ds \\*[qrf*name]-pn \\n[%] +. \" +. if \\n[Ref] \{\ +. tm .ds \\*[qrf*name]-hn \\*[hd@mark-trimmed] +. tm .ds \\*[qrf*name]-pn \\n[%] +. if !'\\$2'' .tm .ds \\*[qrf*name]-xx \\$2 +. \} +.\} +.. +.\"--------------- +.\" get misc-string +.\" If two arg -> set var. arg to misc-string. +.de GETST +.if \\n[.$]<1 .@error \\$0: expected 1 or 2 arguments, got \\n[.$] +.if !r qrf*pass .tm \\$0: no .INITR in this file \" XXX: .@error? +.ds qrf*name qrf*ref-\\$1 +. if d \\*[qrf*name]-xx \{\ +. ie \\n[.$]>1 .ds \\$2 \\*[\\*[qrf*name]-xx] +. el \\*[\\*[qrf*name]-xx]\c +. \} +.\} +.. +.\"--------------- +.\" get header-number +.\" If two arg -> set var. arg to header-number. +.de GETHN +.if \\n[.$]<1 .@error \\$0: expected 1 or 2 arguments, got \\n[.$] +.if !r qrf*pass .tm \\$0: no .INITR in this file \" XXX: .@error? +.ds qrf*name qrf*ref-\\$1 +.if d \\*[qrf*name]-hn \{\ +. ie \\n[.$]>1 .ds \\$2 \\*[\\*[qrf*name]-hn] +. el \\*[\\*[qrf*name]-hn]\c +.\} +.. +.\"--------------- +.\" get page-number +.\" If two arg -> set var. arg to page-number. +.de GETPN +.if \\n[.$]<1 .@error \\$0: expected 1 or 2 arguments, got \\n[.$] +.if !r qrf*pass .tm \\$0: no .INITR in this file \" XXX: .@error? +.ds qrf*name qrf*ref-\\$1 +.if d \\*[qrf*name]-pn \{\ +. ie \\n[.$]>1 .ds \\$2 \\*[\\*[qrf*name]-pn] +. el \\*[\\*[qrf*name]-pn]\c +.\} +.. +.\"---------- +.de GETR +.if \\n[.$]<1 .@error \\$0: expected an argument +.ie !r qrf*pass .tm \\$0: no .INITR in this file" \" XXX: .@error? +.el \{\ +. GETHN \\$1 Qrfh +. GETPN \\$1 Qrfp +\\*[Qrf] +.\} +.. +.\"########################### module ind ############################ +.\"-------------------- +.\" Another type of index system +.\" INITI type filename [macro] +.de INITI +.if \\n[.$]<2 .@error \\$0: expected 2 or 3 arguments, got \\n[.$] +.\" ignore if INITI has already been used +.if d ind*file .@error \\$0: index file name already set +.ds ind*file \\$2.ind +.if \\n[D]>1 .tm INITI: source \\*[ind*file] +.if !d ind*file .@error \\$0: index file name not specified +.ds ind*type \\$1 +.if \\n[Ref] \{\ +. if \\n[.$]>2 .tm .\\\\" Imacro: \\$3 +.\} +.. +.\"--------------- +.de IND +.if !d ind*file .@error \\$0: no active index; call INITI" +.if \\n[D]>1 .tm IND: type=\\*[ind*type] +.ds ind*ref \" empty +.if '\\*[ind*type]'N' .ds ind*ref \\n[%] +.if '\\*[ind*type]'H' .ds ind*ref \\*[hd*mark] +.if '\\*[ind*type]'B' .ds ind*ref \\*[hd*mark]\t\\n[%] +.if '\\*[ind*ref]'' .@abort invalid index type '\\*[ind*type]' +.\" +.ds ind*line \\$1 +.while \\n[.$]>0 \{\ +. shift +. as ind*line \t\\$1 +.\} +.as ind*line \\*[ind*ref] +.if \\n[Ref] .tm .\\\\" IND \\*[ind*line] +.. +.\" print index +.de INDP +.ie \\n[Ref] .tm .\\\\" Index: \\*[ind*file] +.el \{\ +. if !\\n[Cp] .pg@next-page +. \" print INDEX +. \" execute user-defined macros +. if d TXIND .TXIND +. ie d TYIND .TYIND +. el \{\ +. SK +. ce +\\*[Index] +. SP 3 +. 2C +. nf +. \} +' so \\*[ind*file] +. ie d TZIND .TZIND +. el \{\ +. fi +. 1C +. \} +.\} +.rm ind*file +.. +.\"########################### module let ############################ +.\" Letter macros +.\"------------------------ +.\" Formal closing +.de FC +.df@print-float 3 +.ie \\n[.$] .ds let*i \\$1 +.el .ds let*i \\*[Letfc] +.ie d let*type .let@fc_\\*[let*type] "\\*[let*i]" \\$@ +.el .let@mt-closing "\\*[let*i]" \\$@ +.. +.\"------- +.de let@mt-closing +.ne 5v +.in (u;\\n[.l]/2) +.sp +\\$1 +.in +.. +.\"------------------------ +.\" Signature line +.de SG +.ie d let*type .let*lt-sign \\$@ +.el .let*mt-sign \\$@ +.. +.\"------------------------ +.de let*lt-sign +.\" We hard-code the SG macro name here since this macro is internal but +.\" only SG calls it. +.if !d let@sg_\\*[let*type] .@error SG: letter type '\\*[let*type]' \ +undefined +.df@print-float 3 +.nr let*i 0 1 +.nr let*j 0 +.while \\n+[let*i]<=\\n[let*wa-n] \{\ +.if \\n[let*i]=\\n[let*wa-n] .nr let*j 1 +.let@sg_\\*[let*type] "\\*[let*wa-name!\\n[let*i]]" "\\*[let*wa-title!\\n[let*i]]" \\n[let*i] \\n[let*j] \\$@ +.\} +.. +.\"------------------------ +.\" Memorandum signature +.de let*mt-sign +.df@print-float 3 +.ne \\n[cov*au]u*4v +.ie \\n[.$]>1 .nr let*k 1 +.el .nr let*k \\n[cov*au] +.ds let*tmp \" empty +.if d cov*au!\\n[let*k]!3 \{\ +. as let*tmp \\*[cov*au!\\n[let*k]!3]\" +. if d cov*au!\\n[let*k]!4 \ +. as let*tmp -\\*[cov*au!\\n[let*k]!4]-\" +.\} +.nr let*i 0 1 +.while \\n+[let*i]<=\\n[cov*au] \{\ +. if \\n[let*i]>1 .as let*tmp /\" +. if d cov*au!\\n[let*i]!2 .as let*tmp \\*[cov*au!\\n[let*i]!2]\" +.\} +.if !''\\$1' .as let*tmp -\\$1 +.in (u;\\n[.l]/2) +.nf +.nr let*i 0 1 +.while \\n+[let*i]<=\\n[cov*au] \{\ +. ne 3v+\\n[cov*at!\\n[let*i]]v +. SP 3v +. if \\n[let*i]=\\n[let*k] \{\ +\Z'\h'-(u;\\n[.l]/2)'\\*[let*tmp]'\c +. \} +\\*[cov*au!\\n[let*i]!1] +. nr let*j 0 1 +. while \\n+[let*j]<=\\n[cov*at!\\n[let*i]] \{\ +\\*[cov*at!\\n[let*i]!\\n[let*j]] +. \} +.\} +.fi +.in +.. +.\"------------------------ +.\" Approval signature +.de AV +.ne 6v +.nf +.sp +.ie \\n[.$]<2 \\*[Letapp] +.el .sp +.sp 2 +.ie n ______________________________ ______________ +.el \D'l 25m 0'\h'4m'\D'l 12m 0' +\Z'\\$1'\h'29m'\f[\\*[@sdf_font]]\\*[Letdate]\fP +.fi +.. +.\"------------------------ +.\" Letter signature +.de AVL +.ne 6v +.nf +.sp 3 +.ie n ______________________________ +.el \D'l 25m 0' +\Z'\\$1' +.fi +.. +.\"------------------------ +.\" Letter type +.\" let@header is called from the header. It is supposed +.\" to remove the alias itself. +.de LT +.ds @cover LT +.@disable AF AS AE AT AU COVER CS OK TL MT \" same list as LO +.ds let*type BL +.nr Pi 5 +.nr Pt 0 +.if !''\\$1' .ds let*type \\$1 +.if !d let@head_\\*[let*type] .@error \\$0: unknown letter type '\\$1' +.shift +.als let@header let@head_\\*[let*type] +.let@init_\\*[let*type] \\$@ +.if \n[D]>1 .tm Letter type \\*[let*type] +.. +.\"----------- +.\" Blocked letter +.de let@init_BL +.. +.de let@head_BL +.rm let@header +.let@print-head 1 +.. +.de let@sg_BL +.ne 5v +.nf +.in (u;\\n[.l]/2) +.sp 3v +\\$1 +\\$2 +.in +.if \\$4 .sp +.if \w'\\$5'&\\$4 \\$5 +.fi +.. +.als let@fc_BL let@mt-closing +.\"----------- +.\" Semiblocked letter +.de let@init_SB +.nr Pt 1 +.. +.de let@head_SB +.rm let@header +.let@print-head 1 +.. +.als let@sg_SB let@sg_BL +.als let@fc_SB let@mt-closing +.\"----------- +.\" Full-blocked letter +.de let@init_FB +.. +.de let@head_FB +.rm let@header +.let@print-head +.. +.de let@sg_FB +.ne 5v +.nf +.sp 3v +\\$1 +\\$2 +.if \\$4 .sp +.if \w'\\$5'&\\$4 \\$5 +.fi +.. +.de let@fc_FB +.ne 5v +.sp +\\$1 +.. +.\"----------- +.\" Simplified letter +.de let@init_SP +.. +.de let@head_SP +.rm let@header +.let@print-head +.. +.de let@sg_SP +.nf +.if \\$3=1 .sp +.sp +.ie '\\$2'' .misc@toupper "\\$1" +.el .misc@toupper "\\$1, \\$2" +.if \\$4 .sp +.if \w'\\$5'&\\$4 \\$5 +.fi +.. +.de let@fc_SP +.\" Simplified letters have no formal closing, just space before SG. +.sp 2 +.. +.\"-------------------------------------- +.\" Print the letter-head +.de let@print-head +.nf +.sp |11 +.if '1'\\$1' .in (u;\\n[.l]/2) +.\" ---- WA +.ie d let@wa-div .let@wa-div +.el .sp 3 +.\" ---- datum +\\*[cov*new-date] +.sp +.if '1'\\$1' .if !d let*lo-CN .if !d let*lo-RN .sp 2 +.\" ---- Confidential +.if d let*lo-CN \{\ +. ti 0 +. ie !''\\*[let*lo-CN]' \\*[let*lo-CN] +. el \\*[LetCN] +. sp +.\} +.\" ---- Reference +.if d let*lo-RN \{\ +\\*[LetRN] \\*[let*lo-RN] +. sp +.\} +.\" ---- IA +.sp +.in 0 +.nr let*i 0 1 +.while \\n+[let*i]<=\\n[let*ia-n] \{\ +\\*[let*ia-name!\\n[let*i]] +\\*[let*ia-title!\\n[let*i]] +.\} +.if d let@ia-div .let@ia-div +.\" ---- Attention +.if d let*lo-AT \{\ +. sp +\\*[LetAT] \\*[let*lo-AT] +.\} +.\" ---- Salutation +.if !'\\*[let*type]'SP' .if d let*lo-SA \{\ +. sp +. ti 0 +. ie !''\\*[let*lo-SA]' \\*[let*lo-SA] +. el \\*[LetSA] +.\} +.\" ---- Subject +.if d let*lo-SJ \{\ +. ie '\\*[let*type]'SP' \{\ +. sp 2 +. misc@toupper "\\*[let*lo-SJ]" +. sp +. \} +. el \{\ +. sp +. if '\\*[let*type]'SB' .ti +5m +\\*[LetSJ] \f[\\*[@sdf_font]]\\*[let*lo-SJ]\fP +. \} +.\} +.. +.\"------------------- +.\" .IA [name [title]] +.nr let*ia-n 0 1 +.de IA +.if \\n[.$] .ds let*ia-name!\\n+[let*ia-n] \\$1 +.if \\n[.$]>1 .ds let*ia-title!\\n[let*ia-n] \\$2 +.ev let@ev +.init@reset +'nf +.di let@ia-div +.eo +.. +.de IE +.di +.ec +.ev +.. +.\"------------------- +.\" .WA [name [title]] +.nr let*wa-n 0 1 +.de WA +.if \\n[.$] .ds let*wa-name!\\n+[let*wa-n] \\$1 +.if \\n[.$]>1 .ds let*wa-title!\\n[let*wa-n] \\$2 +.ev let@ev +.init@reset +'nf +.di let@wa-div +.it \\n[Letwam] let@wa-drain +.eo +.. +.\"------ +.de let@wa-drain +.it +.di +.di let@wa-junk +.. +.\"------ +.de WE +.it +.ec +.di +.ev +.if d let@wa-junk .rm let@wa-junk +.. +.\"------------------- +.\" Copy to +.de NS +.sp +.ie !''\\$2' .ds let*str \\$1 +.el \{\ +. ie \\n[.$]>0 \{\ +. ie !\w'\\$1' .ds let*str \\*[Letns!\\*[Letnsdef]] +. el \{\ +. ie d Letns!\\$1 .ds let*str \\*[Letns!\\$1] +. el .ds let*str \\*[Letns!copy](\\$1)\\*[Letns!to] +. \} +. \} +. el .ds let*str \\*[Letns!\\*[Letnsdef]] +.\} +.ne 2 +.nf +\\*[let*str] +.. +.de NE +.fi +.. +.\"------------------- +.\" Letter options +.de LO +.ds @cover \\$0 +.@disable AF AS AE AT AU COVER CS OK TL MT \" same list as LT +.if !\\n[.$] \{\ +. @warning \\$0: ignoring; no arguments specified +. return +.\} +.if !d Let\\$1 .@error \\$0: unrecognized option '\\$1' +.ds let*lo-\\$1 \\$2 +.if \n[D]>1 .tm Letter option \\$1 \\$2 +.. +.\"-------------------- +.\" Start with a clean slate +.init@reset +. +.\" Local Variables: +.\" mode: nroff +.\" fill-column: 72 +.\" End: +.\" vim: set filetype=groff textwidth=72: diff --git a/contrib/mm/mm.am b/contrib/mm/mm.am new file mode 100644 index 0000000..191dbce --- /dev/null +++ b/contrib/mm/mm.am @@ -0,0 +1,128 @@ +# Copyright 1991-2020 Free Software Foundation, Inc. +# +# This file is part of groff. +# +# groff is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# groff is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# mm.am +# + +mm_srcdir = $(top_srcdir)/contrib/mm +mm_builddir = $(top_builddir)/contrib/mm + +bin_SCRIPTS += mmroff + +man1_MANS += contrib/mm/mmroff.1 +man7_MANS += \ + contrib/mm/groff_mm.7 \ + contrib/mm/groff_mmse.7 + +# Files installed in $(tmacdir)/mm +MMFILES = \ + contrib/mm/mm/0.MT \ + contrib/mm/mm/5.MT \ + contrib/mm/mm/4.MT \ + contrib/mm/mm/ms.cov \ + contrib/mm/mm/se_ms.cov +mmdir = $(tmacdir)/mm +dist_mm_DATA = $(MMFILES) + +# Files installed in $(tmacdir) +tmacmmdir = $(tmacdir) +dist_tmacmm_DATA = contrib/mm/refer-mm.tmac + +MMEXAMPLEFILES=\ + contrib/mm/examples/letter.mm + +mmexampledir=$(exampledir)/mm +dist_mmexample_DATA = $(MMEXAMPLEFILES) + +EXTRA_DIST += \ + contrib/mm/ChangeLog \ + contrib/mm/examples \ + contrib/mm/Makefile.sim \ + contrib/mm/mm \ + contrib/mm/NOTES \ + contrib/mm/README \ + contrib/mm/groff_mm.7.man \ + contrib/mm/groff_mmse.7.man \ + contrib/mm/mmroff.1.man \ + contrib/mm/mmroff.pl + +mm_TESTS = \ + contrib/mm/tests/LT_SP_AU_without_AT_works.sh \ + contrib/mm/tests/LT_SP_multi-word_LO_SJ_works.sh \ + contrib/mm/tests/MT-1-reports-all-TM-numbers.sh \ + contrib/mm/tests/MT_5_includes_AT_in_SG.sh \ + contrib/mm/tests/P-indentation-works.sh \ + contrib/mm/tests/ms_cover_sheet_robust_to_missing_AF.sh \ + contrib/mm/tests/mse_has-sufficient-footnote-space.sh \ + contrib/mm/tests/place-equation-labels-correctly-in-displays.sh \ + contrib/mm/tests/remove-stale-bib-entry-data.sh \ + contrib/mm/tests/short-pages-do-not-overflow-stack.sh +TESTS += $(mm_TESTS) +EXTRA_DIST += \ + $(mm_TESTS) \ + contrib/mm/tests/artifacts/60657.ref + +mmroff: $(mm_srcdir)/mmroff.pl + $(AM_V_GEN)$(SED) \ + -e 's;[@]PERL[@];$(PERL);' \ + -e 's;[@]VERSION[@];$(VERSION);' \ + $(mm_srcdir)/mmroff.pl \ + >$@.tmp \ + && chmod +x $@.tmp \ + && mv $@.tmp $@ + +# special installation rules for m.tmac, mse.tmac, mmse.tmac, mm.tmac +install-data-local: install_mm +install_mm: + -test -d $(DESTDIR)$(tmacdir) || $(mkinstalldirs) $(DESTDIR)$(tmacdir) + -test -d $(DESTDIR)$(mmdir) || $(mkinstalldirs) $(DESTDIR)$(mmdir) + $(RM) $(DESTDIR)$(tmacdir)/tmac.$(tmac_m_prefix)m + $(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)m.tmac + $(INSTALL_DATA) $(mm_srcdir)/m.tmac \ + $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)m.tmac + $(SED) -e "s;^.mso m.tmac;.mso $(tmac_m_prefix)m.tmac;g" \ + $(mm_srcdir)/mse.tmac > $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mse.tmac + @$(SED) -e "s;^.mso mse.tmac;.mso $(tmac_m_prefix)mse.tmac;g" \ + $(mm_srcdir)/mmse.tmac > $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mmse.tmac + @$(SED) -e "s;^.mso m.tmac;.mso $(tmac_m_prefix)m.tmac;g" \ + $(mm_srcdir)/mm.tmac > $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mm.tmac +uninstall-local: uninstall_mm +uninstall_mm: + if test -d $(DESTDIR)$(mmexampledir); then \ + rmdir $(DESTDIR)$(mmexampledir); \ + fi + $(RM) $(DESTDIR)$(tmacdir)/tmac.$(tmac_m_prefix)m + $(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)m.tmac + $(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mm.tmac + $(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mse.tmac + $(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mmse.tmac + -rmdir $(DESTDIR)$(tmacdir)/mm + +# Special distribution rule: we copy all .tmac files from contrib/mm +dist-hook: dist_mm +dist_mm: + chmod u+w $(distdir)/contrib/mm/ + for i in $(mm_srcdir)/*.tmac; do \ + cp -f $$i $(distdir)/contrib/mm/; \ + done + + +# Local Variables: +# fill-column: 72 +# mode: makefile-automake +# End: +# vim: set autoindent filetype=automake textwidth=72: diff --git a/contrib/mm/mm.tmac b/contrib/mm/mm.tmac new file mode 100644 index 0000000..98e311d --- /dev/null +++ b/contrib/mm/mm.tmac @@ -0,0 +1,4 @@ +.\" -*- nroff -*- +.\" mm.tmac +.\" +.do mso m.tmac diff --git a/contrib/mm/mm/0.MT b/contrib/mm/mm/0.MT new file mode 100644 index 0000000..b06a4b8 --- /dev/null +++ b/contrib/mm/mm/0.MT @@ -0,0 +1,175 @@ +.ig + +Copyright (C) 1991-2020 Free Software Foundation, Inc. +mm is written by Jörgen Hägg <jh@axis.com> + +mm is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +mm is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. + +Please submit bug reports using groff's 'BUG-REPORT' file to +http://savannah.gnu.org/bugs/?group=groff. +.. +. +.\"------------ +.\" Cover sheet. Memorandum type 0-3 and "string". +.\"------------ +.if !r Au .nr Au 1 +.de cov@print-title +.if !d cov*title .@error title not defined; call TL and AU before MT +.MOVE 4.8c 1.5c +.S 8 +subject: +.sp -1.1 +.S +.PGFORM +.ft \\*[@sdf_font] +.ll 9c +.fi +.cov*title +.ft +.ll +.nf +.if d cov*title-charge-case \fBCharge Case \\*[cov*title-charge-case]\fP +.if d cov*title-file-case \fBFile Case \\*[cov*title-file-case]\fP +.fi +.. +.\"------------ +.de cov@print-authors +.\" The following diagnostic might be unreachable. +.if !r cov*au .@error no authors defined; call AU before MT +.MOVE 5.7c 13.3c +.nf +.S 8 +\\$1: +.br +.S +.sp -1 +.in 0.8c +.ft \\*[@sdf_font] +.nr cov*i 0 1 +.while \\n+[cov*i]<=\\n[cov*au] \{\ +. cov@print-au1 \\n[cov*i] 1 +. if \\n[Au] \{\ +. cov@print-au2 \\n[cov*i] 3 4 +. cov@print-au2 \\n[cov*i] 6 5 +. cov@print-au1 \\n[cov*i] 7 +. cov@print-au1 \\n[cov*i] 8 +. cov@print-au1 \\n[cov*i] 9 +. \} +. if \\n[cov*i]<\\n[cov*au] .SP 1 +.\} +.ft +.if r cov*mt-tm-max \{\ +. SP 1 +. nr cov*i 0 1 +. ft \\*[@sdf_font] +TM +. in 1.5c +. sp -1 +. while \\n+[cov*i]<=\\n[cov*mt-tm-max] \\*[cov*mt-tm!\\n[cov*i]] +. in +. ft +.\} +.fi +.PGFORM +.. +.\"------------ +.\" index arg1 +.de cov@print-au1 +.if d cov*au!\\$1!\\$2 \\*[cov*au!\\$1!\\$2] +.. +.\"------------ +.de cov@print-au2 +.\" index arg1 arg2 +.if d cov*au!\\$1!\\$2 \\*[cov*au!\\$1!\\$2] \c +.if \\$3=5 .if d cov*au!\\$1!\\$3 x\c +.if d cov*au!\\$1!\\$3 \\*[cov*au!\\$1!\\$3]\c +.br +.. +.\"------------ +.de cov@print-date +.MOVE 4.8c 13.3c +.S 8 +.nf +\\$1: +.br +.S +.sp -1 +.in 0.8c +\f[\\*[@sdf_font]]\\*[cov*new-date]\fP +.br +.fi +.PGFORM +.. +.\"------------ +.de cov@print-firm +.if d cov*firm \{\ +. MOVE 2.8c 0 17.7c +. S 18 +. rj 1 +\fB\\*[cov*firm]\fP +. S +. PGFORM +.\} +.. +.\"------------ +.de cov@print-abstract +.SP 3 +.if d cov*abstract \{\ +. misc@ev-keep cov*ev +. if \\n[cov*abs-ind]>0 \{\ +. in +\\n[cov*abs-ind]u +. ll -\\n[cov*abs-ind]u +. \} +. ce +\fI\\$1\fP +. SP 1.5 +. fi +. cov*abstract +. br +. ev +.\} +.. +.\"----------------- +.ds cov*mt0-txt!1 MEMORANDUM FOR FILE +.ds cov*mt0-txt!2 PROGRAMMER'S NOTES +.ds cov*mt0-txt!3 ENGINEER'S NOTES +.if d cov*default-firm .if !d cov*firm .ds cov*firm \\*[cov*default-firm] +.\" +.if !d cov*mt-printed \{\ +. cov@print-firm +. cov@print-title subject +. cov@print-date date +. cov@print-authors from +. cov@print-abstract \\*[cov*abs-name] +. SP 3 +. if (\*[cov*mt-type]>=1)&(\*[cov*mt-type]<=3) \{\ +. ce +\fI\*[cov*mt0-txt!\*[cov*mt-type]]\fP +. SP 1.5 +. \} +. if \*[cov*mt-type]=6 \{\ +. ce +\fI\*[cov*mt-type-text]\fP +. SP 1.5 +. \} +. pg@enable-top-trap +. pg@enable-trap +. ds cov*mt-printed +.\} +. +.\" Local Variables: +.\" mode: nroff +.\" fill-column: 72 +.\" End: +.\" vim: set filetype=groff textwidth=72: diff --git a/contrib/mm/mm/4.MT b/contrib/mm/mm/4.MT new file mode 100644 index 0000000..1fd31df --- /dev/null +++ b/contrib/mm/mm/4.MT @@ -0,0 +1,110 @@ +.ig + +Copyright (C) 1991-2020 Free Software Foundation, Inc. +mm is written by Jörgen Hägg <jh@axis.com> + +mm is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +mm is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. + +Please submit bug reports using groff's 'BUG-REPORT' file to +http://savannah.gnu.org/bugs/?group=groff. +.. +. +.\"------------ +.\" Cover sheet. Memorandum type 4 +.\"------------ +.de cov@print-title +.if !d cov*title .@error title not defined; call TL and AU before MT +.MOVE 2.8c +.S +2 +.ad c +.fi +.B +.cov*title +.br +.S +.R +.ad b +.. +.\"------------ +.de cov@print-authors +.\" The following diagnostic might be unreachable. +.if !r cov*au .@error no authors defined; call AU before MT +.SP 0.5 +.I +.S +1 +.nr cov*i 0 1 +.while \\n+[cov*i]<=\\n[cov*au] \{\ +.ce +\\*[cov*au!\\n[cov*i]!1] +.br +.\} +.S +.R +.. +.\"------------ +.de cov@print-firm +.if d cov*firm \{\ +. SP 0.5 +. ce +\\*[cov*firm] +.\} +.. +.\"------------ +.de cov@print-abstract +.SP 2 +.if d cov*abstract \{\ +. misc@ev-keep cov*ev +. init@reset +. if \\n[cov*abs-ind]>0 \{\ +. in +\\n[cov*abs-ind]u +. ll -\\n[cov*abs-ind]u +. \} +. ce +\fI\\*[cov*abs-name]\fP +. SP 2 +. fi +. cov*abstract +. br +. ev +.\} +.. +.\"----------------- +.if d cov*default-firm .if !d cov*firm .ds cov*firm \\*[cov*default-firm] +.if !d cov*mt-printed \{\ +. cov@print-title +. cov@print-authors +. cov@print-firm +. if d cov*abstract \{\ +. if !\n[cov*abs-arg] .cov@print-abstract +. \} +. SP 2 +. nr hd*cur-bline \n[nl] +. ds cov*mt-printed +. pg@enable-top-trap +. pg@enable-trap +.\} +.de CS +.pg@disable-top-trap +.SK +.cov@print-title +.cov@print-authors +.cov@print-firm +.cov@print-abstract +.. +. +.\" Local Variables: +.\" mode: nroff +.\" fill-column: 72 +.\" End: +.\" vim: set filetype=groff textwidth=72: diff --git a/contrib/mm/mm/5.MT b/contrib/mm/mm/5.MT new file mode 100644 index 0000000..10bf410 --- /dev/null +++ b/contrib/mm/mm/5.MT @@ -0,0 +1,61 @@ +.ig + +Copyright (C) 1991-2020 Free Software Foundation, Inc. +mm is written by Jörgen Hägg <jh@axis.com> + +mm is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +mm is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. + +Please submit bug reports using groff's 'BUG-REPORT' file to +http://savannah.gnu.org/bugs/?group=groff. +.. +. +.\"------------ +.\" Cover sheet. Memorandum type 5 +.\"------------ +.de cov@print-title +.if !d cov*title .@error title not defined; call TL and AU before MT +.B +.ll 9c +.fi +.cov*title +.R +.ll +.nf +.if d cov*title-charge-case \fBCharge Case \\*[cov*title-charge-case]\fP +.if d cov*title-file-case \fBFile Case \\*[cov*title-file-case]\fP +.fi +.. +.\"------------ +.de cov@print-date +.rj 1 +\f[\\*[@sdf_font]]\\*[cov*new-date]\fP +.br +.. +.\"------------ +.if !d cov*mt-printed \{\ +. SP 1.9c +. cov@print-title +. SP 1.2c +. cov@print-date +. SP 3 +. pg@enable-top-trap +. pg@enable-trap +. ds cov*mt-printed +.\} +. +.\" Local Variables: +.\" mode: nroff +.\" fill-column: 72 +.\" End: +.\" vim: set filetype=groff textwidth=72: diff --git a/contrib/mm/mm/ms.cov b/contrib/mm/mm/ms.cov new file mode 100644 index 0000000..cea6073 --- /dev/null +++ b/contrib/mm/mm/ms.cov @@ -0,0 +1,121 @@ +.\" -*- nroff -*- +.ig + +Copyright (C) 1991-2020 Free Software Foundation, Inc. +mm is written by Jörgen Hägg <jh@axis.com> + +mm is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +mm is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. + +Please submit bug reports using groff's 'BUG-REPORT' file to +http://savannah.gnu.org/bugs/?group=groff. +.. +. +.\"------------ +.\" Cover sheet. Mostly like ms cover. +.\"------------ +.de cov@print-title +.ie !d cov*title .@error COVEND: no title (TL) defined +.el \{\ +. in 0 +. misc@ev-keep cov*ev +. init@reset +. ad c +. hy 0 +. fi +. B +. cov*title +. br +. ad b +. R +. ev +.\} +.. +.\"------------ +.de cov@print-authors +.ie !\\n[cov*au] .@error COVEND: no authors (AU) defined +.el \{\ +. SP +. nr cov*i 0 1 +. while \\n+[cov*i]<=\\n[cov*au] \{\ +. ds cov*aname \\*[cov*au!\\n[cov*i]!1] +. ce +. nop \fI\\*[cov*aname]\fP +. nr cov*j 0 1 +. while \\n+[cov*j]<=\\n[cov*at!\\n[cov*i]] \{\ +. ds cov*atitle \\*[cov*at!\\n[cov*i]!\\n[cov*j]] +. ce +. nop \s-1\\*[cov*atitle]\s0 +. \} +. rm cov*atitle +. \} +. rm cov*aname +.\} +.. +.\"------------ +.de cov@print-firm +.if d cov*firm \{\ +. SP .5 +. ce +. nop \\*[cov*firm] +.\} +.. +.\"------------ +.de cov@print-abstract +.SP 2 +.if d cov*abstract \{\ +. misc@ev-keep cov*ev +. init@reset +. if \\n[cov*abs-ind]>0 \{\ +. in +\\n[cov*abs-ind]u +. ll -\\n[cov*abs-ind]u +. \} +. ce +\fI\\$1\fP +. SP 1.5 +. fi +. cov*abstract +. br +. ev +.\} +.. +.\"------------ +.de cov@print-date +.SP 2 +\f[\\*[@sdf_font]]\\*[cov*new-date]\fP +.. +.\"----------------- +.de COVEND +.br +.if d cov*default-firm \ +. if !d cov*firm .ds cov*firm \\*[cov*default-firm] +.sp |4.2c +.cov@print-title +.cov@print-authors +.cov@print-firm +.cov@print-abstract "\\*[cov*abs-name]" +.cov@print-date +.pg@enable-top-trap +.bp 1 +.pg@enable-trap +.if r cov*abs-arg .if \\n[cov*abs-arg] \{\ +. cov@print-abstract ABSTRACT +. SP 2 +.\} +.. +. +.\" Local Variables: +.\" mode: nroff +.\" fill-column: 72 +.\" End: +.\" vim: set filetype=groff textwidth=72: diff --git a/contrib/mm/mm/se_ms.cov b/contrib/mm/mm/se_ms.cov new file mode 100644 index 0000000..7ee7ec3 --- /dev/null +++ b/contrib/mm/mm/se_ms.cov @@ -0,0 +1,3 @@ +.\" -*- nroff -*- +.mso mm/ms.cov +.nr cur*abstract-ll 11c diff --git a/contrib/mm/mmroff.1.man b/contrib/mm/mmroff.1.man new file mode 100644 index 0000000..7920c70 --- /dev/null +++ b/contrib/mm/mmroff.1.man @@ -0,0 +1,171 @@ +.TH mmroff @MAN1EXT@ "@MDATE@" "groff @VERSION@" +.SH Name +mmroff \- cross-referencing front end for GNU +.I roff mm +macro package +. +. +.\" ==================================================================== +.\" Legal Terms +.\" ==================================================================== +.\" +.\" Copyright (C) 1989-2023 Free Software Foundation, Inc. +.\" +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of +.\" this manual under the conditions for verbatim copying, provided that +.\" the entire resulting derived work is distributed under the terms of +.\" a permission notice identical to this one. +.\" +.\" Permission is granted to copy and distribute translations of this +.\" manual into another language, under the above conditions for +.\" modified versions, except that this permission notice may be +.\" included in translations approved by the Free Software Foundation +.\" instead of in the original English. +. +. +.\" Save and disable compatibility mode (for, e.g., Solaris 10/11). +.do nr *groff_mmroff_1_man_C \n[.cp] +.cp 0 +. +.\" Define fallback for groff 1.23's MR macro if the system lacks it. +.nr do-fallback 0 +.if !\n(.f .nr do-fallback 1 \" mandoc +.if \n(.g .if !d MR .nr do-fallback 1 \" older groff +.if !\n(.g .nr do-fallback 1 \" non-groff *roff +.if \n[do-fallback] \{\ +. de MR +. ie \\n(.$=1 \ +. I \%\\$1 +. el \ +. IR \%\\$1 (\\$2)\\$3 +. . +.\} +.rr do-fallback +. +. +.\" ==================================================================== +.SH Synopsis +.\" ==================================================================== +. +.SY mmroff +.RB [ \-x ] +.IR groff-argument \~.\|.\|. +.YS +. +. +.SY mmroff +.B \-\-help +.YS +. +. +.SY mmroff +.B \-\-version +.YS +. +. +.\" ==================================================================== +.SH Description +.\" ==================================================================== +. +.I mmroff +is a simple wrapper for +.IR groff , +used to expand cross references in +.IR m@TMAC_M_PREFIX@m ; +see +.MR groff_mm @MAN7EXT@ . +. +It runs +.I groff +with the +.B \-mm +option twice, +first with +.B \-z +and +.B \-rRef=1 +to populate cross-reference and index files with their corresponding +entries, +and then again to produce the document. +. +It also handles the inclusion of PostScript images with the +.B PIC +macro. +. +Documents that do not use these features of +.I "groff mm" +(the +.BR INITI , +.BR IND , +.BR INDP , +.BR INITR , +.BR SETR , +.BR GETHN , +.BR GETPN , +.BR GETR , +.BR GETST , +and +.B PIC +macros) +do not require +.IR \%mmroff . +. +. +.\" ==================================================================== +.SH Options +.\" ==================================================================== +. +.B \-\-help +displays +a usage message, +while +.B \-\-version +shows version information; +both exit afterward. +. +. +.TP +.B \-x +Create or update the cross-reference file and exit. +. +. +.\" ==================================================================== +.SH Authors +.\" ==================================================================== +. +.I mmroff +was written by +.MT jh@\:axis\:.se +J\[o ad]rgen H\[a ad]gg +.ME +of Lund, +Sweden. +. +. +.\" ==================================================================== +.SH "See also" +.\" ==================================================================== +. +.MR groff_mm @MAN7EXT@ , +.MR groff_mmse @MAN7EXT@ , +.MR groff @MAN1EXT@ , +.MR @g@troff @MAN1EXT@ , +.MR @g@tbl @MAN1EXT@ , +.MR @g@pic @MAN1EXT@ , +.MR @g@eqn @MAN1EXT@ +. +. +.\" Restore compatibility mode (for, e.g., Solaris 10/11). +.cp \n[*groff_mmroff_1_man_C] +.do rr *groff_mmroff_1_man_C +. +. +.\" Local Variables: +.\" fill-column: 72 +.\" mode: nroff +.\" End: +.\" vim: set filetype=groff textwidth=72: diff --git a/contrib/mm/mmroff.pl b/contrib/mm/mmroff.pl new file mode 100644 index 0000000..af8bf90 --- /dev/null +++ b/contrib/mm/mmroff.pl @@ -0,0 +1,179 @@ +#!@PERL@ +# Copyright (C) 1989-2020 Free Software Foundation, Inc. +# +# This file is part of groff. +# +# groff is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# groff is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +use strict; +use warnings; + +(my $progname = $0) =~s @.*/@@; + +# runs groff in safe mode, that seems to be the default +# installation now. That means that I have to fix all nice +# features outside groff. Sigh. +# I do agree however that the previous way opened a whole bunch +# of security holes. + +my $no_exec; + +if (grep(/^--help$/, @ARGV)) { + print "usage: mmroff [-x] [groff-option ...] [file ...]\n"; + exit; +} + +if (grep(/^--version$/, @ARGV)) { + print "mmroff (groff) @VERSION@\n"; + exit; +} + +# check for -x and remove it +if (grep(/^-x$/, @ARGV)) { + $no_exec++; + @ARGV = grep(!/^-x$/, @ARGV); +} + +# mmroff should always have -mm, but not twice +@ARGV = grep(!/^-mm$/, @ARGV); +my $check_macro = "groff -rRef=1 -z -mm @ARGV"; +my $run_macro = "groff -mm @ARGV"; + +my (%cur, $rfilename, $max_height, $imacro, $max_width, @out, @indi); +open(MACRO, "$check_macro 2>&1 |") || die "run $check_macro:$!"; +while(<MACRO>) { + if (m#^\.\\" Rfilename: (\S+)#) { + # remove all directories just to be more secure + ($rfilename = $1) =~ s#.*/##; + next; + } + if (m#^\.\\" Imacro: (\S+)#) { + # remove all directories just to be more secure + ($imacro = $1) =~ s#.*/##; + next; + } + if (m#^\.\\" Index: (\S+)#) { + # remove all directories just to be more secure + my $f; + ($f = $1) =~ s#.*/##; + &print_index($f, \@indi, $imacro); + @indi = (); + $imacro = ''; + next; + } + my $x; + if (($x) = m#^\.\\" IND (.+)#) { + $x =~ s#\\##g; + my @x = split(/\t/, $x); + grep(s/\s+$//, @x); + push(@indi, join("\t", @x)); + next; + } + if (m#^\.\\" PIC id (\d+)#) { + %cur = ('id', $1); + next; + } + if (m#^\.\\" PIC file (\S+)#) { + &psbb($1); + &ps_calc($1); + next; + } + if (m#^\.\\" PIC (\w+)\s+(\S+)#) { + eval "\$cur{'$1'} = '$2'"; + next; + } + s#\\ \\ $##; + push(@out, $_); +} +close(MACRO); + +sub Die { + print STDERR "$progname: fatal error: @_\n"; + exit 1; +} + +if ($rfilename) { + push(@out, ".nr pict*max-height $max_height\n") if defined $max_height; + push(@out, ".nr pict*max-width $max_width\n") if defined $max_width; + + open(OUT, ">$rfilename") + or &Die("unable to create $rfilename:$!"); + print OUT '.\" references', "\n"; + my $i; + for $i (@out) { + print OUT $i; + } + close(OUT); +} + +exit 0 if $no_exec; +exit system($run_macro); + +sub print_index { + my ($f, $ind, $macro) = @_; + + open(OUT, ">$f") or &Die("unable to create $f:$!"); + my $i; + for $i (sort @$ind) { + if ($macro) { + $i = '.'.$macro.' "'.join('" "', split(/\t/, $i)).'"'; + } + print OUT "$i\n"; + } + close(OUT); +} + +sub ps_calc { + my ($f) = @_; + + my $w = abs($cur{'llx'}-$cur{'urx'}); + my $h = abs($cur{'lly'}-$cur{'ury'}); + $max_width = $w if $w > $max_width; + $max_height = $h if $h > $max_height; + + my $id = $cur{'id'}; + push(@out, ".ds pict*file!$id $f\n"); + push(@out, ".ds pict*id!$f $id\n"); + push(@out, ".nr pict*llx!$id $cur{'llx'}\n"); + push(@out, ".nr pict*lly!$id $cur{'lly'}\n"); + push(@out, ".nr pict*urx!$id $cur{'urx'}\n"); + push(@out, ".nr pict*ury!$id $cur{'ury'}\n"); + push(@out, ".nr pict*w!$id $w\n"); + push(@out, ".nr pict*h!$id $h\n"); +} + + +sub psbb { + my ($f) = @_; + + unless (open(IN, $f)) { + print STDERR "Warning: Postscript file $f:$!"; + next; + } + while(<IN>) { + if (/^%%BoundingBox:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/) { + $cur{'llx'} = $1; + $cur{'lly'} = $2; + $cur{'urx'} = $3; + $cur{'ury'} = $4; + } + } + close(IN); +} + + +1; +# Local Variables: +# mode: CPerl +# End: diff --git a/contrib/mm/mmse.tmac b/contrib/mm/mmse.tmac new file mode 100644 index 0000000..3239aa2 --- /dev/null +++ b/contrib/mm/mmse.tmac @@ -0,0 +1,4 @@ +.\" -*- nroff -*- +.\" mmse.tmac +.\" +.do mso mse.tmac diff --git a/contrib/mm/mse.tmac b/contrib/mm/mse.tmac new file mode 100644 index 0000000..8184b14 --- /dev/null +++ b/contrib/mm/mse.tmac @@ -0,0 +1,166 @@ +.ig + +Copyright (C) 1991-2020 Free Software Foundation, Inc. +mm is written by Jörgen Hägg <jh@axis.com> + +mm is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +mm is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. + +Please submit bug reports using groff's 'BUG-REPORT' file to +http://savannah.gnu.org/bugs/?group=groff. +.. +. +.\" +.\" Swedish version of mm +.\" +.\" See m.tmac for version-information. +.ds @country se +. +.mso m.tmac +.\" The two-letter code for Swedish is 'sv', not 'se' (this is Northern Sami) +.mso sv.tmac +. +.ISODATE +. +.\" Page length +.if !r L .nr @pl 28.5c +.\" page width +.if !r W .nr @ll 13c +.\" page offset +.if !r O .nr @po 3.5c +.\" set the above parameters +.ll \n[@ll]u +.po \n[@po]u +.pl \n[@pl]u +. +.nr pg*footer-size 4v\" 1v+footer+even/odd footer+1v +.\"------------------------------------------------ +.\" Dokumentnamn +.ds LetDNAMN +.\" Mottagarens datum +.ds LetMDAT Ert datum: +.\" Bilaga +.ds LetBIL Bilaga \" +.\" Kompletteringsuppgift +.ds LetKOMP +.\" Dokumentbeteckning eller dokumentnummer +.ds LetDBET +.\" Beteckning (ärendebeteckning i form av diarienummer e.d. +.ds LetBET Beteckning: +.\" Mottagarens beteckning. +.ds LetMBET Er beteckning: +.\" Antal sidor +.ds LetSIDOR +.\" Svensk standard med högerställd löptext. --------------------- +.de let@init_SVH +.in 4.57c +.ll 17.57c +.. +.de let@head_SVH +.rm let@header +.let@print_SV H +.. +.de let@sg_SVH +.. +.de let@fc_SVH +.. +.\" Svensk standard med vänsterställd löptext. --------------------- +.de let@init_SVV +.. +.de let@head_SVV +.rm let@header +.let@print_SV V +.. +.de let@sg_SVV +.. +.de let@fc_SVV +.. +.\"-------------------------------- +.de let@print_SV +.nf +.\" pos T0 ----------------------------------- +.in 0 +.sp |3 +.if d let@wa-div .let@wa-div +.\"----- addressat +.if '\\$1'V' .if d let@ia-div \{\ +. sp |10 +. let@ia-div +.\} +.\" pos T4 ----------------------------------- +.in 9.14c +.\"----- kompletteringsuppgift +.if d let*lo-KOMP \{\ +. sp |2 +\\*[let*lo-KOMP] +.\} +.\"----- dokumentnamn +.if d let*lo-DNAMN \{\ +. sp |3 +\\*[let*lo-DNAMN] +.\} +.\"----- datum +.if d cov*new-date \{\ +. sp |5 +Datum: +\\*[cov*new-date] +.\} +.\"----- mottagarens datum +.if d let*lo-MDAT \{\ +. sp |7 +\\*[LetMDAT] +\\*[let*lo-MDAT] +.\} +.\"----- addressat +.if '\\$1'H' .if d let@ia-div \{\ +. sp |10 +. let@ia-div +.\} +.\" pos T6 ----------------------------------- +.in 13.72c +.\"----- mottagarens beteck. +.if d let*lo-MBET \{\ +. sp |7 +\\*[LetMBET] +\\*[let*lo-MBET] +.\} +.\"----- dokumentbeteck. +.if d let*lo-BET \{\ +. sp |3 +\\*[LetBET] +\\*[let*lo-BET] +.\} +.\" pos T7 ----------------------------------- +.in 16c +.\"----- bilaga +.if d let*lo-BIL \{\ +. sp |2 +\\*[LetBIL]\\*[let*lo-BIL] +.\} +.\" +.\"----- sidnummer +.sp |3 +.ie d let*lo-SIDOR \\n[%] (\\*[let*lo-SIDOR]) +.el \\n[%] +.\" +.\" Ta hand om special +.if d TP .TP +.sp |17 +.. +.\" ----------------------------------- +. +.\" Local Variables: +.\" mode: nroff +.\" fill-column: 72 +.\" End: +.\" vim: set filetype=groff textwidth=72: diff --git a/contrib/mm/refer-mm.tmac b/contrib/mm/refer-mm.tmac new file mode 100644 index 0000000..800568a --- /dev/null +++ b/contrib/mm/refer-mm.tmac @@ -0,0 +1,109 @@ +.\" refer-mm.tmac +.\" +.\" Refer support for mm macros. +.\" +.\" Copyright (C) 2011-2020 Free Software Foundation, Inc. +.\" Written by Werner Lemberg (wl@gnu.org) +.\" +.\" This file is part of groff. +.\" +.\" groff is free software; you can redistribute it and/or modify it under +.\" the terms of the GNU General Public License as published by the Free +.\" Software Foundation, either version 3 of the License, or +.\" (at your option) any later version. +.\" +.\" groff is distributed in the hope that it will be useful, but WITHOUT ANY +.\" WARRANTY; without even the implied warranty of MERCHANTABILITY or +.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +.\" for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this program. If not, see <http://www.gnu.org/licenses/>. +.\" +.\" Please send comments to groff@gnu.org. +. +. +.als ref*error @warning +. +.de ref*text-label-start +. FS "\\$1" +.. +.de ref*text-label-end +. FE +.. +. +.de ref*biblio-item-start +. ref@start-print "\\$1" +.. +.de ref*biblio-item-start-nolabel +. ref@start-print \& +.. +.de ref*biblio-item-end +. ref@stop-print +.. +. +.ds ref*refnum-start \" empty +.ds ref*refnum-end .\" +. +.ds [. \v'-.4m'\s-3[\" +.ds .] ]\s0\v'.4m'\" +. +.ds ref*spec!0 Q A T S V N P I C D O +.ds ref*spec!1 Q A T J S V N P I C D O +.ds ref*spec!2 Q A T S V P I C D O +.ds ref*spec!3 Q A T B E S V P I C D O +.ds ref*spec!4 Q A T R G P I C D O +. +.ds ref*spec!A ", " " +.ds ref*spec!B """ " " "in \fI" "" "\fP" +.ds ref*spec!D """ " " "(" ")" +.ds ref*spec!E ", " " "ed.\& " +.ds ref*spec!G """ " " "(" ")" +.ds ref*spec!J ", " " "\fI" "" "\fP" +.ds ref*spec!N """ "(" "" ")" +.ds ref*spec!O ". " " +.ds ref*spec!P ", " " "p.\~" +.ds ref*spec!PP ", " " "pp.\~" +.ds ref*spec!T ", " " "\(lq" "" "\(rq" +.ds ref*spec!T:0 ", " " "\fI" "" "\fP" +.ds ref*spec!T:2 ", " " "\fI" "" "\fP" +.ds ref*spec!V """ " " "\fB" "\fR" +.ds ref*spec!dflt ", " " +. +.\" For the bibliography section, we emulate the .RS/.RF mechanism of mm by +.\" collecting references (enclosed with .]- and .][) in macro 'ref*mac'. +.\" This macro gets expanded while calling the .RP macro. +. +.de ref*][-first-pass +. ec +. am ref*mac +. ds [F "\\*([F\" +. ][ "\\$1" "\\$2" +. ref*reset +\\.. +.. +. +.de ref*biblio-start-hook +. als ref*][-second-pass ][ +. als ][ ref*][-first-pass +. de ref*item-start-hook +. eo +. am ref*mac ][ +\\.. +.. +. +.de ref*biblio-end-hook +. als ][ ref*][-second-pass +. rm ref*item-start-hook +. als ref*print ref*end-print +. RP +. als ref*print ref*normal-print +.. +. +.mso refer.tmac +. +.\" Local Variables: +.\" mode: nroff +.\" fill-column: 72 +.\" End: +.\" vim: set filetype=groff textwidth=72: diff --git a/contrib/mm/tests/LT_SP_AU_without_AT_works.sh b/contrib/mm/tests/LT_SP_AU_without_AT_works.sh new file mode 100755 index 0000000..7589966 --- /dev/null +++ b/contrib/mm/tests/LT_SP_AU_without_AT_works.sh @@ -0,0 +1,50 @@ +#!/bin/sh +# +# Copyright (C) 2021 Free Software Foundation, Inc. +# +# This file is part of groff. +# +# groff is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# groff is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +groff="${abs_top_builddir:-.}/test-groff" + +# Regression-test Savannah #60373 (3/3). +# +# Ensure that an author name (AU) with no title (AT) isn't rendered with +# a trailing comma. +# +# Thanks to Robert Goulding for the reproducer. + +EXAMPLE='.LT SP +.WA "John Doe" +Nowhere, +USA. +.WE +.IA "Jane Smith" +Somewhere, +UK. +.IE +.LO SJ "Letter of Introduction" +.LO SA "Dear Ms.\& Smith" +.P +This is the text of the letter. +.FC "Yours sincerely," +.SG' + +echo "$EXAMPLE" \ + | "$groff" -Tascii -P-cbou -mm \ + | grep -Eqx '[[:space:]]+JOHN DOE[[:space:]]*' + +# vim:set ai et sw=4 ts=4 tw=72: diff --git a/contrib/mm/tests/LT_SP_multi-word_LO_SJ_works.sh b/contrib/mm/tests/LT_SP_multi-word_LO_SJ_works.sh new file mode 100755 index 0000000..98c3fda --- /dev/null +++ b/contrib/mm/tests/LT_SP_multi-word_LO_SJ_works.sh @@ -0,0 +1,49 @@ +#!/bin/sh +# +# Copyright (C) 2021 Free Software Foundation, Inc. +# +# This file is part of groff. +# +# groff is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# groff is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +groff="${abs_top_builddir:-.}/test-groff" + +# Regression-test Savannah #60373 (1/3). +# +# Ensure that a multi-word subject line (LO SJ) gets rendered. +# +# Thanks to Robert Goulding for the reproducer. + +EXAMPLE='.LT SP +.WA "John Doe" +Nowhere, +USA. +.WE +.IA "Jane Smith" +Somewhere, +UK. +.IE +.LO SJ "Letter of Introduction" +.LO SA "Dear Ms.\& Smith" +.P +This is the text of the letter. +.FC "Yours sincerely," +.SG' + +echo "$EXAMPLE" \ + | "$groff" -Tascii -P-cbou -mm \ + | grep -Eqx '[[:space:]]+LETTER OF INTRODUCTION[[:space:]]*' + +# vim:set ai et sw=4 ts=4 tw=72: diff --git a/contrib/mm/tests/MT-1-reports-all-TM-numbers.sh b/contrib/mm/tests/MT-1-reports-all-TM-numbers.sh new file mode 100755 index 0000000..3224e7c --- /dev/null +++ b/contrib/mm/tests/MT-1-reports-all-TM-numbers.sh @@ -0,0 +1,53 @@ +#!/bin/sh +# +# Copyright (C) 2023 Free Software Foundation, Inc. +# +# This file is part of groff. +# +# groff is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# groff is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +groff="${abs_top_builddir:-.}/test-groff" + +fail= + +wail () { + echo ...FAILED >&2 + fail=YES +} + +# Regression-test Savannah #63613. The identifiers of all technical +# memoranda should be formatted. + +input='.TL +My Memo +.AU "Random Hacker" +.TM 23-SKIDOO 24-URTHRU +.MT 1 +This is my memo. +. +There are many like it but this one is mine.' + +output=$(printf "%s\n" "$input" | "$groff" -mm -Tascii -P-cbou) +echo "$output" + +echo "checking that first TM number is present" >&2 +echo "$output" | grep -q "23-SKIDOO" || wail + +echo "checking that second TM number is present" >&2 +echo "$output" | grep -q "24-URTHRU" || wail + +test -z "$fail" + +# vim:set ai et sw=4 ts=4 tw=72: diff --git a/contrib/mm/tests/MT_5_includes_AT_in_SG.sh b/contrib/mm/tests/MT_5_includes_AT_in_SG.sh new file mode 100755 index 0000000..4f23d53 --- /dev/null +++ b/contrib/mm/tests/MT_5_includes_AT_in_SG.sh @@ -0,0 +1,43 @@ +#!/bin/sh +# +# Copyright (C) 2021 Free Software Foundation, Inc. +# +# This file is part of groff. +# +# groff is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# groff is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +groff="${abs_top_builddir:-.}/test-groff" + +# Regression-test Savannah #57034. +# +# Ensure that an author's title (if any) is written in the signature. +# +# Thanks to Ken Mandelberg for the reproducer. + +EXAMPLE='.TL +Inquiry +.AU "John SMITH" +.AT "Director" +.MT 5 +.P +sentence +.FC Sincerely, +.SG' + +echo "$EXAMPLE" \ + | "$groff" -Tascii -P-cbou -mm \ + | grep -Eqx '[[:space:]]+Director[[:space:]]*' + +# vim:set ai et sw=4 ts=4 tw=72: diff --git a/contrib/mm/tests/P-indentation-works.sh b/contrib/mm/tests/P-indentation-works.sh new file mode 100755 index 0000000..5be7efd --- /dev/null +++ b/contrib/mm/tests/P-indentation-works.sh @@ -0,0 +1,135 @@ +#!/bin/sh +# +# Copyright (C) 2023 Free Software Foundation, Inc. +# +# This file is part of groff. +# +# groff is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# groff is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +groff="${abs_top_builddir:-.}/test-groff" + +fail= + +wail () { + echo ...FAILED >&2 + fail=YES +} + +# Regression-test Savannah #54909. Check other cases as well. + +input='.P +P1 not indented. +.P 0 +P2 not indented. +.P 1 +P3 indented. +.nr Pt 2 +.P +P4 indented. +.H 1 Heading +.P +P5 not indented. +.P +P6 indented. +.H 3 "Run-in heading." +Some text. +.P +P7 indented. +.DS +display +.DE +.P +P8 not indented. +.P +P9 indented. +.BL +.LI +list item +.LE +.P +P10 not indented. +.P +P11 indented.' + +output=$(printf "%s\n" "$input" | "$groff" -mm -Tascii -P-cbou) +echo "$output" + +# P1 not indented. +# +# P2 not indented. +# +# P3 indented. +# +# P4 indented. +# +# +# 1. Heading +# +# P5 not indented. +# +# P6 indented. +# +# 1.0.1 Run-in heading. Some text. +# +# P7 indented. +# +# display +# +# P8 not indented. +# +# P9 indented. +# +# o list item +# +# P10 not indented. +# +# P11 indented. + +echo "checking that initial untyped paragraph not indented" >&2 +echo "$output" | grep -Eqx ' {7}P1 not indented\.' || wail + +echo "checking that initial type 0 paragraph not indented" >&2 +echo "$output" | grep -Eqx ' {7}P2 not indented\.' || wail + +echo "checking that first paragraph after Pt=2 indented" >&2 +echo "$output" | grep -Eqx ' {12}P3 indented\.' || wail + +echo "checking that second paragraph after Pt=2 indented" >&2 +echo "$output" | grep -Eqx ' {12}P4 indented\.' || wail + +echo "checking that first paragraph after heading not indented" >&2 +echo "$output" | grep -Eqx ' {7}P5 not indented\.' || wail + +echo "checking that second paragraph after heading indented" >&2 +echo "$output" | grep -Eqx ' {12}P6 indented\.' || wail + +echo "checking that paragraph after run-in heading indented" >&2 +echo "$output" | grep -Eqx ' {12}P7 indented\.' || wail + +echo "checking that first paragraph after display not indented" >&2 +echo "$output" | grep -Eqx ' {7}P8 not indented\.' || wail + +echo "checking that second paragraph after display indented" >&2 +echo "$output" | grep -Eqx ' {12}P9 indented\.' || wail + +echo "checking that first paragraph after list not indented" >&2 +echo "$output" | grep -Eqx ' {7}P10 not indented\.' || wail + +echo "checking that second paragraph after list indented" >&2 +echo "$output" | grep -Eqx ' {12}P11 indented\.' || wail + +test -z "$fail" + +# vim:set ai et sw=4 ts=4 tw=72: diff --git a/contrib/mm/tests/artifacts/60657.ref b/contrib/mm/tests/artifacts/60657.ref new file mode 100644 index 0000000..ed7f6f3 --- /dev/null +++ b/contrib/mm/tests/artifacts/60657.ref @@ -0,0 +1,11 @@ +%K 1 +%A First Author +%B First Book +%O Test one + +%K 2 +%A Second Author +%B Second Book + +%K 3 +%A Third Author diff --git a/contrib/mm/tests/ms_cover_sheet_robust_to_missing_AF.sh b/contrib/mm/tests/ms_cover_sheet_robust_to_missing_AF.sh new file mode 100755 index 0000000..66086f8 --- /dev/null +++ b/contrib/mm/tests/ms_cover_sheet_robust_to_missing_AF.sh @@ -0,0 +1,39 @@ +#!/bin/sh +# +# Copyright (C) 2021 Free Software Foundation, Inc. +# +# This file is part of groff. +# +# groff is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# groff is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +groff="${abs_top_builddir:-.}/test-groff" + +# Regression-test Savannah #60915. +# +# Ensure that a missing firm definition doesn't disrupt cover sheet +# layout. + +EXAMPLE='.COVER +.ND 2020-07-17 +.TL +The Great American Novel +.AU "Eileen M. Plausible" +.COVEND' + +echo "$EXAMPLE" \ + | "$groff" -Tascii -P-cbou -mm \ + | grep -Fqx ' 2020-07-17' # 7 spaces + +# vim:set ai et sw=4 ts=4 tw=72: diff --git a/contrib/mm/tests/mse_has-sufficient-footnote-space.sh b/contrib/mm/tests/mse_has-sufficient-footnote-space.sh new file mode 100755 index 0000000..936d9e5 --- /dev/null +++ b/contrib/mm/tests/mse_has-sufficient-footnote-space.sh @@ -0,0 +1,77 @@ +#!/bin/sh +# +# Copyright (C) 2022 Free Software Foundation, Inc. +# +# This file is part of groff. +# +# groff is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# groff is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +groff="${abs_top_builddir:-.}/test-groff" + +# Regression-test Savnnah #63398. + +input='.de M +. nr N \\\\$1-1 +. if \\\\$1 .M \\\\nN +Sed ut perspiciatis, unde omnis iste natus error sit voluptatem +accusantium doloremque laudantium, totam rem aperiam eaque ipsa, quae ab +illo inventore veritatis et quasi architecto beatae vitae dicta sunt, +explicabo.\\\\*F +. FS +footnote text +. FE +.. +.P +.M 16' + +# .de M +# . nr N \\$1-1 +# . if \\$1 .M \\nN +# Sed ut perspiciatis, unde omnis iste natus error sit voluptatem +# accusantium doloremque laudantium, totam rem aperiam eaque ipsa, quae ab +# illo inventore veritatis et quasi architecto beatae vitae dicta sunt, +# explicabo.\\*F +# .FS +# blather +# .FE +# Nemo enim ipsam voluptatem, quia voluptas sit, aspernatur +# aut odit aut fugit, sed quia consequuntur magni dolores eos, qui ratione +# voluptatem sequi nesciunt, neque porro quisquam est, qui dolorem ipsum, +# quia dolor sit amet consectetur adipiscivelit, sed quia non-numquam eius +# modi tempora incidunt, ut labore et dolore magnam aliquam quaerat +# voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam +# corporis suscipitlaboriosam, nisi ut aliquid ex ea commodi consequatur? +# Quis autem vel eum iure reprehenderit, qui inea voluptate velit esse, +# quam nihil molestiae consequatur, vel illum, qui dolorem eum fugiat, quo +# voluptas nulla pariatur? At vero eos et accusamus et iusto odio +# dignissimos ducimus, qui blanditiis praesentium voluptatum deleniti +# atque corrupti, quos dolores et quas molestias excepturi sint, obcaecati +# cupiditate non-provident, similique sunt in culpa, qui officia deserunt +# mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum +# facilis est et expedita distinctio. Nam libero tempore, cum soluta +# nobis est eligendi optio, cumque nihil impedit, quo minus id, quod +# maxime placeat, facere possimus, omnis voluptas assumenda est, omnis +# dolor repellendus. Temporibus autem quibusdam et aut officiis debitis +# aut rerum necessitatibus saepe eveniet, ut et voluptates repudiandae +# sint et molestiae non-recusandae. Itaque earum rerum hic tenetur a +# sapiente delectus, ut aut reiciendis voluptatibus maiores alias +# consequatur aut perferendis doloribus asperiores repellat. +# .. +# .P +# .M 4 + +output=$(echo "$input" | "$groff" -mm -mmse -Tps) + +# vim:set ai et sw=4 ts=4 tw=72: diff --git a/contrib/mm/tests/place-equation-labels-correctly-in-displays.sh b/contrib/mm/tests/place-equation-labels-correctly-in-displays.sh new file mode 100755 index 0000000..1970397 --- /dev/null +++ b/contrib/mm/tests/place-equation-labels-correctly-in-displays.sh @@ -0,0 +1,62 @@ +#!/bin/sh +# +# Copyright (C) 2022 Free Software Foundation, Inc. +# +# This file is part of groff. +# +# groff is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# groff is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +groff="${abs_top_builddir:-.}/test-groff" + +fail= + +wail () { + echo FAILED >&2 + fail=YES +} + +# Regression-test Savannah #62190. Check left- and center-aligned +# displayed equations as well. + +input='.DS L +.EQ (1) +p = q +.EN +.DE +.DS I +.EQ (2) +w = z +.EN +.DE +.DS C +.EQ (3) +x = y +.EN +.DE' + +output=$(printf "%s\n" "$input" | "$groff" -e -mm -Tascii -P-cbou) + +echo "checking left-aligned displayed equation" >&2 +echo "$output" | grep -Eq 'p=q {54}\(1\)' || wail + +echo "checking indented displayed equation" >&2 +echo "$output" | grep -Eq 'w=z {49}\(2\)' || wail + +echo "checking centered displayed equation" >&2 +echo "$output" | grep -Eq 'x=y {26}\(3\)' || wail + +test -z "$fail" || exit 1 + +# vim:set ai et sw=4 ts=4 tw=72: diff --git a/contrib/mm/tests/remove-stale-bib-entry-data.sh b/contrib/mm/tests/remove-stale-bib-entry-data.sh new file mode 100755 index 0000000..5fb68e6 --- /dev/null +++ b/contrib/mm/tests/remove-stale-bib-entry-data.sh @@ -0,0 +1,72 @@ +#!/bin/sh +# +# Copyright (C) 2022 Free Software Foundation, Inc. +# +# This file is part of groff. +# +# groff is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# groff is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +groff="${abs_top_builddir:-.}/test-groff" + +fail= + +wail () { + echo FAILED >&2 + fail=YES +} + +# Regression-test Savannah #60657. Ensure data from a bibliographic +# entry don't carry over to the next. + +# Locate directory containing our test artifacts. +artifact_dir= + +for buildroot in . .. ../.. +do + d=$buildroot/contrib/mm/tests/artifacts + if [ -d "$d" ] + then + artifact_dir=$d + break + fi +done + +# If we can't find it, we can't test. +test -z "$artifact_dir" && exit 77 # skip + +input=".R1 +bibliography $artifact_dir/60657.ref +.R2" + +output=$(echo "$input" | "$groff" -R -mm -Tascii -P-cbou) + +echo "checking first entry" +echo "$output" \ + | grep -q "1\. First Author in First Book\. Test one\.$" \ + || wail + +echo "checking second entry" +echo "$output" \ + | grep -q "2\. Second Author in Second Book\.$" \ + || wail + +echo "checking third entry" +echo "$output" \ + | grep -q "3\. Third Author\.$" \ + || wail + +test -z "$fail" || exit 1 + +# vim:set ai et sw=4 ts=4 tw=72: diff --git a/contrib/mm/tests/short-pages-do-not-overflow-stack.sh b/contrib/mm/tests/short-pages-do-not-overflow-stack.sh new file mode 100755 index 0000000..4be0e13 --- /dev/null +++ b/contrib/mm/tests/short-pages-do-not-overflow-stack.sh @@ -0,0 +1,59 @@ +#!/bin/sh +# +# Copyright (C) 2022 Free Software Foundation, Inc. +# +# This file is part of groff. +# +# groff is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# groff is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +groff="${abs_top_builddir:-.}/test-groff" + +fail= + +wail () { + echo FAILED >&2 + fail=YES +} + +# Regression-test Savannah #24048. Pages that are too short to +# accommodate minimal header and footer requirements should not cause +# infinite trap recursion. + +input='.COVER +.TL +Title +.AU "R. Thurston Howell" +.AT "Professor of Agnotology" "Publisher, Posterior Analytics Weekly" +.COVEND +.P +Main matter goes here.' + +echo "checking that sample document fits using default length" >&2 +output=$(printf "%s\n" "$input" \ + | "$groff" -b -mm -Tascii -P-cbou) || wail + +echo "checking that sample document fits using -rL5v" >&2 +output=$(printf "%s\n" "$input" \ + | "$groff" -b -rL5v -mm -Tascii -P-cbou) || wail + +echo "checking that sample document fails gracefully using -rL4v" >&2 +error=$(printf "%s\n" "$input" \ + | "$groff" -b -rL4v -mm -Tascii -P-cbou -z 2>&1) +# Assume that >= 10 lines of stderr must be due to a giant backtrace. +test $(echo "$error" | wc -l) -lt 10 || wail + +test -z "$fail" + +# vim:set ai et sw=4 ts=4 tw=72: |