# -*- coding: utf-8 -*-
import logging
from parseur import FactNode
+import string
debug=1
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):
#-----------------------------------
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
+
#-----------------------------------
node1=command.childNodes[0]
nbBlanc=node1.colno
return " "*nbBlanc
+
+
# "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
#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")
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:
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)
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):
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