Automatizziamo

I lavori noiosi deve farli il computer.


Quello che abbiamo appena analizzato è il processo che ha portato alla realizzazione del mio primo DVD ed ha una struttura piuttosto semplice, nel seguito ho inserito altre interessanti features che hanno inevitabilmente complicato il sistema di navigazione. Tanto per dare un’idea tenete presente che uno degli ultimi DVD che ho realizzato (e che analizzeremo come esempio finale) utilizza 18 menu con, per motivi che vedremo, 2 maschere ciascuno: pensate sia una cosa semplice realizzare a mano i 36 file di configurazione per spumux necessari?

La struttura sempre ripetitiva di quei file si presta ad una generazione automatizzata ed il programma relativo lo trovate nel Listato 7 (Nuova pagina).

Il programma è scritto in javascript ed è inglobato in una struttura windows scripting format (wsf).

Quest'ultima è composta da un file XML che si occupa di gestire per noi i parametri e altre cose; per maggiori dettagli vi rimando alla documentazione di WSH [18] e al corso di javascript apparso su DEV qualche anno fa [21].

Cominciamo l'analisi del listato dalle dichiarazioni dei parametri: il primo è facilmente comprensibile ed è ovviamente obbligatorio


<named name="filename" helpstring="Il nomefile del menu" required="true" type="string" />

Il secondo parametro è opzionale e serve a gestire la ricerca automatica dei pulsanti all'interno della maschera dei menu.


<named name="outlinewidth" helpstring="Dimensione minima per la ricerca dei bottoni" required="false" type="string" />

La ricerca dei bottoni avviene cercando delle figure continue all'interno dell'immagine della maschera. Con questo parametro si indica quale deve essere la tolleranza (in pixel) con cui considerare "continua" una figura: più è alto il valore più la ricerca è tollerante, ma più alto è anche il rischio che due figure che si volevano separate siano considerate una sola.

Se le maschere sono costituite solo da rettangoli come abbiamo fatto finora questo parametro non serve, ma sarà indispensabile quando più avanti vedremo delle maschere con del testo: ci permetterà infatti di ignorare gli spazi fra lettere e parole.

Riprendendo l'analisi del listato troviamo tutta una serie di inizializzazioni e controlli sui parametri fino ad arrivare a queste righe dove si vede lo scheletro del file di controllo di spumux.


oxml = WScript.CreateObject("Msxml2.DOMDocument.4.0");
oxml.loadXML("<subpictures><stream><spu/></stream></subpictures>");

Con la prima riga creiamo una istanza di un oggetto DOM attraverso il parser di Microsoft (prelevabile da [17]).

Nella seconda riga carichiamo il codice XML da una stringa per creare lo scheletro del file.


spuList = oxml.getElementsByTagName("spu");
spu = spuList.item(0);

Utilizzando i metodi del DOM estraiamo la lista di tutti i nodi di nome "spu" contenuti nel documento appena creato; poi mettiamo in una variabile il primo (e unico) nodo trovato.

A questo nodo aggiungiamo i vari attributi per completare il nostro file di configurazione.


spu.setAttribute("autooutline","infer");
spu.setAttribute("highlight",filename+"_mask.png");

Notiamo come il nome della maschera sia legato al parametro passato e come lo stesso nome venga utilizzato sia per l'highlight che per il select.

Infine salviamo il risultato del nostro lavoro


oxml.save(filename+".xml");

Il file salvato può essere aperto con qualsiasi editor di testo, ma risulta di difficile lettura perchè è formato da unica riga continua. Se lo apriamo con un browser internet possiamo vederlo correttamente indentato.

La scelta di creare il file attraverso l'utilizzo del DOM è dettata solo dalla comodità di non doversi preoccupare dei dettagli formali come la corretta chiusura dei tag o la presenza delle virgolette nei parametri.

A questo punto potremo inserire nei nostri batch le righe


set name=mainmenu
makespumuxxml /filename:work\%name%

E non generare più a mano i file XML di controllo per spumux.

Inizio pagina
 
Precedente
Sommario
Successivo