Salome HOME
05c76a6f8e8ab68bd99b21351b0a36eefa579db4
[tools/eficas.git] / Traducteur / calcG.py
1 # -*- coding: utf-8 -*-
2 from parseur import FactNode
3 from dictErreurs import jdcSet 
4 import logging
5
6 dict_commande={}
7 dict_contexte={}
8 dict_contexte_option={}
9
10 import sys
11 #--------------------------------------------------------------------------
12 def traitementRayon(jdc):
13 #--------------------------------------------------------------------------
14    
15     if "DEFI_FONCTION" not in jdcSet : return
16     for c in jdc.root.childNodes:
17        if c.name != "DEFI_FONCTION" : continue
18        monTexte=jdc.getLines()[c.lineno-1]
19        monNomVariable=monTexte.split("=")[0]
20        aExecuter=monNomVariable+'=0'
21        dict_commande[monNomVariable]=c
22        exec aExecuter in dict_contexte
23     liste_MC=(("CALC_G","R_INF_FO"),("CALC_G","R_SUP_FO"),("CALC_G","MODULE_FO"))
24     liste_achanger = chercheValeurSelonGenea2 (jdc,liste_MC)
25     liste_MC=(("CALC_THETA","THETA_3D","R_INF_FO"),("CALC_THETA","THETA_3D","R_SUP_FO"),("CALC_THETA","THETA_3D","MODULE_FO"))
26     liste_achanger2 = chercheValeurSelonGenea3 (jdc,liste_MC)
27     liste_achanger=liste_achanger+liste_achanger2
28     for item in liste_achanger :
29        commande=dict_commande[item]
30        changeValeurABSCNiveau1(commande,jdc)
31
32 #----------------------------------
33 def changeValeurABSCNiveau1(c,jdc):
34 #----------------------------------
35     for child in c.childNodes:
36        if child.name != "NOM_PARA":continue
37        MonTexte=child.getText(jdc)
38        if len(MonTexte.splitlines()) > 1 :
39           print "Le Traducteur ne sait pas gerer"
40           assert(0)
41        MonTexte=jdc.getLines()[child.lineno-1]
42        debut=MonTexte.find("NOM_PARA")
43        debChaine=MonTexte[0:debut+8]
44        ancien=MonTexte[debut+8:]
45        egal,nomval,fin=ancien.split("'",2)
46        nouvelleLigne=debChaine+egal+"'ABSC'"+fin
47        jdc.getLines()[child.lineno-1]=nouvelleLigne
48        logging.info("renommage parametre ABSC ligne %d",child.lineno-1)
49     return
50       
51 #--------------------------------------------------------------------------
52 def chercheValeurSelonGenea2(jdc,liste_cherche_valeur):
53 #
54 #--------------------------------------------------------------------------
55     liste_valeurs=[]
56     for genea in liste_cherche_valeur:
57        profondeur=len(genea)
58        if profondeur > 2 :
59           print "la methode chercheValeurSelonGenea ne convient"
60           print "pas pour cette généalogie"
61           assert(0)
62        command=genea[0]
63        fact=genea[1]
64       
65        for c in jdc.root.childNodes:
66           if c.name != command:continue
67           for mc in c.childNodes:
68              if mc.name != fact:continue
69              MonTexte=mc.getText(jdc)
70              try :
71              #if ( 1) :
72                 exec MonTexte in dict_contexte
73                 monNomVar=MonTexte.split("=")[1]
74                 monNomVarOk=monNomVar
75                 i=-1
76                 while (monNomVar[i] == "," or  monNomVar[i] == " ") :
77                    monNomVarOk=monNomVar[0:i]
78                    i=i-1
79                 monNomVar=monNomVarOk
80                 i=0
81                 while (monNomVar[i] == " ") :
82                    monNomVarOk=monNomVar[1:]
83                    i=i+1
84                 monNomVar=monNomVarOk
85                 if monNomVar not in liste_valeurs : liste_valeurs.append(monNomVar)
86              except :
87              #else :
88                 logging.error("Pb pour renommer le parametre ABSC dans defi_fonctions selon calcg")
89                 pass
90     return liste_valeurs
91
92       
93 #--------------------------------------------------------------------------
94 def chercheValeurSelonGenea3(jdc,liste_cherche_valeur):
95 #--------------------------------------------------------------------------
96     liste_valeurs=[]
97     for genea in liste_cherche_valeur:
98        profondeur=len(genea)
99        if profondeur > 3 :
100           print "la methode chercheValeurSelonGenea ne convient"
101           print "pas pour cette généalogie"
102           assert(0)
103        command=genea[0]
104        fact=genea[1]
105        mc=genea[2]
106       
107        for c in jdc.root.childNodes:
108           if c.name != command : continue
109           for mcf in c.childNodes:
110              if mcf.name != fact : continue
111              l=mcf.childNodes[:]
112              for ll in l:
113                  for lc in ll.childNodes:
114                     if lc.name !=mc : continue
115                     MonTexte=lc.getText(jdc)
116                     try :
117                     #if ( 1) :
118                        exec MonTexte in dict_contexte
119                        #monNomVar=MonTexte.split("=")[1][0:-1]
120                        monNomVar=MonTexte.split("=")[1]
121                        monNomVarOk=monNomVar
122                        i=-1
123                        while (monNomVar[i] == "," or  monNomVar[i] == " ") :
124                          monNomVarOk=monNomVar[0:i]
125                          i=i-1
126                        monNomVar=monNomVarOk
127                        i=0
128                        while (monNomVar[i] == " ") :
129                           monNomVarOk=monNomVar[1:]
130                           i=i+1
131                        monNomVar=monNomVarOk
132                        if monNomVar not in liste_valeurs : liste_valeurs.append(monNomVar)
133                     except :
134                     #else :
135                        logging.error("Pb pour renommer le parametre ABSC dans defi_fonctions selon calcg")
136                        pass
137     return liste_valeurs
138
139