.TH SMP 1 2024-06-08
.SH name
Skaldpress Macro Processor \- Macro processor
.SH SYNOPSIS
.B smp [\fIinput_file\fB]
.SH DESCRIPTION
.B smp
smp is a macro processor, made specifically for a usecase when doing templating of websites.
.SS Macros
.IP "\fBinclude(<file>)\fR"
Includes a file in-place, performing macro-expansion on it.
NOTE, THERE IS NO LOOP PROTECTION HERE!
.IP "\fBinclude_varbatim(<file>)\fR"
Same as \fBinclude\fR, but does not expand macros.
.IP "\fBdefine(<macro_name> [, <macro content>])\fR"
This defines a macro, optionally with some content.
The optional content will be expanded immediately,
and later the already processed content will be included in the output.
.IP "\fBifdef(<macro_name>, <output if defined> [, <output if not defined>])\fR"
.IP "\fBifndef(<macro_name>, <output if not defined> [, <output if defined>])\fR"
.IP "\fBifeq(<arg1>, <arg2>, <output if equal> [, <output if not equal>])\fR"
.IP "\fBifneq(<arg1>, <arg2>, <output if not equal> [, <output if equal>])\fR"
.IP "\fBshell(<command>)\fR"
Runs command on shell, and includes the command output in the output
.IP "\fBexpr(<arg1>, <arg2>, ..., <argN>)\fR"
Shorthand for running the expr command, expands all arguments, and executes it on the shell.
.IP "\fBdefine_array(<macro_name>)\fR"
Defines a macro as a array, this can later be used with macros like \fBarray_push\fR and \fBarray_each\fR.
.IP "\fBarray_push(<macro_name>, <value>[, <additional value(s)>])\fR"
On a macro that is defined as a array, this will add one or more elements.
.IP "\fBarray_each(<macro_name>, <template macro>])\fR"
Push any arguments to array macro
Process each element in a array as a macro-invokation on the second argument
Not the best way to do this, it is not sensibly recursive.
.IP "\fBarray_size(<macro_name>)\fR"
Will return number of elements in a macro array.
.IP "\fBexplode(<array_name>, <delimiter>, <input>)\fR"
Explode a input into individual array elements.
.IP "\fBformat_time(<format>, <time>)\fR"
Format a RFC3339-timestamp to the specified format. Format is similar to strftime.
Only available if the \fBtime\fR-feature was enabled during compilation.
.IP "\fBhtml_from_markdown(<markdown>)\fR"
If compiled with \fBmarkdown\fR, this macro will convert it's argument from markdown to html.
It will process it's input twice before actually doing the conversion. This is to remove the outer quotes of a argument.
So you should probably always quote arguments to this.
.IP "\fBwodl(<url>)\fR"
If compiled with \fBdeadlinks\fR, this macro will always return it's argument.
But it will also perform a request to the link, and emit a warning if it it doesn't return HTTP 200 OK.
This will significantly slow down compile times!
.SS "\fBCompile-Time Feature Flags\fR"
There are some compile-time flags that can enable/disable features, most are enabled by default,
and exist either because they trigger a external dependency, or because they are unlikely to work without glibc.
.IP "\fBreadline\fR" 2
\fBEnabled by default\fR.
Enables the use of libc readline in REPL mode. If not enabled, normal stdio will be used for input.
.IP "\fBtime\fR" 2
\fBEnabled by default\fR.
Enables the \fIformat_time\fR-macro, this will compile the chrono dependency to format time.
.IP "\fBmarkdown\fR" 2
\fBEnabled by default\fR.
Enabled the \fIhtml_from_markdown\fR-macro, this will compile the markdown dependency. And can convert markdown into html.
.IP "\fBdeadlinks\fR" 2
\fBEnabled by default\fR.
Enabled the \fIwodl\fR-macro, this will compile the minreq dependency.
Allows testing the return code of links, and warns when the request is unsuccessful.
.IP "\fBguile\fR" 2
If compiled with guile, the macro processor supports running guile-code inline.
This is enabled with \fI%()%\fR in the input, and anything inside the parantheses will be evaluated as guile.
\fBExperimental feature!\fR
.SH OPTIONS
If a input file is provided, that will be processed.
If not, a sort of interactive REPL will be started instead.
.SH SEE ALSO
skaldpress(1)