diff --git a/memento-note/app/api/ai/generate-exercises/route.ts b/memento-note/app/api/ai/generate-exercises/route.ts index 426db77..d555a3b 100644 --- a/memento-note/app/api/ai/generate-exercises/route.ts +++ b/memento-note/app/api/ai/generate-exercises/route.ts @@ -3,6 +3,7 @@ import { auth } from '@/auth' import prisma from '@/lib/prisma' import { exerciseGeneratorService } from '@/lib/ai/services/exercise-generator.service' import { checkEntitlementOrThrow, QuotaExceededError, incrementUsageAsync } from '@/lib/entitlements' +import { preprocessMathInHtml } from '@/lib/text/math-preprocess' export async function POST(request: NextRequest) { try { @@ -54,13 +55,15 @@ export async function POST(request: NextRequest) { const ex = exercises[i] const difficultyEmoji = ex.difficulty === 'facile' ? 'đą' : ex.difficulty === 'moyen' ? 'đĄ' : 'đŽ' - const content = ` + const rawContent = `
${exerciseLabel} ${i + 1} â ${difficultyEmoji} ${ex.difficulty}
${ex.question}
${answerLabel} â cliquer pour rĂ©vĂ©ler
${ex.answer}
{t('ai.generate.exercisesHint') || '5 exercices avec corrigés'}
-- {t('ai.generate.exercisesDesc') || "L'IA crée 5 exercices basés sur cette note, avec des niveaux de difficulté variés et des corrigés détaillés."} -
- -` - }) - - // 2. $$...$$ â block math - result = result.replace(/\$\$([\s\S]+?)\$\$/g, (_, latex) => { - const escaped = latex.trim().replace(/"/g, '"') - return `
` - }) - - // 3. \(...\) â inline math - result = result.replace(/\\\(([\s\S]+?)\\\)/g, (_, latex) => { - const escaped = latex.trim().replace(/"/g, '"') - return `${escaped}` - }) - - // 4. $...$ â inline math (only single $ not followed by another $) - result = result.replace(/(? { - const escaped = latex.trim().replace(/"/g, '"') - return `${escaped}` - }) - - // 5. Clean up empty
tags - result = result.replace(/\s*<\/p>/g, '') - - return result -} diff --git a/memento-note/lib/text/math-preprocess.ts b/memento-note/lib/text/math-preprocess.ts new file mode 100644 index 0000000..167bdf6 --- /dev/null +++ b/memento-note/lib/text/math-preprocess.ts @@ -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 `
` + }) + + // 2. $$...$$ â block math + result = result.replace(/\$\$([\s\S]+?)\$\$/g, (_, latex) => { + const escaped = latex.trim().replace(/"/g, '"') + return `
` + }) + + // 3. \(...\) â inline math + result = result.replace(/\\\(([\s\S]+?)\\\)/g, (_, latex) => { + const escaped = latex.trim().replace(/"/g, '"') + return `${escaped}` + }) + + // 4. $...$ â inline math (only single $ not followed by another $) + result = result.replace(/(? { + const escaped = latex.trim().replace(/"/g, '"') + return `${escaped}` + }) + + // 5. Clean up empty
tags + result = result.replace(/\s*<\/p>/g, '') + + return result +} diff --git a/memento-note/locales/en.json b/memento-note/locales/en.json index 3576bc2..8cc66c8 100644 --- a/memento-note/locales/en.json +++ b/memento-note/locales/en.json @@ -2559,6 +2559,7 @@ "pdfExportLoading": "Generating PDF...", "pdfExportSuccess": "PDF ready!", "generateExercises": "Generate exercises", + "generateExercisesHint": "5 exercises + answers", "exercisesLoading": "Generating exercises...", "exercisesGenerated": "exercises created!", "aiGenerateExercises": "Generate exercises", diff --git a/memento-note/locales/fr.json b/memento-note/locales/fr.json index 9ebade7..2afb6ac 100644 --- a/memento-note/locales/fr.json +++ b/memento-note/locales/fr.json @@ -2563,6 +2563,7 @@ "pdfExportLoading": "GĂ©nĂ©ration du PDF...", "pdfExportSuccess": "PDF prĂȘt !", "generateExercises": "GĂ©nĂ©rer des exercices", + "generateExercisesHint": "5 exercices + corrigĂ©s", "exercisesLoading": "GĂ©nĂ©ration des exercices...", "exercisesGenerated": "exercices créés !", "aiGenerateExercises": "GĂ©nĂ©rer des exercices", diff --git a/memento-note/tests/unit/chunk-indexing.test.ts b/memento-note/tests/migration/chunk-indexing.test.ts similarity index 100% rename from memento-note/tests/unit/chunk-indexing.test.ts rename to memento-note/tests/migration/chunk-indexing.test.ts