diff options
| author | Takashi Iwai <tiwai@suse.de> | 2025-10-16 21:14:24 +0300 | 
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2025-10-16 21:14:24 +0300 | 
| commit | ec2e0fb07d789976c601bec19ecced7a501c3705 (patch) | |
| tree | d593e7b6153618ca10855a3141404e952debe73c /tools/docs/lib/enrich_formatter.py | |
| parent | c6fceaf166479c05f7d3158ef08e78ae3e3dfa23 (diff) | |
| parent | f1a450f9e17d341f69f8fb19f6d13ef9f1aa508b (diff) | |
| download | linux-ec2e0fb07d789976c601bec19ecced7a501c3705.tar.xz | |
Merge tag 'asoc-fix-v6.18-rc1' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus
ASoC: Fixes for v6.18
A moderately large collection of driver specific fixes, plus a few new
quirks and device IDs.  The NAU8821 changes are a little large but more
in mechanical ways than in ways that are complex.
Diffstat (limited to 'tools/docs/lib/enrich_formatter.py')
| -rw-r--r-- | tools/docs/lib/enrich_formatter.py | 70 | 
1 files changed, 70 insertions, 0 deletions
| diff --git a/tools/docs/lib/enrich_formatter.py b/tools/docs/lib/enrich_formatter.py new file mode 100644 index 000000000000..bb171567a4ca --- /dev/null +++ b/tools/docs/lib/enrich_formatter.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2025 by Mauro Carvalho Chehab <mchehab@kernel.org>. + +""" +Ancillary argparse HelpFormatter class that works on a similar way as +argparse.RawDescriptionHelpFormatter, e.g. description maintains line +breaks, but it also implement transformations to the help text. The +actual transformations ar given by enrich_text(), if the output is tty. + +Currently, the follow transformations are done: + +    - Positional arguments are shown in upper cases; +    - if output is TTY, ``var`` and positional arguments are shown prepended +      by an ANSI SGR code. This is usually translated to bold. On some +      terminals, like, konsole, this is translated into a colored bold text. +""" + +import argparse +import re +import sys + +class EnrichFormatter(argparse.HelpFormatter): +    """ +    Better format the output, making easier to identify the positional args +    and how they're used at the __doc__ description. +    """ +    def __init__(self, *args, **kwargs): +        """Initialize class and check if is TTY""" +        super().__init__(*args, **kwargs) +        self._tty = sys.stdout.isatty() + +    def enrich_text(self, text): +        """Handle ReST markups (currently, only ``foo``)""" +        if self._tty and text: +            # Replace ``text`` with ANSI SGR (bold) +            return re.sub(r'\`\`(.+?)\`\`', +                          lambda m: f'\033[1m{m.group(1)}\033[0m', text) +        return text + +    def _fill_text(self, text, width, indent): +        """Enrich descriptions with markups on it""" +        enriched = self.enrich_text(text) +        return "\n".join(indent + line for line in enriched.splitlines()) + +    def _format_usage(self, usage, actions, groups, prefix): +        """Enrich positional arguments at usage: line""" + +        prog = self._prog +        parts = [] + +        for action in actions: +            if action.option_strings: +                opt = action.option_strings[0] +                if action.nargs != 0: +                    opt += f" {action.dest.upper()}" +                parts.append(f"[{opt}]") +            else: +                # Positional argument +                parts.append(self.enrich_text(f"``{action.dest.upper()}``")) + +        usage_text = f"{prefix or 'usage: '} {prog} {' '.join(parts)}\n" +        return usage_text + +    def _format_action_invocation(self, action): +        """Enrich argument names""" +        if not action.option_strings: +            return self.enrich_text(f"``{action.dest.upper()}``") + +        return ", ".join(action.option_strings) | 
