sphinx.rst 16 KB

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