From 8e0908f69b0e4d9e18aae11d370330e7583a6738 Mon Sep 17 00:00:00 2001 From: "pascale.noyret" Date: Mon, 23 Mar 2020 11:02:45 +0100 Subject: [PATCH] modif pour choice et sequence --- Efi2Xsd/AccasXsd.py | 50 +++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/Efi2Xsd/AccasXsd.py b/Efi2Xsd/AccasXsd.py index 211c1b58..dea863e6 100755 --- a/Efi2Xsd/AccasXsd.py +++ b/Efi2Xsd/AccasXsd.py @@ -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) -- 2.39.2