fix: exercices dans menu GraduationCap + équations KaTeX + refresh liste
Some checks failed
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled

- Menu déroulant GraduationCap : Flashcards + Exercices réunis
- Fix: language non défini dans toolbar (useLanguage destructuring)
- Fix: équations 658071 → KaTeX dans exercices (preprocessMathInHtml partagé)
- lib/text/math-preprocess.ts : utilitaire partagé wizard + exercices
- Toast avec bouton 'Voir' pour rafraîchir après création exercices
- emitNoteChange pour rafraîchir la liste
- i18n FR/EN
This commit is contained in:
Antigravity
2026-06-14 20:13:25 +00:00
parent 08d190eb03
commit eff906d187
8 changed files with 98 additions and 97 deletions

View File

@@ -0,0 +1,36 @@
/**
* Convertit les délimiteurs LaTeX en nœuds TipTap pour le rendu KaTeX.
* À appliquer sur tout contenu HTML généré par l'IA avant stockage en DB.
*/
export function preprocessMathInHtml(html: string): string {
let result = html
// 1. \[...\] → block math
result = result.replace(/\\\[([\s\S]+?)\\\]/g, (_, latex) => {
const escaped = latex.trim().replace(/"/g, '"')
return `</p><div data-type="math-equation" data-latex="${escaped}"></div><p>`
})
// 2. $$...$$ → block math
result = result.replace(/\$\$([\s\S]+?)\$\$/g, (_, latex) => {
const escaped = latex.trim().replace(/"/g, '&quot;')
return `</p><div data-type="math-equation" data-latex="${escaped}"></div><p>`
})
// 3. \(...\) → inline math
result = result.replace(/\\\(([\s\S]+?)\\\)/g, (_, latex) => {
const escaped = latex.trim().replace(/"/g, '&quot;')
return `<span data-type="inline-math" data-latex="${escaped}">${escaped}</span>`
})
// 4. $...$ → inline math (only single $ not followed by another $)
result = result.replace(/(?<!\$)\$(?!\$)([^\n$]+?)\$(?!\$)/g, (_, latex) => {
const escaped = latex.trim().replace(/"/g, '&quot;')
return `<span data-type="inline-math" data-latex="${escaped}">${escaped}</span>`
})
// 5. Clean up empty <p></p> tags
result = result.replace(/<p>\s*<\/p>/g, '')
return result
}