Commit b3492e29 authored by Fabian Wolff's avatar Fabian Wolff

Import Upstream version 2.1

parents
This diff is collapsed.
This diff is collapsed.
# Makefile for the doclifter project
VERS=$(shell sed <doclifter.spec -n -e '/Version: \(.*\)/s//\1/p')
MANDIR=/usr/share/man/man1
BINDIR=/usr/bin
DOCS = README COPYING TODO BUGS doclifter.spec \
doclifter.xml doclifter.1 manlifter.xml manlifter.1
TEST = docliftertest1.man test.troff
SOURCES = doclifter manlifter Makefile $(DOCS) $(TEST)
all: doclifter-$(VERS).tar.gz
install: doclifter.1
cp doclifter $(BINDIR)
gzip <doclifter.1 >$(MANDIR)/doclifter.1.gz
rm doclifter.1
doclifter.1: doclifter.xml
xmlto man doclifter.xml
manlifter.1: manlifter.xml
xmlto man manlifter.xml
doclifter.html: doclifter.xml
xmlto xhtml-nochunks doclifter.xml
manlifter.html: manlifter.xml
xmlto xhtml-nochunks manlifter.xml
doclifter-$(VERS).tar.gz: $(SOURCES)
mkdir doclifter-$(VERS)
cp $(SOURCES) doclifter-$(VERS)
tar -czf doclifter-$(VERS).tar.gz doclifter-$(VERS)
rm -fr doclifter-$(VERS)
ls -l doclifter-$(VERS).tar.gz
dist: doclifter-$(VERS).tar.gz doclifter.html manlifter.html
ln -sf doclifter-$(VERS).tar.gz doclifter.tar.gz
doclifter
The doclifter program translates documents written in troff macros to DocBook.
Lifting documents from presentation level to semantic level is hard, and
a really good job requires human polishing. This tool aims to do everything
that can be mechanized, and to preserve any troff-level information that might
have structural implications in XML comments.
This tool does most of the hard parts, but not all. TBL tables
diagrams are translated into DocBook table markup and and PIC into
SVG, but EQN is not translated.
Test loads are included in the distribution. The code has been tested
in about the most brutal possible way; it has been run against every
single man page in all sections of a full Fedore Core installation.
It lifts over 95% of these pages without requiring any hand-hacking.
There is a detailed change log in the RPM spec file.
doclifter was written under Python 2.2a1. It will not work under Python 1.5.2,
and may not work under 2.1. Upgrade, it will be good for you.
Eric S. Raymond
November 2003
Bugs:
* .Xo/.Xc Berkeley macro needs work. See elf.5.
* Look at lwres_getaddrinfo.3 -- good type case for resuming function parse
after text. sox(1) and soxmix(1) show the same problem with command syntax.
* CA.pl.1ssl -- CA.pl is not properly tagged as a command.
* Why aren't the command synopses in ab.1 and ac.1 parsed correctly?
Edge cases in which we could do better --
* sox(1), soxmix(1)
These are totally hosed.
* qurlinfo(3qt) and others:
operator declaration is seen as text, not structured.
Other things to do:
* Stereotyped .in/ta/ti pattern in emacs.1
* Stereotyped .in patterns under DIAGNOSTICS in compress.1.
Big projects:
* Translate EQN.
See the BUGS file for other, more minor problems mainly due to bad markup.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
.\" Test load for doclifter
.TH docliftertest1 1
.SH NAME
docliftertest1 \- section 1 test load for doclifter
.SH SYNOPSIS
\fBdocliftertest1\fR [-a | -b] [\fIoptional...\fR]
\fBdocliftertest1\fR -c \fI<required>\fP
\fBdocliftertest1\fR -d
[
.B optional
]
\fBdocliftertest1\fR [ -e | -f foo ] ...
.SH DESCRIPTION
This file is a test load for doclifter, intended to exercise as much as possible
of its translation capability. You are now reading the last sentence
of an ordinary paragraph; by inspecting the output, you can check that
your formatter is generating a correct beginning-of-body even after
the section title, and an end-of-body event at the end of the
paragraph.
.PP
The -a in this sentence should get decorated with an option tag.
.PP
This is an ordinary paragraph started by a \fB.PP\fR macro.
A second line illustrates the effect of filling.
.PP
This
.B word
should be bold. This
.SM word
should be small. The word
.SM ASCII
is actually an acronym. This is a reference to section:
.SM SEE ALSO
it should be a link now. Visiting the
.SM SYNOPSIS
is important. While the
.SM SYNOPYOSIS
is not important and doesn't exist.
.IR This sentence should alternate italic and bold.
The words in the last sentence should have been run together.
.LP
This is an ordinary paragraph started by a \fB.LP\fR macro.
A second line illustrates the effect of filling.
.HP 5
This is a paragraph started by an \fB.HP\fR macro.
We translate it to DocBook as an ordinary paragraph break.
.IP & 5
This paragraph was led with \fB.IP & 5\fP.
A sample line to see how it formats -- it should turn into list markup.
.PP
There should be an index entry generated right after this sentence.
.IX Item <sample>
And right before this one.
.IP 5
This paragraph was led with \fB.IP 5\fP.
This should turn into an ordinary paragraph.
.PP
This paragraph contains a URL, http://www.google.com, that doesn't have
explicit \fB.UR\fP/\fB.UN\fR tags around it. It should not be marked
up, because \fB.UR\fP/\fB.UN\fR tags exist in this document.
.IP \(bu
This is the first item in a bulleted list.
.IP \(bu
This is the second item in a bulleted list.
.IP \(bu
This is the third item in a bulleted list.
.PP
This is another ordinary paragraph. It's going to be immediately
followed (without an intervening paragraph tag) by a table example
lifted straight from Mike Lesk's original tbl paper:
.TS
center, box;
c s s s
c s s s
c |c |c |c
c |c |c |c
l |n |n |n.
1970 Federal Budget Transfers
\s-2(in billions of dollars)\s0
=
State Taxes Money Net
\^ collected spent \^
_
New York 22.91 21.35 \-1.56
New Jersey 8.33 6.96 \-1.37
Connecticut 4.12 3.10 \-1.02
Maine 0.74 0.67 \-0.07
California 22.29 22.42 +0.13
New Mexico 0.70 1.49 +0.79
Georgia 3.30 4.28 +0.98
Mississippi 1.15 2.32 +1.17
Texas 9.33 11.13 +1.80
.TE
In the above table, the presence or absence of cell borders may not be
exactly as
.BR tbl (1)
specified them (the DocBook DSSL toolchain sets BORDER=1 if there is
any frame attribute, which is wrong; according to the DocBook
specification, the frame attribute should only control box drawing
around the exterior of the table). But the horizontal spanning and
centering should be displayed properly.
.SS MORE TABLES
We just started a subsection.
.P
Here's another table. The first line of the table contains a heading
centered across all three columns; each remaining line contains a
left-adjusted item in the first column followed by two columns of
numerical data. (The numerical alignment won't translate into DocBook.)
.TS
c s s
l n n.
Overall title
Item-a 34.22 9.1
Item-b 12.65 .02
Items: c,d,e 23 5.8
Total 69.87 14.92
.TE
This table illustrates the effect of the \fBexpand\fR option:
.TS
expand;
c s s s
c c c c
l l n n.
Bell Labs Locations
Name Address Area Code Phone
Holmdel Holmdel, N. J. 07733 201 949-3000
Murray Hill Murray Hill, N. J. 07974 201 582-6377
Whippany Whippany, N. J. 07981 201 386-3000
Indian Hill Naperville, Illinois 60540 312 690-2000
.TE
Here's a really gnarly table with a lot of vertically spanned
content and several multiline items per line. However this
is not done with a vertically-spanned format; for that, see the
next example.
.TS
box;
cb s s s
c | c | c s
ltiw(1i) | ltw(2i) | lp8| lw(1.6i)p8.
Some Interesting Places
_
Name Description Practical Information
_
T{
American Museum of Natural History
T} T{
The collections fill 11.5 acres (Michelin) or 25 acres (MTA)
of exhibition halls on four floors.
There is a full-sized replica
of a blue whale and the world's largest star sapphire (stolen in 1964).
T} Hours 10-5, ex. Sun 11-5, Wed. to 9
\^ \^ Location T{
Central Park West & 79th St.
T}
\^ \^ Admission Donation: $1.00 asked
\^ \^ Subway AA to 81st St.
\^ \^ Telephone 212-873-4225
_
Bronx Zoo T{
About a mile long and .6 mile wide, this is the largest zoo in America.
A lion eats 18 pounds
of meat a day while a sea lion eats 15 pounds of fish.
T} Hours T{
10-4:30 winter, to 5:00 summer
T}
\^ \^ Location T{
185th St. & Southern Blvd, the Bronx.
T}
\^ \^ Admission $1.00, but Tu,We,Th free
\^ \^ Subway 2, 5 to East Tremont Ave.
\^ \^ Telephone 212-933-1759
_
Brooklyn Museum T{
Five floors of galleries contain American and ancient art.
There are American period rooms and architectural ornaments saved
from wreckers, such as a classical figure from Pennsylvania Station.
T} Hours Wed-Sat, 10-5, Sun 12-5
\^ \^ Location T{
Eastern Parkway & Washington Ave., Brooklyn.
T}
\^ \^ Admission Free
\^ \^ Subway 2,3 to Eastern Parkway.
\^ \^ Telephone 212-638-5000
_
T{
New-York Historical Society
T} T{
All the original paintings for Audubon's
.I Birds of America
are here, as are exhibits of American decorative arts, New York history,
Hudson River school paintings, carriages, and glass paperweights.
T} Hours T{
Tues-Fri & Sun, 1-5; Sat 10-5
T}
\^ \^ Location T{
Central Park West & 77th St.
T}
\^ \^ Admission Free
\^ \^ Subway AA to 81st St.
\^ \^ Telephone 212-873-3400
.TE
OK, here is a table example with spanned vertical format. It
illustrates the vertical-spanning bug noted on the
.BR doclifter (1)
manual page (but
.BR troff2docbook (1)
translates this table correctly). If the translation were completely
correct, the "E" entry would span one row further downward.
.TS
allbox;
l l l
l l l
l ^ l.
A B C
_
D E F
G H
I J
.TE
.P
Now we'll test PIC translation to SVG.
.PS
box "box"
.PE
This line tests recognition of \v'-.4m'\fIsuperscripting\*(ic\fR\v'.4m')
,br
This line tests recognition of the \uother\d superscript idiom.
.SH FILES
The following items illustrate \fB.TP\fR markup:
.TP 5
${HOME}/.profile
read at startup by
.BR sh (1).
.TP
/etc/hosts
list of static host addresses used by the \fIbind\fR(8) library.
.SH SEE ALSO
ls(1),
.IR mkdir (1).
.\" End
This diff is collapsed.
.\"Generated by db2man.xsl. Don't modify this, modify the source.
.de Sh \" Subsection
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Ip \" List item
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.TH "MANLIFTER" 1 "" "" ""
.SH NAME
manlifter \- mass-conversion script and test harness for doclifter
.SH "SYNOPSIS"
.ad l
.hy 0
.HP 10
\fBmanlifter\fR [\-d\ \fIoption\fR] [\-e] [\-f\ \fIlistfile\fR] [\-h] [\-I\ \fImandir\fR] [\-o\ \fIoutdir\fR] [\-p\ \fIpatch\-directory\fR] [\-q] [\-v] [\-s\ \fIsection\fR] \fIname\fR...
.ad
.hy
.ad l
.hy 0
.HP 10
\fBmanlifter\fR [\-S]
.ad
.hy
.SH "DESCRIPTION"
.PP
\fBmanlifter\fR is a script that sequences \fBdoclifter\fR(1) to convert an entire manual\-page tree to XML\-Docbook, optionally also generating HTML from the XML\&. Another use is as a torture\-test tool for doclifter; it logs errors to standard output and collects timings\&.
.PP
Called without any file arguments, manlifter tries to convert all man pages installed on the system, placing the resulting xml files under \fIxmlman\fR in the current directory\&. Each successfully translated page foo\&.N is copied to manN/foo\&.xml beneath the output directory, regardless of what source directory it came from\&.
.PP
For each source file examined, if the destination file exists and is newer than the source, the conversion is skipped; thus, incremental runs of \fBmanlifter\fR do the least work needed to keep the target XML tree up to date\&. Likewise, in \-h mode derived HTML files are only made when necessary\&.
.PP
Stub pages that are just \&.so redirections are translated to corresponding symlinks of XML files (and, with \-h, HTML files)\&.
.PP
\fBmanlifter\fR may also be called with a single file argument, which is interpreted as the stem name of a potential manual page\&. \fBmanlifter\fR then searches all selected manual sections for a matching page and attempts to convert it\&. In this case, a copy of the man page and the converted version are dropped immediately beheath the output directory, with the names foobar\&.man and foobar\&.man\&.xml, respectively\&. This mode is normally only of interest only to \fBdoclifter\fR developers for debugging that program\&.
.PP
In either of the above cases, \fBmanlifter\fR will uncompress the file if it has a \fI\&.gz\fR, \fI\&.bz2\fR or \fI\&.Z\fRsuffix on the name\&.
.PP
Options are as follows:
.TP
\-d
Pass the string argument to each doclifter call as options\&. Each space\-separated token in the string becomes a separate argument in the call\&.
.TP
\-e
Run in log\-filter mode (mainly of interest to \fBdoclifter\fR developers)\&. In this mode, \fBmanlifter\fR reads a test log from standard input and filters it in a a way dependent on the \-f and \-q options\&. If neither of these is given, messages from successful runs are stripped out and only errors passed through to standard output\&.
.TP
\-f
Normally, run doclifter on the files named by each line in the argument file\&. In error\-filter mode the argument is instead interpreted as a filtering regular expression\&.
.TP
\-h
Also generate HTML translations into the output directory\&. DocBook citerefentry markup is transformed to hyperlinks in the directory, and a contents listing is generated to \fIindex\&.html\fR\&.
.TP
\-I
Specify the root of the manual\-page tree\&. By default this is \fI/usr/share/man\fR\&.
.TP
\-o
Set the output directory into which XML\-DocBooktranslations will be dropped\&. By default this is \fIxmlman\fR under the current directory in batch mode, or the current directory otherwise\&.
.TP
\-p
Interpret the argument as the name of a patch directory (the default name is \fIprepatch\fR under the current directory)\&. Each file named \fIfoo\&.N\&.patch\fR is interpreted as a patch to be applied to the manual page foo(N) before doclifter translates it\&.
.TP
\-q
Normally, pass the \-q (quiet) option to each doclifter call\&. In error\-filter mode, return a list of files on which translation failed\&.
.TP
\-v
Pass the \-v (verbose) option to each doclifter call\&. This option can be repeated to increase the verbosity level\&.
.TP
\-s
Specify a section to scan\&. Use this with an argument; it should not be necessary when doing a conversion of the entire tree\&.
.TP
\-S
Compile error statistics from a \fBmanlifter\fR logfile presented on standard input\&. This option will be of interest mainly to \fBdoclifter\fR developers\&.
.PP
\fBmanlifter\fR emits a logfile to standard output\&. The file begins with a timestamp line and a blank line, and ends with a line giving run time and various interesting statistics\&. Between these are stanzas, separated by blank lines, wone for each file on which \fBdoclifter\fR was run\&.
.PP
The first line of each stanza beguns with "! ", followed by the pathname of the source manual pager, followed by "=" and the return status of doclifter run on that file\&. Following that is a space and \fBdoclifter\fR's runtime in seconds\&.
.PP
This initial line may be followed by information messages and the error output of the doclifter run\&.
.PP
\fBmanlifter\fR must find a copy of \fBdoclifter\fR in either the current directory or one of the command directories in your \fBPATH\fR in order to run\&.
.SH "BUGS"
.PP
HTML generation is painfully slow\&. Unfortunately, there is little we can do to remedy this, because XSLT engines are painfully slow\&.
.SH "SEE ALSO"
.PP
\fBdoclifter\fR(1), \fBxmlto\fR(1)
.SH "AUTHOR"
.PP
Eric S\&. Raymond <esr@thyrsus\&.com>
.PP
There is a project web page at http://www\&.catb\&.org/~esr/doclifter/: \fIhttp://www.catb.org/~esr/doclifter/\fR\&.
<!DOCTYPE refentry PUBLIC
"-//OASIS//DTD DocBook XML V4.1.2//EN"
"docbook/docbookx.dtd">
<refentry id='manlifter.1'>
<refmeta>
<refentrytitle>manlifter</refentrytitle>
<manvolnum>1</manvolnum>
</refmeta>
<refnamediv id='name'>
<refname>manlifter</refname>
<refpurpose>mass-conversion script and test harness for doclifter</refpurpose>
</refnamediv>
<refsynopsisdiv id='synopsis'>
<cmdsynopsis>
<command>manlifter</command>
<arg choice='opt'>-d <replaceable>option</replaceable></arg>
<arg choice='opt'>-e</arg>
<arg choice='opt'>-f <replaceable>listfile</replaceable></arg>
<arg choice='opt'>-h</arg>
<arg choice='opt'>-I <replaceable>mandir</replaceable></arg>
<arg choice='opt'>-o <replaceable>outdir</replaceable></arg>
<arg choice='opt'>-p <replaceable>patch-directory</replaceable></arg>
<arg choice='opt'>-q</arg>
<arg choice='opt'>-v</arg>
<arg choice='opt'>-s <replaceable>section</replaceable></arg>
<arg choice='plain' rep='repeat'><replaceable>name</replaceable></arg>
</cmdsynopsis>
<cmdsynopsis>
<command>manlifter</command> <arg choice='opt'>-S</arg>
</cmdsynopsis>
</refsynopsisdiv>
<refsect1><title>Description</title>
<para><command>manlifter</command> is a script that sequences
<citerefentry><refentrytitle>doclifter</refentrytitle><manvolnum>1</manvolnum></citerefentry>
to convert an entire manual-page tree to XML-Docbook, optionally also
generating HTML from the XML. Another use is as a torture-test tool
for doclifter; it logs errors to standard output and collects
timings.</para>
<para>Called without any file arguments, manlifter tries to convert
all man pages installed on the system, placing the resulting xml files
under <filename>xmlman</filename> in the current directory. Each
successfully translated page foo.N is copied to manN/foo.xml beneath
the output directory, regardless of what source directory it came
from.
</para>
<para>For each source file examined, if the destination file exists
and is newer than the source, the conversion is skipped; thus,
incremental runs of <command>manlifter</command> do the least work
needed to keep the target XML tree up to date. Likewise, in -h mode derived
HTML files are only made when necessary.</para>
<para>Stub pages that are just <markup>.so</markup> redirections are
translated to corresponding symlinks of XML files (and, with -h, HTML
files).</para>
<para><command>manlifter</command> may also be called with a single
file argument, which is interpreted as the stem name of a potential
manual page. <command>manlifter</command> then searches all selected
manual sections for a matching page and attempts to convert it. In
this case, a copy of the man page and the converted version are
dropped immediately beheath the output directory, with the names
foobar.man and foobar.man.xml, respectively. This mode is normally
only of interest only to <command>doclifter</command> developers for
debugging that program.</para>
<para>In either of the above cases, <command>manlifter</command> will
uncompress the file if it has a <filename>.gz</filename>,
<filename>.bz2</filename> or <filename>.Z</filename>suffix on the
name.</para>
<para>Options are as follows:</para>
<variablelist>
<varlistentry>
<term>-d</term>
<listitem><para>Pass the string argument to each doclifter call as options.
Each space-separated token in the string becomes a separate argument
in the call.</para></listitem>
</varlistentry>
<varlistentry>
<term>-e</term>
<listitem><para>Run in log-filter mode (mainly of interest to
<command>doclifter</command> developers). In this mode,
<command>manlifter</command> reads a test log from standard input and
filters it in a a way dependent on the -f and -q options. If neither
of these is given, messages from successful runs are stripped out and
only errors passed through to standard output.</para></listitem>
</varlistentry>
<varlistentry>
<term>-f</term>
<listitem><para>Normally, run doclifter on the files named by each line in the
argument file. In error-filter mode the argument is instead
interpreted as a filtering regular expression.</para></listitem>
</varlistentry>
<varlistentry>
<term>-h</term>
<listitem><para>Also generate HTML translations into the output
directory. DocBook citerefentry markup is transformed to hyperlinks in
the directory, and a contents listing is generated to
<filename>index.html</filename>.</para></listitem>
</varlistentry>
<varlistentry>
<term>-I</term>
<listitem><para>Specify the root of the manual-page tree. By default
this is <filename>/usr/share/man</filename>.</para></listitem>
</varlistentry>
<varlistentry>
<term>-o</term>
<listitem><para>Set the output directory into which
XML-DocBooktranslations will be dropped. By default this is
<filename>xmlman</filename> under the current directory in batch mode,
or the current directory otherwise.</para></listitem>
</varlistentry>
<varlistentry>
<term>-p</term>
<listitem><para>Interpret the argument as the name of a patch
directory (the default name is <filename>prepatch</filename> under the
current directory). Each file named <filename>foo.N.patch</filename> is
interpreted as a patch to be applied to the manual page foo(N) before
doclifter translates it.</para></listitem>
</varlistentry>
<varlistentry>
<term>-q</term>
<listitem><para>Normally, pass the -q (quiet) option to each doclifter call.
In error-filter mode, return a list of files on which translation failed.
</para></listitem>
</varlistentry>
<varlistentry>
<term>-v</term> <listitem><para>Pass the -v (verbose) option to each
doclifter call. This option can be repeated to increase the verbosity
level.</para></listitem>
</varlistentry>
<varlistentry>
<term>-s</term>
<listitem><para>Specify a section to scan. Use this with an argument;
it should not be necessary when doing a conversion of the entire
tree.</para></listitem>
</varlistentry>
<varlistentry>
<term>-S</term>
<listitem><para>Compile error statistics from a
<command>manlifter</command> logfile presented on standard input.
This option will be of interest mainly to <command>doclifter</command>
developers.</para></listitem>
</varlistentry>
</variablelist>
<para><command>manlifter</command> emits a logfile to standard
output. The file begins with a timestamp line and a blank line,
and ends with a line giving run time and various interesting
statistics. Between these are stanzas, separated by blank lines,
wone for each file on which <command>doclifter</command> was
run.</para>
<para>The first line of each stanza beguns with "! ", followed by the
pathname of the source manual pager, followed by "=" and the return
status of doclifter run on that file. Following that is a space
and <command>doclifter</command>'s runtime in seconds.</para>
<para>This initial line may be followed by information messages and
the error output of the doclifter run.</para>
<para><command>manlifter</command> must find a copy of
<command>doclifter</command> in either the current directory or one of
the command directories in your <envar>PATH</envar> in order to
run.</para>
</refsect1>
<refsect1><title>Bugs</title>
<para>HTML generation is painfully slow. Unfortunately, there is
little we can do to remedy this, because XSLT engines are painfully
slow.</para>
</refsect1>
<refsect1><title>See Also</title>
<para>
<citerefentry><refentrytitle>doclifter</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>xmlto</refentrytitle><manvolnum>1</manvolnum></citerefentry>
</para>
</refsect1>
<refsect1><title>Author</title>
<para>Eric S. Raymond <email>esr@thyrsus.com</email></para>
<para>There is a project web page at
<ulink url="http://www.catb.org/~esr/doclifter/">http://www.catb.org/~esr/doclifter/</ulink>.</para>
</refsect1>
</refentry>
.\" Test for various troff features
.\" Test translation
.tr $\(bu
We should see a bullet literal $ here.
.ds XX frozzle
This is a \*(XX string expansion example.
.\" Simple macro definition, no macro calls inside it
.de YY
Macro expansion text with argument \$1
..
.\" Here's the test invocation
.YY foo
.\" Let's be sure we keep getting lines after macroexpansion
.de AA
Before subcall
.YY bar
After subcall: \$1
..
.\" next line tests .so
.so testinclude
.\" OK, here's the two-level macroexpansion
.AA baz
.\" Test conditionals
.de CO1
.if n
1: You should see this
.\}
..
.CO1
.de CO2
.ie n \{
2: You should see this
.\}
.el\{
2: You should not see this
.\}
..
.CO2
.pm
.ie n 3: You should see this
.el 3: You should not see this
.\" Something is funky with the else handling
.if n TRUE
.el FALSE
\" Test HTMLization
.br <foo>
Hi there
.de Sh
dummy
..
.\" Do we blow our stack?
.if n .Sh """Considerations"""
.el .Sh "``Considerations''"
.\" Example test
.ft CW
.in +4
.nf
This is an example
.ft
.in -4
.fi
foo\ bar
.br
This line tests recognition of \v'-.4m'\fIsuperscripting\*(ic\fR\v'.4m')
This line tests recognition of the \uother\d superscript idiom.
Before ignore
.ig
This line is ignored
..
After ignore
# End.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment