def insert_text(cursor, text): """Inserts text and indents it if there are newlines in it.""" if '\n' not in text: cursor.insertText(text) return line = cursor.document().findBlock(cursor.selectionStart()).blockNumber() with cursortools.compress_undo(cursor): cursor.insertText(text) block = cursor.document().findBlockByNumber(line) last = cursor.block() tokeniter.update(block) # tokenize inserted lines while last != block: block = block.next() if set_indent(block, compute_indent(block)): tokeniter.update(block)
def re_indent(cursor): """Re-indents the selected region or the whole document.""" if cursor.hasSelection(): blocks = cursortools.blocks(cursor) else: blocks = cursortools.all_blocks(cursor.document()) with cursortools.compress_undo(cursor): for block in blocks: tokeniter.update(block) if tokeniter.state(block).mode() in ('lilypond', 'scheme'): indent = compute_indent(block) else: indent = get_indent(block) if set_indent(block, indent): tokeniter.update(block) # force token update if changed
def insert(name, view): """Insert named snippet into the view.""" text, variables = snippets.get(name) cursor = view.textCursor() selection = variables.get('selection', '') if 'yes' in selection and not cursor.hasSelection(): return if 'strip' in selection: cursortools.strip_selection(cursor) pos = cursor.selectionStart() line = cursor.document().findBlock(pos).blockNumber() with cursortools.compress_undo(cursor): # insert the snippet, might return a new cursor if 'python' in variables: new = insert_python(text, cursor, name, view) else: new = insert_snippet(text, cursor, variables) # QTextBlocks the snippet starts and ends block = cursor.document().findBlockByNumber(line) last = cursor.block() # re-indent if not explicitly suppressed by a 'indent: no' variable if last != block and 'no' not in variables.get('indent', ''): tokeniter.update(block) # tokenize inserted lines while True: block = block.next() if indent.set_indent(block, indent.compute_indent(block)): tokeniter.update(block) if block == last: break if not new and 'keep' in selection: end = cursor.position() cursor.setPosition(pos) cursor.setPosition(end, QTextCursor.KeepAnchor) view.setTextCursor(new or cursor)