2016-06-16 5 views
3

J'essaie de comprendre le surligneur de syntaxe rouge et en particulier l'utiliser pour mettre en évidence le code R. En fin de compte, c'est pour un site Web construit avec jekyll, mais j'ai été en mesure d'isoler mes problèmes à seulement rouge (par exemple, j'utilise rougify sur l'exemple de code pour produire du code inspectable). Mon problème est que la plupart de mon code est donné class = "n", ce qui signifie, je pense, "nom" et ne se distingue pas des variables arbitraires. La plupart des CSS pour les surligneurs de syntaxe laisse le code de la classe "n" intact. Voici un exemple de ce qui est généré à partir library(ggseas):Est-ce que la mise en évidence de la syntaxe rouge a pour but de mettre en évidence les fonctions hors base dans R?

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

D'après ce que je comprends de la discussion sur this pull request, rouge mise en évidence de R ne fonctionnait tout du début Juin. En regardant ce que je suis assez sûr est le key bit of code dans la source pour rouge, je pense que seules les fonctions dans la variable PRIMITIVE_FUNCTIONS vont être mis en évidence. En d'autres termes, en laissant toutes les fonctions non primitives en surbrillance rouge fonctionne comme il se doit, il a juste un sens très limité de la syntaxe R.

Ma question est, ai-je bien compris?

je besoin de choses comme library() et ggplot() à mettre en avant, même si elles ne sont pas des fonctions primitives dans le package de base de R. Si je comprends bien les choses, je vais devoir soit pirater la source de rouge pour inclure plus de fonctions ou essayez de passer à autre chose.

+0

Avez-vous essayé d'utiliser le surligneur [Pygments] (http://pygments.org/)? –

+0

J'avais toujours des pigments, mais la chaîne d'outils Jekyll-ruby-Python devenait de plus en plus branlante à mesure que le site augmentait. Ensuite, la mise à jour de Jekyll à 3.x avec un changement d'ordinateur semble l'avoir complètement détruite. Fondamentalement, le déplacement de pygments est ce qui soulève la question. –

+0

Ce n'est pas directement ce que vous cherchez, mais vous pouvez essayer d'adapter l'approche utilisée dans le plugin [Nvim-R] (https://github.com/jalvesaq/Nvim-R) pour vim, car elle met à jour le liste des paquets chargés de l'environnement R pour mettre en évidence les fonctions de la bibliothèque. Peut-être que vous pourriez faire un appel unique à R juste pour remplir une telle liste de fonctions et ensuite l'injecter dans votre CSS. – Philip

Répondre

1

J'utilise rouge pour la syntaxe de R mettant en lumière un peu de temps, donc je peux confirmer qu'il a travaillé dans rouge plus longtemps que ce mois-ci et aussi qu'il fait un travail assez décent (d'opinion personnelle).

J'ai un site GitHub pages généré en utilisant jekyll et je suis passé par le même processus de passage à rouge comme le surligneur il ya un peu de temps. Mais cela fonctionne bien maintenant pour le code R. Voici un exemple de capture d'écran de mon site (avec un code supplémentaire que j'ai ajouté pour bénéficier de ce post).

R code on a GitHub pages site using rouge

Le code sur la page pour library(ggseas) et library("ggseas") (la façon dont je l'habitude d'écrire il) est comme vous le suggérez:

<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> 

Comme vous pouvez le voir, la mise en évidence particulière de PRIMITIVE_FUNCTIONS se réfère à la mise en évidence comme on le voit dans la boucle for pour les mots for et in.

Cependant, ceci est la même manière que la mise en évidence fonctionne dans le populaire IDE Studio en ce qui concerne ggplot() et ggsea. Seulement library() (et aussi d'autres fonctions comme require()) ne sont pas inclus dans la liste des PRIMITIVE_FUNCTIONS, et donc ne sont pas mis en évidence comme ils le devraient:

R code in the RStudio IDE

Alors, je suis curieux de savoir ce que votre code ressemblait avant cela, vous ne pouvez pas obtenir avec rouge. Si vous avez seulement besoin de corriger la surbrillance pour library() et require() (et probablement quelques autres), alors vous devriez pouvoir les ajouter à la liste de PRIMITIVE_FUNCTIONS comme vous l'avez supposé. Mais si vous voulez une surbrillance spéciale pour toutes les fonctions autres que celles de base, cela devient plus compliqué.

Si cela vous aide, j'ai posté la dernière partie de mon fichier _config.yml pour mon site généré 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'] 

Je viens aussi remarqué qu'il ne code pas de couleur entre parenthèses et accolades, ce qui est souhaitable.