]> SALOME platform Git repositories - tools/eficas.git/blob - Noyau/N_CR.py
Salome HOME
c75740519110e00393073924ee802818f9c17b0b
[tools/eficas.git] / Noyau / N_CR.py
1 #@ MODIF N_CR Noyau  DATE 16/05/2007   AUTEUR COURTOIS 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.                                 
10 #
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.                            
15 #
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.      
19 #                                                                       
20 #                                                                       
21 # ======================================================================
22
23
24 """ Ce module contient la classe compte-rendu de validation
25 """
26
27 import string
28
29 class CR :
30    """ 
31         Classe servant à la construction et à l'affichage des objets Comptes-rendus 
32    """
33    def __init__(self,verbeux = 'non',debut='',fin='',dec='   '):
34       """
35          Attributs
36           - verbeux
37           - debut
38           - fin
39           - dec
40       """
41       self.verbeux = verbeux
42       self.debut=debut
43       self.fin=fin
44       self.dec=dec
45       self.crok=[]
46       self.crwarn=[]
47       self.crfatal=[]
48       self.crexception=[]
49       self.subcr=[]
50
51    def ok(self,comment):
52       """ Ajoute un commentaire OK à la liste crok"""
53       self.crok.append(comment)
54
55    def warn(self,comment):
56       """ Ajoute un commentaire Warning à la liste crwarn"""
57       self.crwarn.append(comment)
58
59    def fatal(self,comment):
60       """ Ajoute un commentaire Erreur Fatale à la liste crfatal"""
61       self.crfatal.append(comment)
62
63    def exception(self,comment):
64       """ Ajoute un commentaire Exception à la liste crexception"""
65       self.crexception.append(comment)
66
67    def add(self,cr):
68       """ Ajoute un objet CR à la liste subcr :il s'agit de l'objet CR d'un fils de self """
69       self.subcr.append(cr)
70
71    def estvide(self):
72       """ 
73            Retourne 1 si self ne contient aucun message grave (fatal ou exception) 
74            et aucun CR qui en contienne, 0 sinon
75       """
76       if self.crexception : return 0
77       if self.crfatal : return 0
78       for s in self.subcr :
79         if not s.estvide(): return 0
80       return 1
81
82    def purge(self):
83       """ 
84            Purge complètement le CR sauf les exceptions
85       """
86       self.debut=''
87       self.fin=''
88       self.dec='   '
89       self.crok=[]
90       self.crwarn=[]
91       self.crfatal=[]
92       self.subcr=[]
93
94    def beautifie_messages(self):
95       """
96         Beautifie les messages stockés dans crok,crfatal,crexception et crwarn
97       """
98       l=[]
99       for mess in self.crok:
100          l.append(mess+'\n')
101       self.crok_belle=l
102       l=[]
103       for mess in self.crwarn:
104          l.append(encadre_message(mess,'*'))
105       self.crwarn_belle = l
106       l=[]
107       for mess in self.crfatal:
108          l.append(encadre_message(mess,'!'))
109       self.crfatal_belle = l
110       l=[]
111       for mess in self.crexception:
112          l.append(encadre_message(mess,'!'))
113       self.crexception_belle = l
114
115    def indent(self,s):
116       """
117         Insère en tete de chaque ligne du texte s la chaine self.dec
118       """
119       l = string.split(s,'\n')
120       return self.dec+string.join(l,'\n'+self.dec)[:-3]
121
122    def __str__(self):
123       """
124         Retourne une chaine de caractères décorée et représentative de self
125       """
126       s=''
127       self.beautifie_messages()
128       s=s+string.join(self.crok_belle,'')
129       s=s+string.join(self.crwarn_belle,'')
130       s=s+string.join(self.crfatal_belle,'')
131       s=s+string.join(self.crexception_belle,'')
132       for subcr in self.subcr:
133          if self.verbeux == 'oui':
134             s=s+str(subcr)+'\n'
135          else:
136             if not subcr.estvide():
137                s=s+str(subcr)
138       if s != '':
139          s=self.debut+'\n'+self.indent(s)+self.fin+'\n'
140       else :
141          s=self.debut+'\n'+self.fin+'\n'
142       return s
143
144    def report(self,decalage = 2):
145       """
146         Retourne une chaine de caractères non encadrée mais représentative de self
147       """
148       s=''
149       # on stocke dans s les messages de premier niveau
150       for mess in self.crok :
151         s=s + decalage*self.dec + mess + self.dec + '\n'
152       for mess in self.crwarn:
153         s=s + decalage*self.dec + mess + self.dec + '\n'
154       for mess in self.crfatal:
155         s=s + decalage*self.dec + mess + self.dec + '\n'
156       for mess in self.crexception:
157         s=s + decalage*self.dec + mess + self.dec + '\n'
158       # on récupère les messages des sous comptes-rendus ...
159       for subcr in self.subcr:
160         if not subcr.estvide():
161             s=s+subcr.report(decalage = decalage + 1)
162       # on rajoute les flags de début et de fin ... (si self n'est pas vide)
163       if not self.estvide() :
164         s = (decalage-1)*self.dec+self.debut+'\n'+s+ \
165             (decalage-1)*self.dec+self.fin+'\n'
166       return s
167
168    def get_mess_fatal(self):
169       """
170           Retourne une chaine de caractères contenant les messages de 
171           la liste crfatal (du dernier au premier)
172       """
173       self.crfatal.reverse()
174       s=''
175       for elem in self.crfatal :
176         s=s+elem
177       self.crfatal.reverse()
178       return s
179
180    def get_mess_exception(self):
181       """
182           Retourne une chaine de caractères contenant les messages 
183           de la liste crexception (du dernier au premier)
184       """
185       self.crexception.reverse()
186       s=''
187       for elem in self.crexception :
188         s=s+elem
189       self.crexception.reverse()
190       return s
191
192
193
194
195 def justify_text_old(texte='',cesure=50):
196   """
197       Prend la chaine de caractères 'texte' et la retourne avec un retour chariot
198       tous les 'cesure' caractères s'il y a lieu (le retour chariot est placé dans un blanc
199       et non au milieu d'un mot
200   """
201   texte = string.strip(texte)
202   if len(texte) < cesure : return texte
203   liste_lignes = string.split(texte,'\n')
204   texte_justifie = ''
205   for ligne in liste_lignes :
206     ligne = string.strip(ligne)
207     if len(ligne) <= cesure :
208       texte_justifie = texte_justifie + ligne + '\n'
209       continue
210     longueur = 0
211     new_text = ''
212     liste_mots = string.split(ligne,' ')
213     for mot in liste_mots :
214       new_longueur = longueur + len(mot)+1
215       if new_longueur < cesure :
216         new_text = new_text+' '+mot
217         longueur = longueur + len(mot) + 1
218       else :
219         longueur = 0
220         new_text = new_text + '\n'+mot
221     texte_justifie = texte_justifie + string.strip(new_text) + '\n'
222   return texte_justifie[0:-1]
223
224 def encadre_message_old(texte,motif):
225   """ 
226      Retourne la chaine de caractères texte entourée d'un cadre formés
227      d'éléments 'motif'
228   """
229   texte = justify_text(texte,cesure=80)
230   lignes = string.split(texte,'\n')
231   longueur = 0
232   for ligne in lignes :
233     if len(ligne)> longueur : longueur = len(ligne)
234   longueur = longueur + 4
235   txt = motif*longueur+'\n'
236   for ligne in lignes :
237     txt = txt + motif + ' '+ligne+' '*(longueur-len(motif+ligne)-2)+motif+'\n'
238   txt = txt + motif*longueur+'\n'
239   return txt
240
241
242
243
244 separateurs=(' ',',','/')
245 def split(ligne,cesure):
246        ligne= string.rstrip(ligne)
247        if len(ligne) <= cesure :
248           return ligne
249        else:
250           coupure=cesure
251           while ligne[coupure] not in separateurs and coupure > 0:
252              coupure = coupure - 1
253           if coupure == 0:
254              # Il faut augmenter la cesure
255              coupure =cesure
256              while ligne[coupure] not in separateurs and coupure < len(ligne)-1 :
257                 coupure = coupure + 1
258           if coupure == len(ligne)-1:
259              return ligne
260           else:
261              return ligne[:coupure+1]+ '\n' + split(ligne[coupure+1:],cesure)
262
263 def justify_text(texte='',cesure=50):
264        texte = string.strip(texte)
265        liste_lignes = string.split(texte,'\n')
266        l=[split(l,cesure) for l in liste_lignes]
267        texte_justifie=string.join(l,'\n')
268        return texte_justifie
269
270 def encadre_message(texte,motif):
271   """
272      Retourne la chaine de caractères texte entourée d'un cadre formés
273      d'éléments 'motif'
274   """
275   texte = justify_text(texte,cesure=80)
276   lignes = string.split(texte,'\n')
277   longueur = 0
278   for ligne in lignes :
279     ligne=string.rstrip(ligne)
280     if len(ligne)> longueur : longueur = len(ligne)
281   longueur = longueur + 4
282   txt = motif*longueur+'\n'
283   for ligne in lignes :
284     txt = txt + motif + ' '+ligne+' '*(longueur-len(motif+ligne)-2)+motif+'\n'
285   txt = txt + motif*longueur+'\n'
286   return txt
287
288
289
290