胭脂语法高亮是否意味着突出显示R中的非基本功能?

时间:2016-06-16 20:33:06

标签: r jekyll syntax-highlighting rouge

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

我的问题是我的大多数代码都被赋予了class =" n",我认为这代表" name"并且与任意变量无法区分。语法高亮显示的大多数CSS我认为留下类#34; n"不变。以下是library(ggseas)

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

根据我对this pull request的讨论的理解,rouge突出显示R仅在6月初才起作用。看看我非常确定rouge源代码中的key bit of code,我认为只有变量PRIMITIVE_FUNCTIONS中的函数才会突出显示。换句话说,通过使所有非原始函数不被突出rouge正常工作,它只具有非常有限的R语法感。

我的问题是,我明白了吗?

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

1 个答案:

答案 0 :(得分:1)

我一直在使用rouge进行R语法高亮显示,所以我可以确认它在rouge中工作的时间超过了本月的时间,并且它确实做得相当不错(个人意见)。

我使用jekyll生成了一个GitHub pages网站,我刚刚经历了与荧光笔切换到rouge相同的过程。但它现在对R代码运行良好。下面是我的网站的示例屏幕截图(我添加了一些额外的代码以使这篇文章受益)。

R code on a GitHub pages site using rouge

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一样。

但是,这与突出显示在流行的IDE Studio中与ggplot()ggsea相关的方式相同。只有library()(以及require()等其他一些功能)未包含在PRIMITIVE_FUNCTIONS列表中,因此请勿突出显示:

R code in the RStudio IDE

所以,我很好奇你的代码之前看起来是什么样的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']

我也注意到它没有为括号和括号设置颜色代码,这是可取的。