# HTML Tidy

HTML Tidy è uno strumento ideato da Dave Raggett per aiutare ad evitare di fare errori nella stesura di codice HTML.
Tidy infatti si occupa di correggere tutti gli errori più tipici in cui si incorre durante lo sviluppo di codice web. Inoltre si occupa di rendere leggibile il codice generato da editor HTML, e di segnalare all'utente dove deve prestare più attenzione. Riesce a riconoscere una vasta gamma di errori, segnalandoli come WARNINGS (avvertimenti), ai quali affianca numero di riga e colonna. Nel caso di problemi per i quali non riesce a trovare una valida gestione, il motore di Tidy non genererà del codice, ma li metterà in evidenza come ERRORS. Inoltre è stato sviluppato per gestire codice markup generato da Microsoft Word, il quale inserisce elementi (spesso scomodi e mal gestiti dai browser) per permettere un'integrazione tra il codice HTML e il file word stesso.

## Storia

La prima release ufficiale, sviluppata dal membro del World Wide Web Consortium (W3C) Dave Raggett, risale al 1998.
Nel 2001 il software è diventato open source e viene ospitato su SourceForge, affidato ad un gruppo di volontari.
Nel 2012 la W3C ha effettuato un fork su GitHub gestito da Michael Smith. In questo periodo è stato reso compatibile con l'HTML5.
Il fork della W3C è divenuto la versione ufficiale di Tidy nel 2015, quando la responsabilità del progetto è passata dal W3C all'HTML Tidy Advocacy Community Group (HTACG), formato allo scopo di ridare vita a Tidy, che non riceveva major release dal 2008.. Il 4 settembre dello stesso anno viene pubblicata la versione 5.0.0, che tra le altre cose introduce ufficialmente il supporto all'HTML5

## Come funziona Tidy

Tidy corregge il markup (dove possibile) rispettando la sintassi osservata in alcuni browser quali Firefox, Internet Explorer, Opera, Netscape.

### Correzione dei tag di chiusura mancanti o non accoppiati

    <h1> bla <h2> blabla </h3>
    Tidy corregge con:
    <h1> bla </h1> <h2> blabla </h2>

### Correzione dell'ordine di chiusura dei tag

    <p> paragrafo ''' grassetto '' grassetto corsivo ''' grassetto? '' normale?
    Tidy corregge con:
    <p> paragrafo ''' grassetto '' grassetto corsivo '' grassetto? ''' normale?

### Correzione problemi nei tag heading

    In Internet Explorer, tutto ciò che segue l'apertura del tag di heading sarà associato allo stile del tag h1, effetto per niente desiderato!
    Tidy corregge con:
    <h1> '' heading corsivo '' </h1> <p> paragrafo

### Correzione di tag posizionati male

    '' <h1> heading </h1> '' <p> paragrafo <b> grassetto <p> grassetto ancora!
    Tidy corregge con:
    <h1> '' heading '' </h1> <p> paragrafo ''' grassetto ''' <p> ''' grassetto ancora!'''

### Corretto posizionamento del tag hr

    <h1><hr>heading</h1>
    <h2>sotto <hr>heading</h2>
    Tidy corregge con:
    <hr>
    <h1>heading</h1>
    <h2>sotto</h2>
    <hr>
    <h2>heading</h2>

### Aggiunta di “/” finale nelle ancore

    <a href="#refs">link<a>
    Tidy corregge con:
    <a href="#refs">link</a>

### Correzione delle liste

    <body>
    <li>1st
    <li>2nd
    Tidy corregge con:
    <body>
    <ul>
    <li>1st </li>
    <li>2nd </li>
    </ul>
    </body>

## Grammatica
### Aggiunta di "

    inserisce gli apici dove mancano. Inoltre si occupa di inserire gli apici finali dove dimenticati.

### Attributi sconosciuti/proprietari segnalati

    conosce tutti gli attributi di HTML e XHTML, e aiuta lo sviluppatore a trovare subito dove ha sbagliato grazie alle segnalazioni

### Elementi proprietari segnalati

    riconosce quale versione di HTML si sta usando, segnalandolo e aggiungendo il corretto DOCTYPE al documento

### Segnalazione di '>' mancanti

    Tidy corregge anche la mancanza > nei tags

## Layout

Tidy offre la possibilità di decidere quale stile si vuole usare nella generazione di markup (ad esempio, se si vuole che gli elementi vengano indentati o meno). Inizia costruendo un albero di parsing pulito (non contiene nessuna informazione sul layout), direttamente dal file sorgente. Questo albero viene poi visualizzato a seconda delle impostazioni nel file di configurazione. Alcuni browser possono interpretare in modo non desiderato un'indentazione personalizzata del codice.
Ad esempio:
Per un bug comune dei browser, nel primo caso gli spazi bianchi non vengono ignorati, causando problemi nell'interpretazione del tag h1.
L'indentazione personalizzata crea problemi anche nelle tabelle:
Viene interpretata diversamente da:
Questi problemi si possono evitare impostando “no” o “auto” nel file di configurazione di Tidy, alla voce INDENT.

## Altre features
### Internazionalizzazione

    Tidy offre una vasta scelta di caratteri tra cui scegliere, e si preoccupa di correggere eventuali errori nell'utilizzo degli stessi all'interno del documento

### Accessibilità

    Tidy offre soluzioni a problemi riguardanti le persone che non usano browser text-based. Ad esempio, suggerisce sempre di inserire un sommario per gli attributi delle tabelle, in modo da favorire la navigazione a chi usa i browser "aural" (vocali)

### Pulizia

    l'opzione –clean di Tidy consente di rimuovere gli eccessi di font, style, color e di inserirli piuttosto in un foglio di stile CSS. Inoltre, cancella paragrafi ed heading vuoti, inserendo lo stile corretto nei fogli di stile, o usando il tag

### XML

    Tidy aiuta correggere gli errori che causano il rifiuto dei files xml

## File di configurazione

L'opzione –config <filename> consente a Tidy, lanciato da riga di comando, di utilizzare un file di configurazione da noi personalizzato. In alternativa, si può cambiare la variabile d'ambiente HTML_TIDY per impostare il nostro file come file di default da usare, in modo da non dover sempre specificare quale deve essere usato.