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