<appendix id="highlight">
<title
>Arbeta med syntaxfärgläggning</title>

<sect1 id="highlight-overview">

<title
>Översikt</title>

<para
>Syntaxfärgläggning är det som gör att editorn automatiskt visar text med olika stilar/färger, beroende på strängens funktion i relation till filens syfte. Till exempel i programkällkod, så kan kontrollsatser visas i fetstil, medan datatyper och kommentarer får annorlunda färg än resten av texten. Det här ökar textens läsbarhet väsentligt, och hjälper på så sätt författaren att vara effektivare och mer produktiv.</para>

<mediaobject
> <imageobject
><imagedata format="PNG" fileref="highlighted.png"/></imageobject
> <textobject
><phrase
>En funktion i Perl, som visas med syntaxfärgläggning.</phrase
></textobject
> <caption
><para
>En funktion i Perl, som visas med syntaxfärgläggning.</para
> </caption
> </mediaobject>

<mediaobject
> <imageobject
><imagedata format="PNG" fileref="unhighlighted.png"/></imageobject
> <textobject
><phrase
>Samma kod utan syntaxfärgläggning.</phrase
></textobject
> <caption
><para
>Samma kod utan syntaxfärgläggning.</para
></caption
> </mediaobject>

<para
>Av de två exemplen, vilket är lättast att läsa?</para>

<para
>&kate; levereras med ett flexibelt, anpassningsbart och avancerat system för att göra syntaxfärgläggning, och standarddistributionen tillhandahåller definitioner för ett brett område av programspråk, formaterings- och skriptspråk samt andra textfilformat. Dessutom kan du tillhandahålla dina egna definitioner med enkla &XML;-filer.</para>

<para
>&kate; detekterar automatiskt de riktiga syntaxreglerna när du öppnar en fil, baserat på filens &MIME;-typ, som avgörs av dess filändelse, eller om den inte har någon, dess innehåll. Skulle du råka ut för ett dåligt val, kan du ställa in syntaxen som används för hand med menyn <menuchoice
><guimenu
>Dokument</guimenu
> <guisubmenu
>Färgläggningsläge</guisubmenu
></menuchoice
>.</para>

<para
>Stilarna och färgerna som används av varje syntaxfärgläggningsläge, samt vilken &MIME;-typ som det ska användas för, kan anpassas på sidan <link linkend="config-dialog-editor-hl"
> Färgläggning</link
> i <link linkend="config-dialog"
>inställningsdialogrutan</link
>.</para>

<note
> <para
>Syntaxfärgläggning finns för att förbättra läsbarheten för riktig text, men du kan inte lita på att den validerar din text. Att markera text för syntax kan vara svårt, beroende på formatet som du använder, och i vissa fall är upphovsmännen till syntaxreglerna stolta om 98 procent av texten visas korrekt, även om du behöver en ovanlig stil för att se de felaktiga 2 procenten.</para
> </note>

<tip
> <para
>Du kan ladda ner uppdaterade eller nya definitioner av syntaxfärgläggning från &kate;s webbplats genom att klicka på knappen <guibutton
>Ladda ner</guibutton
>på sidan <link linkend="config-dialog-editor-hl"
>Färgläggning </link
> i <link linkend="config-dialog"
>inställningsdialogrutan</link
>.</para
> </tip>

</sect1>

<sect1 id="katehighlight-system">

<title
>&kate;s syntaxfärgläggningssystem</title>

<para
>Det här avsnittet beskriver &kate;s syntaxfärgläggningsmekanism i mer detalj. Det är avsett för dig, om du vill veta mer om den, eller om du vill skapa och ändra syntaxdefinitioner.</para>

<sect2 id="katehighlight-howitworks">

<title
>Hur det fungerar</title>

<para
>Så fort du öppnar en fil, är en av de första sakerna som &kate;-editorn gör att avgöra vilken syntaxdefinition som ska användas för filen. När filens text läses in, och medan du skriver i den, så analyserar syntaxfärgläggningssystemet texten enligt reglerna som definieras i syntaxdefinitionen och markerar var i den som olika sammanhang och stilar börjar och slutar.</para>

<para
>När du skriver in text i dokumentet, så analyseras och markeras den nya texten i farten, så att om du tar bort ett tecken som markeras som början eller slutet på ett sammanhang, så ändras stilen på den omgivande texten i enlighet med detta.</para>

<para
>Syntaxdefinitioner som används av &kate;s syntaxfärgläggningssystem är &XML;-filer, som innehåller <itemizedlist
> <listitem
><para
>Regler för att detektera funktionen hos text, organiserade i sammanhangsblock</para
></listitem
> <listitem
><para
>Listor med nyckelord</para
></listitem
> <listitem
><para
>Definitioner av stilobjekt</para
></listitem
> </itemizedlist
> </para>

<para
>När texten analyseras utvärderas detekteringsreglerna i den ordning som de definierades, och om början på den nuvarande strängen matchar en regel, så används motsvarande sammanhang. Startpunkten i texten flyttas till den sista punkten där regeln matchade, och en ny genomgång av reglerna sker, med början i sammanhanget som anges av den matchande regeln.</para>

</sect2>

<sect2 id="highlight-system-rules">
<title
>Regler</title>

<para
>Detekteringsreglerna är centrala för färgläggningsdetekteringssystemet. En regel är en sträng, ett tecken eller ett reguljärt uttryck som texten som ska analyseras matchas mot. Den innehåller information om vilken stil som ska användas för den delen av texten som matchar. Den kan byta arbetssammanhanget för systemet, antingen till ett sammanhang som anges explicit, eller till det föregående sammanhanget som användes av texten.</para>

<para
>Reglerna organiseras i sammanhangsgrupper. En sammanhangsgrupp används för de huvudsakliga koncepten i formatets text, till exempel textsträngar inom citationstecken eller kommentarblock i programkällkod. Det här försäkrar att färgläggningssystemet inte behöver gå igenom alla regler när det inte är nödvändigt, och att vissa teckensekvenser i texten kan hanteras annorlunda beroende på det nuvarande sammanhanget. </para>

</sect2>

<sect2 id="highlight-context-styles-keywords">
<title
>Sammanhangsstilar och nyckelord</title>

<para
>I vissa programspråk, hanteras heltal annorlunda än flyttal av kompilatorn (programmet som översätter källkoden till körbart binärformat), och det kan finnas tecken som har en särskild mening i en sträng med citationstecken. I sådana fall är det vettigt att visa dem på ett annat sätt än omgivningen så att de är lätta att identifiera när texten läses. Så även om de inte representerar speciella sammanhang, så kan de betraktas som sådana av syntaxfärgläggningssystemet, så att de kan markeras för att visas på ett annorlunda sätt.</para>

<para
>En syntaxdefinition kan innehålla så många stilar som krävs för att täcka koncepten i det format den används för.</para>

<para
>I många format finns det en lista på ord som representerar ett speciellt koncept. Till exempel i programspråk, så är kontrollsatserna ett koncept, namn på datatyper ett annat, och inbyggda funktioner i språket ett tredje. &kate;s syntaxfärgläggningssystem kan använda sådana listor för att detektera och markera ord i texten för att visa koncepten för textformaten.</para>

</sect2>

<sect2 id="kate-highlight-system-default-styles">
<title
>Förvalda stilar</title>

<para
>Om du öppnar en C++ källkodsfil, en Java källkodsfil och ett HTML-dokument i &kate;, så ser du att även om formaten är olika, och olika ord därför väljs för särskild behandling, så är färgerna som används samma. Det här beror på att &kate; har en fördefinierad lista på standardstilar, som används av varje individuell syntaxdefinition.</para>

<para
>Det här gör det lätt att känna igen liknande koncept i olika textformat. Kommentarer finns till exempel i nästa alla program-, skript- eller formateringsspråk, och när de visas med samma stil i alla språk, behöver du inte stanna och tänka efter för att identifiera dem i texten.</para>

<tip
> <para
>Alla stilar i en syntaxdefinition använder en av standardstilarna. Några få syntaxdefinitioner använder fler stilar än det finns som standard, så om du ofta använder ett format, kan det vara värt att titta i inställningsdialogrutan för att se om några koncept använder samma stil. Det finns till exempel bara en standardstil för strängar, men eftersom programspråket Perl hanterar två sorters strängar, kan du utöka färgläggningen genom att ställa in dessa så att de skiljer sig något.</para
> </tip>

</sect2>

</sect1>

<sect1 id="katehighlight-xml-format">
<title
>&XML; formatet för syntaxfärgläggningsdefinitioner</title>

<sect2>
<title
>Översikt</title>

<para
>Det här avsnittet är en översikt av färgläggningsdefinitionernas &XML;-format. Det beskriver huvudkomponenterna och deras betydelse och användning, och går djupare in i detaljerna för detekteringsreglerna.</para>

<para
>Den formella definitionen, också kallad en <acronym
>DTD</acronym
>, lagras i filen <filename
>language.dtd</filename
> som ska finnas installerad på ditt system i katalogen <filename
>$<envar
>KDEDIR</envar
>/share/apps/kate/syntax</filename
>.</para>

<variablelist
> <title
>Huvudkomponenter i &kate;s färgläggningsdefinitioner</title
> <varlistentry
> <term
>Sektionen General</term
> <listitem
> <para
>Sektionen General (allmänt) innehåller information om kommentarformat för språket som beskrivs, och definierar om nyckelord beror på skiftläget.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>Highlighting</term
> <listitem
> <para
>Sektionen Highlighting (färgläggning) innehåller all data som krävs för att analysera och visa texten. Det här omfattar:</para
> <variablelist
> <varlistentry
> <term
>ItemDatas</term
> <listitem
><para
>Innehåller ItemData-element, som vart och ett definierar en stil.</para
></listitem
> </varlistentry
> <varlistentry
> <term
>Listor med nyckelord</term
> <listitem
> <para
>Varje lista har ett namn, och kan innehålla hur många element som helst.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>Contexts</term
> <listitem
> <para
>Innehåller sammanhang, som återigen innehåller syntaxdetekteringsregler.</para
> </listitem
> </varlistentry
> </variablelist
> </listitem
> </varlistentry
> </variablelist>

</sect2>

</sect1>

<sect1 id="kate-highlight-rules-detailled">
<title
>Regler för syntaxdetektering</title>

<para
>Den här sektionen beskriver reglerna för syntaxdetektering.</para>

<para
>Varje regel kan matcha noll eller flera tecken i början av strängen som de ska testa. Om regeln matchar, så tilldelas de matchande tecknen stilen eller <emphasis
>egenskapen</emphasis
> som definieras av regeln. En regel kan också begära att det nuvarande sammanhanget byts.</para>

<para
><emphasis
>Egenskap</emphasis
> och <emphasis
>sammanhang</emphasis
> är gemensamma för alla regler.</para>

<para
>En regel ser ut så här:</para>

<programlisting
>&lt;Regelnamn attribute=&quot;(identifierare)&quot; context=&quot;(identifierare|ordning)&quot; [regelspecifika egenskaper] /&gt;</programlisting>

<para
>Ordet <emphasis
>attribute</emphasis
> identifierar stilen som ska användas för tecken som matchar med namn eller index, och <emphasis
>context</emphasis
> identifierar sammanhanget som ska användas i fortsättningen.</para>

<para
><emphasis
>Egenskapen</emphasis
> kan antingen identifieras med namn, eller med sitt index, som börjar på noll, i gruppen ItemDatas.</para>

<para
><emphasis
>Sammanhanget</emphasis
> kan identifieras av:</para>

<itemizedlist
> <listitem
> <para
>En <emphasis
>identifierare</emphasis
>, för närvarande bara ett index, som börjar på noll, i sammanhangsgruppen.</para
> </listitem
> <listitem
> <para
>En <emphasis
>ordning</emphasis
> som talar om att färgläggningen ska stanna kvar i det nuvarande sammanhanget (<userinput
>#stay</userinput
>), eller gå tillbaka till det föregående sammanhanget som använts i strängen (<userinput
>#pop</userinput
>).</para
> <para
>För att gå tillbaka flera steg, kan nyckelordet #pop upprepas: <userinput
>#pop#pop#pop</userinput
></para
> </listitem
> </itemizedlist>

<para
>Vissa regler kan ha <emphasis
>delregler</emphasis
>, bara utvärderas om huvudregeln matchar. Hela den matchande strängen kommer att få egenskapen som definieras av huvudregeln. En regel med en delregel ser ut så här:</para>

<programlisting>
&lt;Regelnamn (egenskaper)&gt;
  &lt;Delregelnamn (egenskaper) /&gt;
  ...
&lt;/Regelnamn&gt;
</programlisting>


<para
>Regelspecifika egenskaper varierar och beskrivs i följande lista.</para
> 

<variablelist
> <title
>Reglerna i detalj</title
> <varlistentry
> <term
>DetectChar</term
> <listitem
> <para
>Detektera ett enda specifikt tecken. Används ofta för att till exempel hitta slutet på strängar inom citationstecken.</para
> <programlisting
>&lt;DetectChar char=&quot;(tecken)&quot; (gemensamma egenskaper) /&gt;</programlisting
> <para
>Egenskapen <userinput
>char</userinput
> definierar tecknet som ska matchas.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>Detect2Chars</term
> <listitem
> <para
>Detektera två angivna tecken i en definierad ordning.</para
> <programlisting
>&lt;Detect2Chars char=&quot;(tecken)&quot; char1=&quot;(tecken)&quot; (gemensamma egenskaper) /&gt;</programlisting
> <para
>Egenskapen <userinput
>char</userinput
> definierar det första tecknet som ska matcha, <userinput
>char1</userinput
> det andra.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>AnyChar</term
> <listitem
> <para
>Detektera ett tecken i en angiven teckenmängd.</para
> <programlisting
>&lt;AnyChar String=&quot;(sträng)&quot; (gemensamma egenskaper) /&gt;</programlisting
> <para
>Egenskapen <userinput
>String</userinput
> definierar teckenmängden.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>StringDetect</term
> <listitem
> <para
>Detektera en sträng exakt.</para
> <programlisting
>&lt;StringDetect String=&quot;(sträng)&quot; [insensitive=&quot;TRUE|FALSE;&quot;] (gemensamma egenskaper) /&gt;</programlisting
> <para
>Egenskapen <userinput
>String</userinput
> definierar strängen som ska matcha. Egenskapen <userinput
>insensitive</userinput
> (okänslig) är normalt <userinput
>FALSE</userinput
> (FALSK) och skickas med till strängjämförelsefunktionen. Om värdet är <userinput
>TRUE</userinput
> (SANT) så används en jämförelse som inte bryr sig om skiftläge.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>RegExpr</term
> <listitem
> <para
>Matchar med ett reguljärt uttryck.</para
> <programlisting
>&lt;RegExpr String=&quot;(sträng)&quot; [insensitive=&quot;TRUE|FALSE;&quot;] [minimal=&quot;TRUE|FALSE&quot;] (gemensamma egenskaper) /&gt;</programlisting
> <para
>Egenskapen <userinput
>String</userinput
> definierar det reguljära uttrycket.</para
> <para
>Egenskapen <userinput
>insensitive</userinput
> (okänslig) är normalt <userinput
>FALSE</userinput
> (FALSK) och skickas med det reguljära uttrycket.</para
> <para
>Egenskapen <userinput
>minimal</userinput
> är normalt <userinput
>FALSE</userinput
> (FALSK) och skickas med det reguljära uttrycket.</para
> <para
>Eftersom reglerna alltid matchas mot början av den nuvarande strängen, så anger ett reguljärt uttryck som börjar med en hatt (<literal
>^</literal
>) att regeln bara ska matchas mot radens början.</para
> <para
>Se <link linkend="regular-expressions"
>Reguljära uttryck</link
> för mer information om dem.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>Keyword</term
> <listitem
> <para
>Detektera ett nyckelord från en angiven lista.</para
> <programlisting
>&lt;keyword String=&quot;(listnamn)&quot; (gemensamma egenskaper) /&gt;</programlisting
> <para
>Egenskapen <userinput
>String</userinput
> identifierar en lista på nyckelord med namn. En lista med det namnet måste finnas.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>Int</term
> <listitem
> <para
>Detektera ett  heltal.</para
> <para
><programlisting
>&lt;Int (gemensamma egenskaper) /&gt;</programlisting
></para
> <para
>Den här regeln har inga specifika egenskaper. Delregler används typiskt för att detektera kombinationer av <userinput
>L</userinput
> och <userinput
>U</userinput
> efter talet, som anger heltalstypen i programkod.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>Float</term
> <listitem
> <para
>Detektera ett  flyttal.</para
> <para
><programlisting
>&lt;Float (gemensamma egenskaper)
/&gt;</programlisting
></para
> <para
>Den här regeln har inga specifika egenskaper.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>HlCOct</term
> <listitem
> <para
>Detektera en oktal talrepresentation.</para
> <para
><programlisting
>&lt;HlCOct (gemensamma egenskaper) /&gt;</programlisting
></para
> <para
>Den här regeln har inga specifika egenskaper.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>HlCHex</term
> <listitem
> <para
>Detektera en hexadecimal talrepresentation.</para
> <para
><programlisting
>&lt;Int (gemensamma egenskaper) /&gt;</programlisting
></para
> <para
>Den här regeln har inga specifika egenskaper.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>HlCStringChar</term
> <listitem
> <para
>Detektera ett undantaget tecken.</para
> <para
><programlisting
>&lt;HlCStringChar (gemensamma egenskaper)
/&gt;</programlisting
></para
> <para
>Den här regeln har inga specifika egenskaper.</para
> <para
>Det matchar bokstavsrepresentationer av osynliga tecken som ofta används i programkod, till exempel <userinput
>\n</userinput
> (nyrad) eller <userinput
>\t</userinput
> (tabulator).</para
> <para
>Följande tecken matchar om de följer ett bakstreck (<literal
>\</literal
>): <userinput
>abefnrtv&quot;'?</userinput
>. Dessutom matchar undantagna hexadecimala tal, som till exempel <userinput
>\xff</userinput
> och undantagna oktala tal, till exempel <userinput
>\033</userinput
>.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>RangeDetect</term
> <listitem
> <para
>Detektera en sträng med definierade start- och sluttecken.</para
> <programlisting
>&lt;RangeDetect char=&quot;(tecken)&quot;  char1=&quot;(tecken)&quot; (gemensamma egenskaper) /&gt;</programlisting
> <para
><userinput
>char</userinput
> definierar tecknet som inleder intervallet, och <userinput
>char1</userinput
> tecknet som avslutar intervallet.</para
> <para
>Användbar för att till exempel detektera små strängar inom citationstecken och liknande, men observera att eftersom färgläggningen arbetar med en rad i taget, så hittar det här inte strängar som fortsätter på nästa rad.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>LineContinue</term
> <listitem
> <para
>Matchar vid radens slut.</para
> <programlisting
>&lt;LineContinue (gemensamma egenskaper) /&gt;</programlisting
> <para
>Den här regeln har inga specifika egenskaper.</para
> <para
>Den här regeln är användbar för att byta sammanhang vid radslut.</para
> </listitem
> </varlistentry
> </variablelist>

</sect1>

</appendix>

