diff options
Diffstat (limited to 'gdb/python')
-rw-r--r-- | gdb/python/lib/gdb/__init__.py | 33 | ||||
-rw-r--r-- | gdb/python/lib/gdb/styling.py | 50 | ||||
-rw-r--r-- | gdb/python/python.c | 24 |
3 files changed, 68 insertions, 39 deletions
diff --git a/gdb/python/lib/gdb/__init__.py b/gdb/python/lib/gdb/__init__.py index 891f890..5f63bce 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 0000000..aef39c6 --- /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 <http://www.gnu.org/licenses/>. + +"""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 cc80dc1..79f9826 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) { |