From 8c6f950e0a2bf41e1b246beb2d032c4343f25af9 Mon Sep 17 00:00:00 2001 From: Antoine Durand-Gasselin Date: Sun, 9 Nov 2008 16:51:40 +0100 Subject: [PATCH] =?UTF-8?q?[wiki-lenny/local/]=20Ajout=20du=20parser=20pou?= =?UTF-8?q?r=20interpr=C3=A9ter=20les=20{{{!#Box=20[...]=20}}}?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit darcs-hash:20081109155140-bd074-7d80266881555bd3549f742ffca0592489bda0aa.gz --- wiki-lenny/local/parser/Box.py | 76 ++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 wiki-lenny/local/parser/Box.py diff --git a/wiki-lenny/local/parser/Box.py b/wiki-lenny/local/parser/Box.py new file mode 100644 index 00000000..b1f51f99 --- /dev/null +++ b/wiki-lenny/local/parser/Box.py @@ -0,0 +1,76 @@ +# -*- coding: iso-8859-1 -*- +""" + MoinMoin - Portail parser + + PURPOSE: + une boite jolie + + CALLING SEQUENCE: + {{{ + #!Box titre + blablabla + + tables, images.... + }}} + +""" + +from MoinMoin import config, wikiutil +from MoinMoin.macro import Macro +from MoinMoin.parser.text_creole import Emitter +from MoinMoin.parser._creole import Parser as CreoleParser +import os,string,re,StringIO + +Dependencies = [] +color_list = ['orange', 'black', 'red', 'green', 'blue', 'gray'] + +##################################################################### +# Parser : classe principale, c'est elle qui fait tout +####### +class Parser: + parsername = "Box" + Dependencies=Dependencies + + def __init__(self, raw, request, **kw): + self.form = request.form + self.request = request + self.raw = raw + self.settings = self.parseArgs(kw["format_args"]) + + def getRandomColor(self): + nb_of_colors = color_list.__len__() + from random import randint + colorNum = randint(0, nb_of_colors - 1) + return color_list[colorNum] + + def parseArgs(self, argsString): + argList = argsString.split(u',') + settings = {} + for anArg in argList: + anArg = anArg.strip(u' ') + if anArg.find(u'color=')!=-1: + theColor = anArg.split(u'=')[1].lower() + if theColor == 'random': + theColor = self.getRandomColor() + settings['color'] = theColor + else: + settings['title'] = anArg + return settings + + def format(self, formatter): + + # on utilise la classe qui va fabriquer le code html + try: title = self.settings['title'] + except: title = '' + try: color = self.settings['color'] + except: color=None + + # On crée l'arbre de syntaxe + content_tree = CreoleParser(self.raw).parse() + + # On le formatte + fmt_content = Emitter(content_tree, formatter, self.request, Macro(self)).emit() + + # On le fout dans une boîte + self.request.write(formatter.crans_box(title, fmt_content, color)) +