diff options
| author | arcadia-devtools <[email protected]> | 2022-02-08 15:26:58 +0300 | 
|---|---|---|
| committer | arcadia-devtools <[email protected]> | 2022-02-08 15:26:58 +0300 | 
| commit | 2efaaefec2cb2a55d55c01753d1eed2a3296adb5 (patch) | |
| tree | 27ec5258b325565c3963b91b36d64e84084fdb04 /contrib/python/prompt-toolkit/py3/prompt_toolkit/formatted_text | |
| parent | 23793c5d0827a08b5ff9242d2123eff92b681912 (diff) | |
intermediate changes
ref:0bfa27bb6c38df8c510497e54e4ebf0b4fb84503
Diffstat (limited to 'contrib/python/prompt-toolkit/py3/prompt_toolkit/formatted_text')
3 files changed, 47 insertions, 4 deletions
diff --git a/contrib/python/prompt-toolkit/py3/prompt_toolkit/formatted_text/__init__.py b/contrib/python/prompt-toolkit/py3/prompt_toolkit/formatted_text/__init__.py index 1cb56bb6536..f0c92c96f94 100644 --- a/contrib/python/prompt-toolkit/py3/prompt_toolkit/formatted_text/__init__.py +++ b/contrib/python/prompt-toolkit/py3/prompt_toolkit/formatted_text/__init__.py @@ -27,6 +27,7 @@ from .utils import (      fragment_list_to_text,      fragment_list_width,      split_lines, +    to_plain_text,  )  __all__ = [ @@ -49,4 +50,5 @@ __all__ = [      "fragment_list_width",      "fragment_list_to_text",      "split_lines", +    "to_plain_text",  ] diff --git a/contrib/python/prompt-toolkit/py3/prompt_toolkit/formatted_text/ansi.py b/contrib/python/prompt-toolkit/py3/prompt_toolkit/formatted_text/ansi.py index 374cb325754..3d570633570 100644 --- a/contrib/python/prompt-toolkit/py3/prompt_toolkit/formatted_text/ansi.py +++ b/contrib/python/prompt-toolkit/py3/prompt_toolkit/formatted_text/ansi.py @@ -55,7 +55,11 @@ class ANSI:          formatted_text = self._formatted_text          while True: +            # NOTE: CSI is a special token within a stream of characters that +            #       introduces an ANSI control sequence used to set the +            #       style attributes of the following characters.              csi = False +              c = yield              # Everything between \001 and \002 should become a ZeroWidthEscape. @@ -70,6 +74,7 @@ class ANSI:                      else:                          escaped_text += c +            # Check for CSI              if c == "\x1b":                  # Start of color escape sequence.                  square_bracket = yield @@ -84,19 +89,37 @@ class ANSI:                  # Got a CSI sequence. Color codes are following.                  current = ""                  params = [] +                  while True:                      char = yield + +                    # Construct number                      if char.isdigit():                          current += char + +                    # Eval number                      else: +                        # Limit and save number value                          params.append(min(int(current or 0), 9999)) + +                        # Get delimiter token if present                          if char == ";":                              current = "" + +                        # Check and evaluate color codes                          elif char == "m":                              # Set attributes and token.                              self._select_graphic_rendition(params)                              style = self._create_style_string()                              break + +                        # Check and evaluate cursor forward +                        elif char == "C": +                            for i in range(params[0]): +                                # add <SPACE> using current style +                                formatted_text.append((style, " ")) +                            break +                          else:                              # Ignore unsupported sequence.                              break @@ -127,14 +150,16 @@ class ANSI:                  self._bgcolor = _bg_colors[attr]              elif attr == 1:                  self._bold = True +            # elif attr == 2: +            #   self._faint = True              elif attr == 3:                  self._italic = True              elif attr == 4:                  self._underline = True              elif attr == 5: -                self._blink = True +                self._blink = True  # Slow blink              elif attr == 6: -                self._blink = True  # Fast blink. +                self._blink = True  # Fast blink              elif attr == 7:                  self._reverse = True              elif attr == 8: @@ -142,7 +167,7 @@ class ANSI:              elif attr == 9:                  self._strike = True              elif attr == 22: -                self._bold = False +                self._bold = False  # Normal intensity              elif attr == 23:                  self._italic = False              elif attr == 24: @@ -151,9 +176,12 @@ class ANSI:                  self._blink = False              elif attr == 27:                  self._reverse = False +            elif attr == 28: +                self._hidden = False              elif attr == 29:                  self._strike = False              elif not attr: +                # Reset all style attributes                  self._color = None                  self._bgcolor = None                  self._bold = False diff --git a/contrib/python/prompt-toolkit/py3/prompt_toolkit/formatted_text/utils.py b/contrib/python/prompt-toolkit/py3/prompt_toolkit/formatted_text/utils.py index 7d48762db44..cda4233e063 100644 --- a/contrib/python/prompt-toolkit/py3/prompt_toolkit/formatted_text/utils.py +++ b/contrib/python/prompt-toolkit/py3/prompt_toolkit/formatted_text/utils.py @@ -8,9 +8,15 @@ from typing import Iterable, cast  from prompt_toolkit.utils import get_cwidth -from .base import OneStyleAndTextTuple, StyleAndTextTuples +from .base import ( +    AnyFormattedText, +    OneStyleAndTextTuple, +    StyleAndTextTuples, +    to_formatted_text, +)  __all__ = [ +    "to_plain_text",      "fragment_list_len",      "fragment_list_width",      "fragment_list_to_text", @@ -18,6 +24,13 @@ __all__ = [  ] +def to_plain_text(value: AnyFormattedText) -> str: +    """ +    Turn any kind of formatted text back into plain text. +    """ +    return fragment_list_to_text(to_formatted_text(value)) + +  def fragment_list_len(fragments: StyleAndTextTuples) -> int:      """      Return the amount of characters in this text fragment list.  | 
