From: PASCALE NOYRET Date: Tue, 29 Mar 2022 15:37:01 +0000 (+0200) Subject: fusion avec la branche de dev pour le traducteur X-Git-Tag: V9_9_0a2~3 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=91f2b45061abecf3d26adc7c1bf8d827265c553b;p=tools%2Feficas.git fusion avec la branche de dev pour le traducteur --- diff --git a/Traducteur/changeValeur.py b/Traducteur/changeValeur.py index 3beb5fe1..50b0c9c9 100644 --- a/Traducteur/changeValeur.py +++ b/Traducteur/changeValeur.py @@ -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 diff --git a/Traducteur/dictErreurs.py b/Traducteur/dictErreurs.py index 9499e408..82fc058f 100644 --- a/Traducteur/dictErreurs.py +++ b/Traducteur/dictErreurs.py @@ -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 diff --git a/Traducteur/inseremocle.py b/Traducteur/inseremocle.py index 4de6dd02..19dc1ceb 100644 --- a/Traducteur/inseremocle.py +++ b/Traducteur/inseremocle.py @@ -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 diff --git a/Traducteur/load.py b/Traducteur/load.py index 84702cb0..f5aa5b52 100644 --- a/Traducteur/load.py +++ b/Traducteur/load.py @@ -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: diff --git a/Traducteur/log.py b/Traducteur/log.py index 1fabade5..612c8ae4 100644 --- a/Traducteur/log.py +++ b/Traducteur/log.py @@ -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) diff --git a/Traducteur/mocles.py b/Traducteur/mocles.py index dbbe738a..553c9526 100644 --- a/Traducteur/mocles.py +++ b/Traducteur/mocles.py @@ -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 @@ -18,10 +18,11 @@ # 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] diff --git a/Traducteur/movemocle.py b/Traducteur/movemocle.py index f4f8fb31..4a43752f 100644 --- a/Traducteur/movemocle.py +++ b/Traducteur/movemocle.py @@ -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 diff --git a/Traducteur/parseur.py b/Traducteur/parseur.py index 88315ded..2635b9ab 100644 --- a/Traducteur/parseur.py +++ b/Traducteur/parseur.py @@ -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 @@ -18,16 +18,23 @@ # 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 diff --git a/Traducteur/regles.py b/Traducteur/regles.py index caed7b1f..a8f78215 100644 --- a/Traducteur/regles.py +++ b/Traducteur/regles.py @@ -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 diff --git a/Traducteur/removemocle.py b/Traducteur/removemocle.py index b960e22a..ee1eab7a 100644 --- a/Traducteur/removemocle.py +++ b/Traducteur/removemocle.py @@ -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) diff --git a/Traducteur/renamemocle.py b/Traducteur/renamemocle.py index da2862e5..e246abf2 100644 --- a/Traducteur/renamemocle.py +++ b/Traducteur/renamemocle.py @@ -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):] diff --git a/Traducteur/utils.py b/Traducteur/utils.py index 51174a6c..31ab5e87 100644 --- a/Traducteur/utils.py +++ b/Traducteur/utils.py @@ -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 diff --git a/Traducteur/visiteur.py b/Traducteur/visiteur.py index c7d9db44..94307123 100644 --- a/Traducteur/visiteur.py +++ b/Traducteur/visiteur.py @@ -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 @@ -19,9 +19,10 @@ # 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)