1 #@ MODIF N_CR Noyau DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
2 # -*- coding: iso-8859-1 -*-
3 # CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
6 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
7 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
8 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
9 # (AT YOUR OPTION) ANY LATER VERSION.
11 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
12 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
13 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
14 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
16 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
17 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
18 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
21 # ======================================================================
24 """ Ce module contient la classe compte-rendu de validation
31 Classe servant à la construction et à l'affichage des objets Comptes-rendus
33 def __init__(self,verbeux = 'non',debut='',fin='',dec=' '):
41 self.verbeux = verbeux
52 """ Ajoute un commentaire OK à la liste crok"""
53 self.crok.append(comment)
55 def warn(self,comment):
56 """ Ajoute un commentaire Warning à la liste crwarn"""
57 self.crwarn.append(comment)
59 def fatal(self,comment):
60 """ Ajoute un commentaire Erreur Fatale à la liste crfatal"""
61 self.crfatal.append(comment)
63 def exception(self,comment):
64 """ Ajoute un commentaire Exception à la liste crexception"""
65 self.crexception.append(comment)
68 """ Ajoute un objet CR à la liste subcr :il s'agit de l'objet CR d'un fils de self """
73 Retourne 1 si self ne contient aucun message grave (fatal ou exception) et
74 aucun CR qui en contienne,
77 if self.crexception : return 0
78 if self.crfatal : return 0
80 if not s.estvide(): return 0
85 Purge complètement le CR sauf les exceptions
95 def beautifie_messages(self):
97 Beautifie les messages stockés dans crok,crfatal,crexception et crwarn
100 for mess in self.crok:
104 for mess in self.crwarn:
105 l.append(encadre_message(mess,'*'))
106 self.crwarn_belle = l
108 for mess in self.crfatal:
109 l.append(encadre_message(mess,'!'))
110 self.crfatal_belle = l
112 for mess in self.crexception:
113 l.append(encadre_message(mess,'!'))
114 self.crexception_belle = l
118 Insère en tete de chaque ligne du texte s la chaine self.dec
120 l = string.split(s,'\n')
121 return self.dec+string.join(l,'\n'+self.dec)[:-3]
125 Retourne une chaine de caractères décorée et représentative de self
128 self.beautifie_messages()
129 s=s+string.join(self.crok_belle,'')
130 s=s+string.join(self.crwarn_belle,'')
131 s=s+string.join(self.crfatal_belle,'')
132 s=s+string.join(self.crexception_belle,'')
133 for subcr in self.subcr:
134 if self.verbeux == 'oui':
137 if not subcr.estvide():
140 s=self.debut+'\n'+self.indent(s)+self.fin+'\n'
142 s=self.debut+'\n'+self.fin+'\n'
145 def report(self,decalage = 2):
147 Retourne une chaine de caractères non encadrée mais représentative de self
150 # on stocke dans s les messages de premier niveau
151 for mess in self.crok :
152 s=s + decalage*self.dec + mess + self.dec + '\n'
153 for mess in self.crwarn:
154 s=s + decalage*self.dec + mess + self.dec + '\n'
155 for mess in self.crfatal:
156 s=s + decalage*self.dec + mess + self.dec + '\n'
157 for mess in self.crexception:
158 s=s + decalage*self.dec + mess + self.dec + '\n'
159 # on récupère les messages des sous comptes-rendus ...
160 for subcr in self.subcr:
161 if not subcr.estvide():
162 s=s+subcr.report(decalage = decalage + 1)
163 # on rajoute les flags de début et de fin ... (si self n'est pas vide)
164 if not self.estvide() :
165 s = (decalage-1)*self.dec+self.debut+'\n'+s+ \
166 (decalage-1)*self.dec+self.fin+'\n'
169 def get_mess_fatal(self):
171 Retourne une chaine de caractères contenant les messages de
172 la liste crfatal (du dernier au premier)
174 self.crfatal.reverse()
176 for elem in self.crfatal :
178 self.crfatal.reverse()
181 def get_mess_exception(self):
183 Retourne une chaine de caractères contenant les messages
184 de la liste crexception (du dernier au premier)
186 self.crexception.reverse()
188 for elem in self.crexception :
190 self.crexception.reverse()
196 def justify_text_old(texte='',cesure=50):
198 Prend la chaine de caractères 'texte' et la retourne avec un retour chariot
199 tous les 'cesure' caractères s'il y a lieu (le retour chariot est placé dans un blanc
200 et non au milieu d'un mot
202 texte = string.strip(texte)
203 if len(texte) < cesure : return texte
204 liste_lignes = string.split(texte,'\n')
206 for ligne in liste_lignes :
207 ligne = string.strip(ligne)
208 if len(ligne) <= cesure :
209 texte_justifie = texte_justifie + ligne + '\n'
213 liste_mots = string.split(ligne,' ')
214 for mot in liste_mots :
215 new_longueur = longueur + len(mot)+1
216 if new_longueur < cesure :
217 new_text = new_text+' '+mot
218 longueur = longueur + len(mot) + 1
221 new_text = new_text + '\n'+mot
222 texte_justifie = texte_justifie + string.strip(new_text) + '\n'
223 return texte_justifie[0:-1]
225 def encadre_message_old(texte,motif):
227 Retourne la chaine de caractères texte entourée d'un cadre formés
230 texte = justify_text(texte,cesure=80)
231 lignes = string.split(texte,'\n')
233 for ligne in lignes :
234 if len(ligne)> longueur : longueur = len(ligne)
235 longueur = longueur + 4
236 txt = motif*longueur+'\n'
237 for ligne in lignes :
238 txt = txt + motif + ' '+ligne+' '*(longueur-len(motif+ligne)-2)+motif+'\n'
239 txt = txt + motif*longueur+'\n'
245 separateurs=(' ',',','/')
246 def split(ligne,cesure):
247 ligne= string.rstrip(ligne)
248 if len(ligne) <= cesure :
252 while ligne[coupure] not in separateurs and coupure > 0:
253 coupure = coupure - 1
255 # Il faut augmenter la cesure
257 while ligne[coupure] not in separateurs and coupure < len(ligne)-1 :
258 coupure = coupure + 1
259 if coupure == len(ligne)-1:
262 return ligne[:coupure+1]+ '\n' + split(ligne[coupure+1:],cesure)
264 def justify_text(texte='',cesure=50):
265 texte = string.strip(texte)
266 liste_lignes = string.split(texte,'\n')
267 l=[split(l,cesure) for l in liste_lignes]
268 texte_justifie=string.join(l,'\n')
269 return texte_justifie
271 def encadre_message(texte,motif):
273 Retourne la chaine de caractères texte entourée d'un cadre formés
276 texte = justify_text(texte,cesure=80)
277 lignes = string.split(texte,'\n')
279 for ligne in lignes :
280 ligne=string.rstrip(ligne)
281 if len(ligne)> longueur : longueur = len(ligne)
282 longueur = longueur + 4
283 txt = motif*longueur+'\n'
284 for ligne in lignes :
285 txt = txt + motif + ' '+ligne+' '*(longueur-len(motif+ligne)-2)+motif+'\n'
286 txt = txt + motif*longueur+'\n'