From 587125f177f4710abbf27d8943870c27de20b16c Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 9 Aug 2026 14:08:50 +0000 Subject: [PATCH 1/2] fix: i font nel repository erano pagine HTML, il PDF era sempre in ASCII MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit backend/fonts/DejaVuSans.ttf e Roboto-Regular.ttf non erano font: erano pagine HTML di GitHub salvate con estensione .ttf, cioe' l'URL della pagina scaricato al posto del file raw. embedFont falliva con "Unknown font format", l'eccezione veniva catturata dal fallback previsto e il PDF ripiegava *sempre* sui font standard con i simboli ridotti in ASCII: "Int" invece di ∫, "alpha" invece di α, "<=" invece di ≤. Il percorso di codice era corretto, l'asset no. Nessun test se ne accorgeva perche' controllavano solo che il PDF iniziasse con %PDF. - sostituiti con DejaVu Sans regular e bold veri, ridotti con pyftsubset ai soli caratteri che il compilatore puo' produrre (ASCII, accentate, greco, operatori, apici e pedici): ~740 KB -> ~44 KB ciascuno - aggiunto il bold vero: il grassetto non viene piu' simulato ridisegnando il testo con un piccolo scarto - rimosso Roboto-Regular.ttf, anch'esso una pagina HTML e mai referenziato - aggiunta la licenza DejaVu con la procedura di subsetting documentata - la CI ora verifica il magic number dei .ttf e che il PDF prodotto incorpori davvero DejaVu, cosi' un asset rotto non passa piu' inosservato Grazie a questo l'app pesa 1,47 MB invece di 1,74: prima incorporava 295 KB di HTML spacciato per font. Verificato: i glifi ∫ ≠ √ α ≤ ∞ Σ π ² ₀ sono presenti nel sottoinsieme, il PDF dichiara DejaVuSans e DejaVuSans-Bold fra i font incorporati, e l'app ricostruita continua a funzionare offline da file:// senza errori. package.json passa a 1.1.1: la release v1.1.0 contiene ancora il font rotto. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01FRwidp8pte45RXaecqJaAe --- .github/workflows/ci.yml | 51 +++ CHANGELOG.md | 20 +- README.md | 4 +- backend/fonts/DejaVuSans-Bold.ttf | Bin 0 -> 43392 bytes backend/fonts/DejaVuSans.ttf | Bin 302131 -> 46032 bytes backend/fonts/LICENSE-DejaVu.txt | 78 +++++ backend/fonts/Roboto-Regular.ttf | 515 ------------------------------ build/build-app.mjs | 9 +- package.json | 2 +- server.js | 5 +- src/compiler.js | 23 +- 11 files changed, 175 insertions(+), 532 deletions(-) create mode 100644 backend/fonts/DejaVuSans-Bold.ttf create mode 100644 backend/fonts/LICENSE-DejaVu.txt delete mode 100644 backend/fonts/Roboto-Regular.ttf diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 75b1184..da52adc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -64,6 +64,57 @@ jobs: curl -sf -o /dev/null http://localhost:3000/api/download/package.zip echo "Download OK" + - name: I font incorporati sono davvero font + run: | + # I .ttf del repository erano pagine HTML salvate col nome sbagliato: + # embedFont falliva in silenzio e il PDF ripiegava sempre sull'ASCII. + node -e " + const fs = require('fs'); + for (const f of ['backend/fonts/DejaVuSans.ttf', 'backend/fonts/DejaVuSans-Bold.ttf']) { + const magic = fs.readFileSync(f).subarray(0, 4).toString('hex'); + // 00010000 = TrueType, 4f54544f = 'OTTO' (CFF), 74727565 = 'true' + if (!['00010000', '4f54544f', '74727565'].includes(magic)) { + console.error(f, 'non e un font: magic', magic); + process.exit(1); + } + console.log(f, 'OK (magic', magic + ')'); + } + " + + - name: Il PDF incorpora davvero il font Unicode + run: | + node -e " + const fs = require('fs'), zlib = require('zlib'); + (async () => { + const C = await import('./src/compiler.js'); + const pdfLib = await import('pdf-lib'); + const fontkit = (await import('@pdf-lib/fontkit')).default; + const tex = fs.readFileSync('latex-source/quiz.tex', 'utf-8'); + const bytes = await C.generatePdfBytes(tex, { + pdfLib, fontkit, + fontBytes: fs.readFileSync('backend/fonts/DejaVuSans.ttf'), + boldFontBytes: fs.readFileSync('backend/fonts/DejaVuSans-Bold.ttf'), + }); + const buf = Buffer.from(bytes); + let nomi = []; + const s = buf.toString('latin1'); + for (const m of s.matchAll(/stream\r?\n/g)) { + const start = m.index + m[0].length; + const end = buf.indexOf('endstream', start, 'latin1'); + if (end < 0) continue; + try { + const out = zlib.inflateSync(buf.subarray(start, end)).toString('latin1'); + for (const f of out.matchAll(/\/BaseFont\s*\/([A-Za-z0-9+\-]+)/g)) nomi.push(f[1]); + } catch {} + } + if (!nomi.some(n => /DejaVu/.test(n))) { + console.error('font Unicode non incorporato; trovati:', nomi); + process.exit(1); + } + console.log('Font nel PDF OK:', [...new Set(nomi)].join(', ')); + })().catch(e => { console.error(e); process.exit(1); }); + " + - name: Compilazione di un singolo .tex run: | curl -sf -X POST http://localhost:3000/compile \ diff --git a/CHANGELOG.md b/CHANGELOG.md index fc69622..169e2b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,10 +32,22 @@ - Renderer matematico lato server, senza dipendenze esterne: frazioni, radici, apici e pedici, lettere greche, operatori grandi (∫ ∑ ∏), funzioni e circa cento simboli. Funziona offline e non contatta nessuno. -- Il PDF usa ora il font Unicode DejaVu (già presente nel repo ma mai - utilizzato, come `@pdf-lib/fontkit`): i simboli matematici compaiono come - tali invece di essere degradati in ASCII. Se il font manca, il fallback ASCII - resta attivo. +- Il PDF usa ora il font Unicode DejaVu: i simboli matematici compaiono come + tali invece di essere degradati in ASCII. Se il font manca, il fallback + ASCII resta attivo. +- **I due file in `backend/fonts/` non erano font.** Erano pagine HTML di + GitHub salvate con estensione `.ttf` (chi le ha scaricate ha preso l'URL + della pagina invece del file raw). `embedFont` falliva con «Unknown font + format», l'errore veniva catturato dal fallback e il PDF finiva **sempre** + in ASCII, senza che nulla lo segnalasse. Sostituiti con veri DejaVu Sans + regular e bold, ridotti ai soli caratteri usati dal compilatore: + ~740 KB → ~44 KB ciascuno. Rimosso `Roboto-Regular.ttf`, anch'esso una + pagina HTML e mai referenziato. +- Il grassetto nel PDF non è più simulato ridisegnando il testo: ora c'è un + vero peso bold. +- La CI ora verifica che i `.ttf` abbiano un magic number da font e che il + PDF prodotto incorpori davvero DejaVu, così un asset rotto non può più + passare inosservato. ### Aggiunto — distribuzione - **L'app in un file solo.** `npm run build:app` produce `dist/texforge.html`: diff --git a/README.md b/README.md index f978aed..2d25b62 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ texforge/ │ ├── script.js nav, scroll progress, tabs, copia codice │ └── style.css design system ├── backend/ -│ └── fonts/ font Unicode per il generatore PDF di riserva +│ └── fonts/ DejaVu Sans (sottoinsieme) per il generatore PDF ├── latex-source/ pacchetto + file di supporto │ ├── quizstruct.sty pacchetto LaTeX │ ├── quiz.cfg config htlatex @@ -138,7 +138,7 @@ npm install npm run build:app # genera dist/texforge.html ``` -Il file prodotto contiene pdf-lib, fontkit, il font Unicode DejaVu, il compilatore e i quattro esempi: circa 1,7 MB in tutto. La release su GitHub lo costruisce da sola a ogni tag `v*`. +Il file prodotto contiene pdf-lib, fontkit, i font DejaVu, il compilatore e i quattro esempi: circa 1,5 MB in tutto. La release su GitHub lo costruisce da sola a ogni tag `v*`. ## 🖥️ Deploy su VPS diff --git a/backend/fonts/DejaVuSans-Bold.ttf b/backend/fonts/DejaVuSans-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..663338251e06d565216339eb737d3b3102460ab0 GIT binary patch literal 43392 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

#07jmrB;(W?{c zZ3eVg4J!4ZLJkdXN~Hv}X$5pt4;*Y&dT^eWp*;m+ryeGOvwGk)bTS(y_U5d^HG-O< zy?rGz^z22TXBPmg5C4k{7?6rZ{Qie_` zP5YUk3O$LJUPcXgwPlPIug1)CfVm%~}*Ncb5asyRIrq#vDrN6eqNq(yW2akdZBC zm&vd;*9l7C^)O260zcoC17A9A_0fJD)k+=F-lRYY%ogS-P`d+iMs2&~XBDnEuNZoE z0ZP?SR^^du1gIIAdST+~Q6{BRYnGRv+0w^KrRVD%tcN;!D$N_(HF`L)Vi-FN9Xl$+ z%hdW(2x=Tr#`;2^;y5PvidT98b!?2cS!k^=NoLS1!?XEmX-Y)s8TePL7e_r;8Rc`n zyBx){;R()m>y6R?*DS8%T;Y`8lMcPc*Y~|#D(O0!yJ-{d*XYZfxefk1(yG&>IkOGD zTBKA4_w8r(wtmgIb(++jlEfHo#yY{BgBo+(ORIIocl}i(bQ1PP#qbtVS8J>CDyOs^ z_Z1RD{xCl&-{Hd$epDhB_Daaih^P z4rjW7s2zwJ9T03`yDmrLl_-zFJ1;I5VIB1`)a@vH+S(P<<(_?9|>HX?FQkO z_M|Zg*orU~E=QTTN1(P4IcXA(JqDm=EUsA|g1SpR^hTl=Wgz?rq%j^&$DrOz)t4(` zrWA^^5x5!+{6jrF_XqA_5+C{R0lo%Hydz~V_M_&=X@8_q_#6$Y!+>Eddhv?2W08*n zToHOHKBzx(I})%Xfn&7HhoGGtC`%}g1^{XlXcJ-x_!=X%KuVO3kmPC%+WSKz>`$tf zNhrk`bwVqX7cUl`yGUE{LH&>O;G+*v{zCjyx71^iq%a7zBT%RCDy%%cQ4;b^?a=nL zDft_QD^j==ZOSUtXQ90E>P`6qZQ36_Mo7-tpOR1`$~xrUED3Gg);b+|hZ9hW0&&r9 z)KsCQQUuKof~|;2)leh!EBfI8NZ|E2<@eOL0jsn?`;3&9y#kUeizs|NA)BS3ovxIY z@Y+LJfE>~^Y9zFslhiCf2trmUNPS-g1sde7Fw^3`4dEZHG80(CAC!qFEL$DgD71s>styQNbwPtxwZ-h10 z}%{p=@Z;5afhyaO2rTBr1f~tB~9)D`-7^A zaT&U$-UpzUZ#4F&h&uh)vDRNwJV?d1XfyM^%EwGi97zL zQnj6w8A{Aq+34t|W7UVp?Te!AEZ&xP$Hi$7QFh?tI|K1V&Q{*Lhj#wf zl7ANb@>Ij?7c^~zHWQzCJ0m`4<32!5o2%`?=et@9o*EFqduajB#NWv$3T@!v!ZE;! z+lS@vI++>mcj7MCaM^x+aZPcFm|t8oy-Lh4sVS}y^CuNo)#7tXSq(nt)Jzle%gd@! zF0U!86!WJPR{>^9SqW+?i>r#o{AtD2E`HVl!}Q|1DPn$AC2Ok7i>HhEHT6}1tead_ zj?XE?--aVIUyb4;#P2T(5`OQq+A-!q02l@OXpW^a?;Ef>O1%N?Wb1(eA@fOdrr1PXBh)sx^V5boqFX zM(~u*XOC!ZltjQXv`C*pZq*K+hC6T??t>2CK0FQg&(m;+B-~6Ne0XpQs7;1$KbCMe zg6>D{;OyEF2?t$jpGi18PeVH_OSk*feJcCjYNBD`drd?-?y46kK_Zm2(-PUWqihZE z#r$~(nE%xtGsd0=GfD<#xRbWt?=nk(a}-)F+6I)Jp7KVN15pk_{d0cXEkREFs2qP* zZ9hKK1FFH=7m_xffUmtTDNd6R7VUY!carcHZ5ztLp7M5-JA2BzfxnA~)*h5YP&RC5 z;WPV0I(}&&Py)9odG%m{cc9gVdX(^qlDQR}iFC_2d{(m+CC)4sZIykW_HXBESze9u n2~T;A{fKtbiJ!Ow=04Q7cTc5eJ%9*7s+ literal 302131 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%0AcA$8&0 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%0A`2Wm>ybBRpccTH-s}gsocp=Ap~? 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%0Aqxgl`q(NMS$gw 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 diff --git a/backend/fonts/LICENSE-DejaVu.txt b/backend/fonts/LICENSE-DejaVu.txt new file mode 100644 index 0000000..5ca2384 --- /dev/null +++ b/backend/fonts/LICENSE-DejaVu.txt @@ -0,0 +1,78 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: DejaVu fonts +Upstream-Author: Stepan Roh (original author), + see /usr/share/doc/fonts-dejavu-core/AUTHORS for full list +Source: https://dejavu-fonts.github.io/ + +Files: * +Copyright: Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. + Bitstream Vera is a trademark of Bitstream, Inc. + DejaVu changes are in public domain. +License: bitstream-vera + Permission is hereby granted, free of charge, to any person obtaining a copy + of the fonts accompanying this license ("Fonts") and associated + documentation files (the "Font Software"), to reproduce and distribute the + Font Software, including without limitation the rights to use, copy, merge, + publish, distribute, and/or sell copies of the Font Software, and to permit + persons to whom the Font Software is furnished to do so, subject to the + following conditions: + . + The above copyright and trademark notices and this permission notice shall + be included in all copies of one or more of the Font Software typefaces. + . + The Font Software may be modified, altered, or added to, and in particular + the designs of glyphs or characters in the Fonts may be modified and + additional glyphs or characters may be added to the Fonts, only if the fonts + are renamed to names not containing either the words "Bitstream" or the word + "Vera". + . + This License becomes null and void to the extent applicable to Fonts or Font + Software that has been modified and is distributed under the "Bitstream + Vera" names. + . + The Font Software may be sold as part of a larger software package but no + copy of one or more of the Font Software typefaces may be sold by itself. + . + THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, + TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME + FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING + ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF + THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE + FONT SOFTWARE. + . + Except as contained in this notice, the names of Gnome, the Gnome + Foundation, and Bitstream Inc., shall not be used in advertising or + otherwise to promote the sale, use or other dealings in this Font Software + without prior written authorization from the Gnome Foundation or Bitstream + Inc., respectively. For further information, contact: fonts at gnome dot + org. + +Files: debian/* +Copyright: (C) 2005-2006 Peter Cernak + (C) 2006-2011 Davide Viti + (C) 2011-2013 Christian Perrier + (C) 2013 Fabian Greffrath +License: GPL-2+ + This program is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public + +------------------------------------------------------------------------- +Nota per texforge +------------------------------------------------------------------------- +I file DejaVuSans.ttf e DejaVuSans-Bold.ttf presenti in questa cartella +NON sono i font completi: sono sottoinsiemi ridotti ai soli caratteri che +il compilatore può produrre (ASCII, lettere accentate, alfabeto greco, +operatori matematici, apici e pedici). Da ~740 KB ciascuno a ~44 KB. + +Sono stati generati con pyftsubset (fonttools): + + pyftsubset DejaVuSans.ttf \ + --unicodes-file=caratteri.txt \ + --output-file=backend/fonts/DejaVuSans.ttf \ + --layout-features= --no-hinting --desubroutinize + +L'elenco dei caratteri si ricava dalle mappe GREEK, SYMBOLS, +BIG_OPERATORS, SUPERSCRIPT_CHARS e SUBSCRIPT_CHARS in src/compiler.js. diff --git a/backend/fonts/Roboto-Regular.ttf b/backend/fonts/Roboto-Regular.ttf deleted file mode 100644 index 3b7e995..0000000 --- a/backend/fonts/Roboto-Regular.ttf +++ /dev/null @@ -1,515 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Page not found · GitHub · GitHub - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-
- - -
- Skip to content - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - -
-
- - - - -
- -
- - - - - - - - -
- - - - - - -
- - - - - - - - - -
-
- - - -
-
- -
-
- 404 “This is not the web page you are looking for” - - - - - - - - - - - - -
-
- -
-
- -
- - -
-
- -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - diff --git a/build/build-app.mjs b/build/build-app.mjs index b31a11a..b28aa37 100644 --- a/build/build-app.mjs +++ b/build/build-app.mjs @@ -28,6 +28,7 @@ const compiler = read('src', 'compiler.js').replace(/export\s*\{[^}]*\};?\s*$/, const pdfLibJs = read('node_modules', 'pdf-lib', 'dist', 'pdf-lib.min.js'); const fontkitJs = read('node_modules', '@pdf-lib', 'fontkit', 'dist', 'fontkit.umd.min.js'); const fontBase64 = readBin('backend', 'fonts', 'DejaVuSans.ttf').toString('base64'); +const boldFontBase64 = readBin('backend', 'fonts', 'DejaVuSans-Bold.ttf').toString('base64'); const quizCss = read('latex-source', 'quiz.css'); const quizJs = read('latex-source', 'quiz.js'); @@ -135,9 +136,12 @@ ${safeScript(compiler)} const QUIZ_CSS = ${JSON.stringify(quizCss)}; const QUIZ_JS = ${JSON.stringify(quizJs)}; const ESEMPI = ${JSON.stringify(ESEMPI)}; -const FONT_B64 = ${JSON.stringify(fontBase64)}; +const FONT_B64 = ${JSON.stringify(fontBase64)}; +const FONT_BOLD_B64 = ${JSON.stringify(boldFontBase64)}; -const fontBytes = Uint8Array.from(atob(FONT_B64), (c) => c.charCodeAt(0)); +const b64ToBytes = (b64) => Uint8Array.from(atob(b64), (c) => c.charCodeAt(0)); +const fontBytes = b64ToBytes(FONT_B64); +const boldFontBytes = b64ToBytes(FONT_BOLD_B64); // ── interfaccia ────────────────────────────────────────────────────────── const dropzone = document.getElementById('dropzone'); @@ -251,6 +255,7 @@ compileBtn.addEventListener('click', async () => { pdfLib: window.PDFLib, fontkit: window.fontkit, fontBytes, + boldFontBytes, }); downloadCard('PDF', 'Documento statico, pronto per la stampa.', stem + '.pdf', new Blob([pdfBytes], { type: 'application/pdf' })); diff --git a/package.json b/package.json index 01ef7bc..c06347a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "texforge", - "version": "1.0.0", + "version": "1.1.1", "description": "compilatore LaTeX → PDF + HTML", "type": "module", "main": "server.js", diff --git a/server.js b/server.js index 4ac0916..e0f77a2 100644 --- a/server.js +++ b/server.js @@ -33,10 +33,12 @@ fs.mkdirSync(WORK_ROOT, { recursive: true }); // Font Unicode per il generatore PDF di riserva: letto una volta all'avvio. // Se manca, il compilatore ripiega sui font standard e sui simboli ASCII. let UNICODE_FONT_BYTES = null; +let UNICODE_BOLD_BYTES = null; try { UNICODE_FONT_BYTES = fs.readFileSync(path.join(BASE_DIR, 'backend', 'fonts', 'DejaVuSans.ttf')); + UNICODE_BOLD_BYTES = fs.readFileSync(path.join(BASE_DIR, 'backend', 'fonts', 'DejaVuSans-Bold.ttf')); } catch { - console.warn('font DejaVuSans.ttf non trovato: i simboli matematici nel PDF saranno in ASCII'); + console.warn('font DejaVu non trovati: i simboli matematici nel PDF saranno in ASCII'); } // Scrive su disco il PDF prodotto dal compilatore condiviso. @@ -45,6 +47,7 @@ async function generatePdfFromQuiz(texContent, outputPath) { pdfLib, fontkit, fontBytes: UNICODE_FONT_BYTES, + boldFontBytes: UNICODE_BOLD_BYTES, }); fs.writeFileSync(outputPath, bytes); } diff --git a/src/compiler.js b/src/compiler.js index 9e5a489..8bf0f96 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -753,13 +753,14 @@ ${jsText.replace(/<\/script/gi, '<\\/script')} // Genera il PDF e ne restituisce i byte. // // `deps` porta dentro tutto ciò che il modulo non può procurarsi da solo: -// pdfLib { PDFDocument, StandardFonts, rgb } — la libreria PDF -// fontkit il registrar dei font TrueType (facoltativo) -// fontBytes il font Unicode da incorporare (facoltativo) +// pdfLib { PDFDocument, StandardFonts, rgb } — la libreria PDF +// fontkit il registrar dei font TrueType (facoltativo) +// fontBytes il font Unicode da incorporare (facoltativo) +// boldFontBytes la variante bold (facoltativa: senza, si simula) // Senza font Unicode il PDF viene comunque generato, con i simboli // matematici resi in ASCII. async function generatePdfBytes(texContent, deps) { - const { pdfLib, fontkit, fontBytes } = deps; + const { pdfLib, fontkit, fontBytes, boldFontBytes } = deps; const { PDFDocument, StandardFonts, rgb } = pdfLib; const pdfDoc = await PDFDocument.create(); @@ -772,15 +773,23 @@ async function generatePdfBytes(texContent, deps) { let font; let boldFont; let unicodeOk = false; + let realBold = false; try { if (!fontBytes || !fontkit) throw new Error('font Unicode non disponibile'); pdfDoc.registerFontkit(fontkit); font = await pdfDoc.embedFont(fontBytes, { subset: true }); - boldFont = font; // non c'è un file per il peso bold: il grassetto è simulato unicodeOk = true; + if (boldFontBytes) { + boldFont = await pdfDoc.embedFont(boldFontBytes, { subset: true }); + realBold = true; + } else { + boldFont = font; // senza il peso bold il grassetto viene simulato + } } catch { font = await pdfDoc.embedFont(StandardFonts.Helvetica); boldFont = await pdfDoc.embedFont(StandardFonts.HelveticaBold); + realBold = true; + unicodeOk = false; } // Riduce il testo a ciò che il font in uso sa codificare. @@ -791,8 +800,8 @@ async function generatePdfBytes(texContent, deps) { const safe = fit(text); const useFont = bold ? boldFont : font; page.drawText(safe, { ...opts, font: useFont }); - // senza un file di font bold, il grassetto si simula ridisegnando il testo - if (bold && unicodeOk) page.drawText(safe, { ...opts, font: useFont, x: opts.x + 0.3 }); + // solo se manca un vero peso bold il grassetto va simulato ridisegnando + if (bold && !realBold) page.drawText(safe, { ...opts, font: useFont, x: opts.x + 0.3 }); }; const widthOf = (text, size, bold = false) => From ad1b0442a4ec445ba3c9666544cd20512b1f1181 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 9 Aug 2026 18:50:03 +0000 Subject: [PATCH 2/2] feat: texforge diventa un'applicazione desktop con LaTeX vero e gestione pacchetti Il compilatore non vive piu' sul web: e' un'applicazione per Windows, macOS e Linux che compila con pdflatex e htlatex veri, e sa installare e conservare i pacchetti LaTeX. Il sito resta solo presentazione. L'applicazione (desktop/, Electron) - tre pagine: Compilatore, Pacchetti, Motore LaTeX - rileva la distribuzione TeX di sistema; se non c'e', installa una TeX Live minima nella cartella dati dell'utente: nessun permesso di amministratore e resta installata fra un avvio e l'altro - pagina Pacchetti su tlmgr: elenco, ricerca, installazione, rimozione, aggiornamento. Una trentina di pacchetti comuni installati da subito. I nomi sono validati prima di finire in una riga di comando - l'interfaccia gira con contextIsolation e senza Node: puo' fare solo cio' che il ponte in preload.cjs espone - smoke-test.mjs avvia l'app vera e verifica 13 comportamenti; gira in CI - electron-builder produce exe, dmg, AppImage, deb e rpm; la release li costruisce tutti con una matrice di CI e li allega Due bug trovati provando l'app, non leggendola - htlatex non veniva mai rilevato: e' uno script che esce con codice 1 su --version, quindi l'app lo credeva assente e ripiegava sempre sul generatore interno. Ora si verifica la presenza nel PATH - l'HTML di htlatex non era autosufficiente: rimandava a un .css esterno, non includeva quiz.js e dichiarava iso-8859-1. Aggiunto il post-processing che incorpora stile e script e corregge la codifica, cosi' il file resta valido anche spostandolo Il sito - docs/ e' solo presentazione, con i link che puntano alle release - server.js ridotto a servitore statico: rimossi /compile, gli endpoint /api, il rate limiting e la validazione degli upload, che non servivano piu' e restavano come superficie d'attacco. Via le dipendenze multer e archiver - rimossi Dockerfile, docker-compose e gli script per la VPS: servivano a ospitare il compilatore web - rimossi i file del vecchio frontend PWA non piu' serviti da nessuno; di frontend/ restano i CSS e le icone, usati dalla versione portatile La versione in un solo file HTML resta come alternativa portatile, per computer dove non si possono installare programmi. Verificato su albero pulito: 13/13 controlli dell'app con TeX Live installato (PDF con pdflatex, HTML con htlatex), AppImage da 108 MB costruito ed eseguibile, versione portatile ancora funzionante, sito servito senza traccia del compilatore. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01FRwidp8pte45RXaecqJaAe --- .dockerignore | 22 - .github/workflows/ci.yml | 246 +- .github/workflows/release.yml | 107 +- .gitignore | 11 +- CHANGELOG.md | 44 +- CONTRIBUTING.md | 69 +- Dockerfile | 40 - README.md | 217 +- deploy/deploy-vps.sh | 25 - deploy/nginx.conf | 27 - desktop/latex.js | 361 +++ desktop/main.js | 352 +++ desktop/package-lock.json | 5343 +++++++++++++++++++++++++++++++++ desktop/package.json | 97 + desktop/preload.cjs | 36 + desktop/prepare.mjs | 58 + desktop/renderer/app.css | 273 ++ desktop/renderer/app.js | 335 +++ desktop/renderer/index.html | 135 + desktop/renderer/style.css | 806 +++++ desktop/risorse/icon.png | Bin 0 -> 8496 bytes desktop/smoke-test.mjs | 93 + docker-compose.yml | 28 - docs/icons/icon-192.png | Bin 0 -> 2935 bytes docs/icons/icon-512.png | Bin 0 -> 8496 bytes docs/index.html | 100 +- frontend/app.js | 174 -- frontend/index.html | 150 - frontend/manifest.json | 35 - frontend/script.js | 160 - frontend/sw.js | 67 - package.json | 6 +- server.js | 465 +-- src/compiler.js | 50 + 34 files changed, 8330 insertions(+), 1602 deletions(-) delete mode 100644 .dockerignore delete mode 100644 Dockerfile delete mode 100644 deploy/deploy-vps.sh delete mode 100644 deploy/nginx.conf create mode 100644 desktop/latex.js create mode 100644 desktop/main.js create mode 100644 desktop/package-lock.json create mode 100644 desktop/package.json create mode 100644 desktop/preload.cjs create mode 100644 desktop/prepare.mjs create mode 100644 desktop/renderer/app.css create mode 100644 desktop/renderer/app.js create mode 100644 desktop/renderer/index.html create mode 100644 desktop/renderer/style.css create mode 100644 desktop/risorse/icon.png create mode 100644 desktop/smoke-test.mjs delete mode 100644 docker-compose.yml create mode 100644 docs/icons/icon-192.png create mode 100644 docs/icons/icon-512.png delete mode 100644 frontend/app.js delete mode 100644 frontend/index.html delete mode 100644 frontend/manifest.json delete mode 100644 frontend/script.js delete mode 100644 frontend/sw.js diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index ab01fe4..0000000 --- a/.dockerignore +++ /dev/null @@ -1,22 +0,0 @@ -node_modules -npm-debug.log* -.git -.github -.gitignore -.env - -# Output di compilazione di installazioni precedenti: non servono a runtime. -backend/compiled -backend/static -esempi/*.pdf -esempi/*.html -latex-source/*.html - -# Non serve a runtime (frontend/ e docs/ invece sì: li serve server.js) -deploy -api -vercel.json -CHANGELOG.md -CONTRIBUTING.md -.vscode -.idea diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index da52adc..545e2f4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,14 +7,12 @@ on: branches: [main, master] jobs: - server: - name: Server Node + smoke test + sito: + name: Sito di presentazione runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - - name: Setup Node - uses: actions/setup-node@v4 + - uses: actions/setup-node@v4 with: node-version: "22" @@ -26,43 +24,67 @@ jobs: node server.js & echo $! > server.pid for i in $(seq 1 30); do - if curl -sf -o /dev/null http://localhost:3000/; then - echo "server pronto dopo ${i}s" - exit 0 - fi + curl -sf -o /dev/null http://localhost:3000/ && exit 0 sleep 1 done - echo "il server non ha risposto entro 30s" - exit 1 + echo "il server non ha risposto entro 30s"; exit 1 - - name: La documentazione e' la pagina d'ingresso + - name: La documentazione è servita run: | curl -sf http://localhost:3000/ | grep -q 'id="navLinks"' curl -sf -o /dev/null http://localhost:3000/style.css curl -sf -o /dev/null http://localhost:3000/script.js echo "Docs OK" - - name: Il compilatore e' servito su /app + - name: Il sito non contiene più il compilatore run: | - curl -sf http://localhost:3000/app/ | grep -q 'id="dropzone"' - curl -sf -o /dev/null http://localhost:3000/app/app.js - curl -sf -o /dev/null http://localhost:3000/app/app.css - curl -sf -o /dev/null http://localhost:3000/app/manifest.json - curl -sf -o /dev/null http://localhost:3000/app/sw.js - echo "Frontend OK" + # niente form di upload né endpoint di compilazione + if curl -sf http://localhost:3000/ | grep -q 'id="dropzone"'; then + echo "il sito espone ancora il compilatore"; exit 1 + fi + code=$(curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:3000/compile) + test "$code" = "404" || { echo "/compile risponde ancora: $code"; exit 1; } + echo "Nessun compilatore sul web OK" - - name: Il vecchio indirizzo /docs reindirizza + - name: Il sito non rimanda a risorse esterne inattese run: | - code=$(curl -s -o /dev/null -w '%{http_code}' http://localhost:3000/docs/) - test "$code" = "301" || { echo "atteso 301, ricevuto $code"; exit 1; } - echo "Redirect OK" + node -e " + const fs = require('fs'); + const html = fs.readFileSync('docs/index.html', 'utf-8'); + const host = [...html.matchAll(/https?:\/\/([a-zA-Z0-9.-]+)/g)].map(m => m[1]); + const ammessi = new Set(['github.com', 'www.w3.org']); + const estranei = [...new Set(host)].filter(h => !ammessi.has(h)); + if (estranei.length) { console.error('domini inattesi:', estranei); process.exit(1); } + console.log('Nessun dominio esterno inatteso'); + " + + - name: Ferma il server + if: always() + run: kill "$(cat server.pid)" || true - - name: Gli endpoint di download rispondono + app-desktop: + name: App desktop + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "22" + + - name: Install TeX Live run: | - curl -sf http://localhost:3000/api/template/quiz.tex | grep -q 'documentclass' - curl -sf -o /dev/null http://localhost:3000/api/download/file/quizstruct.sty - curl -sf -o /dev/null http://localhost:3000/api/download/package.zip - echo "Download OK" + sudo apt-get update + sudo apt-get install -y --no-install-recommends \ + texlive-latex-base texlive-latex-extra \ + texlive-fonts-recommended tex4ht + + - name: Install dependencies + working-directory: desktop + run: npm install + + - name: Raccogli le risorse condivise + working-directory: desktop + run: node prepare.mjs - name: I font incorporati sono davvero font run: | @@ -72,183 +94,58 @@ jobs: const fs = require('fs'); for (const f of ['backend/fonts/DejaVuSans.ttf', 'backend/fonts/DejaVuSans-Bold.ttf']) { const magic = fs.readFileSync(f).subarray(0, 4).toString('hex'); - // 00010000 = TrueType, 4f54544f = 'OTTO' (CFF), 74727565 = 'true' if (!['00010000', '4f54544f', '74727565'].includes(magic)) { - console.error(f, 'non e un font: magic', magic); - process.exit(1); + console.error(f, 'non e un font: magic', magic); process.exit(1); } - console.log(f, 'OK (magic', magic + ')'); + console.log(f, 'OK'); } " - - name: Il PDF incorpora davvero il font Unicode - run: | - node -e " - const fs = require('fs'), zlib = require('zlib'); - (async () => { - const C = await import('./src/compiler.js'); - const pdfLib = await import('pdf-lib'); - const fontkit = (await import('@pdf-lib/fontkit')).default; - const tex = fs.readFileSync('latex-source/quiz.tex', 'utf-8'); - const bytes = await C.generatePdfBytes(tex, { - pdfLib, fontkit, - fontBytes: fs.readFileSync('backend/fonts/DejaVuSans.ttf'), - boldFontBytes: fs.readFileSync('backend/fonts/DejaVuSans-Bold.ttf'), - }); - const buf = Buffer.from(bytes); - let nomi = []; - const s = buf.toString('latin1'); - for (const m of s.matchAll(/stream\r?\n/g)) { - const start = m.index + m[0].length; - const end = buf.indexOf('endstream', start, 'latin1'); - if (end < 0) continue; - try { - const out = zlib.inflateSync(buf.subarray(start, end)).toString('latin1'); - for (const f of out.matchAll(/\/BaseFont\s*\/([A-Za-z0-9+\-]+)/g)) nomi.push(f[1]); - } catch {} - } - if (!nomi.some(n => /DejaVu/.test(n))) { - console.error('font Unicode non incorporato; trovati:', nomi); - process.exit(1); - } - console.log('Font nel PDF OK:', [...new Set(nomi)].join(', ')); - })().catch(e => { console.error(e); process.exit(1); }); - " - - - name: Compilazione di un singolo .tex + - name: Prova automatica dell'app + working-directory: desktop run: | - curl -sf -X POST http://localhost:3000/compile \ - -F "files=@latex-source/quiz.tex" -o out.json - node -e " - const fs = require('fs'); - const d = require('./out.json'); - if (!d.success) { console.error(d.log); process.exit(1); } - if (!d.pdf || !d.html) { console.error('output mancanti', d); process.exit(1); } - // gli output arrivano nella risposta, non da un URL sul server - fs.writeFileSync('out.pdf', Buffer.from(d.pdf.base64, 'base64')); - fs.writeFileSync('out.html', Buffer.from(d.html.base64, 'base64')); - console.log('Compile OK'); - " - head -c 4 out.pdf | grep -q '%PDF' - grep -qi ' evil.tex <<'TEX' - \documentclass{article} - \usepackage{enumitem} - \usepackage{quizstruct} - \begin{document} - \begin{quiz}{T} - \domanda[1]{D?} - \begin{opzioni} - \rispostacorretta{ok} - \end{opzioni} - \end{quiz} - \end{document} - TEX - curl -sf -X POST http://localhost:3000/compile -F "files=@evil.tex" -o evil.json - node -e " - const d = require('./evil.json'); - const html = Buffer.from(d.html.base64, 'base64').toString(); - if (/ + + diff --git a/desktop/renderer/style.css b/desktop/renderer/style.css new file mode 100644 index 0000000..e1146f1 --- /dev/null +++ b/desktop/renderer/style.css @@ -0,0 +1,806 @@ +/* ═══════════════════════════════════════════════════════════ + texforge — docs / style.css + Design system moderno: carta & inchiostro + accento verde + Transizioni morbide, layering, micro-interazioni + ═══════════════════════════════════════════════════════════ */ + +:root { + /* palette */ + --ink: #1c1f1a; + --ink-soft: #3a3d36; + --ink-dim: #6b6a63; + --paper: #f6f5f0; + --paper-dim: #eceae3; + --paper-card: #ffffff; + --line: #dedad0; + --line-soft: #ece9e1; + --accent: #3f5d3a; + --accent-mid: #5a7a52; + --accent-light: #7a9a72; + --accent-bg: #e9efe6; + --accent-glow: rgba(63, 93, 58, 0.10); + --accent-glow-strong: rgba(63, 93, 58, 0.18); + --err: #a13b2d; + --warn: #9a6700; + --blue: #2d5a7a; + + /* tipografia */ + --mono: "IBM Plex Mono", "SF Mono", ui-monospace, Menlo, Consolas, monospace; + --sans: "IBM Plex Sans", ui-sans-serif, system-ui, sans-serif; + --serif: "Source Serif 4", Georgia, "Times New Roman", serif; + + /* geometria */ + --r: 6px; + --r-md: 10px; + --r-lg: 14px; + --r-xl: 20px; + + /* motion */ + --ease: cubic-bezier(0.22, 1, 0.36, 1); + --ease-out: cubic-bezier(0.16, 1, 0.3, 1); + --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1); + --dur: 0.3s; + --dur-s: 0.15s; + --dur-l: 0.5s; + + /* shadows */ + --shadow-xs: 0 1px 2px rgba(28,31,26,0.04); + --shadow-sm: 0 2px 8px rgba(28,31,26,0.06); + --shadow: 0 8px 24px rgba(28,31,26,0.08); + --shadow-lg: 0 16px 48px rgba(28,31,26,0.12); + --shadow-xl: 0 24px 64px rgba(28,31,26,0.16); +} + +/* ── reset ── */ +*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } + +html { + scroll-behavior: smooth; + scroll-padding-top: 80px; + -webkit-text-size-adjust: 100%; +} + +body { + background: var(--paper); + color: var(--ink); + font-family: var(--sans); + font-size: 16px; + line-height: 1.6; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + overflow-x: hidden; +} + +code, pre, .mono { font-family: var(--mono); } + +a { + color: var(--accent); + text-decoration: none; + transition: color var(--dur-s) var(--ease); +} +a:hover { color: var(--accent-mid); } + +::selection { background: var(--accent-glow-strong); color: var(--ink); } + +/* scrollbar */ +::-webkit-scrollbar { width: 10px; height: 10px; } +::-webkit-scrollbar-track { background: var(--paper-dim); } +::-webkit-scrollbar-thumb { background: var(--line); border-radius: 5px; } +::-webkit-scrollbar-thumb:hover { background: var(--ink-dim); } + +/* ═══════════════ PROGRESS BAR ═══════════════ */ +.progress-bar { + position: fixed; top: 0; left: 0; height: 3px; width: 0%; + background: linear-gradient(90deg, var(--accent), var(--accent-light)); + z-index: 200; + transition: width 0.1s linear; +} + +/* ═══════════════ NAV ═══════════════ */ +.nav { + position: fixed; top: 0; left: 0; right: 0; z-index: 100; + display: flex; align-items: center; justify-content: space-between; + padding: 0.85rem 2rem; + background: rgba(246, 245, 240, 0.7); + backdrop-filter: blur(16px) saturate(180%); + -webkit-backdrop-filter: blur(16px) saturate(180%); + border-bottom: 1px solid transparent; + transition: border-color var(--dur) var(--ease), + box-shadow var(--dur) var(--ease), + background var(--dur) var(--ease), + padding var(--dur) var(--ease); +} +.nav.scrolled { + border-color: var(--line); + box-shadow: var(--shadow-sm); + padding: 0.65rem 2rem; + background: rgba(246, 245, 240, 0.92); +} + +.nav-brand { + display: flex; align-items: baseline; gap: 0.55rem; + color: var(--ink); +} +.nav-mark { + font-family: var(--mono); font-weight: 600; font-size: 1.25rem; + letter-spacing: -0.02em; + transition: color var(--dur-s) var(--ease); +} +.nav-brand:hover .nav-mark { color: var(--accent); } +.nav-name { + font-family: var(--mono); font-size: 0.75rem; font-weight: 500; + color: var(--ink-dim); + text-transform: uppercase; letter-spacing: 0.1em; +} + +.nav-links { + display: flex; gap: 0.15rem; list-style: none; +} +.nav-links a { + position: relative; + display: block; padding: 0.45rem 0.85rem; + font-family: var(--mono); font-size: 0.78rem; font-weight: 500; + color: var(--ink-soft); + border-radius: var(--r); + transition: background var(--dur-s) var(--ease), color var(--dur-s) var(--ease); +} +.nav-links a::after { + content: ""; position: absolute; bottom: 0.2rem; left: 50%; width: 0; height: 2px; + background: var(--accent); border-radius: 1px; + transition: width var(--dur) var(--ease), left var(--dur) var(--ease); +} +.nav-links a:hover { background: var(--paper-dim); color: var(--ink); } +.nav-links a:hover::after { width: 60%; left: 20%; } + +.nav-toggle { + display: none; flex-direction: column; gap: 4px; + background: none; border: none; cursor: pointer; padding: 4px; +} +.nav-toggle span { + width: 22px; height: 2px; background: var(--ink); border-radius: 1px; + transition: transform var(--dur) var(--ease), opacity var(--dur-s) var(--ease); +} +.nav-toggle.open span:nth-child(1) { transform: translateY(6px) rotate(45deg); } +.nav-toggle.open span:nth-child(2) { opacity: 0; } +.nav-toggle.open span:nth-child(3) { transform: translateY(-6px) rotate(-45deg); } + +/* ═══════════════ HERO ═══════════════ */ +.hero { + position: relative; + padding: 8rem 2rem 5rem; + overflow: hidden; +} +.hero-bg { + position: absolute; top: 0; left: 0; right: 0; bottom: 0; + pointer-events: none; z-index: 0; +} +.hero-bg-grid { + position: absolute; inset: 0; + background-image: + linear-gradient(var(--line-soft) 1px, transparent 1px), + linear-gradient(90deg, var(--line-soft) 1px, transparent 1px); + background-size: 48px 48px; + mask-image: radial-gradient(ellipse 80% 60% at 50% 30%, black 30%, transparent 80%); + -webkit-mask-image: radial-gradient(ellipse 80% 60% at 50% 30%, black 30%, transparent 80%); + opacity: 0.5; +} +.hero-bg-glow { + position: absolute; top: -10%; right: -5%; + width: 500px; height: 500px; + background: radial-gradient(circle, var(--accent-glow-strong) 0%, transparent 70%); + filter: blur(40px); + animation: glow-pulse 8s ease-in-out infinite; +} +@keyframes glow-pulse { + 0%, 100% { transform: scale(1); opacity: 0.6; } + 50% { transform: scale(1.15); opacity: 1; } +} + +.hero-inner { position: relative; z-index: 1; max-width: 1100px; margin: 0 auto; } + +.hero-grid { + display: grid; grid-template-columns: 1.05fr 0.95fr; + gap: 3rem; align-items: center; +} + +.hero-eyebrow { + display: inline-flex; align-items: center; gap: 0.5rem; + font-family: var(--mono); font-size: 0.75rem; font-weight: 500; + text-transform: uppercase; letter-spacing: 0.1em; + color: var(--accent); margin-bottom: 1.25rem; + padding: 0.3rem 0.8rem; + background: var(--accent-bg); border-radius: 100px; +} +.hero-eyebrow .dot { + width: 6px; height: 6px; border-radius: 50%; background: var(--accent); + animation: dot-pulse 2s ease-in-out infinite; +} +@keyframes dot-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.3; } } +.hero-eyebrow code { + font-size: 0.75rem; color: var(--accent); +} + +.hero-title { + font-family: var(--serif); font-weight: 700; + font-size: clamp(2.2rem, 5.5vw, 3.5rem); + line-height: 1.08; letter-spacing: -0.025em; + margin-bottom: 1.5rem; +} +.hero-title em { + color: var(--accent); font-style: italic; font-weight: 400; + position: relative; +} +.hero-title em::after { + content: ""; position: absolute; bottom: 0.1em; left: 0; right: 0; height: 8px; + background: var(--accent-bg); z-index: -1; border-radius: 4px; +} + +.hero-lead { + font-size: 1.1rem; line-height: 1.7; color: var(--ink-soft); + max-width: 500px; margin-bottom: 2rem; +} +.hero-lead code { font-size: 0.95rem; } +.hero-lead strong { color: var(--ink); font-weight: 600; } + +.hero-cta { display: flex; gap: 0.75rem; flex-wrap: wrap; } + +.btn { + display: inline-flex; align-items: center; gap: 0.45rem; + padding: 0.75rem 1.5rem; + font-family: var(--mono); font-size: 0.85rem; font-weight: 500; + border-radius: var(--r); border: 1px solid transparent; + cursor: pointer; + transition: all var(--dur) var(--ease); +} +.btn .arrow { transition: transform var(--dur) var(--ease); } +.btn-primary { + background: var(--ink); color: var(--paper); + box-shadow: var(--shadow-sm); +} +.btn-primary:hover { + background: var(--accent); color: var(--paper); + transform: translateY(-2px); + box-shadow: var(--shadow); +} +.btn-primary:hover .arrow { transform: translateX(4px); } +.btn-ghost { + background: transparent; color: var(--ink); border-color: var(--line); +} +.btn-ghost:hover { + border-color: var(--accent); color: var(--accent); + transform: translateY(-2px); + box-shadow: var(--shadow-sm); +} + +/* ── hero card ── */ +.hero-card { + background: var(--paper-card); border: 1px solid var(--line); + border-radius: var(--r-lg); overflow: hidden; + box-shadow: var(--shadow-lg); + transition: transform var(--dur-l) var(--ease), box-shadow var(--dur-l) var(--ease); + position: relative; +} +.hero-card:hover { + transform: translateY(-5px) scale(1.01); + box-shadow: var(--shadow-xl), 0 0 0 1px var(--accent-glow); +} +.card-bar { + height: 4px; + background: linear-gradient(90deg, var(--accent), var(--accent-light), var(--accent)); + background-size: 200% 100%; + animation: bar-shimmer 4s linear infinite; +} +@keyframes bar-shimmer { to { background-position: -200% 0; } } +.card-dots { + display: flex; gap: 5px; padding: 0.7rem 1rem 0; +} +.card-dots span { + width: 10px; height: 10px; border-radius: 50%; + background: var(--line); +} +.card-dots span:nth-child(1) { background: #e0a097; } +.card-dots span:nth-child(2) { background: #d9c97a; } +.card-dots span:nth-child(3) { background: #a0c997; } +.card-code { + margin: 0; padding: 0.75rem 1.5rem 1.5rem; + font-family: var(--mono); font-size: 0.8rem; line-height: 1.7; + overflow-x: auto; +} + +/* ── hero stats ── */ +.hero-stats { + display: grid; grid-template-columns: repeat(4, 1fr); + gap: 1rem; margin-top: 4rem; + padding-top: 2.5rem; border-top: 1px solid var(--line); +} +.stat { text-align: center; transition: transform var(--dur) var(--ease); } +.stat:hover { transform: translateY(-3px); } +.stat-num { + display: block; font-family: var(--serif); + font-size: 2.6rem; font-weight: 700; line-height: 1; + color: var(--accent); +} +.stat-label { + display: block; margin-top: 0.45rem; + font-family: var(--mono); font-size: 0.7rem; + color: var(--ink-dim); text-transform: uppercase; letter-spacing: 0.06em; +} + +/* ═══════════════ SECTIONS ═══════════════ */ +.section { + padding: 5rem 2rem; max-width: 1100px; margin: 0 auto; +} +.section-alt { + background: var(--paper-dim); + max-width: none; padding-left: 2rem; padding-right: 2rem; +} +.section-alt > * { max-width: 1100px; margin-left: auto; margin-right: auto; } + +.section-head { margin-bottom: 3rem; max-width: 680px; } +.section-num { + display: inline-block; + font-family: var(--mono); font-size: 0.72rem; font-weight: 600; + color: var(--accent); background: var(--accent-bg); + padding: 0.2rem 0.65rem; border-radius: 100px; + margin-bottom: 0.85rem; + letter-spacing: 0.04em; +} +.section-head h2 { + font-family: var(--serif); font-weight: 700; + font-size: clamp(1.7rem, 4vw, 2.3rem); + letter-spacing: -0.015em; margin-bottom: 0.7rem; + line-height: 1.15; +} +.section-sub { font-size: 1.05rem; color: var(--ink-soft); line-height: 1.65; } + +/* ═══════════════ FLOW ═══════════════ */ +.flow { + display: flex; align-items: stretch; gap: 1rem; +} +.flow-step { + flex: 1; background: var(--paper-card); border: 1px solid var(--line); + border-radius: var(--r-lg); padding: 2rem 1.5rem; text-align: center; + box-shadow: var(--shadow-sm); + transition: transform var(--dur) var(--ease-spring), + box-shadow var(--dur) var(--ease), + border-color var(--dur) var(--ease); +} +.flow-step:hover { + transform: translateY(-6px); + box-shadow: var(--shadow); + border-color: var(--accent-mid); +} +.flow-icon { font-size: 2.2rem; margin-bottom: 0.75rem; transition: transform var(--dur) var(--ease-spring); } +.flow-step:hover .flow-icon { transform: scale(1.15); } +.flow-step h3 { + font-family: var(--mono); font-size: 0.9rem; font-weight: 600; + margin-bottom: 0.5rem; +} +.flow-step p { font-size: 0.88rem; color: var(--ink-soft); line-height: 1.55; } +.flow-arrow { + display: flex; align-items: center; + font-family: var(--mono); font-size: 1.5rem; color: var(--ink-dim); + animation: arrow-slide 2s ease-in-out infinite; +} +@keyframes arrow-slide { + 0%, 100% { transform: translateX(0); } + 50% { transform: translateX(4px); } +} + +/* ═══════════════ CODE BLOCKS ═══════════════ */ +.grid-2 { + display: grid; grid-template-columns: 1fr 1fr; gap: 1.25rem; +} +.code-block { + background: var(--paper-card); border: 1px solid var(--line); + border-radius: var(--r-lg); overflow: hidden; + box-shadow: var(--shadow-sm); + transition: box-shadow var(--dur) var(--ease), transform var(--dur) var(--ease); +} +.code-block:hover { box-shadow: var(--shadow); transform: translateY(-2px); } +.code-head { + display: flex; align-items: center; gap: 0.5rem; + padding: 0.65rem 1rem; + background: var(--paper-dim); border-bottom: 1px solid var(--line); + font-family: var(--mono); font-size: 0.76rem; font-weight: 600; + color: var(--ink-soft); +} +.code-dot { + width: 8px; height: 8px; border-radius: 50%; background: var(--accent); +} +.code-block pre, .full-code { + margin: 0; padding: 1.25rem; + font-family: var(--mono); font-size: 0.8rem; line-height: 1.7; + overflow-x: auto; +} + +/* syntax highlight */ +.kw { color: var(--accent); font-weight: 500; } +.cmd { color: #b5651d; font-weight: 500; } +.comment { color: var(--ink-dim); font-style: italic; } + +/* ═══════════════ CALLOUT ═══════════════ */ +.callout { + margin-top: 2rem; padding: 1.25rem 1.5rem; + background: var(--accent-bg); + border-left: 3px solid var(--accent); + border-radius: 0 var(--r-md) var(--r-md) 0; + font-size: 0.93rem; color: var(--ink-soft); line-height: 1.65; + transition: transform var(--dur) var(--ease); +} +.callout:hover { transform: translateX(4px); } +.callout strong { color: var(--accent); } +.callout code { font-size: 0.86rem; } +.callout em { font-style: italic; color: var(--ink); } + +/* pkg grid dentro callout */ +.pkg-grid { + display: flex; flex-wrap: wrap; gap: 0.5rem; margin-top: 0.75rem; +} +.pkg { + font-family: var(--mono); font-size: 0.76rem; + background: var(--paper-card); padding: 0.2rem 0.6rem; + border-radius: var(--r); border: 1px solid var(--line); +} +.pkg code { font-size: 0.76rem; color: var(--accent); font-weight: 600; } + +/* ═══════════════ STRUCTURE DIAGRAM ═══════════════ */ +.structure-diagram { + background: var(--paper-card); border: 1px solid var(--line); + border-radius: var(--r-lg); padding: 2rem; + box-shadow: var(--shadow-sm); +} +.struct-layer { + display: flex; align-items: center; gap: 1rem; + padding: 0.85rem 1.25rem; + background: var(--paper-dim); border: 1px solid var(--line); + border-radius: var(--r); + margin: 0.4rem 0; + transition: all var(--dur) var(--ease); +} +.struct-layer:hover { + border-color: var(--accent-mid); + background: var(--accent-bg); + transform: translateX(6px); +} +.struct-tag { + flex-shrink: 0; + font-family: var(--mono); font-size: 0.68rem; font-weight: 600; + text-transform: uppercase; letter-spacing: 0.06em; + color: var(--paper); background: var(--ink); + padding: 0.2rem 0.55rem; border-radius: 3px; + min-width: 90px; text-align: center; +} +.struct-layer[data-level="2"] .struct-tag { background: var(--accent); } +.struct-layer[data-level="3"] .struct-tag { background: var(--blue); } +.struct-layer code { font-size: 0.82rem; color: var(--ink-soft); } +.struct-conn { + font-family: var(--mono); font-size: 0.78rem; color: var(--ink-dim); + padding-left: 2rem; line-height: 1.4; +} + +/* ═══════════════ COMMAND CARDS ═══════════════ */ +.cmd-list { + display: grid; grid-template-columns: 1fr 1fr; gap: 1.25rem; +} +.cmd-card { + background: var(--paper-card); border: 1px solid var(--line); + border-radius: var(--r-lg); padding: 1.5rem; + box-shadow: var(--shadow-sm); + transition: transform var(--dur) var(--ease-spring), + box-shadow var(--dur) var(--ease), + border-color var(--dur) var(--ease); +} +.cmd-card:hover { + transform: translateY(-4px); + box-shadow: var(--shadow); + border-color: var(--accent-mid); +} +.cmd-header { + display: flex; align-items: flex-start; justify-content: space-between; + gap: 0.75rem; margin-bottom: 0.7rem; +} +.cmd-syntax { + font-family: var(--mono); font-size: 0.84rem; font-weight: 500; + color: var(--ink); word-break: break-word; line-height: 1.4; +} +.cmd-syntax em { color: var(--accent); font-style: normal; font-weight: 400; } +.cmd-tag { + flex-shrink: 0; + font-family: var(--mono); font-size: 0.62rem; font-weight: 600; + text-transform: uppercase; letter-spacing: 0.06em; + padding: 0.18rem 0.5rem; border-radius: 3px; +} +.cmd-tag-env { color: var(--accent); background: var(--accent-bg); } +.cmd-tag-cmd { color: var(--blue); background: #e3edf3; } + +.cmd-card > p { font-size: 0.9rem; color: var(--ink-soft); line-height: 1.6; margin-bottom: 0.75rem; } +.cmd-card > p strong { color: var(--ink); font-weight: 600; } +.cmd-card > p em { font-style: italic; color: var(--ink); } + +/* arg list */ +.cmd-args { + margin-bottom: 0.75rem; +} +.arg { + display: flex; gap: 0.6rem; align-items: baseline; + font-size: 0.82rem; padding: 0.3rem 0; + border-bottom: 1px solid var(--line-soft); +} +.arg:last-child { border-bottom: none; } +.arg code { + flex-shrink: 0; font-size: 0.78rem; color: var(--accent); + background: var(--accent-bg); padding: 0.1rem 0.4rem; border-radius: 3px; +} +.arg span { color: var(--ink-dim); } + +/* render info */ +.cmd-render { + display: flex; flex-direction: column; gap: 0.3rem; + margin-bottom: 0.75rem; padding: 0.6rem 0.8rem; + background: var(--paper-dim); border-radius: var(--r); +} +.render-pdf, .render-html { + font-family: var(--mono); font-size: 0.72rem; line-height: 1.4; +} +.render-pdf { color: var(--ink-dim); } +.render-html { color: var(--accent); } + +.cmd-example { + background: var(--paper-dim); border-radius: var(--r); + padding: 0.75rem 1rem; font-size: 0.76rem; + border: 1px solid var(--line-soft); +} + +/* ═══════════════ TYPE CARDS ═══════════════ */ +.grid-4 { + display: grid; grid-template-columns: repeat(4, 1fr); gap: 1rem; +} +.type-card { + background: var(--paper-card); border: 1px solid var(--line); + border-radius: var(--r-lg); padding: 1.5rem 1.25rem; + box-shadow: var(--shadow-sm); + transition: transform var(--dur) var(--ease-spring), + box-shadow var(--dur) var(--ease); +} +.type-card:hover { + transform: translateY(-5px); + box-shadow: var(--shadow); +} +.type-badge { + width: 36px; height: 36px; + display: flex; align-items: center; justify-content: center; + font-family: var(--mono); font-weight: 700; font-size: 0.95rem; + color: var(--paper); border-radius: var(--r); + margin-bottom: 0.85rem; + transition: transform var(--dur) var(--ease-spring); +} +.type-card:hover .type-badge { transform: rotate(-8deg) scale(1.1); } +.type-badge-a { background: var(--accent); } +.type-badge-b { background: var(--blue); } +.type-badge-c { background: var(--warn); } +.type-badge-d { background: var(--ink); } + +.type-card h3 { + font-family: var(--serif); font-size: 1.1rem; font-weight: 600; + margin-bottom: 0.4rem; +} +.type-desc { font-size: 0.85rem; color: var(--ink-soft); margin-bottom: 0.75rem; line-height: 1.5; } +.type-render { + display: flex; flex-direction: column; gap: 0.2rem; + margin-bottom: 0.75rem; +} +.type-render span { + font-family: var(--mono); font-size: 0.7rem; +} +.type-render .render-pdf { color: var(--ink-dim); } +.type-render .render-html { color: var(--accent); } +.type-card pre { + background: var(--paper-dim); border-radius: var(--r); + padding: 0.6rem 0.8rem; font-size: 0.7rem; overflow-x: auto; + border: 1px solid var(--line-soft); +} + +/* ═══════════════ TABS ═══════════════ */ +.tabs { + display: flex; gap: 0.25rem; margin-bottom: 0; + border-bottom: 1px solid var(--line); + flex-wrap: wrap; +} +.tab { + padding: 0.7rem 1.25rem; + background: none; border: none; cursor: pointer; + font-family: var(--mono); font-size: 0.8rem; font-weight: 500; + color: var(--ink-dim); + border-bottom: 2px solid transparent; + transition: color var(--dur-s) var(--ease), border-color var(--dur) var(--ease), background var(--dur-s) var(--ease); + margin-bottom: -1px; + border-radius: var(--r) var(--r) 0 0; +} +.tab:hover { color: var(--ink); background: var(--paper-dim); } +.tab.active { color: var(--accent); border-color: var(--accent); } + +.tab-panes { position: relative; } +.tab-pane { display: none; } +.tab-pane.active { + display: block; + animation: fadeInUp 0.4s var(--ease-out); +} +.pane-intro { + padding: 1rem 1.5rem; + font-size: 0.88rem; color: var(--ink-soft); line-height: 1.6; + background: var(--paper-card); + border: 1px solid var(--line); border-top: none; + border-radius: 0; +} +.pane-intro code { font-size: 0.82rem; } +.full-code { + background: var(--paper-card); border: 1px solid var(--line); + border-top: none; border-radius: 0 0 var(--r-lg) var(--r-lg); + box-shadow: var(--shadow-sm); +} + +/* ═══════════════ COMPARE ═══════════════ */ +.compare { + display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem; +} +.compare-col { + background: var(--paper-card); border: 1px solid var(--line); + border-radius: var(--r-lg); overflow: hidden; + box-shadow: var(--shadow-sm); + transition: transform var(--dur) var(--ease-spring), + box-shadow var(--dur) var(--ease); +} +.compare-col:hover { + transform: translateY(-5px); + box-shadow: var(--shadow); +} +.compare-head { + display: flex; align-items: center; gap: 0.6rem; + padding: 1.25rem 1.5rem; border-bottom: 1px solid var(--line); + position: relative; +} +.compare-head h3 { font-family: var(--mono); font-size: 1rem; font-weight: 600; } +.compare-sub { + margin-left: auto; + font-family: var(--mono); font-size: 0.7rem; color: var(--ink-dim); +} +.compare-icon { font-size: 1.4rem; } +.compare-pdf { background: linear-gradient(135deg, var(--paper-dim), var(--paper-card)); } +.compare-html { background: linear-gradient(135deg, var(--accent-bg), var(--paper-card)); } +.compare-col ul { list-style: none; padding: 1.25rem 1.5rem; } +.compare-col li { + padding: 0.55rem 0; font-size: 0.9rem; color: var(--ink-soft); + border-bottom: 1px solid var(--line-soft); + line-height: 1.5; + transition: padding-left var(--dur) var(--ease); +} +.compare-col li:hover { padding-left: 0.4rem; } +.compare-col li:last-child { border-bottom: none; } +.compare-col li::before { + content: "→"; margin-right: 0.6rem; color: var(--accent); font-family: var(--mono); +} +.compare-col li strong { color: var(--ink); } +.compare-col li code { font-size: 0.82rem; } + +/* ═══════════════ FOOTER ═══════════════ */ +.footer { + background: var(--ink); color: var(--paper); + padding: 3rem 2rem 1.5rem; margin-top: 4rem; + position: relative; overflow: hidden; +} +.footer::before { + content: ""; position: absolute; top: 0; left: 0; right: 0; height: 1px; + background: linear-gradient(90deg, transparent, var(--accent), transparent); +} +.footer-grid { + display: grid; grid-template-columns: 2fr 1fr 1fr; gap: 2rem; + max-width: 1100px; margin: 0 auto 2rem; +} +.footer-brand { + font-family: var(--mono); font-size: 1.2rem; font-weight: 600; + margin-bottom: 0.6rem; +} +.footer-brand span { color: var(--accent-light); } +.footer-tag { font-size: 0.88rem; color: #b0aea4; max-width: 340px; line-height: 1.6; } +.footer-links h4 { + font-family: var(--mono); font-size: 0.72rem; text-transform: uppercase; + letter-spacing: 0.08em; margin-bottom: 0.75rem; color: #8a887e; +} +.footer-links a { + display: block; padding: 0.25rem 0; font-size: 0.88rem; color: #c8c6bc; + transition: color var(--dur-s) var(--ease), padding-left var(--dur) var(--ease); +} +.footer-links a:hover { color: var(--accent-light); padding-left: 0.3rem; } +.footer-bottom { + display: flex; justify-content: space-between; flex-wrap: wrap; gap: 0.5rem; + max-width: 1100px; margin: 0 auto; padding-top: 1.5rem; + border-top: 1px solid #3a3d36; + font-family: var(--mono); font-size: 0.73rem; color: #8a887e; +} + +/* ═══════════════ BACK TO TOP ═══════════════ */ +.back-top { + position: fixed; bottom: 1.5rem; right: 1.5rem; z-index: 90; + width: 44px; height: 44px; + display: flex; align-items: center; justify-content: center; + background: var(--ink); color: var(--paper); + border-radius: 50%; font-size: 1.2rem; + opacity: 0; pointer-events: none; + box-shadow: var(--shadow); + transition: opacity var(--dur) var(--ease), + transform var(--dur) var(--ease-spring), + background var(--dur-s) var(--ease); +} +.back-top.show { opacity: 1; pointer-events: auto; } +.back-top:hover { background: var(--accent); transform: translateY(-3px) scale(1.05); } + +/* ═══════════════ COPY TOAST ═══════════════ */ +.copy-toast { + position: fixed; bottom: 2rem; left: 50%; transform: translateX(-50%) translateY(20px); + background: var(--ink); color: var(--paper); + padding: 0.6rem 1.2rem; border-radius: 100px; + font-family: var(--mono); font-size: 0.82rem; font-weight: 500; + opacity: 0; pointer-events: none; z-index: 200; + box-shadow: var(--shadow-lg); + transition: opacity var(--dur) var(--ease), transform var(--dur) var(--ease-spring); +} +.copy-toast.show { + opacity: 1; transform: translateX(-50%) translateY(0); +} + +/* ═══════════════ REVEAL ANIMATIONS ═══════════════ */ +.reveal { + opacity: 0; transform: translateY(28px); + transition: opacity 0.7s var(--ease-out), transform 0.7s var(--ease-out); +} +.reveal.visible { opacity: 1; transform: translateY(0); } + +@keyframes fadeInUp { + from { opacity: 0; transform: translateY(14px); } + to { opacity: 1; transform: translateY(0); } +} + +/* ═══════════════ RESPONSIVE ═══════════════ */ +@media (max-width: 960px) { + .hero-grid { grid-template-columns: 1fr; gap: 2.5rem; } + .hero-stats { grid-template-columns: repeat(2, 1fr); gap: 1.5rem; } + .flow { flex-direction: column; } + .flow-arrow { transform: rotate(90deg); justify-content: center; padding: 0.25rem 0; } + .grid-2, .compare { grid-template-columns: 1fr; } + .grid-4 { grid-template-columns: 1fr 1fr; } + .cmd-list { grid-template-columns: 1fr; } + .footer-grid { grid-template-columns: 1fr; gap: 1.5rem; } +} + +@media (max-width: 640px) { + .nav { padding: 0.7rem 1rem; } + .nav-links { + display: none; position: absolute; top: 100%; left: 0; right: 0; + flex-direction: column; background: var(--paper); + border-bottom: 1px solid var(--line); padding: 0.5rem; + box-shadow: var(--shadow); + border-radius: 0 0 var(--r-lg) var(--r-lg); + } + .nav-links.open { display: flex; } + .nav-links a::after { display: none; } + .nav-toggle { display: flex; } + .hero { padding: 6rem 1rem 3rem; } + .section { padding: 3.5rem 1rem; } + .section-alt { padding-left: 1rem; padding-right: 1rem; } + .grid-4 { grid-template-columns: 1fr; } + .footer-bottom { flex-direction: column; } + .hero-stats { grid-template-columns: repeat(2, 1fr); } + .struct-layer { flex-direction: column; align-items: flex-start; gap: 0.4rem; } + .struct-tag { min-width: auto; } +} + +@media (prefers-reduced-motion: reduce) { + *, *::before, *::after { + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + transition-duration: 0.01ms !important; + } + .reveal { opacity: 1; transform: none; } + .hero-bg-glow, .flow-arrow, .card-bar, .hero-eyebrow .dot { animation: none; } +} \ No newline at end of file diff --git a/desktop/risorse/icon.png b/desktop/risorse/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3717a967d48b7e48e7ab45295ee599b11c06e43a GIT binary patch literal 8496 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 { + esiti.push({ nome, ok }); + console.log(` ${ok ? '✓' : '✗'} ${nome}${extra ? ' — ' + extra : ''}`); +}; + +const app = await electron.launch({ + args: [QUI, '--no-sandbox', '--disable-gpu'], + env: { ...process.env, ELECTRON_DISABLE_SECURITY_WARNINGS: '1' }, +}); + +const win = await app.firstWindow(); +await win.waitForLoadState('domcontentloaded'); + +const errori = []; +win.on('pageerror', (e) => errori.push(e.message)); +win.on('console', (m) => { if (m.type() === 'error') errori.push(m.text()); }); + +await win.waitForTimeout(1500); + +verifica('la finestra si apre', (await win.title()) === 'texforge', await win.title()); + +// il ponte preload è esposto, e Node non lo è +verifica('il ponte texforge è disponibile', + await win.evaluate(() => typeof window.texforge === 'object')); +verifica('il renderer non vede Node', + await win.evaluate(() => typeof window.require === 'undefined' && typeof window.process === 'undefined')); + +// stato del motore +const stato = await win.evaluate(() => window.texforge.stato()); +verifica('lo stato arriva dal processo principale', !!stato && 'piattaforma' in stato, + `LaTeX: ${stato?.tex ? stato.tex.tipo : 'assente'}`); +verifica('gli esempi sono inclusi', Object.keys(stato.esempi || {}).length >= 4, + Object.keys(stato.esempi || {}).join(' ')); + +// navigazione fra le pagine +await win.click('.scheda[data-pagina="pacchetti"]'); +verifica('la pagina Pacchetti si apre', + await win.locator('#pagina-pacchetti').evaluate((e) => e.classList.contains('attiva'))); +await win.click('.scheda[data-pagina="motore"]'); +verifica('la pagina Motore si apre', + await win.locator('#pagina-motore').evaluate((e) => e.classList.contains('attiva'))); +verifica('la scheda motore è popolata', + (await win.locator('#schedaMotore').innerText()).length > 20); + +// compilazione vera, tramite IPC +await win.click('.scheda[data-pagina="compilatore"]'); +await win.click('.template-btn[data-esempio="matematica.tex"]'); +verifica('l\'esempio entra nell\'elenco', (await win.locator('.file-item').count()) === 1); + +await win.click('#compileBtn'); +await win.waitForSelector('#outputs .output-card', { timeout: 120000 }); +const schede = await win.locator('#outputs .output-card').count(); +verifica('la compilazione produce PDF e HTML', schede === 2, `${schede} schede`); + +const motori = await win.locator('.motore-tag').allInnerTexts(); +console.log(` motori usati: ${motori.join(', ')}`); + +// anteprima nel riquadro isolato +await win.click('.output-btn-ghost'); +await win.waitForSelector('#preview:not([hidden])'); +await win.waitForTimeout(700); +const frame = win.frameLocator('#previewFrame'); +const domande = await frame.locator('.question-block').count(); +verifica('l\'anteprima mostra il quiz', domande > 0, `${domande} domande`); +// quiz.js inserisce i pulsanti "Verifica": se ci sono, lo script gira davvero +const pulsanti = await frame.locator('button').count(); +verifica('il JavaScript del quiz viene eseguito', pulsanti > 0, `${pulsanti} pulsanti`); + +verifica('nessun errore JavaScript', errori.length === 0, errori.join(' | ')); + +await win.screenshot({ path: path.join(QUI, '..', 'dist-desktop-screenshot.png'), fullPage: false }); +await app.close(); + +const falliti = esiti.filter((e) => !e.ok); +console.log(`\n${esiti.length - falliti.length}/${esiti.length} controlli superati`); +process.exit(falliti.length ? 1 : 0); diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 6008632..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,28 +0,0 @@ -# texforge — stack di produzione -# -# docker compose up --build -d -# -# Il container ascolta solo su 127.0.0.1:3000: non è esposto pubblicamente. -# Metti nginx davanti (vedi deploy/nginx.conf) per TLS e dominio. - -services: - texforge: - build: . - image: texforge:latest - container_name: texforge - restart: unless-stopped - ports: - - "127.0.0.1:3000:3000" - environment: - NODE_ENV: production - PORT: 3000 - # Il server non salva nulla in modo persistente: gli output viaggiano nella - # risposta e i temporanei stanno in /tmp. Non serve alcun volume. - tmpfs: - - /tmp - security_opt: - - no-new-privileges:true - # Nota: il filesystem non è montato in sola lettura perché TeX Live scrive - # le proprie cache dei font fuori da /tmp. Se irrigidisci il container con - # `read_only: true`, verifica prima che pdflatex funzioni ancora: in caso - # contrario il server ripiega in silenzio sul compilatore JavaScript. diff --git a/docs/icons/icon-192.png b/docs/icons/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..bdf9a13329643d3dd4816e3d39ff2ebdfd2f6b9e GIT binary patch literal 2935 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⟶ texforge — documentazione - + @@ -26,8 +26,8 @@
  • comandi
  • domande
  • esempi
  • -
  • installazione
  • -
  • apri il compilatore
  • + +
  • scarica l'app
  • @@ -48,8 +48,8 @@

    Scrivi in LaTeX, ottieni due cose

    con quiz cliccabili e punteggio automatico. Stesso file, due output.

    @@ -353,7 +353,7 @@

    Risultato

    Esempi pronti

    Clicca su un blocco di codice per copiarlo. Puoi anche caricare questi esempi - direttamente dal compilatore con un click. + direttamente dall'app con un click.

    @@ -414,7 +414,7 @@

    Esempi pronti

    \domanda[3]{Risolvi $2x + 4 = 10$} \numerica{3}{0} -% scarica l'esempio completo dal compilatore +% l'esempio completo e' incluso nell'app
    @@ -445,53 +445,63 @@

    Esempi pronti

    -
    +
    06 -

    Installazione locale

    +

    Scarica l'applicazione

    - Serve Node 18+. LaTeX è facoltativo: senza pdflatex - il server usa un compilatore JavaScript interno di riserva. + texforge è un'applicazione desktop. Compila con LaTeX vero e + include una gestione dei pacchetti: quelli che installi restano, anche dopo + aver chiuso il programma.

    -
    avvio
    -
    # 1. clona e installa
    -git clone https://github.com/Francy2009/TeXForge.git
    -cd TeXForge
    -npm install
    -
    -# 2. avvia
    -npm start
    -
    -# 3. apri http://localhost:3000
    +
    scarica
    +
    +

    + Prendi il file adatto al tuo sistema dall'ultima release. +

    +
    + Windows · .exe + macOS · .dmg + Linux · AppImage + Debian/Ubuntu · .deb + Fedora · .rpm +
    + + Vai alle release ⟶ + +
    -
    LaTeX completo (facoltativo)
    -
    # Debian / Ubuntu
    -sudo apt install texlive-latex-extra tex4ht
    -
    -# Fedora
    -sudo dnf install texlive-scheme-medium \
    -                 texlive-tex4ht
    -
    -# oppure, con Docker:
    -docker compose up --build -d
    +
    al primo avvio
    +
    # Hai gia' LaTeX installato?
    +texforge lo rileva e lo usa.
    +
    +# Non ce l'hai?
    +L'app propone di installare una
    +distribuzione TeX nella tua cartella
    +utente: un clic, nessun permesso
    +di amministratore.
    +
    +# Servono altri pacchetti?
    +Pagina Pacchetti -> cerca -> installa.
    +Restano per le volte successive.
    - frontend - index.html · app.js · app.css · sw.js — interfaccia PWA + interfaccia + finestra dell'app: compilatore, anteprima, pacchetti
    │
    - server - server.js — Express, POST /compile, fallback JS + motore + pdflatex e htlatex veri, con tlmgr per i pacchetti
    │
    @@ -501,11 +511,9 @@

    Installazione locale

    - Privacy. I file caricati vengono compilati in una cartella - temporanea cancellata durante la richiesta stessa. Gli output non - vengono mai salvati sul server: viaggiano dentro la risposta e li ricostruisce - il tuo browser, quindi non esiste alcun indirizzo da cui altri possano - recuperare i tuoi documenti. + Tutto in locale. L'applicazione compila sul tuo computer: + i documenti non vengono inviati da nessuna parte e non serve una connessione, + tranne la prima volta se devi scaricare la distribuzione TeX o un pacchetto nuovo.
    @@ -521,15 +529,15 @@

    Installazione locale