git @ Cat's Eye Technologies Tamsin / 7b8977e
Simplify a bit before tackling this. Chris Pressey 10 years ago
1 changed file(s) with 17 addition(s) and 32 deletion(s). Raw diff Collapse all Expand all
3232 @property
3333 def column_number(self):
3434 return self._column_number
35
36 def advance(self, inp):
37 """Given a string that we have just consumed from the buffer,
38 return new line_number and column_number.
39
40 """
41 line_number = self.line_number
42 column_number = self.column_number
43 for char in inp:
44 if char == '\n':
45 line_number += 1
46 column_number = 1
47 else:
48 column_number += 1
49 return (line_number, column_number)
3550
3651 def chop(self, amount):
3752 raise NotImplementedError
86101 self.string, self.filename, self.position, self.line_number, self.column_number
87102 )
88103
89 def __eq__(self, other):
90 return (self.string == other.string and
91 self._filename == other.filename and
92 self.position == other.position and
93 self._line_number == other.line_number and
94 self._column_number == other.column_number)
95
96104 def chop(self, amount):
97105 assert self.position <= len(self.string) - amount, \
98106 "attempt made to chop past end of buffer"
99107 result = self.string[self.position:self.position + amount]
100108
101 line_number = self.line_number
102 column_number = self.column_number
103 for char in result:
104 if char == '\n':
105 line_number += 1
106 column_number = 1
107 else:
108 column_number += 1
109
109 (line_number, column_number) = self.advance(result)
110110 new_buffer = StringBuffer(self.string,
111111 filename=self._filename,
112112 position=self.position + amount,
141141 print "BAD"
142142 raise
143143
144 def __eq__(self, other):
145 return (self.file == other.file and
146 self._filename == other.filename and
147 self.position == other.position and
148 self._line_number == other.line_number and
149 self._column_number == other.column_number)
150
151144 def chop(self, amount):
152145 self.file.seek(self.position, 0)
153146 result = self.file.read(amount)
154147
155 line_number = self.line_number
156 column_number = self.column_number
157 for char in result:
158 if char == '\n':
159 line_number += 1
160 column_number = 1
161 else:
162 column_number += 1
163
148 (line_number, column_number) = self.advance(result)
164149 new_buffer = FileBuffer(self.file,
165150 filename=self._filename,
166151 position=self.position + amount,