#!/bin/awk -f
#!/opt/busybox/awk -f
+# Copyright 2022 Paul Hänsch
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+# IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
function sh_escape(arg){
return "'" gensub(/'/, "'\"'\"'", "g", arg) "'";
}
}
}
-function macro(call, LOCAL, line, files, n, args) {
- "cd " sh_escape(ENVIRON["MD_MACROS"]) "; printf '%s/' *" |getline line;
- split(line, files, "/");
- for (n in files) { files[files[n]] = ""; delete files[n]; }
- delete files[""];
-
+function macro(call, LOCAL, line, args) {
argsplit(call, args);
call="";
for (n = 1; n in args; n++) call = call sh_escape(args[n]) " ";
- if (args[1] in files) {
+ if (args[1] in MACROS) {
+ oldRS=RS; oldORS=ORS;
RS=""; ORS=""; line="";
"printf '%s' " sh_escape(file) " | " sh_escape(ENVIRON["MD_MACROS"]) "/" call | getline line;
+ RS=oldRS; ORS=oldORS;
return line;
} else {
return HTML("<<" call ">>");
}
BEGIN {
- if (ENVIRON["MD_MACROS"]) { AllowMacros = "true"; }
+ if (ENVIRON["MD_MACROS"]) {
+ AllowMacros = "true";
+ "cd " sh_escape(ENVIRON["MD_MACROS"]) "; printf '%s/' *" |getline macro_list;
+ split(macro_list, MACROS, "/");
+ for (n in MACROS) { MACROS[MACROS[n]] = ""; delete MACROS[n]; }
+ delete MACROS[""];
+ }
}