Salome HOME
*** empty log message ***
[tools/eficas.git] / Traducteur / renamemocle.py
1 # -*- coding: utf-8 -*-
2 import logging
3 import sys
4 from parseur import FactNode
5 from dictErreurs import jdcSet
6 import regles
7 from dictErreurs import EcritErreur
8 #debug=1
9 debug=0
10
11 #on n'a qu'un mocle par commande. 
12 #en fin de traitement, on remet à jour l'arbre syntaxique (lineno,colno,etc.)
13
14 #--------------------------------------------------------------------------------
15 def renameMotCle(jdc,command,mocle,new_name, erreur=0,ensemble=regles.SansRegle):
16 #--------------------------------------------------------------------------------
17     if command not in jdcSet : return
18     boolChange=0
19     for c in jdc.root.childNodes:
20         if c.name != command:continue
21         for mc in c.childNodes:
22             if mc.name != mocle:continue
23             if ensemble.verif(c) == 0 : continue
24             boolChange=1
25             if debug:print "Renommage de:",c.name,mc.name,mc.lineno,mc.colno
26             if erreur :
27                EcritErreur((command,mocle),c.lineno)
28             else :
29                logging.info("Renommage de: %s  %s ligne %d en %s",c.name,mc.name,mc.lineno,new_name)
30             s=jdc.getLines()[mc.lineno-1]
31             jdc.getLines()[mc.lineno-1]=s[:mc.colno]+new_name+s[mc.colno+len(mocle):]
32             diff=len(new_name) - len(mocle)
33             decaleLignesdeNBlancs(jdc,mc.lineno,mc.endline-1,diff)
34
35     if boolChange : jdc.reset(jdc.getSource())
36                 
37 #------------------------------------------------------
38 def renameMotCleAvecErreur(jdc,command,mocle,new_name):
39 #------------------------------------------------------
40     if command not in jdcSet : return
41     renameMotCle(jdc,command,mocle,new_name,1,regles.SansRegle)
42
43 #--------------------------------------------------------------------------
44 def renameMotCleSiRegle(jdc,command,mocle,new_name,liste_regles, erreur=0):
45 #--------------------------------------------------------------------------
46     if command not in jdcSet : return
47     mesRegles=regles.ensembleRegles(liste_regles)
48     renameMotCle(jdc,command,mocle,new_name, erreur,mesRegles)
49
50 #-------------------------------------------
51 def renameOper(jdc,command,new_name):
52 #-------------------------------------------
53     if command not in jdcSet : return
54     jdcSet.add(new_name)
55     boolChange=0
56     for c in jdc.root.childNodes:
57         if c.name != command:continue
58         if debug:print "Renommage de:",c.name,c.lineno,c.colno
59         logging.info("Renommage de: %s ligne %d en %s",c.name,c.lineno,new_name)
60         boolChange=1
61         s=jdc.getLines()[c.lineno-1]
62         jdc.getLines()[c.lineno-1]=s[:c.colno]+new_name+s[c.colno+len(command):]
63         diff=len(new_name) - len(command)
64         decaleLignesdeNBlancs(jdc,c.lineno,c.endline,diff)
65     if boolChange : jdc.reset(jdc.getSource())
66
67 #----------------------------------------------------------
68 def decaleLignesdeNBlancs(jdc,premiere,derniere,nbBlanc):
69 #----------------------------------------------------------
70     ligne = premiere + 1
71     while ligne < derniere :
72        s=jdc.getLines()[ligne]
73        if nbBlanc > 0 :
74          jdc.getLines()[ligne] = nbBlanc*" " + s
75        else :
76          toutblancs=-1*nbBlanc*" "
77          if jdc.getLines()[ligne][0:-1*nbBlanc] == toutblancs: 
78             jdc.getLines()[ligne] = s[-1*nbBlanc:]
79        ligne=ligne+1
80
81 #---------------------------------------------------------------------------------------------
82 def renameMotCleInFact(jdc,command,fact,mocle,new_name, ensemble=regles.SansRegle, erreur=0):
83 #---------------------------------------------------------------------------------------------
84     if command not in jdcSet : return
85     boolChange=0
86     for c in jdc.root.childNodes:
87         if c.name != command:continue
88         for mc in c.childNodes:
89             if mc.name != fact:continue
90             l=mc.childNodes[:]
91             #on itere a l'envers
92             l.reverse()
93             for ll in l:
94                 for n in ll.childNodes:
95                     if n.name != mocle:continue
96                     if ensemble.verif(c) == 0 : continue
97                     s=jdc.getLines()[n.lineno-1]
98                     jdc.getLines()[n.lineno-1]=s[:n.colno]+new_name+s[n.colno+len(mocle):]
99                     boolChange=1
100                     if erreur :
101                        EcritErreur((command,fact,mocle),c.lineno)
102                     else :
103                        logging.info("Renommage de: %s, ligne %s, en %s",n.name,n.lineno,new_name)
104
105     if boolChange : jdc.reset(jdc.getSource())
106
107 #--------------------------------------------------------------------------
108 def renameMotCleInFactSiRegle(jdc,command,fact,mocle,new_name,liste_regles):
109 #--------------------------------------------------------------------------
110     if command not in jdcSet : return
111     mesRegles=regles.ensembleRegles(liste_regles)
112     renameMotCleInFact(jdc,command,fact,mocle,new_name,mesRegles)
113
114 #-----------------------------------------------------------------
115 def renameCommande(jdc,command,new_name,ensemble=regles.SansRegle):
116 #-----------------------------------------------------------------
117 # nom de la commande "ancien format" , nom de la commande " nouveau format "
118     if command not in jdcSet : return
119     jdcSet.add(new_name)
120     boolChange=0
121     if debug :
122         if ensemble != regles.SansRegle :
123           logging.info("Traitement de %s renomme en %s sous conditions", command, new_name)
124         else  :
125           logging.info("Traitement de %s renomme en %s ", command, new_name)
126     for c in jdc.root.childNodes:
127         if c.name != command:continue
128         if ensemble.verif(c) == 0 : continue
129         boolChange=1
130         if debug:print "Renommage de:",c.name,new_name ,c.lineno,c.colno
131         logging.info("Renommage de: %s ligne %d en %s",c.name,c.lineno,new_name)
132         s=jdc.getLines()[c.lineno-1]
133         jdc.getLines()[c.lineno-1]=s[:c.colno]+new_name+s[c.colno+len(command):]
134
135     if boolChange : jdc.reset(jdc.getSource())
136
137 #-----------------------------------------------------------
138 def renameCommandeSiRegle(jdc,command,new_name,liste_regles):
139 #-----------------------------------------------------------
140     
141     if command not in jdcSet : return
142     mesRegles=regles.ensembleRegles(liste_regles)
143     renameCommande(jdc,command,new_name,mesRegles)
144