问题描述
我使用Sphinx制作了一个包含代码示例的网站.我成功使用.. code-block
指令获取语法突出显示.但是我无法使用以下代码突出显示内联语法:
I use Sphinx to make a website that contains code samples.I'm successful using the .. code-block
directive to get syntax highlighting.But I can't get inline syntax highlighting using this code:
.. role:: bash(code)
:language: bash
Test inline: :bash:`export FOO="bar"`.
.. code-block:: bash
export FOO="bar"
产生此输出,即内联代码在块代码为时未突出显示:
which produces this output i.e. inline code not highlighted while block code is:
对我来说,问题是为内联代码生成的HTML包含长类名,而对于代码块则没有.这是输出HTML(为便于阅读而缩进):
Problem to me is that the generated HTML for inline code contains long class names while it does not for code blocks.Here is the output HTML (indented for readability):
<p>Test inline:
<tt class="code bash docutils literal">
<span class="name builtin">
<span class="pre">export</span>
</span>
<span class="name variable">
<span class="pre">FOO</span>
</span>
<span class="operator">
<span class="pre">=</span>
</span>
<span class="literal string double">
<span class="pre">"bar"</span>
</span>
</tt>.
</p>
<p>Test code-block:</p>
<div class="highlight-bash">
<div class="highlight">
<pre>
<span class="nb">export </span>
<span class="nv">FOO</span>
<span class="o">=</span>
<span class="s2">"bar"</span>
</pre>
</div>
</div>
任何帮助将不胜感激.
推荐答案
好,我使用了这种解决方法:我生成了一个包含短名称和长名称的css文件.我仍然对好"答案感兴趣.
OK I used this workaround: I generate a css file that contains both short and long names.I'm still interested in the "good" answer.
#!/usr/bin/env python
"""Generate a css file thanks to pygments that will contain both short
and long class names."""
import subprocess
import sys
PYGMENTIZE = 'pygmentize'
def parse_command_line():
import argparse
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('-s', '--style', default='colorful')
parser.add_argument('-p', '--prefix', default='.highlight')
return parser.parse_args()
def pygmentize(style, prefix='.highlight'):
cmd = '{0} -f html -S {1} -a {2}'.format(PYGMENTIZE, style, prefix)
# This will fail if pygmentize does not exist.
try:
p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE)
except OSError:
print >> sys.stderr, '{0}: command not found'.format(PYGMENTIZE)
exit(1)
out, err = p.communicate()
if p.returncode != 0:
exit(p.returncode)
return out
def main():
args = parse_command_line()
style = args.style
prefix = args.prefix
# Print new css header.
header = """\
/*
* This is pygment css style {0} generated with
* {1}
*/""".format(style, ' '.join(sys.argv))
print header
# Parse pygmentize output.
# Find long names based on comments.
content = pygmentize(style, prefix)
s = content.splitlines()
out = ''
for line in s:
start = line.find("/* ") + 3
end = line.find(" */")
# if line has a comment
if start != 2:
comment = line[start:end]
name = '.' + comment.lower()
arg = line[line.find('{ '): start - 4]
out += '%(prefix)s %(name)s %(arg)s\n' % vars()
print content
print out
if __name__ == '__main__':
main()
这篇关于Sphinx内联代码突出显示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!