Verwenden ReStructuredText für ziemlich Quellcode-Listing
-
12-10-2019 - |
Frage
Wie gestellt und beantwortet in diesen Beitrag , kann man benutzen Syntax ziemlich Codeliste.
Mit ReStructuredText kann ich roh Richtlinie wie folgt verwenden.
.. raw:: html
<script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js"></script>
<script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js"></script>
<link type="text/css" rel="stylesheet" href="http://alexgorbatchev.com/pub/sh/current/styles/shCoreDefault.css"/>
<script type="text/javascript">SyntaxHighlighter.all();</script>
I could use `SyntaxHighlighter <http://alexgorbatchev.com/SyntaxHighlighter/>`_ for highlighting source code.
.. raw:: html
<pre class="brush: js;">
function helloSyntaxHighlighter()
{
return "hi!";
}
</pre>
Ich brauche aber Code-Richtlinie haben, dass ich verwenden können.
.. code::
function helloSyntaxHighlighter()
{
return "hi!";
}
Wie kann ich Code-Richtlinie in den folgenden HTML-Code übersetzen?
<pre class="brush: js;">
function helloSyntaxHighlighter()
{
return "hi!";
}
</pre>
Lösung
Es gibt eine Weise, die ich verwendet habe:
-
Installieren
rst2pdf
undpygments
. -
Dann eine Kopie
rst2html
machen, nennt esmyrst2html
oder was auch immer Sie wollen. -
In der Kopie, fügen Sie diese nach den Importen:
from docutils.parsers.rst import directives import rst2pdf.pygments_code_block_directive directives.register_directive('code-block', rst2pdf.pygments_code_block_directive.code_block_directive)
Und das ist es, Sie jetzt die Code-Block-Richtlinien haben.
Andere Tipps
Ich konnte es funktioniert wie folgt:
-
Zur Erzeugung
<pre>..</pre>
, ich brauchte ParsedLiteral zu modifizieren, so dass ich die ParsedLiteral Klasse in-Code kopiert wie folgt. die Linie 5self.options['class'] = ['brush: js;'] # <--
zu ändern, ist die Grundidee.Klasse-Code (Richtlinie):
option_spec = {'class': directives.class_option} has_content = True def run(self): self.options['class'] = ['brush: js;'] # <-- set_classes(self.options) self.assert_has_content() text = '\n'.join(self.content) text_nodes, messages = self.state.inline_text(text, self.lineno) node = nodes.literal_block(text, '', *text_nodes, **self.options) node.line = self.content_offset + 1 return [node] + messages
-
Fügen Sie eine Zeile in init .py wie folgt.
_directive_registry = { 'Code' ( 'Körper', 'Code'),
Nun können Sie den folgenden Code verwenden
.. code::
print "Hello world!" # *tricky* code
Um diesen HTML-Code zu erhalten
<pre class="brush: js; literal-block">
print "Hello world!" # <em>tricky</em> code
</pre>
Mögliche einfache Lösung?
Ich kann ParsedLiteral verwenden, wenn ich einen Weg finden, die Parameter zu übergeben ‚Bruch: js;‘. Allerdings, wenn ich versuche, den Code
.. parsed-literal::
:class: "brunch: js;"
print "Hello world!" # *tricky* code
Der Tag wird <pre class="brunch ja">
.