Salome HOME
CCAR: merge de la version de developpement V1_12a2 dans la branche principale
[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 JDCdict={}
10
11 class JDC:
12     """Cet objet conserve toutes les informations relatives à un fichier de commandes .comm"""
13
14     def __init__(self,filename,src,atraiter):
15     #----------------------------------------
16         self.filename = os.path.abspath(filename)
17         self.atraiter=atraiter
18         self.init(src,atraiter)
19
20     def init(self,src,atraiter):
21     #---------------------------
22     # construction de self.lines
23         self.root=parseur.Parser(src,atraiter)
24         self.lines=src.splitlines(1)
25
26     def parseKeywords(self):
27     #-----------------------
28     # construction de fils (cf mocles.py)
29         parseKeywords(self.root)
30
31     def reset(self,src):
32     #-----------------------
33     # reconstruction 
34         self.init(src,self.atraiter)
35         self.parseKeywords()
36
37     def getSource(self):
38     #-----------------------
39     # retourne la concatenation de
40     # toutes les lignes 
41         return  "".join(self.getLines())
42
43     def getLine(self,linenum):
44     #-----------------------
45     # retourne la linenumieme ligne
46         return self.getLines()[linenum-1]
47
48     def getLines(self):
49     #----------------------------
50     # retourne toutes les lignes 
51         return self.lines
52
53     def addLine(self,ligne,numero) :
54     #----------------------------
55     # insere le texte contenu dans ligne
56     # dans la liste self.lines au rang numero
57         Ldebut=self.lines[0:numero]
58         Lmilieu=[ligne,]
59         Lfin=self.lines[numero:]
60         self.lines=Ldebut+Lmilieu+Lfin
61
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
81     def joinLineandNext(self,numeroLigne) :
82     #--------------------------------------
83     # concatene les lignes numeroLigne et numeroLigne +1
84     # enleve les blancs de debut de la ligne (numeroLigne +1)
85         Ldebut=self.lines[0:numeroLigne-1]
86         if len(self.lines) > numeroLigne :
87            Lfin=self.lines[numeroLigne+1:]
88         else :
89            Lfin=[]
90
91         ligneMilieuDeb=self.lines[numeroLigne - 1 ]
92         ligneMilieuDeb=ligneMilieuDeb[0:-1]
93         ligneMilieuFin=self.lines[numeroLigne]
94         for i in range(len(ligneMilieuFin)):
95             if ligneMilieuFin[i] != " " :
96                ligneMilieuFin=ligneMilieuFin[i:]
97                break
98         Lmilieu=[ligneMilieuDeb+ligneMilieuFin,]
99
100         self.lines=Ldebut+Lmilieu+Lfin
101
102     def supLignes(self,debut,fin):
103     #------------------------
104         Ldebut=self.lines[0:debut-1]
105         Lfin=self.lines[fin:]
106         self.lines=Ldebut+Lfin
107
108     def remplaceLine(self,numeroLigne,nouveauTexte) :
109     #------------------------------------------------
110         self.lines[numeroLigne]=nouveauTexte
111
112 def getJDC(filename,atraiter):
113 #---------------------------_
114 # lit le JDC
115     jdc=JDCdict.get(filename)
116     if not jdc: 
117         f=open(filename)
118         src=f.read()
119         f.close()
120         jdc=JDC(filename,src,atraiter)
121         JDCdict[filename]=jdc
122     return jdc
123