def slotAccepted(self): """Makes the score and puts it in the editor.""" from . import build builder = build.Builder(self) cursor = self.parent().currentView().textCursor() with cursortools.editBlock(cursor): cursortools.insertText(cursor, builder.text()) indent.reIndent(cursor)
def reformat(cursor): """Reformats the selection or the whole document, adjusting the whitespace.""" def newlinebefore(t): editor.insertText(tokeniter.cursor(block, t, end=0), '\n') def newlineafter(t): editor.insertText(tokeniter.cursor(block, t, start=len(t)), '\n') indent_vars = indent.indentVariables(cursor.document()) with cursortools.editBlock(cursor): indent.reIndent(cursor) with cursortools.Editor() as editor: for block in get_blocks(cursor): denters = [] tokens = tokeniter.tokens(block) nonspace_index = -1 for i, t in enumerate(tokens): if isinstance(t, ly.lex.Indent) and t in ('{', '<<'): denters.append(i) elif isinstance(t, ly.lex.Dedent) and t in ('}', '>>'): if denters: denters.pop() elif nonspace_index != -1: newlinebefore(t) elif not isinstance(t, ly.lex.Space): nonspace_index = i for i in denters: if i < nonspace_index: newlineafter(tokens[i]) # TODO: wrap long lines indent.reIndent(cursor) with cursortools.Editor() as editor: for block in get_blocks(cursor): tokens = tokeniter.tokens(block) if (len(tokens) == 2 and isinstance(tokens[0], ly.lex.Space) and isinstance(tokens[1], ( ly.lex.lilypond.LineComment, ly.lex.scheme.LineComment)) and len(tokens[1]) > 2 and len(set(tokens[1][:3])) == 1): # move commented lines with more than 2 comment characters # to column 0 editor.removeSelectedText(tokeniter.cursor(block, tokens[0])) else: # remove trialing whitespace for t in tokens[::-1]: if isinstance(t, ly.lex.Space): editor.removeSelectedText(tokeniter.cursor(block, t)) else: break
def reIndent(self): import indent indent.reIndent(self.currentView().textCursor())