# HG changeset patch
# User gerg.ward+moin@gmail.com
# Date 1225379794 14400
# Node ID 4eae0f3824d2084833ff9397ec48bc6b3a684d61
# Parent  abcab597f0bf4bf291c8df9903dc09d7e92d8349
Factor out several functions that setup the list of pages to include:
get_pagelist(), sort_pagelist(), limit_pagelist().

diff -r abcab597f0bf -r 4eae0f3824d2 MoinMoin/macro/Include.py
--- a/MoinMoin/macro/Include.py	Thu Oct 30 11:12:10 2008 -0400
+++ b/MoinMoin/macro/Include.py	Thu Oct 30 11:16:34 2008 -0400
@@ -52,6 +52,34 @@
         titles.append((title_text, level))
     return titles
 
+def get_pagelist(request, this_page, args):
+    inc_name = wikiutil.AbsPageName(this_page.page_name, args.group('name'))
+    pagelist = [inc_name]
+    if inc_name.startswith("^"):
+        try:
+            inc_match = re.compile(inc_name)
+        except re.error:
+            pass # treat as plain page name
+        else:
+            # Get user filtered readable page list
+            pagelist = request.rootpage.getPageList(filter=inc_match.match)
+    return pagelist
+
+def sort_pagelist(pagelist, args):
+    sort_dir = args.group('sort')
+    pagelist.sort()
+    if sort_dir == 'descending':
+        pagelist.reverse()
+
+def limit_pagelist(pagelist, args):
+    maxitems = args.group('items')
+    if maxitems:
+        del pagelist[int(maxitems):]
+
+    skipitems = args.group('skipitems')
+    if skipitems:
+        del pagelist[:int(skipitems)]
+
 def execute(macro, text, args_re=re.compile(_args_re_pattern), title_re=re.compile(_title_re, re.M)):
     request = macro.request
     _ = request.getText
@@ -73,29 +101,12 @@
         this_page._macroInclude_pagelist = {}
 
     # get list of pages to include
-    inc_name = wikiutil.AbsPageName(this_page.page_name, args.group('name'))
-    pagelist = [inc_name]
-    if inc_name.startswith("^"):
-        try:
-            inc_match = re.compile(inc_name)
-        except re.error:
-            pass # treat as plain page name
-        else:
-            # Get user filtered readable page list
-            pagelist = request.rootpage.getPageList(filter=inc_match.match)
+    pagelist = get_pagelist(request, this_page, args)
 
     # sort and limit page list
-    pagelist.sort()
-    sort_dir = args.group('sort')
-    if sort_dir == 'descending':
-        pagelist.reverse()
-    max_items = args.group('items')
-    if max_items:
-        pagelist = pagelist[:int(max_items)]
+    sort_pagelist(pagelist, args)
+    limit_pagelist(pagelist, args)
 
-    skipitems = 0
-    if args.group("skipitems"):
-        skipitems = int(args.group("skipitems"))
     titlesonly = args.group('titlesonly')
     editlink = args.group('editlink')
 
@@ -105,9 +116,6 @@
             continue
         if inc_name in this_page._macroInclude_pagelist:
             result.append(u'<p><strong class="error">Recursive include of "%s" forbidden</strong></p>' % (inc_name, ))
-            continue
-        if skipitems:
-            skipitems -= 1
             continue
         fmt = macro.formatter.__class__(request, is_included=True)
         fmt._base_depth = macro.formatter._base_depth
