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