Gedit - Coloration syntaxique

 

1) Introduction

L'éditeur gedit gère un système de coloration syntaxique dont nous allons décrire le paramètrage.

2) Installation

installez les paquets gedit et gedit-plugins :

apt install gedit gedit-plugins

Activez les greffons souhaités dans Gedit->Application->Préférence->Greffon

Activez la coloration syntaxique souhaitée dans Gedit->Application->Affichage->Mode de coloration-><langage de programmation>

3) Disposition

Dans le dossier /usr/share/gtksourceview-4.0 il existe deux dossiers importants :

1- Le répertoire language-specs contient les fichiers <nom-langage>.lang pour définir chaque langage.

2- Le répertoire styles contient les fichiers <nom-style>.xml pour définir chaque style de coloration.

Le fichier def.lang est commun à la définition de tous les langages. Il comprend la définition de styles génériques

Le fichier classic.xml défini le style classique pour tous les langages.

4) Styles commun à tous les langages

Le fichier def.lang comprend la définition des styles suivants :

Groupe
Style
Description
Style par défaut
Groupe des commentaires
comment
Tout commentaire
shebang
Un shebang: #!/bin/sh
def:comment
doc-comment
Un commentaire spécial contenant de la documentation comme dans javadoc ou gtk-doc
def:comment
doc-comment-element
Un élément dans un commentaire de documentation: @author
Ce style ne correspond à rien car il doit être utilisé comme style supplémentaire pour le texte qui est déjà stylé comme un "doc-comment"
Groupe des
constantes
constant
Toute constante
character
Une constante de caractère: 'c'
def:constant
string
Une constante de chaîne: "ceci est une chaîne"
def:constant
special-char
Caractère spécial dans une constante de chaîne: "%s", "\t" Ce style ne correspond à rien car il doit être utilisé comme style supplémentaire pour le texte qui est déjà stylisé comme une "string"
number
Une constante numérique générique
def:constant
floating-point
Une constante à virgule flottante: 2.3e10
def:number
decimal
Un nombre décimal: 1234
def:number
base-n-integer
Un nombre de base N: 0xFFFF
def:number
complex
Un nombre complexe
def:number
special-constant
Une constante spéciale comme NULL en C ou null en Java
def:constant
boolean
Une constante booléenne: TRUE, false
def:special-constant
Groupes des
 identificateurs
identifier
Tout nom de variable
function
Un nom de fonction (aussi: méthodes pour les classes)
def:identifier
builtin
Un nom intégré: comme __import__, abs en Python
def:identifier
Groupe des
instructions
statement
Toute déclaration
operator
Les operateurs: "+", "*", etc.
def:statement
keyword
mots-clés: "if", "for", "while", etc.
def:statement
Groupe des types
type
Un type de données primitif: int, long, char, etc.
Groupe
des balisages
emphasis
Emphase, généralement rendue en italique
strong-emphasis
Emphase forte, généralement rendue en gras
inline-code
Code en ligne, généralement rendu avec une police monospace
insertion
Insertion, généralement rendue avec un soulignement
deletion
Suppression, généralement rendue avec un barré
link-text
Texte du lien, généralement rendu avec un soulignement
link-symbol
Symbole de lien, une partie de la syntaxe de balisage pour les liens
link-destination
Destination du lien, généralement invisible
heading
En-tête, généralement rendu dans une police plus grande (à l'aide des balises h1, h2, etc.
thematic-break
Rupture thématique, généralement rendue sous forme de règle horizontale (ligne)
preformatted-section
Section préformatée, généralement rendue avec une police monospace
list-marker
Marqueur de liste, généralement rendu sous forme de puce ou de numéro
Autres
preprocessor
Celui-ci est pour '#include <foo.h>' et "#pragma blah", ou 'use foobar', etc.
error
Toute construction erronée
warning
pour marquer éventuellement des erreurs ou une syntaxe non recommandée
reserved
Mots clés réservés: comme "const" et "goto" en Java
def:error
note
Tout ce qui nécessite une attention particulière; principalement les mots-clés TODO, FIXME et XXX
net-address
Adresse Internet: URL, adresses e-mail, etc.
underlined
Obsolète: sera supprimé dans une future version
def:net-address

5) Description d'un fichier <language de programmation>.lang exemple - Le fichier povray.lang :

Ce fichier décrit la coloration syntaxique du langage povray 3.7, un langage de description de scène 3D.

( Pour colorer les extraits de code xml ci-dessous, nous avons utilisé la commande highlight)

Prologue

Une entête comprise dans un commentaire XML, c'est à dire comprise entre le symbole <!-- et le symbole -->, indique de quel ensemble fait parti ce fichier, l'auteur, le copyleft, l'année...

La balise d'ouverture de définition d'un langage :

   
   
   
   
   
   
   

 

 

 

Le prologue :

<?xml version="1.0" encoding="UTF-8"?>

La balise d'ouverture de définition d'un langage :

<language id="povray" name="POV-Ray" version="2.0" _section="Other">

Le mimetype, l'extension de fichier, les symboles de commentaire par ligne et par bloc :

<metadata>
    <property name="mimetypes">text/x-povray</property>
    <property name="globs">*.pov</property>
    <property name="line-comment-start">//</property>
    <property name="block-comment-start">/*</property>
    <property name="block-comment-end">*/</property>
</metadata>

Les styles utilisés et leur aiguillage par défaut :

<styles>
    <style id="comment" name="Comment" map-to="def:comment"/>
    <style id="escaped-character" name="Escaped Character" map-to="def:special-char"/>
    <style id="string" name="String" map-to="def:string"/>
    <style id="function" name="Function" map-to="def:preprocessor"/>
    <style id="preprocessor" name="Preprocessor" map-to="def:preprocessor"/>
    <style id="keyword" name="Keyword" map-to="def:keyword"/>
    <style id="number" name="Number" map-to="def:decimal"/>
    <style id="others" name="Others 3"/>
</styles>

Définition des string avec caractère d'échapement. Reprise des mêmes dispositions existant dans java.lang :

<definitions>

<define-regex id="escaped-character" extended="true">
    \\( # leading backslash
    [\\\"\'nrbtf] | # escaped character
    [0-9]{1,3} | # latin encoded char
    u[0-9]{1,4} # unicode char
    )
</define-regex>

<context id="string" style-ref="string" end-at-line-end="true" class="string" class-disabled="no-spell-check">
    <start>"</start>
    <end>"</end>
    <include>
        <context id="escaped-character" style-ref="escaped-character">
            <match>\%{escaped-character}</match>
        </context>
    </include>
</context>

Définition des ponctuations :

<context id="punctuator" style-ref="others">
    <match extended="true"> [{}().,;] </match>
</context>

Définition des opérateurs  :

<context id="operator" style-ref="function">
    <match extended="true"> [-+!*/&lt;&gt;=&amp;|?:] </match>
</context>

Définition des opérateurs-tableaux  :

<context id="array-operator" style-ref="function">
    <match extended="true"> (\[|\]) </match>
</context>

Définition des nombres :

<context id="numeric" style-ref="number">
    <match extended="true"> [\+-]?[0-9]+(\.[0-9])?([Ee][\+-]?[0-9]+)?</match>
</context>

Définition des constantes prédéfinies  :

<context id="built-in-constant" style-ref="string">
    <keyword>false</keyword>
    <keyword>no</keyword>
    <keyword>off</keyword>
    <keyword>on</keyword>
    <keyword>pi</keyword>
    <keyword>true</keyword>
    <keyword>yes</keyword>
</context>

Définition des paramètres prédéfinies :

<context id="built-in-variable" style-ref="keyword">
<keyword>clock</keyword>
<keyword>clock_delta</keyword>
<keyword>clock_on</keyword>
<keyword>final_clock</keyword>
<keyword>final_frame</keyword>
<keyword>frame_number</keyword>
<keyword>initial_clock</keyword>
<keyword>initial_frame</keyword>
<keyword>image_height</keyword>
<keyword>image_width</keyword>
<keyword>input_file_name</keyword>
<keyword>version</keyword>
</context>

Définition des vecteurs prédéfinies :

<context id="built-in-vector" style-ref="keyword">
<keyword>t</keyword>
<keyword>u</keyword>
<keyword>v</keyword>
<keyword>x</keyword>
<keyword>y</keyword>
<keyword>z</keyword>
</context>

Définition des identifiants de couleur :

<context id="color-identifier" style-ref="keyword">
<keyword>blue</keyword>
<keyword>filter</keyword>
<keyword>gray</keyword>
<keyword>green</keyword>
<keyword>red</keyword>
<keyword>rgb</keyword>
<keyword>rgbf</keyword>
<keyword>rgbft</keyword>
<keyword>rgbt</keyword>
<keyword>srgb</keyword>
<keyword>sRGB</keyword>
<keyword>SRGB</keyword>
<keyword>srgbf</keyword>
<keyword>srgbft</keyword>
<keyword>srgbt</keyword>
<keyword>transmit</keyword>
</context>

Définition des fonctions s'appliquant à des nombres :

<context id="float-function" style-ref="function">
<keyword>abs</keyword>
<keyword>acos</keyword>
<keyword>acosh</keyword>
<keyword>asc</keyword>
<keyword>asin</keyword>
<keyword>asinh</keyword>
<keyword>atan</keyword>
<keyword>atan2</keyword>
<keyword>atand</keyword>
<keyword>atanh</keyword>
<keyword>bitwise_and</keyword>
<keyword>bitwise_or</keyword>
<keyword>bitwise_xor</keyword>
<keyword>ceil</keyword>
<keyword>cos</keyword>
<keyword>cosh</keyword>
<keyword>defined</keyword>
<keyword>degrees</keyword>
<keyword>dimension_size</keyword>
<keyword>dimensions</keyword>
<keyword>div</keyword>
<keyword>exp</keyword>
<keyword>file_exists</keyword>
<keyword>floor</keyword>
<keyword>inside</keyword>
<keyword>int</keyword>
<keyword>ln</keyword>
<keyword>log</keyword>
<keyword>max</keyword>
<keyword>min</keyword>
<keyword>mod</keyword>
<keyword>pow</keyword>
<keyword>radians</keyword>
<keyword>rand</keyword>
<keyword>seed</keyword>
<keyword>select</keyword>
<keyword>sin</keyword>
<keyword>sinh</keyword>
<keyword>sqr</keyword>
<keyword>sqrt</keyword>
<keyword>strcmp</keyword>
<keyword>strlen</keyword>
<keyword>tan</keyword>
<keyword>tanh</keyword>
<keyword>val</keyword>
<keyword>vdot</keyword>
<keyword>vlength</keyword>
</context>