{macro 'entry', label, type='text'} ... {/macro} declares a
tag {entry} with two parameters. Defining prints nothing; each use
renders the body once, with the values of that use as the fields of the macro's one row:
{$label}, {$type}.
A use gives values in their declared order ({entry 'E-mail', 'email'}),
by name ({entry label='Name'}), or both. A parameter written alone in
the declaration is required; one with =default fills in when the use leaves it
out, its default evaluated at the use. Inside the body the fields round the use stay visible
behind the parameters, so a macro used inside a loop can read the row as well.
A pair use hands its content to @content@, and
{slot}s work as in a
{define}. The content renders in the body, on
the macro's one row, so there too a parameter stands in front of a field of the same name round
the use: in {rows}{entry 'x'}{$label}{/entry}{/rows}
the {$label} is the parameter, {$label@rows} the
row's own. A macro can call itself. A value given
to a macro is text, never template, as every value is. {macro:entry}
asserts that the name is a macro.
Under the strict check a required parameter left out, more values than parameters, a named
parameter the macro does not declare, and a parameter named like an option every tag takes are
errors. The difference with {define}: a define reads its parameters as
{#name} like a custom tag file, a macro declares them and reads them as
fields.