Salome HOME
fc95db7e45ef4949f24e4208b21fc1ef3fabd3ef
[tools/eficas.git] / Traducteur / load.py
1 # -*- coding: utf-8 -*-
2
3 import os
4 import re
5 import parseur
6 from mocles import parseKeywords
7
8
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
61
62     def splitLine(self,numeroLigne,numeroColonne) :
63     #----------------------------------------------
64     # coupe la ligne numeroLigne en 2 a numeroColonne
65     # ajoute des blancs en debut de 2nde Ligne pour
66     # aligner 
67         numeroLigne = numeroLigne -1
68         Ldebut=self.lines[0:numeroLigne]
69         if len(self.lines) > numeroLigne :
70            Lfin=self.lines[numeroLigne+1:]
71         else :
72            Lfin=[]
73         Lsplit=self.lines[numeroLigne]
74         LigneSplitDebut=Lsplit[0:numeroColonne]+"\n"
75         LigneSplitFin=" "*numeroColonne+Lsplit[numeroColonne:]
76         Lmilieu=[LigneSplitDebut,LigneSplitFin]
77
78         self.lines=Ldebut+Lmilieu+Lfin
79
80     def joinLineandNext(self,numeroLigne) :
81     #--------------------------------------
82     # concatene les lignes numeroLigne et numeroLigne +1
83     # enleve les blancs de debut de la ligne (numeroLigne +1)
84         Ldebut=self.lines[0:numeroLigne-1]
85         if len(self.lines) > numeroLigne :
86            Lfin=self.lines[numeroLigne+1:]
87         else :
88            Lfin=[]
89
90         ligneMilieuDeb=self.lines[numeroLigne - 1 ]
91         ligneMilieuDeb=ligneMilieuDeb[0:-1]
92         ligneMilieuFin=self.lines[numeroLigne]
93         for i in range(len(ligneMilieuFin)):
94             if ligneMilieuFin[i] != " " :
95                ligneMilieuFin=ligneMilieuFin[i:]
96                break
97         Lmilieu=[ligneMilieuDeb+ligneMilieuFin,]
98
99         self.lines=Ldebut+Lmilieu+Lfin
100
101     def supLignes(self,debut,fin):
102     #------------------------
103         Ldebut=self.lines[0:debut-1]
104         Lfin=self.lines[fin:]
105         self.lines=Ldebut+Lfin
106
107     def remplaceLine(self,numeroLigne,nouveauTexte) :
108     #------------------------------------------------
109         self.lines[numeroLigne]=nouveauTexte
110
111 def getJDC(filename,atraiter):
112 #---------------------------_
113 # lit le JDC
114     f=open(filename)
115     src=f.read()
116     f.close()
117     jdc=JDC(filename,src,atraiter)
118     return jdc
119