# ----------------------------------------
def __init__(self,nom,listeDeCreation,pere):
+ self.label = 'compoAmbigu'
self.nom=nom
self.pere=pere
self.statut='f'
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)
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 ('_________________________________')
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)
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
# #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={}
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)