tr: add .fmap to map character names to glyphs
font: new syntax for defining characters and kerning pairs
tr: map font name to font position earlier for .ochar
tr: add .ochar to define a characters for a font
in: do not fclose(stdin), even if it has been renamed with .lf
tr: use cdef_*() for char definition and cmap_*() for char translation
ren: disable .char for diverted text
tr: basic .char implementation for glyph definitions
map: more compact mapping of register names
wb: remove long character names for the string passed to hyphenate()
char: add utf8one() to check if a string is a single utf-8 character
hyph: replace non-alphabetic characters with '.' in hyword()
ren: add .cl request to change color, just like \m[]
hyph: drop non-alpha characters for HY_FIRST2 and HY_FINAL2
roff.h: increase the maximum number of ligatures and kerning pairs
ren: disable ligatures and pairwise kerning when interpolating diverted text
char: handle multibyte characters in charnext_delim()
ren: include indentation in diversion width
README: reference mktrfn for creating an output device
dev: exit with an error if output device cannot be opened
roff: add -F and -M to change font and macro directories
ren: do not hyphenate last lines, if the 2nd bit of .hy is set
wb: fix handling the first and the last two characters for .hy
wb: add p, C, E and P \D drawing commands
wb: do not match single character ligatures
ren: field delimiters and padding indicators can be utf-8
char: fix a typo in the comments of sstr_*()
char: functions for reading escape sequences and characters
wb: for hyphenation compare dp and hp only when both are non-NULL
map: use starting character lists for keys[]
cp: allow \$[] and more than 9 arguments
font: ignore nonexistent fonts
font: move functions for reading sections closer to font_open()
font: store kerning pairs in per-glyph lists
font: optimize font_find() with starting character lists
ren: right adjusting and centering tab types
tr: ignore .lf with no arguments
wb: allow longer ligatures
adj: end of sentence space when newline follows .!?
ren: margin characters for indented lines
tr: .nx with no arguments
README: include a brief introduction
roff: improve some of the comments
cp: CPBUF is no longer used
dev: ignore unknown parameters in device and font files
ren: add \N for selecting glyphs based on their device-dependent name
font: use cxxxx for unnamed glyphs
wb: ignore requests in diverted text
out: output m command only when output color changes
clr: #x and #xy specify grey
reg: \n(.m is current color as a string #rrggbb
reg: restore color after inserting diverted text
clr: set text color with \m[#rgb]
tr: long register/macro names and named environments
ren: honour .bp requests in end macro
font: do not read more than NKERNS kerning pairs
wb: store the previous wb_put() argument in wb->prev_c
wb: pairwise kerning support
dev: make sure the ligature exists in the font in dev_lig()
wb: handle \( and \C characters when hyphenating
ren: call wb_hmov() even for \&
ren: output non-empty but zero-width lines
roff.h: increase ILNLEN
wb: handle very long words in hyphpos()
font: call strcmp() less frequently in font_find()
roff: rename xroff.{h,c} to roff.{h,c}
tr: skip tabs after if condition
ren: evaluate negative trap positions when reading
dev: match temporary font name after other mounted fonts in .ft
font: ignore charset after the first NGLYPHS glyphs
ren: use sbuf_printf() when possible and clean up ren_line()
out: pass unsigned chars to utf8len()
tr: set tr_nl in tr_first()
hyph: let words match the largest prefix .hw exceptions
adj: do not output excess line breaks after filling all words
ren: output \x request only once in diversions
hyph: tex hyphenation algorithm and exception list
wb: hyphenation at dashes and hyphenation marks
sbuf: decrease the default sbuf struct buffer size
adj: touch wb->els_* before wb_done()
wb: changes before hyphenation support