1 # -*- coding: iso-8859-1 -*- 2 """ 3 MoinMoin - MoinContentSupport library 4 5 @copyright: 2008, 2009, 2010, 2011 by Paul Boddie <paul@boddie.org.uk> 6 @copyright: 2000-2004 Juergen Hermann <jh@web.de>, 7 2005-2008 MoinMoin:ThomasWaldmann. 8 @license: GNU GPL (v2 or later), see COPYING.txt for details. 9 """ 10 11 from MoinMoin.wikiutil import escape 12 import re 13 14 __version__ = "0.1" 15 16 # Regular expressions. 17 # NOTE: These overlap with ImprovedMoinSearch. 18 19 heading_regexp = re.compile(r"^(?P<level>=+)\s*(?P<heading>.*?)\s*(?P=level)$", re.UNICODE | re.MULTILINE) 20 21 def getHeadingDetails(body, min_level=None, max_level=None): 22 23 """ 24 Return heading details from the given 'body' for headings with the given 25 'min_level' to 'max_level' range. Specifying None or omitting 'max_level' or 26 'min_level' removes the appropriate constraint on the range. 27 28 A list of tuples containing the heading, the level, and the span (the start 29 offset and the end offset as a tuple) is returned. 30 """ 31 32 headings = [] 33 34 for match in heading_regexp.finditer(body): 35 level = len(match.group("level")) 36 37 if (min_level is None or min_level <= level) and \ 38 (max_level is None or level <= max_level): 39 40 headings.append((match.group("heading"), level, match.span())) 41 42 return headings 43 44 # Utility classes and associated functions. 45 # NOTE: These are a subset of EventAggregatorSupport. 46 47 class Form: 48 49 """ 50 A wrapper preserving MoinMoin 1.8.x (and earlier) behaviour in a 1.9.x 51 environment. 52 """ 53 54 def __init__(self, form): 55 self.form = form 56 57 def get(self, name, default=None): 58 values = self.form.getlist(name) 59 if not values: 60 return default 61 else: 62 return values 63 64 def __getitem__(self, name): 65 return self.form.getlist(name) 66 67 class ActionSupport: 68 69 """ 70 Work around disruptive MoinMoin changes in 1.9, and also provide useful 71 convenience methods. 72 """ 73 74 def get_form(self): 75 return get_form(self.request) 76 77 def get_form(request): 78 79 "Work around disruptive MoinMoin changes in 1.9." 80 81 if hasattr(request, "values"): 82 return Form(request.values) 83 else: 84 return request.form 85 86 class send_headers: 87 88 """ 89 A wrapper to preserve MoinMoin 1.8.x (and earlier) request behaviour in a 90 1.9.x environment. 91 """ 92 93 def __init__(self, request): 94 self.request = request 95 96 def __call__(self, headers): 97 for header in headers: 98 parts = header.split(":") 99 self.request.headers.add(parts[0], ":".join(parts[1:])) 100 101 def escattr(s): 102 return escape(s, 1) 103 104 # vim: tabstop=4 expandtab shiftwidth=4