print (self.compare(objAComparer) )
if self.compare(objAComparer) : return objAComparer.nomDuTypePyxb
indice += 1
- print ('jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj sortie de boucle')
self.aCreer = True
cata.dictTypesXSD[nom].append(self)
nomAlter='T_'+self.nom+'_'+str(indice)
for ligne in mc.arbrePossibles :
if ligne not in self.arbrePossibles : self.arbrePossibles.append(ligne)
- self.arbrePossibles.remove([])
# bien reflechir a l ordre des 2 lignes ci-dessous
self.construitEntites(self.mcXSD)
for i in self.entites :
print (i,self.entites[i])
lesPossibles=deepcopy(self.arbrePossibles)
- self.mcXSD=self.factorise(lesPossibles)
+
+ #self.mcXSD=self.factorise(lesPossibles)
+ self.getNomDuCodeDumpe()
+ self.nomDuTypePyxb = self.definitNomDuTypePyxb()
+ self.texteSimple = ''
+ self.texteComplexeVenantDesFils = ''
+ self.texteComplexe = debutTypeSubstDsBlocFactorise.format(self.nomDuTypePyxb)
+ # on enleve [] des possibles puisque l elt sera optionnel
+ lesPossibles.remove([])
+ self.mcXSD=self.factoriseEtCreeDump(lesPossibles,False)
+ self.texteComplexe += finTypeSubstDsBlocFactorise
+ self.texteComplexe +=self.texteComplexeVenantDesFils
+ print ('_________________________________')
+ print ('texteComplexe')
+ print (self.texteComplexe)
+ print ('_________________________________')
+ print ('texteSimple')
+ print (self.texteSimple)
+ print ('_________________________________')
+ print ('texteComplexeVenantDesFils')
+ print (self.texteComplexeVenantDesFils)
+ print ('_________________________________')
+ self.texteComplexe=self.texteComplexe+self.texteComplexeVenantDesFils
self.label='BlocAmbigu'
def construitEntites(self, laListe):
self.construitEntites(mc.mcXSD)
+
def dumpXsd(self, dansFactorisation=False):
- self.tousLesFils=[]
- self.getNomDuCodeDumpe()
- self.nomDuTypePyxb = self.definitNomDuTypePyxb()
- self.texteSimple = ""
- # il va falloir faire quelque chose d autre pour
- # Bloc1, simp1 obligatoire Bloc2
- # a cause du 0 probablement un booleen
+ # on ne fait rien, tout a ete fait dans le init
self.texteElt=substDsSequence.format(self.code,self.nomDuTypePyxb,0,1)
- print ('dump de ', self.nomDuTypePyxb, self.aCreer)
- self.texteComplexeVenantDesFils = ''
- self.texteComplexe = debutTypeCompo.format(self.nomDuTypePyxb)
- self.creeTexteComplexe(self.mcXSD)
- self.texteComplexe += finTypeCompo
- print (self.texteComplexe)
- print ('oooooooo', self.mcXSD)
- exit()
- def creeTexteComplexe(self,laListe):
- if (len(laListe))==1:
- print ('creeTexteComplexe', laListe,' ____________________')
- # on a une sequence
- self.texteComplexe += debutTypeCompoSeq
- eltSequence = laListe[0]
- index=0
- while (type(eltSequence[index]) != types.ListType ):
- nomFils=eltSequence[index]
- index=index+1
- print (self.entites[nomFils])
- # if len(self.entites[nomFils]) == 1:
- # il faut verifier le type normalement
- # et creer le texteSimple du fils en fonction
- if 1 == 1 :
- mcFils=self.entites[nomFils][0]
- mcFils.dumpXsd(dansFactorisation=True)
- self.texteComplexe += mcFils.texteElt
- self.texteSimple += mcFils.texteSimple
- reste=eltSequence[index:][0]
- if reste != [] :self.creeTexteComplexe(reste)
- #self.texteComplexeVenantDesFils += self.CreeTexteComplexeVenantDesFils(dansFactorisation)
- # PN ou doit on le faire ?
- #self.texteComplexe = texteComplexeVenantDesFils + self.texteComplexe
- self.texteComplexe += finTypeCompoSeq
- else :
- # on a un choix
- eltChoix = laListe
- print (eltChoix)
- self.texteComplexe += choiceDsBloc
- print ('traitement de', eltChoix)
- for l in eltChoix :
- if l != [] : self.creeTexteComplexe(l)
- ##for nom in l :
- # if len(self.entites[nomFils]) == 1:
- # il faut verifier le type normalement
- # et creer le texteSimple du fils en fonction
- # if 1 == 1 :
- # mcFils=self.entites[nom][0]
- # mcFils.dumpXsd(dansFactorisation=True)
- # self.texteComplexe += mcFils.texteElt
- # self.texteSimple += mcFils.texteSimple
- #reste=laListe[1:][0]
- self.texteComplexe += finChoiceDsBloc
- #if reste != [] :self.creeTexteComplexe(reste)
-
+
+# def creeTexteComplexe(self,laListe):
+# if (len(laListe))==1:
+# print ('creeTexteComplexe', laListe,' ____________________')
+# # on a une sequence
+# self.texteComplexe += debutTypeCompoSeq
+# eltSequence = laListe[0]
+# print ( 'eltSequence', eltSequence)
+# index=0
+# while (type(eltSequence[index]) != types.ListType ):
+# #while (type(eltSequence[index]) == types.StringType ):
+# nomFils=eltSequence[index]
+# index=index+1
+# print ('ds while')
+# print (nomFils, index)
+# print (self.entites[nomFils])
+# # if len(self.entites[nomFils]) == 1:
+# # il faut verifier le type normalement
+# # et creer le texteSimple du fils en fonction
+# if 1 == 1 :
+# mcFils=self.entites[nomFils][0]
+# mcFils.dumpXsd(dansFactorisation=True)
+# self.texteComplexe += mcFils.texteElt
+# self.texteSimple += mcFils.texteSimple
+# reste=eltSequence[index:][0]
+# if reste != [] :self.creeTexteComplexe(reste)
+# #self.texteComplexeVenantDesFils += self.CreeTexteComplexeVenantDesFils(dansFactorisation)
+# # PN ou doit on le faire ?
+# #self.texteComplexe = texteComplexeVenantDesFils + self.texteComplexe
+# self.texteComplexe += finTypeCompoSeq
+# else :
+# # on a un choix
+# eltChoix = laListe
+# print (eltChoix)
+# self.texteComplexe += choiceDsBloc
+# print ('traitement de', eltChoix)
+# for l in eltChoix :
+# if l != [] : self.creeTexteComplexe(l)
+# ##for nom in l :
+# # if len(self.entites[nomFils]) == 1:
+# # il faut verifier le type normalement
+# # et creer le texteSimple du fils en fonction
+# # if 1 == 1 :
+# # mcFils=self.entites[nom][0]
+# # mcFils.dumpXsd(dansFactorisation=True)
+# # self.texteComplexe += mcFils.texteElt
+# # self.texteSimple += mcFils.texteSimple
+# #reste=laListe[1:][0]
+# self.texteComplexe += finChoiceDsBloc
+# #if reste != [] :self.creeTexteComplexe(reste)
+#
- def factorise(self, laListe):
+ def factoriseEtCreeDump(self, laListe, dejaDansUneSequence=False, indent=2):
+ print ('debut factorise ********', laListe, indent)
maListeRetour=[]
aReduire={}
+
+ if [] in laListe :
+ declencheChoiceAvecSeqVid=True
+ laListe.remove([])
+ else :
+ declencheChoiceAvecSeqVid=False
+
for ligne in laListe :
- if ligne == [] : continue
- #print ('je traite', ligne)
+ #print (ligne)
if aReduire.has_key(ligne[0]) : aReduire[ligne[0]].append(ligne[1:])
else : aReduire[ligne[0]]=[ligne[1:],]
- #print ('clef = ', ligne[0], ' ', aReduire[ligne[0]])
- for clef in aReduire:
- if len(aReduire[clef])==1 :
- if aReduire[clef] != [[]]: maListeRetour.append([clef,]+aReduire[clef])
- else : maListeRetour.append([clef,])
- else :
- nvlElt=[clef,]
- #print ('je sors', nvlElt)
- nvlElt.append(self.factorise(aReduire[clef]))
- maListeRetour.append(nvlElt)
- #print ('maListeRetour ',self.nom, maListeRetour)
- #print ('________ fin factorise________' , laListe)
- #print ('_________________________')
- return maListeRetour
+ #print (aReduire)
+ if len(aReduire.keys()) == 1 :
+ creeSequence=True
+ if declencheChoiceAvecSeqVid == False :
+ creeChoice=False
+ else :
+ creeChoice=True
+ if dejaDansUneSequence : creeSequence = False
+ else :
+ creeChoice=True
+ creeSequence=False
+ self.texteComplexe += '\t'*indent + debutChoiceDsBloc
+ indent += 1
+
+ print ('creeChoice ', creeChoice, 'creeSequence', creeSequence)
+
+ for nomMC in aReduire.keys():
+ if creeSequence : self.texteComplexe += '\t'*(indent) + debSequenceDsBloc; indent=indent+1
+ self.ajouteAuxTextes(nomMC,indent)
+ listeSuivante=aReduire[nomMC]
+ if listeSuivante == [[]] : continue # Est-ce toujours vrai ?
+ if len(listeSuivante) == 1 : self.ajouteAuxTextes(listeSuivante[0])
+ else : self.factoriseEtCreeDump(listeSuivante,creeSequence, indent+int(creeSequence))
+ if creeSequence : indent=indent -1 ; self.texteComplexe += '\t'*(indent) + finSequenceDsBloc
+
+ if declencheChoiceAvecSeqVid :
+ self.texteComplexe += '\t'*indent + debSequenceDsBloc
+ self.texteComplexe += '\t'*indent + finSequenceDsBloc
+ if creeChoice : indent=indent -1 ; self.texteComplexe += '\t'*indent + finChoiceDsBloc
+
+ print ('________ fin factorise________' , laListe)
+ return (maListeRetour)
+
+
+ def ajouteAuxTextes(self,nomMC,indent) :
+ if (indent > 3) : indent = indent - 3
+ else : indent = 0
+ # if len(self.entites[nomMC]]) == 1:
+ if (1 == 1):
+ mc=self.entites[nomMC][0]
+ mc.dumpXsd(dansFactorisation=True)
+ self.texteComplexe += '\t'*(indent) + mc.texteElt
+ self.texteComplexeVenantDesFils += mc.texteComplexe
+ self.texteSimple += mc.texteSimple
+
+ # def verifieDisjoint(self, laListe):
+# # != a un premier dans les communs car laListe n est pas composee de la
+# # meme maniere dans les 2 cas
+# # ici on a juste des noms et on se moque du caractere optionnel
+# # tout le monde est obligatoire
+# print ('verifieDisjoint', laListe)
+# mesPremiers=set()
+# for listeDeNoms in laListe :
+# if listeDeNoms == [] : continue
+# if listeDeNoms[0] in mesPremiers : return False
+# return True
+#
+#
+#
+# def factorise(self, laListe):
+# print ('debut factorise ********', laListe)
+# suiteOptionnelle=False
+# maListeRetour=[]
+# aReduire={}
+# for ligne in laListe :
+# if ligne == [] :
+# suiteOptionnelle=True
+# continue # PN : faire qqchose pour transmettre le car optionnel
+# print ('je traite', ligne)
+# if aReduire.has_key(ligne[0]) : aReduire[ligne[0]].append(ligne[1:])
+# else : aReduire[ligne[0]]=[ligne[1:],]
+# print ('clef = ', ligne[0], ' ', aReduire[ligne[0]])
+# for clef in aReduire:
+# if len(aReduire[clef])==1 :
+# if aReduire[clef] != [[]]: maListeRetour.append([clef,]+aReduire[clef])
+# else : maListeRetour.append([clef,])
+# else :
+# nvlElt=[clef,]
+# #print ('je sors', nvlElt)
+# nvlElt.append(self.factorise(aReduire[clef]))
+# maListeRetour.append(nvlElt)
+# print ('maListeRetour ',laListe, maListeRetour, suiteOptionnelle)
+# print ('________ fin factorise________' , laListe)
+# print ('_________________________')
+# return maListeRetour
+#
+
# ----------------------------------------