根据this post的要求和回答,可以使用SyntaxHighlighter进行漂亮的代码列表。
使用ReStructuredText,我可以使用raw指令,如下所示。
.. 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>
但是,我需要有可以使用的代码指令。
.. code::
function helloSyntaxHighlighter()
{
return "hi!";
}
如何将代码指令转换为以下HTML代码?
<pre class="brush: js;">
function helloSyntaxHighlighter()
{
return "hi!";
}
</pre>
答案 0 :(得分:3)
我使用过一种方法:
安装rst2pdf
和pygments
。
然后复制rst2html
,将其称为myrst2html
或任何您想要的内容。
在副本中,在导入后添加:
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)
就是这样,你现在有了代码块指令。
答案 1 :(得分:0)
我可以按照以下方式工作:
要生成<pre>..</pre>
,我需要修改ParsedLiteral,因此我将ParsedLiteral类复制到Code中,如下所示。更改第5行self.options['class'] = ['brush: js;'] # <--
是主要想法。
类代码(指令):
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
在 init .py中添加一行,如下所示。
_directive_registry = { 'code':('body','Code'),
现在,您可以使用以下代码
.. code::
print "Hello world!" # *tricky* code
获取此HTML代码
<pre class="brush: js; literal-block">
print "Hello world!" # <em>tricky</em> code
</pre>
如果我找到传递'bruch:js;'参数的方法,我可以使用ParsedLiteral。但是,当我尝试代码时
.. parsed-literal::
:class: "brunch: js;"
print "Hello world!" # *tricky* code
标记变为<pre class="brunch ja">
。