dwww Home | Show directory contents | Find package

<!-- auto-generate scripting documentation (kwrite-devel@kde.org Re: [kate] doc/kate: document most of the new scripts in 4.10) -->
<chapter id="dev">
<chapterinfo>
<authorgroup>
<author
>&TC.Hollingsworth; &TC.Hollingsworth.mail;</author>
&Freek.de.Kruijf; 
</authorgroup>
</chapterinfo>
<title
>&katepart; uitbreiden</title>

<sect1 id="dev-intro">
<title
>Inleiding</title>

<para
>Zoals elke geavanceerde tekstbewerkercomponent biedt &katepart; een aantal manieren om zijn functionaliteit uit te breiden. U kunt <link linkend="dev-scripting"
>eenvoudige scripts schrijven om functionaliteit toe te voegen met &javascript;</link
>. Tenslotte, wanneer u &kate;, hebt uitgebreid, bent u welkom om <ulink url="https://kate-editor.org/join-us/"
>met ons mee te doen</ulink
> en uw verbeteringen te delen met de wereld!</para>

</sect1>

<sect1 id="highlight">
<title
>Werken met syntaxisaccentuering</title>

<sect2 id="highlight-overview">

<title
>Overzicht</title>

<para
>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.</para>

<mediaobject>
<imageobject
><imagedata format="PNG" fileref="highlighted.png"/></imageobject>
<textobject
><phrase
>Een C++-functie, weergegeven met syntaxisaccentuering.</phrase
></textobject>
<caption
><para
>Een C++-functie, weergegeven met syntaxisaccentuering.</para>
</caption>
</mediaobject>

<mediaobject>
<imageobject
><imagedata format="PNG" fileref="unhighlighted.png"/></imageobject>
<textobject
><phrase
>Dezelfde C++-functie, weergegeven zonder accentuering.</phrase
></textobject>
<caption
><para
>Dezelfde C++-functie, weergegeven zonder accentuering.</para
></caption>
</mediaobject>

<para
>Welke van de twee voorbeelden is gemakkelijker te lezen?</para>

<para
>&kappname; 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.</para>

<para
>&kappname; 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 <menuchoice
><guimenu
>Hulpmiddelen</guimenu
><guisubmenu
>Accentuering</guisubmenu
></menuchoice
>.</para>

<para
>De stijlen en kleuren die door elke definitie voor syntaxisaccentuering kan worden ingesteld met het tabblad <link linkend="prefcolors-highlighting-text-styles"
>Accentuering van tekststijlen</link
> van de <link linkend="config-dialog"
>Instellingendialoog</link
>, terwijl de &MIME;-types en bestandsextensies waarvoor ze gebruikt zouden moeten worden, worden behandeld door het tabblad <link linkend="pref-open-save-modes-filetypes"
>Modi &amp; bestandstypen</link
>.</para>

<note>
<para
>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.</para>
</note>

</sect2>

<sect2 id="katehighlight-system">

<title
>Het systeem voor syntaxisaccentuering van &kappname;</title>

<para
>Deze sectie zal het mechanisme voor syntaxisaccentuering van &kappname; 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.</para>

<sect3 id="katehighlight-howitworks">

<title
>Hoe het werkt</title>

<para
>Wanneer u een bestand opent, is een van de eerste dingen die de tekstbewerker &kappname; 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.</para>

<para
>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.</para>

<para
>De syntaxis-definities die door het systeem voor syntaxisaccentuering van &kappname; wordt gebruikt zijn &XML;-bestanden, bevattende <itemizedlist>
<listitem
><para
>Regels voor detecteren van de rol van tekst, georganiseerd in contextblokken</para
></listitem>
<listitem
><para
>Lijsten met sleutelwoorden</para
></listitem>
<listitem
><para
>Definities van stijl-items</para
></listitem>
</itemizedlist>
</para>

<para
>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.</para>

</sect3>

<sect3 id="highlight-system-rules">
<title
>Regels</title>

<para
>De detectieregels zijn het hart van het detectiesysteem voor accentuering. Een regel is een tekenreeks, teken of <link linkend="regular-expressions"
>reguliere expressie</link
> 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.</para>

<para
>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. </para>

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

</sect3>

<sect3 id="highlight-context-styles-keywords">
<title
>Contextstijlen en sleutelwoorden</title>

<para
>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.</para>

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

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

</sect3>

<sect3 id="kate-highlight-system-default-styles">
<title
>Standaard stijlen</title>

<para
>Als u in &kappname; 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 &kappname; een voorgedefinieerde lijst met standaard stijlen heeft die worden gebruikt bij de individuele definities van syntaxis.</para>

<para
>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.</para>

<tip>
<para
>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 <link linkend="kate-highlight-default-styles"
>beschikbare standaard stijlen</link
> zullen later worden verklaard.</para>
</tip>

</sect3>

</sect2>

<sect2 id="katehighlight-xml-format">
<title
>Het &XML;-formaat voor definitie van accentuering</title>

<sect3>
<title
>Overzicht</title>

<para
>&kappname; gebruikt het framework  voor accentuering van sysntaxis uit &kde-frameworks;. De standaard &XML;-bestanden voor accentuering geleverd met &kappname; zijn standaard gecompileerd in de bibliotheek voor accentuering van syntaxis. </para>

<para
>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.</para>

<para
>De formele definitie, ook bekend als <acronym
>XSD</acronym
> kunt u vinden in <ulink url="https://commits.kde.org/syntax-highlighting?path=data/schema"
>Opslagruimte voor accentuering van syntaxis</ulink
> in het bestand <filename
>taal.xsd</filename
> </para>

<para
>Zelf gemaakte <filename class="extension"
>.xml</filename
> bestanden voor definitie van accentuering zijn geplaatst in <filename class="directory"
>org.kde.syntax-highlighting/syntax/</filename
> in uw gebruikersmap te vinden met <userinput
><command
>qtpaths</command
><option
>--paths GenericDataLocation</option
></userinput
> die gebruikelijk<filename class="directory"
><envar
>$HOME</envar
>/.local/share/</filename
> en <filename class="directory"
>/usr/share/</filename
> zijn. </para>

<para
>Voor pakketten uit Flatpak en Snap zal de bovenstaande map niet werken omdat de gegevenslocatie verschillend is voor elke toepassing. In een Flatpak toepassing is de locatie van aangepaste &XML;-bestanden gewoonlijk <filename class="directory"
><envar
>$HOME</envar
>/.var/app/<replaceable
>flatpak-pakketnaam</replaceable
>/data/org.kde.syntax-highlighting/syntax/</filename
> en in een Snap toepassing is die locatie <filename class="directory"
><envar
>$HOME</envar
>/snap/<replaceable
>snap-pakketnaam</replaceable
>/current/.local/share/org.kde.syntax-highlighting/syntax/</filename
>. </para>

<para
>Op &Windows; zijn deze bestanden gelokaliseerd in <filename
>%USERPROFILE%&#92;AppData&#92;Local&#92;org.kde.syntax-highlighting&#92;syntax</filename
>. <replaceable
>%USERPROFILE%</replaceable
> wordt gewoonlijk <filename
>C:&#92;Users&#92;<replaceable
>gebruiker</replaceable
></filename
>.</para>

<para
>Samenvattend, voor de meeste configuraties is de map met aangepaste &XML;-bestanden als volgt:</para>

<informaltable>
<tgroup cols="2">
<tbody>
<row>
<entry
>Voor lokale gebruiker</entry>
<entry
><filename class="directory"
><envar
>$HOME</envar
>/.local/share/org.kde.syntax-highlighting/syntax/</filename
></entry>
</row>
<row>
<entry
>Voor alle gebruikers</entry>
<entry
><filename class="directory"
>/usr/share/org.kde.syntax-highlighting/syntax/</filename
></entry>
</row>
<row>
<entry
>Voor Flatpak pakketten</entry>
<entry
><filename class="directory"
><envar
>$HOME</envar
>/.var/app/<replaceable
>flatpak-package-name</replaceable
>/data/org.kde.syntax-highlighting/syntax/</filename
></entry>
</row>
<row>
<entry
>Voor Snap pakketten</entry>
<entry
><filename class="directory"
><envar
>$HOME</envar
>/snap/<replaceable
>snap-package-name</replaceable
>/current/.local/share/org.kde.syntax-highlighting/syntax/</filename
></entry>
</row>
<row>
<entry
>Op &Windows;</entry>
<entry
><filename
>%USERPROFILE%&#92;AppData&#92;Local&#92;org.kde.syntax-highlighting&#92;syntax</filename
></entry>
</row>
</tbody>
</tgroup>
</informaltable>

<para
>Als meerdere bestanden bestaan voor dezelfde taal zal het bestand met het hoogste <userinput
>versie</userinput
>-attribuut in het <userinput
>taal</userinput
>-element worden geladen.</para>

<variablelist>
<title
>Hoofdsecties van bestanden voor accentueringsdefinities van &kappname;</title>

<varlistentry>
<term
>Een bestand voor accentuering bevat een kop die de &XML;-versie instelt:</term>
<listitem>
<programlisting
>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
</programlisting>
</listitem>
</varlistentry>

<varlistentry>
<term
>De basis van het definitiebestand is het element <userinput
>language</userinput
>. Beschikbare attributen zijn:</term>

<listitem>
<para
>Vereiste attributen:</para>
<para
><userinput
>name</userinput
> stelt de naam van de taal in. Het verschijnt nadien in de menu's en dialogen.</para>
<para
><userinput
>section</userinput
> specificeert de categorie.</para>
<para
><userinput
>extensions</userinput
> definieert bestandsextensies, zoals &quot;*.cpp;*.h&quot;</para>
<para
><userinput
>versie</userinput
> specificeert de huidige revisie van het definitiebestand in termen van een geheel getal. Wanneer u een geaccentueerd definitiebestand wijzigt, verzeker u ervan dat dit getal wordt verhoogt.</para>
<para
><userinput
>kateversion</userinput
> specificeert de laatst ondersteunde versie van &kappname;.</para>

<para
>Optionele attributen:</para>
<para
><userinput
>mimetype</userinput
> associeert ket &MIME;-type van bestanden.</para>
<para
><userinput
>casesensitive</userinput
> definieert of de sleutelwoorden gevoelig zijn voor hoofd- en kleine letters.</para>
<para
><userinput
>priority</userinput
> is nodig als een andere bestand met accentueringsdefinities dezelfde extensies gebruiken. De hogere prioriteit wint.</para>
<para
><userinput
>author</userinput
> bevat de naam van de auteur en zijn/haar e-mailadres.</para>
<para
><userinput
>license</userinput
> bevat de licentie, gewoonlijk de MIT licentie voor nieuwe bestanden met accentuering van syntaxis.</para>
<para
><userinput
>style</userinput
> bevat de geleverde taal en wordt gebruikt door de indenteerders voor het attribuut <literal
>required-syntax-style</literal
>.</para>
<para
><userinput
>indenter</userinput
> definieert welke indenteerder standaard gebruikt zal worden. Beschikbare indenterders zijn: <emphasis
>ada, normal, cstyle, cmake, haskell, latex, lilypond, lisp, lua, pascal, python, replicode, ruby</emphasis
> en <emphasis
>xml</emphasis
>.</para>
<para
><userinput
>hidden</userinput
> definieert of de naam moet verschijnen in de menu's van &kappname;.</para>
<para
>De volgende regel kan er als volgt uitzien:</para>
<programlisting
>&lt;language name=&quot;C++&quot; version=&quot;1&quot; kateversion=&quot;2.4&quot; section=&quot;Sources&quot; extensions=&quot;*.cpp;*.h&quot; /&gt;
</programlisting>
</listitem>
</varlistentry>


<varlistentry>
<term
>Vervolgens komt het element <userinput
>highlighting</userinput
>, die het optionele element <userinput
>list</userinput
> bevat en de vereiste elementen <userinput
>contexts</userinput
> en <userinput
>itemDatas</userinput
>.</term>
<listitem>
<para
>Elementen <userinput
>list</userinput
> bevatten een lijst met sleutelwoorden. In dit geval zijn de sleutelwoorden <emphasis
>class</emphasis
> en <emphasis
>const</emphasis
>. U mag zoveel elementen 'list' toevoegen als nodig is.</para>
<para
>Sinds &kde-frameworks; 5.53 kan een lijst sleutelwoorden uit een andere lijst of taal/bestand invoegen met gebruik van het element <userinput
>include</userinput
>. <userinput
>##</userinput
> wordt gebruikt om de naam van de lijst en de naam van de taaldefinitie te scheiden, op dezelfde manier als in de regel <userinput
>IncludeRules</userinput
>. Dit is nuttig om duplicaten van lijsten met sleutelwoorden te vermijden, als u het nodig hebt om de sleutelwoorden van een andere taal/bestand in te voegen. De lijst <emphasis
>anderenaam</emphasis
> bevat het sleutelwoord <emphasis
>str</emphasis
> en alle sleutelwoorden van de lijst <emphasis
>types</emphasis
>, die behoren bij de taal <emphasis
>ISO C++</emphasis
>.</para>
<para
>Het element <userinput
>contexts</userinput
> bevat alle contexten. De eerste context is per definitie het begin van de accentuering. Er zijn twee regels in de context <emphasis
>Normal Text</emphasis
>, die overeenkomt met de lijst sleutelwoorden met de naam <emphasis
>somename</emphasis
> en een regel die een aanhalingsteken detecteert en de context om schakelt naar <emphasis
>String</emphasis
>. Om meer over regels te leren, leest u het volgende hoofdstuk.</para>
<para
>Het derde deel is het element <userinput
>itemDatas</userinput
>. Het bevat alle kleur- en lettertypestijlen nodig voor de contexten en regels. In dit voorbeeld worden <userinput
>itemData</userinput
> <emphasis
>Normal Text</emphasis
>, <emphasis
>String</emphasis
> en <emphasis
>Keyword</emphasis
> gebruikt. </para>
<programlisting
>&lt;highlighting&gt;
    &lt;list name=&quot;eennaam&quot;&gt;
      &lt;item&gt;class&lt;/item&gt;
      &lt;item&gt;const&lt;/item&gt;
    &lt;/list&gt;
    &lt;list name=&quot;othername&quot;&gt;
      &lt;item&gt;str&lt;/item&gt;
      &lt;include&gt;types##ISO C++&lt;/include&gt;
    &lt;/list&gt;
    &lt;contexts&gt;
      &lt;context attribute=&quot;Normal Text&quot; lineEndContext=&quot;#pop&quot; name=&quot;Normal Text&quot; &gt;
        &lt;keyword attribute=&quot;Keyword&quot; context=&quot;#stay&quot; String=&quot;eennaam&quot; /&gt;
        &lt;keyword attribute=&quot;Keyword&quot; context=&quot;#stay&quot; String=&quot;anderrnaam&quot; /&gt;
        &lt;DetectChar attribute=&quot;String&quot; context=&quot;string&quot; char=&quot;&amp;quot;&quot; /&gt;
      &lt;/context&gt;
      &lt;context attribute=&quot;String&quot; lineEndContext=&quot;#stay&quot; name=&quot;string&quot; &gt;
        &lt;DetectChar attribute=&quot;String&quot; context=&quot;#pop&quot; char=&quot;&amp;quot;&quot; /&gt;
      &lt;/context&gt;
    &lt;/contexts&gt;
    &lt;itemDatas&gt;
      &lt;itemData name=&quot;Normal Text&quot; defStyleNum=&quot;dsNormal&quot; /&gt;
      &lt;itemData name=&quot;Keyword&quot; defStyleNum=&quot;dsKeyword&quot; /&gt;
      &lt;itemData name=&quot;String&quot; defStyleNum=&quot;dsString&quot; /&gt;
    &lt;/itemDatas&gt;
  &lt;/highlighting&gt;
</programlisting>
</listitem>
</varlistentry>

<varlistentry>
<term
>Het laatste deel van een definitie voor accentuering is de optionele sectie <userinput
>general</userinput
>. Het mag informatie over sleutelwoorden, invouwen van code, commentaar, inspringen, lege regels en spellingcontrole bevatten.</term>

<listitem>
<para
>De sectie <userinput
>comment</userinput
> definieert met welke tekenreeks een enkele regel commentaar wordt aangegeven. U kunt ook commentaar op meerdere regels definiëren met <emphasis
>multiLine</emphasis
> met het additionele attribuut <emphasis
>end</emphasis
>. Dit wordt gebruikt als de gebruiker op de bijbehorende sneltoets voor <emphasis
>comment/uncomment</emphasis
> drukt.</para>
<para
>De sectie <userinput
>keywords</userinput
> definieert of lijsten met sleutelwoorden onderscheid maken tussen hoofd- en kleine letters. Andere attributen zullen later worden verklaard.</para>
<para
>De andere secties, <userinput
>folding</userinput
>, <userinput
>emptyLines</userinput
> en <userinput
>spellchecking</userinput
> zijn gewoonlijk niet nodig en worden later uitgelegd.</para>
<programlisting
>&lt;general&gt;
    &lt;comments&gt;
      &lt;comment name="singleLine" start="#"/&gt;
      &lt;comment name="multiLine" start="###" end="###" region="CommentFolding"/&gt;
    &lt;/comments&gt;
    &lt;keywords casesensitive="1"/&gt;
    &lt;folding indentationsensitive="0"/&gt;
    &lt;emptyLines&gt;
      &lt;emptyLine regexpr="\s+"/&gt;
      &lt;emptyLine regexpr="\s*#.*"/&gt;
    &lt;/emptyLines&gt;
    &lt;spellchecking&gt;
      &lt;encoding char="&#225;" string="\&#39;a"/&gt;
      &lt;encoding char="&#224;" string="\&#96;a"/&gt;
    &lt;/spellchecking&gt;
  &lt;/general&gt;
&lt;/language&gt;
</programlisting>
</listitem>
</varlistentry>

</variablelist>


</sect3>

<sect3 id="kate-highlight-sections">
<title
>De secties in detail</title>
<para
>Dit deel zal alle beschikbare attributen voor contexten beschrijven, itemDatas, sleutelwoorden, commentaar, code opvouwen en inspringen.</para>

<variablelist>
<varlistentry>
<term
>Het element <userinput
>context</userinput
> behoort tot de groep <userinput
>contexts</userinput
>. 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:</term>


<listitem>
<para
><userinput
>name</userinput
> geeft de contextnaam aan. Regels zullen deze naam gebruiken om de context te specificeren om om te schakelen als de regel overeenkomt.</para>

<para
><userinput
>lineEndContext</userinput
> definieert de context waarnaar het systeem voor accentuering omschakelt als het einde van een regel wordt bereikt. Dit kan of de naam van een andere context zijn, <userinput
>#stay</userinput
> om de context niet om te schakelen (&eg;. niets doen) of <userinput
>#pop</userinput
> wat de oorzaak is van het verlaten van deze context. Het is mogelijk om bijvoorbeeld <userinput
>#pop#pop#pop</userinput
> te gebruiken om drie keer te poppen of zelfs <userinput
>#pop#pop!AndereContext</userinput
> om twee keer te poppen en om te schakelen naar de context genaamd <userinput
>AndereContext</userinput
>. Het is ook mogelijk om om te schakelen naar een context die behoort bij een andere taaldefinitie, op dezelfde manier als in de regels <userinput
>IncludeRules</userinput
>, &eg; <userinput
>SomeContext##JavaScript</userinput
>. Merk op dat het niet mogelijk is om deze omschakeling van context te gebruiken in combinatie met <userinput
>#pop</userinput
>, bijvoorbeeld, <userinput
>#pop!SomeContext##JavaScript</userinput
> is niet geldig. Omschakelen van context worden ook beschreven in <xref linkend="kate-highlight-rules-detailled"/>.</para>
<para
><userinput
>lineEmptyContext</userinput
> definieert de context als een lege regel wordt bereikt. De nomenclatuur van omschakelen van context is hetzelfde als eerder beschreven in <emphasis
>lineEndContext</emphasis
>. Standaard: #stay.</para>
<para
><userinput
>fallthroughContext</userinput
> specificeert de volgende context waarnaar om te schakelen als er geen regel overeenkomt. De nomenclatuur van context omschakelen is hetzelfde als eerder beschreven in <emphasis
>lineEndContext</emphasis
>. Standaard: #stay.</para>
<para
><userinput
>fallthrough</userinput
> definieert of het accentueringssysteem naar de context schakelt gespecificeerd in <userinput
>fallthroughContext</userinput
> als geen regel overeenkomt. Merk op dat sinds &kde; &frameworks; 5.62 dit attribuut is afgekeurd met voorkeur voor <userinput
>fallthroughContext</userinput
>, omdat als het attribuut <userinput
>fallthroughContext</userinput
> aanwezig is het impliciet wordt verstaan dat de waarde van <userinput
>fallthrough</userinput
> <emphasis
>true</emphasis
> is. Standaard: <emphasis
>false</emphasis
>.</para>
<para
><userinput
>noIndentationBasedFolding</userinput
> schakelt op inspringen gebaseerd invouwen in de context uit. Als dit invouwen niet is geactiveerd, is dit attribuut nutteloos. Dit is gedefinieerd in het element <emphasis
>folding</emphasis
> van de groep <emphasis
>general</emphasis
>. Standaard: <emphasis
>false</emphasis
>.</para>
</listitem>
</varlistentry>


<varlistentry>
<term
>Het element <userinput
>itemData</userinput
> is in de groep <userinput
>itemDatas</userinput
>. 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 anderen zijn optioneel. Beschikbare attributen zijn:</term>

<listitem>
<para
><userinput
>name</userinput
> stelt de naam van het itemData in. Contexten en regels zullen deze naam in hun attribuut <emphasis
>attribute</emphasis
> gebruiken om naar een itemData te verwijzen.</para>
<para
><userinput
>defStyleNum</userinput
> definieert welke standaard stijl te gebruiken. Beschikbare standaard stijlen worden later in detail verklaard.</para>
<para
><userinput
>color</userinput
> definieert een kleur. Geldige formaten zijn '#rrggbb' of '#rgb'.</para>
<para
><userinput
>selColor</userinput
> definieert de selectiekleur.</para>
<para
><userinput
>italic</userinput
> indien <emphasis
>true</emphasis
>, de tekst zal cursief worden.</para>
<para
><userinput
>bold</userinput
> indien <emphasis
>true</emphasis
>, de tekst zal vet worden.</para>
<para
><userinput
>underline</userinput
> indien <emphasis
>true</emphasis
>, de tekst zal onderstreept worden.</para>
<para
><userinput
>strikeout</userinput
> indien <emphasis
>true</emphasis
>, door de tekst zal een streep worden gezet.</para>
<para
><userinput
>spellChecking</userinput
> indien <emphasis
>true</emphasis
>, de tekst zal gecontroleerd worden op spelling.</para>
</listitem>
</varlistentry>


<varlistentry>
<term
>Het element <userinput
>keywords</userinput
> in de groep <userinput
>general</userinput
> definieert sleutelwoordeigenschappen. Beschikbare attributen zijn:</term>

<listitem>
<para
><userinput
>casesensitive</userinput
> mag <emphasis
>true</emphasis
> of <emphasis
>false</emphasis
> zijn. Indien <emphasis
>true</emphasis
>, worden alle sleutelwoorden met onderscheid tussen hoofd- en kleine letters met elkaar vergeleken</para>
<para
><userinput
>weakDeliminator</userinput
> is een lijst met tekens die niet als scheiding tussen woorden werken. Bijvoorbeeld: de punt <userinput
>'.'</userinput
> is een scheider van woorden. Als een sleutelwoord in een <userinput
>list</userinput
> een punt bevat, dan zal die alleen overeenkomen als u de punt als een zwak scheidingsteken specificeert.</para>
<para
><userinput
>additionalDeliminator</userinput
> definieert extra scheidingstekens.</para>
<para
><userinput
>wordWrapDeliminator</userinput
> definieert tekens waarna een regel mag afbreken.</para>
<para
>Standaard scheidingstekens en regelafbreektekens zijn de tekens <userinput
>.():!+,-&lt;=&gt;%&amp;*/;?[]^{|}~\</userinput
>, spatie (<userinput
>' '</userinput
>) en tab (<userinput
>'\t'</userinput
>).</para>
</listitem>
</varlistentry>


<varlistentry>
<term
>Het element <userinput
>comment</userinput
> in de groep <userinput
>comments</userinput
> definieert eigenschappen van commentaar die gebruikt worden voor <menuchoice
><guimenu
>Hulpmiddelen</guimenu
><guimenuitem
>Commentaar</guimenuitem
></menuchoice
>,<menuchoice
><guimenu
>Hulpmiddelen</guimenu
> <guimenuitem
>Commentaar omschakelen</guimenuitem
></menuchoice
>. Beschikbare attributen zijn:</term>

<listitem>
<para
><userinput
>name</userinput
> is ofwel <emphasis
>singleLine</emphasis
> of <emphasis
>multiLine</emphasis
>. Als u <emphasis
>multiLine</emphasis
> kiest zijn de attributen <emphasis
>end</emphasis
> en <emphasis
>region</emphasis
> vereist.</para>
<para
><userinput
>start</userinput
> definieert de gebruikte tekenreeks om commentaar te laten beginnen. In C++ zou dit &quot;/*&quot; zijn. Dit attribute is vereist voor de typen <emphasis
>multiLine</emphasis
> en <emphasis
>singleLine</emphasis
>.</para>
<para
><userinput
>end</userinput
> definieert de gebruikte tekenreeks om commentaar te laten eindigen. In C++ zou dit &quot;*/&quot; zijn. Alleen dit attribuut is beschikbaar en is vereist voor commentaar van het type <emphasis
>multiLine</emphasis
>.</para>
<para
><userinput
>region</userinput
> moet de naam van het opvouwbare multiregel commentaar. U hebt <emphasis
>beginRegion="Comment"</emphasis
> ... <emphasis
>endRegion="Comment"</emphasis
> in uw regels, u zou <emphasis
>region="Comment"</emphasis
> moeten gebruiken. Op deze manier werkt verwijderen zelfs als u niet alle tekst van het multiregel commentaar selecteert. De cursor hoeft alleen in het multiregel commentaar te staan. Dit attribuut is alleen beschikbaar voor het type <emphasis
>multiLine</emphasis
>.</para>
<para
><userinput
>positie</userinput
> definieert waar het commentaar op een enkele regel wordt ingevoegd. Standaard wordt het commentaar op een enkele regel geplaatst aan het begin van de regel op kolom 0, maar als u <emphasis
>position="afterwhitespace"</emphasis
> gebruikt wordt het commentaar ingevoegd rechts na voorloopwitruimte, voor het eerste niet-witruimteteken. Dit is nuttig om commentaar juist in te voegen in talen waar inspringen belangrijk is, zoals Python of YAML. Dit attribuut is optioneel en de enig mogelijke waarde is <emphasis
>afterwhitespace</emphasis
>.</para>
</listitem>
</varlistentry>


<varlistentry>
<term
>Het element <userinput
>folding</userinput
> in de groep <userinput
>general</userinput
> definieert de eigenschappen van het invouwen van broncode. Beschikbare attributen zijn:</term>

<listitem>
<para
>De markeringen voor code opvouwen, als <userinput
>indentationsensitive</userinput
> <emphasis
>true</emphasis
> is, zullen worden toegevoegd gebaseerd op inspringen, zoals in de scripttaal Python. Het is gewoonlijk niet nodig dit in te stellen omdat de standaard <emphasis
>false</emphasis
> is.</para>
</listitem>
</varlistentry>


<varlistentry>
<term
>Het element <userinput
>emptyLine</userinput
> in de groep <userinput
>emptyLines</userinput
> definieert welke regels beschouwd moeten worden als lege regels. Dit biedt het wijzigen van het gedrag van het attribuut <emphasis
>lineEmptyContext</emphasis
> in de elementen <userinput
>context</userinput
>. Beschikbare attributen zijn:</term>

<listitem>
<para
><userinput
>regexpr</userinput
> definieert een reguliere expressie die behandeld zal worden als een lege regel. Standaard bevatten lege regels geen enkel teken, daarom voegt dit extra lege regels toe, als u, bijvoorbeeld, regels met spaties ook wil beschouwen als lege regels. In de meeste syntaxisdefinities is er geen noodzaak om dit attribuut in te zetten.</para>
</listitem>
</varlistentry>


<varlistentry>
<term
>Het element <userinput
>encoding</userinput
> in de groep <userinput
>spellchecking</userinput
> definieert een codering van tekens voor spellingcontrole. Beschikbare attributen:</term>

<listitem>
<para
><userinput
>char</userinput
> is een gecodeerd teken.</para>
<para
><userinput
>string</userinput
> is een serie tekens die gecodeerd zullen worden als het teken <emphasis
>char</emphasis
> in de spellingcontrole. In de taal LaTeX, bijvoorbeeld, representeert de tekenreeks <userinput
>\&quot;{A}</userinput
> het teken <userinput
>&#196;</userinput
>.</para>
</listitem>
</varlistentry>


</variablelist>


</sect3>

<sect3 id="kate-highlight-default-styles">
<title
>Beschikbare standaard stijlen</title>
<para
>Standaard stijlen zijn <link linkend="kate-highlight-system-default-styles"
>al verklaard</link
>, als een korte samenvatting: Standaard stijlen zijn voorgedefinieerde lettertypen- en kleurstijlen.</para>
<variablelist>
<varlistentry>
<term
>Algemene standaard stijlen:</term>
<listitem>
<para
><userinput
>dsNormal</userinput
>, wanneer geen speciale accentuering is vereist.</para>
<para
><userinput
>dsKeyword</userinput
>, ingebouwde sleutelwoorden van taal.</para>
<para
><userinput
>dsFunction</userinput
>, functie-aanroepen en definities.</para>
<para
><userinput
>dsVariable</userinput
>, indien van toepassing: namen van variabelen (&eg; $eenVar in PHP/Perl).</para>
<para
><userinput
>dsControlFlow</userinput
>, sleutelwoorden voor flowcontrol zoals if, else, switch, break, return, yield, ...</para>
<para
><userinput
>dsOperator</userinput
>, operatoren zoals + - * / :: &lt; &gt;</para>
<para
><userinput
>dsFunction</userinput
>, ingebouwde functies, klassen en objecten.</para>
<para
><userinput
>dsExtension</userinput
>, gezamenlijke extensies, zoals &Qt;-klassen en functies/macro's in C++ en Python.</para>
<para
><userinput
>dsPreprocessor</userinput
>, preprocessor statements of macro-definities.</para>
<para
><userinput
>dsAttribute</userinput
>, annotaties zoals @override en __declspec(...).</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>Standaard stijlen gerelateerd aan tekenreeksen</term>
<listitem>
<para
><userinput
>dsChar</userinput
>, enkele tekens, zoals 'x'.</para>
<para
><userinput
>dsSpecialChar</userinput
>, tekens met een speciale betekenis in tekenreeksen zoals escapes, substituties of regex-operatoren.</para>
<para
><userinput
>dsString</userinput
>, tekenreeksen zoals "hello world".</para>
<para
><userinput
>dsVerbatimString</userinput
>, letterlijke of raw-tekenreeksen zoals 'raw \backlash' in Perl, CoffeeScript en shells, evenals r'\raw' in Python.</para>
<para
><userinput
>dsSpecialString</userinput
>, SQL, regexes, HERE-docs, &latex; math mode, ...</para>
<para
><userinput
>dsImport</userinput
>, import, include, require van modulen.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>Standaard stijlen gerelateerd aan getallen:</term>
<listitem>
<para
><userinput
>dsDataType</userinput
>, ingebouwde typen gegevens zoals int, void, u64.</para>
<para
><userinput
>dsDecVal</userinput
>, decimale waarden.</para>
<para
><userinput
>dsBaseN</userinput
>, waarden met een andere basis dan 10.</para>
<para
><userinput
>dsFloat</userinput
>, drijvende-komma waarden.</para>
<para
><userinput
>dsConstant</userinput
>, ingebouwde en gebruikergedefineerde constanten zoals pi.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>Standaard stijlen gerelateerd aan commentaar en documentatie:</term>
<listitem>
<para
><userinput
>dsComment</userinput
>, commentaar.</para>
<para
><userinput
>dsDocumentation</userinput
>, /** Documentatie commentaar */ of """docstrings""".</para>
<para
><userinput
>dsAnnotation</userinput
>, documentatiecommando's zoals @param, @brief.</para>
<para
><userinput
>dsCommentVar</userinput
>, de in bovenstaande commando's gebruikte namen van variabelen, zoals "foobar" in @param foobar.</para>
<para
><userinput
>dsRegionMarker</userinput
>, gebiedsmarkeringen zoals//BEGIN, //END in commentaar.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>Andere standaard stijlen:</term>
<listitem>
<para
><userinput
>dsInformation</userinput
>, notities en tips zoals @note in doxygen.</para>
<para
><userinput
>dsWarning</userinput
>, waarschuwingen zoals @warning in doxygen.</para>
<para
><userinput
>dsAlert</userinput
>, speciale woorden zoals TODO, FIXME, XXXX.</para>
<para
><userinput
>dsError</userinput
>, accentuering van fouten en foute syntaxis.</para>
<para
><userinput
>dsOthers</userinput
>, wanneer niets anders past.</para>
</listitem>
</varlistentry>
</variablelist>

</sect3>

</sect2>

<sect2 id="kate-highlight-rules-detailled">
<title
>Detectieregels accentueren</title>

<para
>Deze paragraaf beschrijft de syntaxis van detectieregels.</para>

<para
>Elke regel kan nul of meer tekens aan het begin van de tekenreeks bevatten, waartegen ze worden getest. Als de regel overeenkomt worden de overeenkomstige tekens toegekend aan de stijl of <emphasis
>attribuut</emphasis
> gedefinieerd door de regel en een regel kan vragen de huidige context om te schakelen.</para>

<para
>Een regel ziet er als volgt uit:</para>

<programlisting
>&lt;RuleName attribute=&quot;(identifier)&quot; context=&quot;(identifier)&quot; [regelspecifieke attributen] /&gt;</programlisting>

<para
>Het <emphasis
>attribute</emphasis
> identificeert de te gebruiken stijl voor overeenkomende tekens bij naam en de <emphasis
>context</emphasis
> identificeert de vanaf hier te gebruiken context.</para>

<para
>De <emphasis
>context</emphasis
> kan worden geïdentificeerd door:</para>

<itemizedlist>
<listitem>
<para
>Een <emphasis
>identifier</emphasis
>, wat de naam is van de andere context.</para>
</listitem>
<listitem>
<para
>Een <emphasis
>opdracht</emphasis
> die de engine vertelt om in de huidige context te blijven (<userinput
>#stay</userinput
>) of terug te gaan naar een eerdere context met in de tekenreeks (<userinput
>#pop</userinput
>).</para>
<para
>Om meer stappen terug te gaan kan het #pop commando worden herhaald: <userinput
>#pop#pop#pop</userinput
></para>
</listitem>
<listitem>
<para
>Een <emphasis
>order</emphasis
> gevolgd door een uitroepteken (<emphasis
>!</emphasis
>) en een <emphasis
>identifier</emphasis
>, die er voor zorgt dat de engine eerst de order volgt en dan omschakelt naar de andere context, &eg; <userinput
>#pop#pop!AndereContext</userinput
>.</para>
</listitem>
<listitem>
<para
>Een <emphasis
>identifier</emphasis
>, die een contextnaam is, gevolgd door twee hashes (<userinput
>##</userinput
>) en een andere <emphasis
>identifier</emphasis
>, die de naam is van een taaldefinitie. Deze naamgeving is gelijk aan die gebruikt in <userinput
>IncludeRules</userinput
> regels en u toestaat om naar een context om te schakelen behorende bij een andere syntaxisaccentueringsdefinitie, bijv. <userinput
>SomeContext##JavaScript</userinput
>. Merk op dat het niet mogelijk is om deze omschakeling van context te gebruiken in combinatie met <userinput
>#pop</userinput
>, bijvoorbeeld, <userinput
>#pop!SomeContext##JavaScript</userinput
> is niet geldig.</para>
</listitem>
</itemizedlist>

<para
>Specifieke attributen van regels variëren en zijn beschreven in de volgende secties.</para>

<itemizedlist>
<title
>Gezamenlijke attributen</title>
<para
>Alle regels hebben de volgende gezamenlijke attributen en zijn beschikbaar wanneer <userinput
>(common attributes)</userinput
> verschijnt. <emphasis
>attribute</emphasis
> en <emphasis
>context</emphasis
> zijn vereiste attributen, alle andere zijn optioneel. </para>

<listitem>
<para
><emphasis
>attribute</emphasis
>: Een attribuut komt overeen met een gedefinieerd <emphasis
>itemData</emphasis
>.</para>
</listitem>
<listitem>
<para
><emphasis
>context</emphasis
>: Specificeer de context waarnaar het accentueringssysteem omschakelt als de regel overeenkomt.</para>
</listitem>
<listitem>
<para
><emphasis
>beginRegion</emphasis
>: Start een invouwblok voor code. Standaard: niet ingesteld.</para>
</listitem>
<listitem>
<para
><emphasis
>endRegion</emphasis
>: Sluit een invouwblok voor code. Standaard: niet ingesteld.</para>
</listitem>
<listitem>
<para
><emphasis
>lookAhead</emphasis
>: Indien <emphasis
>true</emphasis
>, zal het accentueringssysteem niet de overeenkomende lengte verwerken. Standaard: <emphasis
>false</emphasis
>.</para>
</listitem>
<listitem>
<para
><emphasis
>firstNonSpace</emphasis
>: Komt alleen overeen als de tekenreeks de eerste niet-witruimte in de regel. Standaard: <emphasis
>false</emphasis
>.</para>
</listitem>
<listitem>
<para
><emphasis
>column</emphasis
>: Komt alleen overeen als de kolom overeenkomt. Standaard: niet ingesteld.</para>
</listitem>
</itemizedlist>

<itemizedlist>
<title
>Dynamische regels</title>
<para
>Sommige regels staan het optionele attribuut <userinput
>dynamic</userinput
> toe van het type boolean dat standaard de waarde <emphasis
>false</emphasis
> heeft. Als dynamic <emphasis
>true</emphasis
> is kan een regel plaatshouders bevatten die de tekst representeren die overeenkomt met een <emphasis
>reguliere expressie</emphasis
> die schakelt naar de huidige context in zijn attributen <userinput
>tekenreeks</userinput
> of <userinput
>teken</userinput
>. In een <userinput
>tekenreeks</userinput
>wordt de plaatshouder <replaceable
>%N</replaceable
> (waar N een getal is) vervangen door de overeenkomstige vangst <replaceable
>N</replaceable
> uit de aanroepende reguliere expressie, beginnend bij 1. In een <userinput
>teken</userinput
> moet de plaatshouder een getal <replaceable
>N</replaceable
> zijn en het zal worden vervangen door het eerste teken van de overeenkomstige vangst <replaceable
>N</replaceable
> uit de aanroepende reguliere expressie. Wanneer een regel dit attribuut toestaat zal het een <emphasis
>(dynamic)</emphasis
> bevatten.</para>

<listitem>
<para
><emphasis
>dynamic</emphasis
>: kan <emphasis
>(true|false)</emphasis
> zijn.</para>
</listitem>
</itemizedlist>

<para
><userinput
>Hoe werkt het:</userinput
></para>

<para
>In de <link linkend="regular-expressions"
>reguliere expressies</link
> van de regels <userinput
>RegExpr</userinput
> wordt alle tekst binnen haakjes <userinput
>(PATTERN)</userinput
> gevangen en onthouden. Deze vangsten kunnen gebruikt worden in de context waarin het is gevangen, in de regels met het attribuut <userinput
>dynamic</userinput
> <emphasis
>true</emphasis
>, door <replaceable
>%N</replaceable
> (in <emphasis
>String</emphasis
>) of <replaceable
>N</replaceable
> (in <emphasis
>char</emphasis
>).</para>

<para
>Het is belangrijk om te noemen dat een tekst gevangen in een <userinput
>RegExpr</userinput
> regel alleen wordt opgeslagen voor in deze context, gespecificeerd in zijn <userinput
>context</userinput
>-attribuut.</para>

<tip>
<itemizedlist>

<listitem>
<para
>Als de vangsten niet gebruikt zullen worden, zowel door dynamische regels als in dezelfde reguliere expressie, dan zullen <userinput
>non-capturing groeperingen</userinput
> moeten worden gebruikt: <userinput
>(?:PATTERN)</userinput
></para>
<para
>De <emphasis
>lookahead</emphasis
> or <emphasis
>lookbehind</emphasis
> groeperingen zoals <userinput
>(?=PATROON)</userinput
>, <userinput
>(?!PATROON)</userinput
> of <userinput
>(?&lt;PATROON)</userinput
> worden niet gevangen. Zie voor meer informatie <link linkend="regular-expressions"
>Reguliere expressies</link
>.</para>
</listitem>

<listitem>
<para
>De gevangen groeperingen kunnen gebruikt worden binnen dezelfde reguliere expressie, met gebruik van respectievelijk <replaceable
>\N</replaceable
> in plaats van <replaceable
>%N</replaceable
>. Voor meer informatie, zie <link linkend="regex-capturing"
>Vangen van overeenkomende tekst (achterwaartse referenties)</link
> in <link linkend="regular-expressions"
>Reguliere expressies</link
>.</para>
</listitem>

</itemizedlist>
</tip>

<para
>Voorbeeld 1:</para>
<para
>In dit eenvoudige voorbeeld wordt de tekst overeenkomend met de reguliere expressie <userinput
>=*</userinput
> gevangen en ingevoegd in <replaceable
>%1</replaceable
> in de dynamische regel. Dit biedt het commentaar om te eindigen met dezelfde hoeveelheid van <userinput
>=</userinput
> als aan het begin. Dit komt overeen met tekst als: <userinput
>[[ commentaar ]]</userinput
>, <userinput
>[=[ commentaar ]=]</userinput
> of <userinput
>[=====[ commentaar ]=====]</userinput
>.</para>
<para
>Bovendien zijn de vangsten alleen beschikbaar in deze context <emphasis
>Multi-line commentaar</emphasis
>.</para>

<programlisting
>&lt;context name="Normaal" attribute="Normal Text" lineEndContext="#stay"&gt;
  &lt;RegExpr context="Multi-line Comment" attribute="Comment" String="\[(=*)\[" beginRegion="RegionComment"/&gt;
&lt;/context&gt;
&lt;context name="Multi-line Comment" attribute="Comment" lineEndContext="#stay"&gt;
  &lt;StringDetect context="#pop" attribute="Comment" String="]%1]" dynamic="true" endRegion="RegionComment"/&gt;
&lt;/context&gt;
</programlisting>

<para
>Voorbeeld 2:</para>
<para
>In de dynamische regel komt <replaceable
>%1</replaceable
> overeen met de vangst die overeenkomt met <userinput
>#+</userinput
> en <replaceable
>%2</replaceable
> met <userinput
>&amp;quot;+</userinput
>. Dit komt overeen met tekst als: <userinput
>#label""""inside the context""""#</userinput
>.</para>
<para
>Deze vangsten zullen niet beschikbaar zijn in andere contexten, zoals <emphasis
>OtherContext</emphasis
>, <emphasis
>FindEscapes</emphasis
> of <emphasis
>SomeContext</emphasis
>.</para>

<programlisting
>&lt;context name="SomeContext" attribute="Normal Text" lineEndContext="#stay"&gt;
  &lt;RegExpr context="#pop!NamedString" attribute="String" String="(#+)(?:[\w-]|[^[:ascii:]])(&amp;quot;+)"/&gt;
&lt;/context&gt;
&lt;context name="NamedString" attribute="String" lineEndContext="#stay"&gt;
  &lt;RegExpr context="#pop!OtherContext" attribute="String" String="%2(?:%1)?" dynamic="true"/&gt;
  &lt;DetectChar context="FindEscapes" attribute="Escape" char="\"/&gt;
&lt;/context&gt;
</programlisting>

<para
>Voorbeeld 3:</para>
<para
>Dit komt overeen met tekst zoals: <userinput
>Class::function&lt;T&gt;( ... )</userinput
>.</para>

<programlisting
>&lt;context name="Normal" attribute="Normal Text" lineEndContext="#stay"&gt;
  &lt;RegExpr context="FunctionName" lookAhead="true"
              String="\b([a-zA-Z_][\w-]*)(::)([a-zA-Z_][\w-]*)(?:&amp;lt;[\w\-\s]*&amp;gt;)?(\()"/&gt;
&lt;/context&gt;
&lt;context name="FunctionName" attribute="Normal Text" lineEndContext="#pop"&gt;
  &lt;StringDetect context="#stay" attribute="Class" String="%1" dynamic="true"/&gt;
  &lt;StringDetect context="#stay" attribute="Operator" String="%2" dynamic="true"/&gt;
  &lt;StringDetect context="#stay" attribute="Function" String="%3" dynamic="true"/&gt;
  &lt;DetectChar context="#pop" attribute="Normal Text" char="4" dynamic="true"/&gt;
&lt;/context&gt;
</programlisting>

<itemizedlist>
<title
>Lokale scheidingstekens</title>
<para
>Sommige regels bieden de optionele attributen <userinput
>weakDeliminator</userinput
> en <userinput
>additionalDeliminator</userinput
> die zijn gecombineerd met attributen met dezelfde tagnaam<userinput
>sleutelwoorden</userinput
>. Wanneer bijvoorbeeld <userinput
>'%'</userinput
> een zwak scheidingstekens van <userinput
>sleutelwoorden</userinput
> is, kan het alleen voor een regel een woordscheidingsteken worden door het in zijn attribuut <userinput
>additionalDeliminator</userinput
> te zetten. Wanneer een regel deze attributen biedt zal het een <emphasis
>(lokale scheidingstekens)</emphasis
> bevatten.</para>

<listitem>
<para
><emphasis
>weakDeliminator</emphasis
>: lijst met tekens die niet werken als woordscheidingstekens.</para>
</listitem>
<listitem>
<para
><emphasis
>additionalDeliminator</emphasis
> definieert extra scheidingstekens.</para>
</listitem>
</itemizedlist>

<sect3 id="highlighting-rules-in-detail">
<title
>De regels in detail</title>

<variablelist>
<varlistentry>
<term
>DetectChar</term>
<listitem>
<para
>Detecteert een enkele specifiek teken. Gewoonlijk gebruikt, bijvoorbeeld om het einde van een tekenreeks tussen accenten of aanhalingstekens.</para>
<programlisting
>&lt;DetectChar char=&quot;(teken)&quot; (common attributes) (dynamic) /&gt;</programlisting>
<para
>Het attribuut <userinput
>char</userinput
> definieert het teken dat moet overeenkomen.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>Detect2Chars</term>
<listitem>
<para
>Detecteert twee specifieke tekens in een gedefinieerde volgorde.</para>
<programlisting
>&lt;Detect2Chars char=&quot;(teken)&quot; char1=&quot;(teken)&quot; (gezamenlijke attributen) /&gt;</programlisting>
<para
>Het attribuut <userinput
>char</userinput
> definieert het eerste teken dat moet overeenkomen, <userinput
>char1</userinput
> the tweede.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>AnyChar</term>
<listitem>
<para
>Detecteer één teken van een set van gespecificeerde tekens.</para>
<programlisting
>&lt;AnyChar String=&quot;(tekenreeks)&quot; (common attributes) /&gt;</programlisting>
<para
>Het attribuut <userinput
>String</userinput
> definieert de set tekens.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>StringDetect</term>
<listitem>
<para
>Detecteert een exacte tekenreeks.</para>
<programlisting
>&lt;StringDetect String=&quot;(tekenreeks)&quot; [insensitive=&quot;true|false&quot;] (common attributes) (dynamic) /&gt;</programlisting>
<para
>Het attribuut <userinput
>String</userinput
> definieert de overeen te komen tekenreeks. Het attribuut <userinput
>insensitive</userinput
> is standaard <emphasis
>false</emphasis
> en wordt doorgegeven aan de vergelijkingsfunctie van de tekenreeks. Als de waarde <emphasis
>true</emphasis
> is wordt 'insensitive' vergelijking gebruikt.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>WordDetect</term>
<listitem>
<para
>Detecteert een exacte tekenreeks maar vereist extra woordgrenzen zoals een punt <userinput
>'.'</userinput
> of witruimte aan het begin en eind van het woord. Denk aan <userinput
>\b&lt;tekenreeks&gt;\b</userinput
> in termen van een reguliere expressie, het is echter sneller dan de regel <userinput
>RegExpr</userinput
>.</para>
<programlisting
>&lt;WordDetect String=&quot;(tekenreeks)&quot; [insensitive=&quot;true|false&quot;] (gezamenlijke attributen) (lokale scheidingstekens) /&gt;</programlisting>
<para
>Het attribuut <userinput
>String</userinput
> definieert de overeen te komen tekenreeks. Het attribuut <userinput
>insensitive</userinput
> is standaard <emphasis
>false</emphasis
> en wordt doorgegeven aan de vergelijkingsfunctie van de tekenreeks. Als de waarde <emphasis
>true</emphasis
> is wordt 'insensitive' vergelijking gebruikt.</para>
<para
>Sinds: &kate; 3.5 (KDE 4.5)</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>RegExpr</term>
<listitem>
<para
>Komt overeen met een reguliere expressie.</para>
<programlisting
>&lt;RegExpr String=&quot;(tekenreeks)&quot; [insensitive=&quot;true|false&quot;] [minimal=&quot;true|false&quot;] (common attributes) (dynamic) /&gt;</programlisting>
<para
>Het attribuut <userinput
>String</userinput
> definieert de reguliere expressie.</para>
<para
><userinput
>insensitive</userinput
> is standaard <emphasis
>false</emphasis
> en wordt doorgegeven aan de engine voor de reguliere expressie.</para>
<para
><userinput
>minimal</userinput
> is standaard <emphasis
>false</emphasis
> en wordt doorgegeven aan de engine voor de reguliere expressie.</para>
<para
>Omdat de regels altijd vergeleken worden met het begin van de huidige tekenreeks, zal een reguliere expressie die begint met een dakje (<literal
>^</literal
>) aangeven dat de regel alleen overeen moet komen met het begin van een regel.</para>
<para
>Zie <link linkend="regular-expressions"
>Reguliere expressies</link
> voor meer informatie hierover.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>trefwoord</term>
<listitem>
<para
>Detecteert een sleutelwoord uit een gespecificeerde lijst.</para>
<programlisting
>&lt;keyword String=&quot;(lijstnaam)&quot; (common attributes) (lokale scheidingstekens) /&gt;</programlisting>
<para
>Het attribuut <userinput
>String</userinput
> identificeert de lijst met sleutelwoorden met een naam. Een lijst met die naam moet bestaan.</para>
<para
>Het systeem voor accentuering bewerkt sleutelwoordregels op een zeer geoptimaliseerde manier. Dit maakt het absoluut noodzakelijk dat elk te vinden sleutelwoord omgeven wordt door gedefinieerde scheidingstekens, ofwel impliciet (de standaard scheidingstekens) of expliciet gespecificeerd binnen de eigenschap <emphasis
>additionalDeliminator</emphasis
> van de <emphasis
>sleutelwoord</emphasis
>-tag.</para>
<para
>Als een te vinden sleutelwoord een scheidingsteken moet bevatten, dan moet dit teken toegevoegd worden aan de eigenschap <emphasis
>weakDeliminator</emphasis
> van de <emphasis
>sleutelwoord</emphasis
>-tag. Dit teken zal dan zijn eigenschap scheidingsteken in alle <emphasis
>sleutelwoord</emphasis
>-regels verliezen. Het is ook mogelijk om het attribuut <emphasis
>weakDeliminator</emphasis
> van <emphasis
>sleutelwoord</emphasis
> te gebruiken zo dat deze wijziging alleen op deze regel van toepassing is.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>Int</term>
<listitem>
<para
>Een geheel getal detecteren (als de reguliere expressie <userinput
>\b[0-9]+</userinput
>).</para>
<para
><programlisting
>&lt;Int (gezamenlijke attributen) (lokale scheidingstekens) /&gt;</programlisting
></para>
<para
>Deze regel heeft geen specifieke attributen.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>Zwevend</term>
<listitem>
<para
>Een drijvende kommagetal detecteren( als de reguliere expressie: <userinput
>(\b[0-9]+\.[0-9]*|\.[0-9]+)([eE][-+]?[0-9]+)?</userinput
>).</para>
<para
><programlisting
>&lt;Drijvende komma (gezamenlijke attributen) (lokale scheidingstekens) /&gt;</programlisting
></para>
<para
>Deze regel heeft geen specifieke attributen.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>HlCOct</term>
<listitem>
<para
>Een octale representatie van een getal detecteren (als de reguliere expressie: <userinput
>\b0[0-7]+</userinput
>).</para>
<para
><programlisting
>&lt;HlCOct (gezamenlijke attributen) (lokale scheidingstekens) /&gt;</programlisting
></para>
<para
>Deze regel heeft geen specifieke attributen.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>HlCHex</term>
<listitem>
<para
>Een hexadecimale representatie van een hexadecimaal getal (als de reguliere expressie: <userinput
>\b0[xX][0-9a-fA-F]+</userinput
>).</para>
<para
><programlisting
>&lt;HlCHex (gezamenlijke attributen) (lokale scheidingstekens) /&gt;</programlisting
></para>
<para
>Deze regel heeft geen specifieke attributen.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>HlCStringChar</term>
<listitem>
<para
>Detecteer een escaped teken.</para>
<para
><programlisting
>&lt;HlCStringChar (common attributes) /&gt;</programlisting
></para>
<para
>Deze regel heeft geen specifieke attributen.</para>

<para
>Komt overeen met de letterlijke representatie van tekens, gewoonlijk gebruikt in programmacode, bijvoorbeeld <userinput
>\n</userinput
> (nieuwe-regel) of <userinput
>\t</userinput
> (TAB).</para>

<para
>De volgende tekens zullen overeenkomen als ze volgen op een backslash (<literal
>\</literal
>): <userinput
>abefnrtv&quot;'?\</userinput
>. Bovendien escaped hexadecimale getallen zoals bijvoorbeeld <userinput
>\xff</userinput
> en escaped octale getallen, zoals bijvoorbeeld <userinput
>\033</userinput
> zullen overeenkomen.</para>

</listitem>
</varlistentry>

<varlistentry>
<term
>HlCChar</term>
<listitem>
<para
>Detecteer een C-teken.</para>
<para
><programlisting
>&lt;HlCChar (gezamenlijke attributen) /&gt;</programlisting
></para>
<para
>Deze regel heeft geen specifieke attributen.</para>

<para
>Komt overeen met een C-teken tussen accenten (Bijvoorbeeld: <userinput
>'c'</userinput
>). De accenten kunnen een eenvoudig teken zijn of een escaped teken. Zie HlCStringChar voor overeenkomende reeksen van escaped tekens.</para>

</listitem>
</varlistentry>

<varlistentry>
<term
>RangeDetect</term>
<listitem>
<para
>Detecteert een tekenreeks met gedefinieerde begin- en eindtekens.</para>
<programlisting
>&lt;RangeDetect char=&quot;(teken)&quot;  char1=&quot;(teken)&quot; (gezamenlijke attributen) /&gt;</programlisting>
<para
><userinput
>char</userinput
> defines the character starting the range, <userinput
>char1</userinput
> the character ending the range.</para>
<para
>Bruikbaar om bijvoorbeeld kleine tekenreeksen of zoiets te detecteren, maar merk op dat de accentiëringsengine werkt op één regel tegelijk, hierdoor zullen tekenreeksen over meerdere regels niet gevonden worden.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>LineContinue</term>
<listitem>
<para
>Komt overeen met een gespecificeerd teken aan het eind van een regel.</para>
<programlisting
>&lt;LineContinue (gezamenlijke attributen) [char="\"] /&gt;</programlisting>
<para
><userinput
>char</userinput
> optioneel teken dat moet overeenkomen, standaard is de backslash (<userinput
>'\'</userinput
>). Nieuw sinds &kde; 4.13.</para>
<para
>Deze regel is bruikbaar voor het omschakelen van context aan het einde van een regel. Dit is bijvoorbeeld nodig in C/C++ om macro's of tekenreeksen door te laten lopen.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>IncludeRules</term>
<listitem>
<para
>Voeg regels in uit een ander context- of taalbestand.</para>
<programlisting
>&lt;IncludeRules context=&quot;contextlink&quot; [includeAttrib=&quot;true|false&quot;] /&gt;</programlisting>

<para
>Het attribuut <userinput
>context</userinput
> definieert welke context in te voegen.</para>
<para
>Als het een eenvoudige tekenreeks is dan zijn alle gedefinieerde regels in de huidige context ingevoegd, bijvoorbeeld: <programlisting
>&lt;IncludeRules context=&quot;anotherContext&quot; /&gt;</programlisting
></para>

<para
>Als de tekenreeks <userinput
>##</userinput
> bevat zal het accentueringssysteem zoeken naar een context uit een andere taaldefinitie met de gegeven naam, bijvoorbeeld <programlisting
>&lt;IncludeRules context=&quot;String##C++&quot; /&gt;</programlisting
> zou de context <emphasis
>String</emphasis
> uit de accentueringsdefinitie van <emphasis
>C++</emphasis
> invoegen.</para>
<para
>Als attribuut <userinput
>includeAttrib</userinput
> <emphasis
>true</emphasis
> is, dan wijzigt het doelattribuut naar die van de bron. Dit is vereist om bijvoorbeeld het aanbrengen van commentaar te laten werken als tekst die overeenkomt met de ingevoegde context een verschillende accentuering is van de host-context. </para>
</listitem>
</varlistentry>


<varlistentry>
<term
>DetectSpaces</term>
<listitem>
<para
>Detecteert witruimte.</para>
<programlisting
>&lt;DetectSpaces (gezamenlijke attributen) /&gt;</programlisting>

<para
>Deze regel heeft geen specifieke attributen.</para>
<para
>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.</para>
</listitem>
</varlistentry>


<varlistentry>
<term
>DetectIdentifier</term>
<listitem>
<para
>Tekenreeksen voor een identifier detecteren (als de reguliere expressie: <userinput
>[a-zA-Z_][a-zA-Z0-9_]*</userinput
>).</para>
<programlisting
>&lt;DetectIdentifier (gezamenlijke attributen) /&gt;</programlisting>

<para
>Deze regel heeft geen specifieke attributen.</para>
<para
>Gebruik deze regel om een reeks woordtekens in een keer over te slaan, in plaats van deze te testen met meerdere regels en ze een voor een over te slaan omdat er geen overeenkomst is.</para>
</listitem>
</varlistentry>

</variablelist>
</sect3>

<sect3>
<title
>Tips &amp; trucs</title>

<itemizedlist>
<para
>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. </para>

<listitem>
<para
>Als u alleen twee tekens wilt laten overeenkomen gebruik dan <userinput
>Detect2Chars</userinput
> in plaats van <userinput
>StringDetect</userinput
>. Hetzelfde is van toepassing op <userinput
>DetectChar</userinput
>.</para>
</listitem>
<listitem>
<para
>Reguliere expressies zijn gemakkelijk te gebruiken maar vaak is er een andere veel snellere manier om hetzelfde resultaat te behalen. U wilt alleen een overeenkomst vinden met het teken <userinput
>'#'</userinput
> als het het eerste teken is in de regel. Een oplossing gebaseerd op een reguliere expressie zou er zo uit zien: <programlisting
>&lt;RegExpr attribute=&quot;Macro&quot; context=&quot;macro&quot; String=&quot;^\s*#&quot; /&gt;</programlisting
>. U kunt hetzelfde veel sneller bereiken door te gebruiken: <programlisting
>&lt;DetectChar attribute=&quot;Macro&quot; context=&quot;macro&quot; char=&quot;#&quot; firstNonSpace=&quot;true&quot; /&gt;</programlisting
>. Als u de reguliere expressie <userinput
>'^#'</userinput
> wilt laten vereen komen dan kunt u nog steeds <userinput
>DetectChar</userinput
> gebruiken met het attribuut <userinput
>column=&quot;0&quot;</userinput
>. Het attribuut <userinput
>column</userinput
> telt tekens zodat een tab nog één teken is. </para>
</listitem>
<listitem>
<para
>Gebruik in regels <userinput
>RegExpr</userinput
> het attribuut <userinput
>column="0"</userinput
> als het patroon <userinput
>^PATROON</userinput
> gebruikt zal worden om met tekst overeen te komen aan het begin van een regel. Dit verbetert de prestaties, omdat het niet zal zoeken naar overeenkomsten in de rest van de kolommen.</para>
</listitem>
<listitem>
<para
>Gebruik in reguliere expressies non-capturing groeperingen <userinput
>(?:PATROON)</userinput
> in plaats van vangstgroeperingen <userinput
>(PATROON)</userinput
>, als de vangsten niet gebruikt zullen worden in dezelfde reguliere expressie of in dynamische regels. Dit vermijdt het onnodig opslaan van vangsten.</para>
</listitem>
<listitem>
<para
>U kunt van contexts wisselen zonder tekens te bewerken. Neem aan dat u van context wilt wisselen wanneer u de tekenreeks <userinput
>*/</userinput
> tegenkomt, maar u moet die tekenreeks in de volgende context bewerken. De onderstaande regel zal overeenkomen en het attribuut <userinput
>lookAhead</userinput
> zal de overeenkomende tekenreeks voor accentuering bewaren voor de volgende context. <programlisting
>&lt;Detect2Chars attribute=&quot;Comment&quot; context=&quot;#pop&quot; char=&quot;*&quot; char1=&quot;/&quot; lookAhead=&quot;true&quot; /&gt;</programlisting>
</para>
</listitem>
<listitem>
<para
>Gebruik <userinput
>DetectSpaces</userinput
> als u weet dat er veel witruimtes zijn.</para>
</listitem>
<listitem>
<para
>Gebruik <userinput
>DetectIdentifier</userinput
> in plaats van de reguliere expressie <userinput
>'[a-zA-Z_]\w*'</userinput
>.</para>
</listitem>
<listitem>
<para
>Gebruik standaard stijlen wanneer dat kan. Op deze manier vindt de gebruiker een bekende omgeving.</para>
</listitem>
<listitem>
<para
>Kijk in andere &XML;-bestanden om te zien hoe andere mensen ingewikkelde regels implementeren.</para>
</listitem>
<listitem>
<para
>U kunt elk &XML;-bestand valideren met de opdracht <command
>validatehl.sh language.xsd mySyntax.xml</command
>. De bestanden <filename
>validatehl.sh</filename
> en <filename
>taal.xsd</filename
> zijn beschikbaar in <ulink url="https://commits.kde.org/syntax-highlighting?path=data/schema"
>Opslagruimte voor accentuering van syntaxis</ulink
>. </para>
</listitem>
<listitem>
<para
>Als u complexe reguliere expressies erg vaak gebruikt dan kunt u <emphasis
>ENTITIES</emphasis
> gebruiken. Voorbeeld:</para>
<programlisting
>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE language SYSTEM "language.dtd"
[
        &lt;!ENTITY myref    "[A-Za-z_:][\w.:_-]*"&gt;
]&gt;
</programlisting>
<para
>Nu kunt u <emphasis
>&amp;myref;</emphasis
> gebruiken in plaats van de reguliere expressie.</para>
</listitem>
</itemizedlist>
</sect3>

</sect2>

</sect1>


<sect1 id="color-themes">
<title
>Met kleuren thema's werken</title>

<sect2 id="color-themes-overview">

<title
>Overzicht</title>

<para
>Kleurenschema's definiëren de kleuren van het <link linkend="kate-part"
>tekstbewerkingsgebied</link
> en de <link linkend="highlight"
>syntaxisaccentuering</link
>. Een kleuren thema omvat het volgende: <itemizedlist>
<listitem
><para
>De tekststijl, gebruikt voor syntaxisaccentuering via de <emphasis
>standaard stijlen attributen</emphasis
>. Bijvoorbeeld, de tekstkleur en de geselecteerde tekstkleur.</para
></listitem>
<listitem
><para
>De achtergrond van het tekstbewerkersgebied, inclusief de tekstselectie en de huidige regel.</para
></listitem>
<listitem
><para
>De pictogramrand van het tekstgebied: zijn achtergrond, de scheidingslijn, de regelnummers, de regelafbreekmarkering, de markering van gewijzigde regels en de ingevouwen code.</para
></listitem>
<listitem
><para
>Tekstdecoratie zoals de zoekmarkeringen, de indentatie en markering van tab/spatie in regels, de bij elkaar behorende haakjes en de spellingcontrole.</para
></listitem>
<listitem
><para
>Bladwijzers en tekstfragmenten.</para
></listitem>
</itemizedlist>
</para>

<para
>Om verwarring te voorkomen, het volgende valt buiten het onderwerp: <itemizedlist>
<listitem
><para
>Het lettertype en de lettergrootte.</para
></listitem>
<listitem
><para
>De kleuren van de tekstbewerkertoepassing, zoals de schuifbalkplaats, de menu's, de tabbladbalk, de vensterkleur, etc. In &kde; toepassingen, zoals &kate; of &kdevelop;, zijn deze kleuren gedefinieerd door het <userinput
>globale kleurrenschema van &kde; &plasma;</userinput
>, die zijn gezet in de module <ulink url="help:/kcontrol/colors/"
><quote
>Kleuren</quote
> in &systemsettings;</ulink
> of uit de toepassing zelf in het menu <menuchoice
><guimenu
>Instellingen</guimenu
><guisubmenu
>Kleurenschema</guisubmenu
></menuchoice
>. </para
></listitem>
</itemizedlist>
</para>

<mediaobject>
<imageobject
><imagedata format="PNG" fileref="breeze-color-theme-preview.png"/></imageobject>
<textobject
><phrase
><quote
>Breeze licht</quote
> en <quote
>Breeze donker</quote
> kleurenthema's met de <quote
>C++</quote
> syntaxisaccentuering.</phrase>
</textobject>
<caption
><para
><quote
>Breeze licht</quote
> en <quote
>Breeze donker</quote
> kleurenthema's met de <quote
>C++</quote
> syntaxisaccentuering.</para>
</caption>
</mediaobject>

</sect2>

<sect2 id="color-themes-ksyntaxhighlighting">

<title
>De kleurenthema's KSyntaxHighlighting</title>

<para
>Het framework <ulink url="https://api.kde.org/frameworks/syntax-highlighting/html/"
>KSyntaxHighlighting</ulink
>, wat de <link linkend="highlight"
>syntaxisaccentuering</link
>sengine is, is de bibliotheek die <userinput
>de kleurenthema's levert en beheert</userinput
>. Dit is onderdeel van &kde; &frameworks; en wordt in &kde; tekstbewerkers gebruikt zoals <ulink url="https://apps.kde.org/en/kate"
>&kate;</ulink
>, <ulink url="https://apps.kde.org/en/kwrite"
>&kwrite;</ulink
>, <ulink url="https://apps.kde.org/en/kile"
>&kile;</ulink
> en <ulink url="https://apps.kde.org/en/kdevelop"
>&kdevelop;</ulink
>. Deze afhankelijkheid ziet er uit als volgt:</para>

<mediaobject>
<imageobject
><imagedata format="PNG" fileref="kf5-ksyntaxhighlighting.png"/></imageobject>
<textobject
><phrase
>Afhankelijk van &kde; &frameworks; 5 bibliotheken op tekstbewerkers.</phrase
></textobject>
<caption
><para
>Afhankelijk van &kde; &frameworks; bibliotheken op tekstbewerkers.</para>
</caption>
</mediaobject>

<para
>KSyntaxHighlighting omvat een variëteit van ingebouwde thema's die getoond worden op de pagina <ulink url="https://kate-editor.org/themes/"
><quote
>Kleurrenthema's</quote
> van de website van de tekstbewerker Kate</ulink
>.</para>

<para
>Het framework <ulink url="https://api.kde.org/frameworks/ktexteditor/html/"
>KTextEditor</ulink
>, wat de tekstbewerkers-engine is, levert een gebruikersinterface voor aanmaken en bewerken van kleurenthema's, inclusief een hulpmiddel voor importeren en exporteren van thema's. Dit is de eenvoudigste manier om ze aan te maken en te bewerken, u kunt er toegang toe krijgen vanuit de dialoog <link linkend="config-dialog"
><quote
>Configureren</quote
></link
> van de tekstbewerker. Meer details in <xref linkend="color-themes-gui"/>.</para>

<mediaobject>
<imageobject
><imagedata format="PNG" fileref="color-themes-gui-breeze-dark-default-text-styles.png"/></imageobject>
<textobject
><phrase
>De &GUI; voor beheer van kleurenthema's in instellingen van &kate;.</phrase
></textobject>
<caption
><para
>De &GUI; voor beheer van kleurenthema's in instellingen van &kate;.</para>
</caption>
</mediaobject>

<para
>Het is belangrijk om te noemen dat in de &kde; tekstbewerkers zoals &kate; of &kdevelop;, de kleurenthema's van KSyntaxHighlighting gebruikt worden <ulink url="https://kate-editor.org/post/2020/2020-09-13-kate-color-themes-5.75/"
>sinds &kde; &frameworks; 5.75</ulink
>, uitgegeven op 10 oktober, 2020. Eerder werden de kleurenschema's van &kate; (op KConfig gebaseerde schemaconfiguratie) gebruikt en dezen zijn nu afgekeurd. Het is echter mogelijk om de oude schema's van &kate; te converteren naar de kleurenthema's van KSyntaxHighlighting. The <ulink url="https://invent.kde.org/frameworks/syntax-highlighting"
>KSyntaxHighlighting opslagruimte</ulink
> bevat het script <userinput
>utils/kateschema_to_theme_converter.py</userinput
> en het programma <userinput
>utils/schema-converter/</userinput
> voor dat doel. </para>

</sect2>

<sect2 id="color-themes-json">

<title
>De kleurenthema's in &JSON;-formaat</title>

<sect3 id="color-themes-json-overview">

<title
>Overzicht</title>

<para
>Kleurenthema's worden opgeslagen in bestanden in &JSON;-formaat, met de extensie <userinput
>.theme</userinput
>.</para>

<para
>In de <ulink url="https://invent.kde.org/frameworks/syntax-highlighting"
> broncode van KSyntaxHighlighting</ulink
> zijn de &JSON; bestanden van ingebouwde thema's gelokaliseerd in de map <userinput
>data/themes/</userinput
>. Merk op dat in tekstbewerkers, de ingebouwde thema's gecompileerd zijn in de bibliotheek van KSyntaxHighlighting, de manier van toegang naar hen is via de broncode of door <link linkend="color-themes-gui-import-export"
>ze exporteren uit de &GUI; om thema's van KTextEditor te beheren</link
>.</para>

<para
>Het is ook mogelijk om gemakkelijk extra of aangepaste thema's toe te voegen, die geladen worden uit het bestandssysteem. Bestanden met door de gebruiker aangepaste themabestanden zijn gelokaliseerd in de map <filename class="directory"
>org.kde.syntax-highlighting/themes/</filename
> in uw gebruikersmap, die u kunt vinden met het commando <userinput
><command
>qtpaths</command
><option
> --paths GenericDataLocation</option
></userinput
> en zijn gewoonlijk <filename class="directory"
><envar
>$HOME</envar
>/.local/share/</filename
> en <filename class="directory"
>/usr/share/</filename
>. </para>

<para
>Voor pakketten uit Flatpak en Snap zal de bovenstaande map niet werken omdat de gegevenslocatie verschillend is voor elke toepassing. In een Flatpak toepassing is de locatie van aangepaste themabestanden gewoonlijk <filename class="directory"
><envar
>$HOME</envar
>/.var/app/<replaceable
>flatpak-pakketnaam</replaceable
>/data/org.kde.syntax-highlighting/themes/</filename
> en in een Snap toepassing is die locatie <filename class="directory"
><envar
>$HOME</envar
>/snap/<replaceable
>snap-pakketnaam</replaceable
>/current/.local/share/org.kde.syntax-highlighting/themes/</filename
>. </para>

<para
>In &Windows; zijn deze bestanden gelokaliseerd in <filename
>%USERPROFILE%&#92;AppData&#92;Local&#92;org.kde.syntax-highlighting&#92;themes</filename
>. <replaceable
>%USERPROFILE%</replaceable
> wordt gewoonlijk <filename
>C:&#92;Users&#92;<replaceable
>gebruikersnaam</replaceable
></filename
>.</para>

<para
>Samenvattend, voor de meeste configuraties is de aangepaste map met thema's als volgt:</para>

<informaltable>
<tgroup cols="2">
<tbody>
<row>
<entry
>Voor lokale gebruiker</entry>
<entry
><filename class="directory"
><envar
>$HOME</envar
>/.local/share/org.kde.syntax-highlighting/themes/</filename
></entry>
</row>
<row>
<entry
>Voor alle gebruikers</entry>
<entry
><filename class="directory"
>/usr/share/org.kde.syntax-highlighting/themes/</filename
></entry>
</row>
<row>
<entry
>Voor Flatpak pakketten</entry>
<entry
><filename class="directory"
><envar
>$HOME</envar
>/.var/app/<replaceable
>flatpak-package-name</replaceable
>/data/org.kde.syntax-highlighting/themes/</filename
></entry>
</row>
<row>
<entry
>Voor Snap pakketten</entry>
<entry
><filename class="directory"
><envar
>$HOME</envar
>/snap/<replaceable
>snap-package-name</replaceable
>/current/.local/share/org.kde.syntax-highlighting/themes/</filename
></entry>
</row>
<row>
<entry
>Op &Windows;</entry>
<entry
><filename
>%USERPROFILE%&#92;AppData&#92;Local&#92;org.kde.syntax-highlighting&#92;themes</filename
></entry>
</row>
</tbody>
</tgroup>
</informaltable>

<para
>Als meerdere themabestanden bestaan met dezelfde naam, zal het bestand met de hoogste <userinput
>revisie</userinput
> worden geladen. </para>

</sect3>

<sect3 id="color-themes-json-basic">

<title
>De &JSON;-structuur</title>

<para
>De structuur van een &JSON;-bestand wordt uitgelegd op <ulink url="https://www.json.org"
>hun website</ulink
>. In de basis bestaat een &JSON;-bestandsformaat uit: <itemizedlist>
<listitem
><para
>Verzamelingen van paren sleutel/waarde, gescheiden door komma's en gegroepeerd in <userinput
>{ }</userinput
> die we <quote
>objects</quote
> zullen noemen.</para
></listitem>
<listitem
><para
>Geordende lijsten met waarden, gescheiden door komma's en gegroepeerd in <userinput
>[ ]</userinput
> die we <quote
>array</quote
> zullen noemen.</para
></listitem
></itemizedlist>
</para>

<para
>De naamgeving <quote
>sleutel</quote
>, <quote
>waarde</quote
>, <quote
>object</quote
> en <quote
>array</quote
> zullen in dit artikel gebruikt worden. Als dit uw eerste keer is van werken met &JSON;-bestanden, ze begrijpen is zo eenvoudig als naar de onderstaande voorbeelden kijken. </para>

</sect3>

<sect3 id="color-themes-json-root">

<title
>Hoofdsecties van bestanden voor de &JSON;-kleurenthema's</title>

<para
>Het hoofdobject van het &JSON;-bestand met kleurenthema bevat de volgende schemasleutels:</para>

<itemizedlist>
<listitem
><para
><userinput
>metadata</userinput
>: is verplicht. De waarde is een object met de metagegevens van het thema, zoals naam, revisie en licentie.</para>
<para
>Dit is gedetailleerd in <xref linkend="color-themes-json-metadata"/>.</para>
</listitem>

<listitem
><para
><userinput
>editor-colors</userinput
>: het is verplicht. De waarde is een object met de kleuren van het tekstbewerkingsgebied, zoals de achtergrond, de pictogramrand en de tekstdecoratie.</para>
<para
>Dit is gedetailleerd in <xref linkend="color-themes-editor-colors"/>.</para>
</listitem>

<listitem
><para
><userinput
>text-styles</userinput
>: het is verplicht. De waarde is een object met de attributen <emphasis
>standaard tekststijl</emphasis
> van de syntaxisaccentuering. Elk attribuut definieert zijn <emphasis
>tekstkleur</emphasis
>, zijn <emphasis
>geselecteerde tekstkleur</emphasis
> of of het bijvoorbeeld <emphasis
>vet</emphasis
> of <emphasis
>cursief</emphasis
>moet zijn. De tekststijlen kunnen gerefereerd worden uit <link linkend="kate-highlight-default-styles"
>de attributen van de &XML; bestanden met syntaxisdefinities</link
>.</para>
<para
>Dit is gedetailleerd in <xref linkend="color-themes-text-styles"/>.</para>
</listitem>

<listitem
><para
><userinput
>custom-styles</userinput
>: het is optioneel. Definieert tekststijlen voor de attributen van specifieke definities voor syntaxisaccentuering. Bijvoorbeeld, in een definitie voor accentuering zoals <userinput
>Python</userinput
> of <userinput
>Markdown</userinput
> kunt u een andere tekststijl specificeren die de standaard gedefinieerde in <userinput
>text-styles</userinput
> overstijgt.</para>
<para
>Dit is gedetailleerd in <xref linkend="color-themes-custom-styles"/>.</para>
</listitem>
</itemizedlist>

<para
>De taal &JSON; ondersteunt geen commentaar. U kunt echter de optionele sleutel <userinput
>_comments</userinput
> in het hoofdobject gebruiken om commentaar te schrijven, bijvoorbeeld, als u een bestaand thema aanpast kunt u de URL van de originele opslagruimte er in zetten. De meest praktische manier is om een array van tekens te gebruiken. </para>

<para
>Hier onder is een voorbeeldbestand voor het thema <quote
>Breeze Light</quote
>. U kunt zien dat, om te vermijden dat het voorbeeld te groot is, dat de <userinput
>kleuren van de bewerker</userinput
> en objecten met <userinput
>tekststijlen</userinput
> niet alle vereiste sleutels bevatten. U kunt het volledige archief van <ulink url="https://invent.kde.org/frameworks/syntax-highlighting/-/blob/master/data/themes/breeze-light.theme"
> het thema <quote
>Breeze Light</quote
> zien in de opslagruimte KSyntaxHighlighting</ulink
>. </para>

<programlisting
>{
    "_comments": [
        "Dit is commentaar.",
        "Als dit thema een aanpassing is van een ander, zet de koppeling naar de originele opslagruimte hier."
    ],
    "metadata": {
        "name" : "Breeze Light",
        "revision" : 5,
        "copyright": [
            "SPDX-FileCopyrightText: 2016 Volker Krause &lt;vkrause@kde.org&gt;",
            "SPDX-FileCopyrightText: 2016 Dominik Haumann &lt;dhaumann@kde.org&gt;"
        ],
        "license": "SPDX-License-Identifier: MIT"
    },
    "editor-colors": {
        "BackgroundColor" : "#ffffff",
        "CodeFolding" : "#94caef",
        "BracketMatching" : "#ffff00",
        "CurrentLine" : "#f8f7f6",
        "IconBorder" : "#f0f0f0",
        "IndentationLine" : "#d2d2d2",
        "LineNumbers" : "#a0a0a0",
        "CurrentLineNumber" : "#1e1e1e",
        <replaceable
>De andere kleursleutels van de bewerker...</replaceable>

    },
    "text-styles": {
        "Normal" : {
            "text-color" : "#1f1c1b",
            "selected-text-color" : "#ffffff",
            "bold" : false,
            "italic" : false,
            "underline" : false,
            "strike-through" : false
        },
        "Keyword" : {
            "text-color" : "#1f1c1b",
            "selected-text-color" : "#ffffff",
            "bold" : true
        },
        "Function" : {
            "text-color" : "#644a9b",
            "selected-text-color" : "#452886"
        },
        "Variable" : {
            "text-color" : "#0057ae",
            "selected-text-color" : "#00316e"
        },
        <replaceable
>De andere tekststijlsleutels...</replaceable>

    },
    "custom-styles": {
        "ISO C++": {
            "Data Type": {
                "bold": true,
                "selected-text-color": "#009183",
                "text-color": "#00b5cf"
            },
            "Keyword": {
                "text-color": "#6431b3"
            }
        },
        "YAML": {
            "Attribute": {
                "selected-text-color": "#00b5cf",
                "text-color": "#00b5cf"
            }
        }
    }
}
</programlisting>

</sect3>

<sect3 id="color-themes-json-metadata">

<title
>Metagegevens</title>

<para
>Het &JSON;-object van de <userinput
>metagegevens</userinput
> sleutel bevat relevante informatie over het thema. Dit object heeft de volgende sleutels: <itemizedlist>
<listitem
><para
><userinput
>name</userinput
>: Het is een <emphasis
>tekenreeks</emphasis
> die de naam van de taal instelt. Het verschijnt nadien in de menu's en dialogen. Het is verplicht.</para
></listitem>

<listitem
><para
><userinput
>revisie</userinput
> Het is een <emphasis
>geheel getal</emphasis
> dat de huidige revisie specificeert van het themabestand. Wanneer u een kleurenthemabestand bijwerkt, verzeker u ervan dat dit getal wordt verhoogt. Het is verplicht.</para
></listitem>

<listitem
><para
><userinput
>license</userinput
>: het is een <emphasis
>tekenreeks</emphasis
> die de licentie van het thema definieert, met gebruik van de identifier <userinput
>SPDX-License-Identifier</userinput
> uit de standaard <ulink url="https://spdx.dev/"
>SPDX licentiecommunicatieformaat</ulink
>. Het is optioneel.</para>
<para
>U kunt de volledige lijst met SPDX-licentie-identifiers <ulink url="https://spdx.org/licenses/"
>hier</ulink
> zien.</para
></listitem>

<listitem
><para
><userinput
>copyright</userinput
>: het is een <emphasis
>array</emphasis
> van <emphasis
>tekenreeksen</emphasis
> die de auteurs van het thema specificeren, met gebruik van de identifier <userinput
>SPDX-FileCopyrightText</userinput
> uit de standaard <ulink url="https://spdx.dev/"
>SPDX licentiecommunicatieformaat</ulink
>. Het is optioneel.</para
></listitem>
</itemizedlist>
</para>

<programlisting
>"metadata": {
    "name" : "Breeze Light",
    "revision" : 5,
    "copyright": [
        "SPDX-FileCopyrightText: 2016 Volker Krause &lt;vkrause@kde.org&gt;",
        "SPDX-FileCopyrightText: 2016 Dominik Haumann &lt;dhaumann@kde.org&gt;"
    ],
    "license": "SPDX-License-Identifier: MIT"
}
</programlisting>

</sect3>

</sect2>

<sect2 id="color-themes-editing">

<title
>Kleuren in detail</title>

<para
>Deze sectie detailleert alle beschikbare kleurattributen en beschikbare kleurinstellingen.</para>

<sect3 id="color-themes-editor-colors">

<title
>Kleuren van bewerker</title>

<para
>Komt overeen met de kleuren van het <link linkend="kate-part"
>tekstbewerkingsgebied</link
>.</para>

<para
>In het <link linkend="color-themes-json"
>&JSON; themabestand</link
>, heeft de respectievelijke sleutel <userinput
>editor-colors</userinput
> als waarde een <emphasis
>object</emphasis
> waar elke sleutel refereert naar een kleurattribuut van de tekstbewerker. Hier zijn <userinput
>alle beschikbare sleutels verplicht</userinput
>, hun waarden zijn <userinput
>tekenreeksen</userinput
> met hexadecimale kleurcodes, zoals <quote
>#00B5CF</quote
>. </para>

<para
>In <link linkend="color-themes-gui"
>de &GUI; om thema's van KTextEditor te beheren</link
> kunnen deze attributen gewijzigd worden in het tabblad <userinput
><guilabel
>Kleuren</guilabel
></userinput
>. </para>

<para
>De beschikbare sleutels zijn als volgt; de sleutels gebruikt in het <link linkend="color-themes-json"
>&JSON; bestand</link
> staan in de lijst <emphasis
>vet</emphasis
>, de namen gebruikt in de <link linkend="color-themes-gui"
>&GUI;</link
> worden getoond in ronde haakjes. </para>

<variablelist>

<varlistentry id="variable-prefcolors-colors-text-background">
<term
><guilabel
>Achtergrondkleuren van bewerker</guilabel
></term>
<listitem>

<variablelist>

<varlistentry id="variable-pref-colors-normal-text">
<term
><userinput
>BackgroundColor</userinput
> (<guilabel
>Tekstgebied</guilabel
>)</term>
<listitem
><para
>Dit is de standaard achtergrond voor het tekstgebied. Het is de dominante kleur in de editor.</para>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="editor-colors-BackgroundColor.png"/></imageobject>
<caption
><para
></para
></caption>
</mediaobject>
</listitem>
</varlistentry>

<varlistentry id="variable-pref-colors-selected-text">
<term
><userinput
>TextSelection</userinput
> (<guilabel
>Geselecteerde tekst</guilabel
>)</term>
<listitem
><para
>Dit is de achtergrond voor geselecteerde tekst. </para>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="editor-colors-TextSelection.png"/></imageobject>
<caption
><para
></para
></caption>
</mediaobject>
</listitem>
</varlistentry>

<varlistentry id="variable-pref-colors-current-line">
<term
><userinput
>CurrentLine</userinput
> (<guilabel
>Huidige regel</guilabel
>)</term>
<listitem
><para
>Stel de kleur in voor de huidige regel. Door de kleur iets te laten afwijken van de normale tekst wordt de focus op deze regel gericht. </para>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="editor-colors-CurrentLine.png"/></imageobject>
<caption
><para
></para
></caption>
</mediaobject>
</listitem>
</varlistentry>

<varlistentry id="variable-pref-colors-search-highlight">
<term
><userinput
>SearchHighlight</userinput
> (<guilabel
>Accentuering van gezocht</guilabel
>)</term>
<listitem
><para
>Stel de kleur in voor de tekst die overeenkomt met uw laatste zoekopdracht. </para>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="editor-colors-SearchHighlight.png"/></imageobject>
<caption
><para
></para
></caption>
</mediaobject>
</listitem>
</varlistentry>

<varlistentry id="variable-pref-colors-replace-highlight">
<term
><userinput
>ReplaceHighlight</userinput
> (<guilabel
>Accentuering van vervanging</guilabel
>)</term>
<listitem
><para
>Stel de kleur in voor de tekst die overeenkomt met uw laatste vervanging.</para>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="editor-colors-ReplaceHighlight.png"/></imageobject>
<caption
><para
></para
></caption>
</mediaobject>
</listitem>
</varlistentry>

</variablelist>
</listitem>
</varlistentry>

<varlistentry id="variable-prefcolors-colors-icon-border">
<term
><guilabel
>Pictogramrand</guilabel
></term>
<listitem>
<variablelist>

<varlistentry>
<term
><userinput
>IconBorder</userinput
> (<guilabel
>Achtergrondgebied</guilabel
>)</term>
<listitem
><para
>Deze kleur wordt gebruikt voor de randen van markeringen, regelnummers en invouwmarkeringen links van de editorweergave als die getoond worden. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>LineNumbers</userinput
> (<guilabel
>Regelnummers</guilabel
>)</term>
<listitem
><para
>Deze kleur wordt gebruikt voor de regelnummers links van de weergave als die getoond worden.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>CurrentLineNumber</userinput
> (<guilabel
>Huidige regelnummers</guilabel
>)</term>
<listitem
><para
>Deze kleur wordt gebruikt om het regelnummer van de huidige regel aan de linkerkant van de weergave te tekenen, indien getoond. Dit een beetje anders instellen dan <quote
>LineNumbers</quote
> helpt bij het gericht blijven op de huidige regel. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>Scheidingsteken</userinput
> (<guilabel
>Scheidingsteken</guilabel
>)</term>
<listitem
><para
>Deze kleur wordt gebruikt om de verticale lijn te tekenen die de pictogramrand scheidt van de achtergrond van het tekstgebied.</para>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="editor-colors-IconBorder.png"/></imageobject>
<caption
><para
></para
></caption>
</mediaobject>
</listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>WordWrapMarker</userinput
> (<guilabel
>Markering van regelafbreking</guilabel
>)</term>
<listitem
><para
>Deze kleur wordt gebruikt om een patroon te tekenen links van dynamisch afgebroken regels wanneer die verticaal uitgelijnd zijn, evenals voor de statische regelafbrekingmarkering.</para>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="editor-colors-WordWrapMarker.png"/></imageobject>
<caption
><para
></para
></caption>
</mediaobject>
</listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>CodeFolding</userinput
> (<guilabel
>Code invouwen</guilabel
>)</term>
<listitem
><para
>Deze kleur wordt gebruikt om de sectie met code te accentueren die zou worden ingevouwen wanneer u met de muis klikt op de codeinvouwpijl links van een document. Voor meer informatie, zie <link linkend="advanced-editing-tools-code-folding"
>de documentatie over code invouwen</link
>.</para>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="editor-colors-CodeFolding.png"/></imageobject>
<caption
><para
></para
></caption>
</mediaobject>
</listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>ModifiedLines</userinput
> (<guilabel
>Gewijzigde regels</guilabel
>)</term>
<listitem
><para
>Deze kleur wordt gebruikt om links van een document regels te accentueren die gewijzigd zijn, maar nog niet opgeslagen. Voor meer informatie, zie <xref linkend="kate-part-line-modification"/>.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>SavedLines</userinput
> (<guilabel
>Opgeslagen regels</guilabel
>)</term>
<listitem
><para
>Deze kleur wordt gebruikt om links van een document regels te accentueren die in deze sessie gewijzigd en opgeslagen zijn. Voor meer informatie, zie <xref linkend="kate-part-line-modification"/>.</para>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="editor-colors-ModifiedLines.png"/></imageobject>
<caption
><para
></para
></caption>
</mediaobject>
</listitem>
</varlistentry>

</variablelist>
</listitem>
</varlistentry>

<varlistentry id="variable-prefcolors-colors-text-decorations">
<term
><guilabel
>Tekstdecoraties</guilabel
></term>
<listitem>
<variablelist>

<varlistentry>
<term
><userinput
>SpellChecking</userinput
> (<guilabel
>Regel met verkeerde spelling</guilabel
>)</term>
<listitem
><para
>Deze kleur wordt gebruikt om spelfouten aan te geven.</para>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="editor-colors-SpellChecking.png"/></imageobject>
<caption
><para
></para
></caption>
</mediaobject>
</listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>TabMarker</userinput
> (<guilabel
>Tab en spatie markering</guilabel
>)</term>
<listitem
><para
>Deze kleur wordt gebruikt om indicators in de witruimte te tekenen, als die ingeschakeld zijn.</para>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="editor-colors-TabMarker.png"/></imageobject>
<caption
><para
></para
></caption>
</mediaobject>
</listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>IndentationLine</userinput
> (<guilabel
>Inspringlijn</guilabel
>)</term>
<listitem
><para
>Deze kleur wordt gebruikt om een lijn links van de inspringende blokken te tekenen als <link linkend="appearance-general"
>die optie geactiveerd is</link
>.</para>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="editor-colors-IndentationLine.png"/></imageobject>
<caption
><para
></para
></caption>
</mediaobject>
</listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>BracketMatching</userinput
> (<guilabel
>Accentuering van overeenkomende haakjes</guilabel
>)</term>
<listitem
><para
>Deze kleur wordt gebruikt voor de achtergrond van bij elkaar horende haakjes. </para>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="editor-colors-BracketMatching.png"/></imageobject>
<caption
><para
></para
></caption>
</mediaobject>
</listitem>
</varlistentry>

</variablelist>
</listitem>
</varlistentry>

<varlistentry id="variable-prefcolors-colors-marker-colors">
<term
><guilabel
>Kleuren van markeringen</guilabel
></term>
<listitem>
<variablelist>

<varlistentry>
<term
><userinput
>MarkBookmark</userinput
> (<guilabel
>Bladwijzer</guilabel
>)</term>
<listitem
><para
>Deze kleur wordt gebruikt om bladwijzers aan te geven. Merk op dat deze kleur een dekking heeft van 22% (en 33% voor de huidige regel) met betrekking tot de achtergrond. Voor meer informatie, zie <xref linkend="kate-part-bookmarks"/>.</para>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="editor-colors-MarkBookmark.png"/></imageobject>
<caption
><para
></para
></caption>
</mediaobject>
</listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>MarkBreakpointActive</userinput
> (<guilabel
>Actief breekpunt</guilabel
>)</term>
<listitem
><para
>Deze kleur wordt gebruikt door de GDB-plug-in om een actief breekpunt aan te geven. Merk op dat de kleur een mindere dekking heeft ten opzichte van de achtergrond. Voor meer informatie, zie <ulink url="help:/kate/kate-application-plugin-gdb.html"
>de documentatie van de GDB-plug-in</ulink
>.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>MarkBreakpointReached</userinput
> (<guilabel
>Bereikt breekpunt</guilabel
>)</term>
<listitem
><para
>Deze kleur wordt gebruikt door de GDB-plug-in om een actief breekpunt aan te geven dat is bereikt tijdens debuggen. Merk op dat de kleur een mindere dekking heeft ten opzichte van de achtergrond. Voor meer informatie, zie <ulink url="help:/kate/kate-application-plugin-gdb.html"
>de documentatie van de GDB-plug-in</ulink
>.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>MarkBreakpointDisabled</userinput
> (<guilabel
>Uitgeschakeld breekpunt</guilabel
>)</term>
<listitem
><para
>Deze kleur wordt gebruikt door de GDB-plug-in om een inactief breekpunt aan te geven. Merk op dat de kleur een mindere dekking heeft ten opzichte van de achtergrond. Voor meer informatie, zie <ulink url="help:/kate/kate-application-plugin-gdb.html"
>de documentatie van de GDB-plug-in</ulink
>.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>MarkExecution</userinput
> (<guilabel
>Uitvoering</guilabel
>)</term>
<listitem
><para
>Deze kleur wordt gebruikt door de GDB-plug-in om een regel aan te geven die wordt uitgevoerd. Merk op dat de kleur een mindere dekking heeft ten opzichte van de achtergrond. Voor meer informatie, zie <ulink url="help:/kate/kate-application-plugin-gdb.html"
>de documentatie van de GDB-plug-in</ulink
>.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>MarkeringsWaarschuwing</userinput
> (<guilabel
>Waarschuwing</guilabel
>)</term>
<listitem
><para
>Deze kleur wordt gebruikt door de build-plug-in om een regel aan te geven die een waarschuwing bij compilatie heeft veroorzaakt. Merk op dat de kleur een mindere dekking heeft ten opzichte van de achtergrond. Voor meer informatie, zie <ulink url="help:/kate/kate-application-plugin-build.html"
>de documentatie van de Build-plug-in</ulink
>.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>MarkError</userinput
> (<guilabel
>Fout</guilabel
>)</term>
<listitem
><para
>Deze kleur wordt gebruikt door de build-plug-in om een regel aan te geven die een fout bij compilatie heeft veroorzaakt. Merk op dat de kleur een mindere dekking heeft ten opzichte van de achtergrond. Voor meer informatie, zie <ulink url="help:/kate/kate-application-plugin-build.html"
>de documentatie van de Build-plug-in</ulink
>.</para
></listitem>
</varlistentry>

</variablelist>
</listitem>
</varlistentry>

<varlistentry id="variable-prefcolors-colors-text-templates-snippets">
<term
><guilabel
>Tekstsjablonen &amp; -fragmenten</guilabel
></term>
<listitem>
<variablelist>

<varlistentry>
<term
><userinput
>TemplateBackground</userinput
> (<guilabel
>Achtergrond</guilabel
>)</term>
<listitem
><para
>Deze kleur wordt door de fragmenten-plug-in van &kate; gebruikt om de achtergrond van een fragment te markeren. Voor meer informatie, zie <ulink url="help:/kate/kate-application-plugin-snippets.html"
>de documentatie van fragmenten in &kate;</ulink
>.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>TemplatePlaceholder</userinput
> (<guilabel
>Te bewerken plaatshouder</guilabel
>)</term>
<listitem
><para
>Deze kleur wordt gebruikt door de &kate; fragmenten-plug-in om een plaatshouder te markeren, waarop u kunt klikken om deze handmatig te bewerken. Voor meer informatie, zie <ulink url="help:/kate/kate-application-plugin-snippets.html"
>de documentatie van &kate;-snippets</ulink
>.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>TemplateFocusedPlaceholder</userinput
> (<guilabel
>Gefocuste bewerkbare plaatshouder</guilabel
>)</term>
<listitem
><para
>Deze kleur wordt gebruikt door de &kate; fragmenten-plug-in om een plaatshouder te markeren, die u op dit moment bewerkt. Voor meer informatie zie <ulink url="help:/kate/kate-application-plugin-snippetshtml"
>de documentatie van &kate;-snippets</ulink
>.</para>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="editor-colors-Template.png"/></imageobject>
<caption
><para
></para
></caption>
</mediaobject>
</listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>TemplateReadOnlyPlaceholder</userinput
> (<guilabel
>Niet-bewerkbare plaatshouder</guilabel
>)</term>
<listitem
><para
>Deze kleur wordt gebruikt door de &kate; fragmenten-plug-in om een plaatshouder te markeren, die niet handmatig is te bewerken, zoals een die automatisch wordt gevuld. Voor meer informatie, zie <ulink url="help:/kate/kate-application-plugin-snippets.html"
>de documentatie van &kate;-snippets</ulink
>.</para>
<mediaobject>
<imageobject
><imagedata format="PNG" fileref="editor-colors-TemplateReadOnlyPlaceholder.png"/></imageobject>
<caption
><para
></para
></caption>
</mediaobject>
</listitem>
</varlistentry>

</variablelist>
</listitem>
</varlistentry>

</variablelist>

</sect3>

<sect3 id="color-themes-text-styles">

<title
>Standaard tekststijlen</title>

<para
>De standaard stijlen voor tekst zijn dezelfde als de stijlen voor geaccentueerde tekst, waardoor de editor tekst op een hele consistente manier kan presenteren. Zo wordt bijvoorbeeld voor commentaartekst dezelfde stijl gebruikt in bijna alle opmaakprofielen die kunnen worden geaccentueerd door KSyntaxHighlighting. </para>

<note>
<para
>Deze tekststijlen kunnen gerefereerd worden uit de <userinput
>standaard stijlen</userinput
> gebruikt in de &XML; definitiebestanden voor <link linkend="highlight"
>syntaxisaccentuering</link
>, bijvoorbeeld, het attribuut <quote
>Normaal</quote
> is gelijk aan <quote
>dsNormal</quote
> in de &XML; bestanden en <quote
>DataType</quote
> is gelijk aan <quote
>dsDataType</quote
>. Zie <xref linkend="kate-highlight-default-styles"/> in de documentatie van syntaxisaccentuering. </para>
</note>

<tip>
<para
>Let op om leesbare kleuren met goed contrast te kiezen speciaal in combinatie met de <userinput
><link linkend="color-themes-editor-colors"
>Kleuren van bewerker</link
></userinput
>. Zie <xref linkend="color-themes-contrast"/>. </para>
</tip>

<para
>In het <link linkend="color-themes-json"
>&JSON;-bestand</link
> heeft de respectievelijke sleutel <userinput
>text-styles</userinput
> als waarde een <emphasis
>object</emphasis
> waar elke sleutel overeenkomt met de naam van een <emphasis
>standaard tekststijl</emphasis
>, die gelijk zijn aan die gebruikt in de definities voor syntaxisaccentuering. Hier zijn, <userinput
>alle beschikbare tekststijlsleutels verplicht</userinput
>, deze staan onderstaand in een lijst. </para>

<programlisting
>"text-styles": {
    "Normal" : {
        "text-color" : "#1f1c1b",
        "selected-text-color" : "#ffffff",
        "bold" : false,
        "italic" : false,
        "underline" : false,
        "strike-through" : false
    },
    "Keyword" : {
        "text-color" : "#1f1c1b",
        "selected-text-color" : "#ffffff",
        "bold" : true
    },
    "Function" : {
        "text-color" : "#644a9b",
        "selected-text-color" : "#452886"
    },
    <replaceable
>De andere tekststijlsleutels...</replaceable>
}
</programlisting>

<variablelist>
<varlistentry>

<term
>Elke sleutel van de <emphasis
>standaard tekststijl</emphasis
> heeft een &JSON;-object als zijn waarde, waar waarden zoals <emphasis
>color</emphasis
>, <emphasis
>bold</emphasis
>, <emphasis
>italic</emphasis
>, etc. zijn gespecificeerd. Deze sleutels zijn als volgt: </term>

<listitem>

<para
><userinput
>text-color</userinput
>: het is een <emphasis
>tekenreeks</emphasis
> met de tekstkleur in hexadecimale kleurcodering. Deze sleutel/waarde is vereist.</para>

<para
><userinput
>selected-text-color</userinput
>: de tekstkleur wanneer het is geselecteerd is in het algemeen hetzelfde als <quote
>text-color</quote
>. Wanneer de tekst is geselecteerd wordt de achtergrond gedefinieerd door de waarde van <link linkend="variable-pref-colors-selected-text"
>TextSelection</link
> in de <link linkend="color-themes-editor-colors"
>Kleuren van bewerker</link
>, u moet dus verzekeren dat de tekst goed contrast heeft en leesbaar is met deze achtergrond. De waarde is een <emphasis
>tekenreeks</emphasis
> met een hexadecimale kleurcode. Deze sleutel/waarde is vereist.</para>

<para
><userinput
>bold</userinput
>: het is een <emphasis
>boolean</emphasis
> die bepaalt of de tekst vet is. Deze sleutel is optioneel, de standaard waarde is <userinput
>false</userinput
>.</para>

<para
><userinput
>italic</userinput
>: het is een <emphasis
>boolean</emphasis
> die bepaalt of de tekst cursief is. Deze sleutel is optioneel, de standaard waarde is <userinput
>false</userinput
>.</para>

<para
><userinput
>underline</userinput
>: het is een <emphasis
>boolean</emphasis
> die bepaalt of de tekst onderstreept is. Deze sleutel is optioneel, de standaard waarde is <userinput
>false</userinput
>.</para>

<para
><userinput
>strike-through</userinput
>: het is een <emphasis
>boolean</emphasis
> die bepaalt of de tekst doorgestreept is. Deze sleutel is optioneel, de standaard waarde is <userinput
>false</userinput
>.</para>

<para
><userinput
>background-color</userinput
>: bepaalt de achtergrond van de tekst, bijvoorbeeld, gebruikt in opmerkzaam maken in commentaar. De waarde is een <userinput
>tekenreeks</userinput
> met een hexadecimale kleurcode. Deze key is optioneel, standaard is er geen achtergrond.</para>

<para
><userinput
>selected-background-color</userinput
>: bepaalt de achtergrond van de tekst wanneer deze is geselecteerd. De waarde is een <userinput
>tekenreeks</userinput
> met een hexadecimale kleurcode. Deze key is optioneel, standaard is er geen achtergrond.</para>

</listitem>
</varlistentry>
</variablelist>

<para
>In <link linkend="color-themes-gui"
>de &GUI; om kleurenthema's van KTextEditor te beheren</link
> kunnen deze attributen gewijzigd worden in het tabblad <userinput
><guilabel
>Standaard teksttstijlen</guilabel
></userinput
>. De naam in de lijst met stijlen gebruikt de stijl geconfigureerd voor het item, waarmee u een onmiddellijk voorbeeld krijgt bij het configureren van een stijl. Elke stijl laat u gemeenschappelijke attributen selecteren evenals voor- en achtergrondkleuren. Om een achtergrondkleur niet in te stellen, klik rechts om het contextmenu te gebruiken.</para>

<para
>De beschikbare tekststijlsleutels zijn als volgt; de sleutels gebruikt in het <link linkend="color-themes-json"
>&JSON; bestand</link
> staan in de lijst <emphasis
>vet</emphasis
>, de namen gebruikt in de <link linkend="color-themes-gui"
>&GUI;</link
> worden getoond in ronde haakjes, als ze anders zijn.</para>

<variablelist>
<varlistentry>
<term
><guilabel
>Normale tekst &amp; broncode</guilabel
></term>
<listitem>
<para
><userinput
>Normaal</userinput
>: standaard tekststijl voor normale tekst en broncode zonder speciale accentuering.</para>

<para
><userinput
>Sleutelwoord</userinput
>: tekststijl voor ingebouwde sleutelwoorden voor taal.</para>

<para
><userinput
>Functie</userinput
>: tekststijl voor functie-definities en functie-aanroepen.</para>

<para
><userinput
>Variable</userinput
>: tekststijl voor variabelen, indien van toepassing. Variabelen in bijvoorbeeld PHP/Perl starten typisch met een <userinput
>$</userinput
>, dus alle identifiers volgens het patroon <userinput
>$foo</userinput
> worden als variabele geaccentueerd.</para>

<para
><userinput
>ControlFlow</userinput
> (<guilabel
>Loop van controle</guilabel
>): Tekststijl voor loop van sleutelwoorden, zoals <emphasis
>if</emphasis
>, <emphasis
>then</emphasis
>, <emphasis
>else</emphasis
>, <emphasis
>return</emphasis
>, <emphasis
>switch</emphasis
>, <emphasis
>break</emphasis
>, <emphasis
>yield</emphasis
>, <emphasis
>continue</emphasis
>, etc.</para>

<para
><userinput
>Operator</userinput
>: tekststijl voor operators, zoals <userinput
>+</userinput
>, <userinput
>-</userinput
>, <userinput
>*</userinput
>, <userinput
>/</userinput
>, <userinput
>%</userinput
>, etc.</para>

<para
><userinput
>Ingebouwd</userinput
> (<guilabel
>Ingebouwd</guilabel
>): tekststijl voor ingebouwde klassen, functies en objecten van talen.</para>

<para
><userinput
>Extensie</userinput
>: tekststijl voor bekende extensies, zoals &Qt;-klassen en functies/macro's in C++ en Python of boost.</para>

<para
><userinput
>Preprocessor</userinput
>: tekststijl voor preprocessor statements of macro-definities.</para>

<para
><userinput
>Attribuut</userinput
>: tekststijl voor annotaties of attributen van functies of objecten, bijv. <userinput
>@override</userinput
> in Java of <userinput
>__declspec(...)</userinput
> en <userinput
>__attribute__((...))</userinput
> in C++.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Getallen, typen &amp; constanten</guilabel
></term>
<listitem>
<para
><userinput
>DataType</userinput
> (<guilabel
>Type gegeven</guilabel
>): tekststijl voor ingebouwde gegevenstypen zoals <emphasis
>int</emphasis
>, <emphasis
>char</emphasis
>, <emphasis
>float</emphasis
>, <emphasis
>void</emphasis
>, <emphasis
>u64</emphasis
>, etc.</para>

<para
><userinput
>DecVal</userinput
> (<guilabel
>Decimaal/Waarde</guilabel
>): tekststijl voor decimale waarden.</para>

<para
><userinput
>BaseN</userinput
> (<guilabel
>Base-N geheel getal</guilabel
>): tekststijl voor getallen met basis anders dan 10.</para>

<para
><userinput
>Float</userinput
> (<guilabel
>Floating Point</guilabel
>): tekststijl voor getallen met drijvende komma.</para>

<para
><userinput
>Constante</userinput
>: tekststijl voor taalconstanten en gebruikergedefinieerde constanten, bijv. <emphasis
>True</emphasis
>, <emphasis
>False</emphasis
>, <emphasis
>None</emphasis
> in Python of <emphasis
>nullptr</emphasis
> in C/C++; of wiskundige constanten zoals <emphasis
>PI</emphasis
>.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Tekenreeksen &amp; tekens</guilabel
></term>
<listitem>
<para
><userinput
>Char</userinput
> (<guilabel
>Teken</guilabel
>): tekststijl voor losse tekens zoals <userinput
>'x'</userinput
>.</para>

<para
><userinput
>SpecialChar</userinput
> (<guilabel
>Speciaal teken</guilabel
>): tekststijl voor tekens met escape in tekenreeksen, bijv. <quote
><userinput
>hello\n</userinput
></quote
> en andere tekens met speciale betekenis in tekenreeksen, zoals substituties of regex-operators.</para>

<para
><userinput
>String</userinput
>: tekststijl voor tekenreeksen zoals <quote
><userinput
>hallo wereld</userinput
></quote
>.</para>

<para
><userinput
>VerbatimString</userinput
> (<guilabel
>Letterlijke tekenreeks</guilabel
>):  tekststijl voor letterlijke of raw-tekenreeksen zoals <userinput
>'raw \backlash'</userinput
> in Perl, CoffeeScript en shells, evenals in <userinput
>r'\raw'</userinput
> in Python of zoals HIER-documenten.</para>

<para
><userinput
>SpecialString</userinput
> (<guilabel
>Speciale tekenreeks</guilabel
>): tekststijl voor speciale tekenreeksen, zoals reguliere expressies in ECMAScript, de &latex; wiskundige modus, SQL, etc.</para>

<para
><userinput
>Import</userinput
> (<guilabel
>Geïmporteerde dingen, modulen, invoegingen</guilabel
>): tekststijl voor invoegingen, geïmporteerde dingen, modules of &latex; pakketten.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Commentaar &amp; documentatie</guilabel
></term>
<listitem>
<para
><userinput
>Comment</userinput
>: tekststijl voor normaal commentaar.</para>

<para
><userinput
>Documentation</userinput
>: tekststijl voor commentaar dat gaat over API-documentatie, zoals <userinput
>/** doxygen comments */</userinput
> of <userinput
>"""docstrings"""</userinput
>.</para>

<para
><userinput
>Annotation</userinput
>: tekststijl voor annotaties in commentaar of documentatiecommando's, zoals <userinput
>@param</userinput
> in Doxygen of JavaDoc.</para>

<para
><userinput
>CommentVar</userinput
> (<guilabel
>Commentaarvariabele</guilabel
>): tekststijl die verwijst naar variabelenamen gebruikt in bovenstaande commando's in een commentaar, zoals <userinput
>foobar</userinput
> in <quote
><userinput
>@param foobar</userinput
></quote
>, in Doxygen of JavaDoc.</para>

<para
><userinput
>RegionMarker</userinput
> (<guilabel
>Gebiedsmarkering</guilabel
>): tekststijl voor gebiedsmarkering, typisch gedefinieerd door <userinput
>//BEGIN</userinput
> en <userinput
>//END</userinput
> in commentaar.</para>

<para
><userinput
>Information</userinput
>: tekststijl voor informatie, notities en tips, zoals het sleutelwoord <userinput
>@note</userinput
> in doxygen.</para>

<para
><userinput
>Waarschuwing</userinput
>: tekststijl voor waarschuwingen, zoals het sleutelwoord <userinput
>@warning</userinput
> in doxygen.</para>

<para
><userinput
>Alert</userinput
>: tekststijl voor speciale woorden in commentaar, zoals <userinput
>TODO</userinput
>, <userinput
>FIXME</userinput
>, <userinput
>XXXX</userinput
> en <userinput
>WAARSCHUWING</userinput
>.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Diversen</guilabel
></term>
<listitem>
<para
><userinput
>Fout</userinput
>: tekststijl die een fout en verkeerde syntaxis aangeeft met accentuering.</para>

<para
><userinput
>Overigen</userinput
>: tekststijl voor attributen die niet overeenkomen met een van de andere standaard stijlen.</para>
</listitem>
</varlistentry>
</variablelist>

</sect3>

<sect3 id="color-themes-custom-styles">

<title
>Aangepaste tekststijlen voor accentuering</title>

<para
>Hier kunt u tekststijlen instellen voor een specifieke definitie voor syntaxisaccentuering, overschrijvend de <userinput
>standaard tekststijl</userinput
> beschreven in <link linkend="color-themes-text-styles"
>de vorige sectie</link
>. </para>

<para
>In het <link linkend="color-themes-json"
>&JSON; themabestand</link
> correspondeert dit met de sleutel <userinput
>custom-styles</userinput
>, waarvan de waarde een <emphasis
>object</emphasis
> is waar elke subschemasleutel overeenkomt met de <userinput
>naam van een definitie voor syntaxisaccentuering</userinput
>. Zijn waarde is een <emphasis
>object</emphasis
> waar elke sleutel refereert naar de <userinput
>stijlattribuutnaam</userinput
> gedefinieerd in <link linkend="kate-highlight-sections"
>de elementen <userinput
>itemData</userinput
></link
> van het &XML;-bestand met syntaxisaccentuering en de respectievelijke waarde een sub-object is met de sleutels <emphasis
>text-color</emphasis
>, <emphasis
>selected-text-color</emphasis
>, <emphasis
>bold</emphasis
>, <emphasis
>italic</emphasis
>, <emphasis
>underline</emphasis
>, <emphasis
>strike-through</emphasis
>, <emphasis
>background-color</emphasis
> en <emphasis
>selected-background-color</emphasis
>, gedefinieerd in <link linkend="color-themes-text-styles"
>de vorige sectie</link
>. Elk van deze waarden zijn optioneel, omdat als ze niet aanwezig zijn, de stijl ingesteld in <userinput
>text-styles</userinput
> wordt beschouwd. </para>

<para
>In dit stukje code, bijvoorbeeld, heeft de definitie voor <quote
>ISO C++</quote
> syntaxisaccentuering een speciale tekststijl voor de attributen <quote
>Type Modifiers</quote
> en <quote
>Standard Classes</quote
>. In het overeenkomstige &XML;-bestand <quote
>isocpp.xml</quote
> gebruikt het gedefinieerde attribuut <quote
>Standard Classes</quote
> de standaard stijl <userinput
>BuiltIn</userinput
> (of dsBuiltIn). In dit attribuut wordt alleen de waarde van <userinput
>text-color</userinput
> overschreven door de nieuwe kleur <quote
>#6431b3</quote
>. </para>

<programlisting
>"custom-styles": {
    "ISO C++": {
        "Standard Classes": {
            "text-color": "#6431b3"
        },
        "Type Modifiers": {
            "bold": true,
            "selected-text-color": "#009183",
            "text-color": "#00b5cf"
        }
    }
}
</programlisting>

<note>
<itemizedlist>

<listitem>
<para
>U zou deze tekststijlen moeten beschouwen als geassocieerd met de attribuutnamen gedefinieerd in de &XML;-bestanden voor syntaxisaccentuering. Als een XML bestand wordt bijgewerkt en sommige attributen worden hernoemd of verwijderd, zal de aangepaste stijl gedefinieerd in het thema niet langer van toepassing zijn.</para>
</listitem>

<listitem>
<para
>Definities voor syntaxisaccentuering bevatten vaak andere definities. Bijvoorbeeld, de module voor accentueren van <quote
>QML</quote
> bevat deze voor <quote
>JavaScript</quote
>, omdat ze functionaliteit in accentueren delen.</para>
</listitem>

</itemizedlist>
</note>

<para
>In <link linkend="color-themes-gui"
>de &GUI; om thema's van KTextEditor te beheren</link
> kunnen deze attributen gewijzigd worden in het tabblad <userinput
><guilabel
>Tekststijlen voor accentueren</guilabel
></userinput
>. Standaard selecteert het module voor accentueren van het huidige document voor. U zult opmerken dat veel accentuering andere accentuering representeert door groepen in de lijst met stijlen. De meeste accentueringen importeren de accentuering <quote
>Alert</quote
> en veel broncodeformaten importeren de accentuering <quote
>Doxygen</quote
>. </para>

</sect3>

</sect2>

<sect2 id="color-themes-gui">

<title
>De &GUI; voor kleurenthema's </title>

<para
>De eenvoudigste manier om kleurenthema's aan te maken en te bewerken is via de &GUI; in de <link linkend="config-dialog"
>dialoog <quote
>Configureren</quote
></link
> geleverd door <ulink url="https://api.kde.org/frameworks/ktexteditor/html/"
>KTextEditor</ulink
>. Om er toegang toe te krijgen, selecteer <menuchoice
><guimenu
>Instellingen</guimenu
> <guimenuitem
><replaceable
>Toepassing</replaceable
> configureren...</guimenuitem
></menuchoice
> uit de menubalk in uw tekstbewerker. Dit toont het dialoogvenster <guilabel
>Configureren</guilabel
>, selecteer daar <guilabel
>Kleurenthema's</guilabel
> in het zijpaneel. </para>

<mediaobject>
<imageobject
><imagedata format="PNG" fileref="color-themes-gui-default-text-styles.png"/></imageobject>
<textobject
><phrase
>Het instellingendialoogvenster van &kate; met het beheer van kleurenthema's.</phrase
></textobject>
<caption
><para
>Het instellingendialoogvenster van &kate; met het beheer van kleurenthema's.</para>
</caption>
</mediaobject>

<para
>In deze <link linkend="config-dialog"
>dialoog</link
> kunt u alle kleuren in elk thema dat u hebt configureren, evenals nieuwe thema's aanmaken/kopiëren, ze verwijderen, ze exporteren naar een bestand <userinput
>.theme</userinput
> in <link linkend="color-themes-json"
>&JSON;-formaat</link
> of ze importeren uit externe bestanden <userinput
>.theme</userinput
>. Elk thema heeft instellingen voor tekstkleuren en stijlen. </para>

<para
>De ingebouwde thema's kunnen niet standaard gewijzigd worden. Om dat te doen moet u ze kopiëren en een nieuwe naam geven.</para>

<para
>Om een thema permanent in uw tekstbewerker te gebruiken moet u het in de keuzelijst met label <guilabel
>Standaard thema voor <replaceable
>Toepassing</replaceable
></guilabel
> onderaan de dialoog selecteren en op <guibutton
>Toepassen</guibutton
> of <guibutton
>OK</guibutton
> drukken. Standaard is de optie <userinput
><guilabel
>Automatische selectie</guilabel
></userinput
> actief, die een meer toepasselijk kleurenthema volgens het <emphasis
>&kde; &plasma; kleurenschema</emphasis
> gebruikt in de tekstbewerkertoepassing; er wordt gewoonlijk gekozen tussen <quote
>Breeze Light</quote
> en <quote
>Breeze Dark</quote
> als het schema, respectievelijk licht of donker is. </para>

<tip>
<para
>U kunt het &kde; globale kleurenschema in de module <ulink url="help:/kcontrol/colors/"
><quote
>Kleuren</quote
> in &systemsettings;</ulink
> aanpassen. U kunt het ook individueel wijzigen in sommige toepassingen zoals &kate; of &kdevelop;, uit het menu <menuchoice
><guimenu
>Instellingen</guimenu
><guisubmenu
>Kleurenschema</guisubmenu
></menuchoice
>. </para>
</tip>

<sect3 id="color-themes-gui-new-theme">

<title
>Een nieuw thema aanmaken</title>

<para
>Om een nieuw thema aan te maken is het eerst noodzakelijk om een bestaande te kopiëren. Selecteer een bestaand thema die u als basis wilt gebruiken, zoals <quote
>Breeze Light</quote
> of <quote
>Breeze Dark</quote
> en klik op <guibutton
>Kopiëren</guibutton
>. Schrijf daarna een naam voor het nieuwe thema. </para>

<para
>Als u een ingebouwde of alleen-lezen thema wilt wijzigen, moet u het eerst kopiëren onder een andere naam.</para>

</sect3>

<sect3 id="color-themes-gui-import-export">

<title
>&JSON; themabestanden im- of exporteren</title>

<para
>U kunt een geselecteerd thema (inclusief ingebouwden) exporteren naar een <link linkend="color-themes-json"
>&JSON;-bestand</link
> met extensie <userinput
>.theme</userinput
>, met de knop <guibutton
>Exporteren</guibutton
>. Dit zal een dialoog openen om het bestand op te slaan. Om een kleurenthema uit een extern <link linkend="color-themes-json"
>&JSON;-bestand</link
> toe te voegen, druk gewoon op de knop <guibutton
>Importeren</guibutton
> en selecteer het bestand <userinput
>.theme</userinput
> uit de dialoog. </para>

<tip>
<itemizedlist>

<listitem>
<para
>Zoals <link linkend="color-themes-json-overview"
>boven genoemd</link
> worden door gebruikers aangepaste themabestanden opgeslagen in de map <filename class="directory"
>org.kde.syntax-highlighting/themes/</filename
>. Wanneer u hier een thema kopieert of maakt zal het automatisch daar verschijnen. Importeren of toevoegen van een thema is equivalent met kopiëren van een extern <userinput
>.theme</userinput
>-bestand in deze map. KSyntaxHighlighting pikt automatisch kleurenthemabestanden op uit deze map.</para>
</listitem>

<listitem>
<para
>Als u een door u gemaakt thema wilt publiceren is het essentieel om het <link linkend="color-themes-json-metadata"
>metagegevens</link
>-object van het <link linkend="color-themes-json"
>&JSON; bestand</link
> te controleren, met toevoeging van de respectievelijke licentie en controle op het revisienummer.</para>
</listitem>

</itemizedlist>
</tip>

</sect3>

<sect3 id="color-themes-gui-editing">

<title
>Kleurenthema's bewerken</title>

<sect4 id="prefcolors-colors">

<title
>Kleuren</title>

<para
>Hier zijn de kleuren van het tekstbewerkingsgebied aangepast. Deze zijn gedetailleerd in <xref linkend="color-themes-editor-colors"/>.</para>

</sect4>

<sect4 id="prefcolors-normal-text-styles">

<title
>Standaard tekststijlen</title>

<para
>De standaard stijlen voor tekst zijn dezelfde als de stijlen voor geaccentueerde tekst, waardoor de editor tekst op een hele consistente manier kan presenteren. Zo wordt bijvoorbeeld voor commentaartekst dezelfde stijl gebruikt in bijna alle opmaakprofielen die kunnen worden geaccentueerd door KSyntaxHighlighting.</para>
<para
>De naam in de lijst met stijlen gebruikt de stijl die voor dat item is ingesteld, en u krijgt onmiddellijk een voorbeeld te zien wanneer u een stijl aanpast. </para>
<para
>Bij elke stijl kunt u algemene kenmerken kiezen en voorgrond- en achtergrondkleuren. Om een achtergrondkleur uit te zetten klikt u met rechts zodat het contextmenu verschijnt.</para>
<para
>De attributen in dit gebied zijn gedetailleerd in <xref linkend="color-themes-text-styles"/>.</para>

</sect4>

<sect4 id="prefcolors-highlighting-text-styles">

<title
>Stijlen voor accentuering van tekst</title>

<para
>Hier kunt u de tekststijlen die gebruikt worden bij een specifieke accentueringsdefinitie bewerken. De editor zal de accentuering die gebruikt wordt door uw huidige document voorselecteren. Om aan een andere accentuering te werken kiest u er een in het combinatieveld <guilabel
>Accentueren</guilabel
> boven de lijst met stijlen. </para>
<para
>De naam in de lijst met stijlen gebruikt de stijl die voor dat item is ingesteld, en u krijgt onmiddellijk een voorbeeld te zien wanneer u een stijl aanpast. </para>
<para
>Bij elke stijl kunt u algemene kenmerken kiezen en voorgrond- en achtergrondkleuren. Om een achtergrondkleur uit te zetten klikt u met rechts zodat het contextmenu verschijnt. Bovendien kunt u zien of een stijl gelijk is aan de standaardstijl die voor het item gebruikt wordt en die al dan niet gebruiken.</para>
<para
>U ziet dat vele accentueringen andere accentueringen bevatten die als groepen vertegenwoordigd zijn in de lijst met stijlen. Zo importeren bijvoorbeeld de meeste accentueringen de Alert-accentuering, en vele opmaken voor broncode importeren de Doxygen-accentuering. </para>

</sect4>

</sect3>

</sect2>

<sect2 id="color-themes-tips-and-tricks">

<title
>Tips &amp; trucs</title>

<sect3 id="color-themes-contrast">

<title
>Contrast van tekstkleuren</title>

<para
>Een belangrijk aspect bij werken met kleurenthema's is een tekstcontrast te kiezen dat het gemakkelijk maakt om te lezen, speciaal in combinatie met de achtergrond.</para>

<para
>De toepassing <userinput
>Kontrast</userinput
> is een controleur op kleurcontrast. Het vertelt dat de combinaties van tekstkleur en achtergrondkleur leesbaar en toegankelijk zijn, dit is dus een uitstekend hulpmiddel om u te helpen bij het maken van kleurenthema's.</para>

<para
>U kunt <userinput
>Kontrast</userinput
> downloaden uit <ulink url="https://apps.kde.org/en/kontrast"
>de website voor &kde; toepassingen</ulink
> of uit <ulink url="https://flathub.org/apps/details/org.kde.kontrast"
>het Flatpak pakket op Flathub</ulink
> (alleen in GNU/Linux).</para>

<para
>De <userinput
>Contrast</userinput
> toepassing van GNOME is vergelijkbaar. U kunt <ulink url="https://flathub.org/apps/details/org.gnome.design.Contrast"
>het Flatpak pakket op Flathub</ulink
> downloaden (alleen in GNU/Linux).</para>

</sect3>

<sect3 id="color-themes-tips-and-tricks-consistency">

<title
>Suggesties over consistentie met syntaxisaccentuering</title>

<para
>KSyntaxHighlighting omvat <ulink url="https://kate-editor.org/syntax/"
>meer dan 300 definities voor syntaxisaccentuering</ulink
>, het is daarom ideaal dat u nagaat dat uw nieuwe thema er goed uitziet in alle definities voor syntaxisaccentuering. De ingebouwde kleurenthema's hebben de volgende te volgen gelijkenissen die aanbevolen zijn (maar niet verplicht) om een juiste weergave van alle definities voor syntaxisaccentuering te verkrijgen:</para>

<itemizedlist>
<listitem
><para
>Vet gebruiken voor het <quote
>Sleutelwoord</quote
> en <quote
>loop van het programma</quote
> <link linkend="color-themes-text-styles"
>tekststijlen</link
>.</para
></listitem>

<listitem
><para
>Geen achtergrondkleur in elk <link linkend="color-themes-text-styles"
>tekststijlen</link
>, behalve <quote
>Alert</quote
> en <quote
>Gebiedsmarkeringen</quote
>.</para
></listitem>
</itemizedlist>

<para
>De meeste syntaxisaccentueringen zijn bedoeld om er goed uit te zien met de standaard thema's <quote
>Breeze Light</quote
> en <quote
>Breeze Dark</quote
>, een andere manier om consistentie te behouden is om soortgelijke kleuren in de <link linkend="color-themes-text-styles"
>tekststijlen</link
> te gebruiken, zoals <emphasis
>groen</emphasis
> voor <quote
>Preprocessor</quote
> en <quote
>Overigen</quote
>, <emphasis
>blauw</emphasis
> voor <quote
>Gegevenstype</quote
> en <quote
>Attribuut</quote
> of <emphasis
>paars</emphasis
> voor <quote
>Functie</quote
>.</para>

<para
>Merk op dat deze aanbevelingen niet verplicht zijn bij aanmaken en publiceren van een thema.</para>

</sect3>

</sect2>

</sect1>


<sect1 id="dev-scripting">
<title
>Scripting met &javascript;</title>

<para
>De editor-component van &kappname; is eenvoudig uit te breiden met scripts. De scripttaal is ECMAScript (breed bekend als &javascript;). &kappname; ondersteunt twee soorten scripts: inspringen en commandoregelscripts. </para>

<sect2 id="dev-scripting-indentation">
<title
>Inspringscripts</title>

<para
>Inspringscripts - ook genoemd indenteerders - laten de broncode inspringen bij het typen van tekst. Na het indrukken van de toets Enter zal het inspringniveau vaak toenemen. </para>

<para
>De volgende secties beschrijven stap voor stap hoe het skelet voor een eenvoudige indenteerder te maken. Als eerste stap, maak een nieuw bestand <filename
>*.js</filename
> aan, &eg; met de naam <filename
>javascript.js</filename
> in de lokale thuismap <filename
>$<envar
>XDG_DATA_HOME</envar
>/katepart5/script/indentation</filename
>. Waarin de omgevingsvariabele <envar
>XDG_DATA_HOME</envar
> typisch expandeert tot ofwel <filename
>~/.local</filename
> of <filename
>~/.local/share</filename
>. </para>
<para
>Op &Windows; zijn deze bestanden gelokaliseerd in <filename
>%USERPROFILE%\AppData\Local\katepart5\script\indentation</filename
>. <replaceable
>%USERPROFILE%</replaceable
> wordt gewoonlijk <filename
>C:\\Users\\<replaceable
>gebruiker</replaceable
></filename
>.</para>

<sect3 id="dev-scripting-indentation-header">
<title
>De kop van het inspringscript</title>
<para
>De kop van het bestand <filename
>javascript.js</filename
> is ingebed als &JSON; aan het begin van het document als volgt: <programlisting>
var kate-script = {
 * "name": JavaScript
 * "author": Voorbeeldnaam &lt;voorbeeld.naam@een.adres.org&gt;,
 * "license": "BSD License"
 * "revision": 1,
 * "kate-version": "5.1",
 * "required-syntax-style": javascript,
 * "indent-languages": ["javascript"],
 * "priority": 0,
 *}; // kate-script-header, moet aan het begin van het bestand staan zonder commentaar
</programlisting
> Elk item wordt nu in detail uitgelegd: <itemizedlist>
<listitem
><para
><literal
>name</literal
> [vereist]: Dit is de naam van de indenteerder die in het menu <menuchoice
><guimenu
>Hulpmiddelen</guimenu
><guimenuitem
>Inspringen</guimenuitem
></menuchoice
> verschijnt en in de configuratiedialoog. </para
></listitem>
<listitem
><para
><literal
>author</literal
> [optioneel]: De naam van de auteur en contactinformatie. </para
></listitem>
<listitem
><para
><literal
>license</literal
> [optioneel]: Korte vorm van de licentie, zoals BSD License of LGPLv3. </para
></listitem>
<listitem
><para
><literal
>revision</literal
> [vereist]: De revisie van het script. Dit getal moet verhoogd worden wanneer het script wordt gewijzigd. </para
></listitem>
<listitem
><para
><literal
>kate-version</literal
> [required]: Minimaal vereiste versie van &kappname;. </para
></listitem>
<listitem
><para
><literal
>required-syntax-style</literal
> [optioneel]: De vereiste stijl voor de syntaxis, die overeenkomt met de gespecificeerde <literal
>style</literal
> in bestanden voor accentuering van syntaxis. Dit is belangrijk voor indenteerders die vertrouwen op specifieke informatie voor accentuering in het document. Als een vereiste syntaxisstijl is gespecificeerd, zal de indenteerder alleen beschikbaar zijn wanneer het juiste programma voor accentuering actief is. Dit voorkomt <quote
>ongedefinieerd gedrag</quote
> veroorzaakt door de indenteerder te gebruiken zonder het verwachte schema voor accentuering. De Ruby indenteerder, bijvoorbeeld, maakt hier gebruik van in de bestanden <filename
>ruby.js</filename
> en <filename
>ruby.xml</filename
>. </para
></listitem>
<listitem
><para
><literal
>indent-languages</literal
> [optioneel]: &JSON; array van syntaxis stijlen die de indenteerder correct kan laten inspringen, &eg;: <literal
>["c++", "java"]</literal
>. </para
></listitem>
<listitem
><para
><literal
>priority</literal
> [optioneel]: Als verschillende indenteerders geschikt zij voor een bepaald bestand om te accentueren, dan bepaalt de prioriteit welke indenteerder als standaard wordt gekozen. </para
></listitem>
</itemizedlist>
</para>

</sect3>

<sect3 id="dev-scripting-indentation-body">
<title
>De broncode van de indenteerder</title>
<para
>Nadat de header is gespecificeerd, legt deze sectie uit hoe het script voor inspringen zelf werkt. Het basis sjabloon van de inhoud ziet er uit als volgt: <programlisting>
// vereiste js-bibliotheken van katepart, &eg; range.js als u Range gebruikt
require ("range.js");
triggerCharacters = "{}/:;";
function indent(line, indentWidth, ch)
{
    // aangeroepen voor elk teken nieuwe-regel (ch == '\n') en alle tekens gespecificeerd in
    // de globale variabele triggerCharacters. Bij het aanroepen van <menuchoice
><guimenu
>Hulpmiddelen</guimenu
><guimenuitem
>Inspringen formatteren</guimenuitem
></menuchoice>
    // is de variabele ch leeg, i.e. ch == ''.
    //
    // zie ook: Scripting API
    return -2;
}
</programlisting
> De functie <function
>indent()</function
> heeft drie parameters: <itemizedlist
> <listitem
><para
><literal
>line</literal
>: de regel die moet inspringen</para
></listitem
> <listitem
><para
><literal
>indentWidth</literal
>: de inspringbreedte in aantal spaties</para
></listitem
> <listitem
><para
><literal
>ch</literal
>: of een teken nieuwe-regel (<literal
>ch == '\n'</literal
>), het activeringsteken gespecificeerd in <literal
>triggerCharacters</literal
> of leeg als de gebruiker de actie <menuchoice
><guimenu
>Hulpmiddelen</guimenu
><guimenuitem
>Uitlijnen</guimenuitem
></menuchoice
> heeft gestart.</para
></listitem
> </itemizedlist
> De terugkeerwaarde van de functie <function
>indent()</function
> specificeert hoe de regel zal worden ingesprongen. Als de terugkeerwaarde een eenvoudig geheel getal is, wordt deze geïnterpreteerd als volgt: <itemizedlist
> <listitem
><para
>terugkeerwaarde <literal
>-2</literal
>: niets doen</para
></listitem
> <listitem
><para
>terugkeerwaarde <literal
>-1</literal
>: behoudt het inspringen (zoekt naar voorgaande niet-blanko regel)</para
></listitem
> <listitem
><para
>terugkeerwaarde <literal
> 0</literal
>: getallen &gt;= 0 specificeer de insringdiepte in spaties</para
></listitem
> </itemizedlist
> Alternatief, een reeks van twee elementen kan worden teruggegeven: <itemizedlist
> <listitem
><para
><literal
>geef [ indent, align ] terug;</literal
></para
></listitem
> </itemizedlist
> In dit geval is het eerste element de inspringdiepte zoals hierboven met dezelfde betekenis van de speciale waarden. Het tweede element is een absolute waarde die een kolom aangeeft voor <quote
>uitlijning</quote
>. Als deze waarde groter is dan de inspringwaarde, dan is het verschil een aantal spaties dat na het inspringen van de eerste parameter moet worden toegevoegd. Anders wordt het tweede getal genegeerd. Tabs en spaties voor inspringen gebruiken wordt vaak <quote
>gemengde modus</quote
> genoemd. </para>

<para
>beschouw het volgende voorbeeld: Neem aan dat tabs worden gebruikt voor inspringen en tabbreedte is ingesteld op 4. &lt;tab&gt; vertegenwoordigt hier een tab-teken en '.' een spatie: <programlisting>
1: &lt;tab&gt;&lt;tab&gt;foobar("hello",
2: &lt;tab&gt;&lt;tab&gt;......."world");
</programlisting
> Bij inspringen van regel 2 zal de functie <function
>indent()</function
> [8, 15] als terugkeerwaarde geven. Als resultaat worden hier twee tabs ingevoegd om in te springen tot kolom 8 en worden 7 spaties toegevoegd om de tweede parameter uit te lijnen onder de eerste, zodat het uitgelijnd blijft als het bestand wordt bekeken met een andere tabbreedte. </para>

<para
>Een standaard &kde; installatie levert bij &kappname; verschillende indenteerders. De overeenkomstige &javascript; broncode kan worden gevonden in <filename
>$<envar
>XDG_DATA_DIRS</envar
>/katepart5/script/indentation</filename
>.</para>
<para
>Op &Windows; zijn deze bestanden gelokaliseerd in <filename
>%USERPROFILE%\AppData\Local\katepart5\script\indentation</filename
>. <replaceable
>%USERPROFILE%</replaceable
> wordt gewoonlijk <filename
>C:\\Users\\<replaceable
>gebruiker</replaceable
></filename
>. </para>

<para
>Ontwikkeling van een indenteerder vereist herladen van de scripts om te zien of de wijzigingen zich netjes gedragen. In plaats van het opnieuw opstarten van de toepassing, schakel eenvoudig om naar de commandoregel en start het commando <command
>reload-scripts</command
>. </para>

<para
>Als u bruikbare scripts ontwikkeld overweeg dan deze aan het &kappname;-project bij te dragen door <ulink url="mailto:kwrite-devel@kde.org"
>kontact op te nemen via de e-maillijst</ulink
>. </para>

</sect3>
</sect2>

<sect2 id="dev-scripting-command-line">
<title
>Commandoregelscripts</title>

<para
>Omdat het moeilijk is om aan de noden van iedereen te voldoen, ondersteunt &kappname; kleine hulpmiddelen voor snelle tekstmanipulatie via de <link linkend="advanced-editing-tools-commandline"
>ingebouwde commandoregel</link
>. Het commando <command
>sort</command
> is bijvoorbeeld geïmplementeerd als een script. Deze sectie legt uit hoe <filename
>*.js</filename
> bestanden aan te maken om &kappname; uit te breiden met willekeurige hulpscripts. </para>

<para
>Commandoregelscripts staan in dezelfde map als inspringscripts. Dus als eerste stap maakt u een nieuw <filename
>*.js</filename
> bestand aan genaamd <filename
>myutils.js</filename
> in de lokale map <filename
>$<envar
>XDG_DATA_HOME</envar
>/katepart5/script/commands</filename
>. De omgevingsvariabele <envar
>XDG_DATA_HOME</envar
> daarin expandeert typisch tot ofwel <filename
>~/.local</filename
> of <filename
>~/.local/share</filename
>.</para>
<para
>Op &Windows; zijn deze bestanden gelokaliseerd in <filename
>%USERPROFILE%\AppData\Local\katepart5\script\commands</filename
>. <replaceable
>%USERPROFILE%</replaceable
> wordt gewoonlijk <filename
>C:\\Users\\<replaceable
>user</replaceable
></filename
>. </para>

<sect3 id="dev-scripting-command-line-header">
<title
>De kop van het commandoregelscript</title>
<para
>De header van elke commandoregelscript is ingebed in &JSON; aan het begin van het script als volgt: <programlisting>
var katescript = {
    "author": "Voorbeeldnaam &lt;voorbeeld.naam@een.adres.org&gt;",
    "license": "LGPLv2+",
    "revision": 1,
    "kate-version": "5.1",
    "functions": ["sort", "moveLinesDown"],
    "actions": [
        {   "function": "sort",
            "name": "Sort Selected Text",
            "category": "Editing",
            "interactive": "false"
        },
        {   "function": "moveLinesDown",
            "name": "Move Lines Down",
            "category": "Editing",
            "shortcut": "Ctrl+Shift+Down",
            "interactive": "false"
        }
    ]
}; // kate-script-header, moet zich bevinden aan het begin van het bestand zonder commentaar
</programlisting
> Elk item wordt nu in detail uitgelegd: <itemizedlist>
<listitem
><para
><literal
>author</literal
> [optioneel]: De naam van de auteur en contactinformatie.</para
></listitem>
<listitem
><para
><literal
>license</literal
> [optioneel]: Korte vorm van de licentie, zoals BSD licentie of LGPLv2.</para
></listitem>
<listitem
><para
><literal
>revision</literal
> [vereist]: De revisie van het script. Dit getal moet verhoogd worden wanneer het script wordt gewijzigd.</para
></listitem>
<listitem
><para
><literal
>kate-version</literal
> [required]: Minimaal vereiste versie van &kappname;.</para
></listitem>
<listitem
><para
><literal
>functions</literal
> [vereist]: &JSON;-array met commando's in het script.</para
></listitem>
<listitem
><para
><literal
>actions</literal
> [optioneel]: &JSON; Array van &JSON; objecten die de acties definiëren die verschijnen in het menu van de toepassing. Gedetailleerde informatie wordt in de sectie <link linkend="advanced-editing-tools-commandline"
>Koppelen van sneltoetsen</link
>.</para
></listitem>
</itemizedlist>
</para>

<para
>Omdat de waarde van <literal
>functions</literal
> een &JSON; array is, is een enkel script in staat een willekeurig aantal commandoregels te bevatten. Elke functie is beschikbaar via <link linkend="advanced-editing-tools-commandline"
>ingebouwde commandoregel</link
> van &kappname;. </para>
</sect3>

<sect3 id="dev-scripting-command-line-body">
<title
>De broncode van het script</title>

<para
>Alle in de kop gespecificeerde functies moeten worden geïmplementeerd in het script. Het script-bestand uit het bovenstaande voorbeeld moet de twee functies <command
>sort</command
> en <command
>moveLinesDown</command
> implementeren. Alle functies hebben de volgende syntaxis: <programlisting
>// vereiste js-bibliotheken van katepart, &eg; range.js als u Range gebruikt
require ("range.js");

function &lt;naam&gt;(arg1, arg2, ...)
{
    // ... implementatie, zie ook: Scripting API
}
</programlisting>
</para>

<para
>De argumenten in de commandoregel worden doorgegeven naar de functie als <parameter
>arg1</parameter
>, <parameter
>arg2</parameter
>, &etc; Om documentatie voor elk commando te leveren, implementeert u eenvoudig de functie '<function
>help</function
>' als volgt: <programlisting>
function help(cmd)
{
    if (cmd == "sort") {
        return i18n("Sort the selected text.");
    } else if (cmd == "...") {
        // ...
    }
}
</programlisting
> uitvoeren van <command
>help sort</command
> in de commandoregel roept deze help-functie op met het argument <parameter
>cmd</parameter
> ingesteld op het gegeven commando, &ie; <parameter
>cmd == "sort"</parameter
>. &kappname; laat dan de teruggeleverde tekst zien als documentatie voor de gebruiker. Zorg er voor dat <link linkend="dev-scripting-api-i18n"
>de tekenreeksen vertaald zijn</link
>. </para>

<para
>Ontwikkeling van een commandoregelscript vereist herladen van de scripts om te zien of de wijzigingen zich netjes gedragen. In plaats van het opnieuw opstarten van de toepassing, schakel eenvoudig om naar de commandoregel en start het commando <command
>reload-scripts</command
>. </para>

<sect4 id="dev-scripting-command-line-shortcuts">
<title
>Koppelen van sneltoetsen</title>
<para
>Om de scripts toegankelijk te maken in het menu van de toepassing en sneltoetsen toe te kunnen, moet het script een juiste script-header leveren. In het bovenstaande voorbeeld, verschijnen beide functies <literal
>sort</literal
> en <literal
>moveLinesDown</literal
> in het menu vanwege het volgende deel in de script-header: <programlisting>
var katescript = {
    ...
    "actions": [
        {   "function": "sort",
            "name": "Sort Selected Text",
            "icon": "",
            "category": "Editing",
            "interactive": "false"
        },
        {   "function": "moveLinesDown",
            "name": "Move Lines Down",
            "icon": "",
            "category": "Editing",
            "shortcut": "Ctrl+Shift+Down",
            "interactive": "false"
        }
    ]
};
</programlisting
> De velden voor een actie zijn als volgt: <itemizedlist>
<listitem
><para
><literal
>function</literal
> [vereist]: De functie die zou moeten verschijnen in het menu <menuchoice
><guimenu
>Hulpmiddelen</guimenu
> <guisubmenu
>Scripts</guisubmenu
></menuchoice
>.</para
></listitem>
<listitem
><para
><literal
>name</literal
> [vereist]: De tekst verschijnt het script-menu.</para
></listitem>
<listitem
><para
><literal
>icon</literal
> [optioneel]: Het pictogram verschijnt naast de tekst in het menu. Alle pictogramnamen van &kde; kunnen hier worden gebruikt.</para
></listitem>
<listitem
><para
><literal
>category</literal
> [optioneel]: Als een categorie wordt gespecificeerd, verschijnt het script in een submenu.</para
></listitem>
<listitem
><para
><literal
>shortcut</literal
> [optioneel]: De hier gegeven sneltoets is de standaard sneltoets. Voorbeeld: <literal
>Ctrl+Alt+t</literal
>. Zie de <ulink url="https://doc.qt.io/doc/qt-5/qt.html#Key-enum"
>&Qt;-documentatie</ulink
> voor verdere details.</para
></listitem>
<listitem
><para
><literal
>interactive</literal
> [optioneel]: Als het script invoer van de gebruiker in de commandoregel nodig heeft, zet dit dan op <literal
>true</literal
>.</para
></listitem>
</itemizedlist>
</para>

<para
>Als u bruikbare scripts ontwikkeld overweeg dan deze aan het &kappname;-project bij te dragen door <ulink url="mailto:kwrite-devel@kde.org"
>kontact op te nemen via de e-maillijst</ulink
>. </para>

</sect4>
</sect3>
</sect2>

<sect2 id="dev-scripting-api">
<title
>API voor scripts maken</title>

<para
>De API voor scripts hier aanwezig is beschikbaar voor alle scripts, &eg; scripts voor inspringen en opdrachtregels. De klassen <classname
>Cursor</classname
> en <classname
>Range</classname
> worden geleverd door biblitheekbestanden in <filename
>$<envar
>XDG_DATA_DIRS</envar
>/katepart5/libraries</filename
>. Als u ze in uw script wilt gebruiken, wat nodig is om bepaalde <classname
>Document</classname
> of <classname
>View</classname
>-functies te gebruiken, voeg dan de benodigde bibliotheek in met: <programlisting
>// vereiste js-bibliotheken van katepart, &eg; range.js als u Range gebruikt
require ("range.js");
</programlisting>
</para>

<para
>Om de standaard API voor scripting uit te breiden met uw eigen functies en prototypen, maak gewoon een nieuw bestand aan in de lokale configuratiemap van &kde; <filename
>$<envar
>XDG_DATA_HOME</envar
>/apps/katepart5/libraries</filename
> en voeg deze in in uw script met: <programlisting
>require ("mijnscriptnaamhier.js");
</programlisting>

</para>

<para
>Op &Windows; zijn deze bestanden gelokaliseerd in <filename
>%USERPROFILE%\AppData\Local\katepart5\libraries</filename
>. <replaceable
>%USERPROFILE%</replaceable
> wordt gewoonlijk <filename
>C:\\Users\\<replaceable
>user</replaceable
></filename
>.</para>

<para
>Om bestaande prototypes zoals <classname
>Cursor</classname
> of <classname
>Reeks</classname
> uit te breiden, os de aanbevolen manier om <emphasis
>niet</emphasis
> de globale <filename
>*.js</filename
> bestanden te wijzigen. In plaats daarvan wijzigt u het prototype <classname
>Cursor</classname
> in &javascript; nadat <filename
>cursor.js</filename
> is ingevoegd in uw script via <literal
>require</literal
>. </para>

<sect3 id="dev-scripting-api-prototypes">
<title
>Cursors en bereiken</title>

<para
>Omdat &kappname; is een tekstbewerker is, is alles voor de API voor scripting, waar mogelijk, gebaseerd op cursors en reeksen. Een cursor is een eenvoudig een paar <literal
>(regel, kolom)</literal
> die een tekstpositie in het document weergeeft. Een reeks omspant tekst van een begincursorpositie tot een eincursorpositie. De API wordt in de volgende secties in detail uitgelegd. </para>

<sect4 id="dev-scripting-api-cursors">
<title
>Het prototype van cursor</title>

<variablelist
><varlistentry>
<term
><synopsis
>Cursor();
</synopsis
></term>
<listitem
><para
>Constructor. Levert een cursor terug op positie <literal
>(0, 0)</literal
>.</para>
<para
>Voorbeeld: <function
>var cursor = new Cursor();</function
> </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Cursor(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Constructor. Levert een cursor terug op positie (regel, kolom). </para>
<para
>Voorbeeld: <function
>var cursor = new Cursor(3, 42);</function
> </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Cursor(<parameter
>Cursor <replaceable
>andere</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Constructor kopiëren. Geeft een kopie van de cursor <replaceable
>andere</replaceable
>.  </para>
<para
>Voorbeeld:<function
>var copy = nieuwe cursor(andere);</function
> </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Cursor Cursor.clone();
</synopsis
></term>
<listitem
><para
>Geeft een kloon van de cursor terug.</para>
<para
>Voorbeeld: <function
>var clone = cursor.clone();</function
> </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Cursor.setPosition(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Stel de cursorpositie in op <replaceable
>regel</replaceable
> en <replaceable
>kolom</replaceable
>.</para>
<para
>Sinds: &kde; 4.11 </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Cursor.isValid();
</synopsis
></term>
<listitem
><para
>Controleert of de cursor geldig is. De cursor is ongeldig indien lijn en/of kolom ingesteld zijn op <literal
>-1</literal
>. </para>
<para
>Voorbeeld: <function
>var valid = cursor.isValid();</function
> </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Cursor Cursor.invalid();
</synopsis
></term>
<listitem
><para
>Geeft een nieuwe ongeldige cursor op locatie <literal
>(-1, -1)</literal
>. </para>
<para
>Voorbeeld:<function
>var invalidCursor = cursor.invalid();</function
> </para
></listitem>
</varlistentry>

<varlistentry>
<term
><synopsis
>int Cursor.compareTo(<parameter
>Cursor <replaceable
>andere</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Vergelijkt deze cursor met de cursor <replaceable
>andere</replaceable
>. Geeft terug <itemizedlist>
<listitem
><para
><literal
>-1</literal
>, indien deze cursor zich bevindt voor de cursor <replaceable
>andere</replaceable
>,</para
></listitem>
<listitem
><para
><literal
>0</literal
>, indien beide cursors gelijk zijn</para
></listitem>
<listitem
><para
><literal
>+1</literal
>, als deze cursor gelokaliseerd is na de cursor <replaceable
>andere</replaceable
>.</para
></listitem>
</itemizedlist>
</para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Cursor.equals(<parameter
>Cursor <replaceable
>andere</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als deze cursor en de cursor <replaceable
>andere</replaceable
> gelijk zijn, anders <literal
>false</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String Cursor.toString();
</synopsis
></term>
<listitem
><para
>Geeft de cursor terug als een tekenreeks met de vorm <quote
><literal
>Cursor(regel, kolom)</literal
></quote
>. </para
></listitem>
</varlistentry
></variablelist>

</sect4>


<sect4 id="dev-scripting-api-ranges">
<title
>Het prototype Range</title>

<variablelist
><varlistentry>
<term
><synopsis
>Range();
</synopsis
></term>
<listitem
><para
>Constructor. Aanroepen van <literal
>new Range()</literal
> geeft een bereik op (0, 0) - (0, 0) terug. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Range(<parameter
>Cursor <replaceable
>begin</replaceable
></parameter
>, <parameter
>Cursor <replaceable
>eind</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Constructor. Aanroepen van <literal
>new Range(<replaceable
>begin</replaceable
>, <replaceable
>eind</replaceable
>)</literal
> geeft de Reeks (<replaceable
>begin</replaceable
>, <replaceable
>eind</replaceable
>) terug. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Range(<parameter
>int <replaceable
>beginRegel</replaceable
></parameter
>, <parameter
>int <replaceable
>beginKolom</replaceable
></parameter
>, <parameter
>int <replaceable
>eindRegel</replaceable
></parameter
>, <parameter
>int <replaceable
>eindKolom</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Constructor. Aanroepen van <literal
>new Range(<replaceable
>beginRegel</replaceable
>, <replaceable
>beginKolom</replaceable
>, <replaceable
>eindeRegel</replaceable
>, <replaceable
>eindKolom</replaceable
>)</literal
> geeft de Reeks van (<replaceable
>beginRegel</replaceable
>, <replaceable
>beginKolom</replaceable
>) tot (<replaceable
>eindeRegel</replaceable
>, <replaceable
>eindKolom</replaceable
>). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Range(<parameter
>Range <replaceable
>andere</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Constructor kopiëren. Geeft een kopie terug van Range <replaceable
>andere</replaceable
>.  </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Reeks Range.clone();
</synopsis
></term>
<listitem
><para
>Geeft een kloon van de reeks terug. </para>
<para
>Voorbeeld: <function
>var clone = range.clone();</function
> </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Range.isEmpty();
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als zowel begin als einde cursor gelijk zijn. </para>
<para
>Voorbeeld: <function
>var empty = range.isEmpty();</function
> </para>
<para
>Sinds: &kde; 4.11 </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Range.isValid();
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als zowel begin als einde cursor geldig zijn, anders <literal
>false</literal
>. </para>
<para
>Voorbeeld: <function
>var valid = range.isValid();</function
> </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Range Range.invalid();
</synopsis
></term>
<listitem
><para
>Geeft de Reeks van (-1, -1) tot (-1, -1) terug. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Range.contains(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als de reeks de cursorpositie bevat, anders <literal
>false</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Range.contains(<parameter
>Range <replaceable
>andere</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als deze reeks de Reeks<replaceable
>andere</replaceable
> bevat, anders <literal
>false</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Range.containsColumn(<parameter
>int <replaceable
>kolom</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als <replaceable
>kolom</replaceable
> zich in het half open interval <literal
>[start.column, end.column)</literal
> bevindt, anders <literal
>false</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Range.containsLine(<parameter
>int <replaceable
>regel</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als <replaceable
>regel</replaceable
> zich in het half open interval <literal
>[start.line, end.line)</literal
> bevindt, anders <literal
>false</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Range.overlaps(<parameter
>Range <replaceable
>overig</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als deze reeks en de reeks<replaceable
>overig</replaceable
> een gebied delen, anders <literal
>false</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Range.overlapsLine(<parameter
>int <replaceable
>regel</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als <replaceable
>regel</replaceable
> zich in het interval <literal
>[start.line, end.line)</literal
> bevindt, anders <literal
>false</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Range.overlapsColumn(<parameter
>int <replaceable
>kolom</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als <replaceable
>kolom</replaceable
> zich in het interval <literal
>[start.column, end.column)</literal
> bevindt, anders <literal
>false</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Range.onSingleLine();
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als zowel begin als einde van de reeks op dezelfde regel, &ie; als <replaceable
>Range.start.line == Range.end.line</replaceable
>. </para>
<para
>Sinds: &kde; 4.9 </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Range.equals(<parameter
>Range <replaceable
>overig</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als deze reeks de Reeks <replaceable
>andere</replaceable
> gelijk zijn, anders <literal
>false</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String Range.toString();
</synopsis
></term>
<listitem
><para
>Geeft de reeks terug als een tekenreeks van de vorm <quote
><literal
>Range(Cursor(line, column), Cursor(line, column))</literal
></quote
>. </para
></listitem>
</varlistentry
></variablelist>

</sect4>
</sect3>

<sect3 id="dev-scripting-api-global">
<title
>Globale functies</title>
<para
>Deze sectie geeft een lijst met alle globale functies.</para>


<sect4 id="dev-scripting-api-includes">
<title
>Lezen &amp; invoegen van bestanden</title>

<variablelist
><varlistentry>
<term
><synopsis
>String read(<parameter
>String <replaceable
>bestand</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Zal het gegeven <replaceable
>bestand</replaceable
> zoeken relatief ten opzichte van de map <literal
>katepart5/script/files</literal
> en en de inhoud teruggeven als een tekenreeks. </para
></listitem>
</varlistentry
></variablelist>

<variablelist
><varlistentry>
<term
><synopsis
>void require(<parameter
>String <replaceable
>bestand</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Zal het gegeven <replaceable
>bestand</replaceable
> zoeken relatief ten opzichte van de map <literal
>katepart5/script/libraries</literal
> en het evalueren. <literal
>require</literal
> is intern beschermd tegen meervoudig invoegen van hetzelfde <replaceable
>bestand</replaceable
>. </para>
<para
>Sinds: &kde; 4.10 </para>
</listitem>
</varlistentry
></variablelist>

</sect4>

<sect4 id="dev-scripting-api-debug">
<title
>Debugging</title>

<variablelist
><varlistentry>
<term
><synopsis
>void debug(<parameter
>String <replaceable
>tekst</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Stuurt <replaceable
>tekst</replaceable
> naar <literal
>stdout</literal
> in de console na het starten van de toepassing. </para
></listitem>
</varlistentry
></variablelist>

</sect4>

<sect4 id="dev-scripting-api-i18n">
<title
>Vertaling</title>

<para
>Om volledige lokalisatie te ondersteunen zijn er verschillende functies om tekenreeksen in scripts te vertalen, namelijk <literal
>i18n</literal
>, <literal
>i18nc</literal
>, <literal
>i18np</literal
> en <literal
>i18ncp</literal
>. Deze functies gedragen zich op precies dezelfde manier zoals in <ulink url="https://techbase.kde.org/Development/Tutorials/Localization/i18n"
> Vertalingsfuncties van &kde;</ulink
>. </para>

<para
>De vertalingfuncties vertalen de omwikkelde tekenreeksen via het vertalingssysteem van &kde; naar de in de toepassing gebruikte taal. Tekenreeksen in scripts die worden ontwikkeld in de officiële broncode van &kappname; worden automatisch geëxtraheerd en vertaalbaar gemaakt. Met andere woorden, als ontwikkelaar van &kappname; hoeft u zich niet bezig te houden met extraheren en vertalen. Opgemerkt moet echter worden dat de vertaling alleen werkt binnen de infrastructuur van $kde;. Dat wil zeggen dat nieuwe tekenreeksen in scripts van derden ontwikkeld buiten &kde; niet worden vertaald. Neem dus in overweging om uw scripts aan &kate; bij te dragen zodat vertaling mogelijk wordt. </para>

<variablelist
><varlistentry>
<term
><synopsis
>void i18n(<parameter
>String <replaceable
>tekst</replaceable
></parameter
>, <replaceable
>arg1</replaceable
>, ...);
</synopsis
></term>
<listitem
><para
>Vertaalt <replaceable
>text</replaceable
> in de taal die wordt gebruikt door de toepassing. De argumenten <replaceable
>arg1</replaceable
>, ..., zijn optioneel en worden gebruikt om plaatshouders <literal
>%1</literal
>, <literal
>%2</literal
>, &etc; te vervangen.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><synopsis
>void i18nc(<parameter
>String <replaceable
>context</replaceable
></parameter
>, <parameter
>String <replaceable
>tekst</replaceable
></parameter
>, <replaceable
>arg1</replaceable
>, ...);
</synopsis
></term>
<listitem
><para
>Vertaalt <replaceable
>text</replaceable
> in de taal die wordt gebruikt door de toepassing. Bovendien is de tekenreeks <replaceable
>context</replaceable
> zichtbaar voor de vertalers, zodat zij een betere vertaling kunnen produceren. De argumenten <replaceable
>arg1</replaceable
>, ..., zijn optioneel en worden gebruikt om plaatshouders <literal
>%1</literal
>, <literal
>%2</literal
>, &etc; te vervangen.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><synopsis
>void i18np(<parameter
>String <replaceable
>enkelvoud</replaceable
></parameter
>, <parameter
>String <replaceable
>meervoud</replaceable
></parameter
>, <parameter
>int <replaceable
>nummer</replaceable
></parameter
>, <replaceable
>arg1</replaceable
>, ...);
</synopsis
></term>
<listitem
><para
>Vertaalt ofwel <replaceable
>enkelvoud</replaceable
> of <replaceable
>meervoud</replaceable
> in de taal die wordt gebruikt door de toepassing, afhankelijk van het gegeven <replaceable
>nummer</replaceable
>. De argumenten <replaceable
>arg1</replaceable
>, ..., zijn optioneel en worden gebruikt om plaatshouders <literal
>%1</literal
>, <literal
>%2</literal
>, &etc; te vervangen.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><synopsis
>void i18ncp(<parameter
>String <replaceable
>context</replaceable
></parameter
>, <parameter
>String <replaceable
>eenvoud</replaceable
></parameter
>, <parameter
>String <replaceable
>meervoud</replaceable
></parameter
>, <parameter
>int <replaceable
>nummer</replaceable
></parameter
>, <replaceable
>arg1</replaceable
>, ...);
</synopsis
></term>
<listitem
><para
>Vertaalt <replaceable
>enkelvoud</replaceable
> of<replaceable
>meervoud</replaceable
> in de taal die wordt gebruikt door de toepassing, afhankelijk van het gegeven nummer. Bovendien is de tekenreeks <replaceable
>context</replaceable
> zichtbaar voor de vertalers, zodat zij een betere vertaling kunnen produceren. De argumenten <replaceable
>arg1</replaceable
>, ..., zijn optioneel en worden gebruikt om plaatshouders <literal
>%1</literal
>, <literal
>%2</literal
>, &etc; te vervangen.</para
></listitem>
</varlistentry
></variablelist>

</sect4>
</sect3>

<sect3 id="dev-scripting-api-view">
<title
>De API voor weergave</title>
<para
>Wanneer een script wordt uitgevoerd, dan is er een globale variabele <quote
><literal
>view</literal
></quote
> die de huidige actieve editor-view representeert. Het volgende is een lijst met alle beschikbare weergavefuncties. <variablelist>

<varlistentry>
<term
><synopsis
><function
>void view.copy()</function
>
</synopsis
></term>
<listitem>
<para
>Kopieer de selectie als er een is, anders de huidige regel als de optie <userinput
>[ ] Kopieer/knip de huidige regel als er geen selectie is</userinput
> is gezet.</para>
<para
>Sinds: &kde-frameworks; 5.79</para>
</listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
><function
>void view.cut()</function
>
</synopsis
></term>
<listitem>
<para
>Knip de selectie als er een is, anders de huidige regel als de optie <userinput
>[ ] Kopieer/knip de huidige regel als er geen selectie is</userinput
> is gezet.</para>
<para
>Sinds: &kde-frameworks; 5.79</para>
</listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
><function
>void view.paste()</function
>
</synopsis
></term>
<listitem>
<para
>De inhoud van het klembord plakken.</para>
<para
>Sinds: &kde-frameworks; 5.79</para>
</listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
><function
>Cursor view.cursorPosition()</function
>
</synopsis
></term>
<listitem
><para
>Geeft de huidige cursorpositie in het beeld terug.</para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>void view.setCursorPosition(<parameter
>int <replaceable
>line</replaceable
></parameter
>, <parameter
>int <replaceable
>column</replaceable
></parameter
>);
void view.setCursorPosition(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Stelt de huidige cursorpositie in op ofwel (regel, kolom) of op de gegeven cursor. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Cursor view.virtualCursorPosition();
</synopsis
></term>
<listitem
><para
>Geeft de virtuele cursorpositie terug waarin elke tab telt voor de overeenkomstige hoeveelheid spaties afhankelijk van de huidige tabbreedte. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>void view.setVirtualCursorPosition(<parameter
>int <replaceable
>line</replaceable
></parameter
>, <parameter
>int <replaceable
>column</replaceable
></parameter
>);
void view.setVirtualCursorPosition(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Stelt de huidige virtuele cursorpositie in op (regel, kolom) of op de gegeven cursor. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String view.selectedText();
</synopsis
></term>
<listitem
><para
>Geeft de geselecteerde tekst terug. Als er geen tekst is geselecteerd dan is de tekenreeks leeg. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool view.hasSelection();
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als het beeld geselecteerde tekst heeft, anders <literal
>false</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Range view.selection();
</synopsis
></term>
<listitem
><para
>Geeft de geselecteerde tekstreeks terug. Als er geen tekst is geselecteerd dan is de tekenreeks ongeldig. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>void view.setSelection(<parameter
>Range <replaceable
>reeks</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Stelt de geselecteerde tekst in op de gegeven reeks. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>void view.removeSelectedText();
</synopsis
></term>
<listitem
><para
>Verwijder de geselecteerde tekst. Als het beeld geen geselecteerde tekst bevat, dan doet dit niets. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>void view.selectAll();
</synopsis
></term>
<listitem
><para
>Selecteert de gehele tekst in het document. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>void view.clearSelection();
</synopsis
></term>
<listitem
><para
>Wist de tekstselectie zonder de tekst te verwijderen. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>void view.setBlockSelection(bool on);
</synopsis
></term>
<listitem
><para
>Modus blokselectie aan- of uitzetten. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><synopsis
>bool view.blockSelection();
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als modus blokselectie aan is, anders <literal
>false</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>void view.align(<parameter
>Range <replaceable
>reeks</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Regels opnieuw laten inspringen binnen <replaceable
>reeks</replaceable
> volgens de huidige instellingen voor inspringen. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><synopsis
>void view.alignOn(<parameter
>Range <replaceable
>reeks</replaceable
></parameter
>, <parameter
>String <replaceable
>patroon</replaceable
> = &quot;&quot;</parameter
>);
</synopsis
></term>
<listitem
><para
>Lijnt regels uit in de <replaceable
>reeks</replaceable
> op de kolom gegeven door de reguliere expressie <replaceable
>patroon</replaceable
>. Met een leeg <replaceable
>patroon</replaceable
> zal er standaard uitgelijnd worden op het eerste niet-blanke teken. Als het patroon een vangst heeft zal het inspringen op de gevangen overeenkomst. </para>
<para
><emphasis
>Voorbeelden:</emphasis
></para>
<para
><literal
>view.alignOn(document.documentRange(), '-');</literal
> zal spaties invoegen vóór de eerste <literal
>-</literal
> van elke regel om ze allemaal uit te lijnen op dezelfde kolom.</para>
<para
><literal
>view.alignOn(document.documentRange(), ':\\s+(.)');</literal
> zal spaties invoegen vóór het eerste niet-blanke teken dat verschijnt na een dubbelepunt om ze allemaal op dezelfde kolom uit te lijnen.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><synopsis
>object view.executeCommand(<parameter
>String <replaceable
>commando</replaceable
></parameter
>,
                           <parameter
>String <replaceable
>argumenten</replaceable
></parameter
>,
                           <parameter
>Range <replaceable
>reeks</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Voert het <link linkend="advanced-editing-tools-commandline"
>opdrachtregelcommando</link
> <replaceable
>commando</replaceable
> uit met de optionele argumenten <replaceable
>argumenten</replaceable
> en de optionele <replaceable
>reeks</replaceable
>. Het terugontvangen <replaceable
>object</replaceable
> heeft een eigenschap boolean <replaceable
>object.ok</replaceable
> die aangeeft of uitvoeren van het <replaceable
>commando</replaceable
> met succes was. In geval van een fout, bevat de tekenreeks <replaceable
>object.status</replaceable
> een foutbericht. </para>
<para
>Sinds: &kde-frameworks; 5.50</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><synopsis
>Range view.searchText(<parameter
>Range <replaceable
>reeks</replaceable
></parameter
>,
                      <parameter
>String <replaceable
>patroon</replaceable
></parameter
>,
                      <parameter
>bool <replaceable
>achterwaarts</replaceable
> = false</parameter
>);
</synopsis
></term>
<listitem
><para
>Naar het eerste voorkomen van <replaceable
>patroon</replaceable
> zoeken in <replaceable
>reeks</replaceable
> en de overeenkomende reeks teruggeven. Zoeken wordt achterwaarts uitgevoerd als de optionele booleaanse parameter <replaceable
>achterwaarts</replaceable
> is ingesteld op <literal
>true</literal
>. </para>
<para
>De teruggegeven reeks is ongeldig (zie Range.isValid()) als <replaceable
>patroon</replaceable
> niet wordt gevonden in <replaceable
>reeks</replaceable
>. </para>
<para
>Sinds: &kde-frameworks; 5.97</para>
</listitem>
</varlistentry>

</variablelist>
</para>
</sect3>

<sect3 id="dev-scripting-api-document">
<title
>De API van Document</title>
<para
>Wanneer een script uitgevoerd wordt is er een globale variabele <quote
><literal
>document</literal
></quote
> die het huidige actieve document representeert. Het volgende is een lijst met alle beschikbare documentfuncties. <variablelist>

<varlistentry>
<term
><synopsis
>String document.fileName();
</synopsis
></term>
<listitem
><para
>Geeft de bestandsnaam van het document terug of een lege tekenreeks voor niet opgeslagen tekstbuffers. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.url();
</synopsis
></term>
<listitem
><para
>Geeft de volledige &URL; van het document terug of een lege tekenreeks voor niet opgeslagen tekstbuffers. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.mimeType();
</synopsis
></term>
<listitem
><para
>Geeft het &MIME;-type van het document terug of het &MIME;-type <literal
>application/octet-stream</literal
> als er geen toepasselijk &MIME;-type gevonden kan worden. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.encoding();
</synopsis
></term>
<listitem
><para
>Geeft de nu gebruikte codering terug om het bestand op te slaan. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><synopsis
>String document.highlightingMode();
</synopsis
></term>
<listitem
><para
>Geeft de gebruikte globale accentueringmodus terug voor het gehele document. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><synopsis
>String document.highlightingModeAt(<parameter
>Cursor <replaceable
>pos</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft de gebruikte accentueringmodus terug op de gegeven positie in het document. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><synopsis
>Array document.embeddedHighlightingModes();
</synopsis
></term>
<listitem
><para
>Geeft een reeks van accentueringmodi terug ingebed in dit document. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><synopsis
>bool document.isModified();
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als het document niet opgeslagen wijzigingen heeft(gemodificeerd), anders <literal
>false</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.text();
</synopsis
></term>
<listitem
><para
>Geef de gehele inhoud van het document terug in een enkele tekenreeks. Nieuwe regels zijn gemarkeerd met het teken nieuw-regel <quote
><literal
>\n</literal
></quote
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.text(<parameter
>int <replaceable
>vanafRegel</replaceable
></parameter
>, <parameter
>int <replaceable
>vanafKolom</replaceable
></parameter
>, <parameter
>int <replaceable
>totRegel</replaceable
></parameter
>, <parameter
>int <replaceable
>totKolom</replaceable
></parameter
>);
String document.text(<parameter
>Cursor <replaceable
>vanaf</replaceable
></parameter
>, <parameter
>Cursor <replaceable
>tot</replaceable
></parameter
>);
String document.text(<parameter
>Range <replaceable
>bereik</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft de tekst terug in het gegeven bereik. Het is aanbevolen de cursor te gebruiken en een versie gebaseerd op bereik voor betere leesbaarheid van de broncode. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.line(<parameter
>int <replaceable
>regel</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft de gegeven tekstregel terug als tekenreeks. De tekenreeks is leeg als de gevraagde regel buiten het bereik ligt. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.wordAt(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>);
String document.wordAt(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft het woord terug op de gegeven cursorpositie. </para
></listitem>
</varlistentry>


<varlistentry>
<term>
<synopsis
>Range document.wordRangeAt(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>);
Range document.wordRangeAt(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis>
</term>
<listitem
><para
>Geeft de reeks van het woord op de gegeven cursorpositie terug. De teruggeven reeks is ongeldig (zie Range.isValid()), als de tekstpositie zich na het eind van een regel bevindt. Als er geen woord is op de gegeven cursorpositie, zal een lege reeks worden teruggegeven. </para>
<para
>Sinds: &kde; 4.9 </para>
</listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.charAt(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>);
String document.charAt(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft het teken terug op de gegeven cursorpositie. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.firstChar(<parameter
>int <replaceable
>regel</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft het eerste teken in de gegeven <replaceable
>regel</replaceable
> terug die geen witruimte is. Het eerste teken is in kolom 0. Als de regel leeg of alleen witruimte bevat, dan is de teruggegeven tekenreeks leeg. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.lastChar(<parameter
>int <replaceable
>regel</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft het laatste teken in de gegeven <replaceable
>regel</replaceable
> terug die geen witruimte is. Als de regel leeg of alleen witruimte bevat, dan is de teruggegeven tekenreeks leeg. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.isSpace(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>);
bool document.isSpace(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als het teken op de gegeven cursorpositie gelijk is aan een witruimte, anders <literal
>false</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.matchesAt(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>, <parameter
>String <replaceable
>tekst</replaceable
></parameter
>);
bool document.matchesAt(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>, <parameter
>String <replaceable
>tekst</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als de gegeven <replaceable
>tekst</replaceable
> overeenkomt met de overeenkomstige cursorpositie, anders <literal
>false</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.startsWith(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>String <replaceable
>tekst</replaceable
></parameter
>, <parameter
>bool <replaceable
>skipWhiteSpaces</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug als de regel begint met <replaceable
>tekst</replaceable
>, anders <literal
>false</literal
>. Het argument <replaceable
>skipWhiteSpaces</replaceable
> bepaalt of voorloopwitruimte genegeerd worden. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.endsWith(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>String <replaceable
>tekst</replaceable
></parameter
>, <parameter
>bool <replaceable
>skipWhiteSpaces</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug als de regel eindigt met <replaceable
>tekst</replaceable
>, anders <literal
>false</literal
>. Het argument <replaceable
>skipWhiteSpaces</replaceable
> bepaalt of witruimte achteraan genegeerd wordt. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.setText(<parameter
>String <replaceable
>tekst</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Stelt de gehele documenttekst in. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.clear();
</synopsis
></term>
<listitem
><para
>Verwijdert de gehele tekst uit het document. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.truncate(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>);
bool document.truncate(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Kap de gegeven regel op de gegeven kolom of cursorpositie af. Geeft <literal
>true</literal
> terug bij succes of <literal
>false</literal
> als de gegeven regel geen deel is van het documentbereik. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.insertText(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>, <parameter
>String <replaceable
>tekst</replaceable
></parameter
>);
bool document.insertText(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>, <parameter
>String <replaceable
>tekst</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Voeg de <replaceable
>tekst</replaceable
> op de cursorpositie in. Geeft <literal
>true</literal
> terug bij succes of <literal
>false</literal
>, als het document alleen-lezen is. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.removeText(<parameter
>int <replaceable
>vanafRegel</replaceable
></parameter
>, <parameter
>int <replaceable
>vanafKolom</replaceable
></parameter
>, <parameter
>int <replaceable
>totRegel</replaceable
></parameter
>, <parameter
>int <replaceable
>totKolom</replaceable
></parameter
>);
bool document.removeText(<parameter
>Cursor <replaceable
>vanaf</replaceable
></parameter
>, <parameter
>Cursor <replaceable
>tot</replaceable
></parameter
>);
bool document.removeText(<parameter
>Range <replaceable
>bereik</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Verwijdert de tekst in het gegeven bereik. Geeft <literal
>true</literal
> terug bij succes of <literal
>false</literal
>, als het document alleen-lezen is. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.insertLine(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>String <replaceable
>tekst</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Voegt tekst in de gegeven regel in. Geeft <literal
>true</literal
> terug bij succes of <literal
>false</literal
>, als het document alleen-lezen is of de regel niet in het documentbereik ligt. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.removeLine(<parameter
>int <replaceable
>regel</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Verwijdert de gegeven tekstregel. Geeft <literal
>true</literal
> terug bij succes of <literal
>false</literal
>, als het document alleen-lezen is of de regel niet in het documentbereik ligt. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.wrapLine(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>);
bool document.wrapLine(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Breekt de regel op de gegeven cursorpositie op. Geeft <literal
>true</literal
> terug bij succes, anders <literal
>false</literal
>, &eg; als regel &lt; 0. </para>
<para
>Sinds: &kde; 4.9 </para>
</listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>void document.joinLines(<parameter
>int <replaceable
>beginRegel</replaceable
></parameter
>, <parameter
>int <replaceable
>eindRegel</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Voegt de regels vanaf <replaceable
>beginRegel</replaceable
> tot <replaceable
>eindRegel</replaceable
> samen. Twee elkaar opvolgende tekstregels worden altijd gescheiden door een enkele spatie. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.lines();
</synopsis
></term>
<listitem
><para
>Geeft het aantal regels in het document terug. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.isLineModified(<parameter
>int <replaceable
>regel</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als <replaceable
>regel</replaceable
> nu niet opgeslagen gegevens bevat. </para>
<para
>Sinds: &kde; 5.0 </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.isLineSaved(<parameter
>int <replaceable
>regel</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als <replaceable
>regel</replaceable
> is gewijzigd, maar het document is opgeslagen. Dus bevat de regel nu geen niet opgeslagen gegevens. </para>
<para
>Sinds: &kde; 5.0 </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.isLineTouched(<parameter
>int <replaceable
>regel</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als <replaceable
>regel</replaceable
> nu niet opgeslagen gegevens bevat of eerder is gewijzigd. </para>
<para
>Sinds: &kde; 5.0 </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>void document.findTouchedLine(<parameter
>int <replaceable
>beginRegel</replaceable
></parameter
>, <parameter
>bool <replaceable
>oplaag</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Zoek naar de volgende aangeraakte regel beginnend bij <replaceable
>regel</replaceable
>. Het zoeken wordt uitgevoerd ofwel omhoog of omlaag afhankelijk van de zoekrichting gespecificeerd in <replaceable
>omlaag</replaceable
>. </para>
<para
>Sinds: &kde; 5.0 </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.length();
</synopsis
></term>
<listitem
><para
>Geeft het aantal tekens in het document terug. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.lineLength(<parameter
>int <replaceable
>regel</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft de lengte van de <replaceable
>regel</replaceable
> terug. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>void document.editBegin();
</synopsis
></term>
<listitem
><para
>Begint een bewerkingsgroep voor groepering van ongedaan maken/opnieuw doen. Controleer altijd of <function
>editEnd()</function
> is aangeroepen als u <function
>editBegin()</function
> aanroept. Aanroepen van <function
>editBegin()</function
> gebruikt intern een referentieteller, &ie; deze aanroep kan genest worden. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>void document.editEnd();
</synopsis
></term>
<listitem
><para
>Beëindigt een bewerkingsgroep. De laatst aanroep van <function
>editEnd()</function
> (&ie; diegene voor de eerste aanroep van <function
>editBegin()</function
>) beëindigt de bewerkingsstap. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.firstColumn(<parameter
>int <replaceable
>regel</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft de eerste niet-witruimte kolom in de gegeven <replaceable
>regel</replaceable
> terug. Als er alleen witruimte in de regel bevindt, dan is de terugkeerwaarde <literal
>-1</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.lastColumn(<parameter
>int <replaceable
>regel</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft de laatste niet-witruimte kolom in de gegeven <replaceable
>regel</replaceable
> terug. Als er alleen witruimte in de regel bevindt, dan is de terugkeerwaarde <literal
>-1</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.prevNonSpaceColumn(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>);
int document.prevNonSpaceColumn(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft de kolom terug met een niet-witruimte teken beginnend bij de gegeven cursorpositie en achterwaarts zoeken. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.nextNonSpaceColumn(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>);
int document.nextNonSpaceColumn(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft de kolom terug met een niet-witruimte teken beginnend bij de gegeven cursorpositie en voorwaarts zoeken. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.prevNonEmptyLine(<parameter
>int <replaceable
>regel</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft de volgende niet-lege regel terug met een niet-witruimte tekens en achterwaarts zoeken. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.nextNonEmptyLine(<parameter
>int <replaceable
>regel</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft de volgende niet-lege regel terug met een niet-witruimte teken en voorwaarts zoeken. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.isInWord(<parameter
>String <replaceable
>teken</replaceable
></parameter
>, <parameter
>int <replaceable
>attribuut</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als het gegeven <replaceable
>teken</replaceable
> met het gegeven <replaceable
>attribuut</replaceable
> deel van een woord kan zijn, anders <literal
>false</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.canBreakAt(<parameter
>String <replaceable
>teken</replaceable
></parameter
>, <parameter
>int <replaceable
>attribuut</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als het gegeven <replaceable
>teken</replaceable
> met het gegeven <replaceable
>attribuut</replaceable
> geschikt is om een regel af te breken, anders <literal
>false</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.canComment(<parameter
>int <replaceable
>beginAttribuut</replaceable
></parameter
>, <parameter
>int <replaceable
>eindAttribuut</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als een bereik beginnend en eindigend met de gegeven attributen geschikt is om als commentaar te worden aangemerkt, anders <literal
>false</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.commentMarker(<parameter
>int <replaceable
>attribuut</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft de markeerder voor commentaar terug voor commentaar op een enkele regel voor een gegeven <replaceable
>attribuut</replaceable
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.commentStart(<parameter
>int <replaceable
>attribuut</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft de markeerder voor commentaar terug voor begin van commentaar over meerdere regels voor een gegeven <replaceable
>attribuut</replaceable
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.commentEnd(<parameter
>int <replaceable
>attribuut</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft de markeerder voor commentaar terug voor het einde van commentaar over meerdere regels voor een gegeven <replaceable
>attribuut</replaceable
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Range document.documentRange();
</synopsis
></term>
<listitem
><para
>Geeft een reeks terug die het gehele document omvat. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Cursor documentEnd();
</synopsis
></term>
<listitem
><para
>Geeft een cursor terug gepositioneerd in de laatste kolom van de laatste regel in het document. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool isValidTextPosition(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>);
bool isValidTextPosition(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als de gegeven cursorpositie is gepositioneerd op een geldige tekstpositie. Een tekstpositie is alleen geldig als het is gelokaliseerd aan het begin, in het midden, of aan het eind van een geldige regel. Verder is een tekstpositie ongeldig als het is gelokaliseerd in een Unicode-surrogaat. </para
><para
>Sinds: &kde; 5.0 </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.attribute(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>);
int document.attribute(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft het attribuut terug op de gegeven cursorpositie. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.isAttribute(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>, <parameter
>int <replaceable
>attribuut</replaceable
></parameter
>);
bool document.isAttribute(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>, <parameter
>int <replaceable
>attribuut</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als het attribuut op de gegeven cursorpositie gelijk is aan <replaceable
>attribuut</replaceable
>, anders <literal
>false</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.attributeName(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>);
String document.attributeName(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft de attribuutnaam terug als leesbare tekst. Dit is gelijk aan de <literal
>itemData</literal
>-naam in de syntaxis-accentuering-bestanden. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.isAttributeName(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>, <parameter
>String <replaceable
>naam</replaceable
></parameter
>);
bool document.isAttributeName(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>, <parameter
>String <replaceable
>naam</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als de attribuutnaam op een bepaalde cursorpositie overeenkomt met de gegeven <replaceable
>naam</replaceable
>, anders <literal
>false</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.variable(<parameter
>String <replaceable
>sleutel</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft de waarde terug van de gevraagde documentvariabele <replaceable
>sleutel</replaceable
>. Als de documentvariabele niet bestaat, wordt een lege tekenreeks teruggegeven. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>void document.setVariable(<parameter
>String <replaceable
>sleutel</replaceable
></parameter
>, <parameter
>String <replaceable
>waarde</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Stelt de waarde in van de gevraagde documentvariabele <replaceable
>sleutel</replaceable
>. </para>
<para
>Zie ook: <link linkend="config-variables"
>Documentvariabelen van Kate</link
> </para>
<para
>Sinds: &kde; 4.8 </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.firstVirtualColumn(<parameter
>int <replaceable
>regel</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft de virtuele kolom terug van het eerste niet-witruimte-teken in de gegeven regel of <literal
>-1</literal
>, als de regel leeg is of alleen witruimte-tekens bevat. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.lastVirtualColumn(<parameter
>int <replaceable
>regel</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft de virtuele kolom terug van het laatste niet-witruimte-teken in de gegeven regel of <literal
>-1</literal
>, als de regel leeg is of alleen witruimte-tekens bevat. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.toVirtualColumn(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>);
int document.toVirtualColumn(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
Cursor document.toVirtualCursor(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Converteert de gegeven <quote
>echte</quote
> cursorpositie naar een virtuele cursorpositie, geeft ofwel een int terug of een cursor-object. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.fromVirtualColumn(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>virtueleKolom</replaceable
></parameter
>);
int document.fromVirtualColumn(<parameter
>Cursor <replaceable
>virtueleCursor</replaceable
></parameter
>);
Cursor document.fromVirtualCursor(<parameter
>Cursor <replaceable
>virtueleCursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Converteert de gegeven virtuele cursorpositie naar een <quote
>echte</quote
> cursorpositie, geeft ofwel een int terug of een cursor-object. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Cursor document.anchor(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>, <parameter
>Char <replaceable
>teken</replaceable
></parameter
>);
Cursor document.anchor(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>, <parameter
>Char <replaceable
>teken</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Zoekt achterwaarts naar het gegeven teken te beginnen vanaf de gegeven cursor. Als voorbeeld, als '(' als teken wordt meegegeven, dan geeft deze functie de positie terug van de openingings '('. Dit houdt rekening met aantallen, &ie; andere '(...)' worden genegeerd. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Cursor document.rfind(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>, <parameter
>String <replaceable
>tekst</replaceable
></parameter
>, <parameter
>int <replaceable
>attribuut</replaceable
> = -1</parameter
>);
Cursor document.rfind(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>, <parameter
>String <replaceable
>tekst</replaceable
></parameter
>, <parameter
>int <replaceable
>attribuut</replaceable
> = -1</parameter
>);
</synopsis
></term>
<listitem
><para
>Zoek de gegeven tekst achterwaarts met het juiste <replaceable
>attribuut</replaceable
>. Het argument <replaceable
>attribuut</replaceable
> wordt genegeerd als het is ingesteld op <literal
>-1</literal
>. De teruggegeven cursor is ongeldig, als de tekst niet is gevonden. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.defStyleNum(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>);
int document.defStyleNum(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft de standaard stijl terug op de gegeven cursorpositie. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.isCode(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>);
bool document.isCode(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als het attribuut op de gegeven cursorpositie niet gelijk is aan alle volgende stijlen: <literal
>dsComment</literal
>, <literal
>dsString</literal
>, <literal
>dsRegionMarker</literal
>, <literal
>dsChar</literal
>, <literal
>dsOthers</literal
>. </para
></listitem>
</varlistentry>



<varlistentry>
<term
><synopsis
>bool document.isComment(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>);
bool document.isComment(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als het attribuut van het teken op de cursorpositie gelijk is aan <literal
>dsComment</literal
>, anders <literal
>false</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.isString(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>);
bool document.isString(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als het attribuut van het teken op de cursorpositie gelijk is aan <literal
>dsString</literal
>, anders <literal
>false</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.isRegionMarker(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>);
bool document.isRegionMarker(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als het attribuut van het teken op de cursorpositie gelijk is aan <literal
>dsRegionMarker</literal
>,anders <literal
>false</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.isChar(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>);
bool document.isChar(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als het attribuut van het teken op de cursorpositie gelijk is aan <literal
>dsChar</literal
>, anders <literal
>false</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.isOthers(<parameter
>int <replaceable
>regel</replaceable
></parameter
>, <parameter
>int <replaceable
>kolom</replaceable
></parameter
>);
bool document.isOthers(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Geeft <literal
>true</literal
> terug, als het attribuut van het teken op de cursorpositie gelijk is aan <literal
>dsOthers</literal
>, anders <literal
>false</literal
>. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><synopsis
>void document.indent(<parameter
>Range <replaceable
>reeks</replaceable
></parameter
>, <parameter
>int <replaceable
>aantal</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Laat alle regels in <replaceable
>reeks</replaceable
> inspringen door <replaceable
>aantal</replaceable
> tabs of <replaceable
>aantal</replaceable
> keren <literal
>tabSize</literal
> spaties in te voegen afhankelijk van de voorkeur van de gebruiker. De parameter <replaceable
>aantal</replaceable
> kan negatief zijn. </para
></listitem>
</varlistentry>

</variablelist>
</para>

</sect3>

<sect3 id="dev-scripting-api-editor">
<title
>De API voor bewerken</title>
<para
>Naast het document en weergave-API, is er een algemene bewerker-API die functies levert voor algemene functionaliteit voor bewerken met een script. <variablelist>

<varlistentry>
<term
><synopsis
>Tekenreeks editor.clipboardText();
</synopsis
></term>
<listitem
><para
>Geeft de tekst terug die actief is in het globale klembord. </para>
<para
>Sinds: &kde-frameworks; 5.50</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><synopsis
>String editor.clipboardHistory();
</synopsis
></term>
<listitem
><para
>De bewerker houdt een klembordgeschiedenis vast die tot 10 klemborditems bevat. Deze functie geeft alle items terug die actief zijn in de klembordgeschiedenis. </para>
<para
>Sinds: &kde-frameworks; 5.50</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><synopsis
>void editor.setClipboardText(<parameter
>String <replaceable
>tekst</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Stel de inhoud van het klembord in op <replaceable
>tekst</replaceable
>. De <replaceable
>tekst</replaceable
> zal toegevoegd worden aan de geschiedenis van het klembord. </para>
<para
>Sinds: &kde-frameworks; 5.50</para>
</listitem>
</varlistentry>

</variablelist>
</para>
</sect3>
</sect2>

</sect1>

</chapter>

Generated by dwww version 1.15 on Thu Jun 27 09:18:42 CEST 2024.