` multi-riga** — `src/md-parser.ts` → `expandKeywords`, case `TABLE`:
+ - Le intestazioni vengono generate correttamente ma le righe dati vengono lasciate invariate
+ - Esempio input:
+ ```
+
+ ```
+ - Output atteso: tabella completa con intestazioni + righe dati
+ - Output attuale: intestazioni ok, poi le righe dati restano come testo grezzo (`val1,val2,val3`) seguite da `| |` e `|---|`
+ - Probabile causa: il loop di raccolta righe in `case 'TABLE'` non legge correttamente le righe successive
+
- **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`)
diff --git a/HandTranscriptMd/src/embed.ts b/HandTranscriptMd/src/embed.ts
index ade9374..b78f33e 100644
--- a/HandTranscriptMd/src/embed.ts
+++ b/HandTranscriptMd/src/embed.ts
@@ -349,6 +349,8 @@ async function doConvertWiki(
const rawText = await recognizer.recognize(base64);
if (!rawText.trim()) throw new Error('Nessun testo riconosciuto');
const markdown = parseMarkdown(rawText);
+ // In modalità debug mostra il testo grezzo restituito da Gemini (prima del parsing)
+ if (plugin.settings.debugMode) new Notice(`[DEBUG] Testo grezzo Gemini:\n${rawText}`, 30000);
await archiveSvgByPath(svgPath, plugin);
await replaceWikiEmbedWithMarkdown(svgPath, markdown, sourcePath, plugin);
new Notice('Conversione completata!');
@@ -375,6 +377,8 @@ async function doConvert(
if (!rawText.trim()) { new Notice('Nessun testo riconosciuto'); return; }
const markdown = parseMarkdown(rawText);
+ // In modalità debug mostra il testo grezzo restituito da Gemini (prima del parsing)
+ if (plugin.settings.debugMode) new Notice(`[DEBUG] Testo grezzo Gemini:\n${rawText}`, 30000);
await archiveSvg(data, plugin);
await replaceEmbedWithMarkdown(ctx, data, markdown, plugin);
new Notice('Conversione completata!');
diff --git a/HandTranscriptMd/src/md-parser.ts b/HandTranscriptMd/src/md-parser.ts
index f62b465..53353cd 100644
--- a/HandTranscriptMd/src/md-parser.ts
+++ b/HandTranscriptMd/src/md-parser.ts
@@ -57,8 +57,8 @@ export function normalizeMarkdownSymbols(rawText: string): string {
* Applica le correzioni su una singola riga (non dentro blocchi codice).
*/
function normalizeLine(line: string): string {
- // Righe keyword — non modificare, le gestisce expandKeywords
- if (/^<[A-Za-z0-9_]+/i.test(line.trim())) return line;
+ // Righe keyword //KEYWORD — non modificare, le gestisce expandKeywords
+ if (/^\/\/[A-Za-z0-9_]/i.test(line.trim())) return line;
// Rimuove spazi finali (non iniziali: servono per le liste annidate)
line = line.trimEnd();
@@ -194,10 +194,10 @@ export function expandKeywords(text: string, fnStart = 1): string {
const line = lines[i];
const trimmed = line.trim();
- // Pattern: contenuto oppure contenuto (es. )
- // Il parametro extra (linguaggio per CODEBLOCK) è dentro le <>:
- // Il contenuto segue > con opzionale : e/o spazio (es.
CIAO,
:CIAO)
- const kw = trimmed.match(/^<([A-Za-z0-9_]+)(?:\s+([^>]*?))?\s*>[\s:]*(.*)/i);
+ // Pattern: //KEYWORD contenuto oppure //KEYWORD: contenuto (colon opzionale)
+ // Es: //H1 CIAO, //LIST a, b, c, //CODEBLOCK js, //HR
+ // Il contenuto segue il nome keyword separato da spazio e/o ':'
+ const kw = trimmed.match(/^\/\/([A-Za-z0-9_]+)\s*:?\s*(.*)/i);
if (!kw) {
out.push(line);
@@ -206,8 +206,7 @@ export function expandKeywords(text: string, fnStart = 1): string {
}
const keyword = kw[1].toUpperCase(); // nome keyword normalizzato
- const extra = (kw[2] ?? '').trim(); // parametro aggiuntivo (es. linguaggio CODEBLOCK)
- const content = (kw[3] ?? '').trim(); // contenuto dopo ':'
+ const content = (kw[2] ?? '').trim(); // contenuto dopo la keyword
switch (keyword) {
@@ -287,9 +286,9 @@ export function expandKeywords(text: string, fnStart = 1): string {
case 'INDENT': out.push(` ${content}`); break;
// --- CODEBLOCK multi-riga (termina con riga vuota) ---
- // Sintassi: _CODEBLOCK js: (linguaggio nel parametro opzionale prima di ':')
+ // Sintassi: //CODEBLOCK js (linguaggio dopo il nome keyword)
case 'CODEBLOCK': {
- const lang = extra; // es. "js", "python", ""
+ const lang = content; // es. "js", "python", ""
i++;
const codeLines: string[] = [];
// Raccoglie righe fino alla prima riga vuota o fine testo
@@ -314,9 +313,9 @@ export function expandKeywords(text: string, fnStart = 1): string {
}
// --- TABLE multi-riga ---
- // Header: