Salome HOME
CCAR: merge de la branche de développement V1_11a1 dans la branche
[tools/eficas.git] / Traducteur / regles.py
1 # -*- coding: utf-8 -*-
2 import logging
3 import string
4 from parseur import FactNode
5 debug=0
6
7
8 #--------------------
9 class ensembleRegles:
10 #--------------------
11
12    def __init__(self,liste_regles):
13       self.liste=[]
14       for item in liste_regles :
15          args,clefRegle=item
16          r=regle(clefRegle,args)
17          self.liste.append(r)
18
19    def verif(self,commande) :
20        bool=1
21        for regle in self.liste :
22          result=regle.verif(commande)
23          bool=bool*result
24        return bool
25          
26 #--------------------------------
27 class pasDeRegle(ensembleRegles):
28 #--------------------------------
29    def __init__(self) :
30      pass
31
32    def verif (self,commande) :
33      return 1
34  
35
36 #------------
37 class regle :
38 #------------
39
40    def __init__(self,clef_regle,args):
41       self.fonction=dictionnaire_regle[clef_regle]
42       self.list_args=args
43       self.bool=0
44
45    def verif(self,commande):
46        f=self.fonction(self.list_args)
47        return f.verif(commande)
48       
49 #---------------------
50 class existeMCFParmi :
51 #---------------------
52    def __init__(self,list_arg):
53       self.listeMCF=list_arg;
54
55    def verif(self,commande):
56       bool=0
57       for c in commande.childNodes :
58          if c.name in self.listeMCF : 
59             bool=1
60             break
61       return bool
62       
63 #----------------------
64 class existeMCsousMCF :
65 #----------------------
66    def __init__(self,list_arg):
67       self.liste=list_arg;
68       self.MCF=self.liste[0]
69       self.MC=self.liste[1]
70
71    def verif(self,commande):
72       bool=0
73       for mcf in commande.childNodes :
74          if mcf.name != self.MCF : continue 
75          l=mcf.childNodes[:]
76          l.reverse()
77          for ll in l:
78             for mc in ll.childNodes:
79                if mc.name != self.MC : continue
80                bool=1
81       return bool
82       
83 #-----------------------------------------
84 class nexistepasMCsousMCF(existeMCsousMCF):
85 #-----------------------------------------
86    def __init__(self,list_arg):
87        existeMCsousMCF.__init__(self,list_arg)
88       
89
90    def verif(self,commande):
91        bool=existeMCsousMCF.verif(self,commande)
92        if bool : return 0
93        return 1
94
95 #-------------
96 class existe :
97 #--------------
98    def __init__(self,list_arg):
99       self.genea=list_arg
100
101    def cherche_mot(self,niveau,commande):
102       if commande == None            : return 0
103       if niveau   == len(self.genea) : return 1
104       texte=self.genea[niveau]
105       for c in commande.childNodes :
106           if c.name == texte : 
107              niveau = niveau+1
108              return self.cherche_mot(niveau,c)
109       return None
110
111    def verif(self,commande):
112       bool=self.cherche_mot(0,commande)
113       if bool == None : bool = 0
114       return bool
115
116 #-------------------------------
117 class MCsousMCFaPourValeur :
118 #------------------------------
119    def __init__(self,list_arg):
120       assert (len(list_arg)==4)
121       self.genea=list_arg[0:-2]
122       self.MCF=list_arg[0]
123       self.MC=list_arg[1]
124       self.Val=list_arg[2]
125       self.Jdc=list_arg[3]
126
127    def verif(self,commande):
128       bool=0
129       for mcf in commande.childNodes :
130          if mcf.name != self.MCF : continue 
131          l=mcf.childNodes[:]
132          l.reverse()
133          for ll in l:
134             for mc in ll.childNodes:
135                if mc.name != self.MC : continue
136                TexteMC=mc.getText(self.Jdc)
137                if (TexteMC.find(self.Val) < 0 ): continue
138                bool=1
139       return bool
140
141 #-------------------------------
142 class MCaPourValeur :
143 #------------------------------
144    def __init__(self,list_arg):
145       assert (len(list_arg)==3)
146       self.MC=list_arg[0]
147       self.Val=list_arg[1]
148       self.Jdc=list_arg[2]
149
150    def verif(self,commande):
151       bool=0
152       for mc in commande.childNodes :
153          if mc.name != self.MC : continue 
154          TexteMC=mc.getText(self.Jdc)
155          if (TexteMC.find(self.Val) < 0 ): continue
156          bool=1
157       return bool
158
159 dictionnaire_regle={"existe":existe,"existeMCFParmi":existeMCFParmi,"existeMCsousMCF":existeMCsousMCF,"nexistepasMCsousMCF":nexistepasMCsousMCF,"MCsousMCFaPourValeur":MCsousMCFaPourValeur,"MCaPourValeur":MCaPourValeur}
160 SansRegle=pasDeRegle()