1
<appendix id="highlight">
10
<othercredit role="translator"
22
>Tõlge eesti keelde</contrib
28
>Süntaksi esiletõstmise kasutamine</title>
30
<sect1 id="highlight-overview">
36
>Süntaksi esiletõstmine paneb redaktori automaatselt näitama teksti erinevates stiilides ja värvides vastavalt stringi funktsioonile failis. Rakenduse lähtetekstis võivad koodi juhtlaused olla näiteks rasvases kirjas, andmetüübid ja kommentaarid aga ülejäänud tekstist erinevat värvi. See hõlbustab märgatavalt teksti redigeerimist ning aitab autoril tõhusamalt ja tootlikumalt töötada.</para>
40
><imagedata format="PNG" fileref="highlighted.png"/></imageobject>
43
>Perli funktsioon, esitatud süntaksi esiletõstu kasutades.</phrase
47
>Perli funktsioon, esitatud süntaksi esiletõstu kasutades.</para>
53
><imagedata format="PNG" fileref="unhighlighted.png"/></imageobject>
56
>Sama perli funktsioon ilma esiletõstuta.</phrase
60
>Sama perli funktsioon ilma esiletõstuta.</para
65
>Kumba kahest näitest on hõlpsam lugeda?</para>
68
>&kate; kasutab paindlikku, seadistatavat ja võimsat süntaksi esiletõstmise süsteemi ning ka tavalise distributsiooniga käib kaasas väga ulatuslik programmeerimis-, märke- ja skriptikeelte ning muude tekstifaili vormingute definitsioonide komplekt. Lisaks võid luua omaenda definitsioonid tavaliste &XML;-failide kujul.</para>
71
>&kate; tuvastab faili avamisel selle &MIME; tüübile tuginedes (mille määrab kindlaks faililaiend või kui seda ei ole, siis sisu) automaatselt sobiva süntaksi ja selle reeglid. Kui sinu arvates on valik valesti langetatud, võid kasutatava süntaksi määrata käsitsi menüüst <menuchoice
75
>Esiletõstmine</guisubmenu
80
>Iga süntaksi esiletõstu määratluse stiilid ja värvid saab ise seada <link linkend="config-dialog"
81
>seadistustedialoogi</link
82
> leheküljel <link linkend="prefcolors-highlighting-text-styles"
83
>Tekstistiilide esiletõstmine</link
84
>, &MIME; tüübid aga, mille puhul esiletõstu kasutada, leheküljel <link linkend="pref-open-save-modes-filetypes"
85
>Režiimid ja failitüübid</link
90
>Süntaksi esiletõstmine on mõeldud parandama korrektse teksti lugemist, kuid seda ei peaks kasutama teksti korrektsuse kontrollimiseks. Teksti süntaksi märkimine on sõltuvalt kasutatavast vormingust päris keeruline ettevõtmine ja mõnel juhul on süntaksireeglite autorid väga uhked, kui suudavad korrektselt esitada 98% tekstist, kuigi enamasti läheb sul vaja mõnda päris haruldast stiili, et näha mittekorrektset 2%.</para>
95
>Uusi või uuendatud süntaksi esiletõstu definitsioone saab alla laadida &kate; veebileheküljelt klõpsuga nupule <guibutton
96
>Laadi esiletõstu failid alla...</guibutton
97
> <link linkend="config-dialog"
98
>seadistustedialoogi</link
99
> leheküljel <link linkend="pref-open-save-modes-filetypes"
100
>Režiimid ja failitüübid</link
106
<sect1 id="katehighlight-system">
109
>&kate; süntaksi esiletõstmise süsteem</title>
112
>See sektsioon tutvustab põhjalikumalt &kate; süntaksi esiletõstmise mehhanismi. See on mõeldud neile, kes soovivad sellest rohkem teada saada või tahavad süntaksi definitsioone muuta või uusi luua.</para>
114
<sect2 id="katehighlight-howitworks">
117
>Kuidas see töötab</title>
120
>Kui sa faili avad, püüab &kate; redaktor kõigepealt tuvastada, millist süntaksi definitsooni antud faili puhul kasutada. Faili teksti lugedes, samuti ajal, mil sa seda redigeerid, analüüsib süntaksi esiletõstu süsteem teksti, kasutades selleks süntaksi definitsioonis antud määratlusi, ning märgistab erinevad kontekstid ja stiilid vastavalt reeglitele.</para>
123
>Dokumenti uue teksti kirjutamise ajal analüüsitakse ja märgistatakse see käigult, nii et kui kustutad märgi, mis tähistas mingi konteksti algust või lõppu, siis muutub vastavalt ka ümbritseva teksti stiil.</para>
126
>Süntaksi definitsioonid, mida &kate; kasutab esiletõstu süsteemis, on &XML;-failid, mis sisaldavad endas <itemizedlist>
129
>reegleid kontekstiblokkideks organiseeritud teksti rolli määramiseks</para
133
>märksõnade nimekirju</para
137
>stiilielementide definitsioone</para
143
>Teksti analüüsides hinnatakse tuvastusreegleid vastavalt nende defineerimise järjekorrale ja kui mingi stringi algus vastab reeglile, siis kasutatakse vastavat konteksti. Alguspunktist liigutakse punkti, kus reegli kohaselt kontekst lõpeb, ning sealt algab reegli uus osa, mis võib olla erinevalt märgistatud.</para>
147
<sect2 id="highlight-system-rules">
152
>Tuvastusreeglid on esiletõstu tuvastamise tuum. Reegel on string, märk või <link linkend="regular-expressions"
153
>regulaaravaldis</link
154
>, millega sobivuse osas teksti analüüsitaksegi. Selles sisaldub info, millist stiili kasutada sobiva tekstiosa puhul. Reegel võib lülitada süsteemi töökonteksti kas otseselt mainitud kontekstile või varem tekstis kasutatud kontekstile.</para>
157
>Reeglid on rühmitatud kontekstigruppidesse. Kontekstigruppi kasutatakse vormingu peamiste tekstiosiste jaoks, milleks võivad näiteks olla jutumärkides tekstistringid või kommenteeritud tekstiblokid. See tagab, et esiletõstu süsteem ei pea läbi lappama kõiki reegleid, kui seda ei ole vaja, ja et mõningaid järjestikusi märke tekstis võib tõlgendada erinevalt sõltuvalt hetkekontekstist. </para>
160
>Konteksti saab genereerida dünaamiliselt, mis lubab reeglites kasutada protsessipõhiseid andmeid.</para>
164
<sect2 id="highlight-context-styles-keywords">
166
>Kontekstistiilid ja võtmesõnad</title>
169
>Mõnes programmeerimiskeeles tõlgendab kompilaator (rakendus, mis teisendab lähtekoodi binaarkoodiks) täisarve teisiti kui ujukomaarve ning mõnikord võib esineda ka märke, mis omandavad eritähenduse, kui nad asuvad jutumärkide vahel. Sellisel juhul on mõttekas käsitleda neid ümbritsevast erinevalt, nii et neid saaks teksti lugedes hõlpsasti eristada. Seepärast võib süntaksi esiletõstmise süsteem käsitleda neid erikontekstina ja vastavalt ka märkida, isegi kui nad seda tegelikult ei ole.</para>
172
>Süntaksi definitsioon võib sisaldada nii palju stiile, kui vähegi on vaja katmaks vorminguelemente, mille tuvastamiseks ta mõeldud on.</para>
175
>Mitme vormingu puhul esinevad sõnade nimekirjad, mis esindavad erikontseptsiooni. Näiteks programmeerimiskeeltes on juhtlaused, andmetüübid ja keele sisseehitatud funktsioonid erinevad kontseptsioonid. &kate; süntaksi esiletõstu süsteem kasutab selliseid nimekirju tuvastamaks ja märkimaks tekstis sõnu, mis vastavad tekstivormingu kontseptsioonidele.</para>
179
<sect2 id="kate-highlight-system-default-styles">
181
>Vaikestiilid</title>
184
>Kui avad &kate;s C++ lähtetekstifaili, &Java; lähtetekstifaili ja <acronym
186
>-dokumendi, märkad, et kuigi vormingud on erinevad ja seepärast on erikohtlemise osaks saanud erinevad sõnad, on kasutatavad värvid ühesugused. Selle põhjuseks on asjaolu, et &kate; kasutab eelnevalt määratud vaikestiilide nimekirja, mida siis omakorda kasutavad konkreetsed süntaksi määratlused.</para>
189
>See võimaldab hõlpsasti tuvastada ühesuguseid kontseptsioone erinevate tekstivormingute puhul. Nii esinevad näiteks kommentaarid peaaegu igas programmeerimis-, skripti- või märkekeeles ja kui nende märkimiseks kasutatakse igas keeles ühesugust värvi, siis ei pea uut faili avades nägema vaeva nende leidmisega.</para>
193
>Kõik stiilid süntaksi definitsioonis kasutavad üht vaikestiili. Mõned süntaksi definitsioonid võivad kasutada rohkem stiile, kui neid on vaikimisi määratud, nii et kui kasutad tihti sellist vormingut, võiks olla nutikas tegu avada seadistustedialoog ja järele vaadata, kas mõningad kontseptsioonid kasutavad üht ja sama stiili. Näiteks on ainult üks vaikestiil stringide jaoks, kuid programmeerimiskeel Perl kasutab kaht tüüpi stringe, mistõttu esiletõstu saab parandada neile veidi erinevaid omadusi andes. Kõiki <link linkend="kate-highlight-default-styles"
194
>saadaolevaid vaikestiile</link
195
> selgitame veidi hiljem.</para>
202
<sect1 id="katehighlight-xml-format">
204
>Esiletõstu definitsiooni &XML;-vorming</title>
211
>See sektsioon annab ülevaate esiletõstu definitsiooni &XML;-vormingust, kirjeldades põhikomponente, nende tähendust ja kasutamist. Järgmises sektsioonis süüvitakse tuvastusreeglite olemusse.</para>
214
>Formaalne määratlus ehk <acronym
216
> on salvestatud faili <filename
217
>language.dtd</filename
218
>, mis peaks olema paigaldatud kataloogi <filename
221
>/share/apps/katepart/syntax</filename
226
>&kate; esiletõstu definitsiooni failide põhisektsioonid</title>
230
>Esiletõstu fail sisaldab päist, mis määrab ära XML-i versiooni ja doctype'i:</term>
233
><?xml version="1.0" encoding="UTF-8"?>
234
<!DOCTYPE language SYSTEM "language.dtd">
241
>Definitsioonifaili juureks on element <userinput
243
>. Võimalikud atribuudid on järgmised:</term>
247
>Nõutavad atribuudid:</para>
251
> määrab keele nime. Seda näeb ka menüüdes ja dialoogides.</para>
255
> määrab kategooria.</para>
258
>extensions</userinput
259
> määrab faililaiendid, näiteks "*.cpp;*.h"</para>
262
>Lisaatribuudid:</para>
266
> seostab failid &MIME; tüübiga.</para>
270
> määrab definitsioonifaili versiooni.</para>
273
>kateversion</userinput
274
> määrab viimase toetatud &kate; versiooni.</para>
277
>casesensitive</userinput
278
> määrab, kas võtmesõnad on tõstutundlikud või mitte.</para>
282
> on vajalik juhul, kui samu laiendeid kasutab mõni muu esiletõstu definitsiooni fail. Sel juhul saab eelistuse kõrgem prioriteet.</para>
286
> sisaldab autori nime ja tema e-posti aadressi.</para>
290
> sisaldab litsentsi (tavaliselt LGPL, Artistic, GPL vms.).</para>
294
> määrab, kas nimi esineb &kate; menüüs või mitte.</para>
296
>Niisiis võib järgmine rida näha välja selline:</para>
298
><language name="C++" version="1.00" kateversion="2.4" section="Sources" extensions="*.cpp;*.h" />
306
>Seejärel tuleb element <userinput
307
>highlighting</userinput
308
>, mis võib sisaldada endas elementi <userinput
310
> ja kus peavad leiduma elemendid <userinput
313
>itemDatas</userinput
319
> sisaldab võtmesõnade nimekirja. Antud juhul on võtmesõnadeks <emphasis
323
>. Nimekirju võib lisada nii palju, kui neid parajasti vaja läheb.</para>
327
> sisaldab kõiki kontekste. Esimene kontekst on vaikimisi esiletõstu alguses. Kontekstis <emphasis
328
>Tavaline tekst</emphasis
329
> on kaks reeglit, millest üks sobitab võtmesõnade nimekirja nimega <emphasis
331
> ja teine tuvastab jutumärgid ning lülitub kontekstile <emphasis
333
>. Reeglitest räägib lähemalt järgmine peatükk.</para>
335
>Kolmas osa on element <userinput
336
>itemDatas</userinput
337
>. See sisaldab kõiki värvi- ja fondistiile, mida kontekstid ja reeglid vajavad. Antud näites on kasutusel <userinput
340
>Tavaline tekst</emphasis
347
><highlighting>
348
<list name="minginimi">
349
<item> class </item>
350
<item> const </item>
353
<context attribute="Tavaline tekst" lineEndContext="#pop" name="Tavaline tekst" >
354
<keyword attribute="Võtmesõna" context="#stay" String="minginimi" />
355
<DetectChar attribute="String" context="string" char="&quot;" />
357
<context attribute="String" lineEndContext="#stay" name="string" >
358
<DetectChar attribute="String" context="#pop" char="&quot;" />
362
<itemData name="Tavaline tekst" defStyleNum="dsNormal" />
363
<itemData name="Võtmesõna" defStyleNum="dsVõtmesõna" />
364
<itemData name="String" defStyleNum="dsString" />
366
</highlighting>
373
>Esiletõstu definitsiooni viimane osa on mittekohustuslik sektsioon <userinput
375
>. See võib sisaldada infot võtmesõnade, koodi voltimise, kommentaaride ja treppimise kohta.</term>
379
>Sektsioon <userinput
381
> määrab, millise stringiga algab üherealine kommentaar. Määrata võib ka mitmerealise kommentaari, kasutades atribuuti <emphasis
383
> koos lisaatribuudiga <emphasis
385
>. Seda kasutatakse siis, kui kasutaja tarvitab <emphasis
386
>kommentaari lisamise/eemaldamise</emphasis
389
>Sektsioon <userinput
391
> määrab, kas võtmesõnade nimekirjad on tõstutundlikud või mitte. Teisi atribuute selgitame hiljem.</para>
395
<comment name="singleLine" start="#"/>
397
<keywords casesensitive="1"/>
409
<sect2 id="kate-highlight-sections">
411
>Sektsioonid üksikasjalikult</title>
413
>Selles osas kirjeldame kõiki saadaolevaid konteksti, 'itemData', võtmesõnade, kommentaaride, koodi voltimise ja treppimise atribuute.</para>
420
> kuulub gruppi <userinput
422
>. Kontekst määrab kontekstispetsiifilised reeglid, näiteks selle, mis juhtub siis, kui esiletõstu süsteem jõuab oma tegevuses rea lõppu. Võimalikud atribuudid on järgmised:</term>
429
> määrab konteksti nime. Reeglid kasutavad seda määramaks konteksti, millele lülituda, kui reegel sobib.</para>
432
>lineEndContext</userinput
433
> määrab konteksti, millele esiletõstu süsteem lülitub rea lõppu jõudes. See võib olla mõne teise konteksti nimi, <userinput
435
>, mis keelab konteksti vahetamise, või <userinput
437
>, mis sunnib kontekstist loobuma. Võimalik on ka kasutada näiteks <userinput
438
>#pop#pop#pop</userinput
439
>, et kolm korda järjest kontekstist loobuda.</para>
442
>lineBeginContext</userinput
443
> määrab konteksti, kui ette tuleb reaalgus. Vaikimisi #stay.</para>
446
>fallthrough</userinput
447
> määrab, kas lülituda kontekstile, mille määrab fallthroughContext, kui ühtegi sobivat reeglit ei leita, või mitte. Vaikimisi väär (<emphasis
452
>fallthroughContext</userinput
453
> määrab järgmise konteksti, kui ei leita ühtegi sobivat reeglit.</para>
457
>: kui on tõene (<emphasis
459
>), jätab kontekst meelde dünaamiliste reeglite salvestatud stringid/kohatäitjad. Seda on vaja näiteks HERE-dokumentide jaoks. Vaikimisi väär (<emphasis
470
> kuulub gruppi <userinput
471
>itemDatas</userinput
472
>. See määrab fondistiili ja värvid. Nii saab määrata ka omaenda stiilid ja värvid, kuid soovitatav oleks võimaluse korral siiski kasutada vaikestiile, et kasutaja näeks alati ka erinevates keeltes ühesuguseid värve. Vahel on siiski mõttekas ja vajalik värvide ja fontide atribuute muuta. Nõutav on atribuudi nimi ja defStyleNum, ülejäänud pole kohustuslikud. Võimalikud atribuudid on järgmised:</term>
478
> määrab itemData nime. Kontekstid ja reeglid kasutavad seda nime oma atribuudis <emphasis
480
> itemData'le viidates.</para>
483
>defStyleNum</userinput
484
> määrab kasutatava vaikestiili. Saadaolevaid vaikestiile tutvustame edaspidi.</para>
488
> määrab värvi. Sobiv vorming on '#rrggbb' või '#rgb'.</para>
492
> määrab valiku värvi.</para>
496
>: kui on tõene (<emphasis
498
>), on tekst kaldkirjas.</para>
502
>: kui on tõene (<emphasis
504
>), on tekst rasvases kirjas.</para>
507
>underline</userinput
508
>: kui on tõene (<emphasis
510
>), on tekst allajoonitud.</para>
513
>strikeout</userinput
514
>: kui on tõene (<emphasis
516
>), on tekst läbikriipsutatud.</para>
519
>spellChecking</userinput
520
>: kui on tõene (<emphasis
522
>), kontrollitakse teksti õigekirja, vastasel juhul jäetakse see õigekirja kontrollimisel kõrvale.</para>
533
> määrab võtmesõna omadused. Võimalikud atribuudid on järgmised:</term>
538
>casesensitive</userinput
539
> võib olla tõene (<emphasis
541
>) või väär (<emphasis
543
>). Kui see on tõene, on kõik võtmesõnad tõstutundlikud.</para>
546
>weakDeliminator</userinput
547
> on märkide nimekiri, mida ei kasutata sõnaeraldajana. Näiteks punkt <userinput
549
> on sõnaeraldaja. Eeldusel, et võtmesõna atribuudis <userinput
551
> sisaldab punkti, leitakse sobivus ainult siis, kui määrad punkti nõrgaks eraldajaks.</para>
554
>additionalDeliminator</userinput
555
> määrab lisaeraldajad.</para>
558
>wordWrapDeliminator</userinput
559
> määrab märgid, mille järel võib rida murda.</para>
561
>Vaikimisi on eraldajateks ja sõnamurdmise eraldajateks märgid <userinput
562
>.():!+,-<=>%&*/;?[]^{|}~\</userinput
563
>, tühikumärk (<userinput
565
>) ja tabeldusmärk (<userinput
578
> määrab kommentaari omadused, mida kasutatakse menüükäskude <menuchoice
582
>Kommentaar</guimenuitem
588
>Kommentaari eemaldamine</guimenuitem
590
> jaoks. Võimalikud atribuudid on järgmised:</term>
597
>singleLine</emphasis
600
>. Kui valida <emphasis
602
>, on vajalikud ka atribuudid <emphasis
610
> määrab stringi, millega alustatakse kommentaari. C++ korral on see näiteks "/*".</para>
614
> määrab stringi, millega lõpetatakse kommentaar. C++ korral on see näiteks "*/".</para>
618
> on mitmerealise kokkuvolditava kommentaari nimi. Eeldusel, et su reeglites on <emphasis
619
>beginRegion="Comment"</emphasis
621
>endRegion="Comment"</emphasis
622
>, tuleb kasutada <emphasis
623
>region="Comment"</emphasis
624
>. Sel juhul toimib kommentaari eemaldamine ka siis, kui sa ei vali kogu mitmerealise kommentaari teksti - lihtsalt kursor peab asuma mitmerealise kommentaari sees.</para>
635
> määrab koodivoltimise omadused. Võimalikud atribuudid on järgmised:</term>
640
>indentationsensitive</userinput
641
>: kui see on tõene (<emphasis
643
>), lisatakse koodivoltimise markerid vastavalt treppimisele (näiteks skriptikeeles Python). Tavaliselt pole seda vaja ning vaikimisi ongi see väär (<emphasis
653
>indentation</userinput
656
> määrab, millist treppimist kasutada. Soovitatav on siiski seda elementi vältida, sest treppimine määratakse tavaliselt kas failitüüpi defineerides või režiimirida tekstifailile lisades. Kui see siiski määrata, sunnitakse kasutajale peale konkreetne treppimine, mis aga ei pruugi alati kuigi hästi sobida. Võimalikud atribuudid on järgmised:</term>
662
> on treppimise nimi. Praegu on saada järgmised treppimised: <emphasis
663
>tavaline, cstyle, haskell, lilypond, lisp, python, ruby</emphasis
676
<sect2 id="kate-highlight-default-styles">
678
>Saadaolevad vaikestiilid</title>
680
>Vaikestiile me lühidalt <link linkend="kate-highlight-system-default-styles"
681
>juba tutvustasime</link
682
>: need on eelnevalt määratud fondi- ja värvistiilid.</para>
686
>Seepärast loetleme siin lihtsalt saadaolevad vaikestiilid:</term>
691
> tavalise teksti jaoks.</para>
694
>dsKeyword</userinput
695
> võtmesõnade jaoks.</para>
698
>dsDataType</userinput
699
> andmetüüpide jaoks.</para>
703
> murdarvväärtuste jaoks.</para>
707
> väärtuste jaoks, mille aluseks ei ole 10.</para>
711
> ujukomaväärtuste jaoks.</para>
715
> märkide jaoks.</para>
719
> stringide jaoks.</para>
722
>dsComment</userinput
723
> kommentaaride jaoks.</para>
727
> 'muude asjade' jaoks.</para>
731
> hoiatuste jaoks.</para>
734
>dsFunction</userinput
735
> funktsiooni väljakutsete jaoks.</para>
738
>dsRegionMarker</userinput
739
> regiooni markerite jaoks.</para>
743
> vigade ja vigase süntaksi esiletõstmiseks.</para>
752
<sect1 id="kate-highlight-rules-detailled">
754
>Esiletõstu tuvastamise reeglid</title>
757
>See sektsioon kirjeldab esiletõstu tuvastamise reegleid.</para>
760
>Iga reegel otsib sobivust null või enama märgi osas stringis, mida ta testib. Kui reegel leiab sobivuse, omistatakse sobivatele märkidele reeglis määratud stiil või <emphasis
762
> ning reegel võib soovitada konteksti vahetamist.</para>
765
>Reegel näeb välja selline:</para>
768
><ReegliNimi atribuut="(identifikaator)" kontekst="(identifikaator)" [reegli spetsiifilised atribuudid] /></programlisting>
773
> identifitseerib nime või indeksi järgi stiili, mida kasutada sobivate märkide puhul, ning <emphasis
775
> identifitseerib vajaliku konteksti.</para>
780
> saab identifitseerida:</para>
786
>identifikaatori</emphasis
787
> järgi, mis on mingi teise konteksti nimi.</para>
792
>korralduse</emphasis
793
> järgi, mis annab mootorile käsu jääda praeguse konteksti juurde (<userinput
795
>) või hüpata tagasi eelmisele stringis kasutatud kontekstile (<userinput
799
>Minemaks rohkem samme tagasi, võib võtmesõna #pop korrata: <userinput
800
>#pop#pop#pop</userinput
806
>Mõnel reeglil võivad olla <emphasis
807
>alamreeglid</emphasis
808
>, mida kaalutakse siis ja ainult siis, kui põhireegel on sobivuse leidnud. Kogu sobivale stringile antakse põhireeglis määratud atribuut. Alamreegliga reegel näeb välja selline:</para>
811
><ReegliNimi (atribuudid)>
812
<AlamreegliNimi (atribuudid) />
819
>Reegli spetsiifilised atribuudid on mitmekesised ja neid kirjeldatakse järgnevates sektsioonides.</para>
824
>Üldatribuudid</title>
826
>Järgmised atribuudid on ühised kõigile reeglitele ja neid kasutatakse alati, kui esinevad <userinput
827
>(üldatribuudid)</userinput
828
>. Nõutavad atribuudid on <emphasis
832
>, teised pole kohustuslikud. </para>
838
>: atribuut on seotud määratud <emphasis
846
>: määrab konteksti, millele esiletõstu süsteem lülitub, kui reegel sobib.</para>
851
>beginRegion</emphasis
852
>: alustab koodivoltimise plokki. Vaikimisi määramata (unset).</para>
858
>: lõpetab koodivoltimise ploki. Vaikimisi määramata (unset).</para>
864
>: kui on tõene (<emphasis
866
>), ei arvesta esiletõstu süsteem sobivuse pikkus. Vaikimisi väär (<emphasis
873
>firstNonSpace</emphasis
874
>: sobib ainult juhul, kui string on esimene mittetühimärk real. Vaikimisi väär (<emphasis
882
>: sobib ainult siis, kui veerg sobib. Vaikimisi määramata (unset).</para>
888
>Dünaamilised reeglid</title>
890
>Mõned reeglid lubavad määrata lisaatribuudi <userinput
892
>, mis kasutab tõeväärtust (vaikimisi on see väär ehk <emphasis
894
>). Kui dynamic on tõene (<emphasis
896
>), võib reegel kasutada teksti esindavaid kohatäitjaid, mis sobivad <emphasis
897
>regulaaravaldise</emphasis
898
> reeglile, mis lülitub aktiivsele kontekstile oma atribuudiga <userinput
902
>. Atribuudi <userinput
904
> korral asendatakse kohatäitja <replaceable
906
> (kus N on arv) vastava kohaga <replaceable
908
> väljakutsutavas regulaaravaldises. Atribuudi <userinput
910
> korra peab kohatäitja olema arv <replaceable
912
> ja see asendatakse esimese märgiga vastavas kohas <replaceable
914
> väljakutsutavas regulaaravaldises. Kui reegel vähegi seda atribuuti lubab, sisaldub selles <emphasis
922
>: võib olla tõene või väär (<emphasis
923
>(true|false)</emphasis
928
<sect2 id="highlighting-rules-in-detail">
930
>Reeglid üksikasjalikult</title>
938
>Tuvastab üksikut konkreetset märki. Tavaliselt kasutatakse näiteks jutumärkides stringi alguse ja lõpu leidmiseks.</para>
940
><DetectChar char="(märk)" (üldatribuudid) (dynamic) /></programlisting>
944
> määrab otsitava märgi.</para>
953
>Tuvastab kaks konkreetset märki määratud järjekorras.</para>
955
><Detect2Chars char="(märk)" char1="(märk)" (üldatribuudid) (dynamic) /></programlisting>
959
> defineerib esimese otsitava märgi, <userinput
970
>Tuvastab ühe märgi konkreetsete märkide hulgast.</para>
972
><AnyChar String="(string)" (üldatribuudid) /></programlisting>
976
> määrab märgikogumi.</para>
985
>Tuvastab täpse stringi.</para>
987
><StringDetect String="(string)" [insensitive="true|false;"] (üldatribuudid) (dynamic) /></programlisting>
991
> määrab otsitava stringi. Atribuut <userinput
992
>insensitive</userinput
993
> on vaikimisi <userinput
995
> ning seda kasutab stringivõrdlusfunktsioon. Kui väärtus on <userinput
997
>, kasutatakse tõstutundetut võrdlust.</para>
1003
>StringDetect</term>
1006
>Täpse stringi tuvastamine, kuid lisaks on vajalik sõnapiir, nagu näiteks punkt <userinput
1008
> või tühimärk sõna algul ja lõpul. <userinput
1009
>\b<string>\b</userinput
1010
> võib käsitada regulaaravaldisena, kuid see on kiirem kui reegel <userinput
1014
><WordDetect String="(string)" [insensitive="true|false"] (üldatribuudid) (dynamic) /></programlisting>
1016
>Atribuut <userinput
1018
> määrab otsitava stringi. Atribuut <userinput
1019
>insensitive</userinput
1020
> on vaikimisi <userinput
1022
> ning seda kasutab stringivõrdlusfunktsioon. Kui väärtus on <userinput
1024
>, kasutatakse tõstutundetut võrdlust.</para>
1026
>Alates Kate 3.5 (KDE 4.5)</para>
1035
>Otsib regulaaravaldise sobivust.</para>
1037
><RegExpr String="(string)" [insensitive="true|false;"] [minimal="true|false"] (üldatribuudid) (dynamic) /></programlisting>
1039
>Atribuut <userinput
1041
> määrab regulaaravaldise.</para>
1044
>insensitive</userinput
1045
> on vaikimisi <userinput
1047
> ja seda kasutab regulaaravaldise mootor.</para>
1051
> on vaikimisi <userinput
1053
> ja seda kasutab regulaaravaldise mootor.</para>
1055
>Kuna reeglid otsivad sobivust alati aktiivse stringi algusest, siis viitab regulaaravaldis, mille alguses seisab juurdelisamismärk (<literal
1057
>), et reegel peab sobivust otsima ainult rea algusest.</para>
1059
>Täpsemat infot vaata peatükist <link linkend="regular-expressions"
1060
>Regulaaravaldised</link
1070
>Tuvastab võtmesõna määratud nimekirjast.</para>
1072
><keyword String="(nimekirja nimi)" (üldatribuudid) /></programlisting>
1074
>Atribuut <userinput
1076
> identifitseerib võtmesõnade nimekirja nime järgi. Sellise nimega nimekiri peab olemas olema.</para>
1085
>Tuvastab täisarvu.</para>
1088
><Int (üldatribuudid) (dynamic) /></programlisting
1091
>Sellel reeglil ei ole spetsiifilisi atribuute. Tihti kasutatakse alamreegleid, et tuvastada arvu järel <userinput
1095
> kombinatsioone, mis osutavad programmikoodis täisarvu tüübile. Õigupoolest on alamreeglina lubatud kõik reeglid, kuid <acronym
1097
> lubab siiski ainult alamreeglit <userinput
1098
>StringDetect</userinput
1101
>Järgnev näide otsib täisarve märgi 'L' järel. <programlisting
1102
><Int attribute="Decimal" context="#stay" >
1103
<StringDetect attribute="Decimal" context="#stay" String="L" insensitive="true"/>
1116
>Tuvastab ujukomaarvu.</para>
1119
><Float (üldatribuudid) /></programlisting
1122
>Sellel reeglil ei ole spetsiifilisi atribuute. <userinput
1124
> on lubatud alamreeglina ning tüüpiliselt kasutatakse seda kombinatsioonide tuvastamiseks (vaata võrdluseks reeglit <userinput
1135
>Tuvastab kaheksandsüsteemis arvu.</para>
1138
><HICOct (üldatribuudid) /></programlisting
1141
>Sellel reeglil ei ole spetsiifilisi atribuute.</para>
1150
>Tuvastab kuueteistkümnendsüsteemis arvu.</para>
1153
><HlCHex (üldatribuudid) /></programlisting
1156
>Sellel reeglil ei ole spetsiifilisi atribuute.</para>
1162
>HICStringChar</term>
1165
>Tuvastab paomärgi.</para>
1168
><HlCStringChar (üldatribuudid) /></programlisting
1171
>Sellel reeglil ei ole spetsiifilisi atribuute.</para>
1174
>See otsib sobivusi nähtamatutele märkidele, mida tihti programmikoodis kasutatakse, näiteks <userinput
1176
> (uus rida) või <userinput
1178
> (tabeldusmärk).</para>
1181
>Leitakse järgmised märgid, kui neile eelneb längkriips (<literal
1184
>abefnrtv"'?\</userinput
1185
>. Lisaks leitakse kuueteistkümnendsüsteemis varjestatud arvud, näiteks <userinput
1187
>, ja kaheksandsüsteemis varjestatud arvud, näiteks <userinput
1199
>Tuvastab C märgi.</para>
1202
><HlCChar (üldatribuudid) /></programlisting
1205
>Sellel reeglil ei ole spetsiifilisi atribuute.</para>
1208
>Leitakse ülakriipsude vahele võetud C märgid, näiteks <userinput
1210
>. Ülakriipsude vahel võib olla lihtne märk või ka varjestatud märk. Viimaste kohta vaata HlCStringChar.</para>
1220
>Tuvastab stringi määratud algus- ja lõpumärgiga.</para>
1222
><RangeDetect char="(märk)" char1="(märk)" (üldatribuudid) /></programlisting>
1226
> määrab vahemikku alustava märgi ning <userinput
1228
> seda lõpetava märgi.</para>
1230
>See on kasulik näiteks väiksemate jutumärkides stringides ja muu sellise leidmiseks, kuid tasub tähele panna, et esiletõstu mootor töötab korraga ühel real ega leia stringe, mis ulatuvad üle reapiiri.</para>
1236
>LineContinue</term>
1239
>Tuvastab sobivused rea lõpus.</para>
1241
><LineContinue (üldatribuudid) /></programlisting>
1243
>Sellel reeglil ei ole spetsiifilisi atribuute.</para>
1245
>See reegel on abiks konteksti lülitamisel rea lõpus, kui viimane märk on längkriips (<userinput
1247
>). Seda vajab näiteks C/C++ makrode või stringide jätkamiseks.</para>
1253
>IncludeRules</term>
1256
>Kaasatakse teise konteksti või keele/faili reeglid.</para>
1258
><IncludeRules context="kontekstilink" [includeAttrib="true|false"] /></programlisting>
1261
>Atribuut <userinput
1263
> määrab, milline kontekst kaasata.</para>
1265
>Kui see on lihtne string, kaasatakse aktiivsesse konteksti kõik defineeritud reeglid, näiteks: <programlisting
1266
><IncludeRules context="teineKontekst" /></programlisting
1270
>Kui stringi alguses on <userinput
1272
>, otsib esiletõstu süsteem antud nimega keeledefinitsiooni, näiteks: <programlisting
1273
><IncludeRules context="##C++" /></programlisting
1276
>Kui atribuut <userinput
1277
>includeAttrib</userinput
1278
> on tõene (<emphasis
1280
>), muudetakse sihtatribuut lähteatribuudiks. Seda on vaja näiteks kommenteerimise jaoks, kui kaasatud kontekstis sobiv tekst on teistsuguse esiletõstuga kui algkontekstis. </para>
1287
>DetectSpaces</term>
1290
>Tuvastab tühimärgid.</para>
1292
><DetectSpaces (üldatribuudid) /></programlisting>
1295
>Sellel reeglil ei ole spetsiifilisi atribuute.</para>
1297
>Seda on mõtet kasutada, kui tead, et eespool asub tühimärke, näiteks trepitud ridade alguses. Sel juhul jäetakse kõik tühimärgid korraga vahele, mitte ei hakata erinevaid reegleid läbi uurima.</para>
1304
>DetectIdentifier</term>
1307
>Tuvastab identifikaatoristringid (regulaaravaldisena [a-zA-Z_][a-zA-Z0-9_]*).</para>
1309
><DetectIdentifier (üldatribuudid) /></programlisting>
1312
>Sellel reeglil ei ole spetsiifilisi atribuute.</para>
1314
>Seda on mõtet kasutada, kui soovid terve sõnastringi korraga vahele jätta, mitte lasta seda uurida mitmel reeglil.</para>
1323
>Nõuanded ja soovitused</title>
1327
>Kui oled aru saanud, kuidas käib konteksti lülitamine, on juba lihtne hakata ise esiletõstu definitsioone kirjutama. Siiski tuleb alati hoolikalt kontrollida, millist reeglit millises olukorras kasutada. Regulaaravaldised on väga võimsad vahendid, kuid võrreldes teiste reeglitega suhteliselt aeglased. Niisiis tasuks silmas pidada järgmisi nõuandeid. </para>
1331
>Ainult kahe märgi sobivuse leidmiseks kasuta <userinput
1332
>Detect2Chars</userinput
1334
>StringDetect</userinput
1335
>. Sama käib <userinput
1336
>DetectChar</userinput
1341
>Regulaaravaldisi on lihtne kasutada, kuid sageli saavutab sama tulemuse märksa kiiremini. Oletame, et soovid leida ainult märgi <userinput
1343
>, kui see on real esimene. Regulaaravaldis näeks välja nii: <programlisting
1344
><RegExpr attribute="Macro" context="macro" String="^\s*#" /></programlisting
1345
> Sama tulemuse saavutab aga palju kiiremini nii: <programlisting
1346
><DetectChar attribute="Macro" context="macro" char="#" firstNonSpace="true" /></programlisting
1347
> Kui soovid leida regulaaravaldise <userinput
1349
> sobivuse, on samuti mõistlik kasutada <userinput
1350
>DetectChar</userinput
1351
>, lisades sellele atribuudi <userinput
1352
>column="0"</userinput
1353
>. Atribuut <userinput
1355
> võtab aluseks märkide arvu, pidades niisiis tabeldusmärki üheks märgiks. </para>
1359
>Konteksti saab lülitada ilma märke töötlemata. Eeldame, et soovid lülitada konteksti, kui esineb string <userinput
1361
>, aga tahad seda stringi järgmises kontekstis töödelda. Alltoodud reegel leiab sobivuse ning atribuut <userinput
1362
>lookAhead</userinput
1363
> sunnib esiletõstu säilitama sobiva stringi järgmises kontekstis. <programlisting
1364
><Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" lookAhead="true" /></programlisting>
1369
>Kui tead, et esineb palju tühimärke, kasuta <userinput
1370
>DetectSpaces</userinput
1376
>DetectIdentifier</userinput
1377
>, mitte regulaaravaldist <userinput
1378
>'[a-zA-Z_]\w*'</userinput
1383
>Kasuta võimaluse korral alati vaikestiile. Sel moel viibi kasutaja alati tuttavas keskkonnas.</para>
1387
>Uuri teisi XML-faile selgitamaks, kuidas teised on oma reegleid teostanud.</para>
1391
>XML-faile saab kontrollida käsuga <command
1392
>xmllint --dtdvalid language.dtd mySyntax.xml</command
1397
>Sageli keerukaid regulaaravaldisi vajades võiks kasutada olemeid (<emphasis
1401
><?xml version="1.0" encoding="UTF-8"?>
1402
<!DOCTYPE language SYSTEM "language.dtd"
1404
<!ENTITY myref "[A-Za-z_:][\w.:_-]*">
1408
>Seejärel võid regulaaravaldise asemel kasutada <emphasis
1409
>&myref;</emphasis