def get_tokens_unprocessed(self, text): pylexer = PythonLexer(**self.options) tblexer = PythonTracebackLexer(**self.options) # print '\nTEXT > \n', text, '\n TEXT' for line in text.splitlines(): lstrip = line.lstrip() if lstrip.startswith('Out'): line = lstrip + '\n' elif lstrip.startswith('...'): line = line + '\n' else: line = line + '\n' input_prompt = self.input_prompt.match(line) output_prompt = self.output_prompt.match(line) if input_prompt is not None: yield (0, Generic.Prompt, input_prompt.group()) code = line[input_prompt.end():] for item in pylexer.get_tokens_unprocessed(code): yield item elif output_prompt is not None: # Use the 'error' token for output. We should probably make # our own token, but error is typicaly in a bright color like # red, so it works fine for our output prompts. yield (0, Generic.Error, output_prompt.group()) index = output_prompt.end() yield index, Generic.Output, line[index:] else: yield 0, Generic.Output, line
def prettify_source(source, traceback_frames): if not traceback_frames: return None msg = 'Traceback (most recent call last):\n' frame_msg = textwrap.dedent(""" File "{}", line {}, in {} {}\n""").strip() msg += indent('\n'.join(frame_msg.format(*frame) for frame in source[:traceback_frames]), 2) highlighted = highlight(msg, PythonTracebackLexer(), Terminal256Formatter(style='native')) # Remove first line (just needed for PythonTracebackLexer) highlighted = '\n'.join(highlighted.splitlines()[1:]) return indent(highlighted, 2).rstrip()
def get_tokens_unprocessed(self, text): pylexer = PythonLexer(**self.options) tblexer = PythonTracebackLexer(**self.options) curcode = '' insertions = [] for match in line_re.finditer(text): line = match.group() input_prompt = self.input_prompt.match(line) continue_prompt = self.continue_prompt.match(line.rstrip()) output_prompt = self.output_prompt.match(line) if line.startswith("#"): insertions.append((len(curcode), [(0, Comment, line)])) elif input_prompt is not None: insertions.append( (len(curcode), [(0, Other, input_prompt.group())])) curcode += line[input_prompt.end():] elif continue_prompt is not None: insertions.append( (len(curcode), [(0, Other, continue_prompt.group())])) curcode += line[continue_prompt.end():] elif output_prompt is not None: # Use the 'error' token for output. We should probably make # our own token, but error is typicaly in a bright color like # red, so it works fine for our output prompts. insertions.append(( len(curcode), [( 0, Other, #Generic.Error, output_prompt.group())])) curcode += line[output_prompt.end():] else: if curcode: for item in do_insertions( insertions, pylexer.get_tokens_unprocessed(curcode)): yield item curcode = '' insertions = [] yield match.start(), Generic.Output, line if curcode: for item in do_insertions(insertions, pylexer.get_tokens_unprocessed(curcode)): yield item
def get_tokens_unprocessed(self, text): pylexer = PythonLexer(**self.options) tblexer = PythonTracebackLexer(**self.options) curcode = '' insertions = [] for match in line_re.finditer(text): line = match.group() input_prompt = self.input_prompt.match(line) continue_prompt = self.continue_prompt.match(line.rstrip()) output_prompt = self.output_prompt.match(line) if line.startswith("#"): insertions.append((len(curcode), [(0, Comment, line)])) elif input_prompt is not None: insertions.append((len(curcode), [(0, Generic.Prompt, input_prompt.group())])) curcode += line[input_prompt.end():] elif continue_prompt is not None: insertions.append((len(curcode), [(0, Generic.Prompt, continue_prompt.group())])) curcode += line[continue_prompt.end():] elif output_prompt is not None: insertions.append((len(curcode), [(0, Generic.Output, output_prompt.group())])) curcode += line[output_prompt.end():] else: if curcode: for item in do_insertions( insertions, pylexer.get_tokens_unprocessed(curcode)): yield item curcode = '' insertions = [] yield match.start(), Generic.Output, line if curcode: for item in do_insertions(insertions, pylexer.get_tokens_unprocessed(curcode)): yield item