docs: def function(minargs, maxargs, implicit=False, first=False, convert=None):
          """Function decorator.
  
          minargs -- Minimum number of arguments taken by the function.
          maxargs -- Maximum number of arguments taken by the function.
          implicit -- True for functions which operate on a nodeset consisting
                      of the current context node when passed no argument.
                      (e.g., string() and number().)
          convert -- When non-None, a function used to filter function arguments.
          """
          def decorator(f):
              def new_f(self, node, pos, size, context):
                  if implicit and len(self.args) == 0:
                      args = [[node]]
                  else:
                      args = [x.evaluate(node, pos, size, context)
                              for x in self.args]
                  if first:
                      args[0] = nodeset(args[0])
                      if len(args[0]) > 0:
                          args[0] = args[0][0]
                      else:
                          args[0] = None
                  if convert is not None:
                      args = [convert(x) for x in args]
                  return f(self, node, pos, size, context, *args)
  
              new_f.minargs = minargs
              new_f.maxargs = maxargs
              new_f.__name__ = f.__name__
              new_f.__doc__ = f.__doc__
              return new_f
          return decorator