1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2013 EDF R&D
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 """ Ce module contient la classe compte-rendu de validation
24 from strfunc import convert, ufmt
28 Classe servant à la construction et à l'affichage des objets Comptes-rendus
30 def __init__(self,verbeux = 'non',debut='',fin='',dec=' '):
38 self.verbeux = verbeux
49 """ Ajoute un commentaire OK à la liste crok"""
50 self.crok.append(comment)
52 def warn(self,comment):
53 """ Ajoute un commentaire Warning à la liste crwarn"""
54 self.crwarn.append(comment)
56 def fatal(self, comment, *args):
57 """Ajoute un commentaire Erreur Fatale à la liste crfatal à formater"""
58 self.crfatal.append(ufmt(comment, *args))
60 def exception(self,comment):
61 """ Ajoute un commentaire Exception à la liste crexception"""
62 self.crexception.append(comment)
65 """ Ajoute un objet CR à la liste subcr :il s'agit de l'objet CR d'un fils de self """
70 Retourne 1 si self ne contient aucun message grave (fatal ou exception)
71 et aucun CR qui en contienne, 0 sinon
73 if self.crexception : return 0
74 if self.crfatal : return 0
76 if not s.estvide(): return 0
81 Purge complètement le CR sauf les exceptions
91 def beautifie_messages(self):
93 Beautifie les messages stockés dans crok,crfatal,crexception et crwarn
96 for mess in self.crok:
100 for mess in self.crwarn:
101 l.append(encadre_message(mess,'*'))
102 self.crwarn_belle = l
104 for mess in self.crfatal:
105 l.append(encadre_message(mess,'!'))
106 self.crfatal_belle = l
108 for mess in self.crexception:
109 l.append(encadre_message(mess,'!'))
110 self.crexception_belle = l
114 Insère en tete de chaque ligne du texte s la chaine self.dec
116 l = string.split(s,'\n')
117 return self.dec+string.join(l,'\n'+self.dec)[:-3]
119 def __unicode__(self):
121 Retourne une chaine de caractères décorée et représentative de self
124 self.beautifie_messages()
125 s=s+string.join(self.crok_belle,'')
126 s=s+string.join(self.crwarn_belle,'')
127 s=s+string.join(self.crfatal_belle,'')
128 s=s+string.join(self.crexception_belle,'')
129 for subcr in self.subcr:
130 if self.verbeux == 'oui':
131 s=s+unicode(subcr)+'\n'
133 if not subcr.estvide():
136 s=self.debut+'\n'+self.indent(s)+self.fin+'\n'
138 s=self.debut+'\n'+self.fin+'\n'
142 """Return the report representation"""
143 # convert into the output encoding
144 txt = convert(self.__unicode__())
147 def report(self,decalage = 2):
149 Retourne une chaine de caractères non encadrée mais représentative de self
152 # on stocke dans s les messages de premier niveau
153 for mess in self.crok :
154 s=s + decalage*self.dec + mess + self.dec + '\n'
155 for mess in self.crwarn:
156 s=s + decalage*self.dec + mess + self.dec + '\n'
157 for mess in self.crfatal:
158 s=s + decalage*self.dec + mess + self.dec + '\n'
159 for mess in self.crexception:
160 s=s + decalage*self.dec + mess + self.dec + '\n'
161 # on récupère les messages des sous comptes-rendus ...
162 for subcr in self.subcr:
163 if not subcr.estvide():
164 s=s+subcr.report(decalage = decalage + 1)
165 # on rajoute les flags de début et de fin ... (si self n'est pas vide)
166 if not self.estvide() :
167 s = (decalage-1)*self.dec+self.debut+'\n'+s+ \
168 (decalage-1)*self.dec+self.fin+'\n'
171 def get_mess_fatal(self):
173 Retourne une chaine de caractères contenant les messages de
174 la liste crfatal (du dernier au premier)
176 self.crfatal.reverse()
178 for elem in self.crfatal :
180 self.crfatal.reverse()
183 def get_mess_exception(self):
185 Retourne une chaine de caractères contenant les messages
186 de la liste crexception (du dernier au premier)
188 self.crexception.reverse()
190 for elem in self.crexception :
192 self.crexception.reverse()
196 separateurs=(' ',',','/')
197 def split(ligne,cesure):
198 ligne= string.rstrip(ligne)
199 if len(ligne) <= cesure :
203 while ligne[coupure] not in separateurs and coupure > 0:
204 coupure = coupure - 1
206 # Il faut augmenter la cesure
208 while ligne[coupure] not in separateurs and coupure < len(ligne)-1 :
209 coupure = coupure + 1
210 if coupure == len(ligne)-1:
213 return ligne[:coupure+1]+ '\n' + split(ligne[coupure+1:],cesure)
215 def justify_text(texte='',cesure=50):
216 texte = string.strip(texte)
217 liste_lignes = string.split(texte,'\n')
218 l=[split(l,cesure) for l in liste_lignes]
219 texte_justifie=string.join(l,'\n')
220 return texte_justifie
222 def encadre_message(texte,motif):
224 Retourne la chaine de caractères texte entourée d'un cadre formés
227 texte = justify_text(texte,cesure=80)
228 lignes = string.split(texte,'\n')
230 for ligne in lignes :
231 ligne=string.rstrip(ligne)
232 if len(ligne)> longueur : longueur = len(ligne)
233 longueur = longueur + 4
234 txt = motif*longueur+'\n'
235 for ligne in lignes :
236 txt = txt + motif + ' '+ligne+' '*(longueur-len(motif+ligne)-2)+motif+'\n'
237 txt = txt + motif*longueur+'\n'