Корисник:Михајло Анђелковић/mtc (de)
(en) (de) (sr) |
MTC (Abk. von engl. MediaWiki Template Compiler) ist ein kleiner Compiler für die Vorlagen. Sein Zweck ist, Schreiben von robusten und komplizierten Vorlagen zu verienfachen.
Die Syntax
уредиVariablen
уредиWenn man Variablen in Vorlagen benutzt, muss man normalerweise drei Klammern vor und nach den Namen der Variable schreiben. In MTC kann man das mit einem Dollarsymbol vor und nach dem Namen tun:
$ein sonniger Tag$
welches wird als
{{{ein sonniger Tag}}}
kompilieren.
Konstanten
уредиWenn es benötigt wird, ein Teil des Codes mehrmal in der Vorlage zu wiederholen, kann man diesen Teil als eine Konstante definieren. Danach kann dieser Teil immer durch eine Konstante gedruckt werden. In MTC definiert man eine Konstante folgenderweise:
$$name inhalt
- Vor dem namen Name müssen zwei Dollarsymbolen stehen und zwar mit ihm verbunden.
- Der Name darf nur aus 26 Symbolen englisches Alphabets bestehen.
- Der Name muss von dem Inhalt mit mindestens einem Leerzeichnen getrennt werden.
- Der Inhalt darf alles enthalten, was man braucht. Er beenet aber immer mit der neuen Zeile. Nicht früher, nicht nachher.
Um eine Konstante zu benutzen, soll man zuerst ein „at“-Zeichen als Präfix des Namens schreiben, und danach den Namen, mit diesem Zeichen verbunden. Es folgt ein Beispiel:
$$diff *($3$ - $2$ + $1$)
@diff@diff
Dieser Code wird folgenderweise Kompiliert:
{{ #expr: ({{{3}}} - {{{2}}} + {{{1}}}) }}{{ #expr: ({{{3}}} - {{{2}}} + {{{1}}}) }}
Bemerkung: Man kann mehrere Konstanten nacheinander rufen, und dann wird es zum Beispiel als "@diff@diff@diff" geschrieben. Sonst soll man der Name der Konstante nie mit einem Wort verbinden. Zum Beispiel:
- @diffist Abstand zwischen...
ist falsch, während
- @diff ist Abstand zwischen...
ist richtig.
Ausdrücke
уредиNormalerweise, soll man beim Schreiben eines Ausdrucks in einer Vorlage die Form {{ #expr: ... }} benutzen. MTC bietet dasselbe über der Form *( ... ) an. Zum Beispiel:
*($2$ + $3$)
wird als
{{ #expr: ({{{2}}} + {{{3}}}) }}
kompiliert.
Vorlagen
уредиIn MTC-Code kann man auch anere Vorlagen rufen. Das wird mit Zeichen „`“, den namen der Vorlage und mit kleinen Klammern „()“ nach dem Namen der Vorlage getan. Zusätzlich können diese Klammern Argumenten der Vorlage enthalten. Alle Argumenten sollen mit Kommas voneinander getrennt werden.
`name der Vorlage(arg1,arg2,arg3)
`name der Vorlage()
wird als
{{name der Vorlage|arg1|arg2|arg3}}
{{name der Vorlage}}
kompiliert.
Bedingungen
уредиMTC macht den Unterschied zwischen if und if-else Bedingungen. Somit werden diese zwei Gruppen auch getrennt betrachtet werden.
if
уредиEinfache if-Bedingung. Zum Beispiel:
if(Bedingung)(Code)
wird als
{{ #ifexpr: (Bedingung) | Code}}
kompiliert.
ifif
уредиDie if-else Bedingung. Zum Beispiel:
ifif(Bedingung)(Code beim true)(Code beim false)
wird als:
{{ #ifexpr: (Bedingung) | Code beim true | Code beim false}}
kompiliert.
pif
уредиPif-Bedingung stellt den Äquivalent der {{#if: {{{var|}}}| code }} Form dar. Zum Beispiel:
pif(Eine Variable)(Code)
wird als
{{ #if: {{{Eine Variable|}}} | Code }}
kompiliert.
pifif
уредиPif-Bedingung stellt den Äquivalent der {{#if: {{{var|}}}| code1 | code2 }} Form dar. Zum Beispiel:
pifif(Eine Variable)(Code beim Existieren)(Code beim Fehlen)
wird als
{{ #if: {{{Eine Variable|}}} | Code beim Existieren | Code beim Fehlen }}
kompiliert.
Einschachtelung
уредиEinschachtelung soll vollkommen möglich sein. Bitte informieren Sie mich, wenn sie irgendetwas ungewöhnliches bemerken.
Speziale Zeichen
уредиEinige Zeichnen sind aufgrund der Funktionalität der MTC-Sprache im Text der komilierten Vorlage untereichbar geworden. Um das zu umgehen, kann man den Backslash '\' als Präfix für diese Zeichnen benutzen. Normal verhaltet sich der Backslash für alle Zeichen, ausser Leerzeichen und 'n' gleich. Wenn man '\n' eingibt, kriegt man kein 'n' sondern eine neue Zeile in kompilierter Vorlage. Es folgt ein Beispiel:
\^\`\n\n\$abc
wird als
^`
$abc
kompiliert.
Kommentare
уредиGenauso wie in anderen Programmiersprachen wie Java oder C++, in MTC kann man auch Kommentare schreiben, um manche Teile besser zu erklären oder einfach von anderen zu trennen. MTC bietet zwei Arten der Kommentaren: Dopperslash beginnende (// ...) und Slash-Stern beginnende (/* ... */). Unten steht ein Beispiel von möglichen Anwendungen:
$$switch1arg <ein robuster Ausdruck> /* Wenn ein Ausdruck groß ist,
kann man ihn gesondert
definieren */
// nun kann man eine Switch-Anweisung vereinfacht schreiben
$$sw/* unmöglich? */itch1 {{ #switch: @switch1arg | val1=res1 | val2=res2 | ... | defaultres }}
// und am Ende ruft man das alles als eine Konstante
@switch1
wird als
{{ #switch: <ein robuster Ausdruck> | val1=res1 | val2=res2 | ... | defaultres }}
kompilieren.
Ein Beispiel
уредиEs folgt ein komplizierteres Beispiel:
$$diff ($3$ - $2$ + 1)
*(
$1$
+ `intcast(
ifif($1$ > $3$)
(*($2$ - $1$))
(
ifif($1$ < $2$)
(*($3$ - $1$))
(0)
)
/ @diff
)
* @diff
)
Wenn man das kompiliert, wird es so aussehen (Bemerkung: der Ausgangscode wurde umgebrochen, sodass er die Seite nicht deformiert):
{{ #expr: ( {{{1}}} + {{intcast|{{ #ifexpr: ({{{1}}} > {{{3}}}
) | {{ #expr: ({{{2}}} - {{{1}}}) }} | {{ #ifexpr: ({{{1}}} <
{{{2}}}) | {{ #expr: ({{{3}}} - {{{1}}}) }} | 0}} }} / ({{{3}}}
- {{{2}}} + 1)}} * ({{{3}}} - {{{2}}} + 1)) }}
Lizenzen
уредиUm dieses Program zu kompilieren, habe ich Borland C++ Compiler 5.5 (freeware tool) für Windows, und GNU g++ 3.4.6 für Linux benutzt. Es kann von irgendjemanden und mit irgendwelchem Zweck benutzt werden.