# Zvýrazňovanie syntaxu

## Prehľad

Zvýrazňovanie syntaxu spôsobuje, že editor automaticky zobrazuje text v rôznych štýloch a farbách v závislosti na jeho úlohe v súbore. V zdrojovom kóde programu môžu byť príkazy vypísané tučné, dátové typy a komentáre môžu používať inú farbu než zvyšok textu. Tým sa výrazne zlepší čitateľnosť textu a to pomáha, aby bol autor výkonnejší.

Funkcia v jazyku Perl so zvýraznením.

Funkcia v jazyku Perl so zvýraznením.

Rovnaká funkcia Perl bez zvýraznenia.

Rovnaká funkcia Perl bez zvýraznenia.

Dva príklady. Ktorý sa číta lepšie?

&kate; obsahuje flexibilný, konfigurovateľný a výkonný systém pre zvýrazňovanie syntaxu a štandardná distribúcia poskytuje definície pre veľké množstvo programovacích jazykov, jazykov markup, skriptovacích jazykov a iných textových formátov. Navyše môžete definovať svoje vlastné definície pomocou jednoduchých súborov &XML;.

&kate; automaticky určuje správne pravidlá pri otvorení súboru na základe jeho typu &MIME;. Typ súboru je určený podľa prípony alebo, ak žiadnu nemá, podľa jeho obsahu. V prípade, že sa nepodarí správne určenie, môžete správne pravidlá nastaviť pomocou menu Dokumenty Zvýrazňovací mód.

Štýly a farby použité v každej definícii zvýraznenia spolu s typmi &MIME;, pre ktoré by sa mala definícia použiť, je možné nastaviť pomocou stránky Zvýraznenie v dialógu nastavenia.

Zvýraznenie syntaxu má zlepšiť čitateľnosť správneho textu, ale nemôžete si myslieť, že funguje ako overenie vášho textu. Označenie textu môže byť v závislosti na používanom formáte dosť zložité a v niektorých prípadoch budú autori pravidiel radi, ak dosiahnu 98% presnosť označenia. Aby ste ale narazili na nesprávne 2%, budete musieť mať asi dosť šťastia.

Môžete si stiahnuť aktualizované alebo nové definície zvýrazňovania z webovej stránky &kate; kliknutím na tlačidlo Stiahnutie v stránke Zvýraznenie v dialógu nastavenia.

## Systém zvýrazňovania &kate;

Táto kapitola detailné popisuje mechanizmus zvýrazňovania syntaxu &kate; Má zmysel v prípade, že vás to zaujíma, alebo chcete napísať alebo upraviť definíciu zvýrazňovania.

### Ako to funguje

Vždy, ked otvoríte súbor, jednou z prvých vecí, ktoré &kate; urobí je, že detekuje, ktorú definíciu zvýrazňovania má použiť pre tento súbor. Počas čítania obsahu súboru a ked píšete, systém zvýrazňovania analyzuje text pomocou pravidiel definovaných v definícii vybraného zvýrazňovania a označovať časti textu v závislosti na jeho kontexte.

Ak niečo napíšete do dokumentu, nový text sa analyzuje a označuje za behu, takže ak zmažete znak, ktorý označuje začiatok alebo koniec kontextu, štýl okolného textu sa zmení podľa toho.

Definície syntaxu používané systémom v &kate; sú súbory &XML; obsahujúce

- Pravidlá pre určenie role textu, organizované do kontextových blokov

- Zoznamy kľúčových slov

- Definície položiek štýlu

Pri analýze textu sa vyhodnocujú pravidlá pre detekciu v poradí, v ktorom sú definované a ak začiatok aktuálneho reťazca odpovedá pravidlu, použije sa odpovedajúci kontext. Začiatočný bod v texte sa presunie na koncový bod, kam až pravidlo odpovedá a začnú sa pravidlá vyhodnocovať znovu.

### Pravidlá

Detekčné pravidlá sú jadrom systému zvýrazňovania. Pravidlo je reťazec, znak alebo regulárny výraz oproti ktorému sa text porovnáva. Obsahuje informácie o tom, ktorý štýl sa má použiť pre nájdený text. Môže prepnúť kontext bud na nejaký priamo určený alebo na predchádzajúci, ktorý sa používal predtým.

Pravidlá sú utriedené v skupinách kontextu. Skupina kontextu sa používa pre hlavné textové koncepty formátu, napríklad reťazce alebo komentáre v programovom kóde. To zabezpečí, že systém zvýrazňovania nemusí prehľadávať všetky pravidlá ak to nie je nutné a že niektoré sekvencie znakov v texte môžu byť chápané rôzne v rôznych kontextoch.

### Kontextové štýly a kľúčové slová

V niektorých programovacích jazykoch sa celé čísla v kompilátore (programe, ktorý prevádza programovací jazyk na spustiteľný program) spracovávajú inak ako reálne a môžu niektoré znaky chápať špeciálne, ak sú napríklad v úvodzovkách. V takých prípadoch má zmysel ich zobrazenie iným spôsobom tak, aby ich bolo ľahké nájsť. Takže aj ked nereprezentujú špeciálne kontexty, môže ich zvýrazňovací systém tak chápať a označiť inak.

Definície syntaxu môžu obsahovať toľko štýlov, koľko ich je treba.

Vo veľa formátoch sú zoznamy slov, ktoré reprezentujú špeciálne koncepty. Napríklad programovacie jazyky obsahujú koncept príkazov, koncept mien datových typov a koncept zabudovaných funkcií. Systém zvýrazňovania &kate; dokáže takéto zoznamy detekovať a označiť slová textu pre zvýraznenie konceptov textových formátov.

### Štandardné štýly

Ak otvoríte zdrojový kód C++, &Java; alebo dokument HTML v &kate;, uvidíte, že aj ked sú označené iné časti textu, použijú sa rovnaké farby. To preto, lebo &kate; má preddefinované štandardné štýly, ktoré sa využívajú v jednotlivých definíciách.

Preto je jednoduché rozpoznať podobné koncepty v rôznych formátoch. Napríklad komentáre existujú skoro vo všetkých programovacích, skriptovacích a markup jazykoch. A ak sú vo všetkých jazykoch zobrazené rovnakým štýlom, nemusíte sa nad nimi vôbec zamýšľať.

Všetky štýly v definícii používajú jeden zo štandardných štýlov. Niektoré definície používajú viac štýlov než koľko je štandardných, takže ak používate nejaký formát často, asi sa vyplatí v dialógu nastavenia overiť, že sa pre rovnaké koncepty používa rovnaký štýl. Napríklad, existuje iba jeden štandardný štýl pre reťazce, ale v programovacom jazyku perl existujú dva typ reťazcov. Preto má zmysel, aby zvýraznenie pre ne používalo trochu iné štýly.

## &XML; formát definície zvýrazňovania

### Prehľad

Táto kapitola obsahuje prehľad formátu pre definíciu zvýrazňovania. Popisuje hlavné časti, ich význam a použitie. Detailne popisuje pravidlá pre detekciu.

Formálna definície, čiže DTD je uložená v súbore `language.dtd`, ktorý by mal byť nainštalovaný na vašom systéme v priečinku `$`TDEDIR`/share/apps/kate/syntax`.

### Hlavné časti definície zvýrazňovania v &kate;

Časť General

- Časť General obsahuje informácie o formáte komentárov popisovaného jazyka a definuje, či sa u kľúčových slov rozlišuje veľkosť písmen.

Highlighting

- Časť Highlighting obsahuje všetky dáta potrebné pre analýzu a zobrazenie textu. To znamená:

  ItemDatas

- Obsahuje elementy ItemData, každý definuje štýl.

Zoznamy kľúčových slov

- Každý zoznam má meno a môže obsahovať ľubovoľný počet položiek.

Contexts

- Obsahuje kontexy, ktoré môžu tiež obsahovať pravidlá pre detekciu.

## Pravidlá pre detekciu

Táto časť popisuje pravidlá pre detekciu syntaxe.

Každé pravidlo môže nájsť nula alebo viac znakov na začiatku reťazca, ktorý sa testuje. Ak pravidlo odpovedá, nájdeným znakom sa priradí štýl alebo atribút definovaný pravidlom a pravidlo môže požiadať o zmenu kontextu.

Atribúty attribute a context sú spoločné a pre všetky pravidlá.

Pravidlo vyzerá takto:

    <RuleName attribute="(identifier)" context="(identifikátor|poradie)" [atribúty pravidla] />

attribute identifikuje štýl, ktorý sa má použiť pre nájdené znaky pomocou mena alebo indexu. context identifikuje kontext, ktorý sa odteraz bude používať.

Atribút attribute je možné identifikovať menom alebo indexom (počítaným od 0) v skupine ItemDatas.

context je možné identifikovať pomocou:

- identifikátor, momentálne to môže byť iba index (počítaný od 0) v skupine kontextov.

- poradie povie systému, že má zostať v aktuálnom kontexte (`#stay`) alebo sa vrátiť do predchádzajúceho kontextu (`#pop`).

  Ak sa chcete vrátiť o viac ako jedej krok, kľúčové slovo #pop: `#pop#pop#pop`

Niektoré pravidlá môžu mať pod-pravidlá, ktoré sa potom vyhodnocujú iba v prípade, že sa rodičovské pravidlo aplikuje. Celý odpovedajúci reťazec sa nájde podľa atribútu v rodičovskom pravidle. Pod-pravidlá vyzerajú takto:

    <MenoPravidla (atribúty)>
      <MenoPodPravidla (atribúty) />
      ...
    </MenoPravidla>

Atribúty špecifické pre jednotlivé pravidlá sú popísané v nasledujúcom zozname.

## Detaily pravidiel

DetectChar

- Detekuje jediný znak. Obvykle sa používa napríklad pre nájdenie konca reťazca v úvodzovkách.

      <DetectChar char="(znak)" (spoločné atribúty) />

  Atribút `char` definuje hľadaný znak.

Detect2Chars

- Detekuje dva špecifické znaky v danom poradí.

      <Detect2Chars char="(znak)" char1="(znak)" (spoločné atribúty) />

  Atribút `char` definuje prvý hľadaný znak a `char1` druhý.

AnyChar

- Detekuje jeden znak zo skupiny zadaných znakov.

      <AnyChar String="(reťazec)" (spoločné atribúty) />

  Atribút `String` definuje množinu znakov.

StringDetect

- Detekuje presný reťazec.

      <StringDetect String="(reťazec)" [insensitive="TRUE|FALSE;"] (spoločné atribúty) />

  Atribút `String` definuje hľadaný reťazec. Atribút `insensitive` je štandardne `FALSE` a predáva sa funkcii pre porovnávanie reťazcov. Ak je hodnota `TURE`, použije sa porovnávanie bez rozlišovania veľkosti písmen.

RegExpr

- Hľadá pomocou regulárneho výrazu.

      <RegExpr String="(reťazec)" [insensitive="TRUE|FALSE;"] [minimal="TRUE|FALSE"] (spoločné atribúty) />

  Atribút `String` definuje regulárny výraz.

  `insensitive` je štandardne `FALSE` a predáva sa systému hľadania pomocou regulárnych výrazov.

  `minimal` je štandardne `FALSE` a predáva sa systému hľadania pomocou regulárnych výrazov.

  Pretože sa pravidlá vždy hľadajú od začiatku aktuálneho reťazca, regulárny výraz začínajúci znakom `^` znamená pravidlo, ktoré má hľadať iba na začiatku riadku.

  Dalšie informácie o nich nájdete v kapitole Regulárne výrazy.

Keyword

- Detekuje kľúčové slovo zo zadaného zoznamu.

      <keyword String="(meno zoznamu)" (spoločné atribúty) />

  Atribút `String` identifikuje zoznam kľúčových slov pomocou mena. Zoznam s týmto menom musí existovať.

Int

- Detekuje celé číslo.

      <Int (spoločné atribúty) />

  Toto pravidlo nemá žiadne špecifické atribúty. Pod-pravidlá sa typicky používajú pre detekciu kombinácií `L` a `U` po čísle, používané pre určenie celých čísel v programovom kóde.

Float

- Detekuje reálne číslo.

      <Float (spoločné atribúty)
      />

  Toto pravidlo nemá žiadne špeciálne atribúty.

HlCOct

- Detekuje číslo v osmičkovej sústave.

      <HlCOct (spoločné atribúty) />

  Toto pravidlo nemá žiadne špeciálne atribúty.

HlCHex

- Detekuje šestnástkové číslo.

      <Int (spoločné atribúty) />

  Toto pravidlo nemá žiadne špeciálne atribúty.

HlCStringChar

- Detekuje znak začínajúci \ (escaped).

      <HlCStringChar (spoločné atribúty)
      />

  Toto pravidlo nemá žiadne špeciálne atribúty.

  Nájde textovú reprezentáciu neviditeľných znakov obvykle používaných v programovacích jazykoch, napríklad `\n` (koniec riadku) alebo `\t` (tabulátor).

  Nasledujúce znaky budú nájdené ak sú po `\`: `abefnrtv"'?`. Okrem toho to nájde aj escapované šestnástkové a osmičkové čísla, napríklad `\033`.

RangeDetect

- Detekuje reťazec s definovanými začiatočnými a koncovými znakmi.

      <RangeDetect char="(znak)"  char1="(znak)" (spoločné atribúty) />

  `char` definuje prvý znak rozsahu, `char2` definuje posledný znak rozsahu.

  Hodí sa napríklad pre detekovanie malých reťazcov v úvodzovkách, ale uvedomte si, že systém pracuje po riadkoch, nenájde reťazce, ktoré majú viac riadkov.

LineContinue

- Zodpovedá koncu riadku.

      <LineContinue (spoločné atribúty) />

  Toto pravidlo nemá žiadne špeciálne atribúty.

  Toto pravidlo sa hodí pre prepínanie kontextu na konci riadku.