Salome HOME
4af3caeee56a4e28e409f3b3fdc3201567d4da09
[tools/eficas.git] / Traducteur / removemocle.py
1 # -*- coding: utf-8 -*-
2 import logging
3 from parseur import FactNode
4
5 #debug=1
6 debug=0
7 #on n'a qu'un mocle par commande. On peut donc supprimer le mocle sans trop de précautions (a part iterer a l'envers sur les commandes)
8 #avant de supprimer un autre mocle, on remet à jour l'arbre syntaxique (lineno,colno,etc.)
9 def removemocle(jdc,command,mocle):
10     #on itere sur les commandes a l'envers pour ne pas polluer les numeros de ligne avec les modifications
11     commands= jdc.root.childNodes[:]
12     commands.reverse()
13     for c in commands:
14         if c.name != command:continue
15         for mc in c.childNodes:
16             if mc.name != mocle:continue
17             removemc(jdc,c,mc)
18
19     jdc.reset(jdc.getSource())
20                 
21 def removemc(jdc,c,mc):
22     if debug:print "Suppression de:",c.name,mc.name,mc.lineno,mc.colno,mc.endline,mc.endcol
23     logging.info("Suppression de: %s, %s, %s, %s, %d, %d",c.name,mc.name,mc.lineno,mc.colno,mc.endline,mc.endcol)
24     if mc.endline > mc.lineno:
25         if debug:print "mocle sur plusieurs lignes--%s--" % jdc.getLines()[mc.lineno-1][mc.colno:]
26         jdc.getLines()[mc.lineno-1]=jdc.getLines()[mc.lineno-1][:mc.colno]
27         jdc.getLines()[mc.endline-1]=jdc.getLines()[mc.endline-1][mc.endcol:]
28         #attention : supprimer les lignes à la fin
29         jdc.getLines()[mc.lineno:mc.endline-1]=[]
30     else:
31         if debug:print "mocle sur une ligne--%s--" % jdc.getLines()[mc.lineno-1][mc.colno:mc.endcol]
32         s=jdc.getLines()[mc.lineno-1]
33         jdc.getLines()[mc.lineno-1]=s[:mc.colno]+s[mc.endcol:]
34     fusionne(jdc,mc.lineno-1)
35     jdc.reset(jdc.getSource())
36
37 def removemocleinfact(jdc,command,fact,mocle):
38     #on itere sur les commandes a l'envers pour ne pas polluer les numeros de ligne avec les modifications
39     commands= jdc.root.childNodes[:]
40     commands.reverse()
41     for c in commands:
42         if c.name != command:continue
43         for mc in c.childNodes:
44             if mc.name != fact:continue
45             l=mc.childNodes[:]
46             l.reverse()
47             for ll in l:
48                 for n in ll.childNodes:
49                     if n.name != mocle:continue
50                     removemc(jdc,c,n)
51
52     jdc.reset(jdc.getSource())
53
54 def fusionne(jdc,numLigne):
55     index=0
56     texte=jdc.getLines()[numLigne]
57     fusion=1
58     while (index < len(texte)) :
59       if texte[index] not in (" ",",",")",";","\n") :
60          fusion=0
61          break
62       index=index+1
63     if fusion : 
64        import load 
65        jdc.joinLineandNext(numLigne)