Salome HOME
merge de la branche BR_dev_mars_06 (tag V1_10b5) dans la branche principale
[tools/eficas.git] / Traducteur / load.py
1 # -*- coding: utf-8 -*-
2
3 import os
4 import parseur
5 from mocles import parseKeywords
6
7
8 JDCdict={}
9
10 class JDC:
11     """Cet objet conserve toutes les informations relatives à un fichier de commandes .comm"""
12
13     def __init__(self,filename,src,atraiter):
14     #----------------------------------------
15         self.filename = os.path.abspath(filename)
16         self.atraiter=atraiter
17         self.init(src,atraiter)
18
19     def init(self,src,atraiter):
20     #---------------------------
21     # construction de self.lines
22         self.root=parseur.parser(src,atraiter)
23         self.lines=src.splitlines(1)
24
25     def parseKeywords(self):
26     #-----------------------
27     # construction de fils (cf mocles.py)
28         parseKeywords(self.root)
29
30     def reset(self,src):
31     #-----------------------
32     # reconstruction 
33         self.init(src,self.atraiter)
34         self.parseKeywords()
35
36     def getSource(self):
37     #-----------------------
38     # retourne la concatenation de
39     # toutes les lignes 
40         return  "".join(self.getLines())
41
42     def getLine(self,linenum):
43     #-----------------------
44     # retourne la linenumieme ligne
45         return self.getLines()[linenum-1]
46
47     def getLines(self):
48     #----------------------------
49     # retourne toutes les lignes 
50         return self.lines
51
52     def addLine(self,ligne,numero) :
53     #----------------------------
54     # insere le texte contenu dans ligne
55     # dans la liste self.lines au rang numero
56         Ldebut=self.lines[0:numero]
57         Lmilieu=[ligne,]
58         Lfin=self.lines[numero:]
59         self.lines=Ldebut+Lmilieu+Lfin
60         src=self.getSource()
61         self.reset(src) 
62
63     def splitLine(self,numeroLigne,numeroColonne) :
64     #----------------------------------------------
65     # coupe la ligne numeroLigne en 2 a numeroColonne
66     # ajoute des blancs en debut de 2nde Ligne pour
67     # aligner 
68         numeroLigne = numeroLigne -1
69         Ldebut=self.lines[0:numeroLigne]
70         if len(self.lines) > numeroLigne :
71            Lfin=self.lines[numeroLigne+1:]
72         else :
73            Lfin=[]
74         Lsplit=self.lines[numeroLigne]
75         LigneSplitDebut=Lsplit[0:numeroColonne]+"\n"
76         LigneSplitFin=" "*numeroColonne+Lsplit[numeroColonne:]
77         Lmilieu=[LigneSplitDebut,LigneSplitFin]
78
79         self.lines=Ldebut+Lmilieu+Lfin
80         src=self.getSource()
81         self.reset(src)
82
83     def joinLineandNext(self,numeroLigne) :
84     #--------------------------------------
85     # concatene les lignes numeroLigne et numeroLigne +1
86     # enleve les blancs de debut de la ligne (numeroLigne +1)
87         Ldebut=self.lines[0:numeroLigne-1]
88         if len(self.lines) > numeroLigne :
89            Lfin=self.lines[numeroLigne+1:]
90         else :
91            Lfin=[]
92
93         ligneMilieuDeb=self.lines[numeroLigne - 1 ]
94         ligneMilieuDeb=ligneMilieuDeb[0:-1]
95         ligneMilieuFin=self.lines[numeroLigne]
96         for i in range(len(ligneMilieuFin)):
97             if ligneMilieuFin[i] != " " :
98                ligneMilieuFin=ligneMilieuFin[i:]
99                break
100         Lmilieu=[ligneMilieuDeb+ligneMilieuFin,]
101
102         self.lines=Ldebut+Lmilieu+Lfin
103         src=self.getSource()
104         self.reset(src)
105
106 def getJDC(filename,atraiter):
107 #---------------------------_
108 # lit le JDC
109     jdc=JDCdict.get(filename)
110     if not jdc: 
111         f=open(filename)
112         src=f.read()
113         f.close()
114         jdc=JDC(filename,src,atraiter)
115         JDCdict[filename]=jdc
116     return jdc
117