#! /usr/bin/env python # -*- encoding: iso-8859-15 -*- #generation d'une question de questionnaire si il y a des arguments, sinon affiche le résultat class questionnaire: execute = 0 liste_questions = [] min_point = 0 max_point = 0 fonction_affiche = True def int_try(point): try: return int(point) except ValueError : return 0 def parse(text): ligne = text.split("\\") question = [] for l in ligne: l = l.split(":",1) if len(l)>=2: question+=[(l[0],l[1])] return question def question_choix_unique(f,QR,quest): r="" id = QR[0][0] r+=f.rawHTML("""

%(id)i : %(Q)s
""" % { "id" : quest.execute , "Q" : QR[0][1]}) QR=QR[1:] max = 0 min = 0 for (point,rep) in QR: point = int_try(point) if (max < point): max = point if (min > point): min = point r+=f.rawHTML(""" %(rep)s
\n"""% { "point" : point , "id" : quest.execute, "rep" : rep}) quest.max_point += max quest.min_point += min r += f.rawHTML("\n

\n") return r def question_choix_multiple(f,QR,quest): r = "" r +=f.rawHTML("

%(id)i : %(Q)s
\n" % { "id" : quest.execute , "Q" : QR[0][1]}) QR=QR[1:] for (point,rep) in QR: point = int_try(point) if point > 0: quest.max_point += point else: quest.min_point += point r+=f.rawHTML(""" %(rep)s
\n"""% { "point" : point , "id" : quest.execute, "rep" : rep}) r +=f.rawHTML("\n

\n") return r def fonction_javascript(f,quest): if (quest.fonction_affiche==True): quest.fonction_affiche = False return f.rawHTML(""" """ % {"min_point": quest.min_point, "intervalle": quest.max_point-quest.min_point, "nb_quest": quest.execute}) else: return "" def result(f,quest): return f.rawHTML(""" 0 """) def result_pourcent(f,quest): return f.rawHTML(""" 0 """) def result_max(f,quest): return f.text("%i" % quest.max_point) def result_min(f,quest): return f.text("%i" % quest.min_point) def execute(macro,text): try: macro._macro_questionnaire.execute +=1 except : macro._macro_questionnaire = questionnaire() f = macro.formatter quest = macro._macro_questionnaire if text == "": return fonction_javascript(f,quest) + result(f,quest) elif text == "%": return fonction_javascript(f,quest) + result_pourcent(f,quest) elif text == "M": return fonction_javascript(f,quest) + result_max(f,quest) elif text == "m": return fonction_javascript(f,quest) + result_min(f,quest) else: QR = parse(text) if QR[0][0][0]=='*': return question_choix_multiple(f,QR,quest) else: return question_choix_unique(f,QR,quest)