+ self.regles = (regles,)
+ self.statut = statut
+ self.defaut = defaut
+ self.min = min
+ self.max = max
+ if self.max == "**" : self.max=float('inf')
+ if self.min == "**" : self.min=float('-inf')
+ self.entites = args
+ self.position = None
+ self.affecter_parente()
+
+ def __call__(self, val, nom, parent):
+ """
+ Construit la structure de donnee pour un mot cle facteur a partir
+ de sa definition (self) de sa valeur (val), de son nom (nom) et de
+ son parent dans l arboresence (parent)
+
+ Suivant le type de la valeur on retournera soit un objet de type
+ MCFACT soit une liste de type MCLIST.
+
+ La creation d un mot cle facteur depend de son statut
+ - Si statut ='o' il est obligatoire
+ - Si statut == 'd' il est facultatif mais ses sous mots cles avec
+ defaut sont visibles
+ - Si statut == 'f' il est facultatif et ses sous mots avec defaut ne
+ sont pas visibles
+ - Si statut == 'c' il est cache ???
+ - Si defaut != None, on utilise cette valeur pour calculer la valeur
+ par defaut du mot cle facteur
+ """
+ if val is None:
+ if self.defaut == None:
+ val = {}
+ elif type(self.defaut) == tuple:
+ val = self.defaut
+ # Est ce utile ? Le défaut pourrait etre uniquement un dict
+ elif type(self.defaut) == dict or isinstance(self.defaut, _F):
+ val = self.defaut
+ else:
+ # On ne devrait jamais passer par la
+ print ("On ne devrait jamais passer par la")
+ return None
+ elif is_sequence(val) and len(val) == 0 and self.statut == 'o':
+ # On est dans le cas où le mcfact est présent mais est une liste/tuple
+ # vide. Il est obligatoire donc on l'initialise. Les règles, mots-clés
+ # obligatoires diront si un mcfact vide est accepté.
+ val = {}
+
+ # On cree toujours une liste de mcfact
+ l = self.list_instance()
+ l.init(nom=nom, parent=parent)
+ if type(val) in (tuple, list, self.list_instance):
+ for v in val:
+ if type(v) == dict or isinstance(v, _F):
+ objet = self.class_instance(
+ nom=nom, definition=self, val=v, parent=parent)
+ l.append(objet)
+ elif isinstance(v, self.class_instance):
+ l.append(v)
+ else:
+ l.append(N_OBJECT.ErrorObj(self, v, parent, nom))
+ elif type(val) == dict or isinstance(val, _F):
+ objet = self.class_instance(
+ nom=nom, definition=self, val=val, parent=parent)
+ l.append(objet)
+ elif isinstance(val, self.class_instance):
+ l.append(val)
+ else:
+ l.append(N_OBJECT.ErrorObj(self, val, parent, nom))
+