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
ren: prevent invalid line breaks after traps
eval: prevent overflow for numbers with large fractional part
ren: .ft with no arguments should switch to the previous font
ren: increase the size of ren_back() buffer
font: allow glyphs with duplicate ids
ren: for .sp call down() only for nonzero arguments
reg: \n(.L should default to one
cp: nested .ifs with blocks in a .if with no block
ren: after non-diverted text processing, start the first page