Help:ParserFunctions
From Homestar Runner Wiki
This wiki has an extension installed, called ParserFunctions. Here's how to use them:
Contents |
#expr:
expr solves mathematical expressions. It does not work with strings, if you want to use those, see ifeq. It also only works with numerical entries.
| Operator | Operation | Example |
|---|---|---|
| () | Grouping operators | {{#expr: (10+20) / 30 }} = 0 |
| + | Positive | {{#expr: +30 - +30 }} = 0 |
| - | Negative | {{#expr: -30 + 30 }} = 0 |
| not | Unary NOT, logical NOT | {{#expr: not 30 + 0}} = 0 |
| * | Multiplication | {{#expr: 30 * 0 }} = 0 |
| / OR div | Division | {{#expr: -30 / 30 }} = -1 {{#expr: -30 div 30 }} = -1 |
| + | Addition | {{#expr: -30 + 30 }} = 0 |
| - | Subtraction | {{#expr: 30 - 30 }} = 0 |
| round | Rounds off the number on the left to the power of 1/10 given on the right | {{#expr: 24 / 49 round 4}} = 0.4898 {{#expr: 24 / 49 round 2}} = 0.49 {{#expr: 24 / 49 round 0}} = 0 |
| = | Equality (will be 1 or 0) | {{#expr: 30 = 0 }} = 0 {{#expr: 30 = 30 }} = 1 |
| <> OR != | Inequality (will be 1 or 0) | {{#expr: 30 <> 0 }} = 1 {{#expr: 30 <> 30 }} = 0 {{#expr: 30 != 0 }} = 1 {{#expr: 30 != 30 }} = 0 |
| < | Less Than (will be 1 or 0) | {{#expr: 30 < 0 }} = 0 |
| > | Greater Than (will be 1 or 0) | {{#expr: 30 > 0 }} = 1 |
| >= | Greater Than or Equal To (will be 1 or 0) | {{#expr: 30 >= 0 }} = 1 |
| <= | Less Than or Equal To (will be 1 or 0) | {{#expr: 30 <= 0 }} = 0 |
#if:
The if function is an if-then-else system. It measures if the condition string is empty, it does the else text. If it is not empty, it does the than text. The syntax is:
{{#if: <condition string> | <then text> | <else text> }}
Its most common usage is in templates, where if the user defines a parameter, then it shows this text. If the user does not specify it, it shows a default. Example:
{{#if: {{{parameter|}}} | Parameter is defined | Parameter is not defined }}
If the user types {{templatename|parameter=true}} or something similar, the result is "Parameter is defined". However, if they type {{templatename}}, the result it "Parameter is not defined".
This does not solve expressions. For example, if you type {{#if: 30 - 30 = 50 | 1 | 0 }}, the result will be 1, since 30 - 30 = 50 is not empty. If you want to do if-then-else using expressions, see #ifexpr.
#ifeq:
ifeq compares two strings and then does an then-else process. To use:
{{#ifeq: <text 1> | <text 2> | <if equal> | <if not equal> }}
If text 1 and text 2 are equal, then it does the <ifequal> text. Otherwise, it does the <ifnotequal> text.
Some examples:
- {{#ifeq: {{NAMESPACE}} | Help | This page is in the Help Namespace | This page is not in the Help Namespace }} shows up as This page is in the Help Namespace.
- {{#ifeq: 7 | +000007 | Seven = Seven | Seven is not equal to Seven }} shows up as Seven = Seven
ifeq is case-sensitive.
{{#ifeq: capital | Capital | Equal | Not Equal }} shows up as Not Equal.
#ifexist:
ifexist does an if-then-else process depending on if a page exists. Syntax:
{{#ifexist: <page name> | <if exists> | <if does not exist> }}
ifexist does not work with interwiki links.
Example:
{{#ifexist: sbemail | [[Strong Bad Email]] | [[Main Page]] }} gives Strong Bad Email because "sbemail" exists.
#ifexpr:
ifexpr is a combination of if-then-else and expr. It can only be done with numbers, just like expr. Syntax:
{{#ifexpr: <expression> | <if true> | <if false> }}
Some examples:
- {{#ifexpr: 30 / 40 = 120 | yes | no }} shows up as no.
- {{#ifexpr: {{PAGENAME}} = ParserFunctions | This is a help page | No}} shows up as Expression error: Unrecognised word "parserfunctions" because PAGENAME is not a number.
#switch:
switch compares a string against many items, and shows a result if one is true. Syntax:
{{#switch: <value>
| <result 1> = <text if 1 is true>
| <result 2> = <text if 2 is true>
| <result 3> = <text if 3 is true>
| <result 4> = <text if 4 is true>
| #default = <default value if none are true>
}}
"| <result n> = <text if n is true>" can be repeated as many times as neccesary. However, "#default" can only be used once.
It is also possible to have "fall-through":
{{#switch: <value>
| <result 1>
| <result 2>
| <result 3> = <text if 1, 2, or 3 is true>
| <result 4> = <text if 4 is true>
| #default = <default value if none are true>
}}
<result 1> and <result 2> do not have equal signs, and instead will use <result 3>'s text.
#time:
time is used for time and date formatting. It can be used to show the current time or day, or a set time or day in a certain format. Either way, here are the codes (following UTC):
| Code | What it is | Possible results | Currently |
|---|---|---|---|
| Y | 4 digit year | 1970-2038 | 2026 |
| y | 2 digit year | 00-99 | 26 |
| n | Month number | 1-12 | 2 |
| m | Month number, with leading 0 | 01-12 | 02 |
| M | Month name, abbreviated | Jan-Dec | Feb |
| F | Full month name | January-December | February |
| W | Current week of the year | 1-52 or 53, depending on year | 06 |
| j | Day of the month | 1-31 | 4 |
| d | Day of the month, with leading 0 | 01-31 | 04 |
| z | Day of the year | 1-364, 365 on a leap year | 34 |
| D | Day of the week, abbreviated | Mon-Sun | Wed |
| l | Full day of the week | Monday-Sunday | Wednesday |
| N | ISO 8601 day of the week | 1 (Monday) - 7 (Sunday) | 3 |
| w | American day of the week | 0 (Monday - 6 (Sunday) | 3 |
| a | am-pm | am | |
| A | Capital | AM-PM | AM |
| g | 12 hour format of the hour | 1-12 | 10 |
| h | 12 hour format of the hour, with leading 0 | 01-12 | 10 |
| G | 24 hour format of the hour | 0-23 | 10 |
| H | 24 hour format of the hour, with leading 0 | 00-23 | 10 |
| i | The minute | 00-59 | 53 |
| s | The second | 00-59 | 36 |
| U | Seconds since Midnight on January 1, 1970 | 0-∞ | 1770202416 |
| L | Whether it's a leap year | 0 if not, 1 if yes | 0 |
| t | Days in the month | 28-31 | 28 |
Any text not shown above will come out unmodified, so links and punctuation are possible. Examples:
- {{#time: l j F Y }} generates Wednesday 4 February 2026.
- {{#time: m/Y }} generates 02/2026.
- {{#time: H:i | - 6 hours}} generates 04:53, 6 hours before the current time
- {{#time: l Y-m-d }} generates Wednesday 2026-02-04.
- {{#time: l }} generates Wednesday.
- {{#time: z | 20071031}} generates 303, Halloween day in "z" format
#rand:
rand generates a random number. It has been depreciated in current versions of ParserFunctions, but the HRWiki uses an older version that still has rand. Syntax:
{{#rand: <minimum> | <maximum> }}
The minimum is the smallest number it can generate, the maximum is the largest.
Examples:
- {{#rand: 1 | 50 }} generates 21.
- {{#rand: 1 | 500000 }} generates 43108.
- {{#rand: .1 | .9 }} generates 0, because it cannot do decimals.
