]> SALOME platform Git repositories - modules/eficas.git/commitdiff
Salome HOME
PN : pour sauvegarde
authorPascale Noyret <pascale.noyret@edf.fr>
Fri, 26 May 2006 15:11:16 +0000 (15:11 +0000)
committerPascale Noyret <pascale.noyret@edf.fr>
Fri, 26 May 2006 15:11:16 +0000 (15:11 +0000)
Traducteur/inseremocle.py
Traducteur/jdcparser.py
Traducteur/movemocle.py
Traducteur/removemocle.py

index 62d1dc63e202d31b319ffe6958e78033635408ff..6e23e96fa87737e7c8bb5727bdadcb958af613bb 100644 (file)
@@ -1,6 +1,7 @@
 # -*- coding: utf-8 -*-
 import logging
 from parseur import FactNode
+import string
 debug=1
 
 
@@ -31,6 +32,46 @@ def inseremotcleincommand(jdc,command,texte):
     if numcol > 0 :            # Les mots clefs etaient sur la même ligne
         jdc.joinLineandNext(command.lineno)
 
+#---------------------------------------------
+def inseremotcleinfacteur(jdc,facteur,texte):
+#-------------------------------------------------
+    if debug : print "inseremotcle ", texte , " dans ", facteur.name
+    ancien=jdc.getLine(facteur.endline -1)
+    # On va chercher la dernier ) pour ajouter avant
+    # on va verifier s il il y a un , avant
+    ligne,col,boolvirgule=chercheDerniereParenthese(jdc,facteur)
+    if col > 0 :
+       jdc.splitLine(ligne,col)
+    if boolvirgule == 0 :
+       jdc.addLine(",\n",ligne)
+       jdc.joinLineandNext(ligne)
+    debut=ancien.find("_F") + 3
+    aligne=debut*" "
+    texte=aligne+texte+"\n"
+    jdc.addLine(texte,ligne)
+    jdc.joinLineandNext(ligne+1)
+
+#---------------------------------------
+def chercheDerniereParenthese(jdc,facteur):
+#---------------------------------------
+    ligne=facteur.endline-1
+    col=-1
+    boolvirgule=0
+    trouveParent=0
+    while ( trouveParent == 0) :
+       texte=jdc.getLine(ligne)
+       col=texte.rfind(")")
+       if col < 0 :
+          ligne=ligne-1
+       else :
+          trouveParent=1
+    indice=col -1
+    while ( indice > -1 and texte[indice] == " " ):
+          indice = indice -1
+    if texte[indice]=="," :
+       boolvirgule = 1
+    return (ligne,col,boolvirgule)
+
 #-----------------------------------
 def chercheDebut1mot(jdc,command):
 #-----------------------------------
@@ -40,9 +81,23 @@ def chercheDebut1mot(jdc,command):
     assert (command.childNodes != [])
     debut=-1
     node1=command.childNodes[0]
-    if node1.lineno == command.lineno :
-        debut=node1.colno
+    if hasattr(node1,"lineno"):
+       if node1.lineno == command.lineno :
+          debut=node1.colno
+    else:
+       debut=chercheDebutfacteur(jdc,command) 
+    if debut == -1 and debug : print "attention!!! pb pour trouver le debut dans ", command
+    return debut
+
+#-----------------------------------
+def chercheDebutfacteur(jdc,facteur):
+#-----------------------------------
+    debut=-1
+    ligne=jdc.getLines()[facteur.lineno]
+    debut=ligne.find("_F")
+    if debut >  -1 : debut=debut + 3
     return debut
+    
 
 
 #-----------------------------------
@@ -54,3 +109,5 @@ def chercheAlignement(jdc,command):
     node1=command.childNodes[0]
     nbBlanc=node1.colno
     return " "*nbBlanc
+
+
index 3eeebd5baaf2231290dcfd8a0e5a0b90b9054cab..a6a81ab3d1aa397b423633157f61601f17fc589d 100644 (file)
@@ -12,7 +12,7 @@ import movemocle
 #          "AFFE_MATERIAU","DEFI_MATERIAU","STAT_NONLINE",
 #        )
 
-atraiter=("CALC_FONCTION","IMPR_GENE")
+atraiter=("CALC_FONCTION","IMPR_GENE","STAT_NON_LINE")
 filename="toto.comm"
 jdc=getJDC(filename,atraiter)
 root=jdc.root
@@ -32,12 +32,25 @@ parseKeywords(root)
 #removemocle.removemocleinfact(jdc,"STAT_NONLINE","SOLV","METHOD")
 #removemocle.removemocle(jdc,"STAT_NONLINE","AFFE")
 
-#           renamecommande(jdc,ancien-nom-de-commande,nouveau-nom-de-commande)
-#renamemocle.renamecommande(jdc,"CALC_FONCTION","INFO_FONCTION")
+#          les arguments sont jdc,ancien-nom-de-commande,nouveau-nom-de-commande
+renamemocle.renamecommande(jdc,"CALC_FONCTION","INFO_FONCTION")
 
+#          Les arguments sont  - jdc,
+#                             - nom de la procedure (pas teste avec autre chose)
+#                             - nom du mot clef facteur contenant, 
+#                             - nom du mot cle simple
+#          Attention ne fonctionne pas pour l instant avec +sieurs occurences du mot cle à déplacer
 movemocle.movemoclefromfacttofather(jdc,"IMPR_GENE","GENE","UNITE")
 movemocle.movemoclefromfacttofather(jdc,"IMPR_GENE","GENE","FORMAT")
 
+#          Les arguments sont  - jdc
+#                             - nom de l operateur (pas teste avec autre chose)
+#                             - nom du mot clef facteur source, 
+#                             - nom du mot cle simple
+#                             - liste de  mots clef facteur arrivée possible
+#          Attention ne fonctionne pas pour l instant avec +sieurs occurences du mot cle à déplacer
+movemocle.movemoclefromfacttofactmulti(jdc,"STAT_NON_LINE","CONVERGENCE","RESI_INTE_RELA",("COMP_INCR","COMP_ELAS"))
+
 #renamemocle.renamecommande(jdc,"AFFE_CHAR_MECA","AFFE_CHAR_MECA_PN")
 #renamemocle.renamecommande(jdc,"DEBUT","DEBUT_PN")
 
index 86f2d881d48bbcc101c0dbce61b17b7790999692..c5a8c2421d94b789578b8932498c8424f8d1ac65 100644 (file)
@@ -7,6 +7,7 @@ from parseur import FactNode
 debug=1
 
 def movemoclefromfacttofather(jdc,command,fact,mocle):
+# exemple type : IMPR_GENE
     for c in jdc.root.childNodes:
         if c.name != command:continue
         for mc in c.childNodes:
@@ -22,5 +23,51 @@ def movemoclefromfacttofather(jdc,command,fact,mocle):
             
     removemocle.removemocleinfact(jdc,command,fact,mocle)
 
+def movemoclefromfacttofactmulti(jdc,oper,factsource,mocle,liste_factcible):
+# exemple type STAT_NON_LINE et RESI_INTER_RELA
+    for factcible in liste_factcible :
+       movemoclefromfacttofact(jdc,oper,factsource,mocle,factcible)
+    removemocle.removemocleinfact(jdc,oper,factsource,mocle)
+
+def movemoclefromfacttofact(jdc,oper,factsource,mocle,factcible):
+    if debug : print "movemoclefromfacttofact pour " ,oper,factsource,mocle,factcible
+    for c in jdc.root.childNodes:
+        if c.name != oper : continue
+        cible=None
+        for mc in c.childNodes:
+           if mc.name != factcible : 
+              continue
+           else :
+              cible=mc
+              break
+        if cible==None :
+           logging.info("Pas de changement pour %s,%s,%s", oper, factsource,mocle)
+           logging.info("Le mot clef cible  %s n est pas présent", factcible)
+           if debug : print "Pas de changement pour ", oper, " ", factsource, " ",mocle, "cible non trouvée"
+           continue
+
+        for mc in c.childNodes:
+           source=None
+           if mc.name != factsource:
+              continue
+           else :
+              source=mc
+              break
+        if source==None :
+           logging.info("Pas de changement pour %s,%s,%s", oper, factsource,mocle)
+           logging.info("Le mot clef source  %s n est pas présent", factsource)
+           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"
+        l=source.childNodes[:]
+        for ll in l:
+           for n in ll.childNodes:
+              if n.name != mocle:continue
+              MonTexte=n.getText(jdc);
+              print cible.name
+              inseremocle.inseremotcleinfacteur(jdc,cible,MonTexte)
+              logging.info("Changement de place :  %s,%s, %s ",n.name, n.lineno, n.colno)
+              logging.info("vers :  %s", cible.name)
 
 
index 66fabd79ad379d401479596493b998e505a967a7..96161176a25b6c783d4e4d2a23eba23f5328de4f 100644 (file)
@@ -2,7 +2,8 @@
 import logging
 from parseur import FactNode
 
-debug=1
+#debug=1
+debug=0
 #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)
 #avant de supprimer un autre mocle, on remet à jour l'arbre syntaxique (lineno,colno,etc.)
 def removemocle(jdc,command,mocle):
@@ -30,6 +31,7 @@ def removemc(jdc,c,mc):
         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:]
+    jdc.reset(jdc.getSource())
 
 def removemocleinfact(jdc,command,fact,mocle):
     #on itere sur les commandes a l'envers pour ne pas polluer les numeros de ligne avec les modifications