2010-03-18 6 views
8

In einigen Sphinx docs Ich schreibe, ich bin auch Code-Beispiele aus einer Nebendatei wie folgt:Gibt es in Sphinx/Pygments eine Möglichkeit, eine oder mehrere Codezeilen in literalen Includes hervorzuheben?

.. literalinclude:: mymodule.py 
    :pyobject: MyClass 
    :linenos: 

Diese besondere doc ist ein Tutorial, in dem die Klassen Schritt für Schritt aufzubauen sind. Ich möchte die gesamte Klasse oder eine einzelne Methode einbeziehen und nur die für diesen Abschnitt interessanten Zeilen hervorheben. Auf diese Weise bleibt der Kontext erhalten, aber die interessanten Teile sind auf einen Blick ersichtlich. Im Moment habe ich mich nur auf Zeilennummern im Text bezogen, was in Ordnung ist, aber alles andere als ideal.

Betrachtet man die Dokumente und den Code für Sphinx und Segmente, finde ich keinen offensichtlichen Weg, dies zu tun. Ich bin nicht dagegen, sie zu flicken oder etwas Schwieriges in conf.py zu tun, aber ich fragte mich, ob jemand das gelöst hatte.

+0

„Auf diese Weise der Kontext erhalten bleibt, aber die interessanten Teile sind offensichtlich auf einen Blick“ Ich würde nicht zustimmen diese Behauptung, ich. Ich bin mir nicht sicher, was Sie tun, ist wirklich eine Menge Mühe wert. Vielleicht könnten Sie andere Präsentationen mit ': lines:' versuchen, um einzelne Zeilen aus der Datei auszuwählen. –

+0

Das mache ich sicher. Aber es gibt Fälle, in denen es nicht ausreicht. Insbesondere, wenn Sie versuchen, auf bereits im Tutorial erstellten Dingen aufzubauen. Ein neues Konzept erfordert möglicherweise das Hinzufügen neuer Zeilen zu einem zuvor erstellten Klassenkonstruktor. Ich möchte den Konstruktor in seiner Gesamtheit für den Kontext zeigen, aber die hinzugefügten Zeilen wie ein Diff hervorheben. Der Leser wäre mit dem bestehenden Code bereits vertraut und muss daher nicht erklärt werden, aber der Kontext, in dem die neuen Zeilen hinzugefügt werden, ist wichtig für das Verständnis des Gesamtbildes. –

+0

Dies wäre sehr nützlich. – codeape

Antwort

2

Sie könnten LiteralInclude Richtlinie der Sphinx in sphinx/Richtlinien/code.py

  • Patch Es würden Sie etwas tun müssen, so dass, wenn Sie Code enthalten Sie eine Start-/Endlinie angeben können in diesem Snippet zu betonen .
  • Der zweite Schritt würde erfordern einige Möglichkeiten, um die Dinge anders hervorzuheben. Der einfachste Ansatz ist, dass der Teil ohne Betonung nicht hervorgehoben wird und der Teil mit Betonung hervorgehoben wird. Das würde vermeiden, komplexere Hacking der Stile und Hervorhebungen zu machen.

Dies gibt zum Beispiel eine neue Linien-Emphasis-Option in der literalinclude-Direktive, die Sie auf diese Weise verwenden können:

.. literalinclude:: ../sphinx/directives/code.py 
    :pyobject: Highlight 
    :lines-emphasis: 6,13 

wo Line-Schwerpunkt ist es, eine Startlinie, Endlinie in Bezug auf den enthaltenen Code , erste Zeile ist 1.

Sphinx 0.6.5 bei pypi.python.org/pypi/Sphinx/0.6.5 als Basis ein quicky gepatchten code.py besteht: http://paste.pocoo.org/show/194456/

beachten, dass die folgenden wäre gleich wertigen:

den Standard-Sphinx Mit Hilfe von (ziemlich viel, was S.Lott vorgeschlagen):

.. literalinclude:: ../sphinx/directives/code.py 
    :language: none 
    :lines: 0-36 
.. literalinclude:: ../sphinx/directives/code.py 
    :lines: 36-46 
.. literalinclude:: ../sphinx/directives/code.py 
    :language: none 
    :lines: 37- 

... und mit der gepatchten Sphinx:

.. literalinclude:: ../sphinx/directives/code.py 
    :lines-emphasis: 37,47 

Daher kann es nicht genau das, was du suchst nach. Der Patch erstellt einen neuen Knoten für jeden markierten oder nicht markierten Abschnitt des Codes. Jeder von diesen wird von Sphinx als separater < div> und < pre> Abschnitt gerendert. Um darüber hinaus zu gehen, möchten Sie vielleicht ein Stylesheet erstellen, das die Zeilen mit Betonung besser herauszieht. Weitere Hacks müssen möglicherweise tief in die Eingeweide von Sphinx und Pygments eindringen, um einen nahtlos hervorgehobenen Stil direkt dort erzeugen zu lassen: nicht trivial.

/HTH

5

Sphinx hat jetzt eine emphasize-lines Richtlinie für wörtliche beinhaltet:

http://sphinx-doc.org/markup/code.html#includes

+1

Nur als Referenz, diese Arbeit an '.. Code-Block ::' Direktiven. Ich weiß, dass das nicht die Frage ist, aber falls jemand anderes danach sucht. – brianmearns

Verwandte Themen