Coloration Code

Basé sur le moteur Geshi, ce plu­gin per­met de colo­ri­ser du code source pour dif­fé­rents lan­ga­ges (dont HTML, PHP, SPIP...).

Présentation

Dans vos articles, il suf­fit de met­tre le code entre les balises <code class="lan­gage">...</code> ou avec un cadre <cadre class="lan­gage">...</cadre>.

Ce qui per­met d’obte­nir ce genre de pré­sen­ta­tion avec <cadre class='html5'>

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>Plugins SPIP</title>
    <script src="prive/javascript/jquery.js" type="text/javascript"></script>
    <script src="prive/javascript/jquery.form.js" type="text/javascript"></script>
    <script src="prive/javascript/ajaxCallback.js" type="text/javascript"></script>
    <!-- insert_head -->
    <link rel='stylesheet' href="prive/spip_style.css" type="text/css" />
    <link rel='stylesheet' href='http://plugins.spip.net/prive/spip_admin.css' type='text/css' />
</head>
Classes des langages les plus courants
spip
javascript
php
html4s­trict ou html5
css
xml

Voir les langages supportés :
https://git.spip.net/spip-contrib-extensions/coloration_code/src/branch/master/geshi/geshi

Lien de téléchargement

Par défaut le code n’est pas proposé avec un lien de téléchargement sauf si on modifie la constante PLUGIN_COLORATION_CODE_TELECHARGE.

Dans ce cas, si le code colorisé fait plus d’une ligne, il est mis en cache sous forme tex­tuelle et pro­posé au télé­char­ge­ment par un lien Télécharger placé sous le bloc colorisé .

Si la constante est activé, on peut désactivé ponctuellement le téléchargement en rajou­tant la classe « sans_tele­char­ge­ment »

<code class="php sans_tele­char­ge­ment">.

Le filtre |coloration_code_color

Vous pou­vez aussi uti­li­ser le fil­tre |coloration_code_color dans un sque­lette avec : #TEXTE**|coloration_code_color{spip, code}
Le filtre colorise #TEXTE avec le lan­guage « spip » et en for­mat « code » ; par exem­ple avec un squelette nommé lecode.html, l’url d’appel depuis un arti­cle serait :

<a href="#URL_SITE_SPIP/spip.php?page=lecode&id_article=#ENV{id_article}" title="voir le code de article" class="spip_in">Voir le code de l'article</a>

Constantes

Le plugin est livré avec une série de constantes que vous pouvez refinir à votre guise dans mes_options.php

Voici les valeurs par défaut

// pour interdire globalement et optionnellement le téléchargement associé
define('PLUGIN_COLORATION_CODE_TELECHARGE', true);

// pour utiliser des styles inline (ou des classes css)
 define('PLUGIN_COLORATION_CODE_STYLES_INLINE', true); // false mettra des class et une css associe

// pour mettre des classes css MAIS ne mettre aucun style correspondant
// cela suppose donc qu'une CSS externe a ce plugin s'occupe de les styler
 define('PLUGIN_COLORATION_CODE_SANS_STYLES', false); // true mettra des class 

// pouvoir definir la taille des tablations (defaut de geshi : 8)
// define('PLUGIN_COLORATION_CODE_TAB_WIDTH', 4);

// Liens externes sur les mots cles de langage (defaut de geshi : true)
 define('PLUGIN_COLORATION_CODE_LIENS_LANGAGE', true); // false pour les eviter

// colorier le code SPIP ?
 define('PLUGIN_COLORATION_CODE_COLORIEUR_SPIP', 'spip');

Plugin complémentaire

Il est vivement conseillé d’utliser le plugin coloration code avec le plugin Pre & Code qui améliore la présentation des blocs de code.

Coloration SPIP avec Coloration Code > 0.7.0

La version 0.7.0 de Coloration Code améliore grandement la coloration du code des squelettes SPIP. Cependant, elle nécessite, pour cette coloration là, une version de PCRE (ecrire/ ?exec=info pour la connaitre) au moins supérieure à 7.6. Pour sûr la version 8.12 de PCRE sur un PHP 5.3.5 fonctionne sans problème.

Cette version propose 2 types de coloration du code SPIP :

  • « spip » fait appel à une coloration utilisant des expressions régulières complexes et colorie bien mieux que les versions précédentes du plugin
  • « spip3 » fait appel au phraseur et décompilateur de SPIP pour générer le code à colorier. De ce fait, la coloration est très précise mais certaines informations sont perdues car le code source est reconstruit : des espaces, sauts de lignes, changements de casse ou de syntaxe peuvent se produire. Le code généré est par contre toujours valide.

Coloration biblatex

Si vous souhaitez colorer du code de fichier .bib utilisant les nouveaux champs et types proposés par [biblatex->http://www.ctan.org/biblatex], deux solutions s’offrent à vous :

  • utiliser biblatex comme valeur l’attribut lang.
  • utiliser bibtex comme valeur l’attribut lang en ayant mis la ligne suivant dans votre fichier mes_options : define('_INTERDIRE_COMPACTE_HEAD_ECRIRE', 1);

Discussion

20 discussions

  • 2

    Bonjour,

    Depuis la mise à jour en v1.0.0 par SVP, sur un SPIP 4.2, le plugin ne fonctionne plus du tout chez moi.

    L’identification des langages et la mise en forme des cadres ne s’applique plus.

    J’ai testé les deux modes (statique et dynamique) mais rien à faire, même en vidant le cache (spip et navigateur)

    Voir capture avec 2 cadres, le 1er est en class html, le second en class bash ... aucune différence !

    J’ai loupé un truc où ... ??? 🤔

    Merci par avance

    Répondre à ce message

  • 4

    Bof, bof, :) Comme dit si bien la documentation, ce ne sont que les les quelques cas pris en charge par SPIP qui sont colorisés ...alors que la bibliothèque Geshi permet bien plus :o
    Je continue à creuser :D

    • il suffit de mettre le nom du code dans la class du cadre ?
      comme ceci, exemple d’un cadre code ou

      x = 1
      if x == 1:
          # indented four spaces
          print("x is 1.")
      package main
      
      import "fmt"
      
      func main() {
          fmt.Println("hello world")
      }
          #include <iostream>
          using namespace std;
          int main() 
          {
              cout << "Hello, World!";
              return 0;
          }
      if [[ ! -e "${archive_path}" ]]; then
              echo "dl paquet  ${dl_url}" >&2
              curl -fsSL "${curl_header[@]}" ${dl_url} -o ${archive_path} \
                  && log_success "paquet ${prefix} téléchargé" \
                  || log_error   "erreur lors du téléchargement ${prefix} ${repo} ${api_url}"
      fi

      Il vous faudrait la coloration pour quel langage ?

    • bizarre dans la prévisualisation ça semble fonctionner :)

    • Comme mentionne la documentation du plugin :

      Les lan­ga­ges susceptibles d’être colorisés sont ceux four­nis dans https://zone.spip.net/trac/spip-zone/browser/_plugins_/coloration_code/branches/v0.6/geshi/geshi dont la classe sup­plemen­taire :

      Effectivement, il y a tous les langages supportés par GeSHi (j’avais cru, à la lecture, qu’une sélection avait été faite mais la bibliothèque/lib est visiblement complète)
      Au fait, pour le C++ c’est « cpp »

      Par contre, ça n’a pas l’air de fonctionner pour tous, comme le montrent tes exemples (j’avais, pour ma part, testé « go » et « python » aussi, ainsi que « sql »/« plsql »/« postgresql » qui n’ont pas fonctionné alors « mysql » et « spip » oui)

    • Bon, entre temps j’ai trouvé... GeSHi est bien appliqué (et en regardant le source de la page, « c++ » est magiquement reconnu...) Par contre, il y ici (toujours dans le code source de la page) un appel à « plugins/gribouille2/css/geshi.css » qui associe les classes générées par GeSHi aux classes englobantes suivantes : « spip_spip » ; « spip_php » ; « spip_xml » ; « spip_css » ; « spip_bash »
      Donc, ce qui semble fonctionner chez moi doit provenir d’un plugin qui défini les CSS qui vont bien (sachant que le plugin lui-même ne propose que la numérotation dans l’espace privé...) Mystère résolu...

    Répondre à ce message

  • 1

    Hello,

    merci pour ce chouette plugin !

    Question : je suis sur un site multilingue, cependant les cadres affichent « Télécharger » quelle que soit la langue... je voulais voir si je pouvais faire une modification moi même, mais pas moyen de trouver la chaîne de caractère « Télécharger » dans le plugin, je suis confus ^^

    Merci !

    Sam.

    • Je m’empresse de répondre moi-même à mon énorme erreur : mais non, le texte change bien en fonction de la langue, tout est par-fait ! (erreur de cache).

      Merci encore pour ce beau travail !

    Répondre à ce message

  • Merci pour ce plugin,
    Je me demandais si ce ne serait pas intéressant d’ajouter une option start pour pouvoir citer du code en le localisant (ligne).

    <cadre class='php' start=385>
    // la fameuse ligne 385
    // la ligne 386
    //...

    Accessoirement, y’a-t-il un moyen d’échapper une ligne ? dans l’exemple dessus j’ai fermé le cadre 2 fois (puisque j’ai un cadre dans un cadre) et le intérieur ferme le cadre extérieur.
    Merci

    Répondre à ce message

  • Laurent Bloch

    Bonjour,

    La colorisation fonctionne correctement, mais le cadre du programme apparaît avec une marge gauche encombrante qui contient le texte « [code] », je souhaiterais retirer cette marge ; cf. par exemple ici :
    https://www.laurentbloch.net/MySpip3/Knuth-Morris-Pratt-en-style

    J’ai regardé le fichier coloration_code.css, j’y ai vu des choses de 40px et 43px de large qui pourraient être ça, mais c’est trop mystérieux pour que j’y touche.

    J’utilise le squelette Escal, cela peut venir de là.

    Merci de toute indication !

    Répondre à ce message

  • J’aurais voulu ajouter une classe au code généré, pour pouvoir l’afficher au milieu du texte (en display:inline) dans certains cas précis.
    Y a-t’il un moyen de le faire ?
    J’ai testé code class=« html4strict inline », mais le dernier attribut n’est pas pris en compte.

    Répondre à ce message

  • Bonjour

    Juste une petite remarque : le plugin en version 0.6.6 supprime toutes les lignes vides du texte mis entre les balises <cadre>...</cadre>
    C’est dommage, vu que ça enlève les lignes vide du code source que je veux afficher (et donc rend le code moins lisible)

    En commentant les lignes suivantes :

    $code = preg_replace("/^(\r\n|\n|\r)/m", "", $code);
    $code = preg_replace("/(\r\n|\n|\r)$/m", "", $code);

    de coloration_code_fonctions.php, on supprime le problème.
    À l’origine, ces lignes sont là pour enlever les lignes superflues en début de texte et en fin de texte. Mais ce n’est pas ce qu’elles font, en fait...
    (Peut-être que ceci est déjà corrigé dans la version 0.7 que je n’ai pas testé)

    Merci !!

    Répondre à ce message

  • Bonjour,

    Je rencontre le soucis suivant : j’ai imposé overflow:auto dans les pages de style pour spip_cadre et spip_code. Cela marche bien tant que je ne tente pas de coloriser. Mais dès que j’ajoute class=« un langage quelconque », le scrolling horizontal ne se fait plus : il est remplacé par un passage à la ligne...

    Quelqu’un a-t-il déjà résolu ce problème ?

    Merci d’avance

    Répondre à ce message

  • 2 problèmes :

    je n’ai pas les numéros de ligne avec ie9 (serveur easyphp-5.3.4, win7) mais sur autre serveur (lamp ubuntu) oui

    et quand on copie le code avec numéro de ligne depuis poste en win xp , on a des #
    _

    Répondre à ce message

  • 2

    Je cherche a utiliser la fonction Highlighting Special Lines “Extra” de GeSHi.

    Je ne pense pas que cette fonction soit présente dans le plugin Coloration Code 2 pour spip. Si je me trompe comment faut-il la déclarer au cas par cas.
    ex :

    <..cadre class="SPIP" highlight="3">
    Mon code ici
    avec ma
    ligne 3
    en surbrillance
    <../cadre>

    Sinon je me doute que la modification va se faire dans le fichier coloration_code.php du plugin mais je ne vois pas trop comment.

    Une aide serait la bienvenue.

    Merci par avance.

    • Je me reponds à moi même, j’ai rajouté dans la function coloration_code_color :

      $geshi->set_highlight_lines_extra_style('background-color: #000000;');
      	if(preg_match('/hightlight|\d/', $toHighlight, $out)){
      $geshi->highlight_lines_extra($out);

      Je ne suis pas expert des expressions régulières mais cela marche comme cela.

    • Bon juste au dessus ca marchait pour les lignes jusqu’à 9.

      J’ai amélioré un peu mon code pour pouvoir faire :

      <cadre class="php" highlight=1,2,8>

      Je détaille sur cet article les modifications apportées.

    Répondre à ce message

  • Compatible avec SPIP3.0-dev de ce que j’en ai vu ( pour le class=’spip’). Depuis il y a une nouvelle version de geshi ( GeSHi-1.0.8.10) qui semble apporter de nouveaux languages mais bon pas nécessaire d’en faire une nouvelle version je pense.

    Répondre à ce message

  • raumin

    Bonjour, merci pour ce plugin !

    Une question, pour un code assez long à afficher, est il possible de mettre ce code dans un cadre ? Parceque là avec un code de 100 lignes, la page web devient assez longue...

    Merci d’avance

    Répondre à ce message

  • 1

    Le lien de téléchargement est cassé (erreur 404), il faut aller le chercher sur la zone et prendre l’archive selon la version de Spip utilisée.

    Répondre à ce message

  • Bonjour,

    j’ai une proposition pour le plugin qui pourrait être intéressante à intégrer. On pourrait avoir besoin de différencier le comportement par défaut du lien de téléchargement en fonction de la balise cadre ou code utilisée.
    Pour ma part, la balise code est plutôt pour du code inclut dans le flux du texte, généralement pas très long, même si il peut parfois dépasser une ligne. Dans ce cas je ne veux pas de lien. Je pourrais passer par la classe « sans_telechargement », mais pour en faire un comportement par défaut ce n’est pas pratique.
    Par contre pour les cadres je voudrais toujours le lien télécharger.

    Dans coloration_code.php j’ai placé :

    // pour interdire globalement et optionnellement le téléchargement associé
    if (!defined('PLUGIN_COLORATION_CODE_TELECHARGE')) {
    	define('PLUGIN_COLORATION_CODE_TELECHARGE', false);
    }
    // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    if (!defined('PLUGIN_COLORATION_CADRE_TELECHARGE')) {
    	define('PLUGIN_COLORATION_CADRE_TELECHARGE', true);
    }

    et plus bas :

      $plugin_coloration_telecharge = ($cadre == 'cadre') ?
         PLUGIN_COLORATION_CADRE_TELECHARGE : PLUGIN_COLORATION_CODE_TELECHARGE;
    	$telecharge = 
    		($plugin_coloration_telecharge || in_array('telechargement', $params))
    	 && (strpos($code, "\n") !== false) && !in_array('sans_telechargement', $params);

    Répondre à ce message

  • sur ce site (contrib)
    si je met une classe spip

    [avant(#BALISE{argument}|filtre{argument})après]
    [avant(#BALISE{argument}|filtre{argument})après]

    j’ai des espace autour des [){. A croire qu’il n’échappe pas à propre.

    Répondre à ce message

  • L’installation automatique (SPIP 2) ne fonctionne PAS, sinon les fichiers sont placés dans le dossier /lib/

    Il faut passer _obligatoirement_ par une installation manuelle si on veut l’installer.

    Répondre à ce message

  • 4

    Bonjour,

    je viens de tester sur spip 1.9.2 et du code php. En utilisant CODE : aucun effet, marche avec CADRE.

    • de même, si je met

      <cadre class="php sans_tele­char­ge­ment">

      il n’en tient pas compte et me propose toujours le téléchargement.

    • Bon, je viens de regarder dans le code :

      1- c’est sans_telecharge qu’il faut mettre , pas sans_telechargement

      2- Même avec le point 1 ça ne marche pas. C’est extrêmement bizarre, j’ai débogué le fichier mes_options.php à la ligne

      		$telecharge = (PLUGIN_COLORATION_CODE_TELECHARGE || in_array('telecharge', $params))
      	   && (strpos($code, "\n") !== false) && !(in_array("sans_tele­char­ge", $params));

      et bien !(in_array("sans_tele­char­ge", $params)) vaut toujours 1 même si « sans_tele­char­ge » est bien présent dans $params !!?

    • marcimat

      Bonjour,

      Je viens de corriger ce que vous venez de soulever (telechargement / sans_telechargement).

      J’ai aussi supprimé ce traitre de fichier mes_options.php qui trainait dans ce plugin, qui n’a rien à y faire, et qui ne servait à rien (il n’était pas appelé) !

      http://zone.spip.org/trac/spip-zone/changeset/27400

      MM.

    • Ca y est, ça marche :

      -  concernant le fait que ça ne marchait qu’avec cadre et pas code, j’avais un caractère invisible dans le nom de la class, mais non visible : je voyais class=« sans_telecharge » mais au débogage il me disait « class= »sans_telecharge←", provenant d’un copier/coller. J’ai mis du temps à le trouver celui-la.

      -  Merci pour ta correction à propos de mes_options.php qui n’était pas utilisé, mais je parle depuis le début de SPIP 1.9.2 ... et la pour le coup il le faut, et ce coup ci il y a un vraiment un bug, ça ne vient pas de moi :-)

      A la fin de mes_options.php, rajouter :

      function traiter_echap_code($regs) {
          $echap = coloration_code_traiter($regs);
      
          return $echap;
      }

      sinon on aura jamais la coloration avec la balise <code>.

    Répondre à ce message

  • Bonjour,

    J’ai testé donc le nom de la class (il faut le « L ») : html4strict

    • Spip 1.92 : coloration & numérotation + téléchargement avec « cadre », mais sans résultat avec « code ».
    • Spip 2.0.2 : Coloration & numérotation + téléchargement avec « cadre », coloration uniquement + téléchargement avec « code ».

    Avec mes remerciements !

    KMk

    Répondre à ce message

  • 2

    Re-bonjour,

    Avec spip 2.0 (plugin couteau suisse dans celui-ci), pas de numérotation ni de téléchargement, que ce soit avec « code » comme avec « cadre » (avec spip 1.9, « cadre » me permet d’obtenir une numérotation et la proposition de téléchargement, si je mets les deux class dans la balise cadre, class=« langage » & class=« chargement ».

    Bigre...

    Cordialement,
    KMk

    • Essaie code class="html4strict" pour voir ?

    • Bonjour, c’est plutôt en htm4strict, sans le L !!!

      <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr" dir="ltr">
      <head>
      <title>SPIP - Contrib</title>
      <meta name="description" content="Le site des amis de SPIP" />
      </head></html>

    Répondre à ce message

  • Bonjour,

    Je viens de tester ce plugin intéressant dès qu’il s’agit de communiquer des morceaux de code.
    Spip 1.92d. Pas de résultat avec les balises :

    code class=« langage »... /code

    Numérotation des lignes avec les balises :

    cadre class=« langage »... /cadre

    Point de couleurs... aurais-je raté une marche ?

    Codialement,
    KMk

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom