Il modulo tidy si avvale dell'omonimo programma per individuare eventuali errori nel contenuto della pagina da cui viene chiamato; si può richiamare dai nodi di tipo "page" o "book" attraverso l'omonima linguetta.

Il suo funzionamento interno è molto semplice. Per prima cosa viene recuperata la pagina in questione utilizzando come identificativo del nodo arg(1), che viene passato automaticamente da drupal:

$page = implode("\n", file($base_url."/node/".arg(1)));

A questo punto si avvia tidy aprendo i tre descrittori standard (stdin, stdout e stderr) per comunicare:

$descriptorspec = array(
    // stdin is a pipe that the child will read from
    0 => array("pipe", "r"),  
    // stdout is a pipe that the child will write to
    1 => array("pipe", "w"),  
    // stderr is a pipe that the child will write to
    2 => array("pipe", "w")   
);

$process = proc_open('tidy -asxhtml -q', $descriptorspec, $pipes);

e gli si invia la pagina web precedentemente immagazzinata in $page tramite stdin:

fwrite($pipes[0], $page);

per poi leggere eventuali messaggi di errore da stderr:

while (!feof($pipes[2])) {

  $contents .= fread($pipes[2], 8192);

}//WHILE

Se il codice HTML (o XHTML, nel nostro caso) non è corretto, lo standard error conterrà i messaggi di errore che tidy avrebbe normalmente visualizzato in terminale. Questi ultimi permettono di individuare e correggere gli errori di sintassi in modo abbastanza semplice e veloce:

line 213 column 5 - Warning: missing <li>
line 215 column 8 - Warning: trimming empty <p>
line 218 column 7 - Warning: trimming empty <li>
line 220 column 1 - Warning: trimming empty <ol>

Riferimenti: