2010-11-23 7 views
10

Ich verwende Sphinx, um einen Web-Service zu dokumentieren. Ich würde gerne eine formatierte JSON-Web-Antwort mit der Code-Block-Direktive zeigen, die Spinx über Pygments macht, aber JSON hat keinen Syntax-Highlighter in den Segmenten. Welche Sprache schlägst du stattdessen vor? HTML? JavaScript?Welche Sphinx Code-Block-Sprache für JSON verwenden

.. code-block:: javascript 

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

Antwort

4

JSON ist JavaScript, schlicht und einfach. JSON steht tatsächlich für "JavaScript Object Notation".

+0

Ja, wusste das. Ich frage mich, ob andere den Javascript-Textmarker für JSON-Markup auch in Sphinx verwendet haben oder ob es eine andere empfohlene Sprache gab. – JayhawksFan93

+0

Gabriel sagt, dass die JSON-Syntax eine strikte Teilmenge der JavaScript-Syntax ist, so dass jeder geeignete Syntax-Highlighter für JavaScript auch mit JSON umgehen kann. –

+0

Danke Joe, und nur um das OP zu verdeutlichen: Der JavaScript-Highlighter ist der richtige zu verwenden, es gibt keinen JSON-spezifischen Highlighter (weil JSON * ist * JavaScript), und es gibt keine bessere Option in Sphinx für die Hervorhebung von JSON. –

5

Ich war nicht glücklich mit Pygmente Javascript für die Analyse von JSON. Ja, JSON kann vom JavaScript-Lexer analysiert werden, aber JavaScript-Highlighting ist nicht sehr nützlich, wenn es auf einen JSON-Wert angewendet wird. Normalerweise erhältst du einen riesigen Klumpen undifferenzierten Text.

Da ich keine gute Lösung finden konnte, habe ich eine JSON lexer for pygments erstellt. Ich benutze es jetzt, um JSON in sphinx erstellten PDF-Dokumenten hervorzuheben. Es ist nicht perfekt, aber die Ergebnisse sind viel nützlicher als mit dem Javascript-Lexer. Ich hoffe, es hilft.

+0

JSON lexer für pygments ist jetzt in Pyggents> = 1.5, aber es scheint auch etwas Sphinx-Unterstützung zu geben, speziell müssen Sie eine Sphinx-Erweiterung hinzufügen, die add_lexer aufruft (http://sphinx-doc.org/ext) /appapi.html#sphinx.application.Sphinx.add_lexer) für json (obwohl dies für die neueste Version von Sphinx möglicherweise nicht notwendig ist). –

3

Sogar mit Sphinx 1.2b1 und Segments 1.6, musste ich add_lexer aufrufen, um .. code-block:: json zu bekommen, irgendetwas zu machen. Ich beendete das folgende Codefragment in eine Erweiterung nach oben setzen (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()) 

Meine docs/conf.py für Sphinx hat die folgende, um die Erweiterung zu aktivieren:

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

Ich verwende Sphinx 1.4.2 die enthält einen Pygmente-Lexer namens "json". Dies ist standardmäßig out-of-the-box verfügbar. Zu verwenden:

.. code-block:: json 

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

Tatsächlich ist es ab der Version 1.5 von Pomgents verfügbar. [Quelle] (http://pygmente.org/docs/lexers/#pygmente.lexers.data.JsonLexer) – tomasbedrich