Fremhævningsdefinitionen XML-format

Overblik

Dette afsnit er et overblik over fremhævningsdefinitionen XML-format. Det vil beskrive hovedkomponenterne og deres betydning og brug, baseret på et lille eksempel. Næste afsnit vil gå i detaljer angående fremhævningsdetektionsreglerne.

Den formelle definition, også kendt som DTD gemmes i filen language.dtd som skal være installeret på dit system i mappen $KDEDIR/share/apps/katepart/syntax.

Hovedafsnit i Kate's fremhævningsdefinitioner

En syntaksfremhævelsesfil indeholder et hoved som angiver XML-versionen og dokumenttypen:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language SYSTEM "language.dtd">
Definitionsfilens rod er elementet language. Følgende egenskaber er tilgængelige:

Egenskaber som kræves:

section angiver kategorien.

extensions definerer filendelser, som "*.cpp;*.h".

Valgfrie egenskaber:

mimetype tilknytter filer baseret på MIME-type.

version angiver definitionsfilens nuværende version.

kateversion angiver seneste version af Kate som understøttes.

casesensitive definerer om nøgleord er versalfølsomme eller ej.

priority kræves hvis en anden syntaksfremhævelsesfil bruger samme filendelse. Den højeste prioritet vinder.

author indeholder forfatterens navn og e-mail-adresse.

license indeholder licensen, oftest LGPL, Artistic, GPL og andre.

hidden definerer om navnet skal vises i Kates menuer.

Næste linje kan altså se sådan her ud:

<language name="C++" version="1.00" kateversion="2.4" section="Sources" extensions="*.cpp;*.h" />
Derefter kommer elementet highlighting som indeholder det valgfrie element list og de krævede elementer contexts og itemDatas.

list elementer indeholder en liste med nøgleord. I dette tilfælde er nøgleordene class og const. Du kan tilføje så mange lister som du behøver.

Elementet contexts indeholder alle sammenhænge. Den første sammenhæng er standard som start for fremhævelsen. Der er to regler i sammenhængen Normal Text som matcher listen af nøgleord med navnet et-navn og en regel som detekterer et citationstegn og skifter sammenhæng til string. For at lære dig mere om regler, læs næste kapitel.

Den tredje del er elementet itemDatas. Det indeholder alle farver og skrifttypestiler som behøves af sammenhængen og reglerne. I dette eksempel bruges itemData Normal Text, String og Keyword.

<highlighting>
    <list name="somename">
      <item> class </item>
      <item> const </item>
    </list>
    <contexts>
      <context attribute="Normal Text" lineEndContext="#pop" name="Normal Text" >
        <keyword attribute="Keyword" context="#stay" String="somename" />
        <DetectChar attribute="String" context="string" char="&quot;" />
      </context>
      <context attribute="String" lineEndContext="#stay" name="string" >
        <DetectChar attribute="String" context="#pop" char="&quot;" />
      </context>
    </contexts>
    <itemDatas>
      <itemData name="Normal Text" defStyleNum="dsNormal" />
      <itemData name="Keyword" defStyleNum="dsKeyword" />
      <itemData name="String" defStyleNum="dsString" />
    </itemDatas>
  </highlighting>
Den sidste del af fremhævelsesdefinitionen er det valgfrie afsnit general. Det kan indeholde information om nøgleord, kodefoldning, kommentarer og indentering.

Afsnittet comment definerer den streng som kommentarer på en linje indledes med. Du kan også definere kommentarer på flere linjer med multiLine og den yderligere egenskab end. Dette er nyttigt når brugeren trykker på genvejstaster som svarer til kommentér/afkommentér.

Afsnittet keywords definerer om lister med nøgleord er versalfølsomme eller ej. Andre egenskaber forklares senere.

<general>
    <comments>
      <comment name="singleLine" start="#"/>
    </comments>
    <keywords casesensitive="1"/>
  </general>
</language>

Afsnittene i detalje

Denne del beskriver alle tilgængelige egenskaber for sammenhæng, itemData, nøgleord, kommentarer, kodefoldning og indentering.

Elementet context hører til gruppen contexts. Selve sammenhænget definerer sammenhængsspecifikke regler, såsom hvad der skal ske hvis fremhævelsessystemet når slutningen på en linje. Tilgængelige egenskaber er:

name er sammenhængens navn. Regler bruger navnet til at angive sammenhængen at skifte til hvis reglen matcher.

lineEndContext definerer sammenhængen som fremhævelsessystemet skifter til hvis det når til et linjebrud. Det kan enten være navnet på en andet sammenhæng, #stay for ikke at skifte sammenhæng (dvs. gøre ingenting) eller #pop som gør at sammenhængen forlades. Det er for eksempel muligt at bruge #pop#pop#pop for at gå tre skridt tilbage.

lineBeginContext definerer sammenhængen hvis begyndelsen på en linje mødes. Standard: #stay.

fallthroughdefinerer om fremhævelsessystemet skifter til sammenhængen som angives i fallthroughContext hvis ingen regel matcher. Standard: false.

fallthroughContext angiver næste sammenhæng hvis ingen regel matcher.

dynamic hvis true husker sammenhængen strenge/pladsmarkører som gemt af dynamiske regler. Det behøves for eksempel for HERE-dokumenter. Standard: false.

Elementet itemData er i gruppen itemDatas. Det definerer skrifttypestilen og farverne. Det er altså muligt at definere egne stiler og farver, men vi anbefaler dog at du holder dig til standardstil om muligt, så brugeren altid ser samme farver brugt i forskellige sprog. Sommetider er der dog ingen anden måde, og det er nødvendigt at ændre farve- og tegnegenskaber. Egenskabens navn og defStyleNum kræves, øvrige er valgfrie. Tilgængelige egenskaber er:

name angiver navnet på itemData. Sammenhæng og regler bruger navnet i egenskaben attribute til at referere til itemData.

defStyleNum definerer hvilken standardstil som skal bruges. Tilgængelige standardstiler forklares i detalje senere.

color definerer en farve. Gyldige formater er '#rrggbb' eller '#rgb'.

selColor definerer markeringens farve.

italic hvis true, er teksten kursiv.

bold hvis true, er teksten i fede typer.

underline hvis true, er teksten understreget.

strikeout hvis true, er teksten overstreget.

Elementet keywords i gruppen general definerer nøgleordenes egenskaber. Tilgængelige egenskaber er:

casesensitive kan være true eller false. Hvis det er true, matches alle nøgleord versalfølsomt.

weakDeliminator er en liste med tegn som ikke fungerer som ordgrænser. Punktum '.' er for eksempel en ordgrænse. Antag at et nøgleord i en list indeholder et punktum, så matcher det kun hvis du angiver at punktummet er en svag afgrænser.

additionalDeliminator definerer yderligere grænser.

wordWrapDeliminator definerer tegn som et linjeskift kan ske efter.

Standardgrænser og linjeskiftgrænser er tegnene .():!+,-<=>%&*/;?[]^{|}~\, mellemrum (' ') og tabulator ('\t').

Elementet comment i gruppen comments definerer kommentaregenskaber som bruges for Værktøj->Kommentér og Værktøj->Afkommentér. Tilgængelige egenskaber er:

name er enten singleLine eller multiLine. Hvis du vælger multiLine kræves egenskaberne end og region.

start definerer strengen som bruges til at indlede en kommentar. I C++ ville det være "/*".

end definerer strengen som bruges til at afslutte en kommentar. I C++ ville det være "*/".

region skal være navnet på den foldelige kommentar på flere linjer. Antag at du har beginRegion="Comment" ... endRegion="Comment" i dine regler, så skal du bruge region="Comment". På denne måde fungerer afkommentering også selvom du ikke markerer al tekst i en kommentar på flere linjer. Markøren skal blot være inde i multilinjekommentaren.

Elementet folding i gruppen general definerer kodefoldningsegenskaber. Tilgængelige egenskaber er:

indentationsensitive hvis true tilføjes kodefoldningsmarkørerne baseret på indentering, ligesom i scriptsproget Python. Som regel behøver du ikke angive det, eftersom det har standardværdien false.

Elementet indentation i gruppen general definerer hvilken identerer som skal bruges, selvom vi stærkt anbefaler at udelade elementet, eftersom intentereren oftest angives ved at definere en filtype eller ved at tilføje tilstandslinjer i tekstfilen. Hvis du alligevel angiver en indenterer, tvinger du brugeren til at bruge en specifik indentering, hvilket måske ikke værdsættes over hovedet. Tilgængelige egenskaber er:

mode er navnet på indentereren. Indenterere som for øjeblikket er tilgængelige er:normal, cstyle, csands, xml, python og varindent.

Tilgængelige standardstiler

Standardstiler er allerede forklaret. En kort sammenfatning: Standardstiler er fordefinerede stiler for skrifttype og farver.

Så her er altså blot listen med tilgængelige standardstiler:

dsNormal, bruges til normal tekst.

dsKeyword, bruges til nøgleord.

dsDataType, bruges til datatyper.

dsDecVal, bruges til decimale værdier.

dsBaseN, bruges til værdier med en basis andet end 10.

dsFloat, bruges til decimaltal.

dsChar, bruges til et tegn.

dsString, bruges til strenge.

dsComment, bruges til kommentarer.

dsOthers, bruges til 'andre' ting.

dsAlert, bruges til advarselsmeddelelser.

dsFunction, bruges til funktionskald.

dsRegionMarker, bruges til områdesmarkeringer.

dsError, bruges til fremhævning af fejl og forkert syntaks.