Korisnik:Mihajlo Anđelković/mtc
![]() | (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.