&Freek.de.Kruijf;

# Werken met syntaxisaccentuering

## Overzicht

Accentuering van syntaxis zorgt er voor dat de tekstbewerker automatisch tekst in verschillende stijlen/kleuren laat zien, afhankelijk van de functie van de tekenreeks in relatie tot het doel van het bestand. In broncode voor programma's bijvoorbeeld, kunnen besturingsstatements vet worden weergegeven, terwijl typen gegevens en commentaar een andere kleur krijgen dan de rest van de tekst. Dit verbetert de leesbaarheid van de tekst enorm en helpt de auteur dus om efficiënter en productiever te zijn.

Een Perl-functie, weergegeven met syntaxisaccentuering.

Een Perl-functie, weergegeven met syntaxisaccentuering.

Dezelfde Perl-functie, weergegeven zonder accentuering.

Dezelfde Perl-functie, weergegeven zonder accentuering.

Welke van de twee voorbeelden is gemakkelijker te lezen?

&kate; komt met een flexibel, te configureren en capabel systeem voor accentuering van de syntaxis en de standaard distributie levert definities voor een brede reeks van programmeer-, script- en markup-talen en andere formaten van tekstbestanden. Bovendien kunt u uw eigen definities leveren in eenvoudige &XML;-bestanden.

&kate; zal automatisch de juiste syntaxisregels detecteren wanneer u een bestand opent, gebaseerd op het &MIME;-type van het bestand, bepaald door zijn extensie of, als deze er geen heeft, de inhoud. Ervaart u een foute keuze, dan kunt u handmatig de te gebruiken syntaxis instellen uit het menu Hulpmiddelen Accentuering.

De stijlen en kleuren die door elke definitie voor syntaxisaccentuering kan worden ingesteld met het tabblad Accentuering van tekststijlen van de Instellingendialoog, terwijl de &MIME;-types waarvoor ze gebruikt zouden moeten worden, worden behandeld door het tabblad Modi & bestandstypen.

Syntaxisaccentuering is er om de leesbaarheid van correcte tekst te verhogen, maar u kunt het niet vertrouwen om uw tekst te valideren. Tekst markeren voor syntaxis is moeilijk, afhankelijk van het formaat dat u gebruikt en in sommige gevallen zullen de auteurs van de syntaxisregels trots zijn als 98% van de tekst juist wordt weergegeven, hoewel u meestal een zeldzame stijl nodig hebt om de onjuiste 2% tegen te komen.

U kunt bijgewerkte of extra definities voor syntaxisaccentuering downloaden van de &kate;-website door op de knop Accentueringsbestanden downloaden... te klikken in het tabblad Modi & bestandstypen van de Instellingendialoog.

## Het systeem voor syntaxisaccentuering van &kate;

Deze sectie zal het mechanisme voor syntaxisaccentuering van &kate; in meer detail laten zien. Het is er voor u als u er iets over wilt weten of als u syntaxis-definities wilt veranderen of aanmaken.

### Hoe het werkt

Wanneer u een bestand opent, is een van de eerste dingen die de tekstbewerker &kate; doet, het detecteren van welke syntaxis-definitie voor het bestand moet worden gebruikt. Terwijl de tekst van het bestand wordt ingelezen en terwijl u het intypt, zal het systeem voor syntaxisaccentuering de tekst analyseren met de regels gedefinieerd door de syntaxis-definitie en het markeren waar verschillende contexten en stijlen beginnen en eindigen.

Tijdens het typen van het document wordt de nieuwe tekst geanalyseerd en direct gemarkeerd, zodat wanneer u een teken verwijdert die is gemarkeerd als het begin van einde van een context, de stijl van de tekst er omheen overeenkomstig wijzigt.

De syntaxis-definities die door het systeem voor syntaxisaccentuering van &kate; wordt gebruikt zijn &XML;-bestanden, bevattende

- Regels voor detecteren van de rol van tekst, georganiseerd in contextblokken

- Lijsten met sleutelwoorden

- Definities van stijl-items

Bij het analyseren van de tekst worden de detectieregels geëvalueerd in de volgorde waarin ze zijn gedefinieerd en, als het begin van de huidige tekenreeks overeenkomt met een regel, wordt de gerelateerde context gebruikt. Het beginpunt in de tekst wordt verplaatst naar het eindpunt waarop die regel overeenkomt en een nieuwe ronde van de regels begint, beginnend in de context ingesteld door de overeenkomende regel.

### Regels

De detectieregels zijn het hart van het detectiesysteem voor accentuering. Een regel is een tekenreeks, teken of reguliere expressie waartegen de tekst die wordt geanalyseerd wordt vergeleken. Het bevat informatie over welke stijl te gebruiken voor het overeenkomende deel van de tekst. Het kan de in werking zijnde context van het system omschakelen ofwel naar een expliciet genoemde context of naar de vorige context in gebruik bij de tekst.

Regels zijn georganiseerd in contextgroepen. Een contextgroep wordt gebruikt voor hoofdtekstconcepten in het formaat, bijvoorbeeld tekenreeksen tussen aanhalingstekens of commentaarblokken in broncode van programma's. Dit zorgt ervoor dat het accentueringssysteem niet door alle regels hoeft te doorlopen wanneer het niet noodzakelijk is en dat sommige tekenreeksen in de tekst anders kan worden behandeld afhankelijk van de huidige context.

Contexts kunnen dynamisch worden gegenereerd om het gebruik van specifieke gegevens bij toestanden in regels toe te staan.

### Contextstijlen en sleutelwoorden

In sommige programmeertalen worden door de compiler (het programma dat de broncode vertaald in een binair uitvoerbaar programma) gehele getallen anders behandeld dan drijvendekommagetallen en er kunnen tekens zijn met een speciale betekenis in een tekenreeks tussen aanhalingsteken. In zulke gevallen, is het zinvol om ze verschillend weer te geven in hun omgeving zodat ze gemakkelijk zijn te identificeren bij het lezen van de tekst. Dus zelfs als ze speciale contexts representeren, kunnen ze als zodanig door het systeem voor accentuering van syntaxis worden gezien, zodat ze gemarkeerd kunnen worden voor een anders weergeven.

Een syntaxis-definitie kan zoveel stijlen bevatten als nodig is om de concepten van het formaat te dekken waarvoor het wordt gebruikt.

In vele formaten zijn er lijsten woorden die een specifiek concept representeren. Bijvoorbeeld in programmeertalen, zijn controlstatements een concept, namen van gegevenstypen een ander en ingebouwde functies van de taal een derde. Het accentueringssysteem voor syntaxis van &kate; kan zulke lijsten gebruiken om woorden in de tekst te detecteren en te markeren om concepten te accentueren van de tekstformaten.

### Standaard stijlen

Als u in &kate; een C++ bronbestand, een &Java; bronbestand en een HTML document opent, dan zult u zien dat zelfs wanneer de formaten verschillend zijn en dus verschillende woorden voor een speciale behandeling worden gekozen, de gebruikte kleuren hetzelfde zijn. Dit komt omdat &kate; een voorgedefinieerde lijst met standaard stijlen heeft die worden gebruikt bij de individuele definities van syntaxis.

Dit maakt het gemakkelijk om gelijkvormige concepten in verschillende tekstformaten te herkennen. Bijvoorbeeld: commentaar is in bijna elk programma, script of markup-language aanwezig en wanneer ze in alle talen op dezelfde manier worden weergegeven, dan hoeft u niet meer na te denken om ze in de tekst te herkennen.

Alle stijlen in een syntaxisdefinitie gebruiken een van de standaard stijlen. Een paar syntaxisdefinities gebruiken meer stijlen dan er standaarden zijn, dus als u een format vaak gebruikt kan het het waard zijn om de instellingendialoog te starten om te zien of sommige concepten dezelfde stijl gebruiken. Er is bijvoorbeeld slechts één standaard stijl voor tekenreeksen, maar de Perl programmeertaal werkt met twee typen tekenreeksen, u kunt het accentueren verbeteren door ze enigszins verschillend in te stellen. Alle beschikbare standaard stijlen zullen later worden verklaard.

## Het &XML;-formaat voor definitie van accentuering

### Overzicht

Deze sectie is een overzicht van het formaat van 'Highlight Definition &XML;'. Het zal de hoofdcomponenten, hun betekenis en gebruik beschrijven op basis van een klein voorbeeld. De volgende sectie zal in detail de accentueringdetectieregels uitleggen.

De formele definitie, ook bekend als, de DTD wordt opgeslagen in het bestand `language.dtd` die op uw systeem geïnstalleerd zou moeten zijn in de map `$`KDEDIR`/share/apps/katepart/syntax`.

#### Hoofdsecties van bestanden voor accentueringsdefinities van &kate;

Een bestand voor accentuering bevat een kop die de XML-versie en het doctype instelt:

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE language SYSTEM "language.dtd">

De basis van het definitiebestand is het element `language`. Beschikbare attributen zijn:

  Vereiste attributen:

  `name` stelt de naam van de taal in. Het verschijnt nadien in de menu's en dialogen.

  `section` specificeert de categorie.

  `extensions` definieert bestandsextensies, zoals "*.cpp;*.h"

  Optionele attributen:

  `mimetype` associeert bestanden gebaseerd op &MIME;-type.

  `version` specificeert de huidige versie van het definitiebestand.

  `kateversion` specificeert de laatst ondersteunde versie van &kate;.

  `casesensitive` definieert of de sleutelwoorden gevoelig zijn voor hoofd- en kleine letters.

  `priority` is nodig als een andere bestand met accentueringsdefinities dezelfde extensies gebruiken. De hogere prioriteit wint.

  `author` bevat de naam van de auteur en zijn/haar e-mailadres.

  `license` bevat de licentie, gewoonlijk LGPL, Artistic, GPL en andere.

  `hidden` definieert of de naam moet verschijnen in de menu's van &kate;.

  De volgende regel kan er als volgt uitzien:

      <language name="C++" version="1.00" kateversion="2.4" section="Sources" extensions="*.cpp;*.h" />

Vervolgens komt het element `highlighting`, die het optionele element `list` bevat en de vereiste elementen `contexts` en `itemDatas`.

  Elementen `list` bevatten een lijst met sleutelwoorden. In dit geval zijn de sleutelwoorden class en const. U mag zoveel elementen 'list' toevoegen als nodig is.

  Het element `contexts` bevat alle contexten. De eerste context is per definitie het begin van de accentuering. Er zijn twee regels in de context Normal Text, die overeenkomt met de lijst sleutelwoorden met de naam somename en een regel die een aanhalingsteken detecteert en de context om schakelt naar String. Om meer over regels te leren, leest u het volgende hoofdstuk.

  Het derde deel is het element `itemDatas`. Het bevat alle kleur- en lettertypestijlen nodig voor de contexten en regels. In dit voorbeeld worden `itemData` Normal Text, String en Keyword gebruikt.

      <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>

Het laatste deel van een accentueringsdefinitie is de optionele sectie `general`. Het mag informatie over sleutelwoorden, vouwen van code, commentaar en inspringen bevatten.

  De sectie `comment` definieert met welke tekenreeks een enkele regel commentaar wordt aangegeven. U kunt ook commentaar op meerdere regels definiëren met multiLine met het additionele attribuut end. Dit wordt gebruikt als de gebruiker op de bijbehorende sneltoets voor comment/uncomment drukt.

  De sectie `keywords` definieert of lijsten met sleutelwoorden onderscheid maken tussen hoofd- en kleine letters. Andere attributen zullen later worden verklaard.

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

### De secties in detail

Dit deel zal alle beschikbare attributen voor contexten beschrijven, itemDatas, sleutelwoorden, commentaar, code opvouwen en inspringen.

Het element `context` behoort tot de groep `contexts`. Een context zelf definieert context specifieke regels zoals wat zou moeten gebeuren als het systeem voor accentuering het eind van een regel bereikt. Beschikbare attributen zijn:

  `name` de contextnaam. Regels zullen deze naam gebruiken om de context te specificeren om om te schakelen als de regel overeenkomt.

  `lineEndContext` definieert de context waarnaar het systeem voor accentuering omschakelt als het het einde van een regel wordt bereikt. Dit kan of de naam van een andere context zijn, `#stay` om de context niet om te schakelen (&eg;. niets doen) of `#pop` wat de oorzaak is van het verlaten van deze context. Het is mogelijk om bijvoorbeeld `#pop#pop#pop` te gebruiken om drie keer te poppen.

  `lineBeginContext` definieert de context als een begin van een regel wordt bereikt. Standaard: #stay.

  `fallthrough` definieert of het systeem voor accentuering omschakelt naar de context gespecificeerd in fallthroughContext als er geen regel overeenkomt. Standaard: false.

  `fallthroughContext` specificeert de volgende context als geen regel overeenkomt.

  `dynamic` indien true, dan herinnert de context tekenreeksen/plaatshouders opgeslagen door dynamische regels. Dit is bijvoorbeeld nodig voor HIER-documenten. Standaard: false.

Het element `itemData` is in de groep `itemDatas`. Het definieert de lettertypestijl en kleuren. Het is dus mogelijk om uw eigen stijlen en kleuren te definiëren, wij bevelen echter aan om, indien mogelijk, bij de standaard stijlen te blijven zodat de gebruiker altijd dezelfde zal zien in verschillende talen. Soms is er echter geen andere manier en is het noodzakelijk de kleur- en lettertypeattributen te wijzigen. De attributen naam en defStyleNum zijn vereist, de andere optioneel. Beschikbare attributen zijn:

  `name` stelt de naam van het itemData in. Contexten en regels zullen deze naam in hun attribuut attribute gebruiken om naar een itemData te verwijzen.

  `defStyleNum` definieert welke standaard stijl te gebruiken. Beschikbare standaard stijlen worden later in detail verklaard.

  `color` definieert een kleur. Geldige formaten zijn '#rrggbb' of '#rgb'.

  `selColor` definieert de selectiekleur.

  `italic` indien true, de tekst zal cursief worden.

  `bold` indien true, de tekst zal vet worden.

  `underline` indien true, de tekst zal onderstreept worden.

  `strikeout` indien true, door de tekst zal een streep worden gezet.

  `spellChecking` indien true, zal er spellingcontrole worden gedaan op de tekst, anders zal het worden genegeerd bij spellingcontrole.

Het element `keywords` in de groep `general` definieert sleutelwoordeigenschappen. Beschikbare attributen zijn:

  `casesensitive` mag true of false zijn. Indien true, worden alle sleutelwoorden met onderscheid tussen hoofd- en kleine letters met elkaar vergeleken

  `weakDeliminator` is een lijst met tekens die niet als scheiding tussen woorden werken. De punt `'.'` bijvoorbeeld is een scheider van woorden. Als een sleutelwoord in een `list` een punt bevat, dan zal die alleen overeenkomen als u de punt als een zwak scheidingsteken specificeert.

  `additionalDeliminator` definieert extra scheidingstekens.

  `wordWrapDeliminator` definieert tekens waarna een regel mag afbreken.

  Standaard scheidingstekens en regelafbreektekens zijn de tekens `.():!+,-<=>%&*/;?[]^{|}~\`, spatie (`' '`) en tab (`'\t'`).

The element `comment` in the group `comments` defines comment properties which are used for Tools Comment and Tools Uncomment. Available attributes are:

  `name` is either singleLine or multiLine. If you choose multiLine the attributes end and region are required.

  `start` definieert de gebruikte tekenreeks om commentaar te laten beginnen. In C++ zou dit "/*" zijn.

  `end` definieert de gebruikte tekenreeks om commentaar te laten eindigen. In C++ zou dit "*/" zijn.

  `region` should be the name of the foldable multiline comment. Assume you have beginRegion="Comment" ... endRegion="Comment" in your rules, you should use region="Comment". This way uncomment works even if you do not select all the text of the multiline comment. The cursor only must be in the multiline comment.

Het element `folding` in de groep `general` definieert de eigenschappen van het invouwen van broncode. Beschikbare attributen zijn:

  `indentationsensitive` if true, the code folding markers will be added indentation based, like in the scripting language Python. Usually you do not need to set it, as it defaults to false.

The element `indentation` in the group `general` defines which indenter will be used, however we strongly recommend to omit this element, as the indenter usually will be set by either defining a File Type or by adding a mode line to the text file. If you specify an indenter though, you will force a specific indentation on the user, which he might not like at all. Available attributes are:

  `mode` is the name of the indenter. Available indenters right now are: normal, cstyle, haskell, lilypond, lisp, python, ruby and xml.

### Beschikbare standaard stijlen

Standaard stijlen zijn al verklaard, als een korte samenvatting: Standaard stijlen zijn voorgedefinieerde lettertypen- en kleurstijlen.

Dus is hier alleen de lijst met beschikbare standaard stijlen:

  `dsNormal`, gebruikt voor normale tekst.

  `dsKeyword`, gebruikt voor trefwoorden.

  `dsDataType`, gebruikt voor gegevenstypen.

  `dsDecVal`, used for decimal values.

  `dsBaseN`, used for values with a base other than 10.

  `dsFloat`, used for float values.

  `dsChar`, used for a character.

  `dsString`, used for strings.

  `dsComment`, used for comments.

  `dsOthers`, used for 'other' things.

  `dsAlert`, used for warning messages.

  `dsFunction`, used for function calls.

  `dsRegionMarker`, used for region markers.

  `dsError`, used for error highlighting and wrong syntax.

## Highlight Detection Rules

This section describes the syntax detection rules.

Each rule can match zero or more characters at the beginning of the string they are test against. If the rule matches, the matching characters are assigned the style or attribute defined by the rule, and a rule may ask that the current context is switched.

A rule looks like this:

    <RuleName attribute="(identifier)" context="(identifier)" [rule specific attributes] />

The attribute identifies the style to use for matched characters by name, and the context identifies the context to use from here.

The context can be identified by:

- An identifier, which is the name of the other context.

- An order telling the engine to stay in the current context (`#stay`), or to pop back to a previous context used in the string (`#pop`).

  To go back more steps, the #pop keyword can be repeated: `#pop#pop#pop`

Some rules can have child rules which are then evaluated only if the parent rule matched. The entire matched string will be given the attribute defined by the parent rule. A rule with child rules looks like this:

    <RuleName (attributes)>
      <ChildRuleName (attributes) />
      ...
    </RuleName>

Rule specific attributes varies and are described in the following sections.

### Common attributes

All rules have the following attributes in common and are available whenever `(common attributes)` appears. attribute and context are required attributes, all others are optional.

- attribute: An attribute maps to a defined itemData.

- context: Specify the context to which the highlighting system switches if the rule matches.

- beginRegion: Start a code folding block. Default: unset.

- endRegion: Close a code folding block. Default: unset.

- lookAhead: If true, the highlighting system will not process the matches length. Default: false.

- firstNonSpace: Match only, if the string is the first non-whitespace in the line. Default: false.

- column: Match only, if the column matches. Default: unset.

### Dynamic rules

Some rules allow the optional attribute `dynamic` of type boolean that defaults to false. If dynamic is true, a rule can use placeholders representing the text matched by a regular expression rule that switched to the current context in its `string` or `char` attributes. In a `string`, the placeholder %N (where N is a number) will be replaced with the corresponding capture N from the calling regular expression. In a `char` the placeholder must be a number N and it will be replaced with the first character of the corresponding capture N from the calling regular expression. Whenever a rule allows this attribute it will contain a (dynamic).

- dynamic: may be (true|false).

### The Rules in Detail

DetectChar

  Detect a single specific character. Commonly used for example to find the ends of quoted strings.

      <DetectChar char="(character)" (common attributes) (dynamic) />

  The `char` attribute defines the character to match.

Detect2Chars

  Detect two specific characters in a defined order.

      <Detect2Chars char="(character)" char1="(character)" (common attributes) (dynamic) />

  The `char` attribute defines the first character to match, `char1` the second.

AnyChar

  Detect one character of a set of specified characters.

      <AnyChar String="(string)" (common attributes) />

  The `String` attribute defines the set of characters.

StringDetect

  Detect an exact string.

      <StringDetect String="(string)" [insensitive="true|false"] (common attributes) (dynamic) />

  The `String` attribute defines the string to match. The `insensitive` attribute defaults to false and is passed to the string comparison function. If the value is true insensitive comparing is used.

StringDetect

  Detect an exact string but additionally require word boundaries like a dot `'.'` or a whitespace on the beginning and the end of the word. Think of `\b<string>\b` in terms of a regular expression, but it is faster than the rule `RegExpr`.

      <WordDetect String="(string)" [insensitive="true|false"] (common attributes) (dynamic) />

  The `String` attribute defines the string to match. The `insensitive` attribute defaults to false and is passed to the string comparison function. If the value is true insensitive comparing is used.

  Sinds: Kate 3.5 (KDE 4.5)

RegExpr

  Matches against a regular expression.

      <RegExpr String="(string)" [insensitive="true|false"] [minimal="true|false"] (common attributes) (dynamic) />

  The `String` attribute defines the regular expression.

  `insensitive` defaults to false and is passed to the regular expression engine.

  `minimal` defaults to false and is passed to the regular expression engine.

  Because the rules are always matched against the beginning of the current string, a regular expression starting with a caret (`^`) indicates that the rule should only be matched against the start of a line.

  See Regular Expressions for more information on those.

trefwoord

  Detect a keyword from a specified list.

      <keyword String="(list name)" (common attributes) />

  The `String` attribute identifies the keyword list by name. A list with that name must exist.

Int

  Detect an integer number.

      <Int (common attributes) (dynamic) />

  This rule has no specific attributes. Child rules are typically used to detect combinations of `L` and `U` after the number, indicating the integer type in program code. Actually all rules are allowed as child rules, though, the DTD only allows the child rule `StringDetect`.

  The following example matches integer numbers follows by the character 'L'.

      <Int attribute="Decimal" context="#stay" >
        <StringDetect attribute="Decimal" context="#stay" String="L" insensitive="true"/>
      </Int>

Drijvende komma

  Een drijvende kommagetal detecteren.

      <Drijvende komma (algemene attributen) />

  This rule has no specific attributes. `AnyChar` is allowed as a child rules and typically used to detect combinations, see rule `Int` for reference.

HlCOct

  Detect an octal point number representation.

      <HlCOct (common attributes) />

  This rule has no specific attributes.

HlCHex

  Detect a hexadecimal number representation.

      <HlCHex (common attributes) />

  This rule has no specific attributes.

HlCStringChar

  Detect an escaped character.

      <HlCStringChar (common attributes) />

  This rule has no specific attributes.

  It matches literal representations of characters commonly used in program code, for example `\n` (newline) or `\t` (TAB).

  The following characters will match if they follow a backslash (`\`): `abefnrtv"'?\`. Additionally, escaped hexadecimal numbers like for example `\xff` and escaped octal numbers, for example `\033` will match.

HlCChar

  Detect an C character.

      <HlCChar (gezamenlijke attributen) />

  This rule has no specific attributes.

  It matches C characters enclosed in a tick (Example: `'c'`). So in the ticks may be a simple character or an escaped character. See HlCStringChar for matched escaped character sequences.

RangeDetect

  Detect a string with defined start and end characters.

      <RangeDetect char="(teken)"  char1="(teken)" (gezamenlijke attributen) />

  `char` defines the character starting the range, `char1` the character ending the range.

  Useful to detect for example small quoted strings and the like, but note that since the highlighting engine works on one line at a time, this will not find strings spanning over a line break.

LineContinue

  Matches a backslash (`'\'`) at the end of a line.

      <LineContinue (gezamenlijke attributen) />

  This rule has no specific attributes.

  This rule is useful for switching context at end of line, if the last character is a backslash (`'\'`). This is needed for example in C/C++ to continue macros or strings.

IncludeRules

  Voeg regels in uit een ander context- of taalbestand.

      <IncludeRules context="contextlink" [includeAttrib="true|false"] />

  Het attribuut `context` definieert welke context in te voegen.

  If it a simple string it includes all defined rules into the current context, example:

      <IncludeRules context="anotherContext" />

  Als de tekenreeks met `##` begint dan zal het accenteringssysteem zoeken naar een andere taaldefinitie met de gegeven naam, bijvoorbeeld:

      <IncludeRules context="##C++" />

  If `includeAttrib` attribute is true, change the destination attribute to the one of the source. This is required to make for example commenting work, if text matched by the included context is a different highlight than the host context.

DetectSpaces

  Detecteert witruimte.

      <DetectSpaces (gezamenlijke attributen) />

  This rule has no specific attributes.

  Gebruik deze regel als u weet dat er verschillende witruimtes aankomen, bijvoorbeeld aan het begin van inspringende regels. Deze regel slaat alle witruimte in een keer over, in plaats van testen met meerdere regels en een voor een overslaan vanwege geen overeenkomst.

DetectIdentifier

  Detecteer tekenreeksen voor een identifier (als een reguliere expressie: [a-zA-Z_][a-zA-Z0-9_]*).

      <DetectIdentifier (gezamenlijke attributen) />

  This rule has no specific attributes.

  Gebruik deze regel om een reeks woordtekens in een keer over te slaan, in plaats van deze te testen met meerdere regels en ze ene voor een over te slaan omdat er geen overeenkomst is.

### Tips & trucs

Als u hebt begrepen hoe het omschakelen van context werkt zal het gemakkelijk zijn om definities voor accentuering te schrijven. Hoewel u zeer zorgvuldig moet controleren welke regel u kiest in welke situatie. Reguliere expressies zijn erg krachtig, maar ze zijn langzaam vergeleken met de andere regels. Dus zou u de volgende tips nog eens moeten bekijken.

- Als u alleen twee tekens wilt laten overeenkomen gebruik dan `Detect2Chars` in plaats van `StringDetect`. Hetzelfde is van toepassing op `DetectChar`.

- Regular expressions are easy to use but often there is another much faster way to achieve the same result. Consider you only want to match the character `'#'` if it is the first character in the line. A regular expression based solution would look like this:

      <RegExpr attribute="Macro" context="macro" String="^\s*#" />

  You can achieve the same much faster in using:

      <DetectChar attribute="Macro" context="macro" char="#" firstNonSpace="true" />

  If you want to match the regular expression `'^#'` you can still use `DetectChar` with the attribute `column="0"`. The attribute `column` counts character based, so a tabulator still is only one character.

- U kunt van contexts wisselen zonder tekens te bewerken. Neem aan dat u van context wilt wisselen wanneer u de tekenreeks `*/` tegenkomt, maar u moet die tekenreeks in de volgende context bewerken. De onderstaande regel zal overeenkomen en het attribuut `lookAhead` zal de overeenkomende tekenreeks voor accentuering bewaren voor de volgende context.

      <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" lookAhead="true" />

- Gebruik `DetectSpaces` als u weet dat er veel witruimtes zijn.

- Gebruik `DetectIdentifier` in plaats van de reguliere expressie `'[a-zA-Z_]\w*'`.

- Gebruik standaard stijlen wanneer dat kan. Op deze manier vindt de gebruiker een bekende omgeving.

- Kijk in andere XML-bestanden om te zien hoe andere mensen ingewikkelde regels implementeren.

- U kunt elk XML-bestand valideren door het commando `xmllint --dtdvalid language.dtd mySyntax.xml` te gebruiken.

- Als u complexe reguliere expressies erg vaak gebruikt dan kunt u ENTITIES gebruiken. Voorbeeld:

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE language SYSTEM "language.dtd"
      [
              <!ENTITY myref    "[A-Za-z_:][\w.:_-]*">
      ]>

  Nu kunt u &myref; gebruiken in plaats van de reguliere expressie.