view libervia/backend/tools/common/ansi.py @ 4300:7ded09452875

plugin XEP-0077, XEP-0100: Adapt to component, and modernize: - Plugin XEP-0077 can now be used with component, allowing to register methods to return registration form, and to (un)register. - Plugin XEP-0077 now advertises its feature in disco. - Plugin XEP-0100 has been modernized a bit: it is one of the older plugin in Libervia, and it has now some type hints, models and async methods. - Plugin XEP-0100's bridge method `gateways_find` now returns a serialised dict with relevant data. Former XMLUI version has been moved to `gateways_find_xmlui`. rel 449
author Goffi <goffi@goffi.org>
date Fri, 06 Sep 2024 18:01:31 +0200
parents 4b842c1fb686
children
line wrap: on
line source

#!/usr/bin/env python3


# Libervia: an XMPP client
# Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org)

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero 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 Affero General Public License for more details.

# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

import sys


class ANSI(object):

    ## ANSI escape sequences ##
    RESET = "\033[0m"
    NORMAL_WEIGHT = "\033[22m"
    FG_BLACK, FG_RED, FG_GREEN, FG_YELLOW, FG_BLUE, FG_MAGENTA, FG_CYAN, FG_WHITE = (
        "\033[3%dm" % nb for nb in range(8)
    )
    BOLD = "\033[1m"
    BLINK = "\033[5m"
    BLINK_OFF = "\033[25m"

    @classmethod
    def color(cls, *args):
        """output text using ANSI codes

        this method simply merge arguments, and add RESET if is not the last arguments
        """
        # XXX: we expect to have at least one argument
        if args[-1] != cls.RESET:
            args = list(args)
            args.append(cls.RESET)
        return "".join(args)


try:
    tty = sys.stdout.isatty()
except (
    AttributeError,
    TypeError,
):  # FIXME: TypeError is here for Pyjamas, need to be removed
    tty = False
if not tty:
    #  we don't want ANSI escape codes if we are not outputing to a tty!
    for attr in dir(ANSI):
        if isinstance(getattr(ANSI, attr), str):
            setattr(ANSI, attr, "")
del tty