X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=generator%2Fgenerator_python.py;h=460487299ac6e94d776ff8cff0e5fe9c9023649b;hb=600e4ce830f3fd5306578e54ee1769e859a0500a;hp=a0fbbf7ba6deb121e9462210cc04f73c1c26df4e;hpb=860a50d7df32b5c86f9ab536178d030ea882cae5;p=tools%2Feficas.git diff --git a/generator/generator_python.py b/generator/generator_python.py index a0fbbf7b..46048729 100644 --- a/generator/generator_python.py +++ b/generator/generator_python.py @@ -28,10 +28,8 @@ import types,string,re from Noyau import N_CR from Noyau.N_utils import repr_float -from Accas import ETAPE,PROC_ETAPE,MACRO_ETAPE,ETAPE_NIVEAU,JDC,FORM_ETAPE -from Accas import MCSIMP,MCFACT,MCBLOC,MCList,EVAL -from Accas import GEOM,ASSD,MCNUPLET -from Accas import COMMENTAIRE,PARAMETRE, PARAMETRE_EVAL,COMMANDE_COMM +import Accas +from Extensions.parametre import ITEM_PARAMETRE from Formatage import Formatage def entryPoint(): @@ -76,6 +74,7 @@ class PythonGenerator: fin='fin CR format python pour python') # Le texte au format python est stocké dans l'attribut text self.text='' + self.appli=None def writefile(self,filename): fp=open(filename,'w') @@ -90,6 +89,7 @@ class PythonGenerator: Si format vaut 'standard', retourne un texte obtenu par concaténation de la liste Si format vaut 'beautifie', retourne le meme texte beautifié """ + self.appli=obj.appli liste= self.generator(obj) if format == 'brut': self.text=liste @@ -109,41 +109,44 @@ class PythonGenerator: place (dépend des gouts !!!) """ # ATTENTION a l'ordre des tests : il peut avoir de l'importance (héritage) - if isinstance(obj,PROC_ETAPE): + if isinstance(obj,Accas.PROC_ETAPE): return self.generPROC_ETAPE(obj) - elif isinstance(obj,MACRO_ETAPE): - return self.generMACRO_ETAPE(obj) - elif isinstance(obj,FORM_ETAPE): + # Attention doit etre placé avant MACRO (raison : héritage) + elif isinstance(obj,Accas.FORM_ETAPE): return self.generFORM_ETAPE(obj) - elif isinstance(obj,ETAPE): + elif isinstance(obj,Accas.MACRO_ETAPE): + return self.generMACRO_ETAPE(obj) + elif isinstance(obj,Accas.ETAPE): return self.generETAPE(obj) - elif isinstance(obj,MCFACT): + elif isinstance(obj,Accas.MCFACT): return self.generMCFACT(obj) - elif isinstance(obj,MCList): + elif isinstance(obj,Accas.MCList): return self.generMCList(obj) - elif isinstance(obj,MCBLOC): + elif isinstance(obj,Accas.MCBLOC): return self.generMCBLOC(obj) - elif isinstance(obj,MCSIMP): + elif isinstance(obj,Accas.MCSIMP): return self.generMCSIMP(obj) - elif isinstance(obj,ASSD): + elif isinstance(obj,Accas.ASSD): return self.generASSD(obj) - elif isinstance(obj,ETAPE_NIVEAU): + elif isinstance(obj,Accas.ETAPE_NIVEAU): return self.generETAPE_NIVEAU(obj) - elif isinstance(obj,COMMENTAIRE): + elif isinstance(obj,Accas.COMMENTAIRE): return self.generCOMMENTAIRE(obj) # Attention doit etre placé avant PARAMETRE (raison : héritage) - elif isinstance(obj,PARAMETRE_EVAL): + elif isinstance(obj,Accas.PARAMETRE_EVAL): return self.generPARAMETRE_EVAL(obj) - elif isinstance(obj,PARAMETRE): + elif isinstance(obj,Accas.PARAMETRE): return self.generPARAMETRE(obj) - elif isinstance(obj,EVAL): + elif isinstance(obj,Accas.EVAL): return self.generEVAL(obj) - elif isinstance(obj,COMMANDE_COMM): + elif isinstance(obj,Accas.COMMANDE_COMM): return self.generCOMMANDE_COMM(obj) - elif isinstance(obj,JDC): + elif isinstance(obj,Accas.JDC): return self.generJDC(obj) - elif isinstance(obj,MCNUPLET): + elif isinstance(obj,Accas.MCNUPLET): return self.generMCNUPLET(obj) + elif isinstance(obj,ITEM_PARAMETRE): + return self.generITEM_PARAMETRE(obj) else: raise "Type d'objet non prévu",obj @@ -229,6 +232,9 @@ class PythonGenerator: else: return obj.nom + ' = '+ self.generator(obj.valeur) +';\n' + def generITEM_PARAMETRE(self,obj): + return repr(obj) + def generPARAMETRE(self,obj): """ Cette méthode convertit un PARAMETRE @@ -271,11 +277,11 @@ class PythonGenerator: str = 'reuse ='+ self.generator(obj.reuse) + ',' l.append(str) for v in obj.mc_liste: - if isinstance(v,MCBLOC) : + if isinstance(v,Accas.MCBLOC) : liste=self.generator(v) for mocle in liste : l.append(mocle) - elif isinstance(v,MCSIMP) : + elif isinstance(v,Accas.MCSIMP) : text=self.generator(v) l.append(v.nom+'='+text) else: @@ -296,13 +302,11 @@ class PythonGenerator: l=[] nom = obj.get_nom() if nom == '' : nom = 'sansnom' - if len(obj.mc_liste)>0: - l.append(nom + ' = FORMULE(') - s=obj.type_retourne + ' = ' + "'''" + obj.arguments + ' = ' + obj.corps+"'''" - l.append(s) - l.append(');') - else: - l.append(nom+' = FORMULE();') + l.append(nom + ' = FORMULE(') + for v in obj.mc_liste: + text=self.generator(v) + l.append(v.nom+'='+text) + l.append(');') return l def generMACRO_ETAPE(self,obj): @@ -310,7 +314,6 @@ class PythonGenerator: Cette méthode convertit une macro-étape en une liste de chaines de caractères à la syntaxe python """ - if obj.definition.nom == 'FORMULE' : return self.gen_formule(obj) try: if obj.sd == None: sdname='' @@ -326,11 +329,11 @@ class PythonGenerator: str = "reuse =" + self.generator(obj.reuse) + ',' l.append(str) for v in obj.mc_liste: - if isinstance(v,MCBLOC) : + if isinstance(v,Accas.MCBLOC) : liste=self.generator(v) for mocle in liste : l.append(mocle) - elif isinstance(v,MCSIMP) : + elif isinstance(v,Accas.MCSIMP) : text=self.generator(v) l.append(v.nom+'='+text) else: @@ -345,30 +348,6 @@ class PythonGenerator: l.append(');') return l - def gen_formule(self,obj): - """ - Méthode particuliere aux objets de type FORMULE - """ - try: - if obj.sd == None: - sdname='' - else: - sdname= self.generator(obj.sd) - except: - sdname='sansnom' - l=[] - label=sdname + ' = FORMULE(' - l.append(label) - for v in obj.mc_liste: - s='' - s= v.nom+':'+sdname+'('+v.valeur+')' - l.append(s) - if len(l) == 1: - l[0]=label+');' - else : - l.append(');') - return l - def generPROC_ETAPE(self,obj): """ Cette méthode convertit une PROC étape @@ -378,11 +357,11 @@ class PythonGenerator: label=obj.definition.nom+'(' l.append(label) for v in obj.mc_liste: - if isinstance(v,MCBLOC) : + if isinstance(v,Accas.MCBLOC) : liste=self.generator(v) for mocle in liste : l.append(mocle) - elif isinstance(v,MCSIMP) : + elif isinstance(v,Accas.MCSIMP) : text=self.generator(v) l.append(v.nom+'='+text) else: @@ -412,12 +391,12 @@ class PythonGenerator: l=[] l.append('_F(') for v in obj.mc_liste: - if not isinstance(v,MCSIMP) and not isinstance (v,MCBLOC) : + if not isinstance(v,Accas.MCSIMP) and not isinstance (v,Accas.MCBLOC) : # on est en présence d'une entite composée : on récupère une liste liste=self.generator(v) liste[0]=v.nom+'='+liste[0] l.append(liste) - elif isinstance(v,MCBLOC): + elif isinstance(v,Accas.MCBLOC): liste=self.generator(v) for arg in liste : l.append(arg) @@ -437,12 +416,12 @@ class PythonGenerator: Convertit un objet MCList en une liste de chaines de caractères à la syntaxe python """ - l=[] - str = '(' - l.append(str) - for mcfact in obj.data: - l.append(self.generator(mcfact)) - l.append('),') + if len(obj.data) > 1: + l=['('] + for mcfact in obj.data: l.append(self.generator(mcfact)) + l.append('),') + else: + l= self.generator(obj.data[0]) return l def generMCBLOC(self,obj): @@ -452,11 +431,11 @@ class PythonGenerator: """ l=[] for v in obj.mc_liste: - if isinstance(v,MCBLOC) : + if isinstance(v,Accas.MCBLOC) : liste=self.generator(v) for mocle in liste : l.append(mocle) - elif isinstance(v,MCList): + elif isinstance(v,Accas.MCList): liste=self.generator(v) liste[0]=v.nom+'='+liste[0] for mocle in liste : @@ -483,7 +462,7 @@ class PythonGenerator: s = s + "CO('"+ self.generator(val) +"')" elif val.__class__.__name__ == 'CO': s = s + "CO('"+ self.generator(val) +"')" - elif isinstance(val,PARAMETRE): + elif isinstance(val,Accas.PARAMETRE): # il ne faut pas prendre la string que retourne gener # mais seulement le nom dans le cas d'un paramètre s = s + val.nom @@ -506,7 +485,7 @@ class PythonGenerator: s = "CO('"+ self.generator(val) +"')" elif val.__class__.__name__ == 'CO': s = "CO('"+ self.generator(val) +"')" - elif isinstance(val,PARAMETRE): + elif isinstance(val,Accas.PARAMETRE): # il ne faut pas prendre la string que retourne gener # mais seulement le nom dans le cas d'un paramètre s = val.nom @@ -514,7 +493,14 @@ class PythonGenerator: s = self.generator(val) elif type(val) == types.FloatType : # Pour un flottant on utilise str - s = str(val) + # ou la notation scientifique + try : + clefobj=obj.GetNomConcept() + if self.parent.appli.dict_reels.has_key(clefobj): + if self.parent.appli.dict_reels[clefobj].has_key(val): + s=self.parent.appli.dict_reels[clefobj][val] + except: + s = str(val) else : # Pour les autres types on utilise repr s = `val`