(en) (de) (sr)

MTC (енгл. MediaWiki Template Compiler) је мали компајлер за шаблоне викимедија софтвера. Сврха му је да олакша писање гломазних и непрегледних шаблона.

Синтакса уреди

Променљиве уреди

У шаблонима се променљиве пишу са три велике отворене и три велике затворене заграде док MTC омогућава да буду записане између два знака за долар. На пример:

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

ће бити компајлирано као

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

Константе уреди

Уколико се неки израз више пута понавља у шаблону, понављања његовог записа се могу поједноставити константом. Константа се дефинише на следећи начн:

 
$$ime садржај

  • Име константе:
    • може бити записано само алфабетним знацима
    • Треба увек бити спојено са два знака за долар
  • Садржај
    • Се одваја од имена најмање једним размаком
    • Може садржати све могуће уносе, али се завршава знаком за нову линију. Нити пре, нити после.

Да би се овако дефинисана константа употребила у коду, испред њеног имена треба ставити знак ет (@). На пример:

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

ће бити компајлирано као

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

Напомена: када позивате константу са @, можете то урадити више пута узастопце. На пример "@diff@diff@diff". Оно што не можете је да спојите овако позвану константу са неком другом речју. На пример:

@diffje rastojanje između...

је погрешно, док је

@diff je rastojanje između...

исправно.

Изрази уреди

Да би се израз дефинисао у шаблону, потребно је употребити {{ #expr: ... }} таг. У MTC, исто се остварује са *( ... ) тагом. На пример:

 
*($2$ + $3$)

се компајлира као

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

Шаблони уреди

Други шаблони се у сорсу позивају помоћу знака `, њихових имена, и малих заграда () у којима се могу навести аргументи шаблона. Без обзира да ли има аргумената или не, заграде се могу навести. Могуће синтаксе су следеће:

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

што ће бити компајлирано као:

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

Име шаблона може садржати празнине.

Услови уреди

MTC прави разлику између if и if-else услова. Тако ће исти и овде бити подељени.

if уреди

Обичан if услов се позива следећом синтаксом:

if(uslov)(kod)

што би на језику шаблона изгледало овако:

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

ifif уреди

Услови if-else се праве речју ifif. Синтакса је следећа:

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

што се компајлира као:

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

pif уреди

Услов за испитивање постојања променљиве, и извршавања дела кода уколико иста постоји. На пример:

pif(a variable)(code)

Ће бити компајлирано као:

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

pifif уреди

Услов за испитивање постојања променљиве, и извршавања дела кода уколико иста постоји, или неког другог дела кода у супротном случају. На пример:

pifif(a variable)(code1)(code2)

би се компајлирало као:

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

Угњеждавање уреди

Угњеждавање израза је омогућено и потпуно функционално. Обавестите ме ако приметите ишна необично.

Специјални знаци уреди

Пошто су неки знаци употребљени за маркирање делова програма, постало је немогуће написати их у њиховом природном контексту обичног знака. Због тога је додат још један специјални знак бекслеш (енгл. backslash) '\', који ће у комбинацији са било којим другим знаком иза себе дати управо тај знак. Ово не важи за размаке и слово n, које ће у комбинацији са бекслешом бити копмајирано као зна за нови ред. Пример:

\^\`\n\n\$abc

се компајлира као:

^`

$abc

Коментари уреди

Као и у програмским језицима Java или C++, у MTC можете додати коментаре у сваком делу кода. Постоје две врсте коментара: double-slash (// ...) и slash-star (/* ... */). Овде је један пример који демонстраира коришћење ових елемената:

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

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

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

Ово парче кода се компајлира као:

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

Пример програма уреди

Ево једног сложенијег примера:

Код:

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

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

Компајиран, изгледа овако (напомена: код шаблона је додатно преломљен, да би стао на страну):

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

Правни аспекти уреди

Виндоус верзија је компајлирана под борландовим бесплатинм компајлером (bcc32) 5.5, а линукс верзија под GNU g++ 3.4.6. Свако може користити софтвер и у било коју сврху.

Спољашње везе уреди