Ehundu 0.4.0
The PDF of a page. A page with pdf: sí also comes out as a PDF, as well as HTML. Its own template lays it out, <plantilla>.pdf.twig, with the same data as the web one but with simple HTML and CSS (the PDF supports neither flex nor grid). It comes out at the address of the page with .pdf instead of the trailing slash, and templates link to it with pagina.pdf. It is one more output of the build, declared by the page, and not a processor over the HTML of another (docs/formato.md (opens in a new tab), §10.3, decisions 96 and 97).
The PDF is generated by dompdf, which is optional. It is pure PHP, with no external programs or GD, and is installed with composer require dompdf/dompdf (the dom extension is needed). The engine only asks for it if a page declares pdf: sí; if it is missing, the build stops with an error that says so. The ehundu.phar does not bring it: to generate PDFs you have to use the engine through Composer.
The same project always gives the same bytes. The PDF carries the date of the page (or 1 January 1970 if it has none), an identifier taken from its content and the font cache in the system's temporary folder, so it writes nothing outside salida/ and only reads from publico/. A PDF that does not change is not uploaded again in the deployment, and the incremental build takes it into account: what dompdf reads from publico/ counts as a dependency of the page.
PHP files stop the build. A PHP file in publico/ or in contenido/ (.php, .php3 to .php8, .pht, .phtml, .phar, and also foto.php.jpg, which some servers run) is no longer copied: the error says which one it is. A static site has no reason to carry them, and in an infected one they are the first thing that gets in (§9, decision 98). It is the only thing that can prevent a 0.3 site from building.
The format, for editors. The schema (§11) admits a list inside a list of simple fields, traducible (“translatable”) fields with one text per language, the seleccion-multiple (“multiple choice”) type with the options in datos/, recuerda (“remembers”: what an editor keeps from the rows of a list) and datos/ files editable from the schema (§11.1 to §11.5, decisions 91 to 95). The engine reads none of these attributes: they are matters for editors, and the engine only reads what they write into the project.
0.3 sites build the same, file by file, unless they carry PHP files in publico/ or contenido/.
This version on GitHub (opens in a new tab), with the ehundu.phar.