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