Корисник:Михајло Анђелковић/mtc
(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. Свако може користити софтвер и у било коју сврху.