标签: pygments

使用BeautifulSoup解析文档而不解析<code>标记的内容

我正在和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解析器更适合这份工作?

html python django beautifulsoup pygments

10
推荐指数
1
解决办法
1528
查看次数

Jekyll Pygments Processing

我一直在和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)

highlighting pygments jekyll

9
推荐指数
2
解决办法
1450
查看次数

关于如何为Pygments编写词法分析器的大量文档?

我有一个Stata关键词和Stata语法的合理知识.我想花几个小时把它变成一个Stata lexer for Pygments.

但是,我找不到关于词法分析器语法的足够文档,并发现自己无法开始编写词法分析器.有人能指出为Pygments编写新词法分析器的好教程吗?

我知道Pygments API词法分析器开发页面,但老实说,对于像我这样对Python知识非常有限的人来说,这些还不够.

到目前为止,我的策略是寻找例子.我发现了很多,例如Puppet,Sass,Scala,Ada.他们帮助的只是那么多.任何有关如何从我的Stata关键字开始的帮助都将受到欢迎.

python pygments stata

9
推荐指数
1
解决办法
1644
查看次数

如何让Jekyll不要在突出显示中添加空格?

我正在试验杰基尔.大多数东西看起来很好,但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不要在这些标签之间放置空格?

pygments liquid jekyll

9
推荐指数
1
解决办法
1169
查看次数

如何在 sphinx 项目中包含 pygments 样式?

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)

pygments python-sphinx

9
推荐指数
1
解决办法
2168
查看次数

在Sphinx/Pygments中是否有一种方法可以强调文字包含中的一行或多行代码?

在我写的一些sphinx文档中,我包含来自辅助文件的代码示例,如下所示:

.. literalinclude:: mymodule.py
   :pyobject: MyClass
   :linenos:
Run Code Online (Sandbox Code Playgroud)

这个特定的文档是一个教程,其中的类是逐步构建的.我想要做的是包括整个班级或单一方法,并只强调该部分感兴趣的行.这样就保留了上下文,但有趣的部分一目了然.现在我只是提到文本中的行号,这是好的,但远非理想.

看看sphinx和pygments的文档和代码,我找不到一个明显的方法来做到这一点.我并不反对修补它们或做一些棘手的事情conf.py,但我想知道是否有人解决了这个问题.

python documentation-generation pygments python-sphinx

8
推荐指数
2
解决办法
2108
查看次数

如何使用Jekyll和Pygments获取内嵌代码?

我正在使用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'>&quot;amet&quot;</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 %})似乎也不起作用.人.

css syntax-highlighting pygments jekyll

8
推荐指数
2
解决办法
3480
查看次数

Python Markdown - 不添加 codehilite

我正在使用 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)

python markdown codehighlighter pygments

8
推荐指数
2
解决办法
4522
查看次数

简单的CSV词法分析器

我想按列列出带有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)

python regex csv pygments

8
推荐指数
1
解决办法
442
查看次数

Sphinx 文档和悬停文本

是否可以使用sphinx为出现在代码片段中的单词设置悬停框,类似于angular.js 登录页面中代码示例中的悬停框的外观和行为?

html user-interface pygments python-sphinx

7
推荐指数
2
解决办法
1192
查看次数