User:Klaas van Buiten/ParserFunctions

 
A proposal to move this page to MediaWiki.org was rejected.

Template: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

edit

De 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.

De 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

edit

ifeq 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

edit

ifexpr 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

edit

switch 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

edit

Download 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:

Externe koppelingen

edit