# -*- coding: utf-8 -*- """ .. .... ............ ........ . ....... . .... .. . ... .. .. .. .. ..... . .. .. .. ....@@@. .. . ........ . .. . .. ..@.@@..@@. .@@@@@@@ @@@@@@. .... .@@@@. .@@@@. .@@@@..@@.@@..@@@..@@@..@@@@.... .... @@@@... .@@@.. @@ @@ .@..@@..@@...@@@. .@@@@@. .. .@@@.. . @@@. @@.@@..@@.@@..@@@ @@ .@@@@@@.. ..... ...@@@.... @@@ .@@.......... ........ ..... .. . ..@@@@.. . .@@@@. .. ....... . ............. . .. .... .. .. . ... .... . . .... ............. .. ... .. .. ... ........ ... ... ................................ MoinMoin - Portail parser PURPOSE: Pour afficher un portail a la wikipedia. CALLING SEQUENCE: {{{ #!Portail image1.png @@ title1 @@ description 1 image2.png @@ title2 @@ description 2 image3.png @@ title3 @@ description 3 }}} Copyright 2008,2009 Antoine Durand-Gasselin """ import os,string,re,StringIO,urllib from MoinMoin import wikiutil from MoinMoin.action import AttachFile ##################################################################### # Parser : classe principale, c'est elle qui fait tout ####### class Parser: def __init__(self, raw, request, **kw): self.request = request self.form = request.form self.parser = wikiutil.searchAndImportPlugin(request.cfg, "parser", request.page.pi['format']) self.raw = raw def format(self, formatter): entries = self.parse(formatter) self.request.write(self.request.formatter.rawHTML(self.crans_portal(entries))) def parse(self, formatter): # on divise le textes en lignes (1 ligne = une entree dans le portail) quotes = self.raw.split('\n') # on récupere le chemin des fichiers attaches pour les images current_pagename=formatter.page.page_name attachment_path = AttachFile.getAttachDir(self.request, current_pagename, create=1) # on traite les ligne une à une entries = [] for line in quotes: line=line.strip() items=line.split('@@',2) if len(items)<3: # Voir ce qu'on fait ## self.request.write('') pass else: # On récupère le nom de l'image pic = items[0].strip() # On va formatter le titre et la légende tit_buf = StringIO.StringIO() bod_buf = StringIO.StringIO() self.request.redirect(tit_buf) self.parser(items[1], self.request).format(formatter) title = tit_buf.getvalue() self.request.redirect() self.request.redirect(bod_buf) self.parser(items[2], self.request).format(formatter) body = bod_buf.getvalue() self.request.redirect() # Qu'on rajoute à la liste des entrées entries += [ (( pic, title, body )) ] return entries def crans_portal(self, entries): html = [ '\n\n
' ] format_pe = '''
  • %s
  • %s
''' format_pne = '''
envoyer
%s
  • %s
  • %s
''' pn = self.request.formatter.page.page_name while len(entries) != 0: pic0, tit0, bod0 = entries[0] fname = urllib.url2pathname(pic0) if AttachFile.exists(self.request, pn, fname): pic0 = AttachFile.getAttachUrl(pn, pic0, self.request) pic0 = wikiutil.escape(pic0) html += [ format_pe % (pic0, tit0, bod0) ] else: pic0 = AttachFile.getAttachUrl(pn, pic0, self.request, upload=True) pic0 = wikiutil.escape(pic0) html += [ format_pne % (pic0, fname, tit0, bod0) ] if len(entries) >= 2: pic1, tit1, bod1 = entries[1] entries = entries[2:] fname = urllib.url2pathname(pic1) if AttachFile.exists(self.request, pn, fname): pic1 = AttachFile.getAttachUrl(pn, pic1, self.request) pic1 = wikiutil.escape(pic1) html += [ format_pe % (pic1, tit1, bod1) ] else: pic1 = AttachFile.getAttachUrl(pn, pic1, self.request, upload=True) pic1 = wikiutil.escape(pic1) html += [ format_pne % (pic1, fname, tit1, bod1) ] else: entries = [] # plus propre que {{{ break() }}} html += [ '\n
\n
\n\n' ] return('\n'.join(html))