Merge tag 'spi-v5.0' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi
[linux/fpc-iii.git] / Documentation / translations / it_IT / doc-guide / sphinx.rst
blob474b7e127893faf71f61b06c1b5ebad991060bb2
1 .. include:: ../disclaimer-ita.rst
3 .. note:: Per leggere la documentazione originale in inglese:
4           :ref:`Documentation/doc-guide/index.rst <doc_guide>`
6 Introduzione
7 ============
9 Il kernel Linux usa `Sphinx`_ per la generazione della documentazione a partire
10 dai file `reStructuredText`_ che si trovano nella cartella ``Documentation``.
11 Per generare la documentazione in HTML o PDF, usate comandi ``make htmldocs`` o
12 ``make pdfdocs``. La documentazione così generata sarà disponibile nella
13 cartella ``Documentation/output``.
15 .. _Sphinx: http://www.sphinx-doc.org/
16 .. _reStructuredText: http://docutils.sourceforge.net/rst.html
18 I file reStructuredText possono contenere delle direttive che permettono di
19 includere i commenti di documentazione, o di tipo kernel-doc, dai file
20 sorgenti.
21 Solitamente questi commenti sono utilizzati per descrivere le funzioni, i tipi
22 e l'architettura del codice. I commenti di tipo kernel-doc hanno una struttura
23 e formato speciale, ma a parte questo vengono processati come reStructuredText.
25 Inoltre, ci sono migliaia di altri documenti in formato testo sparsi nella
26 cartella ``Documentation``. Alcuni di questi verranno probabilmente convertiti,
27 nel tempo, in formato reStructuredText, ma la maggior parte di questi rimarranno
28 in formato testo.
30 .. _it_sphinx_install:
32 Installazione Sphinx
33 ====================
35 I marcatori ReST utilizzati nei file in Documentation/ sono pensati per essere
36 processati da ``Sphinx`` nella versione 1.3 o superiore. Se desiderate produrre
37 un documento PDF è raccomandato l'utilizzo di una versione superiore alle 1.4.6.
39 Esiste uno script che verifica i requisiti Sphinx. Per ulteriori dettagli
40 consultate :ref:`it_sphinx-pre-install`.
42 La maggior parte delle distribuzioni Linux forniscono Sphinx, ma l'insieme dei
43 programmi e librerie è fragile e non è raro che dopo un aggiornamento di
44 Sphinx, o qualche altro pacchetto Python, la documentazione non venga più
45 generata correttamente.
47 Un modo per evitare questo genere di problemi è quello di utilizzare una
48 versione diversa da quella fornita dalla vostra distribuzione. Per fare questo,
49 vi raccomandiamo di installare Sphinx dentro ad un ambiente virtuale usando
50 ``virtualenv-3`` o ``virtualenv`` a seconda di come Python 3 è stato
51 pacchettizzato dalla vostra distribuzione.
53 .. note::
55    #) Le versioni di Sphinx inferiori alla 1.5 non funzionano bene
56       con il pacchetto Python docutils versione 0.13.1 o superiore.
57       Se volete usare queste versioni, allora dovere eseguire
58       ``pip install 'docutils==0.12'``.
60    #) Viene raccomandato l'uso del tema RTD per la documentazione in HTML.
61       A seconda della versione di Sphinx, potrebbe essere necessaria
62       l'installazione tramite il comando ``pip install sphinx_rtd_theme``.
64    #) Alcune pagine ReST contengono delle formule matematiche. A causa del
65       modo in cui Sphinx funziona, queste espressioni sono scritte
66       utilizzando LaTeX. Per una corretta interpretazione, è necessario aver
67       installato texlive con i pacchetti amdfonts e amsmath.
69 Riassumendo, se volete installare la versione 1.4.9 di Sphinx dovete eseguire::
71        $ virtualenv sphinx_1.4
72        $ . sphinx_1.4/bin/activate
73        (sphinx_1.4) $ pip install -r Documentation/sphinx/requirements.txt
75 Dopo aver eseguito ``. sphinx_1.4/bin/activate``, il prompt cambierà per
76 indicare che state usando il nuovo ambiente. Se aprite un nuova sessione,
77 prima di generare la documentazione, dovrete rieseguire questo comando per
78 rientrare nell'ambiente virtuale.
80 Generazione d'immagini
81 ----------------------
83 Il meccanismo che genera la documentazione del kernel contiene un'estensione
84 capace di gestire immagini in formato Graphviz e SVG (per maggior informazioni
85 vedere :ref:`it_sphinx_kfigure`).
87 Per far si che questo funzioni, dovete installare entrambe i pacchetti
88 Graphviz e ImageMagick. Il sistema di generazione della documentazione è in
89 grado di procedere anche se questi pacchetti non sono installati, ma il
90 risultato, ovviamente, non includerà le immagini.
92 Generazione in PDF e LaTeX
93 --------------------------
95 Al momento, la generazione di questi documenti è supportata solo dalle
96 versioni di Sphinx superiori alla 1.4.
98 Per la generazione di PDF e LaTeX, avrete bisogno anche del pacchetto
99 ``XeLaTeX`` nella versione 3.14159265
101 Per alcune distribuzioni Linux potrebbe essere necessario installare
102 anche una serie di pacchetti ``texlive`` in modo da fornire il supporto
103 minimo per il funzionamento di ``XeLaTeX``.
105 .. _it_sphinx-pre-install:
107 Verificare le dipendenze Sphinx
108 -------------------------------
110 Esiste uno script che permette di verificare automaticamente le dipendenze di
111 Sphinx. Se lo script riesce a riconoscere la vostra distribuzione, allora
112 sarà in grado di darvi dei suggerimenti su come procedere per completare
113 l'installazione::
115         $ ./scripts/sphinx-pre-install
116         Checking if the needed tools for Fedora release 26 (Twenty Six) are available
117         Warning: better to also install "texlive-luatex85".
118         You should run:
120                 sudo dnf install -y texlive-luatex85
121                 /usr/bin/virtualenv sphinx_1.4
122                 . sphinx_1.4/bin/activate
123                 pip install -r Documentation/sphinx/requirements.txt
125         Can't build as 1 mandatory dependency is missing at ./scripts/sphinx-pre-install line 468.
127 L'impostazione predefinita prevede il controllo dei requisiti per la generazione
128 di documenti html e PDF, includendo anche il supporto per le immagini, le
129 espressioni matematiche e LaTeX; inoltre, presume che venga utilizzato un
130 ambiente virtuale per Python. I requisiti per generare i documenti html
131 sono considerati obbligatori, gli altri sono opzionali.
133 Questo script ha i seguenti parametri:
135 ``--no-pdf``
136         Disabilita i controlli per la generazione di PDF;
138 ``--no-virtualenv``
139         Utilizza l'ambiente predefinito dal sistema operativo invece che
140         l'ambiente virtuale per Python;
143 Generazione della documentazione Sphinx
144 =======================================
146 Per generare la documentazione in formato HTML o PDF si eseguono i rispettivi
147 comandi ``make htmldocs`` o ``make pdfdocs``. Esistono anche altri formati
148 in cui è possibile generare la documentazione; per maggiori informazioni
149 potere eseguire il comando ``make help``.
150 La documentazione così generata sarà disponibile nella sottocartella
151 ``Documentation/output``.
153 Ovviamente, per generare la documentazione, Sphinx (``sphinx-build``)
154 dev'essere installato. Se disponibile, il tema *Read the Docs* per Sphinx
155 verrà utilizzato per ottenere una documentazione HTML più gradevole.
156 Per la documentazione in formato PDF, invece, avrete bisogno di ``XeLaTeX`
157 e di ``convert(1)`` disponibile in ImageMagick (https://www.imagemagick.org).
158 Tipicamente, tutti questi pacchetti sono disponibili e pacchettizzati nelle
159 distribuzioni Linux.
161 Per poter passare ulteriori opzioni a Sphinx potete utilizzare la variabile
162 make ``SPHINXOPTS``. Per esempio, se volete che Sphinx sia più verboso durante
163 la generazione potete usare il seguente comando ``make SPHINXOPTS=-v htmldocs``.
165 Potete eliminare la documentazione generata tramite il comando
166 ``make cleandocs``.
168 Scrivere la documentazione
169 ==========================
171 Aggiungere nuova documentazione è semplice:
173 1. aggiungete un file ``.rst`` nella sottocartella ``Documentation``
174 2. aggiungete un riferimento ad esso nell'indice (`TOC tree`_) in
175    ``Documentation/index.rst``.
177 .. _TOC tree: http://www.sphinx-doc.org/en/stable/markup/toctree.html
179 Questo, di solito, è sufficiente per la documentazione più semplice (come
180 quella che state leggendo ora), ma per una documentazione più elaborata è
181 consigliato creare una sottocartella dedicata (o, quando possibile, utilizzarne
182 una già esistente). Per esempio, il sottosistema grafico è documentato nella
183 sottocartella ``Documentation/gpu``; questa documentazione è divisa in
184 diversi file ``.rst`` ed un indice ``index.rst`` (con un ``toctree``
185 dedicato) a cui si fa riferimento nell'indice principale.
187 Consultate la documentazione di `Sphinx`_ e `reStructuredText`_ per maggiori
188 informazione circa le loro potenzialità. In particolare, il
189 `manuale introduttivo a reStructuredText`_ di Sphinx è un buon punto da
190 cui cominciare. Esistono, inoltre, anche alcuni
191 `costruttori specifici per Sphinx`_.
193 .. _`manuale introduttivo a reStructuredText`: http://www.sphinx-doc.org/en/stable/rest.html
194 .. _`costruttori specifici per Sphinx`: http://www.sphinx-doc.org/en/stable/markup/index.html
196 Guide linea per la documentazione del kernel
197 --------------------------------------------
199 In questa sezione troverete alcune linee guida specifiche per la documentazione
200 del kernel:
202 * Non esagerate con i costrutti di reStructuredText. Mantenete la
203   documentazione semplice. La maggior parte della documentazione dovrebbe
204   essere testo semplice con una strutturazione minima che permetta la
205   conversione in diversi formati.
207 * Mantenete la strutturazione il più fedele possibile all'originale quando
208   convertite un documento in formato reStructuredText.
210 * Aggiornate i contenuti quando convertite della documentazione, non limitatevi
211   solo alla formattazione.
213 * Mantenete la decorazione dei livelli di intestazione come segue:
215   1. ``=`` con una linea superiore per il titolo del documento::
217        ======
218        Titolo
219        ======
221   2. ``=`` per i capitoli::
223        Capitoli
224        ========
226   3. ``-`` per le sezioni::
228        Sezioni
229        -------
231   4. ``~`` per le sottosezioni::
233        Sottosezioni
234        ~~~~~~~~~~~~
236   Sebbene RST non forzi alcun ordine specifico (*Piuttosto che imporre
237   un numero ed un ordine fisso di decorazioni, l'ordine utilizzato sarà
238   quello incontrato*), avere uniformità dei livelli principali rende più
239   semplice la lettura dei documenti.
241 * Per inserire blocchi di testo con caratteri a dimensione fissa (codici di
242   esempio, casi d'uso, eccetera): utilizzate ``::`` quando non è necessario
243   evidenziare la sintassi, specialmente per piccoli frammenti; invece,
244   utilizzate ``.. code-block:: <language>`` per blocchi di più lunghi che
245   potranno beneficiare dell'avere la sintassi evidenziata.
248 Il dominio C
249 ------------
251 Il **Dominio Sphinx C** (denominato c) è adatto alla documentazione delle API C.
252 Per esempio, un prototipo di una funzione:
254 .. code-block:: rst
256     .. c:function:: int ioctl( int fd, int request )
258 Il dominio C per kernel-doc ha delle funzionalità aggiuntive. Per esempio,
259 potete assegnare un nuovo nome di riferimento ad una funzione con un nome
260 molto comune come ``open`` o ``ioctl``:
262 .. code-block:: rst
264      .. c:function:: int ioctl( int fd, int request )
265         :name: VIDIOC_LOG_STATUS
267 Il nome della funzione (per esempio ioctl) rimane nel testo ma il nome del suo
268 riferimento cambia da ``ioctl`` a ``VIDIOC_LOG_STATUS``. Anche la voce
269 nell'indice cambia in ``VIDIOC_LOG_STATUS`` e si potrà quindi fare riferimento
270 a questa funzione scrivendo:
272 .. code-block:: rst
274      :c:func:`VIDIOC_LOG_STATUS`
277 Tabelle a liste
278 ---------------
280 Raccomandiamo l'uso delle tabelle in formato lista (*list table*). Le tabelle
281 in formato lista sono liste di liste. In confronto all'ASCII-art potrebbero
282 non apparire di facile lettura nei file in formato testo. Il loro vantaggio è
283 che sono facili da creare o modificare e che la differenza di una modifica è
284 molto più significativa perché limitata alle modifiche del contenuto.
286 La ``flat-table`` è anch'essa una lista di liste simile alle ``list-table``
287 ma con delle funzionalità aggiuntive:
289 * column-span: col ruolo ``cspan`` una cella può essere estesa attraverso
290   colonne successive
292 * raw-span: col ruolo ``rspan`` una cella può essere estesa attraverso
293   righe successive
295 * auto-span: la cella più a destra viene estesa verso destra per compensare
296   la mancanza di celle. Con l'opzione ``:fill-cells:`` questo comportamento
297   può essere cambiato da *auto-span* ad *auto-fill*, il quale inserisce
298   automaticamente celle (vuote) invece che estendere l'ultima.
300 opzioni:
302 * ``:header-rows:``   [int] conta le righe di intestazione
303 * ``:stub-columns:``  [int] conta le colonne di stub
304 * ``:widths:``        [[int] [int] ... ] larghezza delle colonne
305 * ``:fill-cells:``    invece di estendere automaticamente una cella su quelle
306   mancanti, ne crea di vuote.
308 ruoli:
310 * ``:cspan:`` [int] colonne successive (*morecols*)
311 * ``:rspan:`` [int] righe successive (*morerows*)
313 L'esempio successivo mostra come usare questo marcatore. Il primo livello della
314 nostra lista di liste è la *riga*. In una *riga* è possibile inserire solamente
315 la lista di celle che compongono la *riga* stessa. Fanno eccezione i *commenti*
316 ( ``..`` ) ed i *collegamenti* (per esempio, un riferimento a
317 ``:ref:`last row <last row>``` / :ref:`last row <it last row>`)
319 .. code-block:: rst
321    .. flat-table:: table title
322       :widths: 2 1 1 3
324       * - head col 1
325         - head col 2
326         - head col 3
327         - head col 4
329       * - column 1
330         - field 1.1
331         - field 1.2 with autospan
333       * - column 2
334         - field 2.1
335         - :rspan:`1` :cspan:`1` field 2.2 - 3.3
337       * .. _`it last row`:
339         - column 3
341 Che verrà rappresentata nel seguente modo:
343    .. flat-table:: table title
344       :widths: 2 1 1 3
346       * - head col 1
347         - head col 2
348         - head col 3
349         - head col 4
351       * - column 1
352         - field 1.1
353         - field 1.2 with autospan
355       * - column 2
356         - field 2.1
357         - :rspan:`1` :cspan:`1` field 2.2 - 3.3
359       * .. _`it last row`:
361         - column 3
363 .. _it_sphinx_kfigure:
365 Figure ed immagini
366 ==================
368 Se volete aggiungere un'immagine, utilizzate le direttive ``kernel-figure``
369 e ``kernel-image``. Per esempio, per inserire una figura di un'immagine in
370 formato SVG::
372     .. kernel-figure::  ../../../doc-guide/svg_image.svg
373        :alt:    una semplice immagine SVG
375        Una semplice immagine SVG
377 .. _it_svg_image_example:
379 .. kernel-figure::  ../../../doc-guide/svg_image.svg
380    :alt:    una semplice immagine SVG
382    Una semplice immagine SVG
384 Le direttive del kernel per figure ed immagini supportano il formato **DOT**,
385 per maggiori informazioni
387 * DOT: http://graphviz.org/pdf/dotguide.pdf
388 * Graphviz: http://www.graphviz.org/content/dot-language
390 Un piccolo esempio (:ref:`it_hello_dot_file`)::
392   .. kernel-figure::  ../../../doc-guide/hello.dot
393      :alt:    ciao mondo
395      Esempio DOT
397 .. _it_hello_dot_file:
399 .. kernel-figure::  ../../../doc-guide/hello.dot
400    :alt:    ciao mondo
402    Esempio DOT
404 Tramite la direttiva ``kernel-render`` è possibile aggiungere codice specifico;
405 ad esempio nel formato **DOT** di Graphviz.::
407   .. kernel-render:: DOT
408      :alt: foobar digraph
409      :caption: Codice **DOT** (Graphviz) integrato
411      digraph foo {
412       "bar" -> "baz";
413      }
415 La rappresentazione dipenderà dei programmi installati. Se avete Graphviz
416 installato, vedrete un'immagine vettoriale. In caso contrario, il codice grezzo
417 verrà rappresentato come *blocco testuale* (:ref:`it_hello_dot_render`).
419 .. _it_hello_dot_render:
421 .. kernel-render:: DOT
422    :alt: foobar digraph
423    :caption: Codice **DOT** (Graphviz) integrato
425    digraph foo {
426       "bar" -> "baz";
427    }
429 La direttiva *render* ha tutte le opzioni della direttiva *figure*, con
430 l'aggiunta dell'opzione ``caption``. Se ``caption`` ha un valore allora
431 un nodo *figure* viene aggiunto. Altrimenti verrà aggiunto un nodo *image*.
432 L'opzione ``caption`` è necessaria in caso si vogliano aggiungere dei
433 riferimenti (:ref:`it_hello_svg_render`).
435 Per la scrittura di codice **SVG**::
437   .. kernel-render:: SVG
438      :caption: Integrare codice **SVG**
439      :alt: so-nw-arrow
441      <?xml version="1.0" encoding="UTF-8"?>
442      <svg xmlns="http://www.w3.org/2000/svg" version="1.1" ...>
443         ...
444      </svg>
446 .. _it_hello_svg_render:
448 .. kernel-render:: SVG
449    :caption: Integrare codice **SVG**
450    :alt: so-nw-arrow
452    <?xml version="1.0" encoding="UTF-8"?>
453    <svg xmlns="http://www.w3.org/2000/svg"
454      version="1.1" baseProfile="full" width="70px" height="40px" viewBox="0 0 700 400">
455    <line x1="180" y1="370" x2="500" y2="50" stroke="black" stroke-width="15px"/>
456    <polygon points="585 0 525 25 585 50" transform="rotate(135 525 25)"/>
457    </svg>