Files
creator2/backend/katex_check.mjs
2026-07-10 16:29:35 +02:00

29 lines
1.0 KiB
JavaScript

// KaTeX-Parse-Gate: prüft Formeln mit DEMSELBEN Renderer wie das Frontend.
// stdin: JSON [{tex, display}] → stdout: JSON [fehlermeldung, …]
// Ersetzt die Regex-Jagd auf einzelne Befehle: was hier durchgeht, rendert auch.
import { createRequire } from 'node:module'
import { readFileSync } from 'node:fs'
let katex
try {
katex = createRequire(import.meta.url)('katex') // Container: backend/node_modules
} catch {
const basis = process.env.KATEX_BASE // Dev: frontend/node_modules
katex = createRequire(basis.endsWith('/') ? basis : basis + '/')('katex')
}
// gleiche Makros wie frontend/src/markdown.js — das Gate darf nicht strenger
// sein als der Renderer
const macros = { '\\textsc': '\\text{#1}' }
const formeln = JSON.parse(readFileSync(0, 'utf8'))
const fehler = []
for (const f of formeln) {
try {
katex.renderToString(f.tex, { displayMode: !!f.display, macros: { ...macros } })
} catch (e) {
fehler.push(`$${f.tex.slice(0, 60)}$${String(e.message || e).slice(0, 120)}`)
}
}
process.stdout.write(JSON.stringify(fehler))