Gestione di «a

Questo capitolo descrive l'organizzazione del sorgente di a2, in modo da consentire una comprensione migliore del funzionamento di Alml.

Articolazione dei file del sorgente

Il sorgente di a2 è composto da un file principale, molto grande, che fa riferimento ad altri file esterni per vari motivi:

.
|-- allegati/
|   `-- a2/
|
|-- riduzioni/
|   `-- ...
|
|-- figure/
|   |-- *.jpg
|   |-- *.pnm
|   |-- *.png
|   |-- *.tiff
|   `-- ...
|
|-- video/
|   |-- *.ogv
|   |-- *.avi
|   `-- ...
|
|-- ortografia/
|   |-- errorieccezioni
|   |-- minimo.aff
|   |-- minimo.hash
|   |-- minimo.sml
|   |-- particolari
|   `-- vocabolario
|
|-- .textchk.rules      --> ortografia/errorieccezioni
|-- .textchk.special    --> ortografia/particolari
|-- PAGINE
|-- EDIZIONE
|-- COPYING
|-- Makefile
|-- a2make
|-- a2sources
|-- a2sub.sgml
`-- a2-nnnnn.sgml

I file .textchk.rules e .textchk.special, ovvero ortografia/errorieccezioni e ortografia/particolari, servono per l'uso di Textchk; mentre i file rimanenti nella directory ortografia/ riguardano Ispell.

Inclusione selettiva dei file esterni ed entità speciali

L'inclusione dei file esterni, nel blocco principale, avviene per mezzo di istruzioni SGML del tipo seguente, dove si dichiara un'entità a cui si abbina il contenuto di un file intero:

<!ENTITY sub-samba-body              SYSTEM "sub-samba-body.sgml">

Altri pezzi ricorrenti di codice SGML sono dichiarati come entità interne, come questa:

<!ENTITY ALTRAILERTOMO.TEXT
'

    <unnumberedh1>
    Indice analitico del volume
    </unnumberedh1>

    <printindex index="main" indexcontext="tome">

'>

A seconda della circostanza, può essere necessario includere tali file o tali entità, oppure evitare la cosa. Per esempio, in una composizione che genera un file HTML unico non è il caso di ripetere certe informazioni sul copyright alla fine di ogni capitolo. Per questa e per altre ragioni, si utilizzano delle entità parametriche che nel sorgente vengono dichiarate in modo da disabilitarle:

<!ENTITY % HT  "IGNORE">
<!ENTITY % TT  "IGNORE">
<!ENTITY % PP  "IGNORE">
<!ENTITY % RM  "IGNORE">
<!ENTITY % NS  "IGNORE">

Queste entità parametriche controllano la dichiarazione di entità normali e l'inclusione di testo normale, come si può vedere nell'estratto semplificato che segue:

<![%PP;[
    <!ENTITY ALCOPYINGTOMO   "&ALCOPYINGTOMO.TEXT;">
    <!ENTITY ALCOPYINGPARTE  "&ALCOPYINGPARTE.TEXT;">
    <!ENTITY A2COPY          "&ALCOPY.TEXT;">
    <!ENTITY ALDEDICA        "&ALDEDICA.TEXT;">
]]>

Se tutte le entità parametriche viste in precedenza restano al valore originale (IGNORE), nessuna delle dichiarazioni che si vedono qui viene presa in considerazione. Se invece una di queste entità contiene il valore INCLUDE, allora le dichiarazioni relative hanno significato.

Il sistema controlla l'abilitazione di queste entità parametriche attraverso l'opzione --sgml-include=entità_parametrica, come per esempio nel comando necessario a generare una composizione in PostScript:

alml --ps --verbose \
  \     --sgml-include=PP \
  \     --sgml-include=NS \
  \     mio_file.sgml
[Invio]

Questa abilitazione preventiva prevale sulla dichiarazione di esclusione (IGNORE) interna al sorgente e si ottiene il risultato desiderato.

Anche la dichiarazione delle entità normali segue la regola per cui vale ciò che è stato definito per primo. Pertanto, per evitare problemi, dopo la dichiarazione condizionata all'attivazione delle entità parametriche, viene ripetuta una dichiarazione di tali entità in modo predefinito:

<!ENTITY ALCOPYINGTOMO          "&ALCOPYINGTOMO.TEXT;">
<!ENTITY ALCOPYINGPARTE         "&ALCOPYINGPARTE.TEXT;">
<!ENTITY A2COPY                 "&ALCOPY.TEXT;">
<!ENTITY ALDEDICA               "&ALDEDICA.TEXT;">

Successivamente, nel corpo del file principale appare il richiamo alle entità relative per indicare il punto di inserzione del loro contenuto:

<tomeheading>
Primo approccio, architettura e filosofia del sistema operativo
</tomeheading>
&ALCOPYINGTOMO;

<h0>
Il software e le licenze
</h0>
&ALCOPYINGPARTE;

<h1>
...

Le tabelle u112.8 e u112.9 riepilogano le entità parametriche che controllano il sorgente di a2 e le entità normali più importanti.

Tabella u112.8. Significato delle entità parametriche più importanti, usate nel sorgente di a2.

Macro SGML Significato se attiva
%HT;
Composizione HTML normale.
%HP;
Composizione PDF normale.
%TT;
Composizione testo puro, su file unico.
%PP;
Composizione PostScript o PDF normale, ma per la stampa.
%RM;
Composizione con annotazioni per uso interno.
%NS;
Composizione completa di ciò che non viene controllato ortograficamente.

Tabella u112.9. Significato di alcune entità importanti, usate nel sorgente di a2.

Macro SGML Contenuto
&ALOPERA;
Il nome dell'opera.
&ALOPERAEMAIL;
L'indirizzo o gli indirizzi di posta elettronica di riferimento.
&ALPERIODO;
L'anno o gli anni del copyright.
&ALEDIZIONE;
Edizione, scritta possibilmente come data.

Composizione guidata con il file-make

Il pacchetto dei sorgenti di a2 include il file Makefile, per facilitare la composizione dell'opera. La tabella u112.10 riepiloga i comandi principali.

Tabella u112.10. Comandi relativi al file-make di a2.

Comando Risultato
make clean
Ripulisce da tutti i file non indispensabili.
make check
Analizza la sintassi SGML.
make spell
Utilizza Ispell per l'analisi del vocabolario.
make textchk
Utilizza Textchk per l'analisi sintattica.
make urichk
Utilizza Checkbot per il controllo degli URI.
make draftdvi
Composizione bozza in DVI.
make dvi
Composizione finale in DVI.
make draftps
Composizione bozza in PostScript.
make ps
Composizione finale in PostScript.
make psl
Composizione finale in PostScript A4 orizzontale, diviso in due colonne A5, con uno spazio aggiuntivo a sinistra per la rilegatura (stampa da un solo lato).
make pstall
Composizione finale in PostScript A5x4.
make pstalla4
Composizione finale in PostScript A4, diviso in due colonne A7x4.
make draftpdf
Composizione bozza in PDF.
make pdf
Composizione finale in PDF.
make drafthtml
Composizione bozza in HTML.
make html
Composizione finale in HTML.
make html-text
Composizione finale in HTML a pagina singola.
make text
Composizione finale in formato testo puro.

Si osservi che il formato ottenuto attraverso il comando make pstall va poi rielaborato con alml-extra (o alml-extra-menu), per riportarlo nell'ambito delle dimensioni di un foglio stampabile. In generale conviene convertirlo così:

alml-extra --a5x4-to-a7x4-2-a4 mio_file_ps[Invio]

«a2» 2013.11.11 --- Copyright © Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net