2 Ce module contient le plugin generateur de fichier au format
10 from Noyau.N_utils import repr_float
11 from Accas import ETAPE,PROC_ETAPE,MACRO_ETAPE,ETAPE_NIVEAU,JDC,FORM_ETAPE
12 from Accas import MCSIMP,MCFACT,MCBLOC,MCList,EVAL
13 from Accas import GEOM,ASSD,MCNUPLET
14 from Accas import COMMENTAIRE,PARAMETRE, PARAMETRE_EVAL,COMMANDE_COMM
18 Retourne les informations nécessaires pour le chargeur de plugins
20 Ces informations sont retournées dans un dictionnaire
25 # La factory pour créer une instance du plugin
26 'factory' : AplatGenerator,
32 Ce generateur parcourt un objet de type JDC et produit
33 un fichier au format aplat
35 L'acquisition et le parcours sont réalisés par la méthode
36 generator.gener(objet_jdc,format)
38 L'écriture du fichier au format ini par appel de la méthode
39 generator.writefile(nom_fichier)
41 Ses caractéristiques principales sont exposées dans des attributs
44 - extensions : qui donne une liste d'extensions de fichier préconisées
47 # Les extensions de fichier préconisées
50 def __init__(self,cr=None):
51 # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
55 self.cr=N_CR.CR(debut='CR generateur format aplat pour eficas',
56 fin='fin CR format aplat pour eficas')
58 # Le séparateur utiisé
60 # Le texte au format aplat est stocké dans l'attribut text
63 def writefile(self,filename):
68 def gener(self,obj,format='brut'):
70 Retourne une représentation du JDC obj sous une
71 forme qui est paramétrée par format.
72 Si format vaut 'brut', 'standard' ou 'beautifie', retourne le texte issu
75 liste= self.generator(obj)
78 elif format == 'standard':
80 elif format == 'beautifie':
83 raise "Format pas implémenté : "+format
86 def generator(self,obj):
88 Cette methode joue un role d'aiguillage en fonction du type de obj
89 On pourrait utiliser les méthodes accept et visitxxx à la
90 place (dépend des gouts !!!)
92 # ATTENTION a l'ordre des tests : il peut avoir de l'importance (héritage)
93 if isinstance(obj,PROC_ETAPE):
94 return self.generPROC_ETAPE(obj)
95 elif isinstance(obj,MACRO_ETAPE):
96 return self.generMACRO_ETAPE(obj)
97 elif isinstance(obj,FORM_ETAPE):
98 return self.generFORM_ETAPE(obj)
99 elif isinstance(obj,ETAPE):
100 return self.generETAPE(obj)
101 elif isinstance(obj,MCFACT):
102 return self.generMCFACT(obj)
103 elif isinstance(obj,MCList):
104 return self.generMCList(obj)
105 elif isinstance(obj,MCBLOC):
106 return self.generMCBLOC(obj)
107 elif isinstance(obj,MCSIMP):
108 return self.generMCSIMP(obj)
109 elif isinstance(obj,ASSD):
110 return self.generASSD(obj)
111 elif isinstance(obj,ETAPE_NIVEAU):
112 return self.generETAPE_NIVEAU(obj)
113 elif isinstance(obj,COMMENTAIRE):
114 return self.generCOMMENTAIRE(obj)
115 # Attention doit etre placé avant PARAMETRE (raison : héritage)
116 elif isinstance(obj,PARAMETRE_EVAL):
117 return self.generPARAMETRE_EVAL(obj)
118 elif isinstance(obj,PARAMETRE):
119 return self.generPARAMETRE(obj)
120 elif isinstance(obj,EVAL):
121 return self.generEVAL(obj)
122 elif isinstance(obj,COMMANDE_COMM):
123 return self.generCOMMANDE_COMM(obj)
124 elif isinstance(obj,JDC):
125 return self.generJDC(obj)
126 elif isinstance(obj,MCNUPLET):
127 return self.generMCNUPLET(obj)
129 raise "Type d'objet non prévu",obj
131 def generJDC(self,obj):
133 Cette méthode convertit un objet JDC en une chaine de
134 caractères à la syntaxe aplat
137 if obj.definition.l_niveaux == ():
138 # Il n'y a pas de niveaux
139 for etape in obj.etapes:
140 text=text+self.generator(etape)+'\n'
143 for etape_niveau in obj.etapes_niveaux:
144 text=text+self.generator(etape_niveau)+'\n'
147 def generCOMMANDE_COMM(self,obj):
149 Cette méthode convertit un COMMANDE_COMM
150 en une chaine de caractères à la syntaxe aplat
152 l_lignes = string.split(obj.valeur,'\n')
154 for ligne in l_lignes:
155 txt = txt + '##'+ligne+'\n'
158 def generEVAL(self,obj):
160 Cette méthode convertit un EVAL
161 en une chaine de caractères à la syntaxe aplat
163 return 'EVAL("""'+ obj.valeur +'""")'
165 def generCOMMENTAIRE(self,obj):
167 Cette méthode convertit un COMMENTAIRE
168 en une chaine de caractères à la syntaxe aplat
170 l_lignes = string.split(obj.valeur,'\n')
172 for ligne in l_lignes:
173 txt = txt + '#'+ligne+'\n'
176 def generPARAMETRE_EVAL(self,obj):
178 Cette méthode convertit un PARAMETRE_EVAL
179 en une chaine de caractères à la syntaxe aplat
181 if obj.valeur == None:
182 return obj.nom + ' = None ;\n'
184 return obj.nom + ' = '+ self.generator(obj.valeur) +';\n'
186 def generPARAMETRE(self,obj):
188 Cette méthode convertit un PARAMETRE
189 en une chaine de caractères à la syntaxe aplat
191 if type(obj.valeur) == types.StringType:
192 return obj.nom + " = '" + obj.valeur + "';\n"
194 return obj.nom + ' = ' + str(obj.valeur) + ';\n'
196 def generETAPE_NIVEAU(self,obj):
198 Cette méthode convertit une étape niveau
199 en une chaine de caractères à la syntaxe aplat
202 if obj.etapes_niveaux == []:
203 for etape in obj.etapes:
204 text=text+self.generator(etape)+'\n'
206 for etape_niveau in obj.etapes_niveaux:
207 text=text+self.generator(etape_niveau)+'\n'
210 def gener_etape(self,obj):
212 Cette méthode est utilisé pour convertir les objets etape
213 en une chaine de caractères à la syntaxe aplat
216 for v in obj.mc_liste:
217 text=text + self.generator(v)
219 return self.init+'\n'
223 def generETAPE(self,obj):
225 Cette méthode convertit une étape
226 en une chaine de caractères à la syntaxe aplat
229 sdname= self.generator(obj.sd)
232 self.init = sdname + self.sep + obj.nom
233 return self.gener_etape(obj)
235 def generMACRO_ETAPE(self,obj):
237 Cette méthode convertit une macro-étape
238 en une chaine de caractères à la syntaxe aplat
244 sdname= self.generator(obj.sd)
245 self.init = sdname + self.sep + obj.nom
247 self.init = 'sansnom' + self.sep + obj.nom
249 return self.gener_etape(obj)
251 generPROC_ETAPE = generMACRO_ETAPE
253 generFORM_ETAPE = generMACRO_ETAPE
255 def generASSD(self,obj):
257 Convertit un objet dérivé d'ASSD en une chaine de caractères à la
260 return obj.get_name()
262 def generMCList(self,obj):
264 Convertit un objet MCList en une chaine de caractères à la
269 init = self.init + self.sep + obj.nom
271 for data in self.data :
273 self.init = init + self.sep + "occurrence n°"+`i`
274 text = text + self.generator(data)
278 def generMCSIMP(self,obj) :
280 Convertit un objet MCSIMP en une chaine de caractères à la
283 if type(obj.valeur) in (types.TupleType,types.ListType) :
284 # On est en présence d'une liste de valeur
286 for val in self.valeur:
287 if type(val) == types.InstanceType :
288 rep = rep + self.generator(val) +','
290 rep = rep + `val`+','
292 elif type(obj.valeur) == types.InstanceType :
293 # On est en présence d'une valeur unique de type instance
294 rep = self.generator(obj.valeur)
296 # On est en présence d'une valeur unique
298 return self.init + self.sep + obj.nom + ' :' + rep + '\n'
300 def generMCCOMPO(self,obj):
302 Convertit un objet MCCOMPO en une chaine de caractères à la
307 self.init = self.init + self.sep + obj.nom
308 for mocle in obj.mc_liste :
309 text = text + self.generator(mocle)
313 generMCFACT=generMCCOMPO
315 generMCBLOC=generMCCOMPO
317 generMCNUPLET=generMCCOMPO