~sir-rainbow/+junk/scribes-on-win

« back to all changes in this revision

Viewing changes to plugins/Lines/lines.py

  • Committer: goldenmyst
  • Date: 2007-12-12 19:09:11 UTC
  • Revision ID: goldenmyst@goldenmyst-desktop-20071212190911-h0ur0r6ls2oxufwd
Refactored delete line function

Show diffs side-by-side

added added

removed removed

Lines of Context:
29
29
@contact: mystilleef@gmail.com
30
30
"""
31
31
 
 
32
newlines = ["\n", "\x00", "\r\n", "\x0D\x0A", "\r"]
 
33
 
32
34
def duplicate_line(textbuffer):
33
35
        """
34
36
        Duplicate line or selected lines.
144
146
        return True
145
147
 
146
148
def delete_line(textbuffer):
147
 
        """
148
 
        Delete a the cursor line in a gtk.TextBuffer.
 
149
        textbuffer.begin_user_action()
 
150
        try:
 
151
                begin_position, end_position = get_line_bounds(textbuffer)
 
152
                start_position = begin_position.copy()
 
153
                begin_position, end_position = __get_end_line_position(begin_position)
 
154
                textbuffer.delete(start_position, end_position)
 
155
        except TypeError:
 
156
                try:
 
157
                        __delete_last_line(textbuffer)
 
158
                except TypeError:
 
159
                        pass
 
160
        textbuffer.end_user_action()
 
161
        return
149
162
 
150
 
        @param textbuffer: The text buffer to operate on.
151
 
        @type textbuffer: A gtk.TextBuffer object.
152
 
        """
 
163
def __delete_last_line(textbuffer):
153
164
        begin_position, end_position = get_line_bounds(textbuffer)
154
165
        if begin_position.ends_line():
155
 
                # Delete empty line.
156
 
                delete_empty_line(textbuffer)
157
 
                return
158
 
        if begin_position.ends_line() and end_position.ends_line():
159
 
                # Delete empty second to last line.
160
 
                delete_empty_line(textbuffer)
161
 
                return
162
 
        if begin_position.get_char() in ["\x00"] and end_position.get_char() in ["\x00"]:
163
 
                # Delete empty last line.
164
 
                delete_empty_last_line(textbuffer)
165
 
                return
166
 
        if begin_position.get_char() and end_position.get_char() in ["\x00"]:
167
 
                # Delete last line with text on it.
168
 
                delete_last_line(textbuffer)
169
 
                return
170
 
        # Delete normal lines.
171
 
        end_position.forward_char()
172
 
        textbuffer.begin_user_action()
173
 
        textbuffer.delete(begin_position, end_position)
174
 
        textbuffer.end_user_action()
175
 
        return
176
 
 
177
 
def delete_empty_line(textbuffer):
178
 
        """
179
 
        Delete an empty cursor line.
180
 
 
181
 
        @param textbuffer: The text buffer to operate on.
182
 
        @type textbuffer: A gtk.TextBuffer object.
183
 
        """
184
 
        from SCRIBES.cursor import get_cursor_line
185
 
        cursor_line = get_cursor_line(textbuffer)
186
 
        begin_position = textbuffer.get_iter_at_line(cursor_line)
187
 
        end_position = begin_position.copy()
188
 
        end_position.forward_char()
189
 
        textbuffer.begin_user_action()
190
 
        textbuffer.delete(begin_position, end_position)
191
 
        textbuffer.end_user_action()
192
 
        return
193
 
 
194
 
def delete_empty_last_line(textbuffer):
195
 
        """
196
 
        Delete an empty last cursor line.
197
 
 
198
 
        @param textbuffer: The text buffer to operate on.
199
 
        @type textbuffer: A gtk.TextBuffer object.
200
 
        """
201
 
        begin_position, end_position = get_line_bounds(textbuffer)
202
 
        result = begin_position.backward_line()
203
 
        if result:
204
 
                if begin_position.get_char() in ["\n"]:
205
 
                        end_position = begin_position.copy()
206
 
                        end_position.forward_char()
207
 
                else:
208
 
                        end_position = begin_position.copy()
209
 
                        end_position.forward_to_line_end()
210
 
                        end_position.forward_char()
211
 
                        begin_position.forward_to_line_end()
212
 
                textbuffer.begin_user_action()
213
 
                textbuffer.delete(begin_position, end_position)
214
 
                textbuffer.end_user_action()
215
 
        return result
216
 
 
217
 
def delete_last_line(textbuffer):
218
 
        """
219
 
        Delete the last cursor line if it contains text.
220
 
 
221
 
        @param textbuffer: The text buffer to operate on.
222
 
        @type textbuffer: A gtk.TextBuffer object.
223
 
        """
224
 
        begin_position, end_position = get_line_bounds(textbuffer)
225
 
        end_position.forward_char()
226
 
        textbuffer.begin_user_action()
227
 
        textbuffer.delete(begin_position, end_position)
228
 
        delete_empty_last_line(textbuffer)
229
 
        textbuffer.end_user_action()
230
 
        return
 
166
                begin_position.backward_line()
 
167
                begin_position, end_position = __get_end_line_position(begin_position)
 
168
                textbuffer.delete(begin_position, end_position)
 
169
        else:
 
170
                textbuffer.delete(begin_position, end_position)
 
171
                from SCRIBES.cursor import get_cursor_iterator
 
172
                iterator = get_cursor_iterator(textbuffer)
 
173
                iterator.backward_line()
 
174
                start_position, end_position = __get_end_line_position(iterator)
 
175
                textbuffer.delete(start_position, end_position)
 
176
        return
 
177
 
 
178
def __get_end_line_position(iterator):
 
179
        from gtk import TEXT_SEARCH_VISIBLE_ONLY, TEXT_SEARCH_TEXT_ONLY
 
180
        for endline in newlines:
 
181
                try:
 
182
                        begin_position, end_position = iterator.forward_search(endline, TEXT_SEARCH_TEXT_ONLY)
 
183
                        return begin_position, end_position
 
184
                except TypeError:
 
185
                        continue
 
186
        return None
231
187
 
232
188
def join_line(textbuffer):
233
189
        """