rouge 语法突出显示是为了突出显示 R 中的非基本函数吗?

Is rouge syntax highlighting meant to highlight non-base functions in R?

我正在尝试理解 rouge 语法高亮器,特别是用它来高亮显示 R 代码。最终它是针对使用 jekyll 构建的网站,但我已经能够将我的问题隔离到 rouge(例如,我在示例代码上使用 rougify 来生成可检查的 HTML) .

我的问题是我的大部分代码都给出了 class = "n",我认为它代表 "name" 并且无法与任意变量区分开来。我认为大多数 CSS 的语法荧光笔都不会影响 class "n" 的代码。这是从 library(ggseas):

生成的示例
<span class="n">library</span><span class="p">(</span><span class="n">ggseas</span><span class="p">)</span><span class="w">

根据我对 rouge 源代码中关于 this pull request, rouge highlighting of R only worked at all from early June. Looking at what I'm pretty sure is the key bit of code 的讨论的理解,我 认为 仅在变量 [=18= 中起作用] 将被突出显示。换句话说,通过不突出显示所有非原始函数 rouge 可以正常工作,它只是对 R 语法的理解非常有限。

我的问题是,我理解的对吗?

我需要突出显示 library()ggplot() 之类的东西,即使它们不是 R 基本包中的原始函数。如果我理解正确,我要么必须破解 rouge 的源代码以包含更多功能或尝试转移到其他地方。

我使用 rouge 进行 R 语法高亮已经有一段时间了,所以我可以确认它在 rouge 中的工作时间比这个月还长,而且它的效果非常好体面的工作(个人意见)。

我有一个使用 jekyll 生成的 GitHub pages 网站,不久前我经历了同样的过程,切换到 rouge 作为荧光笔。但它现在适用于 R 代码。下面是我的网站的示例屏幕截图(我添加了一些额外的代码来使这个 post 受益)。

library(ggseas)library("ggseas") 页面上的代码(我通常这样写)如您所建议:

<span class="n">library</span><span class="p">(</span><span class="n">ggseas</span><span class="p">)</span> 
<span class="n">library</span><span class="p">(</span><span class="s2">"ggseas"</span><span class="p">)</span>

如你所见,PRIMITIVE_FUNCTIONS的特殊高亮指的是我们在for循环中看到的单词forin的高亮。

但是,对于 ggplot()ggsea,这与流行的 IDE Studio 中突出显示的工作方式相同。只有 library()(以及其他一些函数,如 require())未包含在 PRIMITIVE_FUNCTIONS 的列表中,因此不会像它们应该的那样突出显示:

所以,我很好奇您的代码在您无法使用 rouge 之前是什么样子的。 如果您只需要修复 library()require()(可能还有其他一些)的突出显示,那么您应该能够像您推测的那样将它们添加到 PRIMITIVE_FUNCTIONS 的列表中。但是如果你想对所有非基础函数进行特殊高亮显示,那么它会变得更加复杂。

如果有帮助,我已经 post 为我的 jekyl 生成的站点编辑了 _config.yml 文件的最后一部分。

# Build settings
destination: _site
paginate: 10
permalink: /:year/:title/
markdown: kramdown #redcarpet
highlighter: rouge

#redcarpet:
#  extensions: ["no_intra_emphasis", "fenced_code_blocks", "autolink", "tables", "strikethrough", "superscript", "with_toc_data"]
#redcarpet:
#  extensions: ["no_intra_emphasis", "fenced_code_blocks", "autolink", "tables", "with_toc_data"]

kramdown:
  # use Github Flavored Markdown
  input: GFM
  auto_ids: true
  syntax_highlighter: rouge
  # do not replace newlines by <br>s
  hard_wrap: false

gems: ['jekyll-paginate']
exclude: ['README.md', 'Gemfile', 'Gemfile.lock', 'screenshot.png']

我还注意到它没有对圆括号和大括号进行颜色编码,这是可取的。