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>
War es hilfreich?

Lösung

Es gibt eine Weise, die ich verwendet habe:

  • Installieren rst2pdf und pygments.

  • Dann eine Kopie rst2html machen, nennt es myrst2html 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:

  1. Zur Erzeugung <pre>..</pre>, ich brauchte ParsedLiteral zu modifizieren, so dass ich die ParsedLiteral Klasse in-Code kopiert wie folgt. die Linie 5 self.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
    
  2. 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 &quot;Hello world!&quot;  # <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">.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top