Also append page arguments to macro argument list.
authorBernie Innocenti <bernie@codewiz.org>
Sun, 16 May 2010 13:16:23 +0000 (09:16 -0400)
committerBernie Innocenti <bernie@codewiz.org>
Sun, 16 May 2010 13:16:23 +0000 (09:16 -0400)
Page arguments with same name will override macro arguments.
At this time it's not clear to me whether it would be better
the other way around.

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: