maListeRetour=[]
aReduire={}
+ declencheChoiceAvecSeqVid=False
if [] in laListe :
- declencheChoiceAvecSeqVid=True
+ # Comment reperer qu on est en bout
+ # 28 avril PN : j ajoute un choix vide si apres dans la liste
+ # il reste au moins 2 elts. Est-ce bien vrai ?
while [] in laListe : laListe.remove([])
- #min=0
- else :
- declencheChoiceAvecSeqVid=False
- #min=1
+ if len(laListe) > 1 : declencheChoiceAvecSeqVid=True
+
for ligne in laListe :
else : aReduire[ligne[0]]=[ligne[1:],]
+ if debug : print ('la Liste', laListe, declencheChoiceAvecSeqVid)
+ if debug : print (aReduire)
if len(aReduire.keys()) == 1 :
if declencheChoiceAvecSeqVid == False :
creeChoice=False
creeSequence=True
- self.texteComplexe += '\t'*(indent) + debSequenceDsBloc; indent=indent+1
+ if aReduire[ligne[0]] == [[]]: creeSequence=False
+ if creeSequence : self.texteComplexe += '\t'*(indent) + debSequenceDsBloc; indent=indent+1
else :
creeChoice=True
creeSequence=False
creeChoice=True
creeSequence=False
+ if debug : print ('creeSequence', creeSequence, aReduire)
for nomMC in aReduire.keys():
+ if debug : print (nomMC)
listeSuivante=aReduire[nomMC]
if creeChoice and listeSuivante != [[]] :
self.texteComplexe += '\t'*(indent) + debSequenceDsBloc; indent=indent+1
def ajouteAuxTextes(self,nomMC,indent,debug=False) :
if debug : print ('ajouteAuxTextes', nomMC, self.nom, self.entites[nomMC])
+ debug=False
#if debug :
# traceback.print_stack()
#for i in self.entites.keys() : print (self.entites[i][0].nom)
nomMC=nomMC[0]
if nomMC == 'Consigne' or nomMC == 'blocConsigne' : return
+ if debug : print (nomMC, 'dans ajoute aux textes', self.entites )
if len(self.entites[nomMC]) == 1:
mc=self.entites[nomMC][0]
mc.dumpXsd(dansFactorisation=True)
# on ajoute le nom de l element
# PN : attention on dumpe 2 fois
- self.entites[nomMC][0].dumpXsd(dansFactorisation=True,multiple=True,first=first)
if not (isinstance(self.entites[nomMC][0], Accas.SIMP)) :
- print ('2 blocs freres ont le meme nom et pas le meme type : pas encore traite')
- print ('Projection XSD impossible, changez un des ', nomMC)
- exit()
+ sontTousDisjoint=True
+ index=1
+ if debug : print ('on cherche si ils sont disjoints : ',self.entites[nomMC])
+ for mc in self.entites[nomMC] :
+ if debug : print ('compare mc' , mc, ' avec :')
+ for mcFrere in self.entites[nomMC][index:]:
+ ok = mc.isDisjoint(mcFrere)
+ if not ok :
+ sontTousDisjoint=False
+ break
+ if not(sontTousDisjoint) : break
+ index+=1
+ if not sontTousDisjoint:
+ print ('2 blocs freres ont le meme nom et ne sont pas disjoints : pas encore traite')
+ print ('Projection XSD impossible, changez un des ', nomMC)
+ exit()
+ self.fusionneDsUnChoix(nomMC,indent)
+ if debug : print ('self.nom', self.nom)
+ if debug : print ('self.texteComplexe' , self.texteComplexe)
+ if debug : print ('self.texteSimple' , self.texteSimple)
+ if debug : print ('self.texteElt' , self.texteElt)
+ return
+ self.entites[nomMC][0].dumpXsd(dansFactorisation=True,multiple=True,first=first)
texteDocUnion='\n'
i=1
for mc in self.entites[nomMC]:
self.texteSimple += texteSimplePart1 + texteSimpleUnion
#print ('self.texteSimple', self.texteSimple)
+ def fusionneDsUnChoix(self, nomMC,indent, debug=False):
+ if debug : print ('_________________________________', self.nom, self, nomMC,indent)
+ if debug : print (self.texteComplexe)
+ texteDocUnion='\n'
+ texteComplexe=''
+ texteComplexeVenantDesFils=''
+ texteSimple=''
+ mcRef= self.entites[nomMC][0]
+ # max = 1 : a priori les choix sont exclusifs
+ if (hasattr (mcRef, 'aDejaEteDumpe')) :
+ if debug : print ("je passe la NORMALEMENT car j ai deja ete dumpe")
+ return
+ leNomDuTypePyxb = mcRef.definitNomDuTypePyxb(forceACreer=True)
+ if debug : print ('nomMC', nomMC)
+ for mc in self.entites[nomMC]:
+ if debug : print ('------------', mc)
+ # on laisse dansFactorisation a False car ce n est pas comme une fusion de bloc
+ mc.texteComplexe = ''
+ mc.texteSimple = ''
+ mc.texteElt = ''
+ mc.dumpXsd(dansFactorisationDeFusion=True)
+ if debug : print ('texteSimple\n', mc.texteSimple, '\n fin\n')
+ if debug : print ('texteComplexeVenantDesFils\n',mc.texteComplexeVenantDesFils, '\n fin\n')
+ if debug : print ('texteComplexe\n', mc.texteComplexe, '\n fin\n')
+ if mc.ang != '' : texteDocUnion += str(i) + '- ' + mc.ang + ' or \n'; i=i+1
+ elif mc .fr != '' : texteDocUnion += str(i) + '- ' + mc.fr + ' ou \n'; i=i+1
+ texteComplexe += mc.texteComplexe
+ texteComplexeVenantDesFils += mc.texteComplexeVenantDesFils
+ texteSimple += mc.texteSimple
+
+ if debug : print ('______________________________')
+ if debug : print ('textecomplexeVenantDesFils : \n' ,texteComplexeVenantDesFils )
+ if debug : print ('______________________________')
+ if debug : print ('______________________________')
+ if debug : print ('textecomplexe : \n' ,texteComplexe )
+ if debug : print ('______________________________')
+ self.entites[nomMC][0].aDejaEteDumpe=True
+
+ self.texteElt = eltCompoDsSequence.format(nomMC, self.nomDuCodeDumpe,mcRef.nomDuTypePyxb,1,1)
+ self.texteDuFact = debutTypeCompo.format(self.entites[nomMC][0].nomDuTypePyxb)
+ self.texteDuFact += debutChoiceDsBloc
+ self.texteDuFact += texteComplexe
+ self.texteDuFact += finChoiceDsBloc
+ self.texteDuFact += finTypeCompo
+ self.texteSimple += texteSimple
+ self.texteComplexeVenantDesFils += texteComplexeVenantDesFils
+ self.texteComplexeVenantDesFils += self.texteDuFact
+ self.texteComplexe += self.texteElt
+ if debug : print ('______________________________')
+ if debug : print ('texteSimple : \n' ,self.texteSimple )
+ if debug : print ('______________________________')
+ self.entites[nomMC][0].aDejaEteDumpe=True
+
# ----------------------------------------
#for nom in self.ordre_mc:
# mcFils = self.entites[nom]
if debug : print ('creeTexteComplexeVenantDesFils', self.nom)
+ if self.nom == 'LeProc' : debug = True
for mcFils in self.mcXSD :
+ #print (mcFils,mcFils.nom)
+ if mcFils.nom == 'B1_B2' :debug=True
+ else : debug=False
if not (isinstance(mcFils, Accas.BLOC)) :
mcFils.dumpXsd(dansFactorisation)
- #print (mcFils.texteSimple)
self.texteComplexe += mcFils.texteElt
if mcFils.aCreer : self.texteSimple += mcFils.texteSimple
if mcFils.aCreer : texteComplexeVenantDesFils += mcFils.texteComplexe
if mcFils.aCreer : texteComplexeVenantDesFils += mcFils.texteComplexe
return texteComplexeVenantDesFils
- def dumpXsd(self, dansFactorisation=False, multiple = False, first=True):
- #print ('_________ dumpXsd___________', self.nom)
+ def dumpXsd(self, dansFactorisation=False, dansFactorisationDeFusion = False, multiple = False, first=True, debug=False):
if PourTraduction : print (self.nom)
# le prepareDump est appele sur les fils
if not (self.dejaPrepareDump) : self.prepareDumpXSD()
self.traduitMinMax()
# pour accepter les PROC et ...
#
- if self.aCreer :
- self.texteComplexe = debutTypeCompo.format(self.nomDuTypePyxb)
+ if debug : print ('dumpXsd', self.nom, self.aCreer)
+ if self.aCreer or dansFactorisationDeFusion:
+ if not dansFactorisationDeFusion : self.texteComplexe = debutTypeCompo.format(self.nomDuTypePyxb)
if isinstance(self,X_OPER) or isinstance(self,X_PROC) :
self.texteComplexe += debutTypeCompoEtape.format(self.code)
self.texteComplexe += debutTypeCompoSeq
- texteComplexeVenantDesFils=self.creeTexteComplexeVenantDesFils(dansFactorisation)
- self.texteComplexe = texteComplexeVenantDesFils + self.texteComplexe
+ texteComplexeVenantDesFils= self.creeTexteComplexeVenantDesFils(dansFactorisation)
+ if not dansFactorisationDeFusion :
+ self.texteComplexe = texteComplexeVenantDesFils + self.texteComplexe
+ self.texteComplexeVenantDesFils = ''
+ else :
+ self.texteComplexeVenantDesFils = texteComplexeVenantDesFils
# la fin de l oper est traitee dans le dumpXSD de X_OPER
if not isinstance(self,X_OPER ) : self.texteComplexe += finTypeCompoSeq
if isinstance(self,X_PROC) : self.texteComplexe += finTypeCompoEtape
- if not isinstance(self,X_OPER ) : self.texteComplexe += finTypeCompo
+ if not isinstance(self,X_OPER ) and not dansFactorisationDeFusion: self.texteComplexe += finTypeCompo
else :
self.texteComplexe = ""
return False
def besoinDeFactoriserTrivial(self,laListe):
+ # tout faux
+ # a revoir
+ return True
besoin=False
lesPremiers=set()
for mcBloc in laListe :