Como dice el título, fmtroff es una versión más del viejo
fmt(1) que encontrará en cualquier sistema tipo
Unix[*]. Esta versión, además de mejorar algunas
características presentes en otras versiones de fmt, también
trae alguna innovación para hacer más fácil y fiable trabajar con
archivos roff (para editar mis
novelas usé groff, la versión de GNU).
Descargar (fmtroff.c)
Probado en OpenBSD y Linux. Espero que lo encuentre
útil.
(*) Es probable que no encuentre
fmt(1) en la instalación por defecto de alguna distribución
de Linux, desde que Linux desde siempre se ha esforzado en parecerse a
su papá adoptivo, MSWindows.
Cronología de cambios
- 9 de mayo de 2024. Simplifiqué un poco el
código.
- 7 de mayo de 2024. Agregué la opción
‘-m’ que, activada, indica a fmtroff que evite dar
formato a los encabezados de correo electrónico y al texto acotado
(agregué esta opción sólo por ser coherente con el uso original de
fmt(1)).
- 7 de mayo de 2024. Cambié la opción
‘-t’ por ‘-b’ y la opción ‘-l’ por
‘-o’, para ganar compatibilidad con la versión de
fmt(1) de OpenBSD.
- 6 de mayo de 2024. Ahora fmtroff evita
formatear el código anidado de tablas, gráficos y ecuaciones
(tbl(1), pic(1),
eqn(1)). Gracias Victor <vico arroba tuta
punto io> por indicármelo.
- 7 de noviembre de 2023 (bug). Corregido un error
creado en las últimas modificaciones.
- 8 de octubre de 2023. Una vez más reescribí todo
el código ahora usando funciones de las bibliotecas de C y de caracteres
anchos.
- 1 de octubre de 2023. Reescribí todo el código
usando punteros en lugar de matrices de longitud variable.
- 8 de septiembre de 2023. A excepción de ‘nueva
línea’ y ‘tabulador’, fmtroff limpia los llamados caracteres de
control. Hoy leyendo una interesante discusión en las listas
de correo de groff me enteré de que con roff se puede utilizar el
caracter leader o SOH (ASCII 0x01) en tablas o índices, de
ahí que modifiqué el código para que, en modo ‘troff’ (opción
‘-t’), fmtroff preserve este caracter.
- 24 de agosto de 2023 (bug). Hoy descubrí que es
necesario reservar memoria antes de entrar al loop que lee el
fichero (o cadena de entrada). Sin esto llamar fmtroff desde
un editor de texto (nvi o vim) en un fichero vacío produce un
segfault.
- 28 de junio de 2023. Mejoré el reconocimiento de
iniciales para que ignore paréntesis o comillas y le agregué soporte de
mayúsculas no ASCII.
- 25 de abril de 2023 (bug). Pasaron años sin usar
iso-latin, por esto no fue hasta ayer que, mientras tecleaba algún texto
en la consola de OpenBSD, me di cuenta de que fmtroff se colgaba al
encontrar caracteres iso-latin. Tomó sólo modificar un
condicional para corregir el error, lo que significa que ahora la
limitación de UTF-8 sólo se aplica a caracteres multibyte.
- 6 de abril de 2023 (bug). En modo troff o siempre
que la opción ‘-n’ no se utilice, tratar las líneas que
comienzan con ‘'’ (comilla simple) igual que las que
comienzan con punto, ya que aquellas también son utilizadas en macros de
troff.
- 5 de abril de 2023. No agregar doble espacio luego
de puntos suspensivos cuando éstos se hallan al principio de la
línea.
- 28 de marzo de 2023. Nueva opción ‘-l’,
permite que las oraciones comiencen con minúscula (útil con páginas de
manual donde comenzar la oración con un nombre de comando es
recurrente).
- 25 de marzo de 2023 (bug). Ignorar palabra cuando
su número de caracteres supera el límite de columnas (ej URLs).
VOLVER A LA PORTADA