fix: exercices dans menu GraduationCap + équations KaTeX + refresh liste
- 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:
36
memento-note/lib/text/math-preprocess.ts
Normal file
36
memento-note/lib/text/math-preprocess.ts
Normal 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, '"')
|
||||
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, '"')
|
||||
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, '"')
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user