def change_indent(self, start, end, change): """Change indentation level""" # determine region if start is None or end is None: start, end = get_paragraphs_selected(self._buf) self._buf.begin_user_action() # loop through paragraphs for pos in paragraph_iter(self._buf, start, end): par_end = pos.copy() par_end.forward_line() indent, par_indent = self.get_indent(pos) if indent + change > 0: tag = self._buf.tag_table.lookup( RichTextIndentTag.tag_name(indent + change, par_indent)) self._buf.clear_tag_class(tag, pos, par_end) self._buf.apply_tag_selected(tag, pos, par_end) elif indent > 0: # remove indent and possible bullets self._buf.clear_tag_class( self._buf.tag_table.lookup( RichTextIndentTag.tag_name(indent, par_indent)), pos, par_end) self._remove_bullet(pos) else: # do nothing pass self._buf.end_user_action()
def toggle_bullet_list(self, par_type=None): """Toggle the state of a bullet list""" self._buf.begin_user_action() # round selection to nearest paragraph start, end = get_paragraphs_selected(self._buf) start, end = self._ensure_par_newline(start, end) # toggle bullet presence if par_type is None: # are all paragraphs bulleted? all_bullets = True for pos in paragraph_iter(self._buf, start, end): if self.get_indent(pos)[1] != "bullet": all_bullets = False break # choose opposite new par_type if all_bullets: par_type = "none" else: par_type = "bullet" # set each paragraph's bullet status for pos in paragraph_iter(self._buf, start, end): par_end = pos.copy() par_end.forward_line() self._set_bullet_list_paragraph(pos, par_end, par_type) self._buf.end_user_action()