2016-06-16 35 views
3

我想了解rouge語法突出顯示器,特別是用它突出顯示R代碼。最終它是用jekyll構建的網站,但我已經能夠將我的問題隔離到rouge(例如,我使用樣本代碼上的rougify來生成可檢查的HTML)。胭脂語法突出顯示旨在突出顯示R中的非基函數?

我的問題是,我的大部分代碼都是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"> 

從我瞭解的討論上this pull requestrouge高亮的R只能從六月初曾在所有。看看我很確定的key bit of coderouge的源,我認爲只在變量PRIMITIVE_FUNCTIONS功能將突出顯示。換句話說,通過讓所有非原始函數保持不變,rouge正在運行,它只是非常有限的R語法意義。

我的問題是,我理解了嗎?

我需要的東西像library()ggplot(),即使他們不在R的基本包基本功能。如果我理解正確的事情加以強調,我將不得不破解的rouge源,以包括更多功能或嘗試轉移到別的東西。

+0

您是否嘗試使用[Pygments](http://pygments.org/)熒光筆? –

+0

我一直使用顏料,但隨着網站的發展,它在Jekyll-ruby-Python工具鏈中越來越搖擺不定。然後,Jekyll用計算機更換升級到3.x似乎完全殺死了它。基本上,從分界線移動是什麼提示這個問題。 –

+0

這不是直接找到你想要的,但是你可以嘗試修改vim的[Nvim-R]插件(https://github.com/jalvesaq/Nvim-R)中使用的方法,因爲它會更新R環境中加載的軟件包列表以突出顯示庫函數。也許你可以對R進行一次性調用,以填充這樣的函數列表,然後將其注入到CSS中。 – Philip

回答

1

我一直在使用rouge的R語法高亮了一小會兒,這樣我就可以確認它在rouge工作了不僅僅是這個月長一些,並且它確實一個相當體面的工作(個人觀點)。

我有一個GitHub pages網站生成使用jekyll和我經歷了相同的過程切換到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'] 

我也只注意到它不確實的顏色代碼括號和大括號,這是可取的。