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
cp: ignore tabs and leaders for now
ren: \n(.t is the distance to the next trap from the current position
draw: change the default scale indicator of \L to v
tr: .ls has no default scale indicator
tr: add .cc, .c2, .ec and .eo
draw: rename from line.c to draw.c
wb: add wb struct as a word buffer
ren: handle special characters as request delimiters
ren: add .tl, .lt and .pc
ren: .ti +-N should be relative to \n(.i
ren: .in should clear .ti
cp: call cp_next() if the conditional block should be executed