Python 中的 Github 风格的 Markdown

Posted

技术标签:

【中文标题】Python 中的 Github 风格的 Markdown【英文标题】:Github Flavored Markdown in Python 【发布时间】:2015-12-02 04:58:15 【问题描述】:

有没有办法在 python 2.7 中解析文本文件以输出 Github Flavored Markdown (GFM) 的样式?

在这个网站和其他地方有很多示例提供 pygments/jinja2 语法高亮指南,如下所示:

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

但我想使用类似于编写此问题的降价来格式化我的整个帖子,然后将其传递给 jinja2 过滤器以应用样式。只有当我可以预先确定代码块的位置并将它们与文本文件的其余部分分开处理时,上面的 sn-p 才会起作用。

我找到了由 Google (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

【问题讨论】:

【参考方案1】:

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

【讨论】:

你能指导我如何实现这个吗? 当然。首先告诉我您正在使用什么工具集/环境。这是直接的 Python 吗?或者您正在使用 Mkdocs 或类似的 doco 包;还是? 普通蟒蛇。我在我的数据库中存储了一个帖子,并希望将这个降价函数(具有正确的扩展名)应用到它。然后我会将风格化的帖子和原始帖子存储在数据库中以供将来编辑。 我相信我只需要将 gfm 传递给markdown.markdown(some_text, extensions=[MyExtension(), 'path.to.my.ext', 'markdown.extensions.footnotes'])。 google repo 已安装,但如果我运行markdown.markdown('Testing', extensions=[gfm]),则会收到错误Extension "__builtin__.module" must be of type: "markdown.Extension" py-gfm 包带有多个不同的扩展,它们都打包在一起。你需要指定你想要的部分。如果你想要一切,试试这个:markdown.markdown(some_text, extensions=['mdx_gfm']).【参考方案2】:

考虑到这似乎是多么痛苦,我决定将 mistune 和 pygments 结合起来给我想要的东西:https://github.com/asottile/markdown-code-blocks

用法很简单:

pip install markdown-code-blocks

该库提供单一功能

markdown_code_blocks.highlight(markdown_s)

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

【讨论】:

以上是关于Python 中的 Github 风格的 Markdown的主要内容,如果未能解决你的问题,请参考以下文章

Cloudflare从非主域重定向到Github页面

小工具:使用Python自动生成MD风格链接

bootstrap中语义化标签字体风格文本布局列表排列特殊字体颜色及特殊背景颜色

如何从地理服务器中的图层获取样式

Python中的SQL风格内连接?

分析一套源代码的代码规范和风格并讨论如何改进优化代码