Корисник:Михајло Анђелковић/mtc

Из Википедије, слободне енциклопедије
Иди на навигацију Иди на претрагу
Nuvola apps kmessedwords.png(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. Свако може користити софтвер и у било коју сврху.

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