~yacinechaouche/+junk/BZR

« back to all changes in this revision

Viewing changes to PROG/SOURCE_EDIT/trunk/.svn/text-base/reutils.py.svn-base

  • Committer: yacinechaouche at yahoo
  • Date: 2015-01-14 22:23:03 UTC
  • Revision ID: yacinechaouche@yahoo.com-20150114222303-6gbtqqxii717vyka
Ajout de CODE et PROD. Il faudra ensuite ajouter ce qu'il y avait dan TMP

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import re
 
2
 
 
3
class Stack :
 
4
    
 
5
    def __init__(self,l=[]):
 
6
        self.list = [(0,-1)]
 
7
        self.sp   = 0
 
8
        
 
9
    def push(self,tup):
 
10
        if type(tup) == type(()) :
 
11
            self.list.append(tup)
 
12
        else :
 
13
            self.list.append((tup,-1))
 
14
        self.sp+=1
 
15
        
 
16
    def pop(self):
 
17
        e = self.list[-1]
 
18
        self.list = self.list[:-1]
 
19
        self.sp-=1
 
20
        return e
 
21
    
 
22
    def top(self):
 
23
        return self.list[self.sp]
 
24
    
 
25
    def next(self):
 
26
        if self.sp < len(self.list) :
 
27
            self.sp+=1
 
28
            
 
29
    def previous(self):
 
30
        if self.sp > 0 :
 
31
            self.sp-=1
 
32
            
 
33
class FileBuffer :
 
34
    
 
35
    def __init__(self,filename=None):
 
36
        self.fd     = None
 
37
        self.pos    = Stack()
 
38
        self.buffer = ''
 
39
        self.auxbuf = ''
 
40
        if not filename :
 
41
            raise 'you must give a filename or a file descriptor'
 
42
        else :
 
43
            self.filename = filename
 
44
        self._openFile()
 
45
        self._bufferize()
 
46
 
 
47
 
 
48
#######################
 
49
#######################
 
50
## Private Methodes ###
 
51
#######################
 
52
#######################
 
53
        
 
54
    def _openFile(self):
 
55
        if not self.fd :
 
56
            self.fd = open(self.filename, 'r')
 
57
        else:
 
58
            print 'file alerady opened'
 
59
            
 
60
    def _bufferize(self):
 
61
        self.buffer = self.fd.read()
 
62
        self.end = len(self.buffer)
 
63
 
 
64
 
 
65
#####################
 
66
#####################
 
67
## Public methods  ##
 
68
#####################
 
69
#####################
 
70
 
 
71
    def getBuffer(self):
 
72
        return self.buffer
 
73
    
 
74
    def write(self):
 
75
        self.fd.close()
 
76
        self.fd = open(self.filename,'w')
 
77
        self.fd.write(self.buffer)
 
78
        self.fd.close()
 
79
        self.fd = open(self.filename,'r')
 
80
        
 
81
    def close(self):
 
82
        self.fd.close()
 
83
 
 
84
    def writeTo(self,filename):
 
85
        open(filename,'w').write(self.getBuffer())
 
86
 
 
87
        
 
88
###################
 
89
###################
 
90
## Positionning  ##
 
91
###################
 
92
###################
 
93
    def setPosition(self,pos):
 
94
        self.pos.push((pos,-1))
 
95
        
 
96
    def setEnd(self,e):
 
97
        self.pos[self.pos.sp][1] = e
 
98
        
 
99
    def setScope(self,s,e):
 
100
        self.pos.push(s,e)
 
101
 
 
102
    def getPosition(self):
 
103
        return self.pos.top()[0]
 
104
 
 
105
    def getEnd(self):
 
106
        return self.pos.top()[1]
 
107
 
 
108
    def getScope(self):
 
109
        return self.pos.top()
 
110
 
 
111
    def gotoPreviousPosition(self):
 
112
        return self.pos.pop()
 
113
 
 
114
    def gotoNexPosition(self):
 
115
        return self.pos.next()
 
116
    
 
117
    def gotoStartOfTag(self,tag):
 
118
        s,e      = self.pos.top()        
 
119
        matcho   = tag.search(self.buffer[s:e])
 
120
        if not matcho :
 
121
            print 'tag ',tag.pattern,' not found in', self.filename
 
122
            return None                        
 
123
        self.pos.push(matcho.start()+s)
 
124
        return self.pos.top()
 
125
    
 
126
    def gotoEndOfTag(self,tag):
 
127
        s,e      = self.pos.top()        
 
128
        matcho   = tag.search(self.buffer[s:e])
 
129
        if not matcho :
 
130
            print 'tag ',tag.pattern,' not found in', self.filename
 
131
            return None                          
 
132
        self.pos.push(matcho.end()+s)
 
133
        return self.pos.top()
 
134
 
 
135
    def getStartPositionOfTag(self,tag):
 
136
        s,e      = self.pos.top()        
 
137
        matcho   = tag.search(self.buffer[s:e])
 
138
        if not matcho :
 
139
            print 'tag ',tag.pattern,' not found in', self.filename
 
140
            return None                          
 
141
        return matcho.start() +s
 
142
 
 
143
    def getEndPositionOfTag(self,tag):
 
144
        s,e      = self.pos.top()        
 
145
        matcho   = tag.search(self.buffer[s:e])
 
146
        if not matcho :
 
147
            print 'tag ',tag.pattern,' not found in', self.filename
 
148
            return None                          
 
149
        return matcho.end() +s
 
150
 
 
151
    
 
152
####################
 
153
####################
 
154
## Seeing around  ##
 
155
####################
 
156
####################
 
157
 
 
158
    def context(self,before=50,after=50,start=None,end=None):
 
159
        """
 
160
        Displays "before" characters before the actual position and "after" lines after the actual position.
 
161
        """
 
162
        if not start:
 
163
            start = self.getPosition() - before
 
164
        if not end :
 
165
            end = self.getPosition() + after
 
166
            
 
167
        textAround = self.buffer[start:]+"MARK"+self.buffer[:end]
 
168
        print textAround
 
169
        
 
170
########################    ################################################
 
171
########################    ########################
 
172
########################    ########################
 
173
########################    
 
174
########################
 
175
########################
 
176
## Text manipultions  ##
 
177
########################
 
178
########################    
 
179
########################
 
180
########################    ################################################
 
181
########################    ########################
 
182
########################    ########################
 
183
########################    
 
184
 
 
185
########################    
 
186
 
 
187
 
 
188
###################
 
189
###################
 
190
## Getting text  ##
 
191
###################
 
192
###################
 
193
    
 
194
    def getOneOf(self,listOfTags):
 
195
        s,e = self.pos.top()
 
196
        for tag in listOfTags :
 
197
            matcho = tag.search(self.buffer[s:e])
 
198
            if matcho :
 
199
                return matcho
 
200
        print 'none of the tags were found'
 
201
        return None
 
202
 
 
203
    def getTextBetweenPositions(self,s,e):
 
204
        return self.buffer[s:e]
 
205
    
 
206
    def getTextBetweenTags(self,startTag,endTag):
 
207
        s,e         = self.pos.top()
 
208
        matcho      = startTag.search(self.buffer[s:e])
 
209
        if not matcho :
 
210
            print 'tag ',startTag.pattern,' not found in', self.filename
 
211
            return None
 
212
        startpos    = matcho.end()
 
213
        matcho      = endTag.search(self.buffer[s:e])
 
214
        if not matcho :
 
215
            print 'tag ',endTag.pattern,' not found in', self.filename
 
216
            return None        
 
217
        endpos      = matcho.start()
 
218
        return self.buffer[s+startpos:s+endpos]
 
219
    
 
220
#####################
 
221
#####################
 
222
## Replacing Text  ##
 
223
#####################
 
224
#####################
 
225
    
 
226
    def replaceText(self,tag,replacementText):
 
227
        s,e = self.pos.top()
 
228
        matcho = tag.search(self.buffer[s:e])
 
229
        if not matcho :
 
230
            print 'tag ',tag.pattern, 'not found in',self.filename
 
231
            return None
 
232
        startpos = matcho.start()
 
233
        endpos   = matcho.end()
 
234
        self.buffer = self.buffer[:s+startpos] + replacementText + self.buffer[s+endpos:]
 
235
        self.setPosition(s+startpos+len(replacementText))
 
236
    
 
237
    def replaceTextBetweenPositions(self,s,e,repText):
 
238
        self.buffer = self.buffer[:s] + repText + self.buffer[e:]
 
239
 
 
240
    def replaceTextBetweenTags(self,startTag,endTag,repText):
 
241
        s,e         = self.pos.top()        
 
242
        matcho      = startTag.search(self.buffer[s:e])
 
243
        if not matcho :
 
244
            print 'tag ',startTag.pattern,' not found in', self.filename
 
245
            return None        
 
246
        startpos    = matcho.end()
 
247
        matcho      = endTag.search(self.buffer[s:e])
 
248
        if not matcho :
 
249
            print 'tag ',endTag.pattern,' not found in', self.filename
 
250
            return None                
 
251
        endpos      = matcho.start()
 
252
        self.buffer = self.buffer[:s+startpos] + repText  +self.buffer[s+endpos:]
 
253
        
 
254
####################
 
255
####################
 
256
## Removing Text  ##
 
257
####################
 
258
####################
 
259
    def removeTextBetweenPositions(self,start,end):
 
260
        s,e         = self.pos.top()
 
261
        self.buffer = self.buffer[:start] + self.buffer[end:]
 
262
 
 
263
    def removeTextBetweenTags(self,startTag,endTag,advance=0):
 
264
        s,e         = self.pos.top()
 
265
        matcho      = startTag.search(self.buffer[s:e])
 
266
        if not matcho :
 
267
            print 'tag ',startTag.pattern,' not found in', self.filename
 
268
            return None
 
269
        startpos    = matcho.end()
 
270
        matcho      = endTag.search(self.buffer[s:e])
 
271
        if not matcho :
 
272
            print 'tag ',endTag.pattern,' not found in', self.filename
 
273
            return None        
 
274
        endpos      = matcho.start()
 
275
        self.buffer = self.buffer[:s+startpos] + self.buffer[s+endpos:]
 
276
        if advance:
 
277
            self.pos.push(s+endpos)
 
278
            
 
279
        
 
280
    def removeTagsAndTextBeteween(self,startTag,endTag):
 
281
        s,e         = self.pos.top()
 
282
        matcho      = startTag.search(self.buffer[s:e])
 
283
        if not matcho :
 
284
            print 'tag ',startTag.pattern,' not found in', self.filename
 
285
            return None        
 
286
        startpos    = matcho.start()
 
287
        matcho      = endTag.search(self.buffer[s:e])
 
288
        if not matcho :
 
289
            print 'tag ',endTag.pattern,' not found in', self.filename
 
290
            return None                
 
291
        endpos      = matcho.end()
 
292
        self.buffer = self.buffer[:s+startpos] + self.buffer[s+endpos:]
 
293
        
 
294
#####################
 
295
#####################
 
296
## Inserting Text  ##
 
297
#####################
 
298
#####################
 
299
        
 
300
    def insertTextAtPosition(self,pos,text):
 
301
        self.buffer = self.buffer[:pos] + text + self.buffer[pos:]
 
302
        
 
303
    def insertText(self,text):
 
304
        s,e         = self.pos.top()
 
305
        self.buffer = self.buffer[:s] + text + self.buffer[s:]
 
306
        self.setPosition(s+len(text))
 
307
 
 
308
        
 
309
######################
 
310
######################
 
311
## Matching objects ##
 
312
######################
 
313
######################
 
314
 
 
315
    def getMatcho(self,tag):
 
316
        s,e = self.pos.top()
 
317
        return tag.search(self.buffer[s:e])