def current_line_formatted(self): """The colored current line (no prompt, not wrapped)""" if self.config.syntax: fs = bpythonparse(format(self.tokenize(self._current_line), self.formatter)) logging.debug('Display line %r -> %r', self._current_line, fs) else: fs = fmtstr(self._current_line) if hasattr(self, 'old_fs') and str(fs) != str(self.old_fs): pass #logging.debug('calculating current formatted line: %r', repr(fs)) self.old_fs = fs return fs
def unhighlight_paren(self): """modify line in self.display_buffer to unhighlight a paren if possible self.highlighted_paren should be a line in ? """ if self.highlighted_paren is not None and self.config.syntax: lineno, saved_tokens = self.highlighted_paren if lineno == len(self.display_buffer): # then this is the current line, so don't worry about it return self.highlighted_paren = None logging.debug('trying to unhighlight a paren on line %r', lineno) logging.debug('with these tokens: %r', saved_tokens) new = bpythonparse(format(saved_tokens, self.formatter)) self.display_buffer[lineno] = self.display_buffer[lineno].setslice_with_length(0, len(new), new, len(self.display_buffer[lineno]))
def push(self, line, insert_into_history=True): """Push a line of code onto the buffer, start running the buffer If the interpreter successfully runs the code, clear the buffer """ if self.paste_mode: self.saved_indent = 0 else: indent = len(re.match(r'[ ]*', line).group()) if line.endswith(':'): indent = max(0, indent + self.config.tab_length) elif line and line.count(' ') == len(line): indent = max(0, indent - self.config.tab_length) elif line and ':' not in line and line.strip().startswith(('return', 'pass', 'raise', 'yield')): indent = max(0, indent - self.config.tab_length) self.saved_indent = indent #current line not added to display buffer if quitting #TODO I don't understand this comment if self.config.syntax: display_line = bpythonparse(format(self.tokenize(line), self.formatter)) # careful: self.tokenize requires that the line not be in self.buffer yet! logging.debug('display line being pushed to buffer: %r -> %r', line, display_line) self.display_buffer.append(display_line) else: self.display_buffer.append(fmtstr(line)) if insert_into_history: self.insert_into_history(line) self.buffer.append(line) code_to_run = '\n'.join(self.buffer) logging.debug('running %r in interpreter', self.buffer) try: c = bool(code.compile_command('\n'.join(self.buffer))) self.saved_predicted_parse_error = False except (ValueError, SyntaxError, OverflowError): c = self.saved_predicted_parse_error = True if c: logging.debug('finished - buffer cleared') self.display_lines.extend(self.display_buffer_lines) self.display_buffer = [] self.buffer = [] self.cursor_offset_in_line = 0 self.coderunner.load_code(code_to_run) self.run_code_and_maybe_finish()
def reprint_line(self, lineno, tokens): logging.debug("calling reprint line with %r %r", lineno, tokens) if self.config.syntax: self.display_buffer[lineno] = bpythonparse(format(tokens, self.formatter))