1 # -*- coding: utf-8 -*-
4 from parseur import FactNode
5 from dictErreurs import jdcSet
7 from dictErreurs import EcritErreur
11 #on n'a qu'un mocle par commande.
12 #en fin de traitement, on remet à jour l'arbre syntaxique (lineno,colno,etc.)
14 #--------------------------------------------------------------------------------
15 def renameMotCle(jdc,command,mocle,new_name, erreur=0,ensemble=regles.SansRegle):
16 #--------------------------------------------------------------------------------
17 if command not in jdcSet : return
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
25 if debug:print "Renommage de:",c.name,mc.name,mc.lineno,mc.colno
27 EcritErreur((command,mocle),c.lineno)
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)
35 if boolChange : jdc.reset(jdc.getSource())
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)
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)
50 #-------------------------------------------
51 def renameOper(jdc,command,new_name):
52 #-------------------------------------------
53 if command not in jdcSet : return
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)
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())
67 #----------------------------------------------------------
68 def decaleLignesdeNBlancs(jdc,premiere,derniere,nbBlanc):
69 #----------------------------------------------------------
71 while ligne < derniere :
72 s=jdc.getLines()[ligne]
74 jdc.getLines()[ligne] = nbBlanc*" " + s
76 toutblancs=-1*nbBlanc*" "
77 if jdc.getLines()[ligne][0:-1*nbBlanc] == toutblancs:
78 jdc.getLines()[ligne] = s[-1*nbBlanc:]
81 #---------------------------------------------------------------------------------------------
82 def renameMotCleInFact(jdc,command,fact,mocle,new_name, ensemble=regles.SansRegle, erreur=0):
83 #---------------------------------------------------------------------------------------------
84 if command not in jdcSet : return
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
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):]
101 EcritErreur((command,fact,mocle),c.lineno)
103 logging.info("Renommage de: %s, ligne %s, en %s",n.name,n.lineno,new_name)
105 if boolChange : jdc.reset(jdc.getSource())
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)
114 def renameMotCleInFactCourantSiRegle(jdc,command,fact,mocle,new_name,liste_regles,erreur=0):
115 #--------------------------------------------------------------------------
116 if command not in jdcSet : return
117 ensemble=regles.ensembleRegles(liste_regles)
119 for c in jdc.root.childNodes:
120 if c.name != command:continue
121 for mc in c.childNodes:
122 if mc.name != fact:continue
127 if ensemble.verif(ll) == 0 : continue
128 for n in ll.childNodes:
129 if n.name != mocle:continue
130 s=jdc.getLines()[n.lineno-1]
131 jdc.getLines()[n.lineno-1]=s[:n.colno]+new_name+s[n.colno+len(mocle):]
134 EcritErreur((command,fact,mocle),c.lineno)
136 logging.info("Renommage de: %s, ligne %s, en %s",n.name,n.lineno,new_name)
138 if boolChange : jdc.reset(jdc.getSource())
141 #-----------------------------------------------------------------
142 def renameCommande(jdc,command,new_name,ensemble=regles.SansRegle):
143 #-----------------------------------------------------------------
144 # nom de la commande "ancien format" , nom de la commande " nouveau format "
145 if command not in jdcSet : return
149 if ensemble != regles.SansRegle :
150 logging.info("Traitement de %s renomme en %s sous conditions", command, new_name)
152 logging.info("Traitement de %s renomme en %s ", command, new_name)
153 for c in jdc.root.childNodes:
154 if c.name != command:continue
155 if ensemble.verif(c) == 0 : continue
157 if debug:print "Renommage de:",c.name,new_name ,c.lineno,c.colno
158 logging.info("Renommage de: %s ligne %d en %s",c.name,c.lineno,new_name)
159 s=jdc.getLines()[c.lineno-1]
160 jdc.getLines()[c.lineno-1]=s[:c.colno]+new_name+s[c.colno+len(command):]
162 if boolChange : jdc.reset(jdc.getSource())
164 #-----------------------------------------------------------
165 def renameCommandeSiRegle(jdc,command,new_name,liste_regles):
166 #-----------------------------------------------------------
168 if command not in jdcSet : return
169 mesRegles=regles.ensembleRegles(liste_regles)
170 renameCommande(jdc,command,new_name,mesRegles)