Also append page arguments to macro argument list.
[geekigeeki.git] / geekigeeki.py
index d63850fb57b8e55494930871cc8f4f23271b3b5c..044c7bfa55600abaebbee95d59a2b307fb1e0bd4 100755 (executable)
@@ -320,14 +320,19 @@ class WikiFormatter:
 
     def _macro_repl(self, word):
         try:
-            args, kvargs = parse_args(word)
+            args, macro_kvargs = parse_args(word)
+            # Is this a parameter given to the current page?
             if args[0] in self.kvargs:
                 return self.kvargs[args[0]]
+            # Is this an internal macro?
             macro = globals().get('_macro_' + args[0])
             if not macro:
+                # Can we load (and cache) an external macro?
                 exec(open("sys/macros/" + args[0] + ".py").read(), globals())
                 macro = globals().get('_macro_' + args[0])
-            return macro(*args, **kvargs)
+            # Invoke macro passing both macro args augmented by page args
+            macro_kvargs.update(self.kvargs)
+            return macro(*args, **macro_kvargs)
         except Exception, e:
             msg = cgi.escape(word) + ": " + cgi.escape(str(e))
             if not self.in_html: