Markdown dans Gedit

La coloration syntaxique pour le markdown est plutôt correcte si on tient compte des limites techniques de GtkSourceView. Il s'agit ici d'appliquer des styles aux différents niveaux de titres.

cp /usr/share/gtksourceview-3.0/styles/theme.xml ~/.local/share/gtksourceview-3.0/styles/theme.xml
Copie locale du thème de coloration syntaxique.
<style name="markdown:header1" foreground="#0077aa" scale="2" bold="true" />
<style name="markdown:header2" foreground="#0077aa" scale="1.75" bold="true" />
<style name="markdown:header3" foreground="#0077aa" scale="1.5" bold="true" />
<style name="markdown:header4" foreground="#0077aa" scale="1.25" bold="true" />
<style name="markdown:header5" foreground="#0077aa" bold="true" />
<style name="markdown:header6" foreground="#0077aa" underline="true"/>
theme.xml : ajouter des styles dans le thème pour personnaliser les titres.
cp /usr/share/gtksourceview-3.0/language-specs/markdown.lang ~/.local/share/gtksourceview-3.0/language-specs/markdown.lang
Copie locale du fichier de définition de la syntaxe markdown.
<style id="header1" _name="Header 1" />
<style id="header2" _name="Header 2" />
<style id="header3" _name="Header 3" />
<!-- etc. -->
Markdown.lang : remplacer la déclaration du style « header » par une déclaration de styles propres à chaque niveau de titre.
<!-- header 1 -->
<context id="atx-header1" style-ref="header1">
    <match>^#\s+.+</match>
</context>
<!-- header 2 -->
<context id="atx-header2" style-ref="header2">
    <match>^##\s+.+</match>
</context>
<!-- header 3 -->
<context id="atx-header3" style-ref="header3">
    <match>^###\s+.+</match>
</context>
<!-- etc. -->
Markdown.lang : remplacer le contexte « atx-header » par une série de contextes propres à chaque niveau de titre.

On peut aussi préférer ne styliser que le texte du titre et laisser en retrait les préfixes:

<!-- header 1 -->
<context id="atx-header1">
    <match>^(#)\s+(.+)</match>
    <include>
        <context sub-pattern="1" style-ref="h-prefix"/>
        <context sub-pattern="2" style-ref="header1"/>
    </include>
</context>

<!-- header 2 -->
<context id="atx-header2">
    <match>^(##)\s+(.+)</match>
    <include>
        <context sub-pattern="1" style-ref="h-prefix"/>
        <context sub-pattern="2" style-ref="header2"/>
    </include>
</context>

<!-- header 3 -->
<context id="atx-header3">
    <match>^(###)\s+(.+)</match>
    <include>
        <context sub-pattern="1" style-ref="h-prefix"/>
        <context sub-pattern="2" style-ref="header3"/>
    </include>
</context>
Markdown.lang : règles pour styliser le titre et le préfixe différemment.
<context ref="atx-header1"/>
<context ref="atx-header2"/>
<context ref="atx-header3"/>
Markdown.lang : remplacer l'inclusion du contexte original « header » par celles des contextes spécifiques au niveau de titre.
  • Ne pas utiliser les styles « def:header[0-6] » sinon cela s'appliquera à toutes les syntaxes utilisant ses styles comme pour le HTML par exemple (ou alors définir des styles qui vont bien partout — faire varier la taille ne rend pas terrible pour du HTML).
  • La gestion de la syntaxe setext reste limitée car GtkSourceView ne permet pas d'écrire des regex multilignes.

On peut aussi ajouter des snippets pour le langage markdown afin d'insérer automatiquement les prefixes de titraille :

<snippet>
    <description>h2</description>
    <accelerator><![CDATA[<Primary><Shift>2]]></accelerator>
    <text><![CDATA[## $GEDIT_CURRENT_LINE]]></text>
</snippet>
<snippet>
    <description>h3</description>
    <accelerator><![CDATA[<Primary><Shift>3]]></accelerator>
    <text><![CDATA[### $GEDIT_CURRENT_LINE]]></text>
</snippet>
Accélérateurs pour fair de la ligne courante un titre de niveau 2 ou 3.

J'ai toujours utiliser la titraille setext pour la délimitation visuelle que fournit la ligne de soulignement mais avec GtkSourceView, seule la syntaxe atx permet de faire varier (grossir) la taille du texte du titre.