X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=InterfaceQT4%2Freadercata.py;h=9137cd3e31990d0043ff055ff26c6d5dbf71f790;hb=4aec96ddfcd8ae0e817b0aaf827f008015a4bf5b;hp=052d2f1d26d135918e93a15256630393e42b7813;hpb=69ed0ccae7884aee37bbe54cb1af2983cb51492d;p=tools%2Feficas.git diff --git a/InterfaceQT4/readercata.py b/InterfaceQT4/readercata.py index 052d2f1d..9137cd3e 100644 --- a/InterfaceQT4/readercata.py +++ b/InterfaceQT4/readercata.py @@ -1,23 +1,22 @@ # -*- coding: utf-8 -*- -# 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. +# Copyright (C) 2007-2013 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 sert a lire un catalogue et a construire un objet CataItem pour Eficas. @@ -29,143 +28,166 @@ import os,sys,py_compile import traceback import cPickle import re +import types # Modules Eficas -import prefs from Noyau.N_CR import CR -from Editeur.utils import init_rep_cata_dev +from Editeur.catadesc import CatalogDescription -from Editeur import analyse_catalogue -from Editeur import autre_analyse_cata -from Editeur import uiinfo +import analyse_catalogue +import analyse_catalogue_initial +import autre_analyse_cata +import uiinfo from monChoixCata import MonChoixCata +from Extensions.i18n import tr +from Extensions.eficas_exception import EficasException + +from determine import monEnvQT5 +if monEnvQT5 : + from PyQt5.QtWidgets import QMessageBox, QApplication, QDialog +else : + from PyQt4.QtGui import * -from PyQt4 import * -from PyQt4.QtGui import * -from PyQt4.QtCore import * -version="14" class READERCATA: def __init__(self,QWParent, appliEficas): self.QWParent=QWParent self.appliEficas=self.QWParent.appliEficas + self.VERSION_EFICAS=self.appliEficas.VERSION_EFICAS self.code=self.QWParent.code - self.QWParent.format_fichier='python' + self.ssCode=self.appliEficas.ssCode + self.appliEficas.format_fichier='python' + self.mode_nouv_commande=self.appliEficas.CONFIGURATION.mode_nouv_commande self.version_code=self.QWParent.version_code self.version_cata=None self.fic_cata=None self.OpenCata() self.cataitem=None + if self.code=="TELEMAC": self.cree_dico_inverse() def OpenCata(self): """ - Ouvre le catalogue standard du code courant, cad le catalogue présent - dans le répertoire Cata + Ouvre le catalogue standard du code courant, cad le catalogue present + dans le repertoire Cata """ - message1 = "Compilation des fichiers Eficas \n\n Veuillez patienter ..." liste_cata_possibles=[] + self.Commandes_Ordre_Catalogue=[] + + all_cata_list = [] for catalogue in self.appliEficas.CONFIGURATION.catalogues: - if catalogue[0] == self.code : - liste_cata_possibles.append(catalogue) + if isinstance(catalogue, CatalogDescription): + all_cata_list.append(catalogue) + elif isinstance(catalogue, types.TupleType): + all_cata_list.append(CatalogDescription.create_from_tuple(catalogue)) + else: + print "Catalog description cannot be interpreted: ", catalogue + + # This filter is only useful for codes that have subcodes (like MAP). + # Otherwise, the "code" attribute of the catalog description can (should) be None. + if self.ssCode is None: + liste_cata_possibles = all_cata_list + else: + for catalogue in all_cata_list: + if catalogue.code == self.code and catalogue.file_format == self.ssCode: + liste_cata_possibles.append(catalogue) if len(liste_cata_possibles)==0: - QMessageBox.critical( self.QWParent, "Import du catalogue","Pas de catalogue defini pour le code %s" % self.code) + QMessageBox.critical(self.QWParent, tr("Import du catalogue"), + tr("Pas de catalogue defini pour le code ") + self.code) self.appliEficas.close() - sys.exit(1) + if self.appliEficas.salome == 0 : + sys.exit(1) + return + if self.version_code is not None: # La version a ete fixee for cata in liste_cata_possibles: - if self.version_code == cata[1]: - self.fic_cata = cata[2] - self.appliEficas.format_fichier=cata[3] - elif len(liste_cata_possibles)==1: - self.fic_cata = liste_cata_possibles[0][2] - self.version_code = liste_cata_possibles[0][1] - self.QWParent.format_fichier=liste_cata_possibles[0][3] - lab=QString("Eficas V1.") - lab+=QString(version) - lab+=QString(" pour ") - lab+=QString(self.code) - lab+=QString(" avec le catalogue ") - lab+=self.version_code - try : - # souci pour les includes - self.appliEficas.setWindowTitle(lab) - except : - pass + if self.version_code == cata.identifier: + self.fic_cata = cata.cata_file_path + self.appliEficas.format_fichier = cata.file_format + self.appliEficas.format_fichier_in = cata.file_format_in else: - # plusieurs catalogues sont disponibles : il faut demander a l'utilisateur - # lequel il veut utiliser ... - self.ask_choix_catalogue() + cata_choice_list = [] + for cata in liste_cata_possibles: + if cata.selectable: + if cata.default: + cata_choice_list.insert(0, cata) + else : + cata_choice_list.append(cata) + if len(cata_choice_list) == 0: + QMessageBox.critical(self.QWParent, tr("Import du catalogue"), + tr("Aucun catalogue trouve")) + self.appliEficas.close() + if self.appliEficas.salome == 0 : + sys.exit(1) + elif len(cata_choice_list) == 1: + self.fic_cata = cata_choice_list[0].cata_file_path + self.version_code = cata_choice_list[0].identifier + self.appliEficas.format_fichier = cata_choice_list[0].file_format + self.appliEficas.format_fichier_in = cata_choice_list[0].file_format_in + else: + # plusieurs catalogues sont disponibles : il faut demander a l'utilisateur + # lequel il veut utiliser ... + self.ask_choix_catalogue(cata_choice_list) if self.fic_cata == None : - print "Pas de catalogue pour code %s, version %s" %(self.code,self.version_code) - sys.exit(0) + if self.appliEficas.salome == 0 : + print "Pas de catalogue pour code %s, version %s" %(self.code,self.version_code) + sys.exit(1) + else : + self.appliEficas.close() + return - self.determineMater() - - - # détermination de fic_cata_c et fic_cata_p - self.fic_cata_c = self.fic_cata + 'c' - self.fic_cata_p = os.path.splitext(self.fic_cata)[0]+'_pickled.py' + if self.code == "ASTER" : self.determineMater() # import du catalogue self.cata = self.import_cata(self.fic_cata) if not self.cata : - QMessageBox.critical( self.QWParent, "Import du catalogue","Impossible d'importer le catalogue %s" %self.fic_cata) + QMessageBox.critical( self.QWParent, tr("Import du catalogue"),tr("Impossible d'importer le catalogue ")+ self.fic_cata) self.appliEficas.close() - sys.exit(1) + if self.appliEficas.salome == 0 : + sys.exit(1) # - # analyse du catalogue (ordre des mots-clés) + # analyse du catalogue (ordre des mots-cles) # # Retrouve_Ordre_Cata_Standard fait une analyse textuelle du catalogue - # remplacé par Retrouve_Ordre_Cata_Standard_autre qui utilise une numerotation - # des mots clés a la création + # remplace par Retrouve_Ordre_Cata_Standard_autre qui utilise une numerotation + # des mots cles a la creation self.Retrouve_Ordre_Cata_Standard_autre() + if self.mode_nouv_commande== "initial" : self.Retrouve_Ordre_Cata_Standard() + if hasattr(self.cata, 'Ordre_Des_Commandes') : self.Ordre_Des_Commandes=self.cata.Ordre_Des_Commandes + else : self.Ordre_Des_Commandes=None + + if hasattr(self.cata, 'Classement_Commandes_Ds_Arbre') : + self.Classement_Commandes_Ds_Arbre=self.cata.Classement_Commandes_Ds_Arbre + else : self.Classement_Commandes_Ds_Arbre=() + #print self.cata.Ordre_Des_Commandes # - # analyse des données liées a  l'IHM : UIinfo + # analyse des donnees liees l'IHM : UIinfo # uiinfo.traite_UIinfo(self.cata) # # traitement des clefs documentaires # - self.traite_clefs_documentaires() + if self.code == "ASTER" : self.traite_clefs_documentaires() + self.cata=(self.cata,) - # chargement et analyse des catalogues développeur (le cas échéant) - # - if self.appliEficas.CONFIGURATION.isdeveloppeur == 'OUI' : - init_rep_cata_dev(self.fic_cata,self.appliEficas.CONFIGURATION.path_cata_dev) - fic_cata_dev = os.path.join(self.appliEficas.CONFIGURATION.path_cata_dev,'cata_developpeur.py') - if os.path.isfile(fic_cata_dev): - # il y a bien un catalogue développeur : il faut récupérer le module_object associé ... - test = self.compile_cata(fic_cata_dev,fic_cata_dev+'c') - if not test : - showinfo("Compilation catalogue développeur", - "Erreur dans la compilation du catalogue développeur") - self.cata = (self.cata,) - else: - self.cata_dev =self.import_cata(fic_cata_dev) - #self.Retrouve_Ordre_Cata_Developpeur() - self.Retrouve_Ordre_Cata_Developpeur_autre() - self.cata = (self.cata,self.cata_dev) - else: - self.cata = (self.cata,) - else: - self.cata = (self.cata,) - titre="Eficas V1.14 avec le catalogue " + os.path.basename(self.fic_cata) + self.titre=self.VERSION_EFICAS+" "+tr( " avec le catalogue ") + os.path.basename(self.fic_cata) if self.appliEficas.top: - self.appliEficas.setWindowTitle(titre) - self.appliEficas.titre=titre + self.appliEficas.setWindowTitle(self.titre) + self.appliEficas.titre=self.titre + self.QWParent.titre=self.titre def determineMater(self) : # Determinination du repertoire materiau v_codeSansPoint=self.version_code + if v_codeSansPoint == None : return v_codeSansPoint=re.sub("\.","",v_codeSansPoint) chaine="rep_mat_"+v_codeSansPoint if hasattr(self.appliEficas.CONFIGURATION,chaine): @@ -181,11 +203,35 @@ class READERCATA: def import_cata(self,cata): """ - Réalise l'import du catalogue dont le chemin d'acca¨s est donné par cata + Realise l'import du catalogue dont le chemin d'acces est donne par cata """ nom_cata = os.path.splitext(os.path.basename(cata))[0] rep_cata = os.path.dirname(cata) sys.path[:0] = [rep_cata] + self.appliEficas.listeAEnlever.append(rep_cata) + + + if sys.modules.has_key(nom_cata): + del sys.modules[nom_cata] + for k in sys.modules.keys(): + if k[0:len(nom_cata)+1] == nom_cata+'.': + del sys.modules[k] + + mesScriptsNomFichier='mesScripts_'+self.code.upper() + if self.code == "ASTER" : + self.appliEficas.rep_scripts=os.path.join(rep_cata,nom_cata) + sys.path[:0] = [self.appliEficas.rep_scripts] + try : + self.appliEficas.mesScripts[self.code]=__import__(mesScriptsNomFichier) + except: + pass + sys.path=sys.path[1:] + else : + try : + self.appliEficas.mesScripts[self.code]=__import__(mesScriptsNomFichier) + except: + pass + try : o=__import__(nom_cata) return o @@ -193,197 +239,137 @@ class READERCATA: traceback.print_exc() return 0 + + def Retrouve_Ordre_Cata_Standard_autre(self): """ - Construit une structure de données dans le catalogue qui permet - a  EFICAS de retrouver l'ordre des mots-clés dans le texte du catalogue. - Pour chaque entité du catlogue on crée une liste de nom ordre_mc qui - contient le nom des mots clés dans le bon ordre + Construit une structure de donnees dans le catalogue qui permet + a EFICAS de retrouver l'ordre des mots-cles dans le texte du catalogue. + Pour chaque entite du catlogue on cree une liste de nom ordre_mc qui + contient le nom des mots cles dans le bon ordre """ self.cata_ordonne_dico,self.appliEficas.liste_simp_reel=autre_analyse_cata.analyse_catalogue(self.cata) + #print self.cata_ordonne_dico,self.appliEficas.liste_simp_reel def Retrouve_Ordre_Cata_Standard(self): """ - Retrouve l'ordre des mots-clés dans le catalogue, cad : - - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer - l'ordre des mots-clés dans le catalogue - - s'il n'a pas été modifié, relie le fichier pickle - """ - time1 = os.path.getmtime(self.fic_cata) - try : - time2 = os.path.getmtime(self.fic_cata_p) - except: - time2 = 0 - if time2 > time1 : - # l'objet catalogue n'a pas été modifié depuis le dernier "pickle" - self.Get_Ordre_Cata() - else : - # le catalogue a été modifié depuis le dernier "pickle" : - # il faut retrouver l'ordre du catalogue et refaire pickle - self.Get_Ordre_Cata(mode='cata') - self.appliEficas.affiche_infos("Catalogue standard chargé") - - def Retrouve_Ordre_Cata_Developpeur(self): - """ - Retrouve l'ordre des mots-clés dans le catalogue, cad : - - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer - l'ordre des mots-clés dans le catalogue - - s'il n'a pas été modifié, relie le fichier pickle - """ - if self.code != 'ASTER' : return - fic_cata = os.path.join(self.appliEficas.CONFIGURATION.path_cata_dev,'cata_developpeur.py') - message="Chargement catalogue développeur présent dans :\n %s..." % self.appliEficas.CONFIGURATION.path_cata_dev - cata_dev_ordonne = analyse_cata.analyse_catalogue(self,self.fic_cata) - self.cata_dev_ordonne_cr = cata_dev_ordonne.cr - cata_dev_ordonne_dico = cata_dev_ordonne.entites - self.cata_ordonne_dico.update(cata_dev_ordonne_dico) - self.appliEficas.affiche_infos(" catalogue(s) développeur(s) chargé(s)" ) - - def Retrouve_Ordre_Cata_Developpeur_autre(self): + Retrouve l'ordre des mots-cles dans le catalogue, cad : + Attention s appuie sur les commentaires """ - Retrouve l'ordre des mots-clés dans le catalogue, cad : - - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer - l'ordre des mots-clés dans le catalogue - - s'il n'a pas été modifié, relie le fichier pickle - """ - if self.code != 'ASTER' : return - message="Chargement catalogue développeur présent dans :\n %s..." % self.appliEficas.CONFIGURATION.path_cata_dev - cata_dev_ordonne_dico,self.appliEficas.liste_simp_reel=autre_analyse_cata.analyse_catalogue(self.cata) - self.cata_ordonne_dico.update(cata_dev_ordonne_dico) - self.appliEficas.affiche_infos(" catalogue(s) développeur(s) chargé(s)" ) + nom_cata = os.path.splitext(os.path.basename(self.fic_cata))[0] + rep_cata = os.path.dirname(self.fic_cata) + self.Commandes_Ordre_Catalogue = analyse_catalogue_initial.analyse_catalogue(self.fic_cata) + #print self.Commandes_Ordre_Catalogue - def Get_Ordre_Cata(self,mode='pickle'): - """ - Retrouve l'ordre du catalogue : - - mode='pickle ': tente de relire le fichier pickle et sinon lance l'analyse du catalogue - - mode='cata' : force l'analyse du catalogue directement sans relire le pickle + def ask_choix_catalogue(self, cata_choice_list): """ - if mode == 'pickle' : - try: - f = open(self.fic_cata_p) - u = cPickle.Unpickler(f) - self.cata_ordonne_dico = u.load() - f.close() - except : - # on peut ne pas arriver a  relire le fichier pickle s'il a été altéré - # ou (le plus probable) s'il a été créé sous un autre OS - self.Get_Ordre_Cata(mode='cata') - elif mode == 'cata': - cata_ordonne = analyse_catalogue.analyse_catalogue(self,self.fic_cata) - self.cata_ordonne_cr = cata_ordonne.cr - self.cata_ordonne_dico = cata_ordonne.entites - f = open(self.fic_cata_p,'w+') - p = cPickle.Pickler(f) - p.dump(self.cata_ordonne_dico) - f.close() - else : - raise Exception("Appel a  un mode inconnu de Get_Ordre_Cata : %s" % mode) - return - - def ask_choix_catalogue(self): - """ - Ouvre une fenetre de sélection du catalogue dans le cas oa¹ plusieurs - ont été définis dans Accas/editeur.ini + Ouvre une fenetre de selection du catalogue dans le cas où plusieurs + ont ete definis dans Accas/editeur.ini """ - # construction du dictionnaire et de la liste des catalogues - self.dico_catalogues = {} - defaut = None - for catalogue in self.appliEficas.CONFIGURATION.catalogues: - if catalogue[0] == self.code : - self.dico_catalogues[catalogue[1]] = catalogue - if len(catalogue) == 5 : - if catalogue[4]=='defaut' : defaut = catalogue[1] - liste_choix = self.dico_catalogues.keys() - liste_choix.sort() - - lab=QString("Eficas V1.") - lab+=QString(version) - lab+=QString(" pour ") - lab+=QString(self.code) - lab+=QString(" avec le catalogue ") - - # teste si plusieurs catalogues ou non - if len(liste_choix) == 0: - QMessageBox.critical( self.QWParent, "", "Aucun catalogue déclaré pour %s" %self.code) - self.appliEficas.close() - sys.exit(1) - - # création d'une boite de dialogue modale - widgetChoix=MonChoixCata(liste_choix,self, self.appliEficas, "", True ) + code = getattr(self.appliEficas.CONFIGURATION, "code", None) + if code != None : + title=tr("Choix d une version du code ")+str(code) + else : + title=tr("Choix d une version ") + + widgetChoix = MonChoixCata(self.appliEficas, [cata.user_name for cata in cata_choice_list], title) ret=widgetChoix.exec_() - lab=QString("Eficas V1.") - lab+=QString(version) - lab+=QString(" pour ") - lab+=QString(self.code) - lab+=QString(" avec le catalogue ") + lab=str(self.VERSION_EFICAS)+" " + lab+=tr(" pour ") + lab+=str(self.code) + lab+=tr(" avec le catalogue ") if ret == QDialog.Accepted: - self.version_cata=str(self.version_cata) - self.fic_cata = self.dico_catalogues[self.version_cata][2] + cata = cata_choice_list[widgetChoix.CBChoixCata.currentIndex()] + self.version_cata = cata.identifier + self.fic_cata = cata.cata_file_path self.version_code = self.version_cata - self.appliEficas.format_fichier = self.dico_catalogues[self.version_cata][3] + self.appliEficas.format_fichier = cata.file_format + self.appliEficas.format_fichier_in = cata.file_format_in lab+=self.version_cata self.appliEficas.setWindowTitle(lab) #qApp.mainWidget().setCaption(lab) - else : - sys.exit(0) - - - def compile_cata(self,cata,catac): - """ - Teste si le catalogue a bien besoin d'etre recompilé et si oui, le compile et - affiche un message dans le splash . Retourne 1 si la compilation s'est bien déroulée, - 0 sinon. - """ - time1 = os.path.getmtime(cata) - try: - time2 = os.path.getmtime(catac) - except: - time2 = 0 - if time1 > time2: - try: - # le catalogue doit etre recompilé avant d'etre importé - if self.QWParent.test == 0 : - splash._splash.configure(text="Compilation du catalogue\nCela peut prendre plusieurs secondes ...") - py_compile.compile(cata) - except: - return 0 - return 1 - - - - def visuCRCATA(self): - """ - Méthode permettant l'affichage du rapport de validation - """ - cr = CR( debut = "Début rapport de validation du catalogue", - fin = "Fin rapport de validation du catalogue") - titre="rapport de validation du catalogue" - if hasattr(self,'cata_ordonne_cr') : - cr.add(self.cata_ordonne_cr) - if hasattr(self,'cata_dev_ordonne_cr') : - cr.add(self.cata_dev_ordonne_cr) - for cata in self.cata: - if hasattr(cata,'JdC'): - cr.add(cata.JdC.report()) - texte_cr = str(cr) - self.visu_texte_cr = Fenetre(self.appliEficas,titre=titre,texte=texte_cr) - + else: + raise EficasException() + def traite_clefs_documentaires(self): try: - self.fic_cata_clef=os.path.splitext(self.fic_cata_c)[0]+'_clefs_docu' - f=open(self.fic_cata_clef) + fic_doc='rep_doc_'+str(self.version_code) + self.fic_doc=getattr(self.appliEficas.CONFIGURATION,fic_doc ) + f=open(self.fic_doc) except: - #print "Pas de fichier associé contenant des clefs documentaires" + print "Pas de fichier associe contenant des clefs documentaires" return dict_clef_docu={} for l in f.readlines(): clef=l.split(':')[0] - docu=l.split(':')[1] - docu=docu[0:-1] + deb=l.find(':')+1 + docu=l[deb:-1] dict_clef_docu[clef]=docu for oper in self.cata.JdC.commandes: if dict_clef_docu.has_key(oper.nom): oper.docu=dict_clef_docu[oper.nom] + + def cree_dico_inverse(self): + self.dicoInverse={} + self.dicoMC={} + listeEtapes=self.cata[0].JdC.commandes + for e in self.cata[0].JdC.commandes: + #for e in (self.cata[0].JdC.commandes[0],): + #print e.nom + self.traite_entite(e) + #for e in self.cata[0].JdC.commandes: + # self.cree_rubrique(e,self.dico,0) + #print self.dicoInverse + + #from Extensions import localisation + #app=QApplication + # tres dommage A Revoir + #localisation.localise(app,"fr") + self.dicoInverseFrancais={} + self.dicoFrancaisAnglais={} + self.dicoAnglaisFrancais={} + for k in self.dicoInverse.keys(): + listefr=[] + for nom, obj in self.dicoInverse[k] : + listefr.append((tr(nom),obj)) + self.dicoFrancaisAnglais[tr(nom)]=nom + self.dicoAnglaisFrancais[nom]=tr(nom) + self.dicoInverseFrancais[tr(k)]=listefr + #print tr(k),listefr + if self.appliEficas.langue=="ang" : localisation.localise(app,"en") + + + + def traite_entite(self,e): + #print "_______________" + #print e + #print e.nom + boolIn=0 + for (nomFils, fils) in e.entites.items() : + self.dicoMC[nomFils]=fils + self.traite_entite(fils) + boolIn=1 + if boolIn==0 : + liste=[] + moi=e + while hasattr(moi,'pere') : + liste.append((moi.nom,moi)) + moi=moi.pere + liste.append((moi.nom,moi)) + self.dicoInverse[e.nom]=liste + + def cree_rubrique(self,e,dico, niveau): + from Accas import A_BLOC + decale=niveau*" " + #if niveau != 0 : + # if isinstance(e,A_BLOC.BLOC): print decale, e.condition + # else : print decale, e. nom + for (nom, fils) in e.entites.items() : + if fils.entites.items() != [] : self.cree_rubrique(fils,dico,niveau+1) + #else : print (niveau+1)*" ", nom + + +