1 #@ MODIF N_CR Noyau DATE 20/01/2003 AUTEUR DURAND C.DURAND
2 # CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
5 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
6 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
7 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
8 # (AT YOUR OPTION) ANY LATER VERSION.
10 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
11 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
12 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
13 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
15 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
16 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
17 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
20 # ======================================================================
21 """ Ce module contient la classe compte-rendu de validation
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):
57 """ Ajoute un commentaire Erreur Fatale à la liste crfatal"""
58 self.crfatal.append(comment)
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) et
71 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]
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':
133 if not subcr.estvide():
136 s=self.debut+'\n'+self.indent(s)+self.fin+'\n'
138 s=self.debut+'\n'+self.fin+'\n'
141 def report(self,decalage = 2):
143 Retourne une chaine de caractères non encadrée mais représentative de self
146 # on stocke dans s les messages de premier niveau
147 for mess in self.crok :
148 s=s + decalage*self.dec + mess + self.dec + '\n'
149 for mess in self.crwarn:
150 s=s + decalage*self.dec + mess + self.dec + '\n'
151 for mess in self.crfatal:
152 s=s + decalage*self.dec + mess + self.dec + '\n'
153 for mess in self.crexception:
154 s=s + decalage*self.dec + mess + self.dec + '\n'
155 # on récupère les messages des sous comptes-rendus ...
156 for subcr in self.subcr:
157 if not subcr.estvide():
158 s=s+subcr.report(decalage = decalage + 1)
159 # on rajoute les flags de début et de fin ... (si self n'est pas vide)
160 if not self.estvide() :
161 s = (decalage-1)*self.dec+self.debut+'\n'+s+ \
162 (decalage-1)*self.dec+self.fin+'\n'
165 def get_mess_fatal(self):
167 Retourne une chaine de caractères contenant les messages de
168 la liste crfatal (du dernier au premier)
170 self.crfatal.reverse()
172 for elem in self.crfatal :
174 self.crfatal.reverse()
177 def get_mess_exception(self):
179 Retourne une chaine de caractères contenant les messages
180 de la liste crexception (du dernier au premier)
182 self.crexception.reverse()
184 for elem in self.crexception :
186 self.crexception.reverse()
192 def justify_text_old(texte='',cesure=50):
194 Prend la chaine de caractères 'texte' et la retourne avec un retour chariot
195 tous les 'cesure' caractères s'il y a lieu (le retour chariot est placé dans un blanc
196 et non au milieu d'un mot
198 texte = string.strip(texte)
199 if len(texte) < cesure : return texte
200 liste_lignes = string.split(texte,'\n')
202 for ligne in liste_lignes :
203 ligne = string.strip(ligne)
204 if len(ligne) <= cesure :
205 texte_justifie = texte_justifie + ligne + '\n'
209 liste_mots = string.split(ligne,' ')
210 for mot in liste_mots :
211 new_longueur = longueur + len(mot)+1
212 if new_longueur < cesure :
213 new_text = new_text+' '+mot
214 longueur = longueur + len(mot) + 1
217 new_text = new_text + '\n'+mot
218 texte_justifie = texte_justifie + string.strip(new_text) + '\n'
219 return texte_justifie[0:-1]
221 def encadre_message_old(texte,motif):
223 Retourne la chaine de caractères texte entourée d'un cadre formés
226 texte = justify_text(texte,cesure=80)
227 lignes = string.split(texte,'\n')
229 for ligne in lignes :
230 if len(ligne)> longueur : longueur = len(ligne)
231 longueur = longueur + 4
232 txt = motif*longueur+'\n'
233 for ligne in lignes :
234 txt = txt + motif + ' '+ligne+' '*(longueur-len(motif+ligne)-2)+motif+'\n'
235 txt = txt + motif*longueur+'\n'
241 separateurs=(' ',',','/')
242 def split(ligne,cesure):
243 ligne= string.rstrip(ligne)
244 if len(ligne) <= cesure :
248 while ligne[coupure] not in separateurs and coupure > 0:
249 coupure = coupure - 1
251 # Il faut augmenter la cesure
253 while ligne[coupure] not in separateurs and coupure < len(ligne)-1 :
254 coupure = coupure + 1
255 if coupure == len(ligne)-1:
258 return ligne[:coupure+1]+ '\n' + split(ligne[coupure+1:],cesure)
260 def justify_text(texte='',cesure=50):
261 texte = string.strip(texte)
262 liste_lignes = string.split(texte,'\n')
263 l=[split(l,cesure) for l in liste_lignes]
264 texte_justifie=string.join(l,'\n')
265 return texte_justifie
267 def encadre_message(texte,motif):
269 Retourne la chaine de caractères texte entourée d'un cadre formés
272 texte = justify_text(texte,cesure=80)
273 lignes = string.split(texte,'\n')
275 for ligne in lignes :
276 ligne=string.rstrip(ligne)
277 if len(ligne)> longueur : longueur = len(ligne)
278 longueur = longueur + 4
279 txt = motif*longueur+'\n'
280 for ligne in lignes :
281 txt = txt + motif + ' '+ligne+' '*(longueur-len(motif+ligne)-2)+motif+'\n'
282 txt = txt + motif*longueur+'\n'