【问题标题】:Only Format <code> Tags w/ pygments仅使用 pygments 格式化 <code> 标签
【发布时间】:2014-08-04 12:40:53
【问题描述】:

我正在尝试使用 Pygments/Markdown 使用户能够在我正在使用 Flask 进行的项目中留下格式化的代码块。我遇到的问题是 Pygments 正在格式化所有内容。

我想在文本上调用 Markdown,以便将 &lt;code&gt; 标签添加到文本中,然后让 Pygments 仅格式化 &lt;code&gt; 标签中的文本。这是我尝试过的。

@app.route('/')
def show_entries():
    entries = get_all_entries()
    lexer = PythonLexer()
    lexer.add_filter('codetagify')
    formatter = HtmlFormatter()
    for entry in entries:
        entry['text'] = markdown.markdown(entry['text'])
        entry['text'] = highlight(entry['text'], lexer, formatter)
    return render_template('list_entries.html', entries=entries)

entries 是字典列表,entry['text'] 是帖子的正文。在这种配置中发生的事情是 Pygments 显示所有格式化的 html,而不是允许浏览器呈现它。我认为添加 codetagify 过滤器会阻止这种形式的发生。关于我需要做些什么来实现这一目标的任何想法?

【问题讨论】:

    标签: python flask markdown pygments


    【解决方案1】:

    我自己找到了答案。我只需要 Pygments,因为 Markdown 使用它本身来为代码着色。我只需要在我的markdown.markdown() 通话中添加一个扩展名即可。

    @app.route('/')
    def show_entries():
        entries = get_all_entries()
        for entry in entries:
            entry['text'] = markdown.markdown(entry['text'], extensions=['codehilite'])
        return render_template('list_entries.html', entries=entries)
    

    extensions=['codehilite'] 参数就足够了。

    【讨论】:

      【解决方案2】:

      我认为 codetagify 不会像你想的那样做。见http://pygments.org/docs/filters/

      我不知道。也许您必须自己分离出要格式化的文本部分,然后仅将这些部分传递给荧光笔。我认为当他们说“过滤器”时,他们只是指以某种方式转换文本的东西。如果 Pygments 只格式化代码标签之间的文本部分,那就太好了。也许有办法做到这一点,但我在浏览文档的章节标题时没有看到它。

      【讨论】:

      • 是和不是。 pygments 过滤器为您提供令牌流,因此您可以编写自己的过滤器来忽略所有令牌,直到找到 ,然后从该点渲染所有令牌,直到找到
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 2013-12-28
      • 2015-07-11
      相关资源
      最近更新 更多