【问题标题】:Disable syntax guessing in kramdown在 kramdown 中禁用语法猜测
【发布时间】:2016-05-03 18:38:03
【问题描述】:

我们的博客有很多代码示例。因为我们目前使用的是 github 页面,所以 markdown 使用 kramdown+rouge 渲染。

这让我想到了我的问题:是否可以使用 Kramdown 启用特定于语法的突出显示?

问题在于 kramdown 似乎错误地认为几乎所有以 { 开头的代码都是 JSON 代码块。当包含的代码不是 JSON 时,这通常会导致我们的帖子中突出显示“JSON 错误”。

我是否可以禁用此语法“猜测”,或者我是否坚持将 text 语言标志添加到错误突出显示的代码块,或者更糟糕的是 {:.language-text} 用于错误突出显示的代码跨度。

希望有一种简单的方法可以禁用此功能。

【问题讨论】:

    标签: markdown syntax-highlighting kramdown


    【解决方案1】:

    Kramdown 有几个options

    coderay_default_lang

    设置高亮代码块的默认语言

    如果没有为代码块设置语言,则使用默认语言。如果不应使用默认语言,则该值必须是 coderay 或 nil 支持的语言之一。

    您可以将其设置为 nil 并且没有默认值,或者将其设置为 text 以使其成为默认值。

    syntax_highlighter

    设置语法高亮

    指定应该用于突出显示代码块和跨度的语法突出显示。如果此选项设置为nil,则不进行语法高亮。

    可以使用syntax_highlighter_opts 配置选项设置语法高亮选项。

    默认:coderay

    syntax_highlighter 设置为nil,完全没有语法高亮。

    或者您可以将其设置为rouge 并通过syntax_highlighter_opts 配置选项传递Rouge 支持的任何选项。例如,Rouge 的default_lang 设置可能满足您的需求。

    您可以通过命令行设置选项:

    kramdown --coderay_default_lang=text
    

    或在您的 Ruby 代码中:

    Kramdown::Document.new(source_text, {coderay_default_lang: "text"})
    

    或在文档本身中:

    {::options coderay_default_lang="text" /}
    

    可能有一种方法可以将这些选项从您正在使用的博客引擎传递给 Kramdown,但没有任何迹象表明您正在使用什么,我只能说检查它的文档。

    【讨论】:

    • 设置默认语言是否可以防止 kramdown 错误地判断为 JSON?例如,这个内联代码 span {key: value} 被渲染为无效的 JSON。
    • 不幸的是,似乎没有专门用于启用/禁用“猜测”的选项。所以你所能做的就是用不同的设置运行一些测试。我只是在本地检查过,但我没有安装任何用于语法高亮的相关 ruby​​ 库。尝试从命令行运行这个命令,看看你得到了什么:echo " {key: value}" | kramdown --coderay_default_lang=text 并将输出与不同的选项进行比较。
    • 这也是我得出的结论。我们可能会一起禁用跨度突出显示。必须对 span 代码元素使用内联属性列表 ({:.language-text}) 会消除 Markdown 的大部分简单性。
    • 我一直认为跨度突出显示是一个坏主意(很少有足够的上下文来正确猜测,并且定义语言可能会占用比跨度长度更多的字符,并对可读性产生不利影响) .事实上,大多数支持代码高亮的 Markdown 实现只提供对代码块的支持。如果 Kramdown 允许您单独禁用跨度突出显示,我绝对会这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    相关资源
    最近更新 更多