Las palabras que el CSS mantenía separadas siguen separadas

Una fila como 39 words · 1 heading · 1 table suele estar hecha de elementos sueltos cuyo espacio viene de la maquetación y no del marcado, así que se convertía como 39words1heading1table. La extensión lee ahora la página con su maquetación en la mano y devuelve esos espacios antes de convertir. Las filas de cifras, las listas de etiquetas y las migas de pan vuelven a salir como frases.

Abre el marcado de una página y mira la fila de cifras que hay bajo el título de un artículo. Muy a menudo no contiene ni un solo carácter de espacio: <span>39</span><span>words</span>, y la separación que ves en pantalla es una propiedad gap en un contenedor flex. El espacio está en la hoja de estilos, no en el documento.

Todo conversor que venga después ve la cadena y no la página —el nuestro incluido—, así que las palabras llegan pegadas. Tampoco es una forma exótica: una fila de cifras, una lista de etiquetas, un rastro de migas de pan y una franja de paginación se ven así en cualquier framework actual.

Por qué esto solo se arregla dentro de la página

El único sitio que puede saber si dos elementos están colocados uno al lado del otro es la propia página, mientras exista allí getComputedStyle. Una vez que el HTML se ha copiado fuera para convertirlo, la maquetación se ha ido con la hoja de estilos y ninguna conjetura la recupera: nada en <span>39</span><span>words</span> dice si ahí corresponde un espacio o no.

Por eso la extensión clona el documento, recorre el clon junto al original vivo y, allí donde el elemento real coloca a sus hijos como elementos flex o grid, la copia recibe un espacio detrás de cada uno. Lo que se convierte es la copia. Tu página no se toca, y esto corre solo en el instante en que pulsas el botón: no hay ningún script sentado en tus pestañas.

Un archivo que sueltas en el sitio no recibe nada de esto, porque allí no hay maquetación que leer. Esa es la diferencia entre convertir una página y convertir una copia de su marcado, y es buena parte de la razón por la que existe la extensión.

Qué no cubre

Flex y grid, y nada más. El espacio que produce un margen en un inline-block, una posición absoluta o un contenido generado en un ::before sigue siendo invisible en el marcado, y sigue saliendo cerrado.

Convertir una selección tampoco cambia: un rango seleccionado se clona directamente del documento, así que una fila de cifras levantada como selección todavía puede llegar como 39words. Pulsa el botón sin seleccionar nada y la vía de página entera te devuelve los espacios.

Relacionado: guardar una página web como Markdown y Turndown y las bibliotecas de HTML a Markdown.