Python 中的 Github Flavored Markdown

3

有没有一种方法可以在Python 2.7中解析文本文件,以输出Github Flavored Markdown(GFM)的样式?

这个网站和其他地方有很多示例提供pygments / jinja2语法突出显示指南,例如:

{% highlight 'python' %}
def testing(x):
    print x
{% endhighlight %}

但我希望使用类似编写此问题并将其传递给jinja2过滤器以应用样式的markdown格式化整篇文章。如果我能预先确定代码块的位置并将它们与文本文件的其余部分分开处理,那么上面的片段只会起作用。

我发现谷歌维护的代码(https://github.com/google/py-gfm)在这里是正确的轨迹,但我只有这些扩展可用:

In [10]: gfm.
gfm.AutolinkExtension       gfm.SpacedLinkExtension     gfm.hidden_hilite
gfm.AutomailExtension       gfm.StrikethroughExtension  gfm.semi_sane_lists
gfm.HiddenHiliteExtension   gfm.autolink                gfm.spaced_link
gfm.SemiSaneListExtension   gfm.automail                gfm.strikethrough

我不清楚如何解析我的字符串/文本文件以输出所需内容。

现在,我将我的帖子传递给一个名为markdown的过滤器:{{ post.body|markdown() }} 其中markdown被定义为:

def markdown(code):
    from pygments import highlight
    from pygments.lexers import PythonLexer
    from pygments.formatters import HtmlFormatter

    return highlight(code, PythonLexer(), HtmlFormatter())

这是我现在的情况 - 但是这会将整个帖子视为代码块,并根据Python的语法规则进行突出显示。是否已经有可用的方法或编写一个过滤器github_markdown(),以采用类似于此帖子的原始帖子正文,并按照我想要的方式添加样式和链接?
谢谢您的帮助。
堆栈:Ubuntu 14.04,Python 2.7,Pygments 2.02,Flask 0.10.1,Jinja2,MongoDB 3.0.6
2个回答

0

python-markdown 库支持可插拔扩展。有标准扩展和许多由第三方制作的自定义扩展。https://github.com/google/py-gfm 实现了 Github Flavored Markdown。将此扩展添加到 Python Markdown 非常简单。


你能指导我如何实现这个吗? - Jared
当然。首先告诉我你使用的工具集/环境是什么。这是纯Python吗?还是你正在使用Mkdocs或类似的文档包呢?或者其他什么? - Chris Johnson
纯Python。我在我的数据库中存储了一篇帖子,并希望对其应用此Markdown函数(带有正确的扩展)。然后,我将将风格化的帖子和原始帖子存储在数据库中以便将来进行编辑。 - Jared
我相信我只需要将gfm传递给markdown.markdown(some_text, extensions=[MyExtension(), 'path.to.my.ext', 'markdown.extensions.footnotes'])。Google仓库已安装,但如果我运行markdown.markdown('Testing', extensions=[gfm]),则会出现错误Extension "__builtin__.module" must be of type: "markdown.Extension" - Jared
关于使用模板来突出显示代码块,请参见此处。如果您想更好地了解为什么不应该尝试使用模板来完成这种事情,请参见此处 - Waylan
显示剩余2条评论

0
考虑到这似乎是一个很麻烦的问题,我决定结合mistunepygments来实现我想要的效果:https://github.com/asottile/markdown-code-blocks 使用方法非常简单:
pip install markdown-code-blocks

该库提供了一个单一的函数

markdown_code_blocks.highlight(markdown_s)

您可以使用典型的 Pygments 主题来为输出设置样式


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接