]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
fusion avec la branche de dev pour le traducteur
authorPASCALE NOYRET <pascale.noyret@edf.fr>
Tue, 29 Mar 2022 15:37:01 +0000 (17:37 +0200)
committerPASCALE NOYRET <pascale.noyret@edf.fr>
Tue, 29 Mar 2022 15:37:01 +0000 (17:37 +0200)
13 files changed:
Traducteur/changeValeur.py
Traducteur/dictErreurs.py
Traducteur/inseremocle.py
Traducteur/load.py
Traducteur/log.py
Traducteur/mocles.py
Traducteur/movemocle.py
Traducteur/parseur.py
Traducteur/regles.py
Traducteur/removemocle.py
Traducteur/renamemocle.py
Traducteur/utils.py
Traducteur/visiteur.py

index 3beb5fe1ee0aaf62a8e1f6d87db3ae376fbbf556..50b0c9c9831ebd651720a3c7685c35f4240a7857 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2007-2021   EDF R&D
+# Copyright (C) 2007-2017   EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 9499e408ae056eb7c1aba2f380e25b6824ad9dfc..82fc058f160dce307df052151695c47bc21c361b 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2007-2021   EDF R&D
+# Copyright (C) 2007-2017   EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 4de6dd02d3d664b491a4f421ea40ebea4d19ad08..19dc1ceb4229a3560f7ada92417e522790493377 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2007-2021   EDF R&D
+# Copyright (C) 2007-2017   EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 84702cb0c1be46342049ca3c4d0f0e2da74b6cab..f5aa5b52ac58838d5588f5913dfb564aafb52884 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2007-2021   EDF R&D
+# Copyright (C) 2007-2017   EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -23,8 +23,7 @@ import re
 from Traducteur import parseur
 from Traducteur.mocles import parseKeywords
 
-import sets
-jdcSet=sets.Set()
+jdcSet=set()
 
 
 class JDCTrad:
index 1fabade55361a28f74f611cc3717715e8d587d17..612c8ae430743decf6478de108513cedcf836948 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2007-2021   EDF R&D
+# Copyright (C) 2007-2017   EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -24,7 +24,7 @@ logger=logging.getLogger()
 
 def initialise(flog=None):
     if flog == None :
-        MonHome=os.path.expanduser("~")
+        MonHome=os.path.join(os.path.expanduser("~")
         MaDir=MonHome+"/Eficas_install"
         try :
             os.mkdir(MaDir)
index dbbe738aa52f1875b337303ac1ae617ceb44be2c..553c9526de46b94420c5df13a47b061ec40cf978 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2007-2021   EDF R&D
+# Copyright (C) 2007-2017   EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-import compiler
+#import compiler
+import ast
 import types
 from Traducteur.parseur  import Keyword, FactNode, lastParen, lastParen2,maskStringsAndComments
-from Traducteur.visiteur import KeywordFinder, visitor
+from Traducteur.visiteur import KeywordFinder, NodeVisitor
 from Traducteur.utils import indexToCoordinates, lineToDict, dictToLine
 
 debug=0
@@ -31,7 +32,8 @@ def parseFact(match,c,kw):
 #------------------------
     submatch=match[2]
     lastpar=match[0]+lastParen(c.src[match[0]:])
-    if type(submatch[0][0]) ==types.IntType:
+    #if type(submatch[0][0]) ==types.IntType:
+    if isinstance(submatch[0][0], int) :
         #mot cle facteur isole
         no=FactNode()
         kw.addChild(no)
@@ -87,35 +89,37 @@ def parseKeywords(root):
     """A partir d'un arbre contenant des commandes, ajoute les noeuds
        fils correspondant aux mocles de la commande
     """
-    #print "parseKeywords"
     #traceback.print_stack(limit=5)
 
     matchFinder=KeywordFinder()
 
     for c in root.childNodes:
+        if debug : print ('parse -------------- ', c.name)
         maskedsrc=maskStringsAndComments(c.src)
         #on supprime seulement les blancs du debut pour pouvoir compiler
         #meme si la commande est sur plusieurs lignes seul le debut compte
-        ast=compiler.parse(c.src.lstrip())
+        #ast=compiler.parse(c.src.lstrip())
         #print ast
+        monAst=ast.parse(c.src.lstrip())
+        if debug : print (ast.dump(monAst))
         #Ne pas supprimer les blancs du debut pour avoir les bons numeros de colonne
         matchFinder.reset(maskedsrc)
-        visitor.walk(ast, matchFinder)
-        #print matchFinder.matches
+        matchFinder.visit(monAst)
+        if debug : print ("matchFinder.matches", matchFinder.matches)
         if len(matchFinder.matches) > 1:
             # plusieurs mocles trouves :
             # un mocle commence au debut du keyword (matchFinder.matches[i][0])
             # et finit juste avant le keyword suivant
             # (matchFinder.matches[i+1][0]])
             for i in range(len(matchFinder.matches)-1):
-                if debug:print "texte:",c.src[matchFinder.matches[i][0]:matchFinder.matches[i+1][0]]
+                if debug:print ("texte:",c.src[matchFinder.matches[i][0]:matchFinder.matches[i+1][0]])
                 x,y=indexToCoordinates(c.src,matchFinder.matches[i][0])
                 lineno=y+c.lineno
                 colno=x
                 x,y=indexToCoordinates(c.src,matchFinder.matches[i+1][0])
                 endline=y+c.lineno
                 endcol=x
-                if debug:print matchFinder.matches[i][0],matchFinder.matches[i][1],lineno,colno,endline,endcol
+                if debug:print (matchFinder.matches[i][0],matchFinder.matches[i][1],lineno,colno,endline,endcol)
                 kw=Keyword(matchFinder.matches[i][1],lineno,colno,endline,endcol)
                 c.addChild(kw)
                 submatch= matchFinder.matches[i][2]
@@ -127,14 +131,14 @@ def parseKeywords(root):
             #   (matchFinder.matches[i+1][0]) et
             #   finit avant la parenthese fermante de la commande (c.lastParen)
 
-            if debug:print "texte:",c.src[matchFinder.matches[i+1][0]:c.lastParen]
+            if debug:print ("texte:",c.src[matchFinder.matches[i+1][0]:c.lastParen])
             x,y=indexToCoordinates(c.src,matchFinder.matches[i+1][0])
             lineno=y+c.lineno
             colno=x
             x,y=indexToCoordinates(c.src,c.lastParen)
             endline=y+c.lineno
             endcol=x
-            if debug:print matchFinder.matches[i+1][0],matchFinder.matches[i+1][1],lineno,colno,endline,endcol
+            if debug:print (matchFinder.matches[i+1][0],matchFinder.matches[i+1][1],lineno,colno,endline,endcol)
             kw=Keyword(matchFinder.matches[i+1][1],lineno,colno,endline,endcol)
             c.addChild(kw)
             submatch= matchFinder.matches[i+1][2]
@@ -146,14 +150,14 @@ def parseKeywords(root):
             # il commence au debut du keyword (matchFinder.matches[0][0]) et
             # finit juste avant la parenthese fermante de la
             # commande (c.lastParen)
-            if debug:print "texte:",c.src[matchFinder.matches[0][0]:c.lastParen]
+            if debug:print ("texte:",c.src[matchFinder.matches[0][0]:c.lastParen])
             x,y=indexToCoordinates(c.src,matchFinder.matches[0][0])
             lineno=y+c.lineno
             colno=x
             x,y=indexToCoordinates(c.src,c.lastParen)
             endline=y+c.lineno
             endcol=x
-            if debug:print matchFinder.matches[0][0],matchFinder.matches[0][1],lineno,colno,endline,endcol
+            if debug:print ( matchFinder.matches[0][0],matchFinder.matches[0][1],lineno,colno,endline,endcol)
             kw=Keyword(matchFinder.matches[0][1],lineno,colno,endline,endcol)
             c.addChild(kw)
             submatch= matchFinder.matches[0][2]
index f4f8fb31fc3594c23483270fd9353098f4e22d35..4a43752f5fdaa00c96480d73fa0887f47a120a71 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2021   EDF R&D
+# Copyright (C) 2007-2017   EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -45,7 +45,7 @@ def moveMotCleFromFactToFather(jdc,command,fact,mocle):
                     if n.name != mocle:continue
                     # test boolchange_c :il faut le faire une seule fois par commande sinon duplication du mot clé
                     if boolchange_c != 0 :continue
-                    if debug : print "Changement de place :", n.name, n.lineno, n.colno
+                    if debug : print ("Changement de place :", n.name, n.lineno, n.colno)
                     MonTexte=n.getText(jdc);
                     boolChange=1
                     boolchange_c=1
@@ -69,7 +69,7 @@ def moveMotCleFromFactToFactMulti(jdc,oper,factsource,mocle,liste_factcible):
 def moveMotCleFromFactToFact(jdc,oper,factsource,mocle,factcible):
 #----------------------------------------------------------------------------
     if oper not in jdcSet : return
-    if debug : print "moveMotCleFromFactToFact pour " ,oper,factsource,mocle,factcible
+    if debug : print ("moveMotCleFromFactToFact pour " ,oper,factsource,mocle,factcible)
     boolChange=0
     commands= jdc.root.childNodes[:]
     commands.reverse()
@@ -83,7 +83,7 @@ def moveMotCleFromFactToFact(jdc,oper,factsource,mocle,factcible):
                 cible=mc
                 break
         if cible==None :
-            if debug : print "Pas de changement pour ", oper, " ", factsource, " ",mocle, "cible non trouvée"
+            if debug : print ("Pas de changement pour ", oper, " ", factsource, " ",mocle, "cible non trouvée")
             continue
 
         for mc in c.childNodes:
@@ -94,10 +94,10 @@ def moveMotCleFromFactToFact(jdc,oper,factsource,mocle,factcible):
                 source=mc
                 break
         if source==None :
-            if debug : print "Pas de changement pour ", oper, " ", factsource, " ",mocle, "source non trouvée"
+            if debug : print ("Pas de changement pour ", oper, " ", factsource, " ",mocle, "source non trouvée")
             continue
 
-        if debug : print "Changement pour ", oper, " ", factsource, " ",mocle, "cible et source trouvées"
+        if debug : print ("Changement pour ", oper, " ", factsource, " ",mocle, "cible et source trouvées")
         l=source.childNodes[:]
         for ll in l:
             for n in ll.childNodes:
@@ -118,7 +118,7 @@ def moveMotClefInOperToFact(jdc,oper,mocle,factcible,plusieursFois=True):
 # Attention le cas type est THETA_OLD dans calc_G
 
     if oper not in jdcSet : return
-    if debug : print "movemocleinoper pour " ,oper,mocle,factcible
+    if debug : print ( "movemocleinoper pour " ,oper,mocle,factcible)
     boolChange=9
     commands= jdc.root.childNodes[:]
     commands.reverse()
@@ -132,7 +132,7 @@ def moveMotClefInOperToFact(jdc,oper,mocle,factcible,plusieursFois=True):
                 cible=mc
                 break
         if cible==None :
-            if debug : print "Pas de changement pour ", oper, " ", factcible, " ", "cible non trouvée"
+            if debug : print ("Pas de changement pour ", oper, " ", factcible, " ", "cible non trouvée")
             continue
 
         source=None
@@ -143,7 +143,7 @@ def moveMotClefInOperToFact(jdc,oper,mocle,factcible,plusieursFois=True):
                 source=mc
                 break
         if source==None :
-            if debug : print "Pas de changement pour ", oper, " ", mocle, " source non trouvée"
+            if debug : print ("Pas de changement pour ", oper, " ", mocle, " source non trouvée")
             continue
         MonTexte=source.getText(jdc);
         boolChange=1
@@ -156,7 +156,7 @@ def copyMotClefInOperToFact(jdc,oper,mocle,factcible):
 #------------------------------------------------------
 
     if oper not in jdcSet : return
-    if debug : print "movemocleinoper pour " ,oper,mocle,factcible
+    if debug : print ("movemocleinoper pour " ,oper,mocle,factcible)
     boolChange=9
     commands= jdc.root.childNodes[:]
     commands.reverse()
@@ -170,7 +170,7 @@ def copyMotClefInOperToFact(jdc,oper,mocle,factcible):
                 cible=mc
                 break
         if cible==None :
-            if debug : print "Pas de changement pour ", oper, " ", factcible, " ", "cible non trouvée"
+            if debug : print ("Pas de changement pour ", oper, " ", factcible, " ", "cible non trouvée")
             continue
 
         source=None
@@ -181,7 +181,7 @@ def copyMotClefInOperToFact(jdc,oper,mocle,factcible):
                 source=mc
                 break
         if source==None :
-            if debug : print "Pas de changement pour ", oper, " ", mocle, " source non trouvée"
+            if debug : print ("Pas de changement pour ", oper, " ", mocle, " source non trouvée")
             continue
         MonTexte=source.getText(jdc);
         boolChange=1
index 88315dedd1a8385f5da75f8c6542499865a92074..2635b9abdd8a1c5909ac7499c2e84bb146f51efd 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2007-2021   EDF R&D
+# Copyright (C) 2007-2017   EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 import re,string
-import compiler
 
 debug=0
 
 escapedQuotesRE = re.compile(r"(\\\\|\\\"|\\\')")
 stringsAndCommentsRE =  \
       re.compile("(\"\"\".*?\"\"\"|'''.*?'''|\"[^\"]*\"|\'[^\']*\'|#.*?\n)", re.DOTALL)
-allchars = string.maketrans("", "")
-allcharsExceptNewline = allchars[: allchars.index('\n')]+allchars[allchars.index('\n')+1:]
-allcharsExceptNewlineTranstable = string.maketrans(allcharsExceptNewline, '*'*len(allcharsExceptNewline))
+
+import six
+if six.PY2 :
+    allchars = string.maketrans(u"", "")
+    allcharsExceptNewline = allchars[: allchars.index('\n')]+allchars[allchars.index('\n')+1:]
+    allcharsExceptNewlineTranstable = string.maketrans(allcharsExceptNewline, '*'*len(allcharsExceptNewline))
+else :
+    allchars=bytes.maketrans(b"",b"")
+    allcharsExceptNewline = allchars[: allchars.index(b'\n')]+allchars[allchars.index(b'\n')+1:]
+    allcharsExceptNewlineTranstable = bytes.maketrans(allcharsExceptNewline, b'*'*len(allcharsExceptNewline))
+
 
 #------------------------------
 def maskStringsAndComments(src):
@@ -37,7 +44,7 @@ def maskStringsAndComments(src):
     src = escapedQuotesRE.sub("**", src)
     allstrings = stringsAndCommentsRE.split(src)
     # every odd element is a string or comment
-    for i in xrange(1, len(allstrings), 2):
+    for i in range(1, len(allstrings), 2):
         if allstrings[i].startswith("'''")or allstrings[i].startswith('"""'):
             allstrings[i] = allstrings[i][:3]+ \
                            allstrings[i][3:-3].translate(allcharsExceptNewlineTranstable)+ \
@@ -136,9 +143,9 @@ def chaineBlanche(texte) :
 def printNode(node):
 #-------------------
     if hasattr(node,'name'):
-        print node.name
+        print (node.name)
     else:
-        print "pas de nom pour:",node
+        print ("pas de nom pour:",node)
     for c in node.childNodes:
         printNode(c)
 
@@ -161,10 +168,10 @@ def parser(src,atraiter):
     lineno=0
     for line in maskedLines:
         lineno=lineno+1
-        if debug:print "line",lineno,":",line
+        if debug:print ("line",lineno,":",line)
         m=pattern_proc.match(line)
         if m and (m.group(1) in atraiter):
-            if debug:print m.start(3),m.end(3),m.start(4)
+            if debug:print (m.start(3),m.end(3),m.start(4))
             root.addChild(Command(m.group(1),lineno,m.start(1),m.end(3)))
         else:
             m=pattern_oper.match(line)
@@ -182,10 +189,10 @@ def parser(src,atraiter):
         lineno=c.lineno
         colno=c.colno                       # debut de la commande
         while linenum < lineno:
-            line=iterlines.next()
+            line=iterlines.__next__()
             linenum=linenum+1
             if linenum != lineno:
-                if debug:print "line %s:"%linenum, line
+                if debug:print ("line %s:"%linenum, line)
         tmp = []
         hangingBraces = list(emptyHangingBraces)
         hangingComments = 0
@@ -217,9 +224,9 @@ def parser(src,atraiter):
                 c.endline=linenum
                 decal=len(line)-line.rindex(')')
                 c.lastParen=len(src)-decal
-                if debug:print "logical line %s %s:" % (c.lineno,c.endline),src
+                if debug:print ("logical line %s %s:" % (c.lineno,c.endline),src)
                 break
-            line=iterlines.next()
+            line=iterlines.__next__()
             linenum=linenum+1
 
     return root
index caed7b1fe711269b649f6947a65ef176c9503df3..a8f782156fe8ee46a2b6af57f06015b0be7bb756 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2007-2021    EDF R&D
+# Copyright (C) 2007-2017    EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -84,7 +84,7 @@ class regle :
 class existeMCFParmi :
 #---------------------
     """
-    Existance du mot-clé facteur parmi la liste
+    Existence du mot-clé facteur parmi la liste
     """
     def __init__(self, list_arg):
         self.listeMCF = list_arg
@@ -104,7 +104,7 @@ class existeMCFParmi :
 class nexistepasMCFParmi(existeMCFParmi) :
 #---------------------
     """
-    Existance du mot-clé facteur parmi la liste
+    Existence du mot-clé facteur parmi la liste
     """
     def __init__(self, list_arg):
         self.listeMCF = list_arg
@@ -121,7 +121,7 @@ class nexistepasMCFParmi(existeMCFParmi) :
 class existeMCsousMCF :
 #----------------------
     """
-    Existance du mot-clé simple sous le mot-clé facteur
+    Existence du mot-clé simple sous le mot-clé facteur
     """
     def __init__(self, list_arg):
         self.liste = list_arg
@@ -147,7 +147,7 @@ class existeMCsousMCF :
 class existeMCsousMCFcourant :
 #----------------------
     """
-    Existance du mot-clé simple sous le mot-clé facteur courant
+    Existence du mot-clé simple sous le mot-clé facteur courant
     """
     def __init__(self, list_arg):
         self.liste = list_arg
@@ -205,7 +205,7 @@ class nexistepasMCsousMCFcourant(existeMCsousMCFcourant):
 class existe :
 #--------------
     """
-    Existance du mot-clé simple
+    Existence du mot-clé simple
     """
     def __init__(self, list_arg):
         self.genea = list_arg
index b960e22adc706c845935dcae1de96fb443bd094d..ee1eab7ae173ace7ad6026e4a0ab0d050eff6487 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2007-2021   EDF R&D
+# Copyright (C) 2007-2017   EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -102,18 +102,18 @@ def removeCommandeSiRegleAvecErreur(jdc,command,liste_regles):
 #---------------------------------
 def removeMC(jdc,c,mc):
 #---------------------------------
-    if debug : print "Suppression de:",c.name,mc.name,mc.lineno,mc.colno,mc.endline,mc.endcol
+    if debug : print ("Suppression de:",c.name,mc.name,mc.lineno,mc.colno,mc.endline,mc.endcol)
     logging.info("Suppression de %s dans %s ligne %d",mc.name,c.name,mc.lineno)
 
     if mc.endline > mc.lineno:
-        if debug:print "mocle sur plusieurs lignes--%s--" % jdc.getLines()[mc.lineno-1][mc.colno:]
+        if debug: print ("mocle sur plusieurs lignes--%s--" % jdc.getLines()[mc.lineno-1][mc.colno:])
         jdc.getLines()[mc.lineno-1]=jdc.getLines()[mc.lineno-1][:mc.colno]
         jdc.getLines()[mc.endline-1]=jdc.getLines()[mc.endline-1][mc.endcol:]
 
         #attention : supprimer les lignes a la fin
         jdc.getLines()[mc.lineno:mc.endline-1]=[]
     else:
-        if debug:print "mocle sur une ligne--%s--" % jdc.getLines()[mc.lineno-1][mc.colno:mc.endcol]
+        if debug: print( "mocle sur une ligne--%s--" % jdc.getLines()[mc.lineno-1][mc.colno:mc.endcol])
         s=jdc.getLines()[mc.lineno-1]
         jdc.getLines()[mc.lineno-1]=s[:mc.colno]+s[mc.endcol:]
         fusionne(jdc,mc.lineno-1)
index da2862e5e40794f944d37ae3fe45543b51f29c68..e246abf2548f717db19477fc815e0107c388b513 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2007-2021   EDF R&D
+# Copyright (C) 2007-2017   EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -40,7 +40,7 @@ def renameMotCle(jdc,command,mocle,new_name, erreur=0,ensemble=regles.SansRegle)
             if mc.name != mocle:continue
             if ensemble.verif(c) == 0 : continue
             boolChange=1
-            if debug:print "Renommage de:",c.name,mc.name,mc.lineno,mc.colno
+            if debug: print ("Renommage de:",c.name,mc.name,mc.lineno,mc.colno)
             if erreur :
                 ecritErreur((command,mocle),c.lineno)
             else :
@@ -73,7 +73,7 @@ def renameOper(jdc,command,new_name):
     boolChange=0
     for c in jdc.root.childNodes:
         if c.name != command:continue
-        if debug:print "Renommage de:",c.name,c.lineno,c.colno
+        if debug: print ("Renommage de:",c.name,c.lineno,c.colno)
         logging.info("Renommage de: %s ligne %d en %s",c.name,c.lineno,new_name)
         boolChange=1
         s=jdc.getLines()[c.lineno-1]
@@ -172,7 +172,7 @@ def renameCommande(jdc,command,new_name,ensemble=regles.SansRegle):
         if c.name != command:continue
         if ensemble.verif(c) == 0 : continue
         boolChange=1
-        if debug:print "Renommage de:",c.name,new_name ,c.lineno,c.colno
+        if debug: print ("Renommage de:",c.name,new_name ,c.lineno,c.colno)
         logging.info("Renommage de: %s ligne %d en %s",c.name,c.lineno,new_name)
         s=jdc.getLines()[c.lineno-1]
         jdc.getLines()[c.lineno-1]=s[:c.colno]+new_name+s[c.colno+len(command):]
index 51174a6c70286a7747f55de6b538a1883896545d..31ab5e8753e327e622bdee438928d8157f1feec2 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2007-2021   EDF R&D
+# Copyright (C) 2007-2017   EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index c7d9db447d1085e0e3fa83f4e3ee1d84366bd2e9..94307123cb49017feb241b661de56da38f1c85bf 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2007-2021   EDF R&D
+# Copyright (C) 2007-2017   EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
 #
 
 import re
-from compiler import visitor
+from ast import NodeVisitor
+debug=0
 
-class MatchFinder:
+class MatchFinder (NodeVisitor):
     """Visiteur de base : gestion des matches """
     def reset(self,line):
         self.matches=[]
@@ -33,6 +34,7 @@ class MatchFinder:
             self.positions.append(i)
             i+=len(word)
         self.index = 0
+        if debug : print ('fin reset', self.words)
 
     def popWordsUpTo(self, word):
         if word == "*":
@@ -53,20 +55,26 @@ class MatchFinder:
 class KeywordFinder(MatchFinder):
     """Visiteur pour les keywords d'une commande """
 
-    def visitKeyword(self,node):
-        idx = self.getNextIndexOfWord(node.name)
-        self.popWordsUpTo(node.name)
+    def visit_keyword(self,node):
+        if debug : print (' visit_keyword', node.arg)
+        idx = self.getNextIndexOfWord(node.arg)
+        self.popWordsUpTo(node.arg)
         prevmatches=self._matches
         self._matches = []
-        for child in node.getChildNodes():
-            self.visit(child)
-        prevmatches.append((idx, node.name,self._matches))
+        #for child in node.getChildNodes():
+        #    self.visit(child)
+        self.generic_visit(node)
+        prevmatches.append((idx, node.arg,self._matches))
         self._matches=prevmatches
         #on ne garde que les matches du niveau Keyword le plus haut
         self.matches=self._matches
 
-    def visitTuple(self,node):
+    def visit_Tuple(self,node):
         matchlist=[]
+        # Pour eviter les tuples et listes ordinaires,
+        if not hasattr(node,'getChildNodes') : return 
+        print ('*********************************************************************')
+        print ("_____________ visit_Tuple", node)
         for child in node.getChildNodes():
             self._matches = []
             self.visit(child)
@@ -75,11 +83,16 @@ class KeywordFinder(MatchFinder):
                 # on ne garde que les visites fructueuses
                 matchlist.append(self._matches)
         self._matches=matchlist
+        #self.generic_visit(node)
 
-    visitList=visitTuple
+    visit_List=visit_Tuple
 
-    def visitName(self,node):
-        self.popWordsUpTo(node.name)
+    def visit_Name(self,node):
+        if debug : print ('visit_Name', node.id)
+        self.popWordsUpTo(node.id)
+        self.generic_visit(node)
 
-    def visitAssName(self,node):
-        self.popWordsUpTo(node.name)
+    def visit_AssName(self,node):
+        if debug : print ('visit_AssName', node.id)
+        self.popWordsUpTo(node.id)
+        self.generic_visit(node)