Prijeđi na sadržaj

Pomoć:Funkcije parsera

Izvor: Wikipedija

Funkcije parsera svojevrsne su magične riječi koje primaju parametre i vraćaju rezultat nakon obrade.

Uvjetne parserske funkcije

[uredi | uredi kôd]
Tip Operatori
Grupiranje (zagrade) ( )
Brojevi 1234.5   e (2.718)   pi (3.142)
Binarni operator e   unarni +,-
Unarni not ceil trunc floor abs exp ln sin cos tan acos asin atan
Binarni ^
* / div mod
+ -
Zaokruživanje round
Booleova algebra = != <> > < >= <=
and
or

Parserska funkcija #expr služi za izračunavanje matematičkih ili Booleovih izraza. Funkcija podržava logaritamske i trigonometrijske izračune, znanstvenu notaciju, matematičke funkcije poput floor() ili trunc() i poštuje redoslijed matematičkih operacija.

Sintaksa: {{#expr: matematički izraz }}

  • {{#expr:floor1.5e1}} => 15
  • {{#expr:(not0or1)and0}} => 0
  • {{#expr:floor1.5^2}} => 1
  • {{#expr:12/3*2}} => 8
  • {{#expr:111/3mod10}} => 7
  • {{#expr:358mod10*2}} => 16
  • {{#expr:1.234round2-1}} => 1.2

Funkcija #if prima određenu vrijednost i vraća rezultat ovisno o tome je li vrijednost prazna ili ne.

Sintaksa: {{#if: testni izraz | rezultat ako izraz nije prazan | rezultat ako je izraz prazan ili sadrži samo bjeline }}

  • {{#if: abc | postoji | ne postoji}} => postoji
  • {{#if: | postoji | ne postoji}} => ne postoji

Funkcija se najčešće upotrebljava za provjeru ima li parametar predloška asociranu vrijednost ili ne. Parametar nakon imena mora imati znak | kako bi funkcija radila očekivano. Primjerice, ako pozovemo predložak {{Primjer |ime=David}}, tada je:

  • {{#if: {{{ime|}}} | postoji | ne postoji }} => postoji
  • {{#if: {{{ime|}}} | Bok {{{ime}}}! | Niste unijeli ime }} => Bok David!
  • {{#if: {{{prezime|}}} | postoji | ne postoji }} => ne postoji
  • {{#if: {{{prezime}}} | postoji | ne postoji }} => postoji [a]

Ponašanje parametara detaljnije je prikazano u tablici ispod:

Parametar {{{1}}} {{{1|}}} {{#if: <parametar> | da | ne }}
Opis Primjer, pozicijski {{{1}}} {{{1|}}}
Nije definiran {{primjer}} {{{1}}} da ne
Definiran, ali prazan ili null {{primjer|}}, {{primjer|1=}}, {{primjer|param=}} ne ne
Definiran, nije prazan {{primjer|abc}}, {{primjer|1=abc}}, {{primjer|param=abc}} abc abc da da

Funkcija parsera #ifeq uspoređuje dvije ulazne vrijednosti i vraća rezultat ovisno o tome jesu li vrijednosti identične. Ako je potrebno raditi više usporedbi i definirati više od dva izlazna slučaja, preporučeno je upotrebljavati funkciju #switch.

Sintaksa: {{#ifeq: prvi ulaz | drugi ulaz | rezultat ako su ulazi jednaki | rezultat ako ulazi nisu jednaki }}

  • {{#ifeq: abc | abc | jednako | nejednako }} => jednako
  • {{#ifeq: abc | def | jednako | nejednako }} => nejednako
  • {{#ifeq: Abc | abc | jednako | nejednako }} => nejednako

Ako su obje ulazne vrijednosti ispravne brojčane vrijednosti, usporedit će se kao brojevi:

  • {{#ifeq: 01 | 1 | jednako | nejednako }} => jednako
  • {{#ifeq: "01" | "1" | jednako | nejednako }} => nejednako
  • {{#ifeq: 0 | -0 | jednako | nejednako }} => jednako
  • {{#ifeq: 1e3 | 1000 | jednako | nejednako }} => jednako
  • {{#ifeq: {{#expr:10^3}} | 1000 | jednako | nejednako }} => jednako

Upotreba magičnih riječi i oznaka u XML-u unutar parserskih funkcija može imati neočekivane rezultate:

  • {{#ifeq: <nowiki>abc</nowiki> | <nowiki>abc</nowiki> | jednako | nejednako }} => nejednako
  • {{#ifeq: <math>abc</math> | <math>abc</math> | jednako | nejednako }} => nejednako
  • {{#ifeq: {{:Posebno:PrefixIndex/{{FULLPAGENAME}}/}} | {{:Posebno:PrefixIndex/{{FULLPAGENAME}}/}} | jednako | nejednako }} => nejednako

iferror

[uredi | uredi kôd]

Parserska funkcija #iferror prima unos i vraća jedan od dva rezultata ovisno o tome vraća li unos pogrešku ili ne. Pogreškom se smatra bilo koji objekt u HTML-u s atributom class="error" poput poruka o pogrešci pri izvođenju drugih parserskih funkcija.

Sintaksa: {{#iferror: testni izraz | rezultat ako izraz vraća grešku | rezultat ako je izraz ispravan }}

  • {{#iferror: {{#expr: 1 + 2 }} | pogrešno | ispravno }} => ispravno
  • {{#iferror: {{#expr: 1 + X }} | pogrešno | ispravno }} => pogrešno
    • {{#expr: 1 + X }} => Pogreška u izrazu: nepoznata riječ »x«

Ako se izostavi rezultat pri ispravnom izrazu, vraća se rezultat testnog izraza (ako nije pogrešan). Ako se izostavi i rezultat pri pogrešci, a rezultat sadrži pogrešku, vraća se prazan rezultat .

  • {{#iferror: {{#expr: 1 + 2 }} | pogrešno }} => 3
  • {{#iferror: {{#expr: 1 + X }} | pogrešno }} => pogrešno
  • {{#iferror: {{#expr: 1 + 2 }} }} => 3
  • {{#iferror: {{#expr: 1 + X }} }} =>
  • {{#iferror: {{#expr: . }} | pogrešno | ispravno }} => ispravno
    • {{#expr: . }} => 0
  • {{#iferror: <strong class="error">abc</strong> | pogrešno | ispravno }} => pogrešno
    • <strong class="error">abc</strong> => abc

ifexpr

[uredi | uredi kôd]

Parserska funkcija #ifexpr prima matematički izraz i vraća jedan od dvaju rezultata ovisno o tome je li izraz matematički ispravan ili ne.

Sintaksa: {{#ifexpr: matematički izraz | rezultat ako je izraz točan | rezultat ako je izraz pogrešan }}

Svi se izrazi izračunavaju jednako kao kod funkcije #expr. Rezultat izraza zatim se promatra Booleovom logikom (istina ili laž).

  • {{#ifexpr: 1 > 0 | da | ne }} => da
  • {{#ifexpr: 1 < 0 | da | ne }} => ne
  • {{#ifexpr: 0 = 0 | da | ne }} => da
  • {{#ifexpr: 1 > 0 | | ne }} =>
  • {{#ifexpr: 1 > 0 }} =>
  • {{#ifexpr: floor1.5e1 = 15 | da | ne }} => da

Booleova logika također je podržana:

  • {{#ifexpr: 0 = 0 or 1 = 0 | da | ne }} => da
  • {{#ifexpr: 0 = 0 and 1 = 0 | da | ne }} => ne

ifexist

[uredi | uredi kôd]

Funkcija parsera #ifexist prima naslov stranice i ispisuje vrijednost ovisno o tome postoji li stranica na lokalnom projektu.

Sintaksa: {{#ifexist: ime stranice | rezultat ako je stranica postoji | rezultat ako stranica ne postoji }}

Provjera stranice tom funkcijom dodaje poveznicu na Posebno:Što vodi ovamo za traženu stranicu. Kad bi se primjerice na toj stranici izveo kod {{#ifexist:Abc}}, pregled Što vodi ovamo sa stranice Abc sadržavao bi i poveznicu na tu stranicu. Provjera stranice koja ne postoji dodaje njezinu poveznicu na Posebno:Tražene stranice (vidi phab:T14019 za detalje).

Ako je stranica stvorena pod navedenim naslovom, funkcija će je tretirati kao da postoji neovisno o tome ima li stranica sadržaj ili je izbijeljena, u kakvu je obliku sadržaj koji se na njoj nalazi (wikitekst, CSS, JavaScript, modul, slika ili drugo), je li vizualno prazna (primjerice ako se sastoji samo od kategorija ili međuwikipoveznica) i služi li za preusmjeravanje. Funkcija će tvrditi da stranica ne postoji samo ako je poveznica na stranicu crvena; u to mogu spadati i stranice koje su postojale, ali su potom izbrisane.

  • {{#ifexist: Pomoć:Funkcije parsera | postoji | ne postoji }} => postoji
  • {{#ifexist: ABCPomoć:Funkcije parseraABC | postoji | ne postoji }} => ne postoji

Ako pružimo poveznice na poruke sučelja, funkcija će zaključiti da one postoje isključivo ako postoji lokalna inačica stranice.

  • {{#ifexist: MediaWiki:Talkpagetext | postoji | ne postoji }} => postoji
  • {{#ifexist: MediaWiki:Title-invalid-too-long | postoji | ne postoji }} => ne postoji [b]

Funkcija ispravno radi i s posebnim stranicama koje stvaraju proširenja instalirana na trenutačnom projektu.

  • {{#ifexist: Special:Watchlist | postoji | ne postoji }} => postoji
  • {{#ifexist: Posebno:Praćene stranice | postoji | ne postoji }} => postoji
  • {{#ifexist: Special:Checkuser | postoji | ne postoji }} => postoji [c]
  • {{#ifexist: Posebno:Provjeri suradnika | postoji | ne postoji }} => postoji

Pri provjeri datoteka upotreba prefiksa Datoteka: ili File: provjerit će postojanje lokalne inačice datoteke, neovisno o tome postoji li datoteka na Zajedničkom poslužitelju. Upotreba prefiksa Media: pretražit će i Zajednički poslužitelj.

Primjer datoteke sa Zajedničkog poslužitelja:

  • {{#ifexist: Datoteka:JAB-code.png | postoji | ne postoji }} => ne postoji
  • {{#ifexist: File:JAB-code.png | postoji | ne postoji }} => ne postoji
  • {{#ifexist: Media:JAB-code.png | postoji | ne postoji }} => postoji

Primjer lokalne datoteke:

  • {{#ifexist: Datoteka:EWTN Logo.svg | postoji | ne postoji }} => postoji
  • {{#ifexist: File:EWTN Logo.svg | postoji | ne postoji }} => postoji
  • {{#ifexist: Media:EWTN Logo.svg | postoji | ne postoji }} => postoji

Funkcija ne radi za međuwikipoveznice:

  • {{#ifexist: :en:Borg | postoji | ne postoji }} => ne postoji
  • {{#ifexist: :mw:Help:Extension:ParserFunctions | postoji | ne postoji }} => ne postoji

Ograničenja ifexist

[uredi | uredi kôd]

Funkcija #ifexist smatra se zahtjevnom parserskom funkcijom. Svaka stranica na projektu dopušta zvanje ograničenog broja zahtjevnih funkcija (obično njih 500). U to se ograničenje ubrajaju i zahtjevne funkcije pozvane unutar predložaka u članku. Svaka zahtjevna funkcija pozvana nakon dostizanja tog ograničenja vratit će rezultat false (negativnu granu funkcije) bez provjere rezultata.

switch

[uredi | uredi kôd]

Parserska funkcija #switch uspoređuje jednu ulaznu vrijednost s više mogućih ogranaka i vraća izlaznu vrijednost asociranu uz ogranak u kojem je pronađena podudarnost.

Sintaksa:

{{#switch: vrijednost koju uspoređujemo
 | slučaj1 = rezultat1
 | slučaj2 = rezultat2
 | ...
 | slučajN = rezultatN
 | #default = rezultat ako nema podudarnosti
}}

Ako se grana #default izostavi, a nema podudarnosti, funkcija neće ispisati nikakav rezultat. Zadnja grana bez jednakosti predodređeno je default, pa se tekst "#default=" može i izostaviti.

Primjeri:

  • {{#switch: abc |abc = rezultat1 |def = rezultat2 |ghi = rezultat3 |#default = ništa}} => rezultat1
  • {{#switch: def |abc = rezultat1 |def = rezultat2 |ghi = rezultat3 |#default = ništa}} => rezultat2
  • {{#switch: ghi |abc = rezultat1 |def = rezultat2 |ghi = rezultat3 |#default = ništa}} => rezultat3
  • {{#switch: zzz |abc = rezultat1 |def = rezultat2 |ghi = rezultat3 |#default = ništa}} => ništa
  • {{#switch: zzz |abc = rezultat1 |def = rezultat2 |ghi = rezultat3 | ništa}} => ništa

Kao što je bio slučaj s #ifeq, ako je vrijednost koja se ispituje numerička, uspoređivat će se kao broj:

  • {{#switch: 0 + 1 | 1 = jedan | 2 = dva | drugo }} => drugo
  • {{#switch: {{#expr: 0 + 1}} | 1 = jedan | 2 = dva | drugo }} => jedan

Funkcija razlikuje velika i mala slova:

  • {{#switch: a | a = A | b = B | C }} => A
  • {{#switch: A | a = A | b = B | C }} => C

Funkcija staje čim se pronađe prva podudarnost. Sva ostala poklapanja (ako postoje) ignoriraju se:

  • {{#switch: b | f = abc | b = def | b = ghi | ništa }} => def

Grupiranje rezultata

[uredi | uredi kôd]

Funkcija podržava mogućnost da nekoliko slučajeva vraća isti rezultat:

{{#switch: vrijednost
 | 1 = prvi
 | 2 = drugi
 | 3|4|5 = treći do peti
 | 6|7 = šesti ili sedmi
 | 8 = osmi
 | #default: više od osam
}}

U tom slučaju vrijednosti 3, 4 ili 5 vraćaju rezultat "treći do peti", a vrijednosti 6 ili 7 vraćaju "šesti ili sedmi".

Upotreba uz parametre predložaka

[uredi | uredi kôd]

Funkcija kao vrijednost može provjeravati i vrijednost parametra predloška. Za razliku od funkcije #if uz navođenje parametra nije nužno pisati znak |. Primjerice:

  • {{#switch: {{{1}}} |abc = rezultat1 |def = rezultat2 |#default = ništa}}

Ako je u gornjem kodu prvi parametar jednak vrijednosti "abc", funkcija će vratiti "rezultat1", a ako je jednak "def", funkcija će vratiti "rezultat2". Ako prvi parametar nije naveden ili nema vrijednost, ili ako ima vrijednost koja nije navedena u funkciji switch, funkcija će vratiti "ništa".

Bilješke

[uredi | uredi kôd]
  1. Nedostaje znak |; ovo se shvaća kao doslovni unos "{{{prezime}}}"
  2. Ova poruka postoji na TranslateWikiju, i koristi se u sučelju, ali ne postoji lokalno premoštenje ovog prijevoda
  3. Na ovom je projektu aktivno proširenje mw:Extension:Checkuser