def _macro_formatter(self, match, fullmatch): name = fullmatch.group('macroname') if name in self.allowed_macros: # leapfrog the OneLinerFormatter return Formatter._macro_formatter(self, match, fullmatch) else: # use the OneLinerFormatter return OneLinerFormatter._macro_formatter(self, match, fullmatch)
def expand_macro(self, formatter, name, args): """ Return output that will be displayed in the Wiki content. @param name: the actual name of the macro @param args: the text enclosed in parenthesis at the call of the macro. Note that if there are ''no'' parenthesis (like in, e.g. [[ProjectVersion]]), then `args` is `None`. """ text = self._expandText(args) out = StringIO() OneLinerFormatter(self.env, formatter.context).format(text, out) return Markup(out.getvalue())
def formatter(self, env): return OneLinerFormatter(env)
def _render_view(self, req, page): version = page.resource.version # Add registered converters if page.exists: for conversion in Mimeview(self.env) \ .get_supported_conversions('text/x-trac-wiki'): conversion_href = req.href.wiki(page.name, version=version, format=conversion.key) add_link(req, 'alternate', conversion_href, conversion.name, conversion.in_mimetype) data = self._page_data(req, page) if page.name == self.START_PAGE: data['title'] = '' ws = WikiSystem(self.env) context = web_context(req, page.resource) higher, related = [], [] if not page.exists: if 'WIKI_CREATE' not in req.perm(page.resource): raise ResourceNotFound(_("Page %(name)s not found", name=page.name)) formatter = OneLinerFormatter(self.env, context) if '/' in page.name: parts = page.name.split('/') for i in xrange(len(parts) - 2, -1, -1): name = '/'.join(parts[:i] + [parts[-1]]) if not ws.has_page(name): higher.append(ws._format_link(formatter, 'wiki', '/' + name, name, False)) else: name = page.name name = name.lower() related = [each for each in ws.pages if name in each.lower() and 'WIKI_VIEW' in req.perm(self.realm, each)] related.sort() related = [ws._format_link(formatter, 'wiki', '/' + each, each, False) for each in related] latest_page = WikiPage(self.env, page.name) prev_version = next_version = None if version: version = as_int(version, None) if version is not None: for hist in latest_page.get_history(): v = hist[0] if v != version: if v < version: if not prev_version: prev_version = v break else: next_version = v prefix = self.PAGE_TEMPLATES_PREFIX templates = [template[len(prefix):] for template in ws.get_pages(prefix) if 'WIKI_VIEW' in req.perm(self.realm, template)] # -- prev/up/next links if prev_version: add_link(req, 'prev', req.href.wiki(page.name, version=prev_version), _("Version %(num)s", num=prev_version)) parent = None if version: add_link(req, 'up', req.href.wiki(page.name, version=None), _("View latest version")) elif '/' in page.name: parent = page.name[:page.name.rindex('/')] add_link(req, 'up', req.href.wiki(parent, version=None), _("View parent page")) if next_version: add_link(req, 'next', req.href.wiki(page.name, version=next_version), _('Version %(num)s', num=next_version)) # Add ctxtnav entries if version: prevnext_nav(req, _("Previous Version"), _("Next Version"), _("View Latest Version")) else: if parent: add_ctxtnav(req, _('Up'), req.href.wiki(parent)) self._wiki_ctxtnav(req, page) # Plugin content validation fields = {'text': page.text} for manipulator in self.page_manipulators: manipulator.prepare_wiki_page(req, page, fields) text = fields.get('text', '') data.update({ 'context': context, 'text': text, 'latest_version': latest_page.version, 'attachments': AttachmentModule(self.env).attachment_data(context), 'start_page': self.START_PAGE, 'default_template': self.DEFAULT_PAGE_TEMPLATE, 'templates': templates, 'version': version, 'higher': higher, 'related': related, 'resourcepath_template': 'wiki_page_path.html', 'fullwidth': req.session.get('wiki_fullwidth'), }) add_script(req, 'common/js/wiki.js') return 'wiki_view.html', data
def _make_link(self, namespace, target, *args): if namespace == 'wiki': self.lastlink = target return OneLinerFormatter._make_link( self, namespace, target, *args)
def format_toc(self, wikitext): self.lastlink = None out = StringIO() OneLinerFormatter.format(self, wikitext, out) return out.getvalue(), self.lastlink
def __init__(self, env, ctx, allowed_macros=[]): OneLinerFormatter.__init__(self, env, ctx) self.lastlink = None self.allowed_macros = allowed_macros
def formatter(self): return OneLinerFormatter(self.env) # TODO: self.req
def __init__(self, env, context): OneLinerFormatter.__init__(self, env, context) # use our own wiki parser self.wikiparser = WantedPagesWikiParser(self.env)