1 # -*- coding: utf-8 -*-
6 from parseur import lastparen
7 from dictErreurs import jdcSet
10 #-----------------------------------------------------
11 def moveMotCleFromFactToFather(jdc,command,fact,mocle):
12 #-----------------------------------------------------
13 # exemple type : IMPR_GENE
15 if command not in jdcSet : return
17 commands= jdc.root.childNodes[:]
20 if c.name != command:continue
22 for mc in c.childNodes:
23 if mc.name != fact:continue
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);
34 inseremocle.insereMotCle(jdc,c,MonTexte)
35 logging.info("Changement de place %s ligne %s ",n.name, n.lineno)
37 if boolChange : jdc.reset(jdc.getSource())
38 removemocle.removeMotCleInFact(jdc,command,fact,mocle)
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)
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
56 commands= jdc.root.childNodes[:]
59 if c.name != oper : continue
61 for mc in c.childNodes:
62 if mc.name != factcible :
68 if debug : print "Pas de changement pour ", oper, " ", factsource, " ",mocle, "cible non trouvée"
71 for mc in c.childNodes:
73 if mc.name != factsource:
79 if debug : print "Pas de changement pour ", oper, " ", factsource, " ",mocle, "source non trouvée"
82 if debug : print "Changement pour ", oper, " ", factsource, " ",mocle, "cible et source trouvées"
83 l=source.childNodes[:]
85 for n in ll.childNodes:
86 if n.name != mocle:continue
87 MonTexte=n.getText(jdc);
88 inseremocle.insereMotCleDansFacteur(jdc,cible,MonTexte)
90 logging.info("Changement de place %s ligne %s vers %s",n.name, n.lineno, cible.name)
91 if boolChange : jdc.reset(jdc.getSource())
96 #------------------------------------------------------
97 def moveMotClefInOperToFact(jdc,oper,mocle,factcible):
98 #------------------------------------------------------
99 # Attention le cas type est THETA_OLD dans calc_G
101 if oper not in jdcSet : return
102 if debug : print "movemocleinoper pour " ,oper,mocle,factcible
104 commands= jdc.root.childNodes[:]
107 if c.name != oper : continue
109 for mc in c.childNodes:
110 if mc.name != factcible :
116 if debug : print "Pas de changement pour ", oper, " ", factcible, " ", "cible non trouvée"
120 for mc in c.childNodes:
127 if debug : print "Pas de changement pour ", oper, " ", mocle, " source non trouvée"
129 MonTexte=source.getText(jdc);
131 inseremocle.insereMotCleDansFacteur(jdc,cible,MonTexte)
132 if boolChange : jdc.reset(jdc.getSource())
133 removemocle.removeMotCle(jdc,oper,mocle)
135 #------------------------------------------------------
136 def copyMotClefInOperToFact(jdc,oper,mocle,factcible):
137 #------------------------------------------------------
139 if oper not in jdcSet : return
140 if debug : print "movemocleinoper pour " ,oper,mocle,factcible
142 commands= jdc.root.childNodes[:]
145 if c.name != oper : continue
147 for mc in c.childNodes:
148 if mc.name != factcible :
154 if debug : print "Pas de changement pour ", oper, " ", factcible, " ", "cible non trouvée"
158 for mc in c.childNodes:
165 if debug : print "Pas de changement pour ", oper, " ", mocle, " source non trouvée"
167 MonTexte=source.getText(jdc);
169 inseremocle.insereMotCleDansFacteur(jdc,cible,MonTexte)
170 if boolChange : jdc.reset(jdc.getSource())
172 #----------------------------------------------------------------------
173 def moveMCFToCommand(jdc,command,factsource,commandcible,factcible):
174 #----------------------------------------------------------------------
175 # exemple CONTACT en 10
176 # CONTACT devient commande DEFI_CONTACT/ZONE
178 if command not in jdcSet : return
180 commands= jdc.root.childNodes[:]
183 if c.name != command : continue
184 for mcF in c.childNodes:
185 if mcF.name != factsource : continue
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)
194 jdc.reset(jdc.getSource())
195 jdcSet.add(commandcible)
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
204 for c in jdc.root.childNodes:
205 if c.name != command : continue
207 for mc in c.childNodes:
208 if mc.name != motcle : continue
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)
222 if boolChange : jdc.reset(jdc.getSource())