<appendix id="highlight">
<title
>Travailler avec la coloration syntaxique</title>

<sect1 id="highlight-overview">

<title
>Vue d'ensemble</title>

<para
>La coloration syntaxique est ce qui fait automatiquement afficher du texte à l'éditeur dans différents styles / couleurs selon la fonction de la chaîne en rapport avec le but du fichier. Dans le code source d'un programme par exemple, des instructions de contrôle peuvent être rendues en gras, alors que des types de données et des commentaires prennent des couleurs différentes du reste du texte. Ceci améliore considérablement la lisibilité du texte et aide ainsi l'auteur à être plus efficace et plus productif.</para>

<mediaobject
> <imageobject
><imagedata format="PNG" fileref="highlighted.png"/></imageobject
> <textobject
><phrase
></phrase
></textobject
> <caption
><para
></para
> </caption
> </mediaobject>

<mediaobject
> <imageobject
><imagedata format="PNG" fileref="unhighlighted.png"/></imageobject
> <textobject
><phrase
></phrase
></textobject
> <caption
><para
></para
></caption
> </mediaobject>

<para
>De ces deux exemples, lequel est le plus facile à lire ?</para>

<para
>&kate; offre un système souple, configurable et capable de prendre en charge la coloration syntaxique ; la distribution standard fournit des définitions d'un large éventail de langages de programmation, de balisage et de scriptage, ainsi que d'autre formats de fichiers texte. En outre, vous pouvez proposer vos propres définitions dans des fichiers &XML; simples.</para>

<para
>&kate; détecte automatiquement les règles de coloration syntaxique lorsque vous ouvrez un fichier, en fonction du type &MIME;, déterminé par son extension ou, s'il n'y en a aucune, le contenu. Si vous vous faites un mauvais choix, vous pouvez définir manuellement la syntaxe à utiliser dans le menu <menuchoice
><guimenu
>Documents</guimenu
><guisubmenu
>Mode de coloration syntaxique</guisubmenu
></menuchoice
>.</para>

<para
>Les styles et les couleurs utilisés par chaque définition de coloration syntaxique, ainsi que les types &MIME; à employer, peuvent être configurés à l'aide de la page <link linkend="config-dialog-editor-hl"
>Coloration syntaxique</link
> de la <link linkend="config-dialog"
>boîte de dialogue Configuration</link
>.</para>

<note
> <para
>La coloration syntaxique est là pour améliorer la lisibilité du texte correct, mais vous ne pouvez pas vous y fier pour valider votre texte. La complexité du marquage syntaxique du texte dépend du format que vous utilisez et, dans certains cas, les auteurs des règles de syntaxe seront fiers si 98 % du texte sont correctement rendus, même si la plupart du temps, il vous faut un style rare pour voir les 2 % incorrects.</para
> </note>

<tip
> <para
>Vous pouvez télécharger des définitions de coloration syntaxique actualisées ou additionnelles sur le site web de &kate; en cliquant sur le bouton <guibutton
>Télécharger</guibutton
> dans la <link linkend="config-dialog-editor-hl"
>page Coloration syntaxique</link
> de la <link linkend="config-dialog"
>boîte de dialogue de Configuration</link
>.</para
> </tip>

</sect1>

<sect1 id="katehighlight-system">

<title
>Le système de coloration syntaxique de &kate;</title>

<para
>Cette section aborde le mécanisme de coloration syntaxique de &kate; plus en détail. Il vous conviendra si vous voulez en faire l'apprentissage, créer ou changer des définitions de syntaxe.</para>

<sect2 id="katehighlight-howitworks">

<title
>Fonctionnement</title>

<para
>Chaque fois que vous ouvrez un fichier, une des premières tâches de l'éditeur &kate; est de détecter la définition syntaxique à utiliser pour le fichier. Lors de la lecture du texte du fichier, et lors de sa saisie dans ce dernier, le système de coloration syntaxique analysera le texte à l'aide des règles fixées par la définition syntaxique et y marquera les endroits où différents contextes et styles commencent et finissent.</para>

<para
>Lorsque vous saisissez le document, le nouveau texte est analysé et marqué à la volée, de sorte que si vous supprimez un caractère qui est marqué comme étant le commencement ou la fin d'un contexte, le style du texte environnant change en conséquence.</para>

<para
>Les définitions syntaxiques que le système de coloration syntaxique de &kate; utilise sont des fichiers &XML; contenant <itemizedlist
> <listitem
><para
>Des règles pour détecter le rôle du texte, organisé en blocs de contexte</para
></listitem
> <listitem
><para
></para
></listitem
> <listitem
><para
>Des définitions d'éléments de style</para
></listitem
> </itemizedlist
> </para>

<para
>Lors de l'analyse du texte, les règles de détection sont évaluées dans l'ordre dans lequel elles sont définies et si le début de la chaîne actuelle correspond à une règle, le contexte y afférent est utilisé. Le point de départ dans le texte est déplacé vers le point final auquel cette règle correspondait et une nouvelle boucle des règles commence, en partant du contexte établi par la règle qui correspondait.</para>

</sect2>

<sect2 id="highlight-system-rules">
<title
>Règles</title>

<para
>Les règles de détection sont le fondement du système de détection de la coloration syntaxique. Une règle est une chaîne, un caractère ou une<link linkend="regular-expressions"
>expression rationnelle</link
>par rapport à laquelle faire correspondre le texte en cours d'analyse. Elle contient des informations sur le style à utiliser pour la partie correspondante du texte. Elle peut basculer le contexte de fonctionnement du système soit vers un contexte explicitement mentionné, soit vers le précédent contexte utilisé par le texte.</para>

<para
>Les règles sont organisées en groupes de contexte. Un groupe de contexte est utilisé pour la majorité des concepts textuels au sein du format, par exemple des chaînes de texte entre guillemets ou des blocs de commentaires dans le code source d'un programme. Cela garantit que le système de coloration n'a pas besoin d'itérer sur toutes les règles lorsque ce n'est pas nécessaire et que certaines séquences de caractères dans le texte peuvent être traitées différemment en fonction du contexte actuel. </para>

</sect2>

<sect2 id="highlight-context-styles-keywords">
<title
>Styles de contexte et mots-clés</title>

<para
>Dans certains langages de programmation, les nombres entiers sont traités différemment des nombres à virgule flottante par le compilateur (le programme qui convertit le code source en exécutable binaire) et on peut trouver des caractères ayant une signification spéciale au sein d'une chaîne entre guillemets. Dans de tels cas, il est judicieux de les rendre différemment de ceux qui sont voisins pour qu'ils soient faciles à identifier lors de la lecture du texte. Donc, même s'ils ne représentent pas des contextes spéciaux, ils peuvent être considérés comme tels par le système de coloration syntaxique, de façon à pouvoir être marqués pour un rendu différent.</para>

<para
>Une définition syntaxique peut contenir autant de styles que nécessaire pour couvrir les concepts du format pour lequel elle est utilisée.</para>

<para
>Dans de nombreux formats, il y a des listes de mots qui représentent un concept spécifique. Par exemple, dans les langages de programmation, les instructions de contrôle sont un concept, les noms de types de données un autre et les fonctions intégrées du langage un troisième. Le système de coloration syntaxique de &kate; peut faire appel à de telles listes pour détecter et marquer des mots dans le texte afin de mettre en exergue les concepts des formats de texte.</para>

</sect2>

<sect2 id="kate-highlight-system-default-styles">
<title
>Styles par défaut</title>

<para
>Si vous ouvrez un fichier source en C++, un fichier source &Java; et un document <acronym
>HTML</acronym
> dans &kate;, vous constatez que même si les formats sont différents et donc, que des mots différents sont choisis pour un traitement spécial, les couleurs utilisées sont les mêmes. C'est parce que &kate; a une liste prédéfinie de styles par défaut qui sont employés par les définitions syntaxiques individuelles.</para>

<para
>Ceci facilite la reconnaissance de concepts similaires dans différents formats de texte. Par exemple, les commentaires sont présents dans presque tout langage de programmation, de scriptage ou de balisage et, lorsqu'ils sont rendus à l'aide du même style dans tous les langages, vous n'avez pas à vous arrêter et à penser à les identifier au sein du texte.</para>

<tip
> <para
>Dans une définition syntaxique, tous les styles utilisent un des styles par défaut. Comme quelques définitions syntaxiques utilisent davantage de styles qu'il n'y en a par défaut, si vous utilisez fréquemment un format, il peut valoir la peine d'ouvrir la boîte de dialogue de configuration pour voir si certains concepts utilisent le même style. Par exemple, il n'y a qu'un style par défaut pour les chaînes, mais comme le langage de programmation Perl fait appel à deux types de chaînes, vous pouvez améliorer la surbrillance en les configurant de manière à les rendre légèrement différentes.</para
> </tip>

</sect2>

</sect1>

<sect1 id="katehighlight-xml-format">
<title
>Le format &XML; de définition de la surbrillance</title>

<sect2>
<title
>Vue d'ensemble</title>

<para
>Cette section est une vue d'ensemble du format &XML; de définition de la surbrillance. Elle décrit les principaux composants, leur signification et leur usage, sans oublier de détailler les règles de détection.</para>

<para
>La définition formelle, autrement dit la <acronym
>DTD</acronym
>est stockée dans le fichier <filename
>language.dtd</filename
> qui, dans votre système, devrait être installé dans le répertoire <filename
>$<envar
>KDEDIR</envar
>/share/apps/kate/syntax</filename
>.</para>

<variablelist
> <title
>Principaux composants des définitions de coloration syntaxique de &kate;</title
> <varlistentry
> <term
>La section Général</term
> <listitem
> <para
>La section Général contient des informations sur le format de commentaire du langage décrit et détermine si les mots-clés sont sensibles à la casse.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>Coloration syntaxique</term
> <listitem
> <para
>La section Coloration syntaxique contient toutes les données requises pour analyser et rendre le texte. Elle inclut :</para
> <variablelist
> <varlistentry
> <term
>ItemDatas</term
> <listitem
><para
>Contient des éléments ItemData, dont chacun définit un style.</para
></listitem
> </varlistentry
> <varlistentry
> <term
></term
> <listitem
> <para
>Chaque liste a un nom et peut contenir un nombre quelconque d'éléments.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>Contextes</term
> <listitem
> <para
>Contient des contextes, qui contiennent à leur tour les règles de détection syntaxique.</para
> </listitem
> </varlistentry
> </variablelist
> </listitem
> </varlistentry
> </variablelist>

</sect2>

</sect1>

<sect1 id="kate-highlight-rules-detailled">
<title
>Règles de détection de la coloration syntaxique</title>

<para
>Cette section décrit les règles de détection syntaxique.</para>

<para
>Chaque règle peut correspondre à zéro ou plusieurs caractères au début de la chaîne qu'il lui est demandé de tester. Si la règle correspond, les caractères concordants sont affectés au style ou à l'<emphasis
>attribut</emphasis
> défini par la règle et une règle peut demander que le contexte actuel soit commuté.</para>

<para
>Les <emphasis
>attributs</emphasis
> et les attributs de <emphasis
>contexte</emphasis
> sont communs à toutes les règles.</para>

<para
>Une règle ressemble à ceci :</para>

<programlisting
>&lt;RuleName attribute=&quot;(identifier)&quot; context=&quot;(identifier|order)&quot; [rule specific attributes] /&gt;</programlisting>

<para
>L'<emphasis
>attribut</emphasis
> identifie le style à utiliser pour les caractères correspondants par nom ou index et le <emphasis
>contexte</emphasis
>identifie le contexte à utiliser à partir de là.</para>

<para
>L'<emphasis
>attribut</emphasis
> peut être identifié soit par son nom, soit par son index basé sur zéro dans le groupe ItemDatas.</para>

<para
>Le <emphasis
>contexte</emphasis
> peut être identifié par :</para>

<itemizedlist
> <listitem
> <para
>Un <emphasis
>identifiant</emphasis
>, pour l'instant seulement son index basé sur zéro dans le groupe de contextes.</para
> </listitem
> <listitem
> <para
>Un <emphasis
>ordre</emphasis
> indiquant au moteur de rester dans le contexte actuel (<userinput
>#stay</userinput
>) ou de revenir à un contexte précédemment utilisé dans la chaîne (<userinput
>#pop</userinput
>).</para
> <para
>Pour reculer de plusieurs étapes, le mot-clé <keyword
>#pop</keyword
> peut être répété : <userinput
>#pop#pop#pop</userinput
></para
> </listitem
> </itemizedlist>

<para
>Certaines règles peuvent avoir des <emphasis
>règles filles</emphasis
> qui sont ensuite évaluées si, et seulement si la règle mère correspondait. La chaîne entière concordante se verra affecter l'attribut défini par la règle mère. Une règle ayant des règles filles ressemble à ceci :</para>

<programlisting>
&lt;RuleName (attributes)&gt;
  &lt;ChildRuleName (attributes) /&gt;
  ...
&lt;/RuleName&gt;
</programlisting>


<para
>Les attributs spécifiques à une règle varient et sont décrits dans la liste suivante.</para
> 

<variablelist
> <title
>Les règles en détail</title
> <varlistentry
> <term
>DetectChar</term
> <listitem
> <para
>Détecte un seul caractère spécifique. Communément utilisée par exemple pour trouver les extrémités de chaînes entre guillemets.</para
> <programlisting
>&lt;DetectChar char=&quot;(character)&quot; (attributs communs) /&gt;</programlisting
> <para
>L'attribut <userinput
>char</userinput
> définit le caractère à faire correspondre.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>Detect2Chars</term
> <listitem
> <para
>Détecte deux caractères spécifiques dans un ordre défini.</para
> <programlisting
>&lt;Detect2Chars char=&quot;(caractère)&quot; char1=&quot;(caractère)&quot; (attributs communs) /&gt;</programlisting
> <para
>L'attribut <userinput
>char</userinput
> définit le premier caractère à faire correspondre, <userinput
>char1</userinput
> le second.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>AnyChar</term
> <listitem
> <para
>Détecte un caractère d'un jeu de caractères spécifié.</para
> <programlisting
>&lt;AnyChar String=&quot;(chaîne)&quot; (attributs communs) /&gt;</programlisting
> <para
>L'attribut <userinput
>String</userinput
> définit le jeu de caractères.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>StringDetect</term
> <listitem
> <para
>Détecte une chaîne exacte.</para
> <programlisting
>&lt;StringDetect String=&quot;(chaîne)&quot; [insensitive=&quot;TRUE|FALSE;&quot;] (attributs communs) /&gt;</programlisting
> <para
>L'attribut <userinput
>String</userinput
> définit la chaîne à faire correspondre. L'attribut <userinput
>insensitive</userinput
> fixe la valeur par défaut à <userinput
>FAUX</userinput
> et est introduit dans la fonction de comparaison de a chaîne. Si la valeur est <userinput
>VRAI</userinput
>, une comparaison insensible est utilisée.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>RegExpr</term
> <listitem
> <para
>Concorde par rapport à une expression rationnelle.</para
> <programlisting
>&lt;RegExpr String=&quot;(chaîne)&quot; [insensitive=&quot;TRUE|FALSE;&quot;] [minimal=&quot;TRUE|FALSE&quot;] (attributs communs) /&gt;</programlisting
> <para
>L'attribut <userinput
>String</userinput
> définit l'expression rationnelle.</para
> <para
><userinput
>insensitive</userinput
> est défini par défaut à <userinput
>FAUX</userinput
> et introduit dans le moteur d'expression rationnelle.</para
> <para
><userinput
>minimal</userinput
> est défini par défaut à <userinput
>FAUX</userinput
> et introduit dans le moteur d'expression rationnelle.</para
> <para
>Du fait que les règles sont toujours concordantes par rapport au début de la chaîne actuelle, une expression rationnelle commençant par un caret (<literal
>^</literal
>) indique que la règle ne devrait être concordante que par rapport au début d'une ligne.</para
> <para
>Consultez <link linkend="regular-expressions"
>Expressions rationnelles</link
> pour plus d'informations à ce sujet.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>Keyword</term
> <listitem
> <para
>Détecte un mot-clé dans une liste donnée.</para
> <programlisting
>&lt;keyword String=&quot;(nom de liste)&quot; (attributs communs) /&gt;</programlisting
> <para
>L'attribut <userinput
>String</userinput
> identifie la liste de mots-clés par nom. Une liste contenant ce nom doit exister.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>Int</term
> <listitem
> <para
>Détecte un nombre entier.</para
> <para
><programlisting
>&lt;Int (attributs communs) /&gt;</programlisting
></para
> <para
>Cette règle n'a aucun attribut spécifique. Des règles filles sont généralement utilisées pour détecter des combinaisons de <userinput
>L</userinput
> et de <userinput
>U</userinput
> après le nombre, indiquant le type d'entier dans le code de programme.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>Flottant</term
> <listitem
> <para
>Détecte un nombre à virgule flottante.</para
> <para
><programlisting
>&lt;Float (attributs communs)
/&gt;</programlisting
></para
> <para
>Cette règle n'a aucun attribut spécifique.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>HlCOct</term
> <listitem
> <para
>Détecte une représentation d'un nombre octal.</para
> <para
><programlisting
>&lt;HlCOct (attributs communs) /&gt;</programlisting
></para
> <para
>Cette règle n'a aucun attribut spécifique.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>HlCHex</term
> <listitem
> <para
>Détecte une représentation d'un nombre en hexadécimal.</para
> <para
><programlisting
>&lt;Int (attributs communs) /&gt;</programlisting
></para
> <para
>Cette règle n'a aucun attribut spécifique.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>HlCStringChar</term
> <listitem
> <para
>Détecte un caractère échappé.</para
> <para
><programlisting
>&lt;HlCStringChar (attributs communs)
/&gt;</programlisting
></para
> <para
>Cette règle n'a aucun attribut spécifique.</para
> <para
>Elle correspond à des représentations par des lettres de caractères invisibles communément utilisés dans du code de programme, par exemple <userinput
>\n</userinput
> (saut de ligne) ou <userinput
>\t</userinput
> (tabulation).</para
> <para
>Les caractères suivants correspondront s'ils suivent une barre oblique inverse (<literal
>\</literal
>) : <userinput
>abefnrtv&quot;'?</userinput
>. En outre, les nombres d'échappement en hexadécimal comme par exemple <userinput
>\xff</userinput
> et les nombres échappés en octal, par exemple <userinput
>\033</userinput
> correspondront.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>RangeDetect</term
> <listitem
> <para
>Détecte une chaîne dont les caractères de début et de fin sont définis.</para
> <programlisting
>&lt;RangeDetect char=&quot;(caractère)&quot;  char1=&quot;(caractère)&quot; (attributs communs) /&gt;</programlisting
> <para
><userinput
>char</userinput
> définit le caractère démarrant la plage, <userinput
>char2</userinput
> le caractère terminant la plage.</para
> <para
>Utile pour détecter par exemple de petites chaînes entre guillemets et similaires; mais notez que, puisque le moteur de surbrillance fonctionne sur une ligne à la fois, il ne trouvera pas de chaînes s'étendant au-delà d'un saut de ligne.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>LineContinue</term
> <listitem
> <para
>Correspond à la fin de la ligne.</para
> <programlisting
>&lt;LineContinue (attributs communs) /&gt;</programlisting
> <para
>Cette règle n'a aucun attribut spécifique.</para
> <para
>Cette règle est utile pour commuter un contexte à la fin de la ligne.</para
> </listitem
> </varlistentry
> </variablelist>

</sect1>

</appendix>

