@imontene/mdrender 2.8.1 → 2.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/README.md +102 -44
- package/dist/assets/theme-tech-magazine-dark.css +19 -0
- package/dist/assets/theme-tech-magazine.css +535 -0
- package/dist/assets.d.ts +19 -0
- package/dist/assets.js +48 -2
- package/dist/cli.js +2 -2
- package/dist/convert.js +47 -13
- package/dist/markdown/hyphenate.js +7 -3
- package/dist/options.d.ts +18 -1
- package/dist/options.js +43 -1
- package/dist/render/fonts.d.ts +4 -0
- package/dist/render/fonts.js +12 -1
- package/dist/render/header-footer.d.ts +2 -0
- package/dist/render/header-footer.js +1 -1
- package/dist/render/magazine.d.ts +48 -0
- package/dist/render/magazine.js +211 -0
- package/dist/render/page.d.ts +2 -0
- package/dist/render/page.js +5 -0
- package/dist/render/template.d.ts +3 -1
- package/dist/render/template.js +10 -3
- package/package.json +4 -2
- package/tech_magazine/AlphaZeroChess/cover01.png +0 -0
- package/tech_magazine/AlphaZeroChess/cover02.png +0 -0
- package/tech_magazine/AlphaZeroChess/cover03.png +0 -0
- package/tech_magazine/AlphaZeroChess/cover04.png +0 -0
- package/tech_magazine/AlphaZeroChess/magazine.json +9 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# Cambios
|
|
2
2
|
|
|
3
|
+
## 2.10.0 — 2026-11-04
|
|
4
|
+
|
|
5
|
+
- **Tema de revista de tecnología** `--theme tech_magazine` (o `tech_magazine-dark`, con la
|
|
6
|
+
página en negro), que no se usa por defecto:
|
|
7
|
+
- con `title`, portada a sangre con una imagen de `tech_magazine/<magazine-name>/`, el nombre
|
|
8
|
+
de la revista, la etiqueta, el título, la bajada y la firma;
|
|
9
|
+
- Inter de 300 a 800 en una columna sin justificar, Newsreader en la bajada, la capitular y
|
|
10
|
+
las citas destacadas; alertas como recuadros, tablas como fichas técnicas, código en
|
|
11
|
+
tarjetas oscuras;
|
|
12
|
+
- pie con la revista, la fecha y el número de página, sin pie en la portada.
|
|
13
|
+
- Front matter de la portada: `magazine-name` (por defecto `AlphaZeroChess`, con 4 portadas
|
|
14
|
+
incluidas), `cover` (número de imagen; al azar si falta), `cover-text` (`top` o `bottom`),
|
|
15
|
+
`cover-ink` (`dark` o `light`) y `accent`. Un `magazine.json` en la carpeta de la revista
|
|
16
|
+
fija su acento y la tinta de cada portada.
|
|
17
|
+
- Nueva especificación del Markdown que esperan los temas `academic_basic` y `tech_magazine`:
|
|
18
|
+
[docs/ESPECIFICACION_TEMAS.md](docs/ESPECIFICACION_TEMAS.md).
|
|
19
|
+
|
|
20
|
+
## 2.9.0 — 2026-10-29
|
|
21
|
+
|
|
22
|
+
- Los elementos de listas con viñetas y numeradas (también anidadas o dentro de citas y
|
|
23
|
+
alertas) se justifican en el PDF como los demás párrafos, con partición de palabras. El
|
|
24
|
+
código y las tablas dentro de una lista siguen alineados a la izquierda.
|
|
25
|
+
|
|
3
26
|
## 2.8.1 — 2026-10-29
|
|
4
27
|
|
|
5
28
|
- Tema `academic_basic`: márgenes laterales de 8 mm (antes 16 mm), con más ancho para las dos
|
package/README.md
CHANGED
|
@@ -24,7 +24,8 @@ Ejemplo: [`examples/ejemplo.md`](examples/ejemplo.md) → [`examples/ejemplo.pdf
|
|
|
24
24
|
- 🗂️ **Lotes**: varios archivos, carpetas completas o patrones `docs/**/*.md`.
|
|
25
25
|
- 🔁 **`--watch`** y **vista previa en vivo** en el navegador.
|
|
26
26
|
- 🎨 Estilo **Anti-Gravity** por defecto (con variante oscura), los temas clásicos **claro** y
|
|
27
|
-
**oscuro**, el tema **académico** a dos columnas (`academic_basic`),
|
|
27
|
+
**oscuro**, el tema **académico** a dos columnas (`academic_basic`), el de **revista de
|
|
28
|
+
tecnología** con portada (`tech_magazine`, con variante oscura), o tu propio CSS.
|
|
28
29
|
- 🔌 **Sin conexión**: todo va empaquetado; por defecto no descarga nada de internet.
|
|
29
30
|
- 💻 **Windows 10/11 y Linux** (x64; arm64 en Linux), probado en ambos en cada cambio.
|
|
30
31
|
|
|
@@ -137,43 +138,43 @@ equipo); `--port` fija el puerto y `--no-open` no abre el navegador.
|
|
|
137
138
|
|
|
138
139
|
### Opciones
|
|
139
140
|
|
|
140
|
-
| Opción | Descripción
|
|
141
|
-
| ------------------------------ |
|
|
142
|
-
| `-o, --output <ruta>` | Archivo de salida, o carpeta con varios archivos
|
|
143
|
-
| `-f, --format <pdf\|html>` | Formato de salida
|
|
144
|
-
| `--page-size <tamaño>` | `Letter`, `A4`, `Legal` (también `A3`, `A5`, `Tabloid`)
|
|
145
|
-
| `--margin <valor>` | Las cuatro márgenes como en CSS: `10mm`, `15mm 20mm`…
|
|
146
|
-
| `--margin-top <medida>` | Margen superior, p. ej. `15mm` (prevalece sobre `--margin`)
|
|
147
|
-
| `--margin-right <medida>` | Margen derecho
|
|
148
|
-
| `--margin-bottom <medida>` | Margen inferior
|
|
149
|
-
| `--margin-left <medida>` | Margen izquierdo
|
|
150
|
-
| `--orientation <orientación>` | `portrait` (vertical) o `landscape` (horizontal)
|
|
151
|
-
| `--landscape` | Atajo de `--orientation landscape`
|
|
152
|
-
| `--toc` | Tabla de contenidos al inicio (o donde pongas `[[toc]]`)
|
|
153
|
-
| `--toc-depth <n>` | Nivel de título más profundo en la tabla de contenidos
|
|
154
|
-
| `--header <texto>` | Encabezado de página (ver abajo)
|
|
155
|
-
| `--footer <texto>` | Pie de página (ver abajo)
|
|
156
|
-
| `--no-page-numbers` | Sin el pie con números de página
|
|
157
|
-
| `--font <manrope\|inter>` | Tipografía del texto (ver abajo)
|
|
158
|
-
| `--no-justify` | Párrafos alineados a la izquierda en el PDF (ver abajo)
|
|
159
|
-
| `--watermark <texto>` | Marca de agua en diagonal en cada página del PDF, con el degradado Anti-Gravity
|
|
160
|
-
| `--watermark-field` | Campos de luz con el degradado arriba a la izquierda y abajo a la derecha de cada página del PDF
|
|
161
|
-
| `--density <densidad>` | `normal` o `compact` (menos espacio entre líneas y bloques)
|
|
162
|
-
| `--font-size <tamaño>` | Tamaño del texto en `pt` o `px`, de 6 a 24 pt; p. ej. `10pt`
|
|
163
|
-
| `--theme <tema\|css>` | `antigravity`, `antigravity-dark`, `light`, `dark`, `academic_basic` o un `.css` (ver abajo)
|
|
164
|
-
| `--css <archivo.css>` | CSS adicional (se puede repetir)
|
|
165
|
-
| `--mermaid-theme <tema>` | `default`, `neutral`, `dark`, `forest`, `base`
|
|
166
|
-
| `--mermaid-flip <auto\|never>` | Si el autoajuste puede girar un diagrama de flujo de eje (ver abajo)
|
|
167
|
-
| `--no-mermaid-autofit` | Dibujar los diagramas de flujo tal como están escritos
|
|
168
|
-
| `--lang <código>` | Idioma del documento; `en` para inglés (`pt`, `fr`, `de`…)
|
|
169
|
-
| `--title <texto>` | Título del documento (muestra un bloque de título)
|
|
170
|
-
| `--config <archivo>` | Archivo de configuración
|
|
171
|
-
| `--no-config` | Ignorar `mdrender.config.json`
|
|
172
|
-
| `--browser <ruta>` | Ruta a Chrome/Edge/Chromium (o variable `MDRENDER_BROWSER`)
|
|
173
|
-
| `--allow-remote` | Permitir que el PDF descargue imágenes/CSS de internet
|
|
174
|
-
| `-w, --watch` | Regenerar al guardar
|
|
175
|
-
| `-q, --quiet` | Mostrar solo advertencias y errores
|
|
176
|
-
| `-v, --verbose` | Mostrar también configuración, navegador y tiempos
|
|
141
|
+
| Opción | Descripción | Por defecto |
|
|
142
|
+
| ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------- | --------------------- |
|
|
143
|
+
| `-o, --output <ruta>` | Archivo de salida, o carpeta con varios archivos | junto al `.md` |
|
|
144
|
+
| `-f, --format <pdf\|html>` | Formato de salida | `pdf` |
|
|
145
|
+
| `--page-size <tamaño>` | `Letter`, `A4`, `Legal` (también `A3`, `A5`, `Tabloid`) | `Letter` |
|
|
146
|
+
| `--margin <valor>` | Las cuatro márgenes como en CSS: `10mm`, `15mm 20mm`… | `10mm` |
|
|
147
|
+
| `--margin-top <medida>` | Margen superior, p. ej. `15mm` (prevalece sobre `--margin`) | `10mm` |
|
|
148
|
+
| `--margin-right <medida>` | Margen derecho | `10mm` |
|
|
149
|
+
| `--margin-bottom <medida>` | Margen inferior | `10mm` |
|
|
150
|
+
| `--margin-left <medida>` | Margen izquierdo | `10mm` |
|
|
151
|
+
| `--orientation <orientación>` | `portrait` (vertical) o `landscape` (horizontal) | `portrait` |
|
|
152
|
+
| `--landscape` | Atajo de `--orientation landscape` | — |
|
|
153
|
+
| `--toc` | Tabla de contenidos al inicio (o donde pongas `[[toc]]`) | — |
|
|
154
|
+
| `--toc-depth <n>` | Nivel de título más profundo en la tabla de contenidos | `3` |
|
|
155
|
+
| `--header <texto>` | Encabezado de página (ver abajo) | — |
|
|
156
|
+
| `--footer <texto>` | Pie de página (ver abajo) | `{page} / {pages}` |
|
|
157
|
+
| `--no-page-numbers` | Sin el pie con números de página | — |
|
|
158
|
+
| `--font <manrope\|inter>` | Tipografía del texto (ver abajo) | `manrope` |
|
|
159
|
+
| `--no-justify` | Párrafos alineados a la izquierda en el PDF (ver abajo) | justificado |
|
|
160
|
+
| `--watermark <texto>` | Marca de agua en diagonal en cada página del PDF, con el degradado Anti-Gravity | — |
|
|
161
|
+
| `--watermark-field` | Campos de luz con el degradado arriba a la izquierda y abajo a la derecha de cada página del PDF | — |
|
|
162
|
+
| `--density <densidad>` | `normal` o `compact` (menos espacio entre líneas y bloques) | `normal` |
|
|
163
|
+
| `--font-size <tamaño>` | Tamaño del texto en `pt` o `px`, de 6 a 24 pt; p. ej. `10pt` | `10.5pt` |
|
|
164
|
+
| `--theme <tema\|css>` | `antigravity`, `antigravity-dark`, `light`, `dark`, `academic_basic`, `tech_magazine`, `tech_magazine-dark` o un `.css` (ver abajo) | `antigravity` |
|
|
165
|
+
| `--css <archivo.css>` | CSS adicional (se puede repetir) | — |
|
|
166
|
+
| `--mermaid-theme <tema>` | `default`, `neutral`, `dark`, `forest`, `base` | el del tema de página |
|
|
167
|
+
| `--mermaid-flip <auto\|never>` | Si el autoajuste puede girar un diagrama de flujo de eje (ver abajo) | `auto` |
|
|
168
|
+
| `--no-mermaid-autofit` | Dibujar los diagramas de flujo tal como están escritos | — |
|
|
169
|
+
| `--lang <código>` | Idioma del documento; `en` para inglés (`pt`, `fr`, `de`…) | `es` |
|
|
170
|
+
| `--title <texto>` | Título del documento (muestra un bloque de título) | primer `# título` |
|
|
171
|
+
| `--config <archivo>` | Archivo de configuración | el más cercano |
|
|
172
|
+
| `--no-config` | Ignorar `mdrender.config.json` | — |
|
|
173
|
+
| `--browser <ruta>` | Ruta a Chrome/Edge/Chromium (o variable `MDRENDER_BROWSER`) | autodetección |
|
|
174
|
+
| `--allow-remote` | Permitir que el PDF descargue imágenes/CSS de internet | bloqueado |
|
|
175
|
+
| `-w, --watch` | Regenerar al guardar | — |
|
|
176
|
+
| `-q, --quiet` | Mostrar solo advertencias y errores | — |
|
|
177
|
+
| `-v, --verbose` | Mostrar también configuración, navegador y tiempos | — |
|
|
177
178
|
|
|
178
179
|
**Página**: por defecto hoja **Letter vertical con márgenes de 10 mm**. Las medidas aceptan
|
|
179
180
|
`mm`, `cm`, `in` o `px`. `--margin` fija las cuatro márgenes a la vez y `--margin-top`,
|
|
@@ -219,6 +220,62 @@ En el HTML se ve a una sola columna. Chrome no ubica las figuras arriba o abajo
|
|
|
219
220
|
como en LaTeX: quedan donde aparecen en el texto, y las que ocupan las dos columnas pueden
|
|
220
221
|
dejar algo de espacio libre antes de ellas.
|
|
221
222
|
|
|
223
|
+
Qué debe cumplir un `.md` para cada uno de estos dos temas:
|
|
224
|
+
[docs/ESPECIFICACION_TEMAS.md](docs/ESPECIFICACION_TEMAS.md).
|
|
225
|
+
|
|
226
|
+
**Revista de tecnología** (`--theme tech_magazine`, o `tech_magazine-dark` con la página en
|
|
227
|
+
negro): el aspecto de una revista de divulgación tecnológica. Ejemplo:
|
|
228
|
+
[`examples/revista-tecnologia.md`](examples/revista-tecnologia.md) →
|
|
229
|
+
[`examples/revista-tecnologia.pdf`](examples/revista-tecnologia.pdf).
|
|
230
|
+
|
|
231
|
+
- **Portada a sangre**: con `title` en el front matter, la primera página es una portada con
|
|
232
|
+
una imagen de borde a borde, el nombre de la revista arriba, la etiqueta (`kicker`), el
|
|
233
|
+
título, la bajada (`subtitle`) y la firma (`author` y `date`). La portada no lleva
|
|
234
|
+
encabezado ni pie.
|
|
235
|
+
- Inter de 300 a 800 en una columna amplia sin justificar, y la serifa
|
|
236
|
+
[Newsreader](https://fonts.google.com/specimen/Newsreader) en la bajada, la letra capitular
|
|
237
|
+
del primer párrafo y las citas destacadas (`> cita`).
|
|
238
|
+
- Las alertas (`> [!NOTE]`) son recuadros grises redondeados: su primera línea en negrita hace
|
|
239
|
+
de título. Las tablas son fichas técnicas, el código va en una tarjeta oscura y `---` se ve
|
|
240
|
+
como «• • •».
|
|
241
|
+
- Imágenes solas como figuras con esquinas redondeadas y su texto alternativo como leyenda.
|
|
242
|
+
- Pie con el nombre de la revista y la fecha a la izquierda y el número de página a la
|
|
243
|
+
derecha; `--header` y `--footer` aceptan además `{magazine}`.
|
|
244
|
+
|
|
245
|
+
Campos del front matter (o de `mdrender.config.json`) para la portada:
|
|
246
|
+
|
|
247
|
+
| Campo | Qué hace | Por defecto |
|
|
248
|
+
| --------------- | ---------------------------------------------------------------------------------------- | ------------------------------ |
|
|
249
|
+
| `magazine-name` | Nombre de la revista: aparece en la portada y el pie, y elige la carpeta de imágenes | `AlphaZeroChess` |
|
|
250
|
+
| `cover` | Número de la imagen de portada (`2` o `"02"` toma `cover02.png`) | una al azar en cada conversión |
|
|
251
|
+
| `cover-text` | `top` o `bottom`: dónde va el texto de la portada | `top` |
|
|
252
|
+
| `cover-ink` | `dark` o `light`: texto oscuro sobre imágenes claras o blanco sobre oscuras | `light` (ver abajo) |
|
|
253
|
+
| `accent` | Color de acento: capitular, títulos pequeños, líneas (`"#2f6bff"`, `rgb(…)`, un nombre…) | el de la revista, o `#2f6bff` |
|
|
254
|
+
|
|
255
|
+
Las imágenes se buscan en `tech_magazine/<magazine-name>/`, primero junto al `.md` y si no,
|
|
256
|
+
entre las que trae mdrender (hoy, `AlphaZeroChess` con 4 portadas). El número de una imagen es
|
|
257
|
+
el último grupo de cifras de su nombre: `cover03.png`, `portada-3.jpg`. Admite PNG, JPEG, WebP,
|
|
258
|
+
AVIF y SVG.
|
|
259
|
+
|
|
260
|
+
Un `magazine.json` opcional en esa carpeta fija el acento de la revista y, para cada portada, la
|
|
261
|
+
tinta y el velo detrás del texto. Lo que diga para una portada prevalece sobre `cover-ink`,
|
|
262
|
+
porque la imagen decide qué color se lee sobre ella. En `AlphaZeroChess`, las portadas 1 y 3
|
|
263
|
+
llevan texto oscuro y la 2 y la 4 texto claro:
|
|
264
|
+
|
|
265
|
+
```json
|
|
266
|
+
{
|
|
267
|
+
"accent": "#2f6bff",
|
|
268
|
+
"covers": {
|
|
269
|
+
"1": { "ink": "dark", "veil": "rgba(255, 255, 255, 0.6)" },
|
|
270
|
+
"2": { "ink": "light", "veil": "rgba(8, 14, 28, 0.85)" }
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
Sin `title` no hay portada y el documento empieza con el primer párrafo. Con una portada al
|
|
276
|
+
azar, cada conversión puede salir distinta: fija `cover` para que el PDF sea siempre igual.
|
|
277
|
+
Las imágenes van tal cual en el PDF: una PNG de portada de 2 MB suma unos 2 MB.
|
|
278
|
+
|
|
222
279
|
**Marca de agua**: dos marcas con el degradado azul → cian → violeta del design system
|
|
223
280
|
Anti-Gravity, cada una por separado y solo en el PDF:
|
|
224
281
|
|
|
@@ -240,11 +297,12 @@ Ambas van incrustadas en el PDF, también en el encabezado, el pie y los diagram
|
|
|
240
297
|
tiene cursivas (el navegador inclina la normal) ni algunos símbolos como `→`, `✓` o `≤`, que
|
|
241
298
|
se toman de Inter.
|
|
242
299
|
|
|
243
|
-
**Párrafos justificados**: en el PDF, los párrafos del texto, de las citas y de las alertas
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
300
|
+
**Párrafos justificados**: en el PDF, los párrafos del texto, de las citas y de las alertas, y
|
|
301
|
+
los elementos de listas con viñetas o numeradas (también anidadas) se justifican, y las palabras
|
|
302
|
+
largas se parten con guion al final de la línea según el idioma del documento (`lang`: español,
|
|
303
|
+
inglés, portugués, francés, alemán o italiano; en otros idiomas se justifica sin partir
|
|
304
|
+
palabras). Tablas, notas al pie, el índice, los diagramas y el código dentro de una lista quedan
|
|
305
|
+
alineados a la izquierda, y el HTML no cambia. El texto del PDF solo lleva el guion donde
|
|
248
306
|
la palabra se corta, así que copiar y buscar funcionan con las palabras completas.
|
|
249
307
|
`--no-justify` (o `justify: false`) vuelve a alinear a la izquierda.
|
|
250
308
|
|
|
@@ -413,6 +471,6 @@ cambios: [CHANGELOG.md](CHANGELOG.md).
|
|
|
413
471
|
|
|
414
472
|
## Licencia
|
|
415
473
|
|
|
416
|
-
[MIT](LICENSE). Manrope, Inter, JetBrains Mono
|
|
474
|
+
[MIT](LICENSE). Manrope, Inter, JetBrains Mono, STIX Two Text y Newsreader se distribuyen bajo la
|
|
417
475
|
[SIL Open Font License 1.1](https://openfontlicense.org); los ejecutables incluyen
|
|
418
476
|
`THIRD-PARTY-NOTICES.txt` con las licencias de todos los componentes.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/* mdrender magazine theme, dark page (tech_magazine-dark): loaded after theme-tech-magazine.css. */
|
|
2
|
+
|
|
3
|
+
:root {
|
|
4
|
+
--tm-bg: #000000;
|
|
5
|
+
--tm-ink: #f5f5f7;
|
|
6
|
+
--tm-ink-secondary: #d2d2d7;
|
|
7
|
+
--tm-ink-muted: #98989d;
|
|
8
|
+
--tm-hairline: #38383a;
|
|
9
|
+
--tm-surface: #1c1c1e;
|
|
10
|
+
--tm-code-bg: #1c1c1e;
|
|
11
|
+
/* The accent lightened so it reads on black. */
|
|
12
|
+
--tm-accent-text: color-mix(in srgb, var(--tm-accent) 72%, white);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* Pictures drawn on a light card keep it, outlined so they do not float. */
|
|
16
|
+
figure img,
|
|
17
|
+
.figure img {
|
|
18
|
+
box-shadow: 0 0 0 1px #2c2c2e;
|
|
19
|
+
}
|