class DisassemblyLexer(Lexer): def __init__(self, window): self.window = window self.lexer = PygmentsLexer(CObjdumpLexer, sync_from_start=False) def lex_document(self, document): lexer_lex_line = self.lexer.lex_document(document) def fixup(t): return t.replace('/', '$').replace('^', '#') def lex_line(lineno): parts = lexer_lex_line(lineno) parts = [(s, fixup(t)) for (s,t) in parts] return parts return lex_line
class PtpythonLexer(Lexer): """ Lexer for ptpython input. If the input starts with an exclamation mark, use a Bash lexer, otherwise, use a Python 3 lexer. """ def __init__(self, python_lexer: Optional[Lexer] = None) -> None: self.python_lexer = python_lexer or PygmentsLexer(PythonLexer) self.system_lexer = PygmentsLexer(BashLexer) def lex_document( self, document: Document) -> Callable[[int], StyleAndTextTuples]: if document.text.startswith("!"): return self.system_lexer.lex_document(document) return self.python_lexer.lex_document(document)
class LineItemsLexer(Lexer): def __init__(self, window): self.window = window self.lexer = PygmentsLexer(CLexer, sync_from_start=False) super(LineItemsLexer, self).__init__() def lex_document(self, document): lexer_lex_line = self.lexer.lex_document(document) def lex_line(lineno): parts = lexer_lex_line(lineno) changed = self.window.changed if lineno < len(changed) and changed[lineno]: parts = [('bold fg:Olive', t) for (s, t) in parts] return parts return lex_line
class CallstackLexer(Lexer): def __init__(self): super(CallstackLexer, self).__init__() self.lexer = PygmentsLexer(CLexer, sync_from_start=False) def lex_document(self, document): lexer_lex_line = self.lexer.lex_document(document) def lex_line(lineno): if lineno % 2 == 0: parts = lexer_lex_line(lineno) if len(parts) > 0: parts[-1] = ('bold fg:Olive', parts[-1][1]) return parts else: return [('italic fg:DarkOliveGreen', document.lines[lineno])] return lex_line
class ThreadsLexer(Lexer): def __init__(self): super(ThreadsLexer, self).__init__() self.lexer = PygmentsLexer(CLexer, sync_from_start=False) def lex_document(self, document): lexer_lex_line = self.lexer.lex_document(document) def lex_line(lineno): line = document.lines[lineno] if len(document.lines) > 1 and len(line) > 1 and line[1] != ' ': parts = lexer_lex_line(lineno) if len(parts) > 0: parts[-1] = ('bold fg:Olive', parts[-1][1]) if line[0] == '*': idx = 0 if lineno == 0 else 1 parts[idx] = ('reverse ' + parts[idx][0], parts[idx][1]) return parts else: return [('bold italic fg:DarkOliveGreen', document.lines[lineno])] return lex_line
class BreakpointsLexer(Lexer): def __init__(self): super(BreakpointsLexer, self).__init__() self.lexer = PygmentsLexer(CLexer, sync_from_start=False) def lex_document(self, document): lexer_lex_line = self.lexer.lex_document(document) def lex_line(lineno): line = document.lines[lineno] if line.strip().startswith('at'): return [('bold italic fg:DarkOliveGreen', document.lines[lineno])] parts = lexer_lex_line(lineno) for i in range(0, len(parts)): if parts[i][1] == '*': parts[i] = (parts[i][0] + ' reverse ', parts[i][1]) elif parts[i][1] == 'in': parts[i + 2] = ('bold fg:Olive', parts[i + 2][1]) elif parts[i][1] == 'hit': parts[i + 2] = ('bold ' + parts[i + 2][0], parts[i + 2][1]) return parts return lex_line