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