X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=Noyau%2FN_CR.py;h=95aa455a633cb99e08866a03772377e0c3537cc9;hb=5a28801efd8fd7e6487d1957dabac40b1f932cb4;hp=c75740519110e00393073924ee802818f9c17b0b;hpb=2446a0c7137fa3418368ec577194a6d00e54ed65;p=tools%2Feficas.git diff --git a/Noyau/N_CR.py b/Noyau/N_CR.py index c7574051..95aa455a 100644 --- a/Noyau/N_CR.py +++ b/Noyau/N_CR.py @@ -1,290 +1,260 @@ -#@ MODIF N_CR Noyau DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS -# -*- coding: iso-8859-1 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. +# coding=utf-8 +# Copyright (C) 2007-2017 EDF R&D # -# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT -# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF -# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. # -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com """ Ce module contient la classe compte-rendu de validation """ -import string - -class CR : - """ - Classe servant à la construction et à l'affichage des objets Comptes-rendus - """ - def __init__(self,verbeux = 'non',debut='',fin='',dec=' '): - """ - Attributs - - verbeux - - debut - - fin - - dec - """ - self.verbeux = verbeux - self.debut=debut - self.fin=fin - self.dec=dec - self.crok=[] - self.crwarn=[] - self.crfatal=[] - self.crexception=[] - self.subcr=[] - - def ok(self,comment): - """ Ajoute un commentaire OK à la liste crok""" - self.crok.append(comment) - - def warn(self,comment): - """ Ajoute un commentaire Warning à la liste crwarn""" - self.crwarn.append(comment) - - def fatal(self,comment): - """ Ajoute un commentaire Erreur Fatale à la liste crfatal""" - self.crfatal.append(comment) - - def exception(self,comment): - """ Ajoute un commentaire Exception à la liste crexception""" - self.crexception.append(comment) - - def add(self,cr): - """ Ajoute un objet CR à la liste subcr :il s'agit de l'objet CR d'un fils de self """ - self.subcr.append(cr) - - def estvide(self): - """ - Retourne 1 si self ne contient aucun message grave (fatal ou exception) - et aucun CR qui en contienne, 0 sinon - """ - if self.crexception : return 0 - if self.crfatal : return 0 - for s in self.subcr : - if not s.estvide(): return 0 - return 1 - - def purge(self): - """ - Purge complètement le CR sauf les exceptions - """ - self.debut='' - self.fin='' - self.dec=' ' - self.crok=[] - self.crwarn=[] - self.crfatal=[] - self.subcr=[] - - def beautifie_messages(self): - """ - Beautifie les messages stockés dans crok,crfatal,crexception et crwarn - """ - l=[] - for mess in self.crok: - l.append(mess+'\n') - self.crok_belle=l - l=[] - for mess in self.crwarn: - l.append(encadre_message(mess,'*')) - self.crwarn_belle = l - l=[] - for mess in self.crfatal: - l.append(encadre_message(mess,'!')) - self.crfatal_belle = l - l=[] - for mess in self.crexception: - l.append(encadre_message(mess,'!')) - self.crexception_belle = l - - def indent(self,s): - """ - Insère en tete de chaque ligne du texte s la chaine self.dec - """ - l = string.split(s,'\n') - return self.dec+string.join(l,'\n'+self.dec)[:-3] - - def __str__(self): - """ - Retourne une chaine de caractères décorée et représentative de self - """ - s='' - self.beautifie_messages() - s=s+string.join(self.crok_belle,'') - s=s+string.join(self.crwarn_belle,'') - s=s+string.join(self.crfatal_belle,'') - s=s+string.join(self.crexception_belle,'') - for subcr in self.subcr: - if self.verbeux == 'oui': - s=s+str(subcr)+'\n' - else: +from __future__ import absolute_import +try : + from builtins import str + from builtins import object +except : + pass +import six + + +class CR(object): + + """ + Classe servant a la construction et a l'affichage des objets Comptes-rendus + """ + + def __init__(self, verbeux='non', debut='', fin='', dec=' '): + """ + Attributs + - verbeux + - debut + - fin + - dec + """ + self.verbeux = verbeux + self.debut = debut + self.fin = fin + self.dec = dec + self.crok = [] + self.crwarn = [] + self.crfatal = [] + self.crexception = [] + self.subcr = [] + + def ok(self, comment): + """ Ajoute un commentaire OK a la liste crok""" + self.crok.append(comment) + + def warn(self, comment): + """ Ajoute un commentaire Warning a la liste crwarn""" + self.crwarn.append(comment) + + def fatal(self, comment, *args): + """Ajoute un commentaire Erreur Fatale a la liste crfatal a formater""" + self.crfatal.append(comment) + self.crfatal.append(str( *args)) + + def exception(self, comment): + """ Ajoute un commentaire Exception a la liste crexception""" + self.crexception.append(comment) + + def add(self, cr): + """ Ajoute un objet CR a la liste subcr :il s'agit de l'objet CR d'un fils de self """ + self.subcr.append(cr) + + def estvide(self): + """ + Retourne 1 si self ne contient aucun message grave (fatal ou exception) + et aucun CR qui en contienne, 0 sinon + """ + if self.crexception: + return 0 + if self.crfatal: + return 0 + for s in self.subcr: + if not s.estvide(): + return 0 + return 1 + + def purge(self): + """ + Purge complètement le CR sauf les exceptions + """ + self.debut = '' + self.fin = '' + self.dec = ' ' + self.crok = [] + self.crwarn = [] + self.crfatal = [] + self.subcr = [] + + def beautifieMessages(self): + """ + Beautifie les messages stockés dans crok,crfatal,crexception et crwarn + """ + l = [] + for mess in self.crok: + l.append(mess + '\n') + self.crok_belle = l + l = [] + for mess in self.crwarn: + l.append(encadreMessage(mess, '*')) + self.crwarn_belle = l + l = [] + for mess in self.crfatal: + l.append(encadreMessage(mess, '!')) + self.crfatal_belle = l + l = [] + for mess in self.crexception: + l.append(encadreMessage(mess, '!')) + self.crexception_belle = l + + def indent(self, s): + """ + Insère en tete de chaque ligne du texte s la chaine self.dec + """ + l = s.split( '\n') + a='\n' + self.dec + return self.dec + a.join(l)[:-3] + + def __unicode__(self): + """ + Retourne une chaine de caractères décorée et représentative de self + """ + s = '' + self.beautifieMessages() + s = s + ''.join(self.crok_belle) + s = s + ''.join(self.crwarn_belle) + s = s + ''.join(self.crfatal_belle) + s = s + ''.join(self.crexception_belle) + for subcr in self.subcr: + if self.verbeux == 'oui': + s = s + six.text_type(subcr) + '\n' + else: + if not subcr.estvide(): + s = s + six.text_type(subcr) + if s != '': + s = self.debut + '\n' + self.indent(s) + self.fin + '\n' + else: + s = self.debut + '\n' + self.fin + '\n' + return s + + def __str__(self): + """Return the report representation""" + txt = self.__unicode__() + return txt + + def report(self, decalage=2): + """ + Retourne une chaine de caractères non encadrée mais représentative de self + """ + s = '' + # on stocke dans s les messages de premier niveau + for mess in self.crok: + s = s + decalage * self.dec + mess + self.dec + '\n' + for mess in self.crwarn: + s = s + decalage * self.dec + mess + self.dec + '\n' + for mess in self.crfatal: + s = s + decalage * self.dec + mess + self.dec + '\n' + for mess in self.crexception: + s = s + decalage * self.dec + mess + self.dec + '\n' + # on récupère les messages des sous comptes-rendus ... + for subcr in self.subcr: if not subcr.estvide(): - s=s+str(subcr) - if s != '': - s=self.debut+'\n'+self.indent(s)+self.fin+'\n' - else : - s=self.debut+'\n'+self.fin+'\n' - return s - - def report(self,decalage = 2): - """ - Retourne une chaine de caractères non encadrée mais représentative de self - """ - s='' - # on stocke dans s les messages de premier niveau - for mess in self.crok : - s=s + decalage*self.dec + mess + self.dec + '\n' - for mess in self.crwarn: - s=s + decalage*self.dec + mess + self.dec + '\n' - for mess in self.crfatal: - s=s + decalage*self.dec + mess + self.dec + '\n' - for mess in self.crexception: - s=s + decalage*self.dec + mess + self.dec + '\n' - # on récupère les messages des sous comptes-rendus ... - for subcr in self.subcr: - if not subcr.estvide(): - s=s+subcr.report(decalage = decalage + 1) - # on rajoute les flags de début et de fin ... (si self n'est pas vide) - if not self.estvide() : - s = (decalage-1)*self.dec+self.debut+'\n'+s+ \ - (decalage-1)*self.dec+self.fin+'\n' - return s - - def get_mess_fatal(self): - """ - Retourne une chaine de caractères contenant les messages de - la liste crfatal (du dernier au premier) - """ - self.crfatal.reverse() - s='' - for elem in self.crfatal : - s=s+elem - self.crfatal.reverse() - return s - - def get_mess_exception(self): - """ - Retourne une chaine de caractères contenant les messages - de la liste crexception (du dernier au premier) - """ - self.crexception.reverse() - s='' - for elem in self.crexception : - s=s+elem - self.crexception.reverse() - return s - - - - -def justify_text_old(texte='',cesure=50): - """ - Prend la chaine de caractères 'texte' et la retourne avec un retour chariot - tous les 'cesure' caractères s'il y a lieu (le retour chariot est placé dans un blanc - et non au milieu d'un mot - """ - texte = string.strip(texte) - if len(texte) < cesure : return texte - liste_lignes = string.split(texte,'\n') - texte_justifie = '' - for ligne in liste_lignes : - ligne = string.strip(ligne) - if len(ligne) <= cesure : - texte_justifie = texte_justifie + ligne + '\n' - continue - longueur = 0 - new_text = '' - liste_mots = string.split(ligne,' ') - for mot in liste_mots : - new_longueur = longueur + len(mot)+1 - if new_longueur < cesure : - new_text = new_text+' '+mot - longueur = longueur + len(mot) + 1 - else : - longueur = 0 - new_text = new_text + '\n'+mot - texte_justifie = texte_justifie + string.strip(new_text) + '\n' - return texte_justifie[0:-1] - -def encadre_message_old(texte,motif): - """ - Retourne la chaine de caractères texte entourée d'un cadre formés - d'éléments 'motif' - """ - texte = justify_text(texte,cesure=80) - lignes = string.split(texte,'\n') - longueur = 0 - for ligne in lignes : - if len(ligne)> longueur : longueur = len(ligne) - longueur = longueur + 4 - txt = motif*longueur+'\n' - for ligne in lignes : - txt = txt + motif + ' '+ligne+' '*(longueur-len(motif+ligne)-2)+motif+'\n' - txt = txt + motif*longueur+'\n' - return txt - - - - -separateurs=(' ',',','/') -def split(ligne,cesure): - ligne= string.rstrip(ligne) - if len(ligne) <= cesure : - return ligne - else: - coupure=cesure - while ligne[coupure] not in separateurs and coupure > 0: - coupure = coupure - 1 - if coupure == 0: - # Il faut augmenter la cesure - coupure =cesure - while ligne[coupure] not in separateurs and coupure < len(ligne)-1 : + s = s + subcr.report(decalage=decalage + 1) + # on rajoute les flags de début et de fin ... (si self n'est pas vide) + if not self.estvide(): + s = (decalage - 1) * self.dec + self.debut + '\n' + s + \ + (decalage - 1) * self.dec + self.fin + '\n' + return s + + def getMessFatal(self): + """ + Retourne une chaine de caractères contenant les messages de + la liste crfatal (du dernier au premier) + """ + self.crfatal.reverse() + s = '' + for elem in self.crfatal: + s = s + elem + self.crfatal.reverse() + return s + + def getMessException(self): + """ + Retourne une chaine de caractères contenant les messages + de la liste crexception (du dernier au premier) + """ + self.crexception.reverse() + s = '' + for elem in self.crexception: + s = s + elem + self.crexception.reverse() + return s + + +separateurs = (' ', ',', '/') + + +def split(ligne, cesure): + ligne = ligne.rstrip() + if len(ligne) <= cesure: + return ligne + else: + coupure = cesure + while ligne[coupure] not in separateurs and coupure > 0: + coupure = coupure - 1 + if coupure == 0: + # Il faut augmenter la cesure + coupure = cesure + while ligne[coupure] not in separateurs and coupure < len(ligne) - 1: coupure = coupure + 1 - if coupure == len(ligne)-1: - return ligne - else: - return ligne[:coupure+1]+ '\n' + split(ligne[coupure+1:],cesure) - -def justify_text(texte='',cesure=50): - texte = string.strip(texte) - liste_lignes = string.split(texte,'\n') - l=[split(l,cesure) for l in liste_lignes] - texte_justifie=string.join(l,'\n') - return texte_justifie - -def encadre_message(texte,motif): - """ - Retourne la chaine de caractères texte entourée d'un cadre formés - d'éléments 'motif' - """ - texte = justify_text(texte,cesure=80) - lignes = string.split(texte,'\n') - longueur = 0 - for ligne in lignes : - ligne=string.rstrip(ligne) - if len(ligne)> longueur : longueur = len(ligne) - longueur = longueur + 4 - txt = motif*longueur+'\n' - for ligne in lignes : - txt = txt + motif + ' '+ligne+' '*(longueur-len(motif+ligne)-2)+motif+'\n' - txt = txt + motif*longueur+'\n' - return txt - - - - + if coupure == len(ligne) - 1: + return ligne + else: + return ligne[:coupure + 1] + '\n' + split(ligne[coupure + 1:], cesure) + + +def justifyText(texte='', cesure=50): + if not isinstance (texte,str) : texte = ''.join(texte) + texte = texte.strip() + liste_lignes = texte.split('\n') + l = [split(l, cesure) for l in liste_lignes] + texte_justifie = '\n'.join(l) + return texte_justifie + + +def encadreMessage(texte, motif): + """ + Retourne la chaine de caractères texte entourée d'un cadre formés + d'éléments 'motif' + """ + texte = justifyText(texte, cesure=80) + if texte.strip() == "" : return '' + lignes = texte.split( '\n') + longueur = 0 + for ligne in lignes: + ligne = ligne.rstrip() + if len(ligne) > longueur: + longueur = len(ligne) + longueur = longueur + 4 + txt = motif * longueur + '\n' + for ligne in lignes: + if ligne == '' : continue + txt = txt + motif + ' ' + ligne + ' ' * \ + (longueur - len(motif + ligne) - 2) + motif + '\n' + txt = txt + motif * longueur + '\n' + return txt