2 Ce module contient le plugin convertisseur de fichier
3 au format asterv5 pour EFICAS.
5 Un plugin convertisseur doit fournir deux attributs de classe :
6 extensions et formats et deux méthodes : readfile,convert.
8 L'attribut de classe extensions est une liste d'extensions
9 de fichiers préconisées pour ce type de format. Cette information
10 est seulement indicative.
12 L'attribut de classe formats est une liste de formats de sortie
13 supportés par le convertisseur. Les formats possibles sont :
15 Le format eval est un texte source Python qui peut etre evalué. Le
16 résultat de l'évaluation est un objet Python quelconque.
17 Le format dict est un dictionnaire Python.
18 Le format exec est un texte source Python qui peut etre executé.
20 La méthode readfile a pour fonction de lire un fichier dont le
21 nom est passé en argument de la fonction.
22 convertisseur.readfile(nom_fichier)
24 La méthode convert a pour fonction de convertir le fichier
25 préalablement lu dans un objet du format passé en argument.
26 objet=convertisseur.convert(outformat)
28 Ce convertisseur supporte uniquement le format de sortie exec
31 import sys,string,traceback
33 from Noyau import N_CR
37 Retourne les informations nécessaires pour le chargeur de plugins
38 Ces informations sont retournées dans un dictionnaire
43 # La factory pour créer une instance du plugin
44 'factory' : AsterParser,
53 # Les extensions de fichier préconisées
55 # Les formats de sortie supportés (eval dict ou exec)
56 formats=('exec','execnoparseur')
58 def __init__(self,cr=None):
59 # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
63 self.cr=N_CR.CR(debut='CR convertisseur format asterv5',
64 fin='fin CR format asterv5')
66 self.out=self.err=self.warn=''
68 def readfile(self,filename):
69 self.filename=filename
71 self.text=open(filename).read()
73 self.cr.fatal("Impossible ouvrir fichier %s" % filename)
76 def convert(self,outformat):
77 if outformat == 'exec':
79 elif outformat == 'execnoparseur':
80 return self.getexecnoparseur()
82 raise "Format de sortie : %s, non supporté"
85 if self.text != self.oldtext:
86 self.out, self.err, self.warn= Parserv5.conv.conver(self.text)
88 self.cr.fatal("Erreur a l'interpretation de %s" % self.filename)
89 self.cr.fatal(str(self.err))
91 # On transforme les commentaires et les parametres en objets Python
92 # avec un deuxième parseur
94 self.out = parseur_python.PARSEUR_PYTHON(self.out).get_texte()
96 self.cr.fatal("Erreur dans la deuxième phase d interpretation de %s" % self.filename)
99 self.oldtext=self.text
102 def getexecnoparseur(self):
103 if self.text != self.oldtext:
104 self.out, self.err, self.warn= Parserv5.conv.conver(self.text)
106 self.cr.fatal("Erreur a l'interpretation de %s" % self.filename)
107 self.cr.fatal(str(self.err))
109 self.oldtext=self.text