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
tr: evaluate if condition if everything else fails
tr: .if should accept any non-digit string delimiter
ren: account for .ti when indenting lines in diversions
eval: add eval_re() for numbers relative to their previous values
in: cast to unsigned char in in_read()
out: use em / 3 as the default char width
ren: execute the 0 trap just after the initial troff requests
tr: reading empty macros
ren: ignore .sp after a new page
ren: use the passed input functions in escarg_ren()
cp: move \w request handling to cp.c
ren: for traps in the same position, prefer the first
ren: ignore multiple .bp requests before a new page
ren: ignore .sp when a trap is triggered after line break
ren: use a negative value for undefined ren_f
out: fix calculating utf-8 character length
dev: more consistent special glyph names
eval: add eval_up() to update the passed char **
ren: add local motion functions
in: make the signature of in_pushnl() like in_push()
eval: handle \w in integer expressions
cp: do not remove \{ and \} in copy mode, unless asked to
ren: disallow invalid values for built-in variables
tr: strip tabs from macro names
adj: delay the effect of .in, .ll, and .ti for partial lines
cp: support \n+x and \n-x
ren: .ne should not cause break
tr: add .po and handle requests that save their previous value
tr: tabs are trimmed for request arguments
xroff: \*(.P is TROFFROOT
xroff: read files passed as arguments
ren: \v and \h, absolute positions with |, and .ti