Salome HOME
*** empty log message ***
[tools/eficas.git] / convert / convert_asterv5.py
1 # -*- coding: utf-8 -*-
2 #            CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
5 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
6 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
7 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
8 # (AT YOUR OPTION) ANY LATER VERSION.
9 #
10 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
11 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
12 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
13 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
14 #
15 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
16 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
17 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
18 #
19 #
20 # ======================================================================
21 """
22     Ce module contient le plugin convertisseur de fichier
23     au format asterv5 pour EFICAS.
24
25     Un plugin convertisseur doit fournir deux attributs de classe :
26     extensions et formats et deux méthodes : readfile,convert.
27
28     L'attribut de classe extensions est une liste d'extensions
29     de fichiers préconisées pour ce type de format. Cette information
30     est seulement indicative.
31
32     L'attribut de classe formats est une liste de formats de sortie
33     supportés par le convertisseur. Les formats possibles sont :
34     eval, dict ou exec.
35     Le format eval est un texte source Python qui peut etre evalué. Le
36     résultat de l'évaluation est un objet Python quelconque.
37     Le format dict est un dictionnaire Python.
38     Le format exec est un texte source Python qui peut etre executé. 
39
40     La méthode readfile a pour fonction de lire un fichier dont le
41     nom est passé en argument de la fonction.
42        - convertisseur.readfile(nom_fichier)
43
44     La méthode convert a pour fonction de convertir le fichier
45     préalablement lu dans un objet du format passé en argument.
46        - objet=convertisseur.convert(outformat)
47
48     Ce convertisseur supporte uniquement le format de sortie exec
49
50 """
51 import sys,string,traceback
52
53 from Noyau import N_CR
54
55 def entryPoint():
56    """
57        Retourne les informations nécessaires pour le chargeur de plugins
58        Ces informations sont retournées dans un dictionnaire
59    """
60    return {
61         # Le nom du plugin
62           'name' : 'asterv5',
63         # La factory pour créer une instance du plugin
64           'factory' : AsterParser,
65           }
66
67 import Parserv5.conv
68 import parseur_python
69
70 class AsterParser:
71    """
72    """
73    # Les extensions de fichier préconisées
74    extensions=('.comm',)
75    # Les formats de sortie supportés (eval dict ou exec)
76    formats=('exec','execnoparseur')
77
78    def __init__(self,cr=None):
79       # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
80       if cr :
81          self.cr=cr
82       else:
83          self.cr=N_CR.CR(debut='CR convertisseur format asterv5',
84                          fin='fin CR format asterv5')
85       self.oldtext=''
86       self.out=self.err=self.warn=''
87
88    def readfile(self,filename):
89       self.filename=filename
90       try:
91          self.text=open(filename).read()
92       except:
93          self.cr.fatal("Impossible ouvrir fichier %s" % filename)
94          return
95
96    def convert(self,outformat,appli=None):
97       if outformat == 'exec':
98          return self.getexec()
99       elif outformat == 'execnoparseur':
100          return self.getexecnoparseur()
101       else:
102          raise "Format de sortie : %s, non supporté"
103
104    def getexec(self):
105       if self.text != self.oldtext:
106          self.out, self.err, self.warn= Parserv5.conv.conver(self.text)
107          if self.err:
108             self.cr.fatal("Erreur a l'interpretation de %s" % self.filename)
109             self.cr.fatal(str(self.err))
110             return self.out
111          # On transforme les commentaires et les parametres en objets Python
112          # avec un deuxième parseur
113          try:
114             self.out = parseur_python.PARSEUR_PYTHON(self.out).get_texte()
115          except:
116             self.cr.fatal("Erreur dans la deuxième phase d interpretation de %s" % self.filename)
117             traceback.print_exc()
118             return ""
119          self.oldtext=self.text
120       return self.out
121
122    def getexecnoparseur(self):
123       if self.text != self.oldtext:
124          self.out, self.err, self.warn= Parserv5.conv.conver(self.text)
125          if self.err:
126             self.cr.fatal("Erreur a l'interpretation de %s" % self.filename)
127             self.cr.fatal(str(self.err))
128             return self.out
129          self.oldtext=self.text
130       return self.out
131