2010-11-23 14 views
10

Estoy usando Sphinx para documentar un servicio web. Me gustaría mostrar una respuesta web JSON formateada utilizando la directiva code-block, que Spinx hace a través de Pygments, pero JSON no tiene un resaltador de sintaxis en Pygments. ¿Qué idioma sugieres que especifique? HTML? JavaScript?¿Qué lenguaje de bloque de código Sphinx usar para JSON

.. code-block:: javascript 

    { 
     "name": "roger", 
     "score": 100 
    } 

Respuesta

4

JSON es JavaScript, simple y llano. JSON en realidad significa "JavaScript Object Notation".

+0

Sí, lo sabía. Solo me preguntaba si otros usaron el resaltador Pygins de JavaScript para el marcado JSON en Sphinx o si había otro lenguaje recomendado. – JayhawksFan93

+0

Gabriel dice que la sintaxis de JSON es un subconjunto estricto de la sintaxis de JavaScript, por lo que cualquier resaltador de sintaxis adecuado para JavaScript también manejará JSON. –

+0

Gracias Joe, y solo para aclararle al OP: el marcador de JavaScript es el correcto para usar, no hay resaltador específico de JSON (porque JSON * es * JavaScript), y no hay mejor opción en Sphinx para resaltar JSON. –

5

No me gustó el uso de pygments javascript para analizar JSON. Sí, JSON puede ser analizado por javascript lexer, pero el resaltado de JavaScript no es muy útil cuando se aplica a un valor JSON. Por lo general, obtienes una gran cantidad de texto indiferenciado.

Como no pude encontrar una buena solución, creé un JSON lexer for pygments. Lo estoy usando ahora para resaltar JSON en el documento PDF creado por sphinx. No es perfecto, pero los resultados son mucho más útiles que con javascript lexer. Espero que ayude.

+0

JSON lexer para pygments ahora está en Pygments> = 1.5, pero parece que también es necesario un poco de soporte de Sphinx, específicamente debe agregar una extensión de Sphinx que llame a add_lexer (http://sphinx-doc.org/ext /appapi.html#sphinx.application.Sphinx.add_lexer) para json (aunque esto puede no ser necesario para la última versión de Sphinx). –

3

Incluso con Sphinx 1.2b1 y Pygments 1.6, necesitaba llamar a add_lexer para obtener .. code-block:: json para hacer cualquier cosa. Terminé poniendo el siguiente fragmento de código en una extensión (docs/_ext/jsonlexer.py):

def setup(app): 
    # enable Pygments json lexer 
    try: 
     import pygments 
     if pygments.__version__ >= '1.5': 
      # use JSON lexer included in recent versions of Pygments 
      from pygments.lexers import JsonLexer 
     else: 
      # use JSON lexer from pygments-json if installed 
      from pygson.json_lexer import JSONLexer as JsonLexer 
    except ImportError: 
     pass # not fatal if we have old (or no) Pygments and no pygments-json 
    else: 
     app.add_lexer('json', JsonLexer()) 

Mi docs/conf.py para Esfinge tiene el siguiente para habilitar la extensión:

import os 
import sys 

sys.path.insert(0, os.path.abspath('_ext')) 

# Add any Sphinx extension module names here, as strings. They can be 
# extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom 
# ones. 
extensions = ['jsonlexer'] 
6

estoy usando Sphinx 1.4.2 cuales incluye un lexer de Pygments llamado "json". Esto está disponible de fábrica por defecto. Para usar:

.. code-block:: json 

    { 
     "key": "value", 
     "key2": "value2", 
     ... 
    } 
+0

De hecho, está disponible a partir de Pygments versión 1.5. [Fuente] (http://pygments.org/docs/lexers/#pygments.lexers.data.JsonLexer) – tomasbedrich

Cuestiones relacionadas