La documentación de Symfony2 utiliza reStructuredText como lenguaje de marcado y Sphinx para generarla (en HTML, PDF, ...).
reStructuredText «es un sistema analizador y sintaxis de marcado de texto, fácil de leer, lo que ves es lo que obtienes».
Puedes aprender más acerca de su sintaxis leyendo los documentos existentes de Symfony2 o leyendo el Primer reStructuredText en el sitio web de Sphinx.
Si estás familiarizado con Markdown, ten cuidado que las cosas a veces se ven muy similares, pero son diferentes:
Sphinx es un sistema generador que añade algunas herramientas agradables para crear la documentación a partir de documentos reStructuredText. Como tal, agrega nuevas directivas e interpreta texto en distintos roles al marcado reST estándar.
Todo el código de los ejemplos de manera predeterminada utiliza PHP como lenguaje a resaltar. Puedes cambiarlo con la directiva code-block:
.. code-block:: yaml
{ foo: bar, bar: { foo: bar, bar: baz } }
Si el código PHP comienza con <?php, entonces necesitas usar html+php como pseudolenguaje a resaltar:
.. code-block:: html+php
<?php echo $this->foobar(); ?>
Nota
Una lista de lenguajes apoyados está disponible en el sitio web de Pygments.
Cada vez que muestres una configuración, debes utilizar la directiva configuration-block para mostrar la configuración en todos los formatos de configuración compatibles (YAML, XML y PHP)
.. configuration-block::
.. code-block:: yaml
# Configuración en YAML
.. code-block:: xml
<!-- Configuración en XML //-->
.. code-block:: php
// Configuración en PHP
El fragmento reST anterior se dibuja de la siguiente manera:
# Configuración en YAML
<!-- Configuración en XML //-->
// Configuración en PHP
La lista de formatos apoyados actualmente es la siguiente:
Formato de marcado | Muestra |
---|---|
html | HTML |
xml | XML |
php | PHP |
yaml | YAML |
jinja | Twig |
html+jinja | Twig |
html+php | PHP |
ini | INI |
php-annotations | Anotaciones |
Para añadir enlaces a otras páginas en los documentos utiliza la siguiente sintaxis:
:doc:`/ruta/a/pagina`
Usando la ruta y nombrearchivo de la página sin extensión, por ejemplo:
:doc:`/book/controller`
:doc:`/components/event_dispatcher/introduction`
:doc:`/cookbook/configuration/environments`
El texto del enlace será el encabezado principal del documento enlazado. También puedes especificar texto alternativo para el enlace:
:doc:`Cola de impresión de correo electrónico </cookbook/email/spool>`
También puedes añadir enlaces a la documentación de la API:
:namespace:`Symfony\\Component\\BrowserKit`
:class:`Symfony\\Component\\Routing\\Matcher\\ApacheUrlMatcher`
:method:`Symfony\\Component\\HttpKernel\\Bundle\\Bundle::build`
y a la documentación de PHP:
:phpclass:`SimpleXMLElement`
:phpmethod:`DateTime::createFromFormat`
:phpfunction:`iterator_to_array`
Para probar la documentación antes de enviarla:
# ...
sys.path.append(os.path.abspath('_exts'))
# añadiendo PhpLexer
from sphinx.highlighting import lexers
from pygments.lexers.web import PhpLexer
# ...
# añade la extensión a la lista de extensiones
extensions = [..., 'sensio.sphinx.refinclude',
'sensio.sphinx.configurationblock',
'sensio.sphinx.phpcode']
# habilita el resaltado para el código PHP que no esté
# entre ``<?php ... ?>`` por omisión
lexers['php'] = PhpLexer(startinline=True)
lexers['php-annotations'] = PhpLexer(startinline=True)
# usa PHP como el dominio primario
primary_domain = 'php'
# fija la url para los enlaces de la API
api_url = 'http://api.symfony.com/master/%s'