User Tools

Site Tools



This shows you the differences between two versions of the page.

Link to this comparison view

harlowe:macro_markup [2017/10/09 20:39] (current)
Line 1: Line 1:
 +====Macro markup====
 +In Harlowe, macros are called by writing the name, a colon, and some data values to provide it, all in parentheses. For instance, you call the [[harlowe:​print|(print:​)]]
 +macro like so: ''​%%(print:​ 54)%%''​. In this example, ''​%%print%%''​ is the macro'​s name, and ''​%%54%%''​ is the value.
 +The name of the macro is case-insensitive,​ dash-insensitive and underscore-insensitive. This means that
 +any combination of case, dashes and underscores in the name will be ignored. You can, for instance, write
 +''​%%(go-to:​)%%''​ as ''​%%(goto:​)%%'',​ ''​%%(Goto:​)%%'',​ ''​%%(GOTO:​)%%'',​ ''​%%(GoTo:​)%%'',​ ''​%%(Go_To:​)%%'',​ ''​%%(Got--o:​)%%'',​ ''​%%(-_-_g-o-t-o:​)%%'',​ or
 +any other combination or variation.
 +You can provide any type of data values to a macro call - numbers, strings, booleans, and so forth. These
 +can be in any form, as well - ''​%%"​Red"​ + "​belly"​%%''​ is an expression that produces a single string, "​Redbelly",​
 +and can be used anywhere that the joined string can be used. Variables, too, can be used with macros, if
 +their contents matches what the macro expects. So, if ''​%%$var%%''​ contains the string "​Redbelly",​ then ''​%%(print:​ $var)%%'',​
 +''​%%(print:​ "​Redbelly"​)%%''​ and ''​%%(print:​ "​Red"​ + "​belly"​)%%''​ are exactly the same.
 +Furthermore,​ each macro call produces a value itself - [[harlowe:​num|(num:​)]],​ for instance, produces a number, [[harlowe:​a|(a:​)]] an array - so
 +they too can be nested inside other macro calls. ''​%%(if:​ (num:"​5"​) > 2)%%''​ nests the [[harlowe:​num|(num:​)]] macro inside the [[harlowe:​if|(if:​)]] macro.
 +If a macro can or should be given multiple values, separate them with commas. You can give the ''​%%(a:​)%%''​ macro
 +three numbers like so: ''​%%(a:​ 2, 3, 4)%%''​. The final value may have a comma after it, or it may not - ''​%%(a:​ 2, 3, 4,​)%%''​
 +is equally valid. Also, if you have a data value that's an array, string or dataset, you can "​spread out" all
 +of its values into the macro call by using the ''​%%...%%''​ operator: ''​%%(either:​ ...$array)%%''​ will act as if every value in
 +$array was placed in the [[harlowe:​either|(either:​)]] macro call separately.
harlowe/macro_markup.txt ยท Last modified: 2017/10/09 20:39 (external edit)