Fixato bug //TABLE

This commit is contained in:
gabriele-cusato 2026-03-25 11:26:56 +01:00
parent 5e76163f90
commit 208703b273
2 changed files with 15 additions and 5 deletions

View file

@ -223,6 +223,11 @@ cd C:\Projects\pluginObsidian\handWrittenMarkdownConverter\HandTranscriptMd; nod
### Task aperti
- **Bug parser `//TABLE`**`src/md-parser.ts`:
- Durante un test OCR il tag di chiusura `//TABLE` è stato riconosciuto come tag di apertura di una nuova tabella, invece di terminare quella corrente
- I valori delle celle non sono stati inseriti nella tabella
- Verificare la logica di parsing delle righe successive al tag `//TABLE`: probabilmente una riga contenente solo `//TABLE` (o simile) viene re-interpretata come nuovo comando invece di essere ignorata/consumata
- **Keyword personalizzate nelle impostazioni**`src/settings.ts` + `src/md-parser.ts`:
- Permettere all'utente di aggiungere keyword custom nella pagina impostazioni
- Ogni keyword custom ha: nome (es. `FIRMA`), output markdown (es. `— Mario Rossi`)

View file

@ -315,17 +315,22 @@ export function expandKeywords(text: string, fnStart = 1): string {
// --- TABLE multi-riga ---
// Header: //TABLE Col1, Col2, Col3
// Righe: val1, val2, val3 (una per riga, virgola come separatore)
// Fine: //TABLE (tag di chiusura) oppure riga vuota / senza virgola
// Fine: //TABLE (tag di chiusura) oppure riga vuota
case 'TABLE': {
const headers = content.split(',').map(h => h.trim());
const rows: string[][] = [];
i++;
while (i < lines.length) {
const rowLine = lines[i].trim();
// Tag di chiusura: "<TABLE>" senza contenuto
if (/^\/\/TABLE\s*$/i.test(rowLine)) { i++; break; }
// Fine implicita: riga vuota o riga senza virgola
if (!rowLine || !rowLine.includes(',')) break;
// Chiusura esplicita: //TABLE (anche con rumore OCR dopo, es. //TABLE. //TABLE:)
// \b garantisce che "TABLE" sia seguito da fine parola, non da altre lettere
if (/^\/\/TABLE\b/i.test(rowLine)) { i++; break; }
// Qualsiasi altra keyword chiude implicitamente senza consumarla
if (/^\/\//.test(rowLine)) break;
// Fine implicita: riga vuota
if (!rowLine) break;
// Riga con o senza virgola: trattata comunque come riga dati
// (evita interruzione prematura per righe OCR con cella singola)
rows.push(rowLine.split(',').map(c => c.trim()));
i++;
}