# -*- coding: iso-8859-1 -*- """ MoinMoin - Dokuwiki Formatter @copyright: 2000, 2001, 2002 by Jürgen Hermann @copyright: 2011-2012 Elan Ruusamäe @license: GNU GPL, see COPYING for details. """ from xml.sax import saxutils from MoinMoin.formatter.base import FormatterBase from MoinMoin import config from MoinMoin.Page import Page class Formatter(FormatterBase): """ Send Dokuwiki formatted data. """ hardspace = ' ' def __init__(self, request, **kw): apply(FormatterBase.__init__, (self, request), kw) self._current_depth = 1 self._base_depth = 0 self.in_pre = 0 self._text = None # XXX does not work with links in headings!!!!! self.bullet_depth = 0 def _escape(self, text, extra_mapping={"'": "'", '"': """}): return saxutils.escape(text, extra_mapping) def startDocument(self, pagename): encoding = config.charset return '\n' % ( encoding, self._escape(pagename)) def endDocument(self): result = "" while self._current_depth > 1: result += "" % self._current_depth self._current_depth -= 1 return result + '' def lang(self, on, lang_name): return ('
' % lang_name, '
')[not on] def sysmsg(self, on, **kw): return ('', '')[not on] def rawHTML(self, markup): return '' + markup + '' def pagelink(self, on, pagename='', page=None, **kw): apply(FormatterBase.pagelink, (self, on, pagename, page), kw) if page is None: page = Page(self.request, pagename, formatter=self) return page.link_to(self.request, on=on, **kw) def interwikilink(self, on, interwiki='', pagename='', **kw): if on: return '[[%s|%s' % (interwiki, pagename) else: return ']]' def url(self, on, url='', css=None, **kw): if css: str = ' class="%s"' % css else: str = '' return ('' % (self._escape(url), str), '') [not on] def attachment_link(self, url, text, **kw): return '{{%s|%s}}' % (url, text) def attachment_image(self, url, **kw): return '{{%s|}' % (url,) def attachment_drawing(self, url, text, **kw): return '{{%s|%s}}' % (url, text) def text(self, text, **kw): self._did_para = 0 if self._text is not None: self._text.append(text) return text def rule(self, size=0, **kw): # size not supported return '----\n' def icon(self, type): return '' % type def strong(self, on, **kw): return ['**', '**'][not on] def emphasis(self, on, **kw): return ['//', '//'][not on] def highlight(self, on, **kw): return ['**', '**'][not on] def number_list(self, on, type=None, start=None, **kw): result = '' if self.in_p: result = self.paragraph(0) return result + ['
    ', '
\n'][not on] def bullet_list(self, on, **kw): # fill: ' * ' if on: self.bullet_depth += 1 else: self.bullet_depth -= 1 return ['\n', ''][not on] def listitem(self, on, **kw): return [(' ' * self.bullet_depth * 2) + '* ', '\n'][not on] def code(self, on, **kw): """ `typewriter` or {{{typerwriter}}, for code blocks i hope codeblock works """ return ["''", "''"][not on] def sup(self, on, **kw): return ['', ''][not on] def sub(self, on, **kw): return ['', ''][not on] def strike(self, on, **kw): return ['', ''][not on] def preformatted(self, on, **kw): FormatterBase.preformatted(self, on) result = '' if self.in_p: result = self.paragraph(0) return result + ['', '\n'][not on] def paragraph(self, on, **kw): FormatterBase.paragraph(self, on) return ['', '\n\n'][not on] def linebreak(self, preformatted=1): return ['\n', '\\\n'][not preformatted] def heading(self, on, depth, **kw): # heading depth reversed in dokuwiki heading_depth = 7 - depth if on: return u'%s ' % (u'=' * heading_depth) else: return u' %s' % (u'=' * heading_depth) def table(self, on, attrs={}, **kw): return ['', '
'][not on] def table_row(self, on, attrs={}, **kw): return ['', ''][not on] def table_cell(self, on, attrs={}, **kw): return ['', ''][not on] def anchordef(self, id): return '' % id def anchorlink(self, on, name='', **kw): id = kw.get('id',None) extra = '' if id: extra = ' id="%s"' % id return ('' % (name, extra) ,'') [not on] def underline(self, on, **kw): return ['__', '__'][not on] def definition_list(self, on, **kw): result = '' if self.in_p: result = self.paragraph(0) return result + ['', ''][not on] def definition_term(self, on, compact=0, **kw): return [''][not on] def definition_desc(self, on, **kw): return ['', ''][not on] def image(self, src=None, **kw): valid_attrs = ['src', 'width', 'height', 'alt', 'title'] attrs = {'src': src} for key, value in kw.items(): if key in valid_attrs: attrs[key] = value return apply(FormatterBase.image, (self,), attrs) + '' def code_area(self, on, code_id, code_type='code', show=0, start=-1, step=-1): syntax = '' # switch for Python: http://simonwillison.net/2004/may/7/switch/ try: syntax = { 'ColorizedPython': 'python', 'ColorizedCPlusPlus': 'cpp', }[code_type] except KeyError: pass return ('' % syntax , '')[not on] def code_line(self, on): return ('', '\n')[on] def code_token(self, on, tok_type): # not supported return ''