summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntonio Giovanni Colombo <azc100@gmail.com>2023-03-28 16:11:07 +0200
committerAntonio Giovanni Colombo <azc100@gmail.com>2023-03-28 16:11:07 +0200
commitfd450250a51a5c126804c5c5fb3cc2c866184592 (patch)
treef4dac16910277f1d8e48ce19032d370fe4280580
parentbafdbc1bb6da942a5099d884466e9bfc4c2af7bc (diff)
downloadgawk-fd450250a51a5c126804c5c5fb3cc2c866184592.tar.gz
Modifications for gawk 5.3
-rwxr-xr-xdoc/it/ChangeLog6
-rwxr-xr-x[-rw-r--r--]doc/it/gawk.126
-rwxr-xr-xdoc/it/gawktexi.in257
-rwxr-xr-x[-rw-r--r--]doc/it/texinfo.tex252
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\&#1 }}
+\def\amprm#1 {\ampseentrue{\rm\&#1 }}
\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
-