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