class IncludeParser: def __init__(self, request, page): self.parser = Parser("", request) # Format the empty string, making it set its internal data (ugh!). out = cStringIO.StringIO() backup = sys.stdout, request.write sys.stdout, request.write = out, out.write self.parser.format(page.formatter) sys.stdout, request.write = backup self.include_re = re.compile("\[\[Include(?:\(.*?\))?\]\]") self.macro = macro.Macro(self.parser) # This is really deep and cool black magic. Basically, it creates # a local copy of the function macro.Include.execute that behaves # exactly like the original one, but with a different "Page" # global. This allows us to follow changes in the Include macro # without much trouble. from MoinMoin.macro.Include import execute func_globals = {} func_globals.update(execute.func_globals) class IncludePage(Page): incparser = self def send_page(self, request, msg=None, **keywords): request.write(self.incparser._parse(self.get_raw_body())) func_globals["Page"] = IncludePage self.execute = new.function(execute.func_code, func_globals, execute.func_name, execute.func_defaults)
def format(self, formatter): """ Formatter the text inside classed div """ self.header = SectionHeader(self.request, self.text) Parser = self.importParser(self.sectionFormat()) parser = Parser(self.text[self.header.length():], self.request) # Set content language during rendering savedLanguage = self.request.content_lang self.request.setContentLanguage(self.sectionLanguage()) try: # XXX Should use formatter.section when its available self.request.write(formatter.rawHTML( '<div class="%s">\n' % self.sectionClass())) parser.format(formatter) self.request.write(formatter.rawHTML('</div>\n')) finally: self.request.setContentLanguage(savedLanguage)
def moin2doku(pagename, text, randomID=None): parser = Parser(text, request) formatter.setRandomID(randomID) # this needed for macros request.formatter = formatter p = Page(request, pagename) formatter.setPage(p) output = StringIO.StringIO() # wrap sys.stdout as RequestCLI has no interface to say where to output stdout = sys.stdout sys.stdout = output parser.format(formatter) sys.stdout = stdout return unicode(output.getvalue().decode('utf-8'))
def formatMarkup(self, request, text, percent): """ Formats the text using the wiki parser/formatter. This raises an exception if a text needs itself to be translated, this could possibly happen with macros. @param request: the request object @param text: the text to format @param percent: True if result is used as left-side of a % operator and thus any GENERATED % needs to be escaped as %%. """ logging.debug("formatting: %r" % text) from MoinMoin.Page import Page from MoinMoin.parser.text_moin_wiki import Parser as WikiParser if percent: from MoinMoin.formatter.text_html_percent import Formatter else: from MoinMoin.formatter.text_html import Formatter out = StringIO() request.redirect(out) parser = WikiParser(text, request, line_anchors=False) formatter = Formatter(request, terse=True) reqformatter = None if hasattr(request, "formatter"): reqformatter = request.formatter request.formatter = formatter p = Page(request, "$$$$i18n$$$$") formatter.setPage(p) parser.format(formatter) text = out.getvalue() if reqformatter is None: del request.formatter else: request.formatter = reqformatter request.redirect() text = text.strip() return text
def formatMarkup(self, request, text, percent): """ Formats the text using the wiki parser/formatter. This raises an exception if a text needs itself to be translated, this could possibly happen with macros. @param request: the request object @param text: the text to format @param percent: True if result is used as left-side of a % operator and thus any GENERATED % needs to be escaped as %%. """ logging.debug("formatting: %r" % text) from MoinMoin.Page import Page from MoinMoin.parser.text_moin_wiki import Parser as WikiParser if percent: from MoinMoin.formatter.text_html_percent import Formatter else: from MoinMoin.formatter.text_html import Formatter out = StringIO() request.redirect(out) parser = WikiParser(text, request, line_anchors=False) formatter = Formatter(request, terse=True) reqformatter = None if hasattr(request, 'formatter'): reqformatter = request.formatter request.formatter = formatter p = Page(request, "$$$$i18n$$$$") formatter.setPage(p) parser.format(formatter) text = out.getvalue() if reqformatter is None: del request.formatter else: request.formatter = reqformatter request.redirect() text = text.strip() return text
def execute(pagename, request): from MoinMoin import wikiutil from MoinMoin.Page import Page _ = request.getText thispage = Page(request, pagename) if request.user.valid: username = request.user.name else: username = '' if not username: request.theme.add_msg(_('Please log in first.'), "error") return thispage.send_page() userhomewiki = request.cfg.user_homewiki if userhomewiki != 'Self' and userhomewiki != request.cfg.interwikiname: interwiki = wikiutil.getInterwikiHomePage(request, username=username) wikitag, wikiurl, wikitail, wikitag_bad = wikiutil.resolve_interwiki(request, *interwiki) wikiurl = wikiutil.mapURL(request, wikiurl) homepageurl = wikiutil.join_wiki(wikiurl, wikitail) request.http_redirect('%s?action=MyPages' % homepageurl) homepage = Page(request, username) if not homepage.exists(): request.theme.add_msg(_('Please first create a homepage before creating additional pages.'), "error") return homepage.send_page() pagecontent = _("""\ You can add some additional sub pages to your already existing homepage here. You can choose how open to other readers or writers those pages shall be, access is controlled by group membership of the corresponding group page. Just enter the sub page's name and click on the button to create a new page. Before creating access protected pages, make sure the corresponding group page exists and has the appropriate members in it. Use HomepageGroupsTemplate for creating the group pages. ||'''Add a new personal page:'''||'''Related access control list group:'''|| ||<<NewPage(HomepageReadWritePageTemplate,read-write page,%(username)s)>>||[[%(username)s/ReadWriteGroup]]|| ||<<NewPage(HomepageReadPageTemplate,read-only page,%(username)s)>>||[[%(username)s/ReadGroup]]|| ||<<NewPage(HomepagePrivatePageTemplate,private page,%(username)s)>>||%(username)s only|| """) pagecontent = pagecontent % locals() pagecontent = pagecontent.replace('\n', '\r\n') from MoinMoin.parser.text_moin_wiki import Parser as WikiParser request.emit_http_headers() # This action generate data using the user language request.setContentLanguage(request.lang) request.theme.send_title(_('MyPages management'), page=homepage) parser = WikiParser(pagecontent, request) p = Page(request, "$$$") request.formatter.setPage(p) parser.format(request.formatter) # Start content - IMPORTANT - without content div, there is no direction support! request.write(request.formatter.startContent("content")) request.write(request.formatter.endContent()) request.theme.send_footer(homepage.page_name) request.theme.send_closing_html()
class Cfg: _site_plugin_lists = {} _plugin_modules = [] bang_meta = False class Request: getText = None form = None cfg = Cfg() pragma = {} def write(self, text): print text, class Page: hilite_re = None page_name = 'arst' if __name__ == '__main__': req = Request() if len(sys.argv) == 1: contents = sys.stdin.read() else: contents = open(sys.argv[1]).read() p = Parser(contents, req) f = Formatter(req) f.page = Page() p.format(f)
def execute(pagename, request): from MoinMoin import wikiutil from MoinMoin.Page import Page _ = request.getText thispage = Page(request, pagename) if request.user.valid: username = request.user.name else: username = '' if not username: request.theme.add_msg(_('Please log in first.'), "error") return thispage.send_page() userhomewiki = request.cfg.user_homewiki if userhomewiki != 'Self' and userhomewiki != request.cfg.interwikiname: interwiki = wikiutil.getInterwikiHomePage(request, username=username) wikitag, wikiurl, wikitail, wikitag_bad = wikiutil.resolve_interwiki( request, *interwiki) wikiurl = wikiutil.mapURL(request, wikiurl) homepageurl = wikiutil.join_wiki(wikiurl, wikitail) request.http_redirect('%s?action=MyPages' % homepageurl) homepage = Page(request, username) if not homepage.exists(): request.theme.add_msg( _('Please first create a homepage before creating additional pages.' ), "error") return homepage.send_page() pagecontent = _("""\ You can add some additional sub pages to your already existing homepage here. You can choose how open to other readers or writers those pages shall be, access is controlled by group membership of the corresponding group page. Just enter the sub page's name and click on the button to create a new page. Before creating access protected pages, make sure the corresponding group page exists and has the appropriate members in it. Use HomepageGroupsTemplate for creating the group pages. ||'''Add a new personal page:'''||'''Related access control list group:'''|| ||<<NewPage(HomepageReadWritePageTemplate,read-write page,%(username)s)>>||[[%(username)s/ReadWriteGroup]]|| ||<<NewPage(HomepageReadPageTemplate,read-only page,%(username)s)>>||[[%(username)s/ReadGroup]]|| ||<<NewPage(HomepagePrivatePageTemplate,private page,%(username)s)>>||%(username)s only|| """) pagecontent = pagecontent % locals() pagecontent = pagecontent.replace('\n', '\r\n') from MoinMoin.parser.text_moin_wiki import Parser as WikiParser # This action generate data using the user language request.setContentLanguage(request.lang) request.theme.send_title(_('MyPages management'), page=homepage) parser = WikiParser(pagecontent, request) p = Page(request, "$$$") request.formatter.setPage(p) parser.format(request.formatter) # Start content - IMPORTANT - without content div, there is no direction support! request.write(request.formatter.startContent("content")) request.write(request.formatter.endContent()) request.theme.send_footer(homepage.page_name) request.theme.send_closing_html()