Pređi na sadržaj

Korisnik:Mihajlo Anđelković/mtc

S Vikipedije, slobodne enciklopedije
(en) (de) (sr)

MTC (engl. MediaWiki Template Compiler) je mali kompajler za šablone vikimedija softvera. Svrha mu je da olakša pisanje glomaznih i nepreglednih šablona.

Sintaksa[uredi | uredi izvor]

Promenljive[uredi | uredi izvor]

U šablonima se promenljive pišu sa tri velike otvorene i tri velike zatvorene zagrade dok MTC omogućava da budu zapisane između dva znaka za dolar. Na primer:

 
$сунчани дан$

će biti kompajlirano kao

 
{{{сунчани дан}}}

Konstante[uredi | uredi izvor]

Ukoliko se neki izraz više puta ponavlja u šablonu, ponavljanja njegovog zapisa se mogu pojednostaviti konstantom. Konstanta se definiše na sledeći načn:

 
$$ime садржај

  • Ime konstante:
    • može biti zapisano samo alfabetnim znacima
    • Treba uvek biti spojeno sa dva znaka za dolar
  • Sadržaj
    • Se odvaja od imena najmanje jednim razmakom
    • Može sadržati sve moguće unose, ali se završava znakom za novu liniju. Niti pre, niti posle.

Da bi se ovako definisana konstanta upotrebila u kodu, ispred njenog imena treba staviti znak et (@). Na primer:

 
$$diff ($3$ - $2$ + $1$)
@diff

će biti kompajlirano kao

 
({{{3}}} - {{{2}}} + {{{1}}})

Napomena: kada pozivate konstantu sa @, možete to uraditi više puta uzastopce. Na primer "@diff@diff@diff". Ono što ne možete je da spojite ovako pozvanu konstantu sa nekom drugom rečju. Na primer:

@diffje rastojanje između...

je pogrešno, dok je

@diff je rastojanje između...

ispravno.

Izrazi[uredi | uredi izvor]

Da bi se izraz definisao u šablonu, potrebno je upotrebiti {{ #expr: ... }} tag. U MTC, isto se ostvaruje sa *( ... ) tagom. Na primer:

 
*($2$ + $3$)

se kompajlira kao

 
{{ #expr: ({{{2}}} + {{{3}}}) }}

Šabloni[uredi | uredi izvor]

Drugi šabloni se u sorsu pozivaju pomoću znaka `, njihovih imena, i malih zagrada () u kojima se mogu navesti argumenti šablona. Bez obzira da li ima argumenata ili ne, zagrade se mogu navesti. Moguće sintakse su sledeće:

 
`ime sablona(arg1,arg2,arg3)
`ime sablona()

što će biti kompajlirano kao:

 
{{ime sablona|arg1|arg2|arg3}}
{{ime sablona}}

Ime šablona može sadržati praznine.

Uslovi[uredi | uredi izvor]

MTC pravi razliku između if i if-else uslova. Tako će isti i ovde biti podeljeni.

if[uredi | uredi izvor]

Običan if uslov se poziva sledećom sintaksom:

if(uslov)(kod)

što bi na jeziku šablona izgledalo ovako:

{{ #ifexpr: ( uslov ) | kod }}

ifif[uredi | uredi izvor]

Uslovi if-else se prave rečju ifif. Sintaksa je sledeća:

ifif(uslov)(kod u slucaju da je uslov ispunjen)(kod u slucaju da uslov nije ispunjen)

što se kompajlira kao:

{{ #ifexpr: ( uslov ) | kod u slucaju da je uslov ispunjen | kod u slucaju da uslov nije ispunjen }}

pif[uredi | uredi izvor]

Uslov za ispitivanje postojanja promenljive, i izvršavanja dela koda ukoliko ista postoji. Na primer:

pif(a variable)(code)

Će biti kompajlirano kao:

{{ #if: {{{a variable|}}} | code }}

pifif[uredi | uredi izvor]

Uslov za ispitivanje postojanja promenljive, i izvršavanja dela koda ukoliko ista postoji, ili nekog drugog dela koda u suprotnom slučaju. Na primer:

pifif(a variable)(code1)(code2)

bi se kompajliralo kao:

{{ #if: {{{a variable|}}} | code1 | code2 }}

Ugnježdavanje[uredi | uredi izvor]

Ugnježdavanje izraza je omogućeno i potpuno funkcionalno. Obavestite me ako primetite išna neobično.

Specijalni znaci[uredi | uredi izvor]

Pošto su neki znaci upotrebljeni za markiranje delova programa, postalo je nemoguće napisati ih u njihovom prirodnom kontekstu običnog znaka. Zbog toga je dodat još jedan specijalni znak beksleš (engl. backslash) '\', koji će u kombinaciji sa bilo kojim drugim znakom iza sebe dati upravo taj znak. Ovo ne važi za razmake i slovo n, koje će u kombinaciji sa bekslešom biti kopmajirano kao zna za novi red. Primer:

\^\`\n\n\$abc

se kompajlira kao:

^`

$abc

Komentari[uredi | uredi izvor]

Kao i u programskim jezicima Java ili C++, u MTC možete dodati komentare u svakom delu koda. Postoje dve vrste komentara: double-slash (// ...) i slash-star (/* ... */). Ovde je jedan primer koji demonstraira korišćenje ovih elemenata:

$$switch1arg = <some robust expression> /* ако је неки израз предугачак
                                           можете се дефинисати у 
                                           деловима */

// сада можете дефинисати switch на већ познати начин
$$sw/* немогуће? */itch1 = {{ \#switch: %switch1arg | val1=res1 | val2=res2 | ... | defaultres }}

// и након тога га користити било где
%switch1

Ovo parče koda se kompajlira kao:

{{ #switch: <some robust expression> | val1=res1 | val2=res2 | ... | defaultres }}

Primer programa[uredi | uredi izvor]

Evo jednog složenijeg primera:

Kod:

$$diff ($3$ - $2$ + 1)

*(
  $1$
  + `intcast(
         ifif($1$ > $3$)
           (*($2$ - $1$))
	   (
	    ifif($1$ < $2$)
	      (*($3$ - $1$))
	      (0)
	   )
	   / @diff
     )
     * @diff
)

Kompajiran, izgleda ovako (napomena: kod šablona je dodatno prelomljen, da bi stao na stranu):

{{ #expr: ( {{{1}}} + {{intcast|{{ #ifexpr: ({{{1}}} > {{{3}}}
) |{{ #expr: ({{{2}}} - {{{1}}}) }} |  {{ #ifexpr: ({{{1}}} <
{{{2}}})| {{ #expr: ({{{3}}} - {{{1}}}) }} | 0}} }} / ({{{3}}}
- {{{2}}} + 1)}} * ({{{3}}} - {{{2}}} + 1)) }}

Pravni aspekti[uredi | uredi izvor]

Vindous verzija je kompajlirana pod borlandovim besplatinm kompajlerom (bcc32) 5.5, a linuks verzija pod GNU g++ 3.4.6. Svako može koristiti softver i u bilo koju svrhu.

Spoljašnje veze[uredi | uredi izvor]