def indent(s, width=4, first=False, blank=False, indentfirst=None): """ A ported version of the "indent" filter containing a fix for indenting Markup objects. If the minion has Jinja version 2.11 or newer, the "indent" filter from upstream will be used, and this one will be ignored. """ if indentfirst is not None: warnings.warn( "The 'indentfirst' argument is renamed to 'first' and will" " be removed in Jinja 3.0.", DeprecationWarning, stacklevel=2, ) first = indentfirst indention = " " * width newline = "\n" if isinstance(s, Markup): indention = Markup(indention) newline = Markup(newline) s += newline # this quirk is necessary for splitlines method if blank: rv = (newline + indention).join(s.splitlines()) else: lines = s.splitlines() rv = lines.pop(0) if lines: rv += newline + newline.join(indention + line if line else line for line in lines) if first: rv = indention + rv return rv