]> SALOME platform Git repositories - tools/eficas.git/blob - Traducteur/movemocle.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / Traducteur / movemocle.py
1 # -*- coding: utf-8 -*-
2
3 import logging
4 import removemocle
5 import inseremocle
6 from parseur import lastparen
7 from dictErreurs import jdcSet
8 debug=0
9
10 #-----------------------------------------------------
11 def moveMotCleFromFactToFather(jdc,command,fact,mocle):
12 #-----------------------------------------------------
13 # exemple type : IMPR_GENE
14
15     if command not in jdcSet : return
16     boolChange=0
17     commands= jdc.root.childNodes[:]
18     commands.reverse()
19     for c in commands:
20         if c.name != command:continue
21         boolchange_c=0
22         for mc in c.childNodes:
23             if mc.name != fact:continue
24             l=mc.childNodes[:]
25             for ll in l:
26                 for n in ll.childNodes:
27                     if n.name != mocle:continue
28                     # test boolchange_c :il faut le faire une seule fois par commande sinon duplication du mot clé
29                     if boolchange_c != 0 :continue
30                     if debug : print "Changement de place :", n.name, n.lineno, n.colno
31                     MonTexte=n.getText(jdc);
32                     boolChange=1
33                     boolchange_c=1
34                     inseremocle.insereMotCle(jdc,c,MonTexte)
35                     logging.info("Changement de place  %s ligne %s ",n.name, n.lineno)
36
37     if boolChange : jdc.reset(jdc.getSource())
38     removemocle.removeMotCleInFact(jdc,command,fact,mocle)
39
40
41 #----------------------------------------------------------------------------
42 def moveMotCleFromFactToFactMulti(jdc,oper,factsource,mocle,liste_factcible):
43 #----------------------------------------------------------------------------
44 # exemple type STAT_NON_LINE et RESI_INTER_RELA
45     for factcible in liste_factcible :
46        moveMotCleFromFactToFact(jdc,oper,factsource,mocle,factcible)
47     removemocle.removeMotCleInFact(jdc,oper,factsource,mocle)
48
49
50 #----------------------------------------------------------------------------
51 def moveMotCleFromFactToFact(jdc,oper,factsource,mocle,factcible):
52 #----------------------------------------------------------------------------
53     if oper not in jdcSet : return
54     if debug : print "moveMotCleFromFactToFact pour " ,oper,factsource,mocle,factcible
55     boolChange=0
56     commands= jdc.root.childNodes[:]
57     commands.reverse()
58     for c in commands:
59         if c.name != oper : continue
60         cible=None
61         for mc in c.childNodes:
62            if mc.name != factcible : 
63               continue
64            else :
65               cible=mc
66               break
67         if cible==None :
68            if debug : print "Pas de changement pour ", oper, " ", factsource, " ",mocle, "cible non trouvée"
69            continue
70
71         for mc in c.childNodes:
72            source=None
73            if mc.name != factsource:
74               continue
75            else :
76               source=mc
77               break
78         if source==None :
79            if debug : print "Pas de changement pour ", oper, " ", factsource, " ",mocle, "source non trouvée"
80            continue
81
82         if debug : print "Changement pour ", oper, " ", factsource, " ",mocle, "cible et source trouvées"
83         l=source.childNodes[:]
84         for ll in l:
85            for n in ll.childNodes:
86               if n.name != mocle:continue
87               MonTexte=n.getText(jdc);
88               inseremocle.insereMotCleDansFacteur(jdc,cible,MonTexte)
89               boolChange=1
90               logging.info("Changement de place   %s ligne %s vers %s",n.name, n.lineno, cible.name)
91     if boolChange : jdc.reset(jdc.getSource())
92
93
94
95
96 #------------------------------------------------------
97 def moveMotClefInOperToFact(jdc,oper,mocle,factcible):
98 #------------------------------------------------------
99 # Attention le cas type est THETA_OLD dans calc_G
100
101     if oper not in jdcSet : return
102     if debug : print "movemocleinoper pour " ,oper,mocle,factcible
103     boolChange=9
104     commands= jdc.root.childNodes[:]
105     commands.reverse()
106     for c in commands:
107         if c.name != oper : continue
108         cible=None
109         for mc in c.childNodes:
110            if mc.name != factcible : 
111               continue
112            else :
113               cible=mc
114               break
115         if cible==None :
116            if debug : print "Pas de changement pour ", oper, " ", factcible, " ", "cible non trouvée"
117            continue
118
119         source=None
120         for mc in c.childNodes:
121            if mc.name != mocle:
122               continue
123            else :
124               source=mc
125               break
126         if source==None :
127            if debug : print "Pas de changement pour ", oper, " ", mocle, " source non trouvée"
128            continue
129         MonTexte=source.getText(jdc);
130         boolChange=1
131         inseremocle.insereMotCleDansFacteur(jdc,cible,MonTexte)
132     if boolChange : jdc.reset(jdc.getSource())
133     removemocle.removeMotCle(jdc,oper,mocle)
134
135 #------------------------------------------------------
136 def copyMotClefInOperToFact(jdc,oper,mocle,factcible):
137 #------------------------------------------------------
138
139     if oper not in jdcSet : return
140     if debug : print "movemocleinoper pour " ,oper,mocle,factcible
141     boolChange=9
142     commands= jdc.root.childNodes[:]
143     commands.reverse()
144     for c in commands:
145         if c.name != oper : continue
146         cible=None
147         for mc in c.childNodes:
148            if mc.name != factcible : 
149               continue
150            else :
151               cible=mc
152               break
153         if cible==None :
154            if debug : print "Pas de changement pour ", oper, " ", factcible, " ", "cible non trouvée"
155            continue
156
157         source=None
158         for mc in c.childNodes:
159            if mc.name != mocle:
160               continue
161            else :
162               source=mc
163               break
164         if source==None :
165            if debug : print "Pas de changement pour ", oper, " ", mocle, " source non trouvée"
166            continue
167         MonTexte=source.getText(jdc);
168         boolChange=1
169         inseremocle.insereMotCleDansFacteur(jdc,cible,MonTexte)
170     if boolChange : jdc.reset(jdc.getSource())
171     
172 #----------------------------------------------------------------------
173 def moveMCFToCommand(jdc,command,factsource,commandcible,factcible):
174 #----------------------------------------------------------------------
175 # exemple CONTACT en 10
176 # CONTACT devient commande DEFI_CONTACT/ZONE 
177
178     if command not in jdcSet : return
179     boolChange=0
180     commands= jdc.root.childNodes[:]
181     commands.reverse()
182     for c in commands:
183        if c.name != command  : continue
184        for mcF in c.childNodes:
185            if mcF.name != factsource : continue
186            l=mcF.getText(jdc)
187            texte=l.replace(factsource,factcible)
188            texte='xxxx='+commandcible+'('+texte+')\n'
189            jdc.splitLine(c.lineno,0)
190            jdc.addLine(texte,c.lineno)
191            logging.info("Deplacement de %s dans %s ligne %s",factsource,commandcible,c.lineno)
192            boolChange=1
193     if boolChange :
194         jdc.reset(jdc.getSource())
195         jdcSet.add(commandcible)
196
197 #--------------------------------------------------------------------
198 def EclaMotCleToFact(jdc,command,motcle,mot1,mot2,defaut=0):
199 #--------------------------------------------------------------------------
200 #  exemple STA10 pesanteur devient MCF avec eclatement des valeurs dans les MC
201 # On suppose que le MC est sur une seule ligne
202     if command  not in jdcSet : return
203     boolChange=0
204     for c in jdc.root.childNodes:
205        if c.name != command  : continue
206        trouveUnMC=0
207        for mc in c.childNodes:
208            if mc.name != motcle : continue
209            trouveUnMC=1
210            TexteMC=mc.getText(jdc)
211            indexLigneGlob=mc.lineno-1
212            MaLigneGlob=jdc.getLines()[indexLigneGlob]
213            Ligne=TexteMC.split('(')[1].split(')')[0].split(',')
214            motcle1=mot1+"="+Ligne[0]
215            motcle2=mot2+"=("+Ligne[1]+','+Ligne[2]+','+Ligne[3]+')'
216            texte=motcle+'=_F('+motcle1+','+motcle2+')'
217            num=lastparen(TexteMC)
218            Nouveau=MaLigneGlob.replace(TexteMC[0:num],texte)
219            jdc.getLines()[indexLigneGlob]=Nouveau
220            logging.info("Transformation de %s dans %s ligne %s",motcle,command,c.lineno)
221            boolChange=1
222     if boolChange : jdc.reset(jdc.getSource())