3

我试图理解rouge语法高亮,特别是用它来高亮 R 代码。最终它是为一个网站构建的,jekyll但我已经能够将我的问题隔离出来rouge(例如,我使用rougify示例代码来生成可检查的 HTML)。

我的问题是我的大部分代码都被赋予了class =“n”,我认为它代表“name”并且无法与任意变量区分开来。我认为大多数用于语法荧光笔的 CSS 都保留了“n”类的代码。以下是从 生成的示例library(ggseas)

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

根据我对这个 pull request的讨论的理解,rougeR 的突出显示仅在 6 月初才起作用。看看我很确定源代码中的关键部分rouge,我认为只有变量PRIMITIVE_FUNCTIONS中的函数会被突出显示。换句话说,通过不突出显示所有非原始函数rouge正在正常工作,它只是对 R 语法的理解非常有限。

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

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

4

1 回答 1

1

我使用rougefor R 语法高亮已经有一段时间了,所以我可以确认它的工作rouge时间超过了这个月,而且它做得相当不错(个人意见)。

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

使用 rouge 的 GitHub 页面站点上的 R 代码

页面上的代码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 循环中看到的单词forand的突出显示in

但是,这与在流行的 IDE Studio 中突出显示ggplot()ggsea. 只有library()(以及其他一些函数,如require())不包含在 的列表中PRIMITIVE_FUNCTIONS,因此不要像应有的那样突出显示:

RStudio IDE 中的 R 代码

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

如果有帮助,我已经为我生成的网站发布了我的_config.yml文件的最后一部分。jekyl

# 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']

我也刚刚注意到它不会对括号和大括号进行颜色编码,这是可取的。

于 2016-06-24T17:50:41.233 回答