aboutsummaryrefslogtreecommitdiff
path: root/smp.1
diff options
context:
space:
mode:
Diffstat (limited to 'smp.1')
-rw-r--r--smp.1108
1 files changed, 83 insertions, 25 deletions
diff --git a/smp.1 b/smp.1
index 1b616e4..33a96dc 100644
--- a/smp.1
+++ b/smp.1
@@ -2,7 +2,7 @@
.SH name
Skaldpress Macro Processor \- Macro processor
.SH SYNOPSIS
-.B smp [\fIinput_file\fB]
+.B smp [OPTION]... [\fIinput_file\fB]
.SH DESCRIPTION
.B smp
@@ -22,6 +22,9 @@ 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 "\fBundefine(<macro_name>)\fR"
+Delete the macro.
+
.IP "\fBifdef(<macro_name>, <output if defined> [, <output if not defined>])\fR"
.IP "\fBifndef(<macro_name>, <output if not defined> [, <output if defined>])\fR"
@@ -33,6 +36,9 @@ and later the already processed content will be included in the output.
.IP "\fBshell(<command>)\fR"
Runs command on shell, and includes the command output in the output
+.IP "\fBeval(<python>)\fR"
+Run a python command, write return value to output.
+
.IP "\fBexpr(<arg1>, <arg2>, ..., <argN>)\fR"
Shorthand for running the expr command, expands all arguments, and executes it on the shell.
@@ -63,43 +69,95 @@ It will process it's input twice before actually doing the conversion. This is t
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.
+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 "\fBtemplate(<filename>, <content>)\fR"
+Will read the file in \fIfilename\fR, and process it replacing \fBCONTENT\fR with the \fIcontent\fR.
+
+.IP "\fBiftruthy(<content>)\fR"
+Returns python True if content is evaluated to \fItruthy\fR.
+
+.IP "\fBindent(<spaces>, <content>)\fR"
+Indents each line of the \fIcontent\fR with \fIspaces\R spaces.
+
+.IP "\fBdumpenv\fR"
+Debugging macro for printing smp internals.
+
+.SS "\fBSpecial macros\fR"
+There is a syntax for special macros, which takes more data in once.
+
+.IP "\fB@template \fI<template>\fR"
+Passes the rest of the file as content to the \fBtemplate\fR-macro.
+
+.IP "\fB@html_from_markdown\fR"
+Passes the rest of the file as content to the \fBhtml_from_markdown\fR-macro.
-.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.
-Requires readline to be installed on the system.
+.SS "\fBBuiltin macro options\fR"
+There are some macros flags that can enable/disable features,
+They will be prefixed by `smp_` if \fB-P\fR is set.
-.IP "\fBtime\fR" 2
-\fBEnabled by default\fR.
-Enables the \fIformat_time\fR-macro, this will compile the chrono dependency to format time.
+.IP "\fBparse_file_yaml\fR" 2
+\fB\fItruthy\fR\fB by default\fR.
+If set to a truthy value, metadata blocks in the start of files will be parsed, otherwise it will be treated as normal input.
-.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 "\fBdraft\fR" 2
+\fB\fIfalsy\fR\fB by default\fR.
+If set to a truthy value, some macros may skip expensive steps to save compilation time (e.g. network calls).
-.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 "\fBtemplate_prefix\fR" 2
+\fB\fItemplates/\fR\fB by default\fR.
+The path to search for templates in, this affects metadata wrapping, as well as macros using the template macro.
-.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.
+.IP "\fBmetadata_prefix\fR" 2
+\fB\fIMETADATA_\fR\fB by default\fR.
+The prefix used for defining metadata for macros defined in blocks.
-Requires libguile-3.0 to be installed on the system.
+.IP "\fBsmp_debug\fR" 2
+\fB\fI4\fR\fB by default\fR.
+Sets the debug level for the parser, higher number means more verbosity.
+Level 1 and 2 is the most basic error messaging, 5 and up will print parser internals.
+
+.IP "\fBsynclines\fR" 2
+\fB\fIfalsy\fR\fB by default\fR.
+If truthy, synclines will be included in output, along with filename.
+
+.SS Metadata block
+All input files can have a metadata-block at the beginning.
+Any keys will be defined as macros as \fBMETADATA_<key>\fR.
+There are a few special keys which has a specific effect:
+
+.IP "\fBtarget_filename\fR"
+By default, a file will have the same name in the \fIoutput\fR-directory (unless a template has a different extension).
+This overrides the output-filename, but it keeps the file in the same directory, and it will not affect the extension.
+
+.IP "\fBtemplate\fR"
+If specified, the file will be compiled using a template.
+In the template, all \fBMETADATA_<key>\fR macros will be available,
+additionally templates can use the \fBCONTENT\fR-macro to get the expanded content of the file.
+This is recursive, meaning that templates can use other templates, with their own metadata-block,
+since it is recursive, any metadata in templates will overwrite any metadata from their children,
+but will keep metadata that is not overwritten.
+This means templates can add additional context.
+
+.IP "\fBkeep_states\fR"
+List or string where every listed state/variable will be kept for subsequenct compilations.
+Meaning that you can e.g. construct a array in the first compilation, which is then used the second time around.
+Setting this, means that the file will always be recompiled, regardeless of other instances (unless a \fB--filter\fR is set).
-\fBExperimental feature!\fR
.SH OPTIONS
+
+.IP "\fBinput_file\fR
If a input file is provided, that will be processed.
-If not, a sort of interactive REPL will be started instead.
+If it is `-`, or not specified and something is piped, it will process stdin.
+
+.IP "\fB-D, --define\fR \fIkey\fR=\fIvalue\fR
+Define macros, these will be interpreted as strings.
+
+.IP "\fB-P, --prefix-builtins\fR
+Prefix all builtin macros with `smp_`
.SH SEE ALSO
skaldpress(1)