+ /**
+ * Compiles a macro string into a function which generates a string
+ * result based on the input *macro* and its parameters. The
+ * definitive documentation for macro strings resides in :help
+ * macro-string.
+ *
+ * Macro parameters may have any of the following flags:
+ * e: The parameter is only tested for existence. Its
+ * interpolation is always empty.
+ * q: The result is quoted such that it is parsed as a single
+ * argument by the Ex argument parser.
+ *
+ * The returned function has the following additional properties:
+ *
+ * seen {set}: The set of parameters used in this macro.
+ *
+ * valid {function(object)}: Returns true if every parameter of
+ * this macro is provided by the passed object.
+ *
+ * @param {string} macro The macro string to compile.
+ * @param {boolean} keepUnknown If true, unknown macro parameters
+ * are left untouched. Otherwise, they are replaced with the null
+ * string.
+ * @returns {function}
+ */