This is a small patch against Include.py that allows the 'level' argument to be negative. When a negative level argument is supplied, the level of titles in the included document is reduced by the specified amount.
For example, given [[Include(MyPage, ,-1)]] a title like = Title = will be changed to == Title ==, == Sub Title == will become === Sub Title === and so on.
--- Include.py.orig 2007-09-25 08:12:43.000000000 +1000
+++ /usr/local/moin/lib/python2.4/site-packages/MoinMoin/macro/Include.py 2007-09-25 08:46:29.000000000 +1000
@@ -25,7 +25,7 @@
## keep in sync with TableOfContents macro!
_arg_heading = r'(?P<heading>,)\s*(|(?P<hquote>[\'"])(?P<htext>.+?)(?P=hquote))'
-_arg_level = r',\s*(?P<level>\d*)'
+_arg_level = r',\s*(?P<level>-?\d*)'
_arg_from = r'(,\s*from=(?P<fquote>[\'"])(?P<from>.+?)(?P=fquote))?'
_arg_to = r'(,\s*to=(?P<tquote>[\'"])(?P<to>.+?)(?P=tquote))?'
_arg_sort = r'(,\s*sort=(?P<sort>(ascending|descending)))?'
@@ -50,6 +50,25 @@
titles.append((title_text, level))
return titles
+def shrink_titles(body, amount, title_re):
+ position = 0
+ for title, _ in title_re.findall(body):
+ h = title.strip()
+ level = 1
+ while h[level:level+1] == '=': level = level+1
+ depth = min(5,level+amount)
+
+ position = body.find(h, position)
+ newh = h
+ while level < depth:
+ newh = '=' + newh + '='
+ level += 1
+
+ body = body[0:position] + newh + body[position+len(h):]
+ position += len(newh)
+
+ return body
+
def execute(macro, text, args_re=re.compile(_args_re_pattern), title_re=re.compile(_title_re, re.M), called_by_toc=0):
request = macro.request
_ = request.getText
@@ -112,6 +131,12 @@
inc_page = Page(request, inc_name, formatter=fmt)
inc_page._macroInclude_pagelist = this_page._macroInclude_pagelist
+ # If level is negative, reduce the size of included titles by that amount
+ if args.group('level') and int(args.group('level')) < 0:
+ body = shrink_titles(inc_page.get_raw_body(), abs(int(args.group('level'))), title_re)
+ inc_page.set_raw_body(body, modified=True)
+
+
# check for "from" and "to" arguments (allowing partial includes)
body = inc_page.get_raw_body() + '\n'
from_pos = 0- Great patch, thanks! Please include in the default Include.py!
