&Anders.Lund; &Anders.Lund.mail;
&Dominik.Haumann; &Dominik.Haumann.mail;
&Tom.Albers;&Natalie.Koning;&Freek.de.Kruijf;

# Geavanceerde hulpmiddelen

## Commentaar toevoegen/verwijderen

Met de commando's "Commentaar" en "Commentaar verwijderen" in het menu Hulpmiddelen kunt u commentaarmarkering aan geselecteerde regels toevoegen of eruit verwijderen, mits commentaren door het bestandsformaat waar u aan werkt worden ondersteund. Als er geen tekst geselecteerd is wordt de huidige regel gebruikt.

De regels over de wijze waarop commentaar ingevoegd wordt, zijn vastgelegd in de syntaxisdefinities. Als syntaxisaccentuering niet gedefinieerd is, zal commentaar invoegen/verwijderen niet mogelijk zijn.

Sommige syntaxisdefinities definiëren commentaarmarkeringen per regel, sommige definiëren markeringen die over meedere regels kunnen lopen, en sommige definiëren beide. Indien er per regel gemarkeerd wordt, is het niet mogelijk om een selectie te markeren waarvan de laatste regel niet volledig is geselecteerd.

Wanneer commentaarmarkering per regel mogelijk is, dan zal dit de voorkeur hebben. Het voorkomt namelijk problemen met genest commentaar (commentaar binnen commentaar).

Wanneer commentaar verwijderd wordt, mogen er geen regels geselecteerd zijn die geen commentaar bevatten. Wanneer er commentaar dat over meerdere regels loopt verwijderd wordt, zullen eventuele spaties aan het begin en einde genegeerd worden.

Om een gedeelte te markeren als commentaar kiest u het menu Hulpmiddelen Commentaar. U kunt ook de sneltoetsen &Ctrl;D gebruiken.

Om commentaar te verwijderen kiest u het menu Hulpmiddelen Commentaar verwijderen. U kunt ook de sneltoetsen &Ctrl;&Shift; D gebruiken.

## De commandoregel in de editor

De editor-component van &kate; beschikt over een interne commandoregel, zodat u diverse commando's direct, zonder uitgebreide GUI, kunt uitvoeren. De commandoregel bevindt zich onder het editor-gedeelte. Om hiermee te werken gebruikt u het menu Beeld Overschakelen naar commandoregel of drukt u op F7. De commando's van de editor worden hieronder beschreven, extra commando's kunnen door plugins geleverd worden.

Om een commando uit te voeren, typt u het commando en daarna drukt u op de Enter-toets. Op de commandoregel verschijnt een melding over het al dan niet slagen van de opdracht. Als u de commandoregel via F7 geopend hebt, zal deze automatisch na een paar seconden verdwijnen. Om de melding te verwijderen en een nieuw commando te typen drukt u nogmaals op F7.

Typ `help` om de ingebouwde help van de commandoregel te zien. Typ `help list` om een lijst met beschikbare commando's te zien. Om de help voor een specifiek commando te zien, typt u `help commando`.

De commandoregel houdt de geschiedenis van ingetypte commando's bij in een lijst, zodat u eerder getypte commando's opnieuw kunt gebruiken. Gebruik de toetsen Pijl omhoog en Pijl omlaag om door de lijst te navigeren. Wanneer een commando uit de lijst getoond wordt, is het argument-gedeelte geselecteerd, zodat u dit gemakkelijk kunt overschrijven.

### Standaard commandoregel opdrachten

#### commando's om de editor in te stellen

Deze commando's worden door de editor-component geleverd en maken het mogelijk om instellingen voor het actieve document en het beeld te maken. Dit kan nuttig zijn als u andere dan de standaardinstellingen wilt gebruiken, bijvoorbeeld voor het inspringen.

##### Argumenttypen

BOOLEAN

  Dit wordt gebruikt met commando's die iets aan- of uitzetten. Toegestane waarden zijn `on`, `off`, `true`, `false`, `1` of `0`.

INTEGER

  Een geheel getal

STRING

  Een tekenreeks

    set-tab-widthINTEGER width

  Stelt de tablengte in op `width`

    set-indent-widthINTEGER width

  Stelt de breedte voor het inspringen in op `width`. Gebruik dit alleen als u met spaties inspringt.

    set-word-wrap-columnINTEGER width

  Stelt de regellengte in op `width`. Dit wordt gebruikt als u tekst automatisch laat afbreken.

    set-icon-borderBOOLEAN enable

  Toont of verbergt de pictogramrand.

    set-folding-markersBOOLEAN enable

  Toont of verbergt de vouwmarkeringen.

    set-line-numbersBOOLEAN enable

  Toont of verbergt de regelnummering.

    set-replace-tabsBOOLEAN enable

  Als deze optie ingeschakeld is, worden tabs door spaties vervangen terwijl u typt.

    set-remove-trailing-spaceBOOLEAN enable

  Als deze optie ingeschakeld is, worden spaties aan het einde van de egel verwijderd als de cursor naar een andere regel gaat.

    set-show-tabsBOOLEAN enable

  Als deze optie ingeschakeld is, worden tabs en spaties aan het einde van de regel zichtbaar gemaakt door middel van een punt.

    set-indent-spacesBOOLEAN enable

  Als deze optie ingeschakeld is, zal de editor elk inspringniveau met `indent-width` spaties laten inspringen in plaats van met tabs.

    set-mixed-indentBOOLEAN enable

  Als deze optie ingeschakeld is, zal &kate; tabs en spaties gebruiken voor het inspringen. Elk inspringniveau zal het aantal spaties hebben dat bij `indent-width` is ingesteld en meerdere inspringniveaus zullen geoptimaliseerd worden door zoveel mogelijk tabs te gebruiken.

  Wanneer dit commando uitgevoerd wordt, zal ook het inspringen met spaties ingeschakeld worden. Als de inspringbreedte niet gespecificeerd is, zal deze op de helft van `tab-width` voor het document ingesteld worden.

    set-word-wrapBOOLEAN enable

  Schakelt dynamische regelafbreking in of uit, afhankelijk van `enable`.

    set-replace-tabs-saveBOOLEAN enable

  Als deze optie ingeschakeld is, zullen tabs vervangen worden door spaties zodra het document opgeslagen wordt.

    set-remove-trailing-space-saveBOOLEAN enable

  Als deze optie ingeschakeld is, zullen spaties aan het einde van elke regel verwijderd worden zodra het document opgeslagen wordt.

    set-indent-modename

  Stelt de automatische inspringmodus in op `naam`. Als `naam` onbekend is, wordt "none" (geen) gebruikt. Geldige modi zijn 'none', 'normal', 'cstyle', 'haskell', 'lilypond', 'lisp', 'python', 'ruby' en 'xml'.

    set-highlighthighlight

  Stelt de accentuering van syntaxis in voor het document. Het argument moet een geldige naam zijn, zoals die in het menu Hulpmiddelen Accentueringmodus staat. Bij dit commando is automatische aanvulling beschikbaar voor het argument.

#### Bewerkcommando's

Deze commando's wijzigen het huidige document.

    indent

  Laat de geselecteerde regels of de huidige regel inspringen.

    unindent

  Verwijdert de inspringing van de geselecteerde regels of van de huidige regel.

    cleanindent

  Schoont de inspringing van de geselecteerde regels of van de huidige regels op, in overeenstemming met de instellingen in het document.

    comment

  Voegt commentaarmarkeringen aan de geselecteerde regels of aan de huidige regel toe, in overeenstemming met de tekstopmaak zoals die gedefinieerd is voor de syntaxisaccentuering van het document.

    uncomment

  Verwijdert commentaarmarkeringen van de geselecteerde regels of van de huidige regel, in overeenstemming met de tekstopmaak zoals die gedefinieerd is voor de syntaxisaccentuering van het document.

    kill-line

  Verwijdert de huidige regel.

    replacepatternreplacement

  Vervangt tekst die overeenkomt met `pattern` door `replacement`. Als u spaties in `pattern` wilt gebruiken, moet u om `pattern` en om `replacement` enkele of dubbele aanhalingstekens zetten. Als er geen aanhalingstekens om de argumenten staan, wordt het eerste woord als `pattern` gebruikt en de rest als `replacement`. Als `replacement` geen tekens bevat, wordt elk gevonden `pattern` verwijderd.

  U kunt extra opties aan de zoekopdracht meegeven door een dubbele punt toe te voegen, gevolgd door één of meer letters die elk een optie vertegenwoordigen. De zoekopdracht krijgt de vorm `replace:options pattern replacement`. Beschikbare opties zijn:

  `b`

    Zoek achterwaarts.

  `c`

    Zoek vanaf de cursorpositie.

  `e`

    Zoek alleen in de geselecteerde tekst.

  `r`

    Gebruik een reguliere expressie in de zoekopdracht. In dit geval kunt u ook `N` gebruiken, N is een getal dat het aantal overeenkomsten in de vervangende tekenreeks vertegenwoordigt.

  `s`

    De zoekopdracht is hoofdlettergevoelig.

  `p`

    Vraag om toestemming om de volgende overeenkomst te vervangen.

  `w`

    Zoek alleen naar hele woorden.

    dateformat

  Voegt een datum/tijd in volgens de gespecificeerde `format`, of in de opmaak yyyy-MM-dd hh:mm:ss als er geen opmaak gespecificeerd is. De mogelijke vormen van `format` en de resulterende interpretatie:

  `d` | De dag als een getal zonder voorloopnul (1-31).
  `dd` | De dag als een getal met voorloopnul (01-31).
  `ddd` | De verkorte gelokaliseerde dagnaam ('Ma'..'Zo').
  `dddd` | De lange gelokaliseerde dagnaam ('Maandag'..'Zondag').
  `M` | De maand als een getal zonder voorloopnul (1-12).
  `MM` | De maand als een getal met voorloopnul (01-12).
  `MMM` | De verkorte gelokaliseerde maandnaam ('Jan'..'Dec').
  `yy` | Het jaar als een getal van twee cijfers (00-99).
  `yyyy` | Het jaar als een getal van vier cijfers (1752-8000).
  `h` | Het uur zonder voorloopnul (0..23 of 1..12 als AM/PM gebruikt wordt).
  `hh` | Het uur met voorloopnul (00..23 of 01..12 als AM/PM gebruikt wordt).
  `m` | De minuut zonder voorloopnul (0..59).
  `mm` | De minuut met voorloopnul (00..59).
  `s` | De seconde zonder voorloopnul (0..59).
  `ss` | De seconde met voorloopnul (00..59).
  `z` | De milliseconden zonder voorloopnul (0..999).
  `zzz` | De milliseconden met voorloopnul (000..999).
  `AP` | Gebruik AM/PM. AP wordt vervangen door "AM" of "PM".
  `ap` | Gebruik am/pm. ap wordt vervangen door "am" of "pm".

    charidentifier

  Met behulp van dit commando kunt u tekens invoegen door het intypen van een decimaal, octaal of hexadecimaal getal. Open het dialoogvenster "Bewerkcommando's" en typ `char: [number]` in het invoerveld, klik daarna op OK.

  ##### `char` voorbeelden

  Invoer: `char:234`

  Uitvoer: `ê`

  Invoer: `char:0x1234`

  Uitvoer: `ሴ`

`s///[ig]` `%s///[ig]`

  Dit commando voert een zoeken/vervangen-opdracht op de manier van sed uit op de huidige regel of in het gehele bestand (`%s///`).

  Kort gezegd gebeurt er het volgende: In de tekst wordt naar de eerstvolgende overeenkomst met de search pattern gezocht, de reguliere expressie tussen de eerste en de tweede slash, en wanneer een overeenkomst gevonden is, wordt het overeenkomende gedeelte van de tekst vervangen door de expressie tussen het middelste en het laatste gedeelte van de tekenreeks. Haakjes in het zoekpatroon (search pattern) vertegenwoordigen terugverwijzingen, dit betekent dat het commando onthoudt welk gedeelte overeenkomt met het gedeelte tussen de haakjes; deze tekenreeksen kunnen opnieuw in de vervangende tekst gebruikt worden, `\1` verwijst naar het eerste set haakjes, `\2` naar het tweede set, enzovoort.

  Om naar een `(` of `)` te zoeken moet u het teken vooraf laten gaan door een backslash: `\(\)`

  Als u een `i` aan het einde van de expressie toevoegt, maakt de zoekopdracht geen verschil tussen hoofd- en kleine letters. Als u een `g` aan het einde toevoegt, worden alle overeenkomsten met het zoekpatroon vervangen, anders wordt alleen de eerste overeenkomst in een regel vervangen.

  ##### Tekst vervangen in de huidige regel

  Uw aardige compiler is zojuist gestopt met de mededeling dat de class `myClass` in regel 3902 in uw bronbestand niet gedefinieerd is.

  "Kreukels nog an toe!" denkt u, het is natuurlijk `MyClass`. U gaat naar regel 3902 en in plaats van te proberen het woord in de tekst te vinden, opent u het dialoogvenster "Bewerkcommando's", u typt `s/myclass/MyClass/i`, klikt op OK, slaat het bestand op en compileert – ditmaal zonder fouten.

  ##### Tekst vervangen in het gehele bestand

  Stel dat u aan een bestand werkt waarin de naam Anna Jensen verscheidene keren voorkomt. Dan hoort u van iemand dat ze pasgeleden getrouwd is met Harry Jones. U wilt natuurlijk overal in het bestand Anna Jensen vervangen door Anna Jones-Jensen.

  Open de commandoregel en typ `%s/Anna Jensen/Anna Jones-Jensen/` en druk op de Enter-toets; dat was alles.

  ##### Een iets ingewikkelder voorbeeld

  In dit voorbeeld gebruiken we zowel terugverwijzingen als teken-class (als u niet weet wat dit is, lees dan de uitleg hieronder).

  Stel dat u de volgende regel hebt:

      void MyClass::DoStringOps( String      &foo, String &bar String *p, int  &a, int &b )

  U bedenkt dat dit geen nette code is en besluit dat u het sleutelwoord `const` wilt gebruiken voor alle adressen van argumenten, herkenbaar aan de operator & voor de naam van het argument. U wilt ook de witruimte (de spaties of tabs) aanpassen, zodat er overal slechts één witruimteteken tussen de woorden staat.

  Open het dialoogvenster "Bewerkcommando's" en typ: `s/\s+(\w+)\s+(&)/ const \1 \2/g`, klik daarna op OK. De `g` aan het einde van de expressie zorgt ervoor dat de reguliere expressie voor elke overeenkomst opnieuw opgebouwd wordt om de terugverwijzingen te behouden.

  Uitvoer: `void MyClass::DoStringOps( const String &foo, const String &bar String *p, const int &a, const int &b )`

  Taak volbracht! Wat is er nu gebeurd? We hebben gezocht naar witruimte (`\s+`) gevolgd door één of meer lettertekens (`\w+`) gevolgd door nog meer witruimte (`\s+`) gevolgd door een ampersand, en tegelijkertijd hebben we de lettertekens en de ampersand opgeslagen voor hergebruik bij het vervangen. Daarna hebben we het overeenkomende gedeelte van de regel vervangen door één spatie gevolgd door const gevolgd door één spatie gevolgd door de opgeslagen lettertekens (`\1`) gevolgd door één spatie gevolgd door de opgeslagen ampersand (`\2`).

  Nu waren de lettertekens op sommige plaatsen String, op andere plaatsen int, het gebruik van de teken-class `\w` en het bepalingsteken `+` bleek een handig hulpmiddel.

#### Navigatiecommando's

    gotoINT line

  Dit commando plaatst de cursor op de gespecificeerde regel.

    findpattern

  Dit commando plaatst de cursor bij de eerstgevonden overeenkost met `pattern`, afhankelijk van de eventuele opties. Volgende overeenkomsten kunnen gevonden worden door het menu Bewerken Volgende zoeken te gebruiken of door op F3 te drukken.

  Het gedrag van de zoekopdracht kan ingesteld worden door een dubbele punt gevolgd door één of meer opties aan het commando toe te voegen: `find:options pattern`. De volgende opties kunnen gebruikt worden:

  `b`

    Zoek achterwaarts.

  `c`

    Zoek vanaf de cursorpositie.

  `e`

    Zoek alleen in de geselecteerde tekst.

  `r`

    Gebruik een reguliere expressie in de zoekopdracht. In dit geval kunt u ook `N` gebruiken, N is een getal dat het aantal overeenkomsten in de vervangende tekenreeks vertegenwoordigt.

  `s`

    De zoekopdracht is hoofdlettergevoelig.

  `w`

    Zoek alleen naar hele woorden.

    ifindpattern

  Met behulp van dit commando kunt u zoeken terwijl-u-typt. Het gedrag van de zoekopdracht kan ingesteld worden door een dubbele punt gevolgd door één of meer opties aan het commando toe te voegen: `ifind:options patroon`. De volgende opties kunnen gebruikt worden:

  `b`

    Zoek achterwaarts.

  `r`

    Gebruik een reguliere expressie in de zoekopdracht.

  `s`

    De zoekopdracht is hoofdlettergevoelig.

  `c`

    Zoek vanaf de cursorpositie.

## Code-invouwing gebruiken

Code invouwen stelt u in staat om delen van een document in de editor te verbergen, waarmee het gemakkelijker is om overzicht te houden over grote documenten. In &kate; worden de invouwbare gebeiden berekend met regels gedefineerd in de definities van syntaxis accentuering en zijn daarom alleen beschikbaar in sommige formaten - typisch broncode van programma's, XML-markup en vergelijkbaar. De meeste definities voor accentuering met ondersteuning van code invouwen laten u ook handmatig invouwbare gebieden definiëren, typisch met de `BEGIN` en `END` sleutelwoorden.

Om de functie codeinvouwen te gebruiken, activeert u de invouwmarkering met het menu-item Beeld Invouwmarkeringen tonen als ze nog niet zichtbaar zijn. Het paneel voor invouwmarkeringen links op het scherm toont een grafische weergave van de invouwgebieden, met driehoekssymbolen om de mogelijke bewerking op een gegeven gebied aan te geven: een naar beneden gerichte driehoek geeft aan dat het gebied niet is ingevouwen, erop klikken zal het gebied invouwen en een naar rechts wijzende driehoek zal in plaats daarvan worden getoond.

Er zijn elf commando's die de status van invouwgebieden veranderen, zie de menudocumentatie.

Een machtige eigenschap van code invouwen is dat de ingevouwen regels herinnerd worden wanneer een bestand wordt gesloten, dus bij het opnieuw openen van het bestand zullen de ingevouwen nodes nog steeds ingevouwen zijn. Dit is ook van toepassing bij herladen.

Als u geen gebruik wilt maken van code invouwen, dan kunt u de optie Invouwmarkering tonen (indien beschikbaar) in de pagina Uiterlijk van de editorconfiguratie.

## &kate; met scripts uitbreiden

Sinds &kate; 3.4 in KDE 4.4 is de &kate; editor-component eenvoudig uit te breiden met scripts. De scripttaal is ECMAScript (breed bekend als JavaScript). &kate; ondersteunt twee soorten scripts: inspringen en commandoregelscripts.

### Inspringscripts

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

De volgende secties beschrijven stap voor stap hoe het skelet voor een eenvoudige indenteerder te maken. Als eerste stap, maak een nieuw `*.js` bestand aan bijv. met de naam `javascript.js` in de lokale thuismap aan `$KDEHOME/share/apps/katepart/script`.

#### De kop van het inspringscript

De kop van het bestand `javascript.js` is ingebed in commentaar en heeft de volgende vorm

    /* kate-script
     * name: JavaScript
     * author: Voorbeeldnaam <voorbeeld.naam@een.adres.org>
     * license: BSD
     * revision: 1
     * kate-version: 3.4
     * type: indentation
     * required-syntax-style: javascript
     * indent-languages: javascript
     * priority: 0
     * i18n-catalog: mycatalog
     *
     * Een regel zonder dubbelepunt ':' stopt het ontleden van de kop. Dwz. u kunt
     * hier optioneel tekst zoals een gedetailleerde licentie toevoegen.
     */

Elk item wordt nu in detail uitgelegd:

- `kate-script` [vereist]: Deze tekenreeks moet in de eerste regel van het `*.js` bestand staan, anders slaat &kate; het script over.

- `name` [vereist]: Dit is de naam van de indenteerder die in het menu Hulpmiddelen Inspringen verschijnt en in de configuratiedialoog.

- `author` [optioneel]: De naam van de auteur en contactinformatie.

- `license` [optioneel]: Korte vorm van de licentie, zoals BSD of LGPLv3.

- `revision` [vereist]: De revisie van het script. Dit getal moet verhoogd worden wanneer het script wordt gewijzigd.

- `kate-version` [vereist]: Minimaal vereiste versie van &kate;.

- `type` [vereist]: Het type moet zijn `indentation`, anders zal &kate; dit script overslaan.

- `required-syntax-style` [optioneel]: Komma-gescheiden lijst met vereiste stijlen voor accentuering van de 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 ongedefinieerd gedrag veroorzaakt door de indenteerder te gebruiken zonder het verwachte schema voor accentuering. De Ruby indenteerder, bijvoorbeeld, maakt hier gebruik van in de bestanden `ruby.js` en `ruby.xml`.

- `indent-languages` [optioneel]: Kommagescheidenlijst van syntaxis stijlen die de indenteerder correct kan laten inspringen, bijv.: c++, java.

- `priority` [optioneel]: Als verschillende indenteerders geschikt zij voor een bepaald bestand om te accentueren, dan bepaalt de prioriteit welke indenteerder als standaard wordt gekozen.

- `i18n-catalog` [optioneel]: Extra catalogus voor berichten (`po` bestand) geladen voor vertaling van indenteerders van derden.

&kate; leest alle paren van de vorm sleutelwoord:waarde totdat het geen dubbelepunt meer kan vinden. Dit houdt in dat de kop willekeurige tekst, zoals een licentie kan bevatten zoals in het voorbeeld getoond.

#### De broncode van de indenteerder

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:

    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 HulpmiddelenUitlijnen
        // is de variabele ch leeg, i.e. ch == ''.
        //
        // zie ook: Scripting API
        return -2;
    }

De functie `indent()` heeft drie parameters:

- `line`: de regel die moet inspringen

- `indentWidth`: de inspringbreedte in aantal spaties

- `ch`: of een teken nieuwe-regel (`ch == '\n'`), het activeringsteken gespecificeerd in `triggerCharacters` of leeg als de gebruiker de actie Hulpmiddelen Uitlijnen heeft gestart.

De terugkeerwaarde van de functie `indent()` specificeert hoe de regel zal worden ingesprongen. Als de terugkeerwaarde een eenvoudig geheel getal is, wordt deze geïnterpreteerd als volgt:

- terugkeerwaarde `-2`: niets doen

- terugkeerwaarde `-1`: behoudthet inspringen (zoekt naar voorgaande niet-blanko regel)

- terugkeerwaarde `0`: getallen >= 0 specificeer de insringdiepte in spaties

Alternatief, een reeks van twee elementen kan worden teruggegeven:

- `geef [ indent, align ] terug;`

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 uitlijning. 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 gemengde modus genoemd.

beschouw het volgende voorbeeld: Neem aan dat tabs worden gebruikt voor inspringen en tabbreedte is ingesteld op 4. <tab> vertegenwoordigt hier een tab-teken en '.' een spatie:

    1: <tab><tab>foobar("hello",
    2: <tab><tab>......."world");

Bij inspringen van regel 2 zal de functie `indent()` [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.

Een standaard KDE installatie levert bij &kate; verschillende indenteerders. De overeenkomstige JavaScript broncode kan worden gevonden in `$KDEDIR/share/apps/katepart/script`.

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 `reload-scripts`.

Als u bruikbare scripts ontwikkeld overweeg dan deze aan het &kate;-project bij te dragen door kontact op te nemen via de e-maillijst.

### Commandoregelscripts

Omdat het moeilijk is om aan de noden van iedereen te voldoen, ondersteunt &kate; kleine hulpmiddelen voor snelle tekstmanipulatie via de ingebouwde commandoregel. Het commando `sort` is bijvoorbeeld geïmplementeerd als script. Deze sectie legt uit hoe `*.js` bestanden aan te maken om &kate; uit te breiden met willekeurige hulpscripts.

Commandoregelscripts staan in dezelfde map als inspringscripts. Dus als eerste stap maakt u een nieuw `*.js` bestand aan genaamd `myutils.js` in de lokale map `$KDEHOME/share/apps/katepart/script`.

#### De kop van het commandoregelscript

De kop van elk commandoreglscript is ingebed in commentaar en heeft de volgende vorm

    /* kate-script
     * author: Example Name <example.name@some.address.org>
     * license: BSD
     * revision: 1
     * kate-version: 3.4
     * type: commands
     * functions: sort, format-paragraph
     * i18n-catalog: mycatalog
     *
     * Een regel zonder dubbelepunt ':' stopt het ontleden van de kop. Dat
     * betekent dat u hier optioneel tekst kan toevoegen, zoals een
     * gedetailleerde licentie.
     */

Elk item wordt nu in detail verklaard:

- `kate-script` [vereist]: Deze tekenreeks moet in de eerste regel van het `*.js` bestand staan, anders slaat &kate; het script over.

- `author` [optioneel]: De naam van de auteur en contactinformatie.

- `license` [optioneel]: Korte vorm van de licentie, zoals BSD of LGPLv3.

- `revision` [vereist]: De revisie van het script. Dit getal moet verhoogd worden wanneer het script wordt gewijzigd.

- `kate-version` [vereist]: Minimaal vereiste versie van &kate;.

- `type` [vereist]: Het type moet `commands` zijn, anders slaat &kate; dit script over.

- `functions` [vereist]: Komma-gescheiden lijst met commando's in het script.

- `i18n-catalog` [optioneel]: Extra catalogus met meldingen (`po` bestand) dat wordt geladen voor vertaling van scripts van derden.

&kate; leest alle paren van de vorm sleutel:waarde totdat het geen dubbelepunt meer kan vinden. Dit betekent dat de kop willekeurige tekst kan bevatten zoals een licentie, zoals in het voorbeeld is te zien. De waarde van de sleutel functions is een komma-gescheiden lijst met commandoregel-commando's. Dit betekent dat een enkel script een willekeurig aantal command0regel-commando's kan bevatten. Elke functie is beschikbaar via de ingebouwde commandoregel van &kate;.

#### De broncode van het script

Alle in de kop gespecificeerde functies moeten worden geïmplementeerd in het script. Het script-bestand uit het bovenstaande voorbeeld moet de twee functies `sort` en `format-paragraph` implementeren. Alle functies hebben de volgende syntaxis:

    function <naam>(arg1, arg2, ...)
    {
        // ... implementatie, zie ook: Scripting API
    }

De argumenten in de commandoregel worden doorgegeven naar de functie als `arg1`, `arg2`, etc. Om documentatie voor elk commando te leveren, implementeert u eenvoudig de functie '`help`' als volgt:

    function help(cmd)
    {
        if (cmd == "sort") {
            return i18n("Sort the selected text.");
        } else if (cmd == "...") {
            // ...
        }
    }

uitvoeren van `help sort` in de commandoregel roept deze help-functie op met het argument `cmd` ingesteld op het gegeven commando, i.e. `cmd == "sort"`. &kate; laat dan de teruggeleverde tekst zien als documentation voor de gebruiker. Zorg er voor dat de tekenreeksen vertaald zijn.

##### Koppelen van sneltoetsen

Om in staat te zijn sneltoetsen toe te kennen, moet het script een functie genaamd `action` als volgt leveren:

    function action(cmd)
    {
        var a = new Object();
        if (cmd == "sort") {
            a.text = i18n("Sort Selected Text");
            a.icon = "";
            a.category = "";
            a.interactive = false;
            a.shortcut = "";
        } else if (cmd == "moveLinesDown") {
            // hetzelfde voor de volgende actie
        }
        return a;
    }

De parameter `cmd` van de functie specificeert het commando waarvoor een sneltoets wordt gevraagd. Er zijn verschillende velden die u moet specificeren in het teruggegeven javascript-object:

- `a.text` [vereist]: De tekst verschijnt in het menu Hulpmiddelen Scripts. Zorg er voor om `i18n` voor vertaling te gebruiken.

- `a.icon` [optioneel]: Het pictogram verschijnt naast de tekst in het menu. Alle pictogramnamen van KDE kunnen hier worden gebruikt.

- `a.category` [optioneel]: Als een categorie wordt gespecificeerd, verschijnt het script in een submenu. Zorg er voor om `i18n` voor vertaling te gebruiken.

- `a.interactive` [optioneel]: Als het script invoer van de gebruiker nodig heeft, zet dit dan op `true`.

- `a.shortcut` [optioneel]: De hier gegeven sneltoets is de standaard sneltoets. Voorbeeld: Ctrl+Alt+t. Zie de Qt documentatie voor verdere details.

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 `reload-scripts`.

Als u bruikbare scripts ontwikkeld overweeg dan deze aan het &kate;-project bij te dragen door kontact op te nemen via de e-maillijst.

### API voor scripts

De API voor scripts die hier gepresenteerd wordt is beschikbaar in alle scripts, dwz. scripts voor inspringen en commando's voor de commandoregel. Alvorens de inhoud van een script wordt geladen, voegt &kate; eerst verschillende prototypen en functies toe aan de context van het script. Deze API voor het gemak bevat prototypen zoals tekstcursors en tekstreeksen en bevindt zich in de map `$KDEDIR/share/apps/katepart/api`. De bestandsnamen van elk JavaScript-bestand daar houdt zich aan het volgende naamschema:

    <nummer>_<naam>.js

Het nummer heeft twee cijfers en de naam is een willekeurige naam zoals `myutils`. &kate; stuurt via het nummer de volgorde van uitvoering van de API. Dwz., het bestand net de naam `05_cursor.js` wordt aangeroepen voor het bestand `10_range.js`. (Dit is overeenkomstig de volgorde bij het starten van het runlevel/init systeem in Linux).

Om de standaard API voor scripting uit te breiden met eigen functies en prototypen, maak gewoon een nieuw bestand aan in de lokale configuratiemap van KDE `$KDEHOME/share/apps/katepart/api` en controleer dat het een hoger nummer (volgorde van uitvoeren) heeft dan de andere `*.js` bestanden in de globale map `$KDEDIR/share/apps/katepart/api`. &kate; doorzoekt automatisch beide mappen naar `*.js` bestanden en voert ze uit in de juiste volgorde.

Om bestaande prototypes zoals `Cursor` of `Reeks` uit te breiden, os de aanbevolen manier om niet de globale `*.js` bestanden te wijzigen. In plaats daarvan maakt u een `*.js` bestand in de lokale map aan die later wordt uitgevoerd dan `05_cursor.js` en dan het `Cursor` prototype in JavaScript te wijzigen.

#### Cursors en bereiken

Omdat &kate; 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 `(regel, kolom)` 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.

##### Het prototype van cursor

    Cursor();

  Constructor. Levert een cursor terug op positie `(0, 0)`.

  Voorbeeld: `var cursor = new Cursor();`

    Cursor(int regel, int kolom);

  Constructor. Levert een cursor terug op positie (regel, kolom).

  Voorbeeld: `var cursor = new Cursor(3, 42);`

    Cursor(Cursor andere);

  Constructor kopiëren. Geeft een kopie van de cursor andere.

  Voorbeeld:`var copy = nieuwe cursor(andere);`

    Cursor Cursor.clone();

  Geeft een kloon van de cursor terug.

  Voorbeeld: `var clone = cursor.clone();`

    bool Cursor.isValid();

  Controleert of de cursor geldig is. De cursor is ongeldig indien lijn en/of kolom ingesteld zijn op `-1`.

  Voorbeeld: `var valid = cursor.isValid();`

    Cursor Cursor.invalid();

  Geeft een nieuwe ongeldige cursor op locatie `(-1, -1)`.

  Voorbeeld:`var invalidCursor = cursor.invalid();`

    int Cursor.compareTo(Cursor andere);

  Vergelijkt deze cursor met de cursor andere. Geeft terug

  - `-1`, indien deze cursor zich bevindt voor de cursor andere,

  - `0`, indien beide cursors gelijk zijn

  - `+1`, als deze cursor gelokaliseerd is na de cursor andere.

    bool Cursor.equals(Cursor andere);

  Geeft `true` terug, als deze cursor en de cursor andere gelijk zijn, anders `false`.

    String Cursor.toString();

  Geeft de cursor terug als een tekenreeks met de vorm `Cursor(regel, kolom)`.

##### Het prototype bereik

    Range();

  Constructor. Calling `new Range()` returns a Range at (0, 0) - (0, 0).

    Range(Cursor begin, Cursor eind);

  Constructor. Calling `new Range(start, end)` returns the Range (start, end).

    Range(int beginRegel, int beginKolom, int eindRegel, int eindKolom);

  Constructor. Calling `new Range(startLine, startColumn, endLine, endColumn)` returns the Range from (startLine, startColumn) to (endLine, endColumn).

    Range(Range andere);

  Constructor kopiëren. Geeft een kopie van Range andere.

    Range Range.clone();

  Geeft een kloon van de reeks terug.

  Example: `var clone = range.clone();`

    bool Range.isValid();

  Returns `true`, if both start and end cursor are valid, otherwise `false`.

  Example: `var valid = range.isValid();`

    bool Range.invalid();

  Returns the Range from (-1, -1) to (-1, -1).

    bool Range.contains(Cursor cursor);

  Returns `true`, if this range contains the cursor position, otherwise `false`.

    bool Range.contains(Range other);

  Returns `true`, if this range contains the Range other, otherwise `false`.

    bool Range.containsColumn(int column);

  Returns `true`, if column is in the half open interval `[start.column, end.column)`, otherwise `false`.

    bool Range.containsLine(int line);

  Returns `true`, if line is in the half open interval `[start.line, end.line)`, otherwise `false`.

    bool Range.overlaps(Range other);

  Returns `true`, if this range and the range other share a common region, otherwise `false`.

    bool Range.overlapsLine(int line);

  Returns `true`, if line is in the interval `[start.line, end.line]`, otherwise `false`.

    bool Range.overlapsColumn(int column);

  Returns `true`, if column is in the interval `[start.column, end.column]`, otherwise `false`.

    bool Range.equals(Range other);

  Returns `true`, if this range and the Range other are equal, otherwise `false`.

    String Range.toString();

  Returns the range as a string of the form `Range(Cursor(line, column), Cursor(line, column))`.

#### Global Functions

This section lists all global functions.

##### Foutopsporing

    void debug(String text);

  Prints text to `stdout` in the console launching the application.

##### Vertaling

In order to support full localization, there are several functions to translate strings in scripts, namely `i18n`, `i18nc`, `i18np` and `i18ncp`. These functions behave exactly like KDE's translation functions.

The translation functions translate the wrapped strings through KDE's translation system to the language used in the application. Strings in scripts being developed in the official &kate; sources are automatically extracted and translatable. In other words, as a &kate; developer you do not have to bother with message extraction and translation. However, for 3rd-party scripts developed outside of KDE, you have to extract and translate the messages yourself. Along with your scripts you have to also distribute a translation catalog, that includes all translated strings. Further, your script header then must explicitly state the catalog to load by specifying `i18n-catalog`.

    void i18n(String text, arg1, ...);

  Translates text into the language used by the application. The arguments arg1, ..., are optional and used to replace the placeholders `%1`, `%2`, etc.

    void i18nc(String context, String text, arg1, ...);

  Translates text into the language used by the application. Additionally, the string context is visible to translators so they can provide a better translation. The arguments arg1, ..., are optional and used to replace the placeholders `%1`, `%2`, etc.

    void i18np(String singular, String plural, int number, arg1, ...);

  Translates either singular or plural into the language used by the application, depending on the given number. The arguments arg1, ..., are optional and used to replace the placeholders `%1`, `%2`, etc.

    void i18ncp(String context, String singular, String plural, int number, arg1, ...);

  Translates either singular or plural into the language used by the application, depending on the given number. Additionally, the string context is visible to translators so they can provide a better translation. The arguments arg1, ..., are optional and used to replace the placeholders `%1`, `%2`, etc.

#### The View API

Whenever a script is being executed, there is a global variable `view` representing the current active editor view. The following is a list of all available View functions.

    Cursor view.cursorPosition()

  Geeft de huidige cursorpositie in het beeld terug.

    void view.setCursorPosition(int line, int column)
    void view.setCursorPosition(Cursor cursor)

  Geeft de huidige cursorpositie in het beeld terug.

    void view.setCursorPosition(int line, int column);
    void view.setCursorPosition(Cursor cursor);

  Set the current cursor position to either (line, column) or to the given cursor.

    Cursor view.virtualCursorPosition();

  Returns the virtual cursor position with each tab counting the corresponding amount of spaces depending on the current tab width.

    void view.setVirtualCursorPosition(int line, int column);
    void view.setVirtualCursorPosition(Cursor cursor);

  Set the current virtual cursor position to (line, column) or to the given cursor.

    String view.selectedText();

  Returns the selected text. If no text is selected, the returned string is empty.

    bool view.hasSelection();

  Returns `true`, if the view has selected text, otherwise `false`.

    Range view.selection();

  Returns the selected text range. The returned range is invalid if there is no selected text.

    void view.setSelection(Range range);

  Stelt de geselecteerde tekst in op de gegeven reeks.

    void view.removeSelectedText();

  Remove the selected text. If the view does not have any selected text, this does nothing.

    void view.selectAll();

  Selects the entire text in the document.

    void view.clearSelection();

  Clears the text selection without removing the text.

#### The Document API

Whenever a script is being executed, there is a global variable `document` representing the current active document. The following is a list of all available Document functions.

    String document.fileName();

  Returns the document's filename or an empty string for unsaved text buffers.

    String document.url();

  Returns the document's full url or an empty string for unsaved text buffers.

    String document.mimeType();

  Returns the document's mime type or the mime type `application/octet-stream` if no appropriate mime type could be found.

    String document.encoding();

  Geeft de nu gebruikte codering terug om het bestand op te slaan.

    String document.highlightingMode();

  Geeft de gebruikte globale accentueringmodus terug voor het gehele document.

    String document.highlightingModeAt(Cursor pos);

  Geeft de gebruikte accentueringmodus terug op de gegeven positie in het document.

    Array document.embeddedHighlightingModes();

  Geeft een reeks van accentueringmodi terug ingebed in dit document.

    bool document.isModified();

  Returns `true`, if the document has unsaved changes (modified), otherwise `false`.

    String document.text();

  Returns the entire content of the document in a single text string. Newlines are marked with the newline character `\n`.

    String document.text(int fromLine, int fromColumn, int toLine, int toColumn);
    String document.text(Cursor from, Cursor to);
    String document.text(Range range);

  Returns the text in the given range. It is recommended to use the cursor and range based version for better readability of the source code.

    String document.line(int line);

  Returns the given text line as string. The string is empty if the requested line is out of range.

    String document.wordAt(int line, int column);
    String document.wordAt(Cursor cursor);

  Geeft het woord terug op de gegeven cursorpositie.

    String document.charAt(int line, int column);
    String document.charAt(Cursor cursor);

  Geeft het teken terug op de gegeven cursorpositie.

    String document.firstChar(int line);

  Returns the first character in the given line that is not a whitespace. The first character is at column 0. If the line is empty or only contains whitespace characters, the returned string is empty.

    String document.lastChar(int line);

  Returns the last character in the given line that is not a whitespace. If the line is empty or only contains whitespace characters, the returned string is empty.

    bool document.isSpace(int line, int column);
    bool document.isSpace(Cursor cursor);

  Returns `true`, if the character at the given cursor position is a whitespace, otherwise `false`.

    bool document.matchesAt(int line, int column, int line, String text);
    bool document.matchesAt(Cursor cursor, String text);

  Returns `true`, if the given text matches at the corresponding cursor position, otherwise `false`.

    bool document.startsWith(int line, String text, bool skipWhiteSpaces);

  Returns `true`, if the line starts with text, otherwise `false`. The argument skipWhiteSpaces controls whether leading whitespaces are ignored.

    bool document.endsWith(int line, String text, bool skipWhiteSpaces);

  Returns `true`, if the line ends with text, otherwise `false`. The argument skipWhiteSpaces controls whether trailing whitespaces are ignored.

    bool document.setText(String text);

  Stelt de gehele documenttekst in.

    bool document.clear();

  Verwijdert de gehele tekst uit het document.

    bool document.truncate(int line, int column);
    bool document.truncate(Cursor cursor);

  Truncate the given line at the given column or cursor position. Returns `true` on success, or `false` if the given line is not part of the document range.

    bool document.insertText(int line, int column, int line, String text);
    bool document.insertText(Cursor cursor, String text);

  Inserts the text at the given cursor position. Returns `true` on success, or `false`, if the document is in read-only mode.

    bool document.removeText(int fromLine, int fromColumn, int toLine, int toColumn);
    bool document.removeText(Cursor from, Cursor to);
    bool document.removeText(Range range);

  Removes the text in the given range. Returns `true` on success, or `false`, if the document is in read-only mode.

    bool document.insertLine(int line, String text);

  Inserts text in the given line. Returns `true` on success, or `false`, if the document is in read-only mode or the line is not in the document range.

    bool document.removeLine(int line);

  Removes the given text line. Returns `true` on success, or `false`, if the document is in read-only mode or the line is not in the document range.

    void document.joinLines(int startLine, int endLine);

  Joins the lines from startLine to endLine. Two succeeding text lines are always separated with a single space.

    int document.lines();

  Geeft het aantal regels in het document terug.

    int document.length();

  Geeft het aantal tekens in het document terug.

    int document.lineLength(int line);

  Returns the line's length.

    void document.editBegin();

  Starts an edit group for undo/redo grouping. Make sure to always call `editEnd()` as often as you call `editBegin()`. Calling `editBegin()` internally uses a reference counter, i.e., this call can be nested.

    void document.editEnd();

  Ends an edit group. The last call of `editEnd()` (i.e. the one for the first call of `editBegin()`) finishes the edit step.

    int document.firstColumn(int line);

  Returns the first non-whitespace column in the given line. If there are only whitespaces in the line, the return value is `-1`.

    int document.lastColumn(int line);

  Returns the last non-whitespace column in the given line. If there are only whitespaces in the line, the return value is `-1`.

    int document.prevNonSpaceColumn(int line, int column);
    int document.prevNonSpaceColumn(Cursor cursor);

  Returns the column with a non-whitespace characters starting at the given cursor position and searching backwards.

    int document.nextNonSpaceColumn(int line, int column);
    int document.nextNonSpaceColumn(Cursor cursor);

  Returns the column with a non-whitespace characters starting at the given cursor position and searching forwards.

    int document.prevNonEmptyLine(int line);

  Returns the next non-empty line containing non-whitespace characters searching backwards.

    int document.nextNonEmptyLine(int line);

  Returns the next non-empty line containing non-whitespace characters searching forwards.

    bool document.isInWord(String character, int attribute);

  Returns `true`, if the given character with the given attribute can be part of a word, otherwise `false`.

    bool document.canBreakAt(String character, int attribute);

  Returns `true`, if the given character with the given attribute is suited to wrap a line, otherwise `false`.

    bool document.canComment(int startAttribute, int endAttribute);

  Returns `true`, if a range starting and ending with the given attributes is suited to be commented out, otherwise `false`.

    String document.commentMarker(int attribute);

  Returns the comment marker for single line comments for a given attribute.

    String document.commentStart(int attribute);

  Returns the comment marker for the start of multi-line comments for a given attribute.

    String document.commentEnd(int attribute);

  Returns the comment marker for the end of multi-line comments for a given attribute.

    int document.attribute(int line, int column);
    int document.attribute(Cursor cursor);

  Geeft het attribuut terug op de gegeven cursorpositie.

    bool document.isAttribute(int line, int column, int attribute);
    bool document.isAttribute(Cursor cursor, int attribute);

  Returns `true`, if the attribute at the given cursor position equals attribute, otherwise `false`.

    String document.attributeName(int line, int column);
    String document.attributeName(Cursor cursor);

  Returns the attribute name as human readable text. This equals to the `itemData` name in the syntax highlighting files.

    bool document.isAttributeName(int line, int column, String name);
    bool document.isAttributeName(Cursor cursor, String name);

  Returns `true`, if the attribute name at a certain cursor position matches the given name, otherwise `false`.

    String document.variable(String key);

  Returns the value of the requested document variable key. If the document variable does not exist, the return value is an empty string.

    int document.firstVirtualColumn(int line);

  Returns the virtual column of the first non-whitespace character in the given line or `-1`, if the line is empty or contains only whitespace characters.

    int document.lastVirtualColumn(int line);

  Returns the virtual column of the last non-whitespace character in the given line or `-1`, if the line is empty or contains only whitespace characters.

    int document.toVirtualColumn(int line, int column);
    int document.toVirtualColumn(Cursor cursor);
    Cursor document.toVirtualCursor(Cursor cursor);

  Converts the given real cursor position to a virtual cursor position, either returning an int or a Cursor object.

    int document.fromVirtualColumn(int line, int virtualColumn);
    int document.fromVirtualColumn(Cursor virtualCursor);
    Cursor document.fromVirtualCursor(Cursor virtualCursor);

  Converts the given virtual cursor position to a real cursor position, either returning an int or a Cursor object.

    Cursor document.anchor(int line, int column, Char character);
    Cursor document.anchor(Cursor cursor, Char character);

  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, dwz. andere '(...)' worden genegeerd.

    Cursor document.rfind(int regel, int kolom, String tekst, int attribuut = -1);
    Cursor document.rfind(Cursor cursor, String tekst, int attribuut = -1);

  Zoek de gegeven tekst achterwaarts met het juiste attribuut. Het argument attribuut wordt genegeerd als het is ingesteld op `-1`. De teruggegeven cursor is ongeldig, als de tekst niet is gevonden.

    int document.defStyleNum(int line, int column);
    int document.defStyleNum(Cursor cursor);

  Geeft de standaard stijl terug op de gegeven cursorpositie.

    bool document.isCode(int line, int column);
    bool document.isCode(Cursor cursor);

  Geeft `true` terug, als het attribuut op de gegeven cursorpositie niet gelijk is aan alle volgende stijlen: `dsComment`, `dsString`, `dsRegionMarker`, `dsChar`, `dsOthers`.

    bool document.isComment(int line, int column);
    bool document.isComment(Cursor cursor);

  Geeft `true` terug, als het attribuut van het teken op de cursorpositie gelijk is aan `dsComment`, anders `false`.

    bool document.isString(int line, int column);
    bool document.isString(Cursor cursor);

  Geeft `true` terug, als het attribuut van het teken op de cursorpositie gelijk is aan `dsString`, anders `false`.

    bool document.isRegionMarker(int line, int column);
    bool document.isRegionMarker(Cursor cursor);

  Geeft `true` terug, als het attribuut van het teken op de cursorpositie gelijk is aan `dsRegionMarker`,anders `false`.

    bool document.isChar(int line, int column);
    bool document.isChar(Cursor cursor);

  Geeft `true` terug, als het attribuut van het teken op de cursorpositie gelijk is aan `dsChar`, anders `false`.

    bool document.isOthers(int line, int column);
    bool document.isOthers(Cursor cursor);

  Geeft `true` terug, als het attribuut van het teken op de cursorpositie gelijk is aan `dsOthers`, anders `false`.