diff options
author | Antonio Giovanni Colombo <azc100@gmail.com> | 2023-03-28 16:11:07 +0200 |
---|---|---|
committer | Antonio Giovanni Colombo <azc100@gmail.com> | 2023-03-28 16:11:07 +0200 |
commit | fd450250a51a5c126804c5c5fb3cc2c866184592 (patch) | |
tree | f4dac16910277f1d8e48ce19032d370fe4280580 | |
parent | bafdbc1bb6da942a5099d884466e9bfc4c2af7bc (diff) | |
download | gawk-fd450250a51a5c126804c5c5fb3cc2c866184592.tar.gz |
Modifications for gawk 5.3
-rwxr-xr-x | doc/it/ChangeLog | 6 | ||||
-rwxr-xr-x[-rw-r--r--] | doc/it/gawk.1 | 26 | ||||
-rwxr-xr-x | doc/it/gawktexi.in | 257 | ||||
-rwxr-xr-x[-rw-r--r--] | doc/it/texinfo.tex | 252 |
4 files changed, 395 insertions, 146 deletions
diff --git a/doc/it/ChangeLog b/doc/it/ChangeLog index e679b899..a1c81841 100755 --- a/doc/it/ChangeLog +++ b/doc/it/ChangeLog @@ -1,3 +1,9 @@ +2023-03-28 Antonio Giovanni Colombo <azc100@gmail.com> + + * gawk.1: Updated. + * gawktexi.in: Updated. + * texinfo.tex: Updated. + 2023-03-07 Antonio Giovanni Colombo <azc100@gmail.com> * gawktexi.in: Updated. diff --git a/doc/it/gawk.1 b/doc/it/gawk.1 index 2260da18..ab2c2d97 100644..100755 --- a/doc/it/gawk.1 +++ b/doc/it/gawk.1 @@ -20,6 +20,7 @@ .\"Aggiornam. a gawk-5.1.1 di A.G. Colombo - Maggio 2022 .\"Aggiornam. a gawk-5.1.1 di A.G. Colombo - Giugno 2022 .\"Aggiornam. a gawk-5.2.0 di A.G. Colombo - Luglio 2022 +.\"Aggiornam. a gawk-5.3.0 di A.G. Colombo - Marzo 2023 .ds PX \s-1POSIX\s+1 .ds UX \s-1UNIX\s+1 @@ -257,6 +258,14 @@ Questa trace è stampata sullo standard error. Ogni ``codice operativo'' è preceduto da un segno .B + nell'output. +.TP +\fB\-k\fR, \fB\-\^\-csv\fR +Abilita gestione speciale file CSV +[Comma Separated Values - Valori Separati da Virgola]. +Vedere il manuale per i dettagli. +.BR FIXME : +Eventualmente, fornire un link (URL) qui. +.TP .BI \-l " lib\fR, "\c .BI \-\^\-load " lib" Carica un'estensione @@ -656,6 +665,23 @@ Analogamente, assegnare un valore a .B $0 provoca una nuova divisione del record, creando nuovi valori per i suoi campi. +.SS Comma Separated Values [Valori Separati da Virgola] +Quando è chiamato specificando l'opzione +.B \-\^\-csv, +.I gawk +non usa le regole spiegate sopra per determinare cosa costituisce +un record e per dividerlo in campi. +Invece, i record sono delimitati dai caratteri "ritorno a capo", +che non siano all'interno di un campo CSV [per esempio, un +campo che contenga un indirizzo completo è normalmente su più +righe, che però formano un unico campo]. I campi sono separati +fra loro da una virgola. +I caratteri "doppio apice" possono essere usati per indicare +campi che contengono virgole, ritorni a capo, o doppi apici +[che vanno raddoppiati]. +Vedere il manuale per i dettagli. +.B FIXME +Eventualmente, fornire un link (URL) qui. .SS Variabili predefinite Le variabili predefinite di .IR gawk " diff --git a/doc/it/gawktexi.in b/doc/it/gawktexi.in index 68216999..7810ba9b 100755 --- a/doc/it/gawktexi.in +++ b/doc/it/gawktexi.in @@ -4571,6 +4571,23 @@ Questa tracciatura @`e stampata sullo standard error. Ogni ``codice operativo'' @`e preceduto da un segno @code{+} nell'output. +@item @option{-k} +@itemx @option{--csv} +@cindex @option{-k} (opzione) +@cindex opzione @subentry @option{-k} +@cindex @option{--csv} (opzione) +@cindex opzione @subentry @option{--csv} +@cindex campi separati da virgola (CSV) come dati @subentry opzione @option{-k} +@cindex campi separati da virgola (CSV) come dati @subentry opzione @option{--csv} +@cindex CSV (dati con valori separati da virgola) @subentry opzione @option{-k} +@cindex CSV (dati con valori separati da virgola) @subentry opzione @option{--csv} +@cindex dati CSV (campi separati da virgola) @subentry @option{-k} +@cindex dati CSV (campi separati da virgola) @subentry @option{--csv} +Richiede un trattamento speciale per file CSV [valori separati da virgola]. +@xref{Campi separati da virgola}. +Quest'opzione non pu@`o essere usata insieme all'opzione @option{--posix}. +Se lo si fa, viene generato un errore fatale. + @item @option{-l} @var{ext} @itemx @option{--load} @var{ext} @cindex @option{-l} (opzione) @@ -5720,7 +5737,7 @@ Questa @ifinfo Questo @end ifinfo -@value{SECTION} descrive funzionalit@`a o opzioni da riga di comando +@value{SECTION} descrive una funzionalit@`a o opzione da riga di comando provenienti da precedenti versioni di @command{gawk} che non sono pi@`u disponibili nella versione corrente, o che sono ancora utilizzabili ma sono deprecate (ci@`o significa che @emph{non} saranno presenti in una futura @@ -6227,7 +6244,7 @@ Il valore esadecimale @var{hh}, dove @var{hh} indica una sequenza di cifre esadecimali (@samp{0}--@samp{9}, e @samp{A}--@samp{F} o @samp{a}--@samp{f}). Dopo @samp{\x} @`e consentito un massimo di due cifre. Ogni ulteriore cifra esadecimale @`e considerata come una semplice -lettera o numero. @value{COMMONEXT} +lettera o numero. @value{COMMONEXT} (La sequenza di protezione @samp{\x} non @`e permessa in POSIX awk.) @quotation ATTENZIONE @@ -6241,6 +6258,27 @@ Dalla @value{PVERSION} 4.2, vengono elaborate solo due cifre. @end quotation +@cindex @code{\} (barra inversa) @subentry @code{\u} (sequenza di protezione) +@cindex backslash (@code{\}) @subentry @code{\u} (sequenza di protezione) +@cindex barra inversa (@code{\}) @subentry @code{\/} (sequenza di protezione) +@cindex estensioni comuni @subentry @code{\u} (sequenza di protezione) +@cindex comuni @subentry estensioni @subentry @code{\u} (sequenza di protezione) +@item \u@var{hh}@dots{} +Il valore esadecimale @var{hh}, dove @var{hh} indica una sequenza di cifre +esadecimli (@samp{0}--@samp{9}, e @samp{A}--@samp{F} o +@samp{a}--@samp{f}). Un massimo di otto cifre @`e consentito dopo +la @samp{\u}. Ogni successiva cifra esadecimale eventualmente immessa +@`e trattata come una semplice lettera o numero. @value{COMMONEXT} +(La sequenza di protezione @samp{\u} non @`e ammessa in modalit@`a POSIX.) + +Questa sequenza di protezione serve per indicare una lettera o un +simbolo come specificato nella codifica Unicode. +@command{gawk} dapprima converte le cifre cos@`{@dotless{i}} specificate in +un numero intero, e poi traduce il ``carattere largo'' +cos@`{@dotless{i}} specificato nella codifica multibyte locale (anche se la +codifica locale non @`e Unicode). Se i byte specificati non +rappresentano un carattere valido, il valore diviene @code{"?"}. + @cindex @code{\} (barra inversa) @subentry @code{\/} (sequenza di protezione) @cindex barra inversa (@code{\}) @subentry @code{\/} (sequenza di protezione) @item \/ @@ -6399,7 +6437,6 @@ Le sequenze di protezione descritte @ifnotinfo prima @end ifnotinfo - @iftex nella @end iftex @@ -7522,6 +7559,20 @@ il carattere che fa da separatore fra i record. Altrimenti (in @command{gawk}), @code{RS} @`e valutata come espressione regolare. Questo meccanismo @`e spiegato pi@`u in dettaglio qui sotto. +@quotation NOTA +Quando @command{gawk} @`e chiamato con l'opzione @option{--csv}, nulla +di quanto descritto in +@ifnotinfo +questa +@end ifnotinfo +@ifinfo +questo +@end ifinfo +@value{SECTION} @`e applicabile. +@xref{Campi separati da virgola}, +per i dettagli. +@end quotation + @menu * awk divisione record:: Come @command{awk} standard divide i record. * gawk divisione record:: Come @command{gawk} divide i record. @@ -8238,7 +8289,6 @@ I programmatori di shell notino: @command{awk} @emph{non} usa il nome @code{IFS} che @`e usato dalle shell conformi a POSIX (come la Unix Bourne shell, @command{sh}, o Bash). -@c FIXME: This needs reworking now that we have CSV @cindex @code{FS} (variabile) @subentry cambiare il valore della @cindex cambiare @subentry il valore di @code{FS} (variabile) Il valore di @code{FS} si pu@`o cambiare nel programma @command{awk} con @@ -8250,10 +8300,10 @@ ricerca speciale @code{BEGIN} (@pxref{BEGIN/END}). Per esempio, qui impostiamo il valore di @code{FS} alla stringa -@code{","}: +@code{":"}: @example -awk 'BEGIN @{ FS = "," @} ; @{ print $2 @}' +awk 'BEGIN @{ FS = ":" @} ; @{ print $2 @}' @end example @cindex @code{BEGIN} (regola) @@ -8261,7 +8311,7 @@ awk 'BEGIN @{ FS = "," @} ; @{ print $2 @}' Data la riga in input: @example -John Q. Smith, 29 Oak St., Walamazoo, MI 42139 +John Q. Smith: 29 Oak St.: Walamazoo: MI 42139 @end example @noindent @@ -8277,7 +8327,7 @@ nome della persona dell'esempio che abbiamo appena usato potrebbe avere un titolo o un suffisso annesso, come: @example -John Q. Smith, LXIX, 29 Oak St., Walamazoo, MI 42139 +John Q. Smith: LXIX: 29 Oak St.: Walamazoo: MI 42139 @end example @noindent @@ -8480,40 +8530,39 @@ si comporta in questo modo. @node Campi separati da virgola @subsection Lavorare con file CSV -@cindex dati CSV (campi separati da virgola) @subentry analizzare con @code{FS} = "," -@cindex CSV (campi separati da virgola) come dati @subentry analizzare con @code{FS} = "," -@cindex Comma Separated Values (CSV) come dati @subentry analizzare con @code{FS} = "," -@cindex campi separati da virgola (CSV) come dati @subentry analizzare con @code{FS} = "," -@cindex @code{FS} (variabile) @subentry carattere "," come -@cindex variabile @subentry @code{FS} @subentry carattere "," come -@cindex @code{FS} (variabile) @subentry per analizzare file CSV -@cindex variabile @subentry @code{FS} @subentry per analizzare file CSV +@cindex CSV (dati con valori separati da virgola) @subentry record e campi +@cindex dati CSV (dati con valori separati da virgola) @subentry record e campi +@cindex campi separati da virgola (CSV) come dati @subentry record e campi Molti programmi di uso frequente si servono della virgola come separatore di campo, invece di usare lo spazio. [Normalmente i file in input a @command{gawk} hanno in questo caso come suffisso "csv", -Comma Separated Value, ovvero Campi Separati da Virgola.] +Comma Separated Value, ovvero Campi separati da virgola.] Questo @`e il caso in particolare per popolari fogli di calcolo. Non c'@`e uno standard accettato da tutti che regoli il formato di tali file, sebbene il documento -@uref{http://www.ietf.org/rfc/rfc4180.txt, RFC 4180} +@uref{http://www.ietf.org/rfc/rfc4180, RFC 4180} elenchi le pratiche normalmente seguite. Per decenni, chi voleva lavorare con file CSV in @command{awk} ha dovuto ``trovare da solo'' una soluzione. (Per esempio, @pxref{Separazione in base al contenuto}). Nel 2023, Brian Kernighan ha deciso di aggiungere un supporto -iniziale per i file CSV alla sua versione di @command{awk}. +per i file CSV alla sua versione di @command{awk}. Per restare allo stesso livello, anche @command{gawk} rende disponibile lo stesso supporto presente nella versione di Brian. -Per usare dei file contenenti campi CSV, basta assegnare alla variabile -@code{FS} una stringa che contiene solo una virgola, -cos@`{@dotless{i}}: @samp{FS = ","}. +Per usare dei file contenenti campi in formato CSV, basta +chiamare @command{gawk} specificando come opzione +@option{-k} oppure @option{--csv}. I campi nei file CSV sono separati da virgola. Per consentire la presenza di una virgola all'interno di un campo (p.es. come parte di un dato), il campo pu@`o essere racchiuso fra doppi apici. Per consentire un doppio apice all'interno di un campo racchiuso fra -doppi apici, si devono inserire due doppi apici. +doppi apici, il campo stesso @empf{deve} essere racchiuso fra doppi apici +e due doppi apici vanno specificati per ogni singolo doppio apice +all'interno del campo. +Il doppio apice che segnala l'inizio del campo dev'essere +il primo carattere dopo la virgola [che segna l'inizio del campo]. La tabella @ref{table-csv-examples} mostra alcuni esempi. @@ -8529,22 +8578,48 @@ La tabella @end multitable @end float -Il doppio apice che inizia un campo fra doppi apici -dev'essere il primo carattere dopo la virgola. +Inoltre, ed @`e qui che la situazione si ingarbuglia, all'interno +di un campo fra doppi apici @`e consentito anche inserire +il carattere a-capo! +Per gestire una tale situazione, quando sta trattando un file CSV +@command{gawk} analizza il file in input alla ricerca di +caratteri a-capo che non siano racchiusi fra doppi apici. +Quindi, se si utilizza l'opzione @option{--csv}, il modo +di gestire i record utilizzando la variabile @code{RS} +(@pxref{Record}) non viene utilizzato per nulla. + +Molti file CSV provengono da sistemi in cui il carattere di +fine riga per file di testo @`e costituito dalla coppia di +caratteri a-capo--ritorno-carrello. +(CR-LF, @code{\r} seguito by @code{\n}). +Per semplificare la vita, quando @command{gawk} tratta +dei file CSV, scarta dall'input ogni carattere ritorno-carrello. + +Il comportamento della funzione @code{split()} (ancora non +formalmente trattato, vedere @ref{Funzioni per stringhe}) +@`e leggermento differente quando si abbia a che fare con file CSV. +Se @`e chiamato con due argomenti +(@samp{split(@var{stringa}, @var{vettore})}), @code{split()} +separa i campi con la logica CSV. +In tutti gli altri casi, il comportamento @`e quello normale. + +Se si @`e specificato l'opzione @option{--csv}, l'elemento +@code{PROCINFO["CSV"]} esister@`a, altrimenti non sar@`a disponibile. +@xref{Variabili auto-assegnate}. -Alcuni programmi che supportano dati in formato CSV consentono -perfino di avere dei campi che includono dei caratteri a-capo -(per esempio se un campo @`e un indirizzo postale). -Questo @emph{non} @`e supportato n@'e in BWK @command{awk}, n@'e -in @command{gawk}. Non @`e possibile gestire simili situazioni -usando solo le funzionalit@`a del linguaggio @command{awk}, -poich@'e @command{awk} divide preliminarmente l'input in -record, e il separatore di record di default @`e il carattere -a-capo. -Quindi, ogni carattere a-capo presente in un campo segna -semplicemente la fine del record. +Infine, se si @`e specificato @option{--csv}, l'assegnazione di +un vaalore a una delle variabile +@code{FS}, @code{FIELDWIDTHS}, @code{FPAT}, o @code{RS} +genera un messaggio di avvertimento. -Questa funzionalit@`a @`e disabilitata in modalit@`a POSIX. +Per amor di chiarezza, @command{gawk} considera come +autoritativo per il file in input di tipo CSV +il documento +@uref{http://www.ietf.org/rfc/rfc4180, RFC 4180}. +Non ci sono meccanismi che consentono di accettare file CSV +in input che non rispettino tali specifiche, p.es. dei +file che usino come carattere che separa i campi un +punto-e-virgola al posto della virgola. @node Separatori campo da riga di comando @subsection Impostare @code{FS} dalla riga di comando @@ -8737,6 +8812,10 @@ Il seguente elenco riassume come i campi vengono divisi, in base al valore di @code{FS} (@samp{==} significa ``@`e uguale a''): @table @code +@item @asis{@command{gawk} @`e stato chiamato specificando l'opzione @option{--csv}} +La divisione in campi segue le regole esposte in @ref{Campi separati da virgola}. +Il valore di @code{FS} @`e ignorato. + @item FS == " " I campi sono separati da uno o pi@`u spazi vuoti. Gli spazi vuoti iniziali e finali sono ignorati. Questo @`e il comportamento di default. @@ -9046,6 +9125,10 @@ per un esempio di tale funzione). @node Separazione in base al contenuto @section Definire i campi in base al contenuto +@strong{FIXME}: Quest'intera sezione dev'essere riscritta +dopo che in @command{gawk} @`e stata introdotta la capacit@`a di analizzare +file di tipo CSV. Ahim@`e. + @menu * Ancora CSV:: Ancora sui file CSV. * FS rispetto a FPAT:: Una differenza sottile. @@ -9071,12 +9154,12 @@ parole, @code{FS} definisce cosa un campo @emph{non @`e}, invece di cosa Tuttavia, ci sono casi in cui effettivamente si ha bisogno di definire i campi in base a cosa essi sono, e non in base a cosa non sono. -@cindex dati CSV (campi separati da virgola) @subentry analizzare con @code{FPAT} @cindex CSV (campi separati da virgola) come dati @subentry analizzare con @code{FPAT} -@cindex Comma Separated Values (CSV) come dati @subentry analizzare con @code{FPAT} +@cindex dati CSV (campi separati da virgola) @subentry analizzare con @code{FPAT} @cindex campi separati da virgola (CSV) come dati @subentry analizzare con @code{FPAT} -Il caso pi@`u emblematico @`e quello dei dati cosiddetti @dfn{comma-separated -value} (CSV). Molti fogli elettronici, per esempio, possono esportare i dati +Il caso pi@`u emblematico +@`e quello dei dati di tipo CSV (campi separati da virgola). +Molti fogli elettronici, per esempio, possono esportare i dati in file di testo, dove ogni record termina con un ritorno a capo e i campi sono separati tra loro da virgole. Se le virgole facessero solo da separatore fra i dati non ci sarebbero problemi. Il problema sorge se uno dei campi @@ -9344,7 +9427,9 @@ Il valore @`e @code{"FS"} se si usa la maniera normale di divisione dei campi, oppure @code{"FPAT"} se si una la divisione in campi in base al contenuto: @example -if (PROCINFO["FS"] == "FS") +if ("CSV" in PROCINFO) + @var{divisione in campi secondo le regole CSV} @dots{} +else if (PROCINFO["FS"] == "FS") @var{divisione normale in campi} @dots{} else if (PROCINFO["FS"] == "FIELDWIDTHS") @var{divisione in campi a lunghezza fissa} @dots{} @@ -9356,8 +9441,9 @@ else @end example Quest'informazione @`e utile se si sta scrivendo una funzione che -deve cambiare provvisoriamente @code{FS} o @code{FIELDWIDTHS}, leggere alcuni -record e poi ripristinare le inpostazioni originali. Si veda +deve cambiare provvisoriamente @code{FS}, @code{FIELDWIDTHS}, o +@code{FPAT}, leggere alcuni +record e poi tornale alle impostazioni originali. Si veda (@pxref{Funzioni Passwd} per un esempio di una funzione di questo tipo. @node Righe multiple @@ -10206,7 +10292,7 @@ Questo @value{SECTION} descrive una funzionalit@`a disponibile solo in @command{gawk}. -Si pu@`o specificare un tempo limite in millisecondi per leggere l'input dalla +Si pu@`o specificare un tempo limite in millisecondi per leggere l'input dalla tastiera, da una @dfn{pipe} o da una comunicazione bidirezionale, compresi i @dfn{socket} TCP/IP. Questo pu@`o essere fatto per input, per comando o per connessione, impostando un elemento speciale nel vettore @code{PROCINFO} @@ -20608,12 +20694,6 @@ a inizio stringa viene messo in @code{@var{separatori}[0]} e ogni eventuale spazio bianco a fine stringa viene messo in @code{@var{separatori}[@var{n}]}, dove @var{n} @`e il valore restituito da @code{split()} (cio@`e il numero di elementi in @var{vettore}). -Se la variabile @var{separacampo} @`e una virgola, e @command{gawk} non @`e -in modalit@`a POSIX, la stringa viene suddivisa usando le regole di -analisi dei file CSV, come richiesto dal separatore @code{FS} -(@pxref{Campi separati da virgola}). In questo caso il vettore @var{separatori} -non viene popolato, perch@'e consisterebbe solo di elementi contenenti -ciascuno una virgola. La funzione @code{split()} divide le stringhe in pezzi nello stesso modo in cui le righe in input sono divise in campi. Per esempio: @@ -20643,6 +20723,15 @@ separatori[2] = "-" @noindent Il valore restituito da questa chiamata a @code{split()} @`e tre. +Se @command{gawk} @`e chiamato con l'opzione @option{--csv}, una chiamata +a @code{split()} con due soli argomenti, divide la stringa usando le +regole di analisi dei file di dati CSV, come esposto in +@ref{Campi separati da virgola}. Con tre o quattro argomenti, +@code{split()} funzione come visto sopra. La chiamata con quattro +argomenti non avrebbe senso per i file CSV, poich@'e ogni elemento +del vettore @var{separatori} consisterebbe semplicemente in una +stringa che contiene una virgola. + @cindex differenze tra @command{awk} e @command{gawk} @subentry funzione @code{split()} Come nella divisione in campi dei record in input, quando il valore di @var{separacampo} @`e @w{@code{" "}}, gli spazi bianchi a inizio e fine stringa @@ -23491,8 +23580,66 @@ un errore fatale, quindi @command{awk} non arriver@`a a segnalare il secondo errore. Se si commenta la prima chiamata e si riesegue il programma, a quel punto @command{awk} terminer@`a con un messaggio relativo al secondo errore. -Solitamente queste cose non causano grossi problemi, ma @`e bene -esserne a conoscenza. + +Ecco un esempio pi@`u complesso: + +@example +BEGIN @{ + funky(a) + if (A == 0) + print "<" a ">" + else + print a[1] +@} + +function funky(arr) +@{ + if (A == 0) + arr = 1 + else + arr[1] = 1 +@} +@end example + +In questo esempio, la funzione usa il parametro che le viene +passato in modo differente a seconda del valore della variabile +globale @code{A}. +Se @code{A} vale zero, il parametro @code{arr} @`e trattato come una +variabile scalare. Altrimenti @`e trattato come un vettore. + +Ci sono due modi in cui questo programma potrebbe comportarsi. +@command{awk} potrebbe determinare che, nel programma principale +@code{a} ha un indice (ossia @`e un elemento di un vettore), e quindi +considerarlo un vettore (nella fase di analisi del programma, ossia +prima ancora che il programma inizi la sua esecuzione. +BWK @code{awk}, @code{mawk}, e forse altri fanno questo: + +@example +$ @kbd{mawk -v A=0 -f funky.awk} +@error{} mawk: funky.awk: line 6: illegal reference to variable a +@error{} mawk: funky.awk: line 14: illegal reference to local variable arr +$ @kbd{mawk -v A=1 -f funky.awk} +@error{} mawk: funky.awk: line 6: illegal reference to variable a +@error{} mawk: funky.awk: line 14: illegal reference to local variable arr +@end example + +Oppure @command{awk} potrebbe attendere il momento in cui l'istruzione +viene eseguita, per determinare il tipo della variabile @code{a}. +In tal caso, poich@'e @code{a} non @`e ancora stato usato prima di essere +passato alla funzione, l'uso che ne fa la funzione determina il tipo +della variabile, che quindi pu@`o diventare scalare o vettoriale. +@command{gawk} e MKS @command{awk} si comportano cos@`{@dotless{i}}: + +@example +$ @kbd{gawk -v A=0 -f funky.awk} +@print{} <> +$ @kbd{gawk -v A=1 -f funky.awk } +@print{} 1 +@end example + +POSIX non specifica quale dei due comportamenti sia quello corretto, +quindi occorre essere consapevoli che differenti implementazioni di +@command{awk} si comportano in modi diversi. @node Chiamate indirette @section Chiamate indirette di funzione @@ -45773,6 +45920,10 @@ La possibilit@`a che @command{gawk} bufferizzi l'output a @dfn{pipe} (@pxref{Noflush}). @item +La sequenza di protezione @samp{\u} +(@pxref{Sequenze di protezione}). + +@item La necessit@`a di utilizzare la libreria GNU @code{libsigsegv} @`e stata rimossa da @command{gawk}. Il valore aggiunto relativo non @`e mai stato grande e la funzionalit@`a diff --git a/doc/it/texinfo.tex b/doc/it/texinfo.tex index 1010636c..795e85da 100644..100755 --- a/doc/it/texinfo.tex +++ b/doc/it/texinfo.tex @@ -3,7 +3,7 @@ % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % -\def\texinfoversion{2023-01-02.21} +\def\texinfoversion{2023-03-21.06} % % Copyright 1985, 1986, 1988, 1990-2023 Free Software Foundation, Inc. % @@ -2701,25 +2701,21 @@ end } \setregularquotes -% Allow an option to not use regular directed right quote/apostrophe -% (char 0x27), but instead the undirected quote from cmtt (char 0x0d). -% The undirected quote is ugly, so don't make it the default, but it -% works for pasting with more pdf viewers (at least evince), the -% lilypond developers report. xpdf does work with the regular 0x27. +% output for ' in @code +% in tt font hex 0D (undirected) or 27 (curly right quote) % \def\codequoteright{% \ifusingtt {\ifflagclear{txicodequoteundirected}% {\ifflagclear{codequoteundirected}% {'}% - {\char'15 }}% - {\char'15 }}% + {\char"0D }}% + {\char"0D }}% {'}% } -% and a similar option for the left quote char vs. a grave accent. -% Modern fonts display ASCII 0x60 as a grave accent, so some people like -% the code environments to do likewise. +% output for ` in @code +% in tt font hex 12 (grave accent) or 60 (curly left quote) % \relax disables Spanish ligatures ?` and !` of \tt font. % \def\codequoteleft{% @@ -2727,8 +2723,8 @@ end {\ifflagclear{txicodequotebacktick}% {\ifflagclear{codequotebacktick}% {\relax`}% - {\char'22 }}% - {\char'22 }}% + {\char"12 }}% + {\char"12 }}% {\relax`}% } @@ -2747,7 +2743,7 @@ end \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}% \fi\fi } -% + \parseargdef\codequotebacktick{% \def\temp{#1}% \ifx\temp\onword @@ -2762,6 +2758,11 @@ end \fi\fi } +% Turn them on by default +\let\SETtxicodequoteundirected = t +\let\SETtxicodequotebacktick = t + + % [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. \def\noligaturesquoteleft{\relax\lq} @@ -2947,10 +2948,6 @@ end \let-\dashnobreak \let_\realunder \fi - % Given -foo (with a single dash), we do not want to allow a break - % after the hyphen. - \global\let\codedashprev=\codedash - % \codex } % @@ -2960,21 +2957,30 @@ end % % Now, output a discretionary to allow a line break, unless % (a) the next character is a -, or - % (b) the preceding character is a -. + % (b) the preceding character is a -, or + % (c) we are at the start of the string. + % In both cases (b) and (c), \codedashnobreak should be set to \codedash. + % % E.g., given --posix, we do not want to allow a break after either -. % Given --foo-bar, we do want to allow a break between the - and the b. \ifx\next\codedash \else - \ifx\codedashprev\codedash + \ifx\codedashnobreak\codedash \else \discretionary{}{}{}\fi \fi % we need the space after the = for the case when \next itself is a % space token; it would get swallowed otherwise. As in @code{- a}. - \global\let\codedashprev= \next + \global\let\codedashnobreak= \next } } \def\normaldash{-} % -\def\codex #1{\tclose{#1}\endgroup} +\def\codex #1{\tclose{% + % Given -foo (with a single dash), we do not want to allow a break + % after the -. \codedashnobreak is set to the first character in + % @code. + \futurelet\codedashnobreak\relax + #1% +}\endgroup} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ @@ -3968,33 +3974,23 @@ $$% \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting -% When we turn headings on, set the page number to 1. +% Set the page number to 1. \def\pageone{ \global\pageno=1 \global\arabiccount = \pagecount } -% For double-sided printing, put current file name in lower left corner, -% chapter name on inside top of right hand pages, document -% title on inside top of left hand pages, and page numbers on outside top -% edge of all pages. -\def\HEADINGSdouble{% -\pageone -\HEADINGSdoublex -} \let\contentsalignmacro = \chappager -% For single-sided printing, chapter title goes across top left of page, -% page number on top right. -\def\HEADINGSsingle{% -\pageone -\HEADINGSsinglex -} % \def\HEADINGSon{\HEADINGSdouble} % defined by \CHAPPAGon -\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} +% For double-sided printing, put current file name in lower left corner, +% chapter name on inside top of right hand pages, document +% title on inside top of left hand pages, and page numbers on outside top +% edge of all pages. +\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdouble} \let\HEADINGSdoubleafter=\HEADINGSafter -\def\HEADINGSdoublex{% +\def\HEADINGSdouble{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} @@ -4004,8 +4000,10 @@ $$% \global\let\contentsalignmacro = \chapoddpage } -\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} -\def\HEADINGSsinglex{% +% For single-sided printing, chapter title goes across top left of page, +% page number on top right. +\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsingle} +\def\HEADINGSsingle{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} @@ -4017,7 +4015,6 @@ $$% % for @setchapternewpage off \def\HEADINGSsinglechapoff{% -\pageone \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} @@ -4743,13 +4740,11 @@ $$% % except not \outer, so it can be used within macros and \if's. \edef\newwrite{\makecsname{ptexnewwrite}} -% \newindex {foo} defines an index named IX. +% \newindex {IX} defines an index named IX. % It automatically defines \IXindex such that % \IXindex ...rest of line... puts an entry in the index IX. % It also defines \IXindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is IX. -% The name of an index should be no more than 2 characters long -% for the sake of vms. % \def\newindex#1{% \expandafter\chardef\csname#1indfile\endcsname=0 @@ -5007,7 +5002,7 @@ $$% \commondummyword\ampchar {\normalamp}% \commondummyword\atchar {\@}% \commondummyword\arrow {->}% - \commondummyword\backslashchar {}% + \commondummyword\backslashchar {\realbackslash}% \commondummyword\bullet {bullet}% \commondummyword\comma {,}% \commondummyword\copyright {copyright}% @@ -5107,9 +5102,6 @@ $$% % % We need to get rid of all macros, leaving only the arguments (if present). % Of course this is not nearly correct, but it is the best we can do for now. - % makeinfo does not expand macros in the argument to @deffn, which ends up - % writing an index entry, and texindex isn't prepared for an index sort entry - % that starts with \. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that @@ -7414,6 +7406,7 @@ might help (with 'rm \jobname.?? \jobname.??s')% \def\setupverb{% \tt \def\par{\leavevmode\endgraf}% + \parindent = 0pt \setcodequotes \tabeightspaces % Respect line breaks, @@ -7589,11 +7582,6 @@ might help (with 'rm \jobname.?? \jobname.??s')% \exdentamount=\defbodyindent } -\newtoks\defidx -\newtoks\deftext - -\def\useindex#1{\defidx={#1}\ignorespaces} - % Called as \printdefunline \deffooheader{text} % \def\printdefunline#1#2{% @@ -7601,10 +7589,6 @@ might help (with 'rm \jobname.?? \jobname.??s')% \plainfrenchspacing % call \deffooheader: #1#2 \endheader - % create the index entry - \defcharsdefault - \edef\temp{\noexpand\doind{\the\defidx}{\the\deftext}}% - \temp % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil\relax @@ -7619,6 +7603,24 @@ might help (with 'rm \jobname.?? \jobname.??s')% \def\Edefun{\endgraf\medbreak} +% @defblock, @defline do not automatically create index entries +\envdef\defblock{% + \startdefun +} +\let\Edefblock\Edefun + +\def\defline{% + \doingtypefnfalse + \parseargusing\activeparens{\printdefunline\deflineheader}% +} +\def\deflineheader#1 #2 #3\endheader{% + \printdefname{#1}{}{#2}\magicamp\defunargs{#3\unskip}% +} +\def\deftypeline{% + \doingtypefntrue + \parseargusing\activeparens{\printdefunline\deflineheader}% +} + % \makedefun{deffoo} (\deffooheader parameters) { (\deffooheader expansion) } % % Define \deffoo, \deffoox \Edeffoo and \deffooheader. @@ -7670,56 +7672,51 @@ might help (with 'rm \jobname.?? \jobname.??s')% \fi\fi } -\def\defind#1#2{ - \defidx={#1}% - \deftext={#2}% -} - % Untyped functions: % @deffn category name args \makedefun{deffn}#1 #2 #3\endheader{% - \defind{fn}{\code{#2}}% - \defname{#1}{}{#2}\magicamp\defunargs{#3\unskip}% + \doind{fn}{\code{#2}}% + \printdefname{#1}{}{#2}\magicamp\defunargs{#3\unskip}% } % @defop category class name args \makedefun{defop}#1 {\defopheaderx{#1\ \putwordon}} \def\defopheaderx#1#2 #3 #4\endheader{% - \defind{fn}{\code{#3}\space\putwordon\ \code{#2}}% - \defname{#1\ \code{#2}}{}{#3}\magicamp\defunargs{#4\unskip}% + \doind{fn}{\code{#3}\space\putwordon\ \code{#2}}% + \printdefname{#1\ \code{#2}}{}{#3}\magicamp\defunargs{#4\unskip}% } % Typed functions: % @deftypefn category type name args \makedefun{deftypefn}#1 #2 #3 #4\endheader{% - \defind{fn}{\code{#3}}% + \doind{fn}{\code{#3}}% \doingtypefntrue - \defname{#1}{#2}{#3}\defunargs{#4\unskip}% + \printdefname{#1}{#2}{#3}\defunargs{#4\unskip}% } % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopheaderx{#1\ \putwordon}} \def\deftypeopheaderx#1#2 #3 #4 #5\endheader{% - \defind{fn}{\code{#4}\space\putwordon\ \code{#1\ \code{#2}}}% + \doind{fn}{\code{#4}\space\putwordon\ \code{#1\ \code{#2}}}% \doingtypefntrue - \defname{#1\ \code{#2}}{#3}{#4}\defunargs{#5\unskip}% + \printdefname{#1\ \code{#2}}{#3}{#4}\defunargs{#5\unskip}% } % Typed variables: % @deftypevr category type var args \makedefun{deftypevr}#1 #2 #3 #4\endheader{% - \defind{vr}{\code{#3}}% - \defname{#1}{#2}{#3}\defunargs{#4\unskip}% + \doind{vr}{\code{#3}}% + \printdefname{#1}{#2}{#3}\defunargs{#4\unskip}% } % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvheaderx{#1\ \putwordof}} \def\deftypecvheaderx#1#2 #3 #4 #5\endheader{% - \defind{vr}{\code{#4}\space\putwordof\ \code{#2}}% - \defname{#1\ \code{#2}}{#3}{#4}\defunargs{#5\unskip}% + \doind{vr}{\code{#4}\space\putwordof\ \code{#2}}% + \printdefname{#1\ \code{#2}}{#3}{#4}\defunargs{#5\unskip}% } % Untyped variables: @@ -7735,8 +7732,8 @@ might help (with 'rm \jobname.?? \jobname.??s')% % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% - \defind{tp}{\code{#2}}% - \defname{#1}{}{#2}\defunargs{#3\unskip}% + \doind{tp}{\code{#2}}% + \printdefname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: @@ -7752,14 +7749,14 @@ might help (with 'rm \jobname.?? \jobname.??s')% \makedefun{defivar}{\defcvheaderx\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvheaderx\putwordInstanceVariableof} -% \defname, which formats the name of the @def (not the args). +% \printdefname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % -\def\defname#1#2#3{% +\def\printdefname#1#2#3{% \par % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent @@ -7884,7 +7881,7 @@ might help (with 'rm \jobname.?? \jobname.??s')% % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen -\def\amprm#1 {\ampseentrue{\bf\ }} +\def\amprm#1 {\ampseentrue{\rm\ }} \def\parenfont{% \ifampseen @@ -8208,12 +8205,12 @@ might help (with 'rm \jobname.?? \jobname.??s')% % % We are in \macrobodyctxt, and the \xdef causes backslashshes in the macro % body to be transformed. -% Set \macrobody to the body of the macro, and call \defmacro. +% Set \macrobody to the body of the macro, and call \macrodef. % {\catcode`\ =\other\long\gdef\parsemacbody#1@end macro{% -\xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}% +\xdef\macrobody{\eatcr{#1}}\endgroup\macrodef}}% {\catcode`\ =\other\long\gdef\parsermacbody#1@end rmacro{% -\xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}% +\xdef\macrobody{\eatcr{#1}}\endgroup\macrodef}}% % Make @ a letter, so that we can make private-to-Texinfo macro names. \edef\texiatcatcode{\the\catcode`\@} @@ -8432,16 +8429,17 @@ might help (with 'rm \jobname.?? \jobname.??s')% % \xdef is used so that macro definitions will survive the file % they're defined in: @include reads the file inside a group. % -\def\defmacro{% +\def\macrodef{% \let\hash=##% convert placeholders to macro parameter chars \ifnum\paramno=1 - \def\xeatspaces##1{##1}% - % This removes the pair of braces around the argument. We don't - % use \eatspaces, because this can cause ends of lines to be lost - % when the argument to \eatspaces is read, leading to line-based - % commands like "@itemize" not being read correctly. + \long\def\xeatspaces##1{##1}% + % We don't use \xeatspaces for single-argument macros, because we + % want to keep ends of lines. This definition removes \xeatspaces + % when \macrobody is expanded below. \else - \let\xeatspaces\relax % suppress expansion + \def\xeatspaces{\string\xeatspaces}% + % This expands \xeatspaces as a sequence of character tokens, which + % stops \scantokens inserting an extra space after the control sequence. \fi \ifcase\paramno % 0 @@ -8607,6 +8605,75 @@ might help (with 'rm \jobname.?? \jobname.??s')% \fi \macnamexxx} +% @linemacro + +\parseargdef\linemacro{% + \getargs{#1}% now \macname is the macname and \argl the arglist + \ifx\argl\empty + \paramno=0 + \let\hash\relax + \def\paramlist{\hash 1\endlinemacro}% + \else + \expandafter\linegetparamlist\argl;% + \fi + \begingroup \macrobodyctxt \usembodybackslash + \parselinemacrobody +} + +% Build up \paramlist which will be used as the parameter text for the macro. +% At the end it will be like "#1 #2 #3\endlinemacro". +\def\linegetparamlist#1;{% + \paramno=0\def\paramlist{}% + \let\hash\relax + \linegetparamlistxxx#1,;,% +} +\def\linegetparamlistxxx#1,{% + \if#1;\let\next=\linegetparamlistxxxx + \else \let\next=\linegetparamlistxxx + \advance\paramno by 1 + \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname + {\hash\the\paramno}% + \edef\paramlist{\paramlist\hash\the\paramno\space}% + \fi\next} +\def\linegetparamlistxxxx{% + \expandafter\fixparamlist\paramlist\fixparamlist +} +% Replace final space token +\def\fixparamlist#1 \fixparamlist{% + \def\paramlist{#1\endlinemacro}% +} + +% Read the body of the macro, replacing backslash-surrounded variables +% +{\catcode`\ =\other\long\gdef\parselinemacrobody#1@end linemacro{% +\xdef\macrobody{#1}% +\endgroup +\linemacrodef +}} + +% Make the definition +\def\linemacrodef{% + \let\hash=##% + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup + \noexpand\parsearg + \expandafter\noexpand\csname\the\macname @@\endcsname + } + \expandafter\xdef\csname\the\macname @@\endcsname##1{% + \egroup + \expandafter\noexpand + \csname\the\macname @@@\endcsname##1\noexpand\endlinemacro + } + \expandafter\expandafter + \expandafter\xdef + \expandafter\expandafter\csname\the\macname @@@\endcsname\paramlist{% + \newlinechar=13 % split \macrobody into lines + \noexpand\scantokens{\macrobody}% + } +} + + + % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Make them active and then expand them all to nothing. @@ -9598,8 +9665,8 @@ might help (with 'rm \jobname.?? \jobname.??s')% % \def\caption{\docaption\thiscaption} \def\shortcaption{\docaption\thisshortcaption} -\def\docaption{\checkenv\float \bgroup\scanctxt\defcaption} -\def\defcaption#1#2{\egroup \def#1{#2}} +\def\docaption{\checkenv\float \bgroup\scanctxt\docaptionz} +\def\docaptionz#1#2{\egroup \def#1{#2}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. @@ -11806,4 +11873,3 @@ directory should work if nowhere else does.} @c End: @newlineloadsconf - |