Skip to content

Come funziona Markdown ​

Capire come funziona Markdown ti aiuta a sfruttare meglio questo potente strumento. In questo capitolo scoprirai come il testo semplice viene trasformato in un documento ben formattato.

Flusso di lavoro di base ​

Il flusso di lavoro di Markdown può essere riassunto nei seguenti passaggi:

File sorgente Markdown (.md) → Parser Markdown → Documento HTML → Rendering nel browser

1. Scrivere il file sorgente Markdown ​

Puoi utilizzare qualsiasi editor di testo per creare un file .md e scrivere contenuti usando la sintassi Markdown:

markdown
# Il mio documento

Questo è un paragrafo **importante**.

## Esempio di lista

- Elemento 1
- Elemento 2
- Elemento 3

2. Elaborazione tramite il parser Markdown ​

Il parser legge il file Markdown, riconosce gli elementi sintattici e li converte nel corrispondente HTML:

html
<h1>Il mio documento</h1>
<p>Questo è un <strong>importante</strong> paragrafo.</p>
<h2>Esempio di lista</h2>
<ul>
  <li>Elemento 1</li>
  <li>Elemento 2</li>
  <li>Elemento 3</li>
</ul>

3. Rendering nel browser ​

L'HTML generato viene visualizzato come documento formattato nel browser.

Come funzionano i parser ​

Analisi lessicale ​

Il parser esegue prima un'analisi lessicale, suddividendo il testo Markdown in token:

  • # riconosciuto come token di intestazione
  • **testo** come token grassetto
  • - elemento come token di elemento di lista

Analisi sintattica ​

Successivamente viene eseguita l'analisi sintattica per costruire un albero sintattico astratto (AST):

Documento
├── Intestazione (livello 1): "Il mio documento"
├── Paragrafo
│   ├── Testo: "Questo è un"
│   ├── Grassetto: "importante"
│   └── Testo: "paragrafo."
├── Intestazione (livello 2): "Esempio di lista"
└── Lista non ordinata
    ├── Elemento: "Elemento 1"
    ├── Elemento: "Elemento 2"
    └── Elemento: "Elemento 3"

Generazione HTML ​

Infine, l'albero sintattico viene attraversato per generare il corrispondente output HTML.

Parser più diffusi ​

CommonMark ​

  • Specifiche standard – Fornisce uno standard unificato per il parsing Markdown
  • Definizione rigorosa – Elimina ambiguità tra implementazioni
  • Ampio supporto – Adottato da molti parser

GitHub Flavored Markdown (GFM) ​

Basato su CommonMark, con estensioni:

  • Supporto tabelle
  • Barrato
  • Liste di attività
  • Riconoscimento autolink
  • Evidenziazione della sintassi nei blocchi di codice

Altri parser ​

ParserLinguaggioCaratteristiche
markedJavaScriptVeloce, leggero
markdown-itJavaScriptEstendibile, molti plugin
Python-MarkdownPythonRicco di funzionalità, sistema di plugin
kramdownRubySupporta più formati di output
PandocHaskellConvertitore universale di documenti

Motori di rendering ​

Rendering lato client ​

Il Markdown viene analizzato nel browser in tempo reale:

javascript
// Con marked.js
const html = marked.parse('# Ciao mondo');
document.body.innerHTML = html;

Vantaggi:

  • Nessuna elaborazione lato server necessaria
  • Anteprima in tempo reale
  • Riduce il carico sul server

Svantaggi:

  • Dipende da JavaScript
  • Non ottimale per SEO
  • Caricamento iniziale più lento

Rendering lato server ​

L'HTML viene generato preventivamente sul server:

javascript
// Esempio Node.js
const fs = require('fs');
const marked = require('marked');

const markdown = fs.readFileSync('documento.md', 'utf8');
const html = marked.parse(markdown);

Vantaggi:

  • Ottimale per SEO
  • Caricamento veloce
  • Nessuna dipendenza da JavaScript lato client

Svantaggi:

  • Carico sul server
  • Gestione cache complessa

Generazione di siti statici ​

Tutte le pagine vengono generate in anticipo durante la build:

bash
# Con VitePress
npm run build

Vantaggi:

  • Velocità di caricamento massima
  • Migliore SEO
  • Elevata sicurezza
  • Distribuzione semplice

Svantaggi:

  • Supporto limitato per contenuti dinamici
  • Tempi di build più lunghi

Meccanismi di estensione ​

Sistema di plugin ​

Molti parser supportano estensioni tramite plugin:

javascript
// Esempio di plugin markdown-it
const md = require('markdown-it')()
  .use(require('markdown-it-footnote'))
  .use(require('markdown-it-deflist'))
  .use(require('markdown-it-abbr'));

Renderer personalizzato ​

javascript
// Renderer personalizzato per i link
const renderer = new marked.Renderer();
renderer.link = function(href, title, text) {
  return `<a href="${href}" target="_blank">${text}</a>`;
};

Ottimizzazione delle prestazioni ​

Strategia di caching ​

javascript
const cache = new Map();

function parseMarkdown(content) {
  const hash = generateHash(content);
  if (cache.has(hash)) {
    return cache.get(hash);
  }
  
  const result = marked.parse(content);
  cache.set(hash, result);
  return result;
}

Lazy Loading ​

javascript
// Analizza solo l'area visibile
const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      parseAndRender(entry.target);
    }
  });
});

Elaborazione in streaming ​

javascript
// Parsing a flusso per file di grandi dimensioni
const fs = require('fs');
const { Transform } = require('stream');

const markdownTransform = new Transform({
  transform(chunk, encoding, callback) {
    const html = marked.parse(chunk.toString());
    callback(null, html);
  }
});

fs.createReadStream('documento-grande.md')
  .pipe(markdownTransform)
  .pipe(fs.createWriteStream('output.html'));

Problemi comuni ​

1. Problemi di interruzione di riga ​

Parser diversi possono gestire le interruzioni di riga in modo differente:

markdown
Riga 1
Riga 2        ← Potrebbero essere interpretate come lo stesso paragrafo

Riga 1  
Riga 2        ← Due spazi alla fine della riga forzano un'interruzione di riga

Riga 1

Riga 2        ← Una riga vuota separa i paragrafi

2. Mescolanza di HTML ​

markdown
Questo è un mix di **Markdown** e <em>HTML</em>.

Fai attenzione a chiudere e annidare correttamente i tag HTML.

3. Escape dei caratteri speciali ​

markdown
Qui devi fare l'escape di \* e \_ .

Scenari di applicazione pratica ​

1. Sistemi di blog ​

Articoli Markdown → Generatore di siti statici → Sito web HTML

2. Siti di documentazione ​

Documenti .md → VitePress/Docusaurus → Documentazione online

3. File README ​

README.md → GitHub/GitLab → Homepage del progetto

4. App per prendere appunti ​

Note Markdown → Rendering in tempo reale → Visualizzazione rich text

Prossimi passi ​

Ora che sai come funziona Markdown, puoi:

Built by www.markdownlang.com