diff --git a/mercurial/templatefilters.py b/mercurial/templatefilters.py --- a/mercurial/templatefilters.py +++ b/mercurial/templatefilters.py @@ -99,8 +99,8 @@ def escape(text): para_re = None space_re = None -def fill(text, width): - '''fill many paragraphs.''' +def fill(text, width, initindent = '', hangindent = ''): + '''fill many paragraphs with optional indentation.''' global para_re, space_re if para_re is None: para_re = re.compile('(\n\n|\n\\s*[-*]\\s*)', re.M) @@ -121,7 +121,8 @@ def fill(text, width): yield text[start:m.start(0)], m.group(1) start = m.end(1) - return "".join([space_re.sub(' ', util.wrap(para, width=width)) + rest + return "".join([util.wrap(space_re.sub(' ', util.wrap(para, width)), + width, initindent, hangindent) + rest for para, rest in findparas()]) def fill68(text): diff --git a/mercurial/templater.py b/mercurial/templater.py --- a/mercurial/templater.py +++ b/mercurial/templater.py @@ -299,18 +299,29 @@ def rstdoc(context, mapping, args): return minirst.format(text, style=style, keep=['verbose']) def fill(context, mapping, args): - if not (1 <= len(args) <= 2): - raise error.ParseError(_("fill expects one or two arguments")) + if not (1 <= len(args) <= 4): + raise error.ParseError(_("fill expects one to four arguments")) text = stringify(args[0][0](context, mapping, args[0][1])) width = 76 - if len(args) == 2: + initindent = '' + hangindent = '' + if 2 <= len(args) <= 4: try: width = int(stringify(args[1][0](context, mapping, args[1][1]))) except ValueError: raise error.ParseError(_("fill expects an integer width")) + try: + initindent = stringify(args[2][0](context, mapping, args[2][1])) + initindent = stringify(runtemplate(context, mapping, + compiletemplate(initindent, context))) + hangindent = stringify(args[3][0](context, mapping, args[3][1])) + hangindent = stringify(runtemplate(context, mapping, + compiletemplate(hangindent, context))) + except IndexError: + pass - return templatefilters.fill(text, width) + return templatefilters.fill(text, width, initindent, hangindent) def date(context, mapping, args): if not (1 <= len(args) <= 2):