Подсветка синтаксиса ружья предназначена для выделения неосновных функций в R?

Я пытаюсь понять rouge подсветка синтаксиса и, в частности, использование его для выделения кода R. В конечном итоге это для веб-сайта, созданного с jekyll но я смог изолировать свои проблемы просто rouge (например, я использую rougify на примере кода для создания проверяемого HTML).

Моя проблема в том, что большая часть моего кода задана class = "n", что, я думаю, означает "имя" и не отличается от произвольных переменных. Я думаю, что большинство 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">

Из того, что я понимаю из обсуждения по этому запросу, rouge выделение R сработало только с начала июня. Глядя на то, что я уверен, это ключевой бит кода в исходном коде для rougeЯ думаю, что только функции в переменной PRIMITIVE_FUNCTIONS будут выделены. Другими словами, оставляя все не примитивные функции без внимания rouge работает как надо, просто у него очень ограниченный смысл синтаксиса R.

У меня вопрос, правильно ли я понял?

Мне нужны такие вещи как library() а также ggplot() быть выделенным, даже если они не являются примитивными функциями в базовом пакете R. Если я все правильно понял, мне придется либо взломать источник rouge включить больше функций или попытаться перейти к чему-то другому.

1 ответ

Решение

Я использую rouge для подсветки синтаксиса R на некоторое время, так что я могу подтвердить, что он работал в rouge дольше, чем в этом месяце, а также, что он делает довольно приличную работу (личное мнение).

У меня есть сайт GitHub страниц, созданный с помощью jekyll и я прошел тот же процесс переключения на rouge в качестве маркера некоторое время назад. Но сейчас это работает хорошо для кода R. Ниже приведен пример скриншота моего сайта (с дополнительным кодом, который я добавил для этой статьи).

R-код на сайте GitHub страниц с использованием 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 для слов for а также in,

Тем не менее, это то же самое, что подсветка работает в популярной IDE Studio в отношении ggplot() а также ggsea, Только library() (а также некоторые другие функции, такие как require()) не включены в список PRIMITIVE_FUNCTIONSи так не выделяются как следует:

R-код в 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']

Я также только что заметил, что это не цветовой код скобки и скобок, что желательно.

Другие вопросы по тегам