Le plugin Coloration Code pour SPIP 4.2+ bascule d’un traitement côté serveur avec GeSHi à la librairie JavaScript highlight.js qui prend en charge près de 200 langages et propose près de 250 thèmes.
Usage
SPIP 4.2 introduit le raccourci triple backtips (```) pour délimiter des extraits de code. Il suffit de préciser le langage correspondant à votre extrait de code pour que celui-ci soit intégré au markup généré ; ainsi pour du HTML :
<pre class="spip_code spip_code_block language-html" data-language="html">
<code>
...
</code>
</pre>
Coloration Code se sert ainsi par exemple de l’attribut data-language généré par SPIP.
Configuration
Coloration Code fonctionne “out of the box” grâce à sa méthode de chargement dynamique, activée par défaut ; celle-ci permet de charger automatiquement toutes les syntaxes repérées au sein d’une page.
Cette méthode, si elle a l’avantage de permettre de suite de voir si le plugin fonctionne, reste problématique : en effet, les scripts des grammaires ainsi téléchargés ne passent pas au travers des mécanismes de concaténation, minification et surtout de cache de SPIP.
Il peut donc être plus intéressant d’utiliser la méthode statique qui nécessite de sélectionner les grammaires qui seront alors chargées sur toutes les pages de votre site mais qui passeront par les outils décrits ci-dessus.
Développement
L’ensemble des scripts de langage et des thèmes de highlight.js présents dans le répertoire assets/highlightjs/ de ce plugin sont une copie des fichiers générés par la compilation des sources de la librairie.
Une fois ce dépôt cloné, il faut récupérer la librairie highlight.js, déclarée en submodule de GIT :
$ cd lib/highlight.js
$ git submodule init
$ git submodule update
Une fois les sources de highlight.js récupérées, il faut installer les dépendances nécessaires à leur compilation :
$ npm install
Puis on lance la commande
$ node tools/build.js -t cdn
Les fichiers compilés et minifiés sont alors disponible dans le répertoire lib/highlight.js/build/.
Développer la syntaxe SPIP
L’écriture d’un langage pour highlight.js permettant de colorer la syntaxe des squelettes de SPIP est en cours ; le code en est disponible sur la forge de développement (https://git.spip.net/spip-contrib-outils/highlightjs-spip) et elle est intégrée comme submodule GIT de ce plugin.
Pour récupérer le code source :
$ cd lib/highlightjs-spip
$ git submodule init
$ git submodule update
Il convient alors de faire un lien symbolique de ce répertoire lib/highlightjs-spip vers lib/highlight.js/extra :
$ ln -s $PWD/lib/highlightjs-spip $PWD/lib/highlight.js/extra
Pour lancer la compilation des langages en mode développement, il faut utiliser la commande suivante depuis le répertoire de la lib, lib/highlight.js :
npm run-script build-browser spip
On peut alors utiliser l’outil fourni par highlight.js (lib/highlight.js/tools/developer.html) pour développer notre grammaire.
Ensuite, il convient de tester le langage :
$ npm run-script build_and_test

Discussions by date of activity
22 discussions
Bonjour,
Je découvre ce plugin avec grand plaisir. Y a-t-il moyen d’avoir les numéros de ligne sur les blocs de code ainsi qu’un bouton de téléchargement ?
Merci.
Bien à vous.
Reply to this message
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
Bonjour
J’ai aussi le même constat sur un spip 42.7
Je précise qu’en plus le plugin “Pre & code” ne fonctionne plus lorsque “Coloration code” est activé.
Je viens de tomber sur le meme problème.
Le souci est tout simplement que la version v1 ne marche plus qu’avec des backsticks. Et la librairie sous jacente n’est d’ailleurs plus la meme
Reply to this message
Bonjour,
J’ai des problèmes d’affichage !
Merci
Patrice
https://collectif-jeandeneyman.fr/
Réalisé sous SPIP 4.3.2
Habillage ESCAL 5.2.1
Hébergeur : Spipfactory
Reply to this message
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
Il vous faudrait la coloration pour quel langage?
bizarre dans la prévisualisation ça semble fonctionner :)
Comme mentionne la documentation du plugin :
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...
Reply to this message
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 !
Reply to this 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).
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
Reply to this message
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 !
Reply to this 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.
Reply to this 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 :
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 !!
Reply to this 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
Reply to this message
Add a comment
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
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.
Follow the comments:
|
