我正在和Django一起写博客应用程序.我想让评论编写者使用一些标签(比如<strong>,a等等)但禁用所有其他标签.
另外,我想让他们把代码放在<code>标签中,并让pygments解析它们.
例如,有人可能会写这个评论:
I like this article, but the third code example <em>could have been simpler</em>:
<code lang="c">
#include <stdbool.h>
#include <stdio.h>
int main()
{
printf("Hello World\n");
}
</code>
Run Code Online (Sandbox Code Playgroud)
问题是,当我使用BeautifulSoup解析注释以去除不允许的HTML标记时,它还会解析<code>块的内部,并将<stdbool.h>和<stdio.h>视为HTML标记.
我怎么能告诉BeautifulSoup不要解析<code>块?也许还有其他HTML解析器更适合这份工作?
我一直在和Jekyll和Pygments争吵一段时间.我安装了pygments并生成了css文件,但是当我运行Jekyll来生成网站时,代码突出显示似乎没有正确生成.
这是我用于处理的一些示例代码
{% highlight php lineos %}
/**
* Passing by reference
*
* Outputs
*
* 10 - before add() call
* 10 - after add() call
* 15 - after addref() call
*/
$a = 10;
echo $a;
add($a);
echo $a;
addref($a);
echo $a;
function addref(&$a)
{
$a += 5;
}
function add($a)
{
$a += 5;
}
{% endhighlight %}
Run Code Online (Sandbox Code Playgroud)
这是Jekyll建立我的网站后的样子.
<div class="highlight"><pre><code class="php"><span class="x">/**</span>
<span class="x"> * Passing by reference</span>
<span class="x"> *</span>
<span class="x"> * …Run Code Online (Sandbox Code Playgroud) 我正在试验杰基尔.大多数东西看起来很好,但Jekyll处理代码突出显示的方式似乎有些错误.
我使用pygments.
然后Jekyll似乎使用如下部分:
{% highlight python %}
#!/usr/bin/env python
def wer(r, h):
"""
{% endhighlight %}
Run Code Online (Sandbox Code Playgroud)
生成像这样的代码
<div class="highlight">
<pre>
<code class="python"><span class="c">#!/usr/bin/env python</span>
<span class="k">def</span> <span class="nf">wer</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">h</span><span class="p">):</span>
<span class="sd">"""</span>
<span class="sd"> Calculation of WER with Levenshtein distance.</span>
<span class="sd"> Works only for iterables up to 254 elements (uint8).</span>
<span class="sd"> O(nm) time ans space complexity.</span>
[...]
<span class="n">doctest</span><span class="o">.</span><span class="n">testmod</span><span class="p">()</span>
</code>
</pre>
</div>
Run Code Online (Sandbox Code Playgroud)
看起来像


问题是code和之间的空白pre:

我如何告诉Jekyll不要在这些标签之间放置空格?
Sphinx 可以定义主题以及要使用的 pygments 样式。
但是,我不能 - 为 Sphinx 项目找到一种好方法来定义供 pygments 使用的自定义样式(配色方案)。
从文档:
要使样式可用于 Pygments,您必须
- 要么将其注册为插件(请参阅插件文档)
- 或将其放入 Pygments 发行版的样式子包中,每个样式一个样式类,其中文件名是样式名称,类名称是 StylenameClass。
据我所知,第一个选项是我所追求的,因为应该可以动态扩展 pygments。虽然通过检查链接我不确定这将如何完成(没有关于如何使用插件系统的示例)。第二个示例涉及将文件复制到 pygments 中,这不切实际,特别是因为用户可能无法写入路径。
我确实设法以一种风格破解,尽管这不是一个很好的解决方案:
包括完整性
# Sphinx "conf.py"
# Master toctree document
master_doc = 'contents'
# BEGIN MONKEY-PATCH
from pygments.style import Style
from pygments.token import Text, Other, Comment, Whitespace
class MyFancyStyle(Style):
background_color = "#1e1e27"
default_style = ""
styles = {
Text: "#cfbfad",
Other: "#cfbfad",
Whitespace: "#434357",
Comment: "#cd8b00",
Comment.Preproc: "#409090",
Comment.PreprocFile: "bg:#404040 #ffcd8b",
Comment.Special: "#808bed", …Run Code Online (Sandbox Code Playgroud) 在我写的一些sphinx文档中,我包含来自辅助文件的代码示例,如下所示:
.. literalinclude:: mymodule.py
:pyobject: MyClass
:linenos:
Run Code Online (Sandbox Code Playgroud)
这个特定的文档是一个教程,其中的类是逐步构建的.我想要做的是包括整个班级或单一方法,并只强调该部分感兴趣的行.这样就保留了上下文,但有趣的部分一目了然.现在我只是提到文本中的行号,这是好的,但远非理想.
看看sphinx和pygments的文档和代码,我找不到一个明显的方法来做到这一点.我并不反对修补它们或做一些棘手的事情conf.py,但我想知道是否有人解决了这个问题.
我正在使用Markdown with Liquid标签为Jekyll生成的网站标记一些代码,并希望包含一些内联(在段落中)并具有彩色语法(使用Pygments)的代码,但它不会似乎工作.
标记
Lorem ipsum dolor {% highlight javascript %} var sit = "amet"; {% endhighlight %} consectetur adipiscing elit.
Run Code Online (Sandbox Code Playgroud)
结果是
<p>Lorem ipsum dolor <div class='highlight'><pre><code class='javascript'> <span class='kd'>var</span> <span class='nx'>sit</span> <span class='o'>=</span> <span class='s2'>"amet"</span><span class='p'>;</span></code></pre></div> consectetur adipiscing elit.</p>
Run Code Online (Sandbox Code Playgroud)
我非常希望突出显示的文字不被包装<div class='highlight'>,或者至少它是一个<span class='highlight'>.
{% highlight javascript nowrap %}如其他地方所建议的,使用不起作用.(也许这是我的设置问题 - 这是Ruby 2.0,Jekyll 0.12.1,pygments.rb 0.3.7?)
我想在GitHub上托管这个页面,这意味着我不能依赖插件.糟糕,对吗?
附录:行编号(即{% highlight javascript linenos %})似乎也不起作用.人.
我正在使用 Flask 写博客,我正在使用 Markdown 的 Python 库为我生成 HTML,我愿意进行语法高亮显示,因此我正在使用 markdown.markdown(string, extensions=['codehilite']
根据他们的wiki,它应该添加一个 html 类;
<div class="codehilite"><pre><code># Code goes here ...</code></pre></div>
Run Code Online (Sandbox Code Playgroud)
但根据我的口译员的尝试,它似乎不起作用;
In [9]: markdown.version
Out[9]: '2.3.1'
In [10]: text = """:::python
....: import os
....: print "This is a text!"
....: """
In [11]: html = markdown.markdown(text, extensions=['codehilite'])
In [12]: html
Out[12]: u'<p>:::python\nimport os\nprint "This is a text!"</p>'
In [13]: # Even more funnier, when following the examples in the usage section "..['codehilite(linenums=True)']
In [14]: html = markdown.markdown(text, extensions=['codehilite(linenums=True)']) …Run Code Online (Sandbox Code Playgroud) 我想按列列出带有pygments的CSV文件,如下所示:

看到同一列用相同的颜色着色.
目前pygments不包括CSV解析器,因为CSV被认为是模糊的格式.所以我试着自己写一个最小的.这是我试过的:
tokens = {
'root': [
(r'^[^,\n]+', Name.Function), # first column
(',', Comment), # separator
(r'[^,\n]+', Name.Decorator), # second column
(',', Comment), # separator
(r'[^,\n]+', Name.Constant), # third column
(',', Comment), # separator
],
}
Run Code Online (Sandbox Code Playgroud)
但它没有为任何列着色,但首先:

据我所知,pygments的工作原理是尝试逐个匹配正则表达式:当前正则表达式不匹配时 - 它会转到下一个,然后再重复一次.如果没有匹配则发出错误并前进一个字符(并将其放在红色框中).对于像嵌套注释这样的高级情况,有些状态,但我认为对于CSV,一个状态可能就足够了.
然后我尝试了:
tokens = {
'root': [
(',', Comment), # separator
(r'^[^,\n]+', Name.Function), # first column
(r'(?:^[^,\n]+)[^,\n]+', Name.Decorator), # second column
],
}
Run Code Online (Sandbox Code Playgroud)
但它将所有列作为第二列着色:

这是一个示例数据:
account_id,parent_account_id,name,status
,A001,English,active
A001,,Humanities,active
A003,A001,,active
A004,A002,Spanish,
Run Code Online (Sandbox Code Playgroud)
在Emacs中,我设法得到了我想要的东西:
(add-hook 'csv-mode-hook
(lambda ()
"colors first 8 …Run Code Online (Sandbox Code Playgroud) 是否可以使用sphinx为出现在代码片段中的单词设置悬停框,类似于angular.js 登录页面中代码示例中的悬停框的外观和行为?