]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
modif pour choice et sequence
authorpascale.noyret <pascale.noyret@edf.fr>
Mon, 23 Mar 2020 10:02:45 +0000 (11:02 +0100)
committerpascale.noyret <pascale.noyret@edf.fr>
Mon, 23 Mar 2020 10:02:45 +0000 (11:02 +0100)
Efi2Xsd/AccasXsd.py

index 211c1b580ffab705704066ff91750cbc90303cb6..dea863e64bb2c7c637643d9d2fe37194288433a6 100755 (executable)
@@ -95,6 +95,7 @@ class X_factCompoAmbigu(X_definition):
 # ----------------------------------------
 
    def __init__(self,nom,listeDeCreation,pere):
+       self.label = 'compoAmbigu'
        self.nom=nom
        self.pere=pere
        self.statut='f'
@@ -108,6 +109,7 @@ class X_factCompoAmbigu(X_definition):
        print ('creation de X_factCompoAmbigu', self.nom, self.ordre_mc)
        self.arbrePossibles=[]
        for mc in self.mcXSD :
+          print ('***************** mc', mc, mc.nom)
           if not hasattr(mc, 'arbrePossibles') : mc.construitArbrePossibles()
           for ligne in mc.arbrePossibles  :
               if ligne not in self.arbrePossibles : self.arbrePossibles.append(ligne)
@@ -126,7 +128,7 @@ class X_factCompoAmbigu(X_definition):
        self.texteComplexe = debutTypeSubstDsBlocFactorise.format(self.nomDuTypePyxb)
        # on enleve [] des possibles puisque l elt sera optionnel
        lesPossibles.remove([])
-       self.mcXSD=self.factoriseEtCreeDump(lesPossibles,False)
+       self.mcXSD=self.factoriseEtCreeDump(lesPossibles,False,nomAppel='Root')
        self.texteComplexe += finTypeSubstDsBlocFactorise
        self.texteComplexe +=self.texteComplexeVenantDesFils
        print ('_________________________________')
@@ -142,6 +144,11 @@ class X_factCompoAmbigu(X_definition):
        self.texteComplexe=self.texteComplexe+self.texteComplexeVenantDesFils
        self.label='BlocAmbigu'
 
+   def compare(self,autreMC):
+       if self.label != autreMC.label : return False
+       if self.arbrePossibles== autreMC.arbrePossible : return True
+       return False
+
    def construitEntites(self, laListe):
        for mc in laListe :
            if self.entites.has_key(mc.nom): self.entites[mc.nom].append(mc)
@@ -149,6 +156,9 @@ class X_factCompoAmbigu(X_definition):
            self.construitEntites(mc.mcXSD)
            
 
+   def construitArbrePossibles(self):
+   # inutile car on a deja l arbre mais appele parfois
+       pass
 
    def dumpXsd(self, dansFactorisation=False):
        # on ne fait rien, tout a ete fait dans le init
@@ -206,8 +216,9 @@ class X_factCompoAmbigu(X_definition):
 #          #if reste != [] :self.creeTexteComplexe(reste)
 #       
        
-   def factoriseEtCreeDump(self, laListe, dejaDansUneSequence=False, indent=2, apresChoice=False):
-       print ('debut factorise ********', laListe, indent)
+   def factoriseEtCreeDump(self, laListe, dejaDansUneSequence=False, indent=2 ,nomAppel=None):
+       ## nomAPpel ne sert que pour le debug
+       print ('debut factorise ********', laListe, indent, nomAppel )
        maListeRetour=[]
        aReduire={}
 
@@ -217,48 +228,43 @@ class X_factCompoAmbigu(X_definition):
        else :
           declencheChoiceAvecSeqVid=False
 
-       doitFermerSequence=False
-       if len(laListe) > 1 and apresChoice : 
-           self.texteComplexe += '\t'*(indent) + debSequenceDsBloc 
-           indent=indent+1
-           doitFermerSequence=True
 
        for ligne in laListe :
-          #print (ligne)
           if aReduire.has_key(ligne[0]) : aReduire[ligne[0]].append(ligne[1:])
           else : aReduire[ligne[0]]=[ligne[1:],]
-          #print (aReduire)
 
        
        if len(aReduire.keys()) == 1 :
-          creeSequence=True
           if declencheChoiceAvecSeqVid == False : 
              creeChoice=False
+             creeSequence=True
+             self.texteComplexe += '\t'*(indent) +  debSequenceDsBloc; indent=indent+1
           else :
              creeChoice=True
-          if dejaDansUneSequence : creeSequence = False
+             creeSequence=False
+             self.texteComplexe += '\t'*indent + debutChoiceDsBloc; indent=indent+1
        else :                         
+          self.texteComplexe += '\t'*indent + debutChoiceDsBloc; indent=indent+1
           creeChoice=True
           creeSequence=False
-          self.texteComplexe += '\t'*indent + debutChoiceDsBloc
-          indent += 1
-
 
        for nomMC in aReduire.keys():
-           if creeSequence : self.texteComplexe += '\t'*(indent) + debSequenceDsBloc; indent=indent+1
-           self.ajouteAuxTextes(nomMC,indent)
            listeSuivante=aReduire[nomMC]
+           if creeChoice and  listeSuivante != [[]] :
+              self.texteComplexe += '\t'*(indent) +  debSequenceDsBloc; indent=indent+1
+           self.ajouteAuxTextes(nomMC,indent)
            if listeSuivante == [[]] : continue # Est-ce toujours vrai ? 
            if len(listeSuivante) == 1 : self.ajouteAuxTextes(listeSuivante[0])
-           else : self.factoriseEtCreeDump(listeSuivante,creeSequence, indent+int(creeSequence), creeChoice)
-           if creeSequence :   indent=indent -1 ; self.texteComplexe += '\t'*(indent) + finSequenceDsBloc
+           else : self.factoriseEtCreeDump(listeSuivante,creeSequence, indent+int(creeSequence),nomMC)
+           if creeChoice   : indent=indent -1 ; self.texteComplexe += '\t'*(indent) + finSequenceDsBloc
 
        if declencheChoiceAvecSeqVid : 
-          self.texteComplexe +=  '\t'*indent + debSequenceDsBloc
+          self.texteComplexe +=  '\t'*indent +  debSequenceDsBloc
           self.texteComplexe +=  '\t'*indent + finSequenceDsBloc
-       if creeChoice                : indent=indent -1 ; self.texteComplexe += '\t'*indent + finChoiceDsBloc
+       if creeChoice   : indent=indent -1 ; self.texteComplexe += '\t'*indent + finChoiceDsBloc
+       if creeSequence : indent=indent -1 ; self.texteComplexe += '\t'*(indent) + finSequenceDsBloc
 
-       if doitFermerSequence : indent=indent-1;self.texteComplexe += '\t'*(indent) + finSequenceDsBloc
+       #if doitFermerSequence : indent=indent-1;self.texteComplexe += '\t'*(indent) + finSequenceDsBloc
        print ('________ fin factorise________' , laListe)
        return (maListeRetour)