Scripting language

MSE uses a custom scripting language to add complicated behaviour to [[type:field]]s and [[type:style]]s.

--Topics--
* [[script:introduction|Introduction to scripting]]
* [[script:Operators]]
* [[script:variables|Variables and functions]]
* [[script:Control structures]]
* [[script:Predefined variables]]
* [[script:Best practices]]
See also:
* [[type:index|Data types used]]
* [[fun:index|Built in functions]]

--Syntax index--
| @123@			[[type:int|A literal number]]
| @"stuff"@		[[type:string|A literal string]]
| @[a,b,c]@		[[type:list|A literal list]]
| @[a:b, c:d]@		[[type:map|A literal map]]
| @{ expr }@		[[script:variables#Functions|Function definition]]
| @fun(a:b, c:d)@	[[script:variables#Functions|Function call]]
| @fun(value)@		[[script:variables#Functions|Function call with '@input@' argument]]
| @fun@@(a:b)@		[[script:variables#Default arguments|Default arguments]]
| @a.b@			[[script:operators|Property 'b' of 'a']]
| @a[b]@		[[script:operators|Property 'value of b' of 'a']]
| @-a@			[[script:operators|Negation]]
| @a + b@		[[script:operators|Addition / concatenation]]
| @a - b@		[[script:operators|Subtraction]]
| @a * b@		[[script:operators|Multiplication]]
| @a / b@		[[script:operators|Floating point division]]
| @a div b@		[[script:operators|Integer division]]
| @a mod b@		[[script:operators|Remainder]]
| @not a@		[[type:boolean|Boolean not]]
| @a and b@		[[type:boolean|Boolean conjunction]]
| @a or b@		[[type:boolean|Boolean disjunction]]
| @a xor b@		[[type:boolean|Boolean xor]]
| @a == b@		[[script:operators|Comparison for equality]]
| @a != b@		[[script:operators|Comparison for inequality]]
| @a < b@		[[script:operators|Comparison]]
| @a > b@		[[script:operators|Comparison]]
| @a <= b@		[[script:operators|Comparison]]
| @a >= b@		[[script:operators|Comparison]]
| @a or else b@		Use @a@ unless it is an error, then use @b@ instead.
| @min(a,b,c,...)@	[[script:operators|Smallest of the values]]
| @max(a,b,c,...)@	[[script:operators|Largest of the values]]
| @rgb(r,g,b)@		[[type:color|A color value]]
| @rgba(r,g,b)@		[[type:color|A color value with transparency]]
| @if x then y@		[[script:control structures|Conditional expresion]]
| @if x then y else z@	[[script:control structures|Conditional expresion]]
| @for x in list do y@	[[script:control structures|Loop over elements in a list]]
| @for x from a to b do y@	[[script:control structures|Loop over numbers from a to b]]
