Attachment 'TableOfAppendices-1.3.py'
Download 1 # -*- coding: iso-8859-1 -*-
2 """
3 MoinMoin - TableOfAppendices Macro Version 1.3, 05.03.2015
4
5 Inserts a table of appendicies (subpages) in the same format as a talbe of contents. If the subpage has a processing instruction #pragma alt-name, the value provided will be used as the link text in the appendices table.
6
7 Usage: <<TableOfAppendices>>
8
9 History:
10
11 Version 1.3 - 05.03.2015: keep pragma for calling page and reset for subpages.
12
13 Version 1.2 - 28.11.2012: added natual sorting and exclusion option for subpages.
14
15 Version 1.1 - 30.10.2012: direct list construction, sorted list, aternative subpage naming.
16
17 Version 1.0 - 19.12.2010: initial version.
18
19 @copyright: 2010-2015 Ian Riley <ian@riley.asia>
20
21 Based on:
22 TableOfContents macro @copyright: 2007 MoinMoin:JohannesBerg
23 PageList macro @copyright: 2001-2003 Juergen Hermann <jh@web.de>,
24 2003-2008 MoinMoin:ThomasWaldmann
25 2008 MoinMoin:ReimarBauer
26
27 @license: GNU GPL, see COPYING for details.
28 """
29
30 Dependencies = ["namespace"]
31
32 import re
33 from MoinMoin.Page import Page
34 from MoinMoin import search, wikiutil
35
36 def toInt(text):
37 return int(text) if text.isdigit() else text
38
39 def natKeys(text):
40 return [ toInt(c) for c in re.split('(\d+)', text[1].lower()) ]
41
42 def execute(macro, args):
43 request = macro.request
44 _ = request.getText
45
46 saved_pragma = dict(request.pragma) # because pragma not reset by Page class
47 result = [] # this will return nothing if there are no subpages
48
49 pname = macro.formatter.page.page_name
50 subpnames = pname + u'/.+'
51
52 altnames = []
53 subpnames = re.compile(subpnames)
54 pagelist = request.rootpage.getPageList(filter=subpnames.match)
55 if pagelist: # only spend the time on this, if subpages exist
56 fmt = macro.formatter.__class__(request)
57 fmt._base_depth = macro.formatter._base_depth
58 for pagename in pagelist:
59 subpage = Page(request, pagename, formatter=fmt)
60 subpage.request.pragma = {} # reset pragma
61 pi = subpage.pi #rebuild pi including pragma for subpage
62 altname = request.getPragma('alt-name')
63 index = request.getPragma('index')
64 if index != 'off':
65 if altname:
66 altnames.append([pagename, altname])
67 else:
68 altnames.append([pagename, pagename.replace(pname + '/', '')])
69
70 # sort text for display in lower case with natural sort for numerical parts
71 altnames = sorted(altnames, key=natKeys)
72
73 result = [
74 '\n',
75 macro.formatter.div(1, css_class="table-of-contents"),
76 macro.formatter.paragraph(1, css_class="table-of-contents-heading"),
77 macro.formatter.text(_('Appendices')),
78 macro.formatter.paragraph(0),
79 macro.formatter.number_list(1),
80 ]
81
82 for pagename, altname in altnames:
83 result.extend([
84 '\n',
85 macro.formatter.listitem(1),
86 macro.formatter.pagelink(1, pagename),
87 macro.formatter.text(altname),
88 macro.formatter.anchorlink(0),
89 macro.formatter.listitem(0),
90 ])
91 result.extend([
92 macro.formatter.number_list(0),
93 macro.formatter.div(0),
94 ])
95
96 request.pragma = dict(saved_pragma)
97 return ''.join(result)
You are not allowed to attach a file to this page.