]> git.plutz.net Git - shellwiki/blobdiff - md_macros.awk
bugfix: link path in revision list
[shellwiki] / md_macros.awk
index 7e1548235479ad9a733591559775e2c8d990b03b..5ffc233b9eddc3f386727649db1a87b4b4912af3 100755 (executable)
@@ -1,6 +1,20 @@
 #!/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) "'";
 }
@@ -41,20 +55,17 @@ function argsplit(line, args, LOCAL, c, n, ctx) {
   }
 } 
 
-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 ">>");
@@ -62,5 +73,11 @@ function macro(call, LOCAL, line, files, n, args) {
 }
 
 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[""];
+  }
 }