summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-09-24 09:20:02 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-09-24 09:20:02 +0000
commita9dec6b72054a997078fb8d026d5a990639857dd (patch)
tree34102df28ca683d5f43cda709a290ebe45bdbd26
parent78764a32b1233bb84ddfcb5fcf897987c0814eca (diff)
downloadmandoc-a9dec6b72054a997078fb8d026d5a990639857dd.tar.gz
Many more macros added to -Thtml.
Minor space issues fixed in -Tascii.
-rw-r--r--Makefile14
-rw-r--r--example.style.css4
-rw-r--r--mandoc_char.7747
-rw-r--r--mdoc_html.c234
-rw-r--r--mdoc_term.c1
-rw-r--r--style.css5
6 files changed, 623 insertions, 382 deletions
diff --git a/Makefile b/Makefile
index 7731093c..962f0a7a 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-.SUFFIXES: .html .xml .sgml .1 .3 .7 .md5 .tar.gz .1.html .3.html .7.html .1.txt .3.txt .7.txt
+.SUFFIXES: .html .xml .sgml .1 .3 .7 .md5 .tar.gz .1.txt .3.txt .7.txt .1.sgml .3.sgml .7.sgml
BINDIR = $(PREFIX)/bin
INCLUDEDIR = $(PREFIX)/include
@@ -52,7 +52,9 @@ DATAS = arch.in att.in lib.in msec.in st.in \
vol.in chars.in
HEADS = mdoc.h libmdoc.h man.h libman.h term.h \
libmandoc.h html.h chars.h
-SGMLS = index.sgml
+GSGMLS = mandoc.1.sgml mdoc.3.sgml mdoc.7.sgml manuals.7.sgml \
+ mandoc_char.7.sgml man.7.sgml man.3.sgml
+SGMLS = index.sgml $(GSGMLS)
XSLS = ChangeLog.xsl
HTMLS = index.html ChangeLog.html mandoc.1.html mdoc.3.html \
man.3.html mdoc.7.html man.7.html mandoc_char.7.html \
@@ -68,7 +70,7 @@ MANS = mandoc.1 mdoc.3 mdoc.7 manuals.7 mandoc_char.7 \
man.7 man.3
BINS = mandoc
CLEAN = $(BINS) $(LNS) $(LLNS) $(LIBS) $(OBJS) $(HTMLS) \
- $(TARGZS) tags $(MD5S) $(XMLS) $(TEXTS)
+ $(TARGZS) tags $(MD5S) $(XMLS) $(TEXTS) $(GSGMLS)
INSTALL = $(SRCS) $(HEADS) Makefile $(MANS) $(SGMLS) $(STATICS) \
$(DATAS) $(XSLS) $(EXAMPLES)
@@ -226,19 +228,19 @@ mandoc: $(MAINOBJS) libmdoc.a libman.a
.1.1.txt:
./mandoc -Wall,error -fstrict $< | col -b > $@
-.1.1.html:
+.1.1.sgml:
./mandoc -Thtml -ostyle=style.css -Wall,error -fstrict $< > $@
.3.3.txt:
./mandoc -Wall,error -fstrict $< | col -b > $@
-.3.3.html:
+.3.3.sgml:
./mandoc -Thtml -ostyle=style.css -Wall,error -fstrict $< > $@
.7.7.txt:
./mandoc -Wall,error -fstrict $< | col -b > $@
-.7.7.html:
+.7.7.sgml:
./mandoc -Thtml -ostyle=style.css -Wall,error -fstrict $< > $@
.tar.gz.md5:
diff --git a/example.style.css b/example.style.css
index df2a675e..ff7833df 100644
--- a/example.style.css
+++ b/example.style.css
@@ -13,6 +13,7 @@ div.ssec-block { }
span.addr { text-decoration: underline; } /* Address (Ad). */
span.arg { font-style: italic; } /* Command argument (Ar). */
span.author { } /* Author name (An). */
+span.cmd { font-weight: bold; } /* Command (Cm). */
span.config { font-weight: bold; } /* Config statement (Cd). */
span.define { } /* Defines (Dv). */
span.desc { } /* Nd. After em-dash. */
@@ -21,14 +22,17 @@ span.emph { font-style: italic; } /* Emphasis (Em). */
span.env { } /* Environment variables (Ev). */
span.errno { } /* Error string (Er). */
span.farg { text-decoration: underline; } /* Function argument (Fa, Fn). */
+span.fname { text-decoration: underline; } /* Function name (Fa, Fn, Rv). */
span.file { font-style: italic; } /* File (Pa). */
span.flag { font-weight: bold; } /* Flag (Fl, Cm). */
+span.includes { font-weight: bold; } /* Header includes (In). */
span.macro { } /* Macro-ish thing (Fd). */
span.name { font-weight: bold; } /* Name of utility (Nm). */
span.opt { } /* Options (Op, Oo/Oc). */
span.type { font-style: italic; } /* Variable types (Vt, Ft, Fn). */
span.unix { } /* Unices (Ux, Ox, Nx, Fx, Bx, Bsx, Dx). */
span.utility { font-weight: bold; } /* Name of utility (Ex). */
+span.var { font-weight: bold; } /* Variables (Rv). */
a.link-man { } /* Manual links (Xr). */
a.link-sec { } /* Section links (Sx). */
diff --git a/mandoc_char.7 b/mandoc_char.7
index f9051f57..d940b57b 100644
--- a/mandoc_char.7
+++ b/mandoc_char.7
@@ -17,11 +17,13 @@
.Dd $Mdocdate$
.Dt MANDOC_CHAR 7
.Os
-.\" SECTION
+.
+.
.Sh NAME
.Nm mandoc_char
.Nd mandoc special characters
-.\" SECTION
+.
+.
.Sh DESCRIPTION
This documents the special characters and predefined strings accepted by
.Xr mandoc 1
@@ -29,12 +31,8 @@ to format
.Xr mdoc 7
and
.Xr man 7
-documents. Specific output devices of
-.Xr mandoc 1 ,
-dictated by the
-.Fl T Ns Ar output
-argument, will properly render these sequences.
-.\" PARAGRAPH
+documents.
+.
.Pp
Both
.Xr mdoc 7
@@ -72,108 +70,114 @@ and
.Sq \e*X
as
.Sq \e*[X] .
-.\" SECTION
+.
+.Pp
+Note that each output mode will have a different rendering of the
+characters. It's guaranteed that each input symbol will correspond to a
+(more or less) meaningful output rendering, regardless the mode.
+.
+.
.Sh Special Characters
These are the preferred input symbols for producing special characters.
-.\" PARAGRAPH
+.
.Pp
Spacing:
-.Bl -compact -tag -width Ds -offset indent
-.It \e~
-.Pq non-breaking, non-collapsing space
-.It \e
-.Pq breaking, non-collapsing n-width space
-.It \e^
-.Pq zero-width space
-.It \e%
-.Pq zero-width space
-.It \e&
-.Pq zero-width space
-.It \e|
-.Pq zero-width space
-.It \e0
-.Pq breaking, non-collapsing digit-width space
+.Bl -compact -offset indent -column 10n 20n
+.It Em Input Ta Em Description
+.It \e~ Ta non-breaking, non-collapsing space
+.It \e Ta breaking, non-collapsing n-width space
+.It \e^ Ta zero-width space
+.It \e% Ta zero-width space
+.It \e& Ta zero-width space
+.It \e| Ta zero-width space
+.It \e0 Ta breaking, non-collapsing digit-width space
.El
-.\" PARAGRAPH
+.
.Pp
Lines:
.Bl -compact -offset indent -column 10n 10n 10n
-.It \e(ba Ta \(ba Ta bar
-.It \e(br Ta \(br Ta box rule
-.It \e(ul Ta \(ul Ta underscore
-.It \e(rl Ta \(rl Ta overline
-.It \e(bb Ta \(bb Ta broken bar
-.It \e(sl Ta \(sl Ta forward slash
-.It \e(rs Ta \(rs Ta backward slash
+.It Em Input Ta Em Rendered Ta Em Description
+.It \e(ba Ta \(ba Ta bar
+.It \e(br Ta \(br Ta box rule
+.It \e(ul Ta \(ul Ta underscore
+.It \e(rl Ta \(rl Ta overline
+.It \e(bb Ta \(bb Ta broken bar
+.It \e(sl Ta \(sl Ta forward slash
+.It \e(rs Ta \(rs Ta backward slash
.El
-.\" PARAGRAPH
+.
.Pp
Text markers:
.Bl -compact -offset indent -column 10n 10n 10n
-.It \e(ci Ta \(ci Ta circle
-.It \e(bu Ta \(bu Ta bullet
-.It \e(dd Ta \(dd Ta double dagger
-.It \e(dg Ta \(dg Ta dagger
-.It \e(lz Ta \(lz Ta lozenge
-.It \e(sq Ta \(sq Ta white square
-.It \e(ps Ta \(ps Ta paragraph
-.It \e(sc Ta \(sc Ta section
-.It \e(lh Ta \(lh Ta left hand
-.It \e(rh Ta \(rh Ta right hand
-.It \e(at Ta \(at Ta at
-.It \e(sh Ta \(sh Ta hash (pound)
-.It \e(CR Ta \(CR Ta carriage return
-.It \e(OK Ta \(OK Ta check mark
+.It Em Input Ta Em Rendered Ta Em Description
+.It \e(ci Ta \(ci Ta circle
+.It \e(bu Ta \(bu Ta bullet
+.It \e(dd Ta \(dd Ta double dagger
+.It \e(dg Ta \(dg Ta dagger
+.It \e(lz Ta \(lz Ta lozenge
+.It \e(sq Ta \(sq Ta white square
+.It \e(ps Ta \(ps Ta paragraph
+.It \e(sc Ta \(sc Ta section
+.It \e(lh Ta \(lh Ta left hand
+.It \e(rh Ta \(rh Ta right hand
+.It \e(at Ta \(at Ta at
+.It \e(sh Ta \(sh Ta hash (pound)
+.It \e(CR Ta \(CR Ta carriage return
+.It \e(OK Ta \(OK Ta check mark
.El
-.\" PARAGRAPH
+.
.Pp
Legal symbols:
.Bl -compact -offset indent -column 10n 10n 10n
-.It \e(co Ta \(co Ta copyright
-.It \e(rg Ta \(rg Ta registered
-.It \e(tm Ta \(tm Ta trademarked
+.It Em Input Ta Em Rendered Ta Em Description
+.It \e(co Ta \(co Ta copyright
+.It \e(rg Ta \(rg Ta registered
+.It \e(tm Ta \(tm Ta trademarked
.El
-.\" PARAGRAPH
+.
.Pp
Punctuation:
.Bl -compact -offset indent -column 10n 10n 10n
-.It \e(em Ta \(em Ta em-dash
-.It \e(en Ta \(en Ta en-dash
-.It \e(hy Ta \(hy Ta hyphen
-.It \e\e Ta \\ Ta back-slash
-.It \ee Ta \e Ta back-slash
-.It \e. Ta \. Ta period
-.It \e(r! Ta \(r! Ta upside-down exclamation
-.It \e(r? Ta \(r? Ta upside-down question
+.It Em Input Ta Em Rendered Ta Em Description
+.It \e(em Ta \(em Ta em-dash
+.It \e(en Ta \(en Ta en-dash
+.It \e(hy Ta \(hy Ta hyphen
+.It \e\e Ta \\ Ta back-slash
+.It \ee Ta \e Ta back-slash
+.It \e. Ta \. Ta period
+.It \e(r! Ta \(r! Ta upside-down exclamation
+.It \e(r? Ta \(r? Ta upside-down question
.El
-.\" PARAGRAPH
+.
.Pp
Quotes:
.Bl -compact -offset indent -column 10n 10n 10n
-.It \e(Bq Ta \(Bq Ta right low double-quote
-.It \e(bq Ta \(bq Ta right low single-quote
-.It \e(lq Ta \(lq Ta left double-quote
-.It \e(rq Ta \(rq Ta right double-quote
-.It \e(oq Ta \(oq Ta left single-quote
-.It \e(cq Ta \(cq Ta right single-quote
-.It \e(aq Ta \(aq Ta apostrophe quote (text)
-.It \e(dq Ta \(dq Ta double quote (text)
-.It \e(Fo Ta \(Fo Ta left guillemet
-.It \e(Fc Ta \(Fc Ta right guillemet
-.It \e(fo Ta \(fo Ta left single guillemet
-.It \e(fc Ta \(fc Ta right single guillemet
+.It Em Input Ta Em Rendered Ta Em Description
+.It \e(Bq Ta \(Bq Ta right low double-quote
+.It \e(bq Ta \(bq Ta right low single-quote
+.It \e(lq Ta \(lq Ta left double-quote
+.It \e(rq Ta \(rq Ta right double-quote
+.It \e(oq Ta \(oq Ta left single-quote
+.It \e(cq Ta \(cq Ta right single-quote
+.It \e(aq Ta \(aq Ta apostrophe quote (text)
+.It \e(dq Ta \(dq Ta double quote (text)
+.It \e(Fo Ta \(Fo Ta left guillemet
+.It \e(Fc Ta \(Fc Ta right guillemet
+.It \e(fo Ta \(fo Ta left single guillemet
+.It \e(fc Ta \(fc Ta right single guillemet
.El
-.\" PARAGRAPH
+.
.Pp
Brackets:
.Bl -compact -offset indent -column 10n 10n 10n
-.It \e(lB Ta \(lB Ta left bracket
-.It \e(rB Ta \(rB Ta right bracket
-.It \e(lC Ta \(lC Ta left brace
-.It \e(rC Ta \(rC Ta right brace
-.It \e(la Ta \(la Ta left angle
-.It \e(ra Ta \(ra Ta right angle
-.It \e(bv Ta \(bv Ta brace extension
+.It Em Input Ta Em Rendered Ta Em Description
+.It \e(lB Ta \(lB Ta left bracket
+.It \e(rB Ta \(rB Ta right bracket
+.It \e(lC Ta \(lC Ta left brace
+.It \e(rC Ta \(rC Ta right brace
+.It \e(la Ta \(la Ta left angle
+.It \e(ra Ta \(ra Ta right angle
+.It \e(bv Ta \(bv Ta brace extension
.It \e[braceex] Ta \[braceex] Ta brace extension
.It \e[bracketlefttp] Ta \[bracketlefttp] Ta top-left hooked bracket
.It \e[bracketleftbp] Ta \[bracketleftbp] Ta bottom-left hooked bracket
@@ -181,18 +185,18 @@ Brackets:
.It \e[bracketrighttp] Ta \[bracketrighttp] Ta top-right hooked bracket
.It \e[bracketrightbp] Ta \[bracketrightbp] Ta bottom-right hooked bracket
.It \e[bracketrightex] Ta \[bracketrightex] Ta right hooked bracket extension
-.It \e(lt Ta \(lt Ta top-left hooked brace
+.It \e(lt Ta \(lt Ta top-left hooked brace
.It \e[bracelefttp] Ta \[bracelefttp] Ta top-left hooked brace
-.It \e(lk Ta \(lk Ta mid-left hooked brace
+.It \e(lk Ta \(lk Ta mid-left hooked brace
.It \e[braceleftmid] Ta \[braceleftmid] Ta mid-left hooked brace
-.It \e(lb Ta \(lb Ta bottom-left hooked brace
+.It \e(lb Ta \(lb Ta bottom-left hooked brace
.It \e[braceleftbp] Ta \[braceleftbp] Ta bottom-left hooked brace
.It \e[braceleftex] Ta \[braceleftex] Ta left hooked brace extension
-.It \e(rt Ta \(rt Ta top-left hooked brace
+.It \e(rt Ta \(rt Ta top-left hooked brace
.It \e[bracerighttp] Ta \[bracerighttp] Ta top-right hooked brace
-.It \e(rk Ta \(rk Ta mid-right hooked brace
+.It \e(rk Ta \(rk Ta mid-right hooked brace
.It \e[bracerightmid] Ta \[bracerightmid] Ta mid-right hooked brace
-.It \e(rb Ta \(rb Ta bottom-right hooked brace
+.It \e(rb Ta \(rb Ta bottom-right hooked brace
.It \e[bracerightbp] Ta \[bracerightbp] Ta bottom-right hooked brace
.It \e[bracerightex] Ta \[bracerightex] Ta right hooked brace extension
.It \e[parenlefttp] Ta \[parenlefttp] Ta top-left hooked parenthesis
@@ -202,333 +206,348 @@ Brackets:
.It \e[parenrightbp] Ta \[parenrightbp] Ta bottom-right hooked parenthesis
.It \e[parenrightex] Ta \[parenrightex] Ta right hooked parenthesis extension
.El
-.\" PARAGRAPH
+.
.Pp
Arrows:
.Bl -compact -offset indent -column 10n 10n 10n
-.It \e(<- Ta \(<- Ta left arrow
-.It \e(-> Ta \(-> Ta right arrow
-.It \e(<> Ta \(<> Ta left-right arrow
-.It \e(da Ta \(da Ta down arrow
-.It \e(ua Ta \(ua Ta up arrow
-.It \e(va Ta \(va Ta up-down arrow
-.It \e(lA Ta \(lA Ta left double-arrow
-.It \e(rA Ta \(rA Ta right double-arrow
-.It \e(hA Ta \(hA Ta left-right double-arrow
-.It \e(uA Ta \(uA Ta up double-arrow
-.It \e(dA Ta \(dA Ta down double-arrow
-.It \e(vA Ta \(vA Ta up-down double-arrow
+.It Em Input Ta Em Rendered Ta Em Description
+.It \e(<- Ta \(<- Ta left arrow
+.It \e(-> Ta \(-> Ta right arrow
+.It \e(<> Ta \(<> Ta left-right arrow
+.It \e(da Ta \(da Ta down arrow
+.It \e(ua Ta \(ua Ta up arrow
+.It \e(va Ta \(va Ta up-down arrow
+.It \e(lA Ta \(lA Ta left double-arrow
+.It \e(rA Ta \(rA Ta right double-arrow
+.It \e(hA Ta \(hA Ta left-right double-arrow
+.It \e(uA Ta \(uA Ta up double-arrow
+.It \e(dA Ta \(dA Ta down double-arrow
+.It \e(vA Ta \(vA Ta up-down double-arrow
.El
-.\" PARAGRAPH
+.
.Pp
Logical:
.Bl -compact -offset indent -column 10n 10n 10n
-.It \e(AN Ta \(AN Ta logical and
-.It \e(OR Ta \(OR Ta logical or
-.It \e(no Ta \(no Ta logical not
-.It \e[tno] Ta \[tno] Ta logical not (text)
-.It \e(te Ta \(te Ta existential quantifier
-.It \e(fa Ta \(fa Ta universal quantifier
-.It \e(st Ta \(st Ta such that
-.It \e(tf Ta \(tf Ta therefore
-.It \e(3d Ta \(3d Ta therefore
-.It \e(or Ta \(or Ta bitwise or
+.It Em Input Ta Em Rendered Ta Em Description
+.It \e(AN Ta \(AN Ta logical and
+.It \e(OR Ta \(OR Ta logical or
+.It \e(no Ta \(no Ta logical not
+.It \e[tno] Ta \[tno] Ta logical not (text)
+.It \e(te Ta \(te Ta existential quantifier
+.It \e(fa Ta \(fa Ta universal quantifier
+.It \e(st Ta \(st Ta such that
+.It \e(tf Ta \(tf Ta therefore
+.It \e(3d Ta \(3d Ta therefore
+.It \e(or Ta \(or Ta bitwise or
.El
-.\" PARAGRAPH
+.
.Pp
Mathematical:
.Bl -compact -offset indent -column 10n 10n 10n
-.It \e(pl Ta \(pl Ta plus
-.It \e(mi Ta \(mi Ta minus
-.It \e- Ta \- Ta minus (text)
-.It \e(-+ Ta \(-+ Ta minus-plus
-.It \e(+- Ta \(+- Ta plus-minus
-.It \e[t+-] Ta \[t+-] Ta plus-minus (text)
-.It \e(pc Ta \(pc Ta centre-dot
-.It \e(mu Ta \(mu Ta multiply
-.It \e[tmu] Ta \[tmu] Ta multiply (text)
-.It \e(c* Ta \(c* Ta circle-multiply
-.It \e(c+ Ta \(c+ Ta circle-plus
-.It \e(di Ta \(di Ta divide
-.It \e[tdi] Ta \[tdi] Ta divide (text)
-.It \e(f/ Ta \(f/ Ta fraction
-.It \e(** Ta \(** Ta asterisk
-.It \e(<= Ta \(<= Ta less-than-equal
-.It \e(>= Ta \(>= Ta greater-than-equal
-.It \e(<< Ta \(<< Ta much less
-.It \e(>> Ta \(>> Ta much greater
-.It \e(eq Ta \(eq Ta equal
-.It \e(!= Ta \(!= Ta not equal
-.It \e(== Ta \(== Ta equivalent
-.It \e(ne Ta \(ne Ta not equivalent
-.It \e(=~ Ta \(=~ Ta congruent
-.It \e(-~ Ta \(-~ Ta asymptotically congruent
-.It \e(ap Ta \(ap Ta asymptotically similar
-.It \e(~~ Ta \(~~ Ta approximately similar
-.It \e(~= Ta \(~= Ta approximately equal
-.It \e(pt Ta \(pt Ta proportionate
-.It \e(es Ta \(es Ta empty set
-.It \e(mo Ta \(mo Ta element
-.It \e(nm Ta \(nm Ta not element
-.It \e(sb Ta \(sb Ta proper subset
-.It \e(nb Ta \(nb Ta not subset
-.It \e(sp Ta \(sp Ta proper superset
-.It \e(nc Ta \(nc Ta not superset
-.It \e(ib Ta \(ib Ta reflexive subset
-.It \e(ip Ta \(ip Ta reflexive superset
-.It \e(ca Ta \(ca Ta intersection
-.It \e(cu Ta \(cu Ta union
-.It \e(/_ Ta \(/_ Ta angle
-.It \e(pp Ta \(pp Ta perpendicular
-.It \e(is Ta \(is Ta integral
+.It Em Input Ta Em Rendered Ta Em Description
+.It \e(pl Ta \(pl Ta plus
+.It \e(mi Ta \(mi Ta minus
+.It \e- Ta \- Ta minus (text)
+.It \e(-+ Ta \(-+ Ta minus-plus
+.It \e(+- Ta \(+- Ta plus-minus
+.It \e[t+-] Ta \[t+-] Ta plus-minus (text)
+.It \e(pc Ta \(pc Ta centre-dot
+.It \e(mu Ta \(mu Ta multiply
+.It \e[tmu] Ta \[tmu] Ta multiply (text)
+.It \e(c* Ta \(c* Ta circle-multiply
+.It \e(c+ Ta \(c+ Ta circle-plus
+.It \e(di Ta \(di Ta divide
+.It \e[tdi] Ta \[tdi] Ta divide (text)
+.It \e(f/ Ta \(f/ Ta fraction
+.It \e(** Ta \(** Ta asterisk
+.It \e(<= Ta \(<= Ta less-than-equal
+.It \e(>= Ta \(>= Ta greater-than-equal
+.It \e(<< Ta \(<< Ta much less
+.It \e(>> Ta \(>> Ta much greater
+.It \e(eq Ta \(eq Ta equal
+.It \e(!= Ta \(!= Ta not equal
+.It \e(== Ta \(== Ta equivalent
+.It \e(ne Ta \(ne Ta not equivalent
+.It \e(=~ Ta \(=~ Ta congruent
+.It \e(-~ Ta \(-~ Ta asymptotically congruent
+.It \e(ap Ta \(ap Ta asymptotically similar
+.It \e(~~ Ta \(~~ Ta approximately similar
+.It \e(~= Ta \(~= Ta approximately equal
+.It \e(pt Ta \(pt Ta proportionate
+.It \e(es Ta \(es Ta empty set
+.It \e(mo Ta \(mo Ta element
+.It \e(nm Ta \(nm Ta not element
+.It \e(sb Ta \(sb Ta proper subset
+.It \e(nb Ta \(nb Ta not subset
+.It \e(sp Ta \(sp Ta proper superset
+.It \e(nc Ta \(nc Ta not superset
+.It \e(ib Ta \(ib Ta reflexive subset
+.It \e(ip Ta \(ip Ta reflexive superset
+.It \e(ca Ta \(ca Ta intersection
+.It \e(cu Ta \(cu Ta union
+.It \e(/_ Ta \(/_ Ta angle
+.It \e(pp Ta \(pp Ta perpendicular
+.It \e(is Ta \(is Ta integral
.It \e[integral] Ta \[integral] Ta integral
.It \e[sum] Ta \[sum] Ta summation
.It \e[product] Ta \[product] Ta product
.It \e[coproduct] Ta \[coproduct] Ta coproduct
-.It \e(gr Ta \(gr Ta gradient
-.It \e(sr Ta \(sr Ta square root
-.It \e[sqrt] Ta \[sqrt] Ta square root
-.It \e(lc Ta \(lc Ta left-ceiling
-.It \e(rc Ta \(rc Ta right-ceiling
-.It \e(lf Ta \(lf Ta left-floor
-.It \e(rf Ta \(rf Ta right-floor
-.It \e(if Ta \(if Ta infinity
-.It \e(Ah Ta \(Ah Ta aleph
-.It \e(Im Ta \(Im Ta imaginary
-.It \e(Re Ta \(Re Ta real
-.It \e(pd Ta \(pd Ta partial differential
-.It \e(-h Ta \(-h Ta Planck constant over 2\(*p
+.It \e(gr Ta \(gr Ta gradient
+.It \e(sr Ta \(sr Ta square root
+.It \e[sqrt] Ta \[sqrt] Ta square root
+.It \e(lc Ta \(lc Ta left-ceiling
+.It \e(rc Ta \(rc Ta right-ceiling
+.It \e(lf Ta \(lf Ta left-floor
+.It \e(rf Ta \(rf Ta right-floor
+.It \e(if Ta \(if Ta infinity
+.It \e(Ah Ta \(Ah Ta aleph
+.It \e(Im Ta \(Im Ta imaginary
+.It \e(Re Ta \(Re Ta real
+.It \e(pd Ta \(pd Ta partial differential
+.It \e(-h Ta \(-h Ta Planck constant over 2\(*p
.El
-.\" PARAGRAPH
+.
.Pp
Ligatures:
.Bl -compact -offset indent -column 10n 10n 10n
-.It \e(ff Ta \(ff Ta ff ligature
-.It \e(fi Ta \(fi Ta fi ligature
-.It \e(fl Ta \(fl Ta fl ligature
-.It \e(Fi Ta \(Fi Ta ffi ligature
-.It \e(Fl Ta \(Fl Ta ffl ligature
-.It \e(AE Ta \(AE Ta AE
-.It \e(ae Ta \(ae Ta ae
-.It \e(OE Ta \(OE Ta OE
-.It \e(oe Ta \(oe Ta oe
-.It \e(ss Ta \(ss Ta German eszett
-.It \e(IJ Ta \(IJ Ta IJ ligature
-.It \e(ij Ta \(ij Ta ij ligature
+.It Em Input Ta Em Rendered Ta Em Description
+.It \e(ff Ta \(ff Ta ff ligature
+.It \e(fi Ta \(fi Ta fi ligature
+.It \e(fl Ta \(fl Ta fl ligature
+.It \e(Fi Ta \(Fi Ta ffi ligature
+.It \e(Fl Ta \(Fl Ta ffl ligature
+.It \e(AE Ta \(AE Ta AE
+.It \e(ae Ta \(ae Ta ae
+.It \e(OE Ta \(OE Ta OE
+.It \e(oe Ta \(oe Ta oe
+.It \e(ss Ta \(ss Ta German eszett
+.It \e(IJ Ta \(IJ Ta IJ ligature
+.It \e(ij Ta \(ij Ta ij ligature
.El
-.\" PARAGRAPH
+.
.Pp
Accents:
.Bl -compact -offset indent -column 10n 10n 10n
-.It \e(a" Ta \(a" Ta Hungarian umlaut
-.It \e(a- Ta \(a- Ta macron
-.It \e(a. Ta \(a. Ta dotted
-.It \e(a^ Ta \(a^ Ta circumflex
-.It \e(aa Ta \(aa Ta acute
-.It \e' Ta \' Ta acute
-.It \e(ga Ta \(ga Ta grave
-.It \e` Ta \` Ta grave
-.It \e(ab Ta \(ab Ta breve
-.It \e(ac Ta \(ac Ta cedilla
-.It \e(ad Ta \(ad Ta dieresis
-.It \e(ah Ta \(ah Ta caron
-.It \e(ao Ta \(ao Ta ring
-.It \e(a~ Ta \(a~ Ta tilde
-.It \e(ho Ta \(ho Ta ogonek
-.It \e(ha Ta \(ha Ta hat (text)
-.It \e(ti Ta \(ti Ta tilde (text)
+.It Em Input Ta Em Rendered Ta Em Description
+.It \e(a" Ta \(a" Ta Hungarian umlaut
+.It \e(a- Ta \(a- Ta macron
+.It \e(a. Ta \(a. Ta dotted
+.It \e(a^ Ta \(a^ Ta circumflex
+.It \e(aa Ta \(aa Ta acute
+.It \e' Ta \' Ta acute
+.It \e(ga Ta \(ga Ta grave
+.It \e` Ta \` Ta grave
+.It \e(ab Ta \(ab Ta breve
+.It \e(ac Ta \(ac Ta cedilla
+.It \e(ad Ta \(ad Ta dieresis
+.It \e(ah Ta \(ah Ta caron
+.It \e(ao Ta \(ao Ta ring
+.It \e(a~ Ta \(a~ Ta tilde
+.It \e(ho Ta \(ho Ta ogonek
+.It \e(ha Ta \(ha Ta hat (text)
+.It \e(ti Ta \(ti Ta tilde (text)
.El
-.\" PARAGRAPH
+.
.Pp
Accented letters:
.Bl -compact -offset indent -column 10n 10n 10n
-.It \e('A Ta \('A Ta acute A
-.It \e('E Ta \('E Ta acute E
-.It \e('I Ta \('I Ta acute I
-.It \e('O Ta \('O Ta acute O
-.It \e('U Ta \('U Ta acute U
-.It \e('a Ta \('a Ta acute a
-.It \e('e Ta \('e Ta acute e
-.It \e('i Ta \('i Ta acute i
-.It \e('o Ta \('o Ta acute o
-.It \e('u Ta \('u Ta acute u
-.It \e(`A Ta \(`A Ta grave A
-.It \e(`E Ta \(`E Ta grave E
-.It \e(`I Ta \(`I Ta grave I
-.It \e(`O Ta \(`O Ta grave O
-.It \e(`U Ta \(`U Ta grave U
-.It \e(`a Ta \(`a Ta grave a
-.It \e(`e Ta \(`e Ta grave e
-.It \e(`i Ta \(`i Ta grave i
-.It \e(`o Ta \(`i Ta grave o
-.It \e(`u Ta \(`u Ta grave u
-.It \e(~A Ta \(~A Ta tilde A
-.It \e(~N Ta \(~N Ta tilde N
-.It \e(~O Ta \(~O Ta tilde O
-.It \e(~a Ta \(~a Ta tilde a
-.It \e(~n Ta \(~n Ta tilde n
-.It \e(~o Ta \(~o Ta tilde o
-.It \e(:A Ta \(:A Ta dieresis A
-.It \e(:E Ta \(:E Ta dieresis E
-.It \e(:I Ta \(:I Ta dieresis I
-.It \e(:O Ta \(:O Ta dieresis O
-.It \e(:U Ta \(:U Ta dieresis U
-.It \e(:a Ta \(:a Ta dieresis a
-.It \e(:e Ta \(:e Ta dieresis e
-.It \e(:i Ta \(:i Ta dieresis i
-.It \e(:o Ta \(:o Ta dieresis o
-.It \e(:u Ta \(:u Ta dieresis u
-.It \e(:y Ta \(:y Ta dieresis y
-.It \e(^A Ta \(^A Ta circumflex A
-.It \e(^E Ta \(^E Ta circumflex E
-.It \e(^I Ta \(^I Ta circumflex I
-.It \e(^O Ta \(^O Ta circumflex O
-.It \e(^U Ta \(^U Ta circumflex U
-.It \e(^a Ta \(^a Ta circumflex a
-.It \e(^e Ta \(^e Ta circumflex e
-.It \e(^i Ta \(^i Ta circumflex i
-.It \e(^o Ta \(^o Ta circumflex o
-.It \e(^u Ta \(^u Ta circumflex u
-.It \e(,C Ta \(,C Ta cedilla C
-.It \e(,c Ta \(,c Ta cedilla c
-.It \e(/L Ta \(/L Ta stroke L
-.It \e(/l Ta \(/l Ta stroke l
-.It \e(/O Ta \(/O Ta stroke O
-.It \e(/o Ta \(/o Ta stroke o
-.It \e(oA Ta \(oA Ta ring A
-.It \e(oa Ta \(oa Ta ring a
+.It Em Input Ta Em Rendered Ta Em Description
+.It \e('A Ta \('A Ta acute A
+.It \e('E Ta \('E Ta acute E
+.It \e('I Ta \('I Ta acute I
+.It \e('O Ta \('O Ta acute O
+.It \e('U Ta \('U Ta acute U
+.It \e('a Ta \('a Ta acute a
+.It \e('e Ta \('e Ta acute e
+.It \e('i Ta \('i Ta acute i
+.It \e('o Ta \('o Ta acute o
+.It \e('u Ta \('u Ta acute u
+.It \e(`A Ta \(`A Ta grave A
+.It \e(`E Ta \(`E Ta grave E
+.It \e(`I Ta \(`I Ta grave I
+.It \e(`O Ta \(`O Ta grave O
+.It \e(`U Ta \(`U Ta grave U
+.It \e(`a Ta \(`a Ta grave a
+.It \e(`e Ta \(`e Ta grave e
+.It \e(`i Ta \(`i Ta grave i
+.It \e(`o Ta \(`i Ta grave o
+.It \e(`u Ta \(`u Ta grave u
+.It \e(~A Ta \(~A Ta tilde A
+.It \e(~N Ta \(~N Ta tilde N
+.It \e(~O Ta \(~O Ta tilde O
+.It \e(~a Ta \(~a Ta tilde a
+.It \e(~n Ta \(~n Ta tilde n
+.It \e(~o Ta \(~o Ta tilde o
+.It \e(:A Ta \(:A Ta dieresis A
+.It \e(:E Ta \(:E Ta dieresis E
+.It \e(:I Ta \(:I Ta dieresis I
+.It \e(:O Ta \(:O Ta dieresis O
+.It \e(:U Ta \(:U Ta dieresis U
+.It \e(:a Ta \(:a Ta dieresis a
+.It \e(:e Ta \(:e Ta dieresis e
+.It \e(:i Ta \(:i Ta dieresis i
+.It \e(:o Ta \(:o Ta dieresis o
+.It \e(:u Ta \(:u Ta dieresis u
+.It \e(:y Ta \(:y Ta dieresis y
+.It \e(^A Ta \(^A Ta circumflex A
+.It \e(^E Ta \(^E Ta circumflex E
+.It \e(^I Ta \(^I Ta circumflex I
+.It \e(^O Ta \(^O Ta circumflex O
+.It \e(^U Ta \(^U Ta circumflex U
+.It \e(^a Ta \(^a Ta circumflex a
+.It \e(^e Ta \(^e Ta circumflex e
+.It \e(^i Ta \(^i Ta circumflex i
+.It \e(^o Ta \(^o Ta circumflex o
+.It \e(^u Ta \(^u Ta circumflex u
+.It \e(,C Ta \(,C Ta cedilla C
+.It \e(,c Ta \(,c Ta cedilla c
+.It \e(/L Ta \(/L Ta stroke L
+.It \e(/l Ta \(/l Ta stroke l
+.It \e(/O Ta \(/O Ta stroke O
+.It \e(/o Ta \(/o Ta stroke o
+.It \e(oA Ta \(oA Ta ring A
+.It \e(oa Ta \(oa Ta ring a
.El
-.\" PARAGRAPH
+.
.Pp
Special letters:
.Bl -compact -offset indent -column 10n 10n 10n
-.It \e(-D Ta \(-D Ta Eth
-.It \e(Sd Ta \(Sd Ta eth
-.It \e(TP Ta \(TP Ta Thorn
-.It \e(Tp Ta \(Tp Ta thorn
-.It \e(.i Ta \(.i Ta dotless i
-.It \e(.j Ta \(.j Ta dotless j
+.It Em Input Ta Em Rendered Ta Em Description
+.It \e(-D Ta \(-D Ta Eth
+.It \e(Sd Ta \(Sd Ta eth
+.It \e(TP Ta \(TP Ta Thorn
+.It \e(Tp Ta \(Tp Ta thorn
+.It \e(.i Ta \(.i Ta dotless i
+.It \e(.j Ta \(.j Ta dotless j
.El
-.\" PARAGRAPH
+.
.Pp
Currency:
.Bl -compact -offset indent -column 10n 10n 10n
-.It \e(Do Ta \(Do Ta dollar
-.It \e(ct Ta \(ct Ta cent
-.It \e(Eu Ta \(Eu Ta Euro symbol
-.It \e(eu Ta \(eu Ta Euro symbol
-.It \e(Ye Ta \(Ye Ta yen
-.It \e(Po Ta \(Po Ta pound
-.It \e(Cs Ta \(Cs Ta Scandinavian
-.It \e(Fn Ta \(Fn Ta florin
+.It Em Input Ta Em Rendered Ta Em Description
+.It \e(Do Ta \(Do Ta dollar
+.It \e(ct Ta \(ct Ta cent
+.It \e(Eu Ta \(Eu Ta Euro symbol
+.It \e(eu Ta \(eu Ta Euro symbol
+.It \e(Ye Ta \(Ye Ta yen
+.It \e(Po Ta \(Po Ta pound
+.It \e(Cs Ta \(Cs Ta Scandinavian
+.It \e(Fn Ta \(Fn Ta florin
.El
-.\" PARAGRAPH
+.
.Pp
Units:
.Bl -compact -offset indent -column 10n 10n 10n
-.It \e(de Ta \(de Ta degree
-.It \e(%0 Ta \(%0 Ta per-thousand
-.It \e(fm Ta \(fm Ta minute
-.It \e(sd Ta \(sd Ta second
-.It \e(mc Ta \(mc Ta micro
+.It Em Input Ta Em Rendered Ta Em Description
+.It \e(de Ta \(de Ta degree
+.It \e(%0 Ta \(%0 Ta per-thousand
+.It \e(fm Ta \(fm Ta minute
+.It \e(sd Ta \(sd Ta second
+.It \e(mc Ta \(mc Ta micro
.El
-.\" PARAGRAPH
+.
.Pp
Greek letters:
.Bl -compact -offset indent -column 10n 10n 10n
-.It \e(*A Ta \(*A Ta Alpha
-.It \e(*B Ta \(*B Ta Beta
-.It \e(*G Ta \(*G Ta Gamma
-.It \e(*D Ta \(*D Ta Delta
-.It \e(*E Ta \(*E Ta Epsilon
-.It \e(*Z Ta \(*Z Ta Zeta
-.It \e(*Y Ta \(*Y Ta Eta
-.It \e(*H Ta \(*H Ta Theta
-.It \e(*I Ta \(*I Ta Iota
-.It \e(*K Ta \(*K Ta Kappa
-.It \e(*L Ta \(*L Ta Lambda
-.It \e(*M Ta \(*M Ta Mu
-.It \e(*N Ta \(*N Ta Nu
-.It \e(*C Ta \(*C Ta Xi
-.It \e(*O Ta \(*O Ta Omicron
-.It \e(*P Ta \(*P Ta Pi
-.It \e(*R Ta \(*R Ta Rho
-.It \e(*S Ta \(*S Ta Sigma
-.It \e(*T Ta \(*T Ta Tau
-.It \e(*U Ta \(*U Ta Upsilon
-.It \e(*F Ta \(*F Ta Phi
-.It \e(*X Ta \(*X Ta Chi
-.It \e(*Q Ta \(*Q Ta Psi
-.It \e(*W Ta \(*W Ta Omega
-.It \e(*a Ta \(*a Ta alpha
-.It \e(*b Ta \(*b Ta beta
-.It \e(*g Ta \(*g Ta gamma
-.It \e(*d Ta \(*d Ta delta
-.It \e(*e Ta \(*e Ta epsilon
-.It \e(*z Ta \(*z Ta zeta
-.It \e(*y Ta \(*y Ta eta
-.It \e(*h Ta \(*h Ta theta
-.It \e(*i Ta \(*i Ta iota
-.It \e(*k Ta \(*k Ta kappa
-.It \e(*l Ta \(*l Ta lambda
-.It \e(*m Ta \(*m Ta mu
-.It \e(*n Ta \(*n Ta nu
-.It \e(*c Ta \(*c Ta xi
-.It \e(*o Ta \(*o Ta omicron
-.It \e(*p Ta \(*p Ta pi
-.It \e(*r Ta \(*r Ta rho
-.It \e(*s Ta \(*s Ta sigma
-.It \e(*t Ta \(*t Ta tau
-.It \e(*u Ta \(*u Ta upsilon
-.It \e(*f Ta \(*f Ta phi
-.It \e(*x Ta \(*x Ta chi
-.It \e(*q Ta \(*q Ta psi
-.It \e(*w Ta \(*w Ta omega
-.It \e(+h Ta \(+h Ta theta variant
-.It \e(+f Ta \(+f Ta phi variant
-.It \e(+p Ta \(+p Ta pi variant
-.It \e(+e Ta \(+e Ta epsilon variant
-.It \e(ts Ta \(ts Ta sigma terminal
+.It Em Input Ta Em Rendered Ta Em Description
+.It \e(*A Ta \(*A Ta Alpha
+.It \e(*B Ta \(*B Ta Beta
+.It \e(*G Ta \(*G Ta Gamma
+.It \e(*D Ta \(*D Ta Delta
+.It \e(*E Ta \(*E Ta Epsilon
+.It \e(*Z Ta \(*Z Ta Zeta
+.It \e(*Y Ta \(*Y Ta Eta
+.It \e(*H Ta \(*H Ta Theta
+.It \e(*I Ta \(*I Ta Iota
+.It \e(*K Ta \(*K Ta Kappa
+.It \e(*L Ta \(*L Ta Lambda
+.It \e(*M Ta \(*M Ta Mu
+.It \e(*N Ta \(*N Ta Nu
+.It \e(*C Ta \(*C Ta Xi
+.It \e(*O Ta \(*O Ta Omicron
+.It \e(*P Ta \(*P Ta Pi
+.It \e(*R Ta \(*R Ta Rho
+.It \e(*S Ta \(*S Ta Sigma
+.It \e(*T Ta \(*T Ta Tau
+.It \e(*U Ta \(*U Ta Upsilon
+.It \e(*F Ta \(*F Ta Phi
+.It \e(*X Ta \(*X Ta Chi
+.It \e(*Q Ta \(*Q Ta Psi
+.It \e(*W Ta \(*W Ta Omega
+.It \e(*a Ta \(*a Ta alpha
+.It \e(*b Ta \(*b Ta beta
+.It \e(*g Ta \(*g Ta gamma
+.It \e(*d Ta \(*d Ta delta
+.It \e(*e Ta \(*e Ta epsilon
+.It \e(*z Ta \(*z Ta zeta
+.It \e(*y Ta \(*y Ta eta
+.It \e(*h Ta \(*h Ta theta
+.It \e(*i Ta \(*i Ta iota
+.It \e(*k Ta \(*k Ta kappa
+.It \e(*l Ta \(*l Ta lambda
+.It \e(*m Ta \(*m Ta mu
+.It \e(*n Ta \(*n Ta nu
+.It \e(*c Ta \(*c Ta xi
+.It \e(*o Ta \(*o Ta omicron
+.It \e(*p Ta \(*p Ta pi
+.It \e(*r Ta \(*r Ta rho
+.It \e(*s Ta \(*s Ta sigma
+.It \e(*t Ta \(*t Ta tau
+.It \e(*u Ta \(*u Ta upsilon
+.It \e(*f Ta \(*f Ta phi
+.It \e(*x Ta \(*x Ta chi
+.It \e(*q Ta \(*q Ta psi
+.It \e(*w Ta \(*w Ta omega
+.It \e(+h Ta \(+h Ta theta variant
+.It \e(+f Ta \(+f Ta phi variant
+.It \e(+p Ta \(+p Ta pi variant
+.It \e(+e Ta \(+e Ta epsilon variant
+.It \e(ts Ta \(ts Ta sigma terminal
.El
-.\" SECTION
+.
+.
.Sh PREDEFINED STRINGS
These are not recommended for use, as they differ across
implementations:
+.
.Pp
.Bl -compact -offset indent -column 10n 10n 10n
-.It \e*(Ba Ta \*(Ba Ta vertical bar
-.It \e*(Ne Ta \*(Ne Ta not equal
-.It \e*(Ge Ta \*(Ge Ta greater-than-equal
-.It \e*(Le Ta \*(Le Ta less-than-equal
-.It \e*(Gt Ta \*(Gt Ta greater-than
-.It \e*(Lt Ta \*(Lt Ta less-than
-.It \e*(Pm Ta \*(Pm Ta plus-minus
-.It \e*(If Ta \*(If Ta infinity
-.It \e*(Pi Ta \*(Pi Ta pi
-.It \e*(Na Ta \*(Na Ta NaN
-.It \e*(Am Ta \*(Am Ta ampersand
-.It \e*R Ta \*R Ta restricted mark
-.It \e*(Tm Ta \*(Tm Ta trade mark
-.It \e*q Ta \*q Ta double-quote
-.It \e*(Rq Ta \*(Rq Ta right-double-quote
-.It \e*(Lq Ta \*(Lq Ta left-double-quote
-.It \e*(lp Ta \*(lp Ta right-parenthesis
-.It \e*(rp Ta \*(rp Ta left-parenthesis
-.It \e*(lq Ta \*(lq Ta left double-quote
-.It \e*(rq Ta \*(rq Ta right double-quote
-.It \e*(ua Ta \*(ua Ta up arrow
-.It \e*(va Ta \*(va Ta up-down arrow
-.It \e*(<= Ta \*(<= Ta less-than-equal
-.It \e*(>= Ta \*(>= Ta greater-than-equal
-.It \e*(aa Ta \*(aa Ta acute
-.It \e*(ga Ta \*(ga Ta grave
+.It Em Input Ta Em Rendered Ta Em Description
+.It \e*(Ba Ta \*(Ba Ta vertical bar
+.It \e*(Ne Ta \*(Ne Ta not equal
+.It \e*(Ge Ta \*(Ge Ta greater-than-equal
+.It \e*(Le Ta \*(Le Ta less-than-equal
+.It \e*(Gt Ta \*(Gt Ta greater-than
+.It \e*(Lt Ta \*(Lt Ta less-than
+.It \e*(Pm Ta \*(Pm Ta plus-minus
+.It \e*(If Ta \*(If Ta infinity
+.It \e*(Pi Ta \*(Pi Ta pi
+.It \e*(Na Ta \*(Na Ta NaN
+.It \e*(Am Ta \*(Am Ta ampersand
+.It \e*R Ta \*R Ta restricted mark
+.It \e*(Tm Ta \*(Tm Ta trade mark
+.It \e*q Ta \*q Ta double-quote
+.It \e*(Rq Ta \*(Rq Ta right-double-quote
+.It \e*(Lq Ta \*(Lq Ta left-double-quote
+.It \e*(lp Ta \*(lp Ta right-parenthesis
+.It \e*(rp Ta \*(rp Ta left-parenthesis
+.It \e*(lq Ta \*(lq Ta left double-quote
+.It \e*(rq Ta \*(rq Ta right double-quote
+.It \e*(ua Ta \*(ua Ta up arrow
+.It \e*(va Ta \*(va Ta up-down arrow
+.It \e*(<= Ta \*(<= Ta less-than-equal
+.It \e*(>= Ta \*(>= Ta greater-than-equal
+.It \e*(aa Ta \*(aa Ta acute
+.It \e*(ga Ta \*(ga Ta grave
.El
-.\" SECTION
+.
+.
.Sh COMPATIBILITY
This section documents compatibility of
.Nm
with older or existing versions of
.Xr groff 1 .
+.
.Pp
The following render differently in
.Fl T Ns Ar ascii
@@ -537,6 +556,7 @@ output mode:
\e(ss, \e(nm, \e(nb, \e(nc, \e(ib, \e(ip, \e(pp, \e[sum], \e[product],
\e[coproduct], \e(gr, \e(-h, \e(a.
.Ed
+.
.Pp
The following render differently in
.Fl T Ns Ar html
@@ -544,16 +564,19 @@ output mode:
.Bd -ragged -offset indent
\e(~=, \e(nb, \e(nc
.Ed
+.
.Pp
Finally, the following have been omitted by being poorly documented or
having no known representation:
.Bd -ragged -offset indent
\e[radicalex], \e[sqrtex], \e(ru
.Ed
-.\" SECTION
+.
+.
.Sh SEE ALSO
.Xr mandoc 1
-.\" SECTION
+.
+.
.Sh AUTHORS
The
.Nm
diff --git a/mdoc_html.c b/mdoc_html.c
index 6840445d..87f12262 100644
--- a/mdoc_html.c
+++ b/mdoc_html.c
@@ -67,8 +67,11 @@ static int mdoc_ar_pre(MDOC_ARGS);
static int mdoc_bd_pre(MDOC_ARGS);
static void mdoc_bl_post(MDOC_ARGS);
static int mdoc_bl_pre(MDOC_ARGS);
+static void mdoc_bq_post(MDOC_ARGS);
+static int mdoc_bq_pre(MDOC_ARGS);
static void mdoc_brq_post(MDOC_ARGS);
static int mdoc_brq_pre(MDOC_ARGS);
+static int mdoc_bx_pre(MDOC_ARGS);
static int mdoc_cd_pre(MDOC_ARGS);
static int mdoc_d1_pre(MDOC_ARGS);
static void mdoc_dq_post(MDOC_ARGS);
@@ -83,6 +86,10 @@ static int mdoc_em_pre(MDOC_ARGS);
static int mdoc_er_pre(MDOC_ARGS);
static int mdoc_ev_pre(MDOC_ARGS);
static int mdoc_ex_pre(MDOC_ARGS);
+static void mdoc_fo_post(MDOC_ARGS);
+static int mdoc_fo_pre(MDOC_ARGS);
+static int mdoc_ic_pre(MDOC_ARGS);
+static int mdoc_in_pre(MDOC_ARGS);
static int mdoc_it_pre(MDOC_ARGS);
static int mdoc_lk_pre(MDOC_ARGS);
static int mdoc_mt_pre(MDOC_ARGS);
@@ -96,12 +103,14 @@ static void mdoc_pq_post(MDOC_ARGS);
static int mdoc_pq_pre(MDOC_ARGS);
static void mdoc_qq_post(MDOC_ARGS);
static int mdoc_qq_pre(MDOC_ARGS);
+static int mdoc_rv_pre(MDOC_ARGS);
static int mdoc_sh_pre(MDOC_ARGS);
static int mdoc_sp_pre(MDOC_ARGS);
static void mdoc_sq_post(MDOC_ARGS);
static int mdoc_sq_pre(MDOC_ARGS);
static int mdoc_ss_pre(MDOC_ARGS);
static int mdoc_sx_pre(MDOC_ARGS);
+static int mdoc_va_pre(MDOC_ARGS);
static int mdoc_vt_pre(MDOC_ARGS);
static int mdoc_xr_pre(MDOC_ARGS);
static int mdoc_xx_pre(MDOC_ARGS);
@@ -140,17 +149,17 @@ static const struct htmlmdoc mdocs[MDOC_MAX] = {
{mdoc_fl_pre, NULL}, /* Fl */
{mdoc_fn_pre, NULL}, /* Fn */
{mdoc_ft_pre, NULL}, /* Ft */
- {NULL, NULL}, /* Ic */
- {NULL, NULL}, /* In */
+ {mdoc_ic_pre, NULL}, /* Ic */
+ {mdoc_in_pre, NULL}, /* In */
{NULL, NULL}, /* Li */
{mdoc_nd_pre, NULL}, /* Nd */
{mdoc_nm_pre, NULL}, /* Nm */
{mdoc_op_pre, mdoc_op_post}, /* Op */
{NULL, NULL}, /* Ot */
{mdoc_pa_pre, NULL}, /* Pa */
- {NULL, NULL}, /* Rv */
+ {mdoc_rv_pre, NULL}, /* Rv */
{NULL, NULL}, /* St */
- {NULL, NULL}, /* Va */
+ {mdoc_va_pre, NULL}, /* Va */
{mdoc_vt_pre, NULL}, /* Vt */
{mdoc_xr_pre, NULL}, /* Xr */
{NULL, NULL}, /* %A */
@@ -170,13 +179,13 @@ static const struct htmlmdoc mdocs[MDOC_MAX] = {
{NULL, NULL}, /* At */
{NULL, NULL}, /* Bc */
{NULL, NULL}, /* Bf */
- {NULL, NULL}, /* Bo */
- {NULL, NULL}, /* Bq */
+ {mdoc_bq_pre, mdoc_bq_post}, /* Bo */
+ {mdoc_bq_pre, mdoc_bq_post}, /* Bq */
{mdoc_xx_pre, NULL}, /* Bsx */
- {NULL, NULL}, /* Bx */
+ {mdoc_bx_pre, NULL}, /* Bx */
{NULL, NULL}, /* Db */
{NULL, NULL}, /* Dc */
- {NULL, NULL}, /* Do */
+ {mdoc_dq_pre, mdoc_dq_post}, /* Do */
{mdoc_dq_pre, mdoc_dq_post}, /* Dq */
{NULL, NULL}, /* Ec */
{NULL, NULL}, /* Ef */
@@ -193,7 +202,7 @@ static const struct htmlmdoc mdocs[MDOC_MAX] = {
{mdoc_pq_pre, mdoc_pq_post}, /* Po */
{mdoc_pq_pre, mdoc_pq_post}, /* Pq */
{NULL, NULL}, /* Qc */
- {NULL, NULL}, /* Ql */
+ {mdoc_sq_pre, mdoc_sq_post}, /* Ql */
{mdoc_qq_pre, mdoc_qq_post}, /* Qo */
{mdoc_qq_pre, mdoc_qq_post}, /* Qq */
{NULL, NULL}, /* Re */
@@ -208,9 +217,9 @@ static const struct htmlmdoc mdocs[MDOC_MAX] = {
{mdoc_xx_pre, NULL}, /* Ux */
{NULL, NULL}, /* Xc */
{NULL, NULL}, /* Xo */
- {NULL, NULL}, /* Fo */
+ {mdoc_fo_pre, mdoc_fo_post}, /* Fo */
{NULL, NULL}, /* Fc */
- {NULL, NULL}, /* Oo */
+ {mdoc_op_pre, mdoc_op_post}, /* Oo */
{NULL, NULL}, /* Oc */
{NULL, NULL}, /* Bk */
{NULL, NULL}, /* Ek */
@@ -827,6 +836,29 @@ mdoc_xx_pre(MDOC_ARGS)
/* ARGSUSED */
static int
+mdoc_bx_pre(MDOC_ARGS)
+{
+ const struct mdoc_node *nn;
+ struct htmlpair tag;
+
+ tag.key = ATTR_CLASS;
+ tag.val = "unix";
+
+ print_otag(h, TAG_SPAN, 1, &tag);
+
+ for (nn = n->child; nn; nn = nn->next)
+ print_mdoc_node(m, nn, h);
+
+ if (n->child)
+ h->flags |= HTML_NOSPACE;
+
+ print_text(h, "BSD");
+ return(0);
+}
+
+
+/* ARGSUSED */
+static int
mdoc_tbl_block_pre(MDOC_ARGS, int t, int w, int o, int c)
{
struct htmlpair tag;
@@ -892,7 +924,8 @@ mdoc_tbl_head_pre(MDOC_ARGS, int t, int w)
print_otag(h, TAG_DIV, 1, &tag);
break;
default:
- buffmt("margin-left: -%dem; width: %dem;", w, w);
+ buffmt("margin-left: -%dem; min-width: %dem;",
+ w, w ? w - 1 : 0);
bufcat("clear: left;");
if (n->next && n->next->child)
bufcat("float: left;");
@@ -920,7 +953,7 @@ mdoc_tbl_head_pre(MDOC_ARGS, int t, int w)
print_text(h, "\\(en");
return(0);
case (MDOC_Hyphen):
- print_text(h, "\\-");
+ print_text(h, "\\(hy");
return(0);
case (MDOC_Bullet):
print_text(h, "\\(bu");
@@ -1536,7 +1569,7 @@ mdoc_ft_pre(MDOC_ARGS)
if (SEC_SYNOPSIS == n->sec) {
if (n->prev && MDOC_Fo == n->prev->tok) {
tag.key = ATTR_STYLE;
- tag.val = "magin-bottom: 1em;";
+ tag.val = "margin-top: 1em;";
print_otag(h, TAG_DIV, 1, &tag);
} else
print_otag(h, TAG_DIV, 0, NULL);
@@ -1569,6 +1602,8 @@ mdoc_fn_pre(MDOC_ARGS)
tag.key = ATTR_CLASS;
tag.val = "type";
+ /* FIXME: can be "type funcname" "type varname"... */
+
t = print_otag(h, TAG_SPAN, 1, &tag);
print_text(h, n->child->string);
print_tagq(h, t);
@@ -1700,3 +1735,174 @@ mdoc_mt_pre(MDOC_ARGS)
return(0);
}
+
+
+/* ARGSUSED */
+static int
+mdoc_fo_pre(MDOC_ARGS)
+{
+ struct htmlpair tag;
+
+ if (MDOC_BODY == n->type) {
+ h->flags |= HTML_NOSPACE;
+ print_text(h, "(");
+ h->flags |= HTML_NOSPACE;
+ return(1);
+ } else if (MDOC_BLOCK == n->type)
+ return(1);
+
+ tag.key = ATTR_CLASS;
+ tag.val = "fname";
+ print_otag(h, TAG_SPAN, 1, &tag);
+ return(1);
+}
+
+
+/* ARGSUSED */
+static void
+mdoc_fo_post(MDOC_ARGS)
+{
+ if (MDOC_BODY != n->type)
+ return;
+ h->flags |= HTML_NOSPACE;
+ print_text(h, ")");
+ h->flags |= HTML_NOSPACE;
+ print_text(h, ";");
+}
+
+
+/* ARGSUSED */
+static int
+mdoc_in_pre(MDOC_ARGS)
+{
+ const struct mdoc_node *nn;
+ struct htmlpair tag;
+
+ if (SEC_SYNOPSIS == n->sec) {
+ if (n->next && MDOC_In != n->next->tok) {
+ tag.key = ATTR_STYLE;
+ tag.val = "margin-bottom: 1em;";
+ print_otag(h, TAG_DIV, 1, &tag);
+ } else
+ print_otag(h, TAG_DIV, 0, NULL);
+ }
+
+ tag.key = ATTR_CLASS;
+ tag.val = "includes";
+
+ print_otag(h, TAG_SPAN, 1, &tag);
+
+ if (SEC_SYNOPSIS == n->sec)
+ print_text(h, "#include");
+
+ print_text(h, "<");
+ h->flags |= HTML_NOSPACE;
+
+ /* XXX -- see warning in termp_in_post(). */
+
+ for (nn = n->child; nn; nn = nn->next)
+ print_mdoc_node(m, nn, h);
+
+ h->flags |= HTML_NOSPACE;
+ print_text(h, ">");
+
+ return(0);
+}
+
+
+/* ARGSUSED */
+static int
+mdoc_ic_pre(MDOC_ARGS)
+{
+ struct htmlpair tag;
+
+ tag.key = ATTR_CLASS;
+ tag.val = "cmd";
+
+ print_otag(h, TAG_SPAN, 1, &tag);
+ return(1);
+}
+
+
+/* ARGSUSED */
+static int
+mdoc_rv_pre(MDOC_ARGS)
+{
+ const struct mdoc_node *nn;
+ struct htmlpair tag;
+ struct tag *t;
+
+ print_otag(h, TAG_DIV, 0, NULL);
+
+ print_text(h, "The");
+
+ for (nn = n->child; nn; nn = nn->next) {
+ tag.key = ATTR_CLASS;
+ tag.val = "fname";
+ t = print_otag(h, TAG_SPAN, 1, &tag);
+ print_text(h, nn->string);
+ print_tagq(h, t);
+
+ h->flags |= HTML_NOSPACE;
+ if (nn->next && NULL == nn->next->next)
+ print_text(h, "(), and");
+ else if (nn->next)
+ print_text(h, "(),");
+ else
+ print_text(h, "()");
+ }
+
+ if (n->child->next)
+ print_text(h, "functions return");
+ else
+ print_text(h, "function returns");
+
+ print_text(h, "the value 0 if successful; otherwise the value "
+ "-1 is returned and the global variable");
+
+ tag.key = ATTR_CLASS;
+ tag.val = "var";
+ t = print_otag(h, TAG_SPAN, 1, &tag);
+ print_text(h, "errno");
+ print_tagq(h, t);
+ print_text(h, "is set to indicate the error.");
+ return(0);
+}
+
+
+/* ARGSUSED */
+static int
+mdoc_va_pre(MDOC_ARGS)
+{
+ struct htmlpair tag;
+
+ tag.key = ATTR_CLASS;
+ tag.val = "var";
+ print_otag(h, TAG_SPAN, 1, &tag);
+ return(1);
+}
+
+
+/* ARGSUSED */
+static int
+mdoc_bq_pre(MDOC_ARGS)
+{
+
+ if (MDOC_BODY != n->type)
+ return(1);
+ print_text(h, "\\(lB");
+ h->flags |= HTML_NOSPACE;
+ return(1);
+}
+
+
+/* ARGSUSED */
+static void
+mdoc_bq_post(MDOC_ARGS)
+{
+
+ if (MDOC_BODY != n->type)
+ return;
+ h->flags |= HTML_NOSPACE;
+ print_text(h, "\\(rB");
+}
diff --git a/mdoc_term.c b/mdoc_term.c
index 0b270fa3..bef0329d 100644
--- a/mdoc_term.c
+++ b/mdoc_term.c
@@ -1842,6 +1842,7 @@ termp_in_post(DECL_ARGS)
{
p->bold++;
+ p->flags |= TERMP_NOSPACE;
term_word(p, ">");
p->bold--;
diff --git a/style.css b/style.css
index ee7de835..a27f6efd 100644
--- a/style.css
+++ b/style.css
@@ -7,15 +7,20 @@ span.sec-head { font-weight: bold; color: blue; }
span.ssec-head { font-weight: bold; color: blue; }
span.addr { text-decoration: underline; }
span.arg { font-style: italic; }
+span.cmd { font-weight: bold; }
span.config { font-weight: bold; }
span.diag { font-weight: bold; }
span.emph { font-style: italic; }
span.farg { text-decoration: underline; }
+span.fname { font-style: italic; }
span.file { font-style: italic; }
span.flag { font-weight: bold; }
+span.includes { font-weight: bold; }
span.name { font-weight: bold; }
span.type { font-style: italic; }
span.utility { font-weight: bold; }
+span.var { font-weight: bold; }
+
table.header { border-bottom: 1px dotted #cccccc; }
table.footer { border-top: 1px dotted #cccccc; }