hgbook

changeset 777:46c4ba8de2b1

Revision of Ch.11, not entirely satisfying.
author Giulio@puck
date Thu Aug 06 01:22:15 2009 +0200 (2009-08-06)
parents c0794abb494e
children 5f91a658a69d
files it/ch11-template.xml
line diff
     1.1 --- a/it/ch11-template.xml	Tue Aug 04 18:57:58 2009 +0200
     1.2 +++ b/it/ch11-template.xml	Thu Aug 06 01:22:15 2009 +0200
     1.3 @@ -1,70 +1,70 @@
     1.4  <chapter id="chap:template">
     1.5 -  <?dbhtml filename="personalizzare-l-output-di-mercurial.html"?>
     1.6 -  <title>Personalizzare l'output di Mercurial</title>
     1.7 -
     1.8 -  <para id="x_578">Mercurial offre un potente meccanismo basato sui template per permettervi di controllare il modo in cui visualizza le informazioni. Potete usare i template per generare uno specifico output per un singolo comando, o per personalizzare l'intera apparenza dell'interfaccia web predefinita.</para>
     1.9 +  <?dbhtml filename="personalizzare-i-messaggi-di-mercurial.html"?>
    1.10 +  <title>Personalizzare i messaggi di Mercurial</title>
    1.11 +
    1.12 +  <para id="x_578">Mercurial offre un potente meccanismo basato sui template per permettervi di controllare il modo in cui visualizza le informazioni. Potete usare i template per generare una specifica presentazione dei risultati di un singolo comando, o per personalizzare l'intero aspetto dell'interfaccia web predefinita.</para>
    1.13  
    1.14    <sect1 id="sec:style">
    1.15 -    <title>Usare gli stili di output già pronti</title>
    1.16 -
    1.17 -    <para id="x_579">Distribuiti con Mercurial ci sono alcuni stili di output che potete usare immediatamente. Uno stile è semplicemente un template già pronto che qualcuno ha scritto e installato da qualche parte che Mercurial può trovare.</para>
    1.18 -
    1.19 -    <para id="x_57a">Prima di dare un'occhiata agli stili inclusi in Mercurial, rivediamo il suo output normale.</para>
    1.20 +    <title>Usare gli stili di presentazione già pronti</title>
    1.21 +
    1.22 +    <para id="x_579">Mercurial include alcuni stili di presentazione che potete usare immediatamente. Uno stile è semplicemente un template già pronto che qualcuno ha scritto e installato in una posizione nota a Mercurial.</para>
    1.23 +
    1.24 +    <para id="x_57a">Prima di dare un'occhiata agli stili distribuiti con Mercurial, rivediamo il normale risultato di un suo comando.</para>
    1.25  
    1.26      &interaction.template.simple.normal;
    1.27  
    1.28 -    <para id="x_57b">Questo ci dà qualche informazione, ma porta via un sacco di spazio&emdash;cinque righe di output per ogni changeset. Lo stile <literal>compact</literal> riduce questo spazio a tre righe, presentate in maniera sparsa.</para>
    1.29 +    <para id="x_57b">Questo messaggio ci dà alcune informazioni, ma porta via molto spazio&emdash;cinque righe per ogni changeset. Lo stile <literal>compact</literal> riduce questo spazio a tre righe, presentate in maniera sparsa.</para>
    1.30  
    1.31      &interaction.template.simple.compact;
    1.32  
    1.33 -    <para id="x_57c">Lo stile <literal>changelog</literal> ci suggerisce quale sia il potere espressivo del motore di template di Mercurial. Questo stile tenta di seguire le linee guida per i registri dei cambiamenti stabilite dal progetto GNU<citation>web:changelog</citation>.</para>
    1.34 +    <para id="x_57c">Lo stile <literal>changelog</literal> ci dà un'idea quale sia il potere espressivo del motore di template di Mercurial. Questo stile tenta di seguire le linee guida per la formattazione di un registro dei cambiamenti stabilite dal progetto GNU<citation>web:changelog</citation>.</para>
    1.35  
    1.36      &interaction.template.simple.changelog;
    1.37  
    1.38 -    <para id="x_57d">Non vi impressionerà sapere che lo stile di output predefinito di Mercurial è chiamato <literal>default</literal>.</para>
    1.39 +    <para id="x_57d">Non vi sorprenderà sapere che lo stile di output predefinito di Mercurial è chiamato <literal>default</literal>.</para>
    1.40  
    1.41      <sect2>
    1.42        <title>Impostare uno stile predefinito</title>
    1.43  
    1.44 -      <para id="x_57e">Potete modificare lo stile di output che Mercurial userà per ogni comando modificando il vostro file <filename role="special">~/.hgrc</filename>, nominando lo stile che preferireste usare.</para>
    1.45 +      <para id="x_57e">Potete modificare lo stile di presentazione che Mercurial userà per ogni comando aggiungendo al vostro file <filename role="special">~/.hgrc</filename> il nome dello stile che preferireste usare.</para>
    1.46  
    1.47        <programlisting>[ui]
    1.48  style = compact</programlisting>
    1.49  
    1.50 -      <para id="x_57f">Se scrivete un vostro stile, potete usarlo inserendo il percorso del vostro file di stile, oppure copiano il vostro file di stile in un luogo dove Mercurial possa trovarlo (tipicamente la sottodirectory <literal>templates</literal> della vostra directory di installazione di Mercurial).</para>
    1.51 +      <para id="x_57f">Se scrivete un vostro stile, potete usarlo inserendo il percorso del vostro file di stile, oppure copiando il vostro file di stile in un luogo dove Mercurial possa trovarlo (tipicamente la sottodirectory <literal>templates</literal> della vostra directory di installazione di Mercurial).</para>
    1.52      </sect2>
    1.53    </sect1>
    1.54  
    1.55    <sect1>
    1.56      <title>Comandi che supportano stili e template</title>
    1.57  
    1.58 -    <para id="x_580">Tutti i comandi Mercurial di tipo <literal>log</literal> vi permettono di usare stili e template: <command role="hg-cmd">hg incoming</command>, <command role="hg-cmd">hg log</command>, <command role="hg-cmd">hg outgoing</command>, and <command role="hg-cmd">hg tip</command>.</para>
    1.59 -
    1.60 -    <para id="x_581">Al momento in cui scrivo questo manuale, questi sono i comandi che finora supportano stili e template. Dato che questi sono i comandi più importanti che hanno bisogno di un output personalizzabile, c'è stata poca pressione da parte della comunità utenti di Mercurial per aggiungere il supporto per stili e template ad altri comandi.</para>
    1.61 +    <para id="x_580">Tutti i comandi Mercurial di tipo <literal>log</literal> vi permettono di usare stili e template: <command role="hg-cmd">hg incoming</command>, <command role="hg-cmd">hg log</command>, <command role="hg-cmd">hg outgoing</command> e <command role="hg-cmd">hg tip</command>.</para>
    1.62 +
    1.63 +    <para id="x_581">Al momento di scrivere questo manuale, quelli elencati sono i comandi che finora supportano stili e template. Dato che questi sono i comandi più importanti che necessitino di una formattazione personalizzabile, la comunità utenti di Mercurial non ha fatto molta pressione per aggiungere il supporto per stili e template ad altri comandi.</para>
    1.64    </sect1>
    1.65  
    1.66    <sect1>
    1.67      <title>Nozioni di base sui template</title>
    1.68  
    1.69 -    <para id="x_582">Nella sua forma più semplice, un template Mercurial è un frammento di testo. Parte del testo non cambia mai, mentre altre parti vengono <emphasis>espanse</emphasis>, o sostituite con nuovo testo, quando è necessario.</para>
    1.70 -
    1.71 -    <para id="x_583">Prima di continuare, diamo un'altra occhiata al semplice esempio del normale output di Mercurial</para>
    1.72 +    <para id="x_582">Nella sua forma più semplice, un template Mercurial è un frammento di testo. Parte del testo non cambia mai, mentre altre parti vengono <emphasis>espanse</emphasis>, cioè sostituite con nuovo testo, quando è necessario.</para>
    1.73 +
    1.74 +    <para id="x_583">Prima di continuare, diamo un'altra occhiata al semplice esempio del normale risultato di un comando Mercurial.</para>
    1.75  
    1.76      &interaction.template.simple.normal;
    1.77  
    1.78 -    <para id="x_584">Ora, eseguiamo lo stesso comando, ma usando un template per cambiare il suo output.</para>
    1.79 +    <para id="x_584">Ora, eseguiamo lo stesso comando, ma usando un template per cambiare il messaggio visualizzato.</para>
    1.80  
    1.81      &interaction.template.simple.simplest;
    1.82  
    1.83 -    <para id="x_585">Questo esempio illustra il template più semplice possibile, composto solo da un frammento di testo statico stampato una volta per ogni changeset. L'opzione <option role="hg-opt-log">--template</option> per il comando <command role="hg-cmd">hg log</command> dice a Mercurial di usare il testo dato come template nel stampare ogni changeset.</para>
    1.84 -
    1.85 -    <para id="x_586">Notate che la stringa di template appena usata termina con il testo <quote><literal>\n</literal></quote>. Questa è una <emphasis>sequenza di escape</emphasis> che dice a Mercurial di stampare una carattere di nuova riga alla fine di ogni elemento di template. Se omettete questa nuova riga, Mercurial mostrerà ogni frammento di output uno dietro l'altro. Leggete la <xref linkend="sec:template:escape"/> per maggiori dettagli sulle sequenze di escape.</para>
    1.86 +    <para id="x_585">Questo esempio illustra il template più semplice possibile, composto solo da un messaggio di testo statico stampato una volta per ogni changeset. L'opzione <option role="hg-opt-log">--template</option> per il comando <command role="hg-cmd">hg log</command> dice a Mercurial di usare il testo dato come template nel stampare ogni changeset.</para>
    1.87 +
    1.88 +    <para id="x_586">Notate che la stringa di template appena usata termina con il testo <quote><literal>\n</literal></quote>. Questa è una <emphasis>sequenza di escape</emphasis> che dice a Mercurial di stampare una carattere di nuova riga alla fine di ogni elemento di template. Se omettete questa nuova riga, Mercurial mostrerà un messaggio di testo dietro l'altro. Leggete la <xref linkend="sec:template:escape"/> per maggiori dettagli sulle sequenze di escape.</para>
    1.89  
    1.90      <para id="x_587">Un template che stampa una stringa di testo fissata tutte le volte non è molto utile, perciò proviamo qualcosa di un po' più complesso.</para>
    1.91  
    1.92      &interaction.template.simple.simplesub;
    1.93  
    1.94 -    <para id="x_588">Come potete vedere, la stringa <quote><literal>{desc}</literal></quote> nel template è stata sostituita nell'output con la descrizione di ogni changeset. Ogni volta che Mercurial trova testo racchiuso tra parentesi graffe (<quote><literal>{</literal></quote> e <quote><literal>}</literal></quote>), proverà a sostituire le parentesi e il testo con l'espansione di qualunque cosa vi sia contenuta. Per stampare una parentesi graffa letterale, dovete effettuarne l'escape, come descritto nella <xref linkend="sec:template:escape"/>.</para>
    1.95 +    <para id="x_588">Come potete vedere, la stringa <quote><literal>{desc}</literal></quote> nel template è stata sostituita con la descrizione di ogni changeset nel messaggio. Ogni volta che Mercurial trova un testo racchiuso tra parentesi graffe (<quote><literal>{</literal></quote> e <quote><literal>}</literal></quote>), proverà a sostituire le parentesi e il testo con l'espansione di qualunque cosa vi sia contenuta. Per stampare una parentesi graffa letterale dovete effettuarne l'escape, come descritto nella <xref linkend="sec:template:escape"/>.</para>
    1.96    </sect1>
    1.97  
    1.98    <sect1 id="sec:template:keyword">
    1.99 @@ -77,7 +77,7 @@
   1.100        </listitem>
   1.101        <listitem><para id="x_58b"><literal role="template-keyword">branches</literal>: stringa. Il nome del ramo su cui il changeset è stato inserito. Sarà vuoto se il nome del branch è <literal>default</literal>.</para>
   1.102        </listitem>
   1.103 -      <listitem><para id="x_58c"><literal role="template-keyword">date</literal>: informazioni di data. La data in cui il changeset è stato inserito. Questa informazione <emphasis>non</emphasis> è pensata per essere letta dalle persone; dovete passarla attraverso un filtro che la presenterà in maniera appropriata. Leggete la <xref linkend="sec:template:filter"/> per maggiori informazioni sui filtri. La data viene espressa come una coppia di numeri. Il primo numero è una marcatura temporale che segue lo Unix UTC (e indica il numero di secondi trascorsi dal 1° gennaio 1970); il secondo è la differenza tra la zona temporale dell'autore del commit e l'UTC, in secondi.</para>
   1.104 +      <listitem><para id="x_58c"><literal role="template-keyword">date</literal>: informazioni di data. La data in cui il changeset è stato inserito. Questa informazione <emphasis>non</emphasis> è rappresentata in maniera comprensibile, bensì dovete passarla attraverso un filtro per presentarla in maniera appropriata. Leggete la <xref linkend="sec:template:filter"/> per maggiori informazioni sui filtri. La data viene espressa come una coppia di numeri. Il primo numero è una marcatura temporale che segue l'UTC Unix (e indica il numero di secondi trascorsi dal 1° gennaio 1970); il secondo è la differenza tra il fuso orario dell'autore del commit e l'UTC, espressa in secondi.</para>
   1.105        </listitem>
   1.106        <listitem><para id="x_58d"><literal role="template-keyword">desc</literal>: stringa. Il testo della descrizione del changeset.</para>
   1.107        </listitem>
   1.108 @@ -101,7 +101,7 @@
   1.109  
   1.110      &interaction.template.simple.keywords;
   1.111  
   1.112 -    <para id="x_596">Come abbiamo notato prima, la parola chiave per la data non produce un output in forma leggibile, così dobbiamo trattarla in maniera speciale. Questo implica l'uso dei <emphasis>filtri</emphasis>, che verranno trattati in maniera più approfondita nella <xref linkend="sec:template:filter"/>.</para>
   1.113 +    <para id="x_596">Come abbiamo notato prima, la parola chiave per la data non produce un risultato in forma leggibile, così dobbiamo trattarla in maniera speciale. Questo implica l'uso dei <emphasis>filtri</emphasis>, che verranno trattati in maniera più approfondita nella <xref linkend="sec:template:filter"/>.</para>
   1.114  
   1.115      &interaction.template.simple.datekeyword;
   1.116    </sect1>
   1.117 @@ -109,7 +109,7 @@
   1.118    <sect1 id="sec:template:escape">
   1.119      <title>Sequenze di escape</title>
   1.120  
   1.121 -    <para id="x_597">Il motore di template di Mercurial riconosce le sequenze di escape più comunemente usate nelle stringhe. Quando vede un carattere di backslash (<quote><literal>\</literal></quote>), guarda il carattere successivo e sostituisce i due caratteri con un unico rimpiazzo, come descritto qui di seguito.</para>
   1.122 +    <para id="x_597">Il motore di template di Mercurial riconosce le sequenze di escape più comunemente usate nelle stringhe. Quando trova un carattere di backslash (<quote><literal>\</literal></quote>), esamina il carattere successivo e rimpiazza i due caratteri con un unico sostituto, come descritto qui di seguito.</para>
   1.123  
   1.124      <itemizedlist>
   1.125        <listitem><para id="x_598"><literal>\</literal>:
   1.126 @@ -133,24 +133,24 @@
   1.127  	  175.</para>
   1.128        </listitem></itemizedlist>
   1.129  
   1.130 -    <para id="x_59f">Come appena indicato, se volete che l'espansione di un template contenga una carattere <quote><literal>\</literal></quote>, <quote><literal>{</literal></quote>, o <quote><literal>{</literal></quote> letterale, dovete effettuarne l'escape.</para>
   1.131 +    <para id="x_59f">Come appena indicato, se volete che l'espansione di un template contenga un carattere <quote><literal>\</literal></quote>, <quote><literal>{</literal></quote>, o <quote><literal>{</literal></quote> letterale, dovete effettuarne l'escape.</para>
   1.132    </sect1>
   1.133  
   1.134    <sect1 id="sec:template:filter">
   1.135      <title>Filtrare le parole chiave per modificarne i risultati</title>
   1.136  
   1.137 -    <para id="x_5a0">Alcuni dei risultati dell'espansione dei template non sono immediatamente facili da usare. Mercurial vi permette di specificare una catena opzionale di <emphasis>filtri</emphasis> per modificare il risultato dell'espansione di una parola chiave. Avete già visto un filtro comune, <literal role="template-kw-filt-date">isodate</literal>, precedentemente in azione per rendere leggibile una data.</para>
   1.138 -
   1.139 -    <para id="x_5a1">Qui di seguito viene presentata una lista dei filtri più comunemente usati che Mercurial supporta. Mentre alcuni filtri possono essere applicati a qualsiasi testo, altri possono essere usati solo in circostanze specifiche. Il nome di ogni filtro è seguito prima da una indicazione su dove può essere usato e poi da una descrizione dei suoi effetti.</para>
   1.140 +    <para id="x_5a0">Alcuni dei risultati dell'espansione dei template non sono immediatamente facili da usare. Mercurial vi permette di specificare una catena opzionale di <emphasis>filtri</emphasis> per modificare il risultato dell'espansione di una parola chiave. Avete già visto in azione un filtro comune, <literal role="template-kw-filt-date">isodate</literal>, usato precedentemente per rendere leggibile una data.</para>
   1.141 +
   1.142 +    <para id="x_5a1">Qui di seguito viene presentata una lista dei filtri più comunemente usati che Mercurial supporta. Mentre alcuni filtri possono essere applicati a qualsiasi testo, altri possono essere usati solo in circostanze specifiche. Il nome di ogni filtro è seguito prima da un'indicazione del contesto in cui può essere usato e poi da una descrizione dei suoi effetti.</para>
   1.143  
   1.144      <itemizedlist>
   1.145        <listitem><para id="x_5a2"><literal role="template-filter">addbreaks</literal>: qualsiasi testo. Aggiunge un elemento XHTML <quote><literal>&lt;br/&gt;</literal></quote> prima della fine di ogni riga tranne l'ultima. Per esempio, <quote><literal>foo\nbar</literal></quote> diventa <quote><literal>foo&lt;br/&gt;\nbar</literal></quote>.</para>
   1.146        </listitem>
   1.147        <listitem><para id="x_5a3"><literal role="template-kw-filt-date">age</literal>: parola chiave <literal role="template-keyword">date</literal>. Rappresenta l'età della data, relativa all'ora corrente. Produce stringhe come <quote><literal>10 minutes</literal></quote>.</para>
   1.148        </listitem>
   1.149 -      <listitem><para id="x_5a4"><literal role="template-filter">basename</literal>: qualsiasi testo, ma utile soprattutto per la parola chiave <literal role="template-keyword">files</literal> e relative. Tratta il testo come un percorso e restituisce il nome di base. Per esempio, <quote><literal>foo/bar/baz</literal></quote> diventa <quote><literal>baz</literal></quote>.</para>
   1.150 -      </listitem>
   1.151 -      <listitem><para id="x_5a5"><literal role="template-kw-filt-date">date</literal>: parola chiave <literal role="template-keyword">date</literal>. Presenta una data in un formato simile al comando Unix <literal role="template-keyword">date</literal>, ma includendo la zona temporale. Produce stringhe come <quote><literal>Mon Sep 04 15:13:13 2006 -0700</literal></quote>.</para>
   1.152 +      <listitem><para id="x_5a4"><literal role="template-filter">basename</literal>: qualsiasi testo, ma utile soprattutto per la parola chiave <literal role="template-keyword">files</literal> e simili. Tratta il testo come un percorso e restituisce il nome di base. Per esempio, <quote><literal>foo/bar/baz</literal></quote> diventa <quote><literal>baz</literal></quote>.</para>
   1.153 +      </listitem>
   1.154 +      <listitem><para id="x_5a5"><literal role="template-kw-filt-date">date</literal>: parola chiave <literal role="template-keyword">date</literal>. Presenta una data in un formato simile al comando Unix <literal role="template-keyword">date</literal>, ma includendo il fuso orario. Produce stringhe come <quote><literal>Mon Sep 04 15:13:13 2006 -0700</literal></quote>.</para>
   1.155        </listitem>
   1.156        <listitem><para id="x_5a6"><literal role="template-kw-filt-author">domain</literal>: qualsiasi testo, ma utile soprattutto per la parola chiave <literal role="template-keyword">author</literal>. Trova la prima stringa che somiglia a un indirizzo email e ne estrae il componente del dominio. Per esempio, <quote><literal>Bryan O'Sullivan &lt;bos@serpentine.com&gt;</literal></quote> diventa <quote><literal>serpentine.com</literal></quote>.</para>
   1.157        </listitem>
   1.158 @@ -158,7 +158,7 @@
   1.159        </listitem>
   1.160        <listitem><para id="x_5a8"><literal role="template-filter">escape</literal>: qualsiasi testo. Sostituisce i caratteri speciali XML/XHTML <quote><literal>&amp;</literal></quote>, <quote><literal>&lt;</literal></quote> e <quote><literal>&gt;</literal></quote> con entità XML.</para>
   1.161        </listitem>
   1.162 -      <listitem><para id="x_5a9"><literal role="template-filter">fill68</literal>: qualsiasi testo. Manda a capo il testo per farlo stare in 68 colonne. Questo è utile prima di passare il testo attraverso al filtro <literal role="template-filter">tabindent</literal>, se volete che stia ancora in una finestra di 80 colonne con caratteri a spaziatura fissa.</para>
   1.163 +      <listitem><para id="x_5a9"><literal role="template-filter">fill68</literal>: qualsiasi testo. Manda a capo il testo per farlo stare in 68 colonne. Questo filtro è utile da applicare prima di combinarlo con il filtro <literal role="template-filter">tabindent</literal>, se volete che il testo non esca dai bordi di una finestra di 80 colonne con caratteri a spaziatura fissa.</para>
   1.164        </listitem>
   1.165        <listitem><para id="x_5aa"><literal role="template-filter">fill76</literal>: qualsiasi testo. Manda a capo il testo per farlo stare in 76 colonne.</para>
   1.166        </listitem>
   1.167 @@ -168,9 +168,9 @@
   1.168        </listitem>
   1.169        <listitem><para id="x_5ad"><literal role="template-kw-filt-date">isodate</literal>: parola chiave <literal role="template-keyword">date</literal>. Rappresenta una data come stringa di testo in formato ISO 8601. Produce una stringa come <quote><literal>2006-09-04 15:13:13 -0700</literal></quote>.</para>
   1.170        </listitem>
   1.171 -      <listitem><para id="x_5ae"><literal role="template-filter">obfuscate</literal>: qualsiasi testo, ma utile soprattutto per la parola chiave <literal role="template-keyword">author</literal>. Riproduce il testo in ingresso rappresentandolo come una sequenza di entità XML. Questo è utile per battere alcuni #spambot# particolarmente stupidi che effettuano lo #screen-scraping# per raccogliere indirizzi email.</para>
   1.172 -      </listitem>
   1.173 -      <listitem><para id="x_5af"><literal role="template-kw-filt-author">person</literal>: qualsiasi testo, ma utili soprattutto per la parola chiave <literal role="template-keyword">author</literal>. Produce il testo prima di un indirizzo email. Per esempio, <quote><literal>Bryan O'Sullivan &lt;bos@serpentine.com&gt;</literal></quote> diventa <quote><literal>Bryan O'Sullivan</literal></quote>.</para>
   1.174 +      <listitem><para id="x_5ae"><literal role="template-filter">obfuscate</literal>: qualsiasi testo, ma utile soprattutto per la parola chiave <literal role="template-keyword">author</literal>. Riproduce il testo in ingresso rappresentandolo come una sequenza di entità XML. Questo è utile per impedire ad alcuni programmi particolarmente stupidi utilizzati dagli spammer per raccogliere indirizzi email di copiare i dati destinati a essere visualizzati su schermo.</para>
   1.175 +      </listitem>
   1.176 +      <listitem><para id="x_5af"><literal role="template-kw-filt-author">person</literal>: qualsiasi testo, ma utile soprattutto per la parola chiave <literal role="template-keyword">author</literal>. Produce il testo prima di un indirizzo email. Per esempio, <quote><literal>Bryan O'Sullivan &lt;bos@serpentine.com&gt;</literal></quote> diventa <quote><literal>Bryan O'Sullivan</literal></quote>.</para>
   1.177        </listitem>
   1.178        <listitem><para id="x_5b0"><literal role="template-kw-filt-date">rfc822date</literal>: parola chiave <literal role="template-keyword">date</literal>. Rappresenta una data usando lo stesso formato impiegato nelle intestazioni email. Produce una stringa come <quote><literal>Mon, 04 Sep 2006 15:13:13 -0700</literal></quote>.</para>
   1.179        </listitem>
   1.180 @@ -191,28 +191,28 @@
   1.181      &interaction.template.simple.manyfilters;
   1.182  
   1.183      <note>
   1.184 -      <para id="x_5b7">Se provate ad applicare un filtro a un frammeto di dati che non può elaborare, Mercurial fallirà e stamperà una eccezione Python. Per esempio, provare a utilizzare l'output della parola chiave <literal role="template-keyword">desc</literal> con il filtro <literal role="template-kw-filt-date">isodate</literal> non è una buona idea.</para>
   1.185 +      <para id="x_5b7">Se provate ad applicare un filtro a un frammento di dati che non può elaborare, Mercurial fallirà e stamperà un'eccezione Python. Per esempio, non è una buona idea provare a utilizzare l'output della parola chiave <literal role="template-keyword">desc</literal> con il filtro <literal role="template-kw-filt-date">isodate</literal>.</para>
   1.186      </note>
   1.187  
   1.188      <sect2>
   1.189        <title>Combinare i filtri</title>
   1.190  
   1.191 -      <para id="x_5b8">&Egrave; facile combinare filtri per produrre un output della forma che preferite. La seguente catena di filtri ripulisce una descrizione, poi si assicura che stia tranquillamente in 68 colonne, poi la indenta ulteriormente di 8 caratteri (almeno sui sistemi di tipo Unix, dove una tabulazione è convenzionalmente larga 8 caratteri).</para>
   1.192 +      <para id="x_5b8">&Egrave; facile combinare filtri per produrre un testo formattato nel modo che preferite. La seguente catena di filtri ripulisce una descrizione, poi si assicura che stia tranquillamente in 68 colonne, infine la indenta ulteriormente di 8 caratteri (almeno sui sistemi di tipo Unix, dove una tabulazione è convenzionalmente larga 8 caratteri).</para>
   1.193  
   1.194        &interaction.template.simple.combine;
   1.195  
   1.196 -      <para id="x_5b9">Notate l'uso di <quote><literal>\t</literal></quote> (un carattere di tabulazione) nel template per forzare la prima riga a essere indentata; questo è necessario dato che <literal role="template-keyword">tabindent</literal> indenta tutte le righe <emphasis>tranne</emphasis> la prima.</para>
   1.197 -
   1.198 -      <para id="x_5ba">Tenete a mente che l'ordine dei filtri in una catena è significativo. Il primo filtro viene applicato al risultato della parola chiave; il secondo al risultato del primo filtro; e così via. Per esempio, usare <literal>fill68|tabindent</literal> dà risultati molto diversi da <literal>tabindent|fill68</literal>.</para>
   1.199 +      <para id="x_5b9">Notate l'uso di <quote><literal>\t</literal></quote> (un carattere di tabulazione) nel template per indentare la prima riga, necessario dato che <literal role="template-keyword">tabindent</literal> indenta tutte le righe <emphasis>tranne</emphasis> la prima.</para>
   1.200 +
   1.201 +      <para id="x_5ba">Tenete a mente che l'ordine dei filtri in una catena è significativo. Il primo filtro viene applicato al risultato della parola chiave, il secondo al risultato del primo filtro, e così via. Per esempio, usare <literal>fill68|tabindent</literal> dà risultati molto diversi da <literal>tabindent|fill68</literal>.</para>
   1.202      </sect2>
   1.203    </sect1>
   1.204  
   1.205    <sect1>
   1.206 -    <title>Dai template agil stili</title>
   1.207 -
   1.208 -    <para id="x_5bb">Un template a riga di comando fornisce un modo veloce e semplice per formattare un certo output. I template possono diventare prolissi, però, e quindi è utile essere in grado di dare un nome a un template. Un file di stile è un template con un nome, memorizzato in un file.</para>
   1.209 -
   1.210 -    <para id="x_5bc">Più di questo, usare un file di stile sblocca la potenza del motore di template di Mercurial in modi che non sono possibili usando l'opzione <option role="hg-opt-log">--template</option> a riga di comando.</para>
   1.211 +    <title>Dai template agli stili</title>
   1.212 +
   1.213 +    <para id="x_5bb">Un template a riga di comando fornisce un modo veloce e semplice per formattare il risultato di un certo comando. Ma i template possono diventare prolissi, quindi è utile essere in grado di dare un nome a un template. Un file di stile è un template con un nome, memorizzato in un file.</para>
   1.214 +
   1.215 +    <para id="x_5bc">Ma soprattutto, l'impiego di un file di stile sfrutta la potenza del motore di template di Mercurial in modi che non sono possibili usando l'opzione <option role="hg-opt-log">--template</option> a riga di comando.</para>
   1.216  
   1.217      <sect2>
   1.218        <title>Il più semplice dei file di stile</title>
   1.219 @@ -238,13 +238,13 @@
   1.220  	</listitem>
   1.221  	<listitem><para id="x_5c3">Se una riga comincia con un carattere <quote><literal>#</literal></quote> o <quote><literal>;</literal></quote>, l'intera riga viene trattata come un commento e saltata come se fosse vuota.</para>
   1.222  	</listitem>
   1.223 -	<listitem><para id="x_5c4">Una riga comincia con una parola chiave, che deve cominciare con un carattere alfabetico o di sottolineatura e può contenere successivamente qualsiasi carattere alfanumerico o di sottolineatura. (Nella notazione per le espressioni regolari, una parola chiave deve corrispondere a <literal>[A-Za-z_][A-Za-z0-9_]*</literal>.)</para>
   1.224 +	<listitem><para id="x_5c4">Una riga comincia con una parola chiave, che deve iniziare con un carattere alfabetico o di sottolineatura e successivamente può contenere qualsiasi carattere alfanumerico o di sottolineatura. (Nella notazione per le espressioni regolari, una parola chiave deve corrispondere a <literal>[A-Za-z_][A-Za-z0-9_]*</literal>.)</para>
   1.225  	</listitem>
   1.226  	<listitem><para id="x_5c5">L'elemento successivo deve essere un carattere <quote><literal>=</literal></quote>, che può essere preceduto o seguito da una quantità arbitraria di spazio bianco.</para>
   1.227  	</listitem>
   1.228 -	<listitem><para id="x_5c6">Se il resto della riga comincia e finisce con caratteri di apice o virgolette corrispondenti, viene trattato come il corpo di un template.</para>
   1.229 -	</listitem>
   1.230 -	<listitem><para id="x_5c7">Se il resto della riga <emphasis>non</emphasis> comincia con caratteri di apice o virgolette, è trattato come il nome di un file i cui contenuti verranno letti e usati come il corpo di un template.</para>
   1.231 +	<listitem><para id="x_5c6">Se il resto della riga comincia e finisce con caratteri corrispettivi di apice o di virgolette, viene trattato come il corpo di un template.</para>
   1.232 +	</listitem>
   1.233 +	<listitem><para id="x_5c7">Se il resto della riga <emphasis>non</emphasis> comincia con caratteri di apice o di virgolette, viene trattato come il nome di un file i cui contenuti saranno letti e usati come il corpo di un template.</para>
   1.234  	</listitem></itemizedlist>
   1.235      </sect2>
   1.236    </sect1>
   1.237 @@ -252,26 +252,26 @@
   1.238    <sect1>
   1.239      <title>Esempi di file di stile</title>
   1.240  
   1.241 -    <para id="x_5c8">Per illustrare come scrivere un file di stile, ne costruiremo alcuni esempi. Piuttosto che fornire un file di stile completo e camminarci attraverso, replicheremo il classico processo di sviluppo di un file di stile cominciando con qualcosa di molto semplice e cammninando attraverso una serie di esempi successivi più completi.</para>
   1.242 +    <para id="x_5c8">Per illustrare come scrivere un file di stile, ne costruiremo alcuni esempi. Piuttosto che fornire un file di stile completo e ripercorrerlo passo per passo, replicheremo il classico processo di sviluppo di un file di stile cominciando con qualcosa di molto semplice e proseguendo attraverso una serie di esempi successivi più completi.</para>
   1.243  
   1.244      <sect2>
   1.245        <title>Identificare errori in un file di stile</title>
   1.246  
   1.247 -      <para id="x_5c9">Se Mercurial incontra un problema in un file di stile su cui state lavorando, stampa uno stringato messaggio di errore che, una volta che avete scoperto cosa significa, è in effetti piuttosto utile.</para>
   1.248 +      <para id="x_5c9">Se Mercurial incontra un problema in un file di stile su cui state lavorando, stampa uno stringato messaggio di errore che si rivela in effetti piuttosto utile una volta scoperto cosa significa.</para>
   1.249  
   1.250        &interaction.template.svnstyle.syntax.input;
   1.251  
   1.252 -      <para id="x_5ca">Notate che <filename>broken.style</filename> tenta di definire una parola chiave <literal>changeset</literal>, ma dimentica di darle un qualsiasi contenuto. Quando gli si chiede di usare questo file di stile, Mercurial si lamenta prontamente.</para>
   1.253 +      <para id="x_5ca">Notate che <filename>broken.style</filename> tenta di definire una parola chiave <literal>changeset</literal>, ma dimentica di darle un contenuto qualsiasi. Quando gli si chiede di usare questo file di stile, Mercurial si lamenta prontamente.</para>
   1.254  
   1.255        &interaction.template.svnstyle.syntax.error;
   1.256  
   1.257        <para id="x_5cb">Questo messaggio di errore sembra minaccioso, ma non è troppo difficile da seguire.</para>
   1.258  
   1.259        <itemizedlist>
   1.260 -	<listitem><para id="x_5cc">Il primo componente è semplicemente il modo che Mercurial ha di dire <quote>gliela dò su</quote>.</para>
   1.261 +	<listitem><para id="x_5cc">Il primo componente è semplicemente il modo in cui Mercurial dice <quote>rinuncio</quote>.</para>
   1.262  	  <programlisting>___abort___: broken.style:1: parse error</programlisting>
   1.263  	</listitem>
   1.264 -	<listitem><para id="x_5cd">Successivamente arriva il nome del file di stile che contiene l'errore.</para>
   1.265 +	<listitem><para id="x_5cd">Subito dopo, trovate il nome del file di stile che contiene l'errore.</para>
   1.266  	  <programlisting>abort: ___broken.style___:1: parse error</programlisting>
   1.267  	</listitem>
   1.268  	<listitem><para id="x_5ce">Il nome del file è seguito dal numero di riga dove l'errore è stato incontrato.</para>
   1.269 @@ -280,7 +280,7 @@
   1.270  	<listitem><para id="x_5cf">Infine, viene fornita una descrizione di quello che è andato storto.</para>
   1.271  	  <programlisting>abort: broken.style:1: ___parse error___</programlisting>
   1.272  	</listitem>
   1.273 -	<listitem><para id="x_5d0">La descrizione del problema non è sempre chiara (come in questo caso), ma anche quando è criptica, è quasi sempre elementare inspezionare visivamente la riga del file di stile che contiene il problema e vedere cosa c'è di sbagliato.</para>
   1.274 +	<listitem><para id="x_5d0">La descrizione del problema non è sempre chiara (come in questo caso), ma anche quando è criptica, è quasi sempre banale trovare cosa c'è di sbagliato inspezionando visivamente la riga del file di stile che contiene il problema.</para>
   1.275  	</listitem>
   1.276        </itemizedlist>
   1.277      </sect2>
   1.278 @@ -292,17 +292,17 @@
   1.279  
   1.280        &interaction.template.svnstyle.id;
   1.281  
   1.282 -      <para id="x_5d2">&Egrave; molto probabile che questo identificatore siaunico, quindi si rivela utile in molti casi. Ci sono alcune avvertenze.</para>
   1.283 -      <itemizedlist>
   1.284 -	<listitem><para id="x_5d3">Non funzionerà in un repository completamente vuoto, perché un tale repository non possiede la revisione zero.</para>
   1.285 -	</listitem>
   1.286 -	<listitem><para id="x_5d4">Non funzionerà nemmeno nel caso (estremamente raro) in cui un repository è l'unione di due o più repository precedentemente indipendenti che avete ancora in giro da qualche parte.</para>
   1.287 +      <para id="x_5d2">&Egrave; molto probabile che questo identificatore sia unico, quindi si rivela utile in molti casi. Ci sono alcune avvertenze.</para>
   1.288 +      <itemizedlist>
   1.289 +	<listitem><para id="x_5d3">Questa tecnica non funzionerà in un repository completamente vuoto, perché un tale repository non possiede la revisione zero.</para>
   1.290 +	</listitem>
   1.291 +	<listitem><para id="x_5d4">Questa tecnica non funzionerà nemmeno nel caso (estremamente raro) in cui un repository sia l'unione di due o più repository precedentemente indipendenti e quei repository siano ancora nei paraggi.</para>
   1.292  	</listitem></itemizedlist>
   1.293        <para id="x_5d5">Ecco alcuni usi che potete fare di questo identificatore:</para>
   1.294        <itemizedlist>
   1.295 -	<listitem><para id="x_5d6">come chiave nella tabella di un datavase che gestisce i repository presenti su un server.</para>
   1.296 -	</listitem>
   1.297 -	<listitem><para id="x_5d7">come metà di una tupla {<emphasis>identificatore di repository</emphasis>, <emphasis>identificatore di revisione</emphasis>}. Salvate questa informazione da qualche parte quando esguite un assemblaggio automatico o un'altra attività simile, in modo che possiate <quote>rieseguire</quote> l'assemblaggio in seguito se necessario.</para>
   1.298 +	<listitem><para id="x_5d6">come chiave nella tabella di un database che gestisce i repository presenti su un server.</para>
   1.299 +	</listitem>
   1.300 +	<listitem><para id="x_5d7">come metà di una tupla {<emphasis>identificatore di repository</emphasis>, <emphasis>identificatore di revisione</emphasis>}. Salvate questa informazione da qualche parte quando esguite un assemblaggio automatico o un'altra attività simile, in modo che possiate <quote>rieseguire</quote> lo stesso assemblaggio in seguito se necessario.</para>
   1.301  	</listitem>
   1.302        </itemizedlist>
   1.303      </sect2>
   1.304 @@ -310,35 +310,35 @@
   1.305      <sect2>
   1.306        <title>Elencare file su più righe</title>
   1.307  
   1.308 -      <para id="x_714">Supponete di voler elencare i file modificati da un changeset uno per riga, con una piccola indentazione prima di ogni nome di file.</para>
   1.309 +      <para id="x_714">Supponete di voler elencare i file modificati da un changeset uno per riga, aggiungendo una piccola indentazione prima di ogni nome di file.</para>
   1.310  
   1.311        &interaction.ch10-multiline.go;
   1.312      </sect2>
   1.313  
   1.314      <sect2>
   1.315 -      <title>Imitare l'output di Subversion</title>
   1.316 -
   1.317 -      <para id="x_5d8">Proviamo a emulare il formato di output predefinito usato da un altro strumento di controllo di revisione, Subversion.</para>
   1.318 +      <title>Imitare i messaggi di Subversion</title>
   1.319 +
   1.320 +      <para id="x_5d8">Proviamo a emulare il formato predefinito usato da un altro strumento di controllo di revisione, Subversion, per mostrare le voci del proprio registro.</para>
   1.321  
   1.322        &interaction.template.svnstyle.short;
   1.323  
   1.324 -      <para id="x_5d9">Dato che lo stile di output di Subversion è abbastanza semplice, è facile copiare e incollare un pezzo del suo output in un file e rimpiazzare il testo prodotto da Subversion con i valori di template che vorremmo vedere espansi.</para>
   1.325 +      <para id="x_5d9">Dato che lo stile della rappresentazione di Subversion è abbastanza semplice, è facile copiare e incollare una parte dei suoi messaggi in un file e rimpiazzare il testo prodotto da Subversion con i valori di template che vorremmo vedere espansi.</para>
   1.326  
   1.327        &interaction.template.svnstyle.template;
   1.328  
   1.329 -      <para id="x_5da">Ci sono alcuni modi in cui questo template si discosta dall'output prodotto da Subversion.</para>
   1.330 -      <itemizedlist>
   1.331 -	<listitem><para id="x_5db">Subversion stampa una data <quote>leggibile</quote> (il <quote><literal>Wed, 27 Sep 2006</literal></quote> nel risultato dell'esempio precedente) tra parentesi. Il motore di template di Mercurial non fornisce un modo per visualizzare una data in questo formato senza stampare anche l'orario e la zona temporale.</para>
   1.332 -	</listitem>
   1.333 -	<listitem><para id="x_5dc">Emuliamo la stampa da parte di Subversion di righe <quote>separatrici</quote> piene di caratteri <quote><literal>-</literal></quote> concludendo il template con una riga di quel tipo. Usiamo la parola chiave <literal role="template-keyword">header</literal> del motore di template per stampare una riga separatrice come la prima riga di output (vedete più avanti), quindi ottenendo un output simile a quello di Subversion.</para>
   1.334 -	</listitem>
   1.335 -	<listitem><para id="x_5dd">L'output di Subversion include nell'intestazione il conteggio del numero di righe del messaggio di commit. Non possiamo replicare questa caratteristica in Mercurial, poiché attualmente il motore di template non fornisce un filtro che conti il numero di righe generate dal template.</para>
   1.336 +      <para id="x_5da">Ci sono alcuni modi in cui questo template si discosta dalla presentazione prodotta da Subversion.</para>
   1.337 +      <itemizedlist>
   1.338 +	<listitem><para id="x_5db">Subversion stampa una data <quote>leggibile</quote> (il <quote><literal>Wed, 27 Sep 2006</literal></quote> nel risultato dell'esempio precedente) tra parentesi. Il motore di template di Mercurial non fornisce un modo per visualizzare una data in questo formato senza stampare anche l'ora e il fuso orario.</para>
   1.339 +	</listitem>
   1.340 +	<listitem><para id="x_5dc">Emuliamo la stampa di righe <quote>separatrici</quote> piene di caratteri <quote><literal>-</literal></quote> da parte di Subversion concludendo il template con una riga di quel tipo. Usiamo la parola chiave <literal role="template-keyword">header</literal> del motore di template per stampare una riga separatrice come prima riga (vedete più avanti), quindi ottenendo un risultato simile a quello di Subversion.</para>
   1.341 +	</listitem>
   1.342 +	<listitem><para id="x_5dd">Il formato di Subversion include nell'intestazione il conteggio del numero di righe del messaggio di commit. Non possiamo replicare questa caratteristica in Mercurial, poiché attualmente il motore di template non fornisce un filtro che conti il numero di righe generate dal template.</para>
   1.343  	</listitem></itemizedlist>
   1.344 -      <para id="x_5de">Non mi ci sono voluti più di uno o due minuti di lavoro per sostituire il testo letterale da un esempio dell'output di Subversion con alcune parole chiave e alcuni filtri per ottenere il template appena visto. Il file di stile fa semplicemente riferimento al template.</para>
   1.345 +      <para id="x_5de">Non mi ci sono voluti più di uno o due minuti di lavoro per sostituire il testo letterale di un esempio del messaggio di Subversion con alcune parole chiave e alcuni filtri per ottenere il template appena visto. Il file di stile fa semplicemente riferimento al template.</para>
   1.346  
   1.347        &interaction.template.svnstyle.style;
   1.348  
   1.349 -      <para id="x_5df">Avremmo potuto includere il testo del file di template direttamente nel file di stile, circondandolo con virgolette e rimpiazzando le nuove righe con sequenze <quote><literal>\n</literal></quote>, ma questo avrebbe reso il file di stile troppo difficile da leggere. La leggibilità è una buona guida quando state cercando di decidere se un certo testo appartiene a un file di stile o a un file di template a cui il file di stile fa riferimento. Nel caso il file di stile vi sembrasse troppo grande o disordinato se inserite un frammento letterale di testo, spostatelo invece in un template.</para>
   1.350 +      <para id="x_5df">Avremmo potuto includere il testo del file di template direttamente nel file di stile, circondandolo con virgolette e rimpiazzando le nuove righe con sequenze <quote><literal>\n</literal></quote>, ma questo avrebbe reso il file di stile troppo difficile da leggere. La leggibilità è una buon criterio da cui farsi guidare per decidere se un certo testo appartiene a un file di stile o a un file di template a cui il file di stile fa riferimento. Nel caso il file di stile vi sembri troppo grande o disordinato se inserite un frammento letterale di testo, allora spostate il testo in un template.</para>
   1.351      </sect2>
   1.352    </sect1>
   1.353  </chapter>