PolyglotMan takes man pages from most of the popular flavors of UNIX and transforms them into any of a number of text source formats. PolyglotMan was formerly known as RosettaMan. The name of the binary is still called rman , for scripts that depend on that name; mnemonically, just think "reverse man". Previously PolyglotMan required pages to be formatted by nroff prior to its processing. With version 3.0, it prefers [tn]roff source and usually produces results that are better yet. And source processing is the only way to translate tables. Source format translation is not as mature as formatted, however, so try formatted translation as a backup.
In parsing [tn]roff source, one could implement an arbitrarily large subset of [tn]roff, which I did not and will not do, so the results can be off. I did implement a significant subset of those use in man pages, however, including tbl (but not eqn), if tests, and general macro definitions, so usually the results look great. If they don't, format the page with nroff before sending it to PolyglotMan. If PolyglotMan doesn't recognize a key macro used by a large class of pages, however, e-mail me the source and a uuencoded nroff-formatted page and I'll see what I can do. When running PolyglotMan with man page source that includes or redirects to other [tn]roff source using the .so (source or inclusion) macro, you should be in the parent directory of the page, since pages are written with this assumption. For example, if you are translating /usr/man/man1/ls.1, first cd into /usr/man.
PolyglotMan accepts man pages from: SunOS, Sun Solaris, Hewlett-Packard HP-UX, AT&T System V, OSF/1 aka Digital UNIX, DEC Ultrix, SGI IRIX, Linux, FreeBSD, SCO. Source processing works for: SunOS, Sun Solaris, Hewlett-Packard HP-UX, AT&T System V, OSF/1 aka Digital UNIX, DEC Ultrix. It can produce printable ASCII-only (control characters stripped), section headers-only, Tk, TkMan, [tn]roff (traditional man page source), SGML, HTML, MIME, LaTeX, LaTeX2e, RTF, Perl 5 POD. A modular architecture permits easy addition of additional output formats.
The latest version of PolyglotMan is available from http://polyglotman.sourceforge.net/ .
15 -h|--help Show list of command line options and exit.
15 -v|--version Show version number and exit.
You should specify the filter first, as this sets a number of parameters, and then specify other options.
15 -f|--filter <ASCII|roff|TkMan|Tk|Sections|HTML|SGML|MIME|LaTeX|LaTeX2e|RTF|POD> Set the output filter. Defaults to ASCII.
15 -S|--source PolyglotMan tries to automatically determine whether its input is source or formatted; use this option to declare source input.
15 -F|--format|--formatted PolyglotMan tries to automatically determine whether its input is source or formatted; use this option to declare formatted input.
15 -l|--title printf-string In HTML mode this sets the <TITLE> of the man pages, given the same parameters as -r .
15 -r|--reference|--manref printf-string In HTML and SGML modes this sets the URL form by which to retrieve other man pages. The string can use two supplied parameters: the man page name and its section. (See the Examples section.) If the string is null (as if set from a shell by "-r ''"), `-' or `off', then man page references will not be HREFs, just set in italics. If your printf supports XPG3 positions specifier, this can be quite flexible.
15 -V|--volumes <colon-separated list> Set the list of valid volumes to check against when looking for cross-references to other man pages. Defaults to 1:2:3:4:5:6:7:8:9:o:l:n:p (volume names can be multicharacter). If an non-whitespace string in the page is immediately followed by a left parenthesis, then one of the valid volumes, and ends with optional other characters and then a right parenthesis--then that string is reported as a reference to another manual page. If this -V string starts with an equals sign, then no optional characters are allowed between the match to the list of valids and the right parenthesis. (This option is needed for SCO UNIX.)
The following options apply only when formatted pages are given as input. They do not apply or are always handled correctly with the source.
15 -b|--subsections Try to recognize subsection titles in addition to section titles. This can cause problems on some UNIX flavors.
15 -K|--nobreak Indicate manual pages don't have page breaks, so don't look for footers and headers around them. (Older nroff -man macros always put in page breaks, but lately some vendors have realized that printout are made through troff, whereas nroff -man is used to format pages for reading on screen, and so have eliminated page breaks.) PolyglotMan usually gets this right even without this flag.
15 -k|--keep Keep headers and footers, as a canonical report at the end of the page. changeleft Move changebars, such as those found in the Tcl/Tk manual pages, to the left. --> notaggressive Disable aggressive man page parsing. Aggressive manual, which is on by default, page parsing elides headers and footers, identifies sections and more. -->
15 -n|--name name Set name of man page (used in roff format). If the filename is given in the form " name . section ", the name and section are automatically determined. If the page is being parsed from [tn]roff source and it has a .TH line, this information is extracted from that line.
15 -p|--paragraph paragraph mode toggle. The filter determines whether lines should be linebroken as they were by nroff, or whether lines should be flowed together into paragraphs. Mainly for internal use.
15 -s|section # Set volume (aka section) number of man page (used in roff format). tables Turn on aggressive table parsing. -->
15 -t|--tabstops # For those macros sets that use tabs in place of spaces where possible in order to reduce the number of characters used, set tabstops every # columns. Defaults to 8.
rman -f roff /usr/local/man/cat1/ls.1 > /usr/local/man/man1/ls.1
Long man pages are often compressed to conserve space (compression is especially effective on formatted man pages as many of the characters are spaces). As it is a long man page, it probably has subsections, which we try to separate out (some macro sets don't distinguish subsections well enough for PolyglotMan to detect them). Let's convert this to LaTeX format:
pcat /usr/catman/a_man/cat1/automount.z | rman -b -n automount -s 1 -f latex > automount.man
Alternatively, man 1 automount | rman -b -n automount -s 1 -f latex > automount.man
For HTML/Mosaic users, PolyglotMan can, without modification of the source code, produce HTML links that point to other HTML man pages either pregenerated or generated on the fly. First let's assume pregenerated HTML versions of man pages stored in /usr/man/html . Generate these one-by-one with the following form:
rman -f html -r 'http:/usr/man/html/%s.%s.html' /usr/man/cat1/ls.1 > /usr/man/html/ls.1.html
If you've extended your HTML client to generate HTML on the fly you should use something like:
rman -f html -r 'http:~/bin/man2html?%s:%s' /usr/man/cat1/ls.1
when generating HTML.
PolyglotMan is not perfect in all cases, but it usually does a good job, and in any case reduces the problem of converting man pages to light editing.Tables in formatted pages, especially H-P's, aren't handled very well. Be sure to pass in source for the page to recognize tables.
The man pager woman applies its own idea of formatting for man pages, which can confuse PolyglotMan . Bypass woman by passing the formatted manual page text directly into PolyglotMan .
The [tn]roff output format uses fB to turn on boldface. If your macro set requires .B, you'll have to a postprocess the PolyglotMan output.
by Thomas A. Phelps ( phelps@ACM.org )
developed at the
University of California, Berkeley
Computer Science Division
Manual page last updated on $Date: 1998/07/13 09:47:28 $