User:Klaas van Buiten/ParserFunctions
Deze MediaWiki extensie is een verzameling parser functies. Parser functies hebben in het algemeen de volgende opbouw:
- {{#functienaam: argument 1 | argument 2 | argument 3...}}
Deze module definieert momenteel vijf functies at: expr, if, ifeq, ifexpr en switch.
expr
editDe expr functie berekent rekenkundige uitdrukkingen. De ondersteunde bewerkingen (ongeveer in volgorde van voorrang) zijn:
Teken Bewerking Voorbeeld * Vermenigvuldiging {{#expr: 30 * 7}} = 210 / or div Deling {{#expr: 30 / 7}} = 4.2857142857143 + Optelling {{#expr: 30 + 7}} = 37 - Aftrekking (or negatie) {{#expr: 30 - 7}} = 23 mod Modulo, levert de rest na deling {{#expr: 30 mod 7}} = 2 round Rondt een getal af op het aangegeven aantal
cijfers na het decimaalteken, rechts ingegeven{{#expr: 30 / 7 round 7}} = 4.2857143 = Gelijkheid {{#expr: 30 = 7}} = 0 <> or != Ongelijkheid {{#expr: 30 <> 7}} = 1 < Kleiner dan {{#expr: 30 < 7}} = 0 > Groter dan {{#expr: 30 > 7}} = 1 <= Kleiner of gelijk {{#expr: 30 <= 7}} = 0 >= Groter of gelijk {{#expr: 30 >= 7}} = 1 and Logische EN {{#expr: 30 and 7}} = 1 or Logische OF {{#expr: 30 or 7}} = 1 not Logische NIET {{#expr: not 7}} = 0 ( ) Grouperingstekens {{#expr: (30 + 7) * 7 }} = 259
De booleaanse bewerkingen beschouwen 0 als vals en 1 als waar. Getallen hebben "." als decimaalteken. Geen ondersteuning van FORTRAN-achtige wetenschappelijke notering.
Voorbeeld:
{{ #expr: (100 - 32) / 9 * 5 round 0 }}
geeft:
38
wat neerkomt op 100°F in °C, afgerond op het dichtstbijzijnde gehele getal.
if
editDe if functie is een als-dan-anders constructie. De opbouw is:
{{ #if: <condition> | <then text> | <else text> }}
Als de conditie een lege tekenreeks of slechts witruimte oplevert dan merken we deze aan als vals, en geeft de else text terug. Anders is de uitkomst de then text. De else text hoeft er niet te zijn. In dat geval is de uitvraging blanco wanneer de conditie vals is.
Een illustratie:
{{Template|parameter=something}} {{Template}} {{Template|parameter=}} | | | | | | | | | {{ #if: {{{parameter|}}} | Parameter is defined. | Parameter is undefined, or empty }}
Merk op dat de if functie de not noch de "=" tekens en evenmin rekenkundige uitdrukkingen ondersteunt. {{#if: 1 = 2|ja|nee}} levert als resultaat "ja" want de tekenreeks "1 = 2" is niet blanco. De bedoeling is een "als gedefinieerd" constructie. Voor het vergelijken van tekenreeksen dient de ifeq. Voor het vergelijken van getallen de ifexpr.
ifeq
editifeq vergelijkt twee tekenreeksen en retourneert een andere tekenreeks afhankelijk van het resultaat van de vergelijking. Deze is als volgt opgebouwd:
{{ #ifeq: <comparison text 1> | <comparison text 2> | <equal text> | <not equal text> }}
ifexpr
editifexpr evalueert een rekenkundige bewerking en geeft een van twee tekenreeksen als uitkomst.
{{ #ifexpr: <expression> | <then text> | <else text> }}
In het geval van nul als uitkomst dan resulteert de else text zo niet de then text. Uitdrukkingsopbouw is analoog aan expr.
switch
editswitch
vergelijkt een enkele waarde met meerdere andere en geeft een tekenreeks terug als gelijkheid optreedt. In beginsel is de opbouw:
{{ #switch: <vergelijkingswaarde> | <waarde1>=<uitkomst1> | <waarde2>=<uitkomst2> | ... | <waarden>=<uitkomstn> | <verstekuitkomst> }}
switch
loopt elke waarde af totdat deze gelijkheid vindt met the vergelijkingswaarde. Zo ja, de bij die waarde horende uitkomst is het resultaat (the tekenreeks na het is-teken). Zo nee en de laatste optie bevat geen is-teken, dan resulteert de verstekuitkomst.
Merk op dat het mogelijk is een "doorloop" van waarden (terugbrengen van de noodzaak voor dubbele uitkomsten). Bij voorbeeld:
{{ #switch: <vergelijkingswaarde> | <waarde1> | <waarde2> | <waarde3>=<uitkomst3> | ... | <waarden>=<uitkomstn> | <verstekuitkomst> }}
De bijzonderheid is dat waarde1 aen waarde2 geen is-teken bevatten. Wanneer gelijkheid hier optreedt krijgen ze de bij value3 genoemde uitkomst.
TODO: Witruimte goed afgekapt/behandeld?
Installeren
editDownload beide bestanden en zet ze in een nieuwe map met de naam ParserFunctions in je extensions directory.
Plaats dan de nuvolgende regel aan het eind van je LocalSettings.php:
require_once( "$IP/extensions/ParserFunctions/ParserFunctions.php" );
Je can ook de codeboom hier afstruinen: