diff --git a/gdb/data-directory/Makefile.in b/gdb/data-directory/Makefile.in index 6e219e09efc..b606fc654b5 100644 --- a/gdb/data-directory/Makefile.in +++ b/gdb/data-directory/Makefile.in @@ -74,6 +74,7 @@ PYTHON_FILE_LIST = \ gdb/frames.py \ gdb/printing.py \ gdb/prompt.py \ + gdb/styling.py \ gdb/types.py \ gdb/unwinder.py \ gdb/xmethod.py \ diff --git a/gdb/python/lib/gdb/__init__.py b/gdb/python/lib/gdb/__init__.py index 891f89093f1..5f63bced320 100644 --- a/gdb/python/lib/gdb/__init__.py +++ b/gdb/python/lib/gdb/__init__.py @@ -248,36 +248,3 @@ def with_parameter(name, value): yield None finally: set_parameter(name, old_value) - - -try: - from pygments import formatters, lexers, highlight - - def colorize(filename, contents): - # Don't want any errors. - try: - lexer = lexers.get_lexer_for_filename(filename, stripnl=False) - formatter = formatters.TerminalFormatter() - return highlight(contents, lexer, formatter).encode( - host_charset(), "backslashreplace" - ) - except: - return None - - def colorize_disasm(content, gdbarch): - # Don't want any errors. - try: - lexer = lexers.get_lexer_by_name("asm") - formatter = formatters.TerminalFormatter() - return highlight(content, lexer, formatter).rstrip().encode() - except: - return None - - -except: - - def colorize(filename, contents): - return None - - def colorize_disasm(content, gdbarch): - return None diff --git a/gdb/python/lib/gdb/styling.py b/gdb/python/lib/gdb/styling.py new file mode 100644 index 00000000000..aef39c6857c --- /dev/null +++ b/gdb/python/lib/gdb/styling.py @@ -0,0 +1,50 @@ +# Styling related hooks. +# Copyright (C) 2010-2022 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +"""Utilities for styling.""" + +import gdb + +try: + from pygments import formatters, lexers, highlight + + def colorize(filename, contents): + # Don't want any errors. + try: + lexer = lexers.get_lexer_for_filename(filename, stripnl=False) + formatter = formatters.TerminalFormatter() + return highlight(contents, lexer, formatter).encode( + gdb.host_charset(), "backslashreplace" + ) + except: + return None + + def colorize_disasm(content, gdbarch): + # Don't want any errors. + try: + lexer = lexers.get_lexer_by_name("asm") + formatter = formatters.TerminalFormatter() + return highlight(content, lexer, formatter).rstrip().encode() + except: + return None + +except: + + def colorize(filename, contents): + return None + + def colorize_disasm(content, gdbarch): + return None diff --git a/gdb/python/python.c b/gdb/python/python.c index cc80dc1daf9..79f9826365a 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -1156,11 +1156,17 @@ gdbpy_colorize (const std::string &filename, const std::string &contents) gdbpy_enter enter_py; - if (gdb_python_module == nullptr - || !PyObject_HasAttrString (gdb_python_module, "colorize")) + gdbpy_ref<> module (PyImport_ImportModule ("gdb.styling")); + if (module == nullptr) + { + gdbpy_print_stack (); + return {}; + } + + if (!PyObject_HasAttrString (module.get (), "colorize")) return {}; - gdbpy_ref<> hook (PyObject_GetAttrString (gdb_python_module, "colorize")); + gdbpy_ref<> hook (PyObject_GetAttrString (module.get (), "colorize")); if (hook == nullptr) { gdbpy_print_stack (); @@ -1227,11 +1233,17 @@ gdbpy_colorize_disasm (const std::string &content, gdbarch *gdbarch) gdbpy_enter enter_py; - if (gdb_python_module == nullptr - || !PyObject_HasAttrString (gdb_python_module, "colorize_disasm")) + gdbpy_ref<> module (PyImport_ImportModule ("gdb.styling")); + if (module == nullptr) + { + gdbpy_print_stack (); + return {}; + } + + if (!PyObject_HasAttrString (module.get (), "colorize_disasm")) return {}; - gdbpy_ref<> hook (PyObject_GetAttrString (gdb_python_module, + gdbpy_ref<> hook (PyObject_GetAttrString (module.get (), "colorize_disasm")); if (hook == nullptr) {