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,
74 if self.crexception : return 0
75 if self.crfatal : return 0
77 if not s.estvide(): return 0
82 Purge complètement le CR sauf les exceptions
92 def beautifie_messages(self):
94 Beautifie les messages stockés dans crok,crfatal,crexception et crwarn
97 for mess in self.crok:
101 for mess in self.crwarn:
102 l.append(encadre_message(mess,'*'))
103 self.crwarn_belle = l
105 for mess in self.crfatal:
106 l.append(encadre_message(mess,'!'))
107 self.crfatal_belle = l
109 for mess in self.crexception:
110 l.append(encadre_message(mess,'!'))
111 self.crexception_belle = l
115 Insère en tete de chaque ligne du texte s la chaine self.dec
117 l = string.split(s,'\n')
118 return self.dec+string.join(l,'\n'+self.dec)[:-3]
122 Retourne une chaine de caractères décorée et représentative de self
125 self.beautifie_messages()
126 s=s+string.join(self.crok_belle,'')
127 s=s+string.join(self.crwarn_belle,'')
128 s=s+string.join(self.crfatal_belle,'')
129 s=s+string.join(self.crexception_belle,'')
130 for subcr in self.subcr:
131 if self.verbeux == 'oui':
134 if not subcr.estvide():
137 s=self.debut+'\n'+self.indent(s)+self.fin+'\n'
139 s=self.debut+'\n'+self.fin+'\n'
142 def report(self,decalage = 2):
144 Retourne une chaine de caractères non encadrée mais représentative de self
147 # on stocke dans s les messages de premier niveau
148 for mess in self.crok :
149 s=s + decalage*self.dec + mess + self.dec + '\n'
150 for mess in self.crwarn:
151 s=s + decalage*self.dec + mess + self.dec + '\n'
152 for mess in self.crfatal:
153 s=s + decalage*self.dec + mess + self.dec + '\n'
154 for mess in self.crexception:
155 s=s + decalage*self.dec + mess + self.dec + '\n'
156 # on récupère les messages des sous comptes-rendus ...
157 for subcr in self.subcr:
158 if not subcr.estvide():
159 s=s+subcr.report(decalage = decalage + 1)
160 # on rajoute les flags de début et de fin ... (si self n'est pas vide)
161 if not self.estvide() :
162 s = (decalage-1)*self.dec+self.debut+'\n'+s+ \
163 (decalage-1)*self.dec+self.fin+'\n'
166 def get_mess_fatal(self):
168 Retourne une chaine de caractères contenant les messages de
169 la liste crfatal (du dernier au premier)
171 self.crfatal.reverse()
173 for elem in self.crfatal :
175 self.crfatal.reverse()
178 def get_mess_exception(self):
180 Retourne une chaine de caractères contenant les messages
181 de la liste crexception (du dernier au premier)
183 self.crexception.reverse()
185 for elem in self.crexception :
187 self.crexception.reverse()
193 def justify_text_old(texte='',cesure=50):
195 Prend la chaine de caractères 'texte' et la retourne avec un retour chariot
196 tous les 'cesure' caractères s'il y a lieu (le retour chariot est placé dans un blanc
197 et non au milieu d'un mot
199 texte = string.strip(texte)
200 if len(texte) < cesure : return texte
201 liste_lignes = string.split(texte,'\n')
203 for ligne in liste_lignes :
204 ligne = string.strip(ligne)
205 if len(ligne) <= cesure :
206 texte_justifie = texte_justifie + ligne + '\n'
210 liste_mots = string.split(ligne,' ')
211 for mot in liste_mots :
212 new_longueur = longueur + len(mot)+1
213 if new_longueur < cesure :
214 new_text = new_text+' '+mot
215 longueur = longueur + len(mot) + 1
218 new_text = new_text + '\n'+mot
219 texte_justifie = texte_justifie + string.strip(new_text) + '\n'
220 return texte_justifie[0:-1]
222 def encadre_message_old(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 if len(ligne)> longueur : longueur = len(ligne)
232 longueur = longueur + 4
233 txt = motif*longueur+'\n'
234 for ligne in lignes :
235 txt = txt + motif + ' '+ligne+' '*(longueur-len(motif+ligne)-2)+motif+'\n'
236 txt = txt + motif*longueur+'\n'
242 separateurs=(' ',',','/')
243 def split(ligne,cesure):
244 ligne= string.rstrip(ligne)
245 if len(ligne) <= cesure :
249 while ligne[coupure] not in separateurs and coupure > 0:
250 coupure = coupure - 1
252 # Il faut augmenter la cesure
254 while ligne[coupure] not in separateurs and coupure < len(ligne)-1 :
255 coupure = coupure + 1
256 if coupure == len(ligne)-1:
259 return ligne[:coupure+1]+ '\n' + split(ligne[coupure+1:],cesure)
261 def justify_text(texte='',cesure=50):
262 texte = string.strip(texte)
263 liste_lignes = string.split(texte,'\n')
264 l=[split(l,cesure) for l in liste_lignes]
265 texte_justifie=string.join(l,'\n')
266 return texte_justifie
268 def encadre_message(texte,motif):
270 Retourne la chaine de caractères texte entourée d'un cadre formés
273 texte = justify_text(texte,cesure=80)
274 lignes = string.split(texte,'\n')
276 for ligne in lignes :
277 ligne=string.rstrip(ligne)
278 if len(ligne)> longueur : longueur = len(ligne)
279 longueur = longueur + 4
280 txt = motif*longueur+'\n'
281 for ligne in lignes :
282 txt = txt + motif + ' '+ligne+' '*(longueur-len(motif+ligne)-2)+motif+'\n'
283 txt = txt + motif*longueur+'\n'