SILENT KILLERPanel

Current Path: > > opt > hc_python > > lib > python3.12 > site-packages > pip > > _vendor > rich


Operation   : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
Software     : Apache
Server IP    : 162.0.232.56 | Your IP: 216.73.216.111
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: //opt/hc_python//lib/python3.12/site-packages/pip//_vendor/rich

NameTypeSizeLast ModifiedActions
__pycache__ Directory - -
__init__.py File 6090 bytes May 23 2025 10:34:25.
__main__.py File 8477 bytes May 23 2025 10:34:25.
_cell_widths.py File 10209 bytes May 23 2025 10:34:25.
_emoji_codes.py File 140235 bytes May 23 2025 10:34:25.
_emoji_replace.py File 1064 bytes May 23 2025 10:34:25.
_export_format.py File 2128 bytes May 23 2025 10:34:25.
_extension.py File 265 bytes May 23 2025 10:34:25.
_fileno.py File 799 bytes May 23 2025 10:34:25.
_inspect.py File 9655 bytes May 23 2025 10:34:25.
_log_render.py File 3225 bytes May 23 2025 10:34:25.
_loop.py File 1236 bytes May 23 2025 10:34:25.
_null_file.py File 1394 bytes May 23 2025 10:34:25.
_palettes.py File 7063 bytes May 23 2025 10:34:25.
_pick.py File 423 bytes May 23 2025 10:34:25.
_ratio.py File 5471 bytes May 23 2025 10:34:25.
_spinners.py File 19919 bytes May 23 2025 10:34:25.
_stack.py File 351 bytes May 23 2025 10:34:25.
_timer.py File 417 bytes May 23 2025 10:34:25.
_win32_console.py File 22755 bytes May 23 2025 10:34:25.
_windows.py File 1925 bytes May 23 2025 10:34:25.
_windows_renderer.py File 2783 bytes May 23 2025 10:34:25.
_wrap.py File 3404 bytes May 23 2025 10:34:25.
abc.py File 890 bytes May 23 2025 10:34:25.
align.py File 10469 bytes May 23 2025 10:34:25.
ansi.py File 6921 bytes May 23 2025 10:34:25.
bar.py File 3263 bytes May 23 2025 10:34:25.
box.py File 10831 bytes May 23 2025 10:34:25.
cells.py File 5130 bytes May 23 2025 10:34:25.
color.py File 18211 bytes May 23 2025 10:34:25.
color_triplet.py File 1054 bytes May 23 2025 10:34:25.
columns.py File 7131 bytes May 23 2025 10:34:25.
console.py File 100565 bytes May 23 2025 10:34:25.
constrain.py File 1288 bytes May 23 2025 10:34:25.
containers.py File 5502 bytes May 23 2025 10:34:25.
control.py File 6630 bytes May 23 2025 10:34:25.
default_styles.py File 8257 bytes May 23 2025 10:34:25.
diagnose.py File 998 bytes May 23 2025 10:34:25.
emoji.py File 2501 bytes May 23 2025 10:34:25.
errors.py File 642 bytes May 23 2025 10:34:25.
file_proxy.py File 1683 bytes May 23 2025 10:34:25.
filesize.py File 2484 bytes May 23 2025 10:34:25.
highlighter.py File 9586 bytes May 23 2025 10:34:25.
json.py File 5031 bytes May 23 2025 10:34:25.
jupyter.py File 3252 bytes May 23 2025 10:34:25.
layout.py File 14004 bytes May 23 2025 10:34:25.
live.py File 14270 bytes May 23 2025 10:34:25.
live_render.py File 3666 bytes May 23 2025 10:34:25.
logging.py File 12458 bytes May 23 2025 10:34:25.
markup.py File 8451 bytes May 23 2025 10:34:25.
measure.py File 5305 bytes May 23 2025 10:34:25.
padding.py File 4908 bytes May 23 2025 10:34:25.
pager.py File 828 bytes May 23 2025 10:34:25.
palette.py File 3396 bytes May 23 2025 10:34:25.
panel.py File 11225 bytes May 23 2025 10:34:25.
pretty.py File 36391 bytes May 23 2025 10:34:25.
progress.py File 60357 bytes May 23 2025 10:34:25.
progress_bar.py File 8162 bytes May 23 2025 10:34:25.
prompt.py File 12447 bytes May 23 2025 10:34:25.
protocol.py File 1391 bytes May 23 2025 10:34:25.
py.typed File 0 bytes May 23 2025 10:34:25.
region.py File 166 bytes May 23 2025 10:34:25.
repr.py File 4431 bytes May 23 2025 10:34:25.
rule.py File 4602 bytes May 23 2025 10:34:25.
scope.py File 2843 bytes May 23 2025 10:34:25.
screen.py File 1591 bytes May 23 2025 10:34:25.
segment.py File 24743 bytes May 23 2025 10:34:25.
spinner.py File 4364 bytes May 23 2025 10:34:25.
status.py File 4424 bytes May 23 2025 10:34:25.
style.py File 27059 bytes May 23 2025 10:34:25.
styled.py File 1258 bytes May 23 2025 10:34:25.
syntax.py File 35763 bytes May 23 2025 10:34:25.
table.py File 40049 bytes May 23 2025 10:34:25.
terminal_theme.py File 3370 bytes May 23 2025 10:34:25.
text.py File 47552 bytes May 23 2025 10:34:25.
theme.py File 3771 bytes May 23 2025 10:34:25.
themes.py File 102 bytes May 23 2025 10:34:25.
traceback.py File 35170 bytes May 23 2025 10:34:25.
tree.py File 9451 bytes May 23 2025 10:34:25.

Reading File: //opt/hc_python//lib/python3.12/site-packages/pip//_vendor/rich/box.py

import sys
from typing import TYPE_CHECKING, Iterable, List

if sys.version_info >= (3, 8):
    from typing import Literal
else:
    from pip._vendor.typing_extensions import Literal  # pragma: no cover


from ._loop import loop_last

if TYPE_CHECKING:
    from pip._vendor.rich.console import ConsoleOptions


class Box:
    """Defines characters to render boxes.

    ┌─┬┐ top
    │ ││ head
    ├─┼┤ head_row
    │ ││ mid
    ├─┼┤ row
    ├─┼┤ foot_row
    │ ││ foot
    └─┴┘ bottom

    Args:
        box (str): Characters making up box.
        ascii (bool, optional): True if this box uses ascii characters only. Default is False.
    """

    def __init__(self, box: str, *, ascii: bool = False) -> None:
        self._box = box
        self.ascii = ascii
        line1, line2, line3, line4, line5, line6, line7, line8 = box.splitlines()
        # top
        self.top_left, self.top, self.top_divider, self.top_right = iter(line1)
        # head
        self.head_left, _, self.head_vertical, self.head_right = iter(line2)
        # head_row
        (
            self.head_row_left,
            self.head_row_horizontal,
            self.head_row_cross,
            self.head_row_right,
        ) = iter(line3)

        # mid
        self.mid_left, _, self.mid_vertical, self.mid_right = iter(line4)
        # row
        self.row_left, self.row_horizontal, self.row_cross, self.row_right = iter(line5)
        # foot_row
        (
            self.foot_row_left,
            self.foot_row_horizontal,
            self.foot_row_cross,
            self.foot_row_right,
        ) = iter(line6)
        # foot
        self.foot_left, _, self.foot_vertical, self.foot_right = iter(line7)
        # bottom
        self.bottom_left, self.bottom, self.bottom_divider, self.bottom_right = iter(
            line8
        )

    def __repr__(self) -> str:
        return "Box(...)"

    def __str__(self) -> str:
        return self._box

    def substitute(self, options: "ConsoleOptions", safe: bool = True) -> "Box":
        """Substitute this box for another if it won't render due to platform issues.

        Args:
            options (ConsoleOptions): Console options used in rendering.
            safe (bool, optional): Substitute this for another Box if there are known problems
                displaying on the platform (currently only relevant on Windows). Default is True.

        Returns:
            Box: A different Box or the same Box.
        """
        box = self
        if options.legacy_windows and safe:
            box = LEGACY_WINDOWS_SUBSTITUTIONS.get(box, box)
        if options.ascii_only and not box.ascii:
            box = ASCII
        return box

    def get_plain_headed_box(self) -> "Box":
        """If this box uses special characters for the borders of the header, then
        return the equivalent box that does not.

        Returns:
            Box: The most similar Box that doesn't use header-specific box characters.
                If the current Box already satisfies this criterion, then it's returned.
        """
        return PLAIN_HEADED_SUBSTITUTIONS.get(self, self)

    def get_top(self, widths: Iterable[int]) -> str:
        """Get the top of a simple box.

        Args:
            widths (List[int]): Widths of columns.

        Returns:
            str: A string of box characters.
        """

        parts: List[str] = []
        append = parts.append
        append(self.top_left)
        for last, width in loop_last(widths):
            append(self.top * width)
            if not last:
                append(self.top_divider)
        append(self.top_right)
        return "".join(parts)

    def get_row(
        self,
        widths: Iterable[int],
        level: Literal["head", "row", "foot", "mid"] = "row",
        edge: bool = True,
    ) -> str:
        """Get the top of a simple box.

        Args:
            width (List[int]): Widths of columns.

        Returns:
            str: A string of box characters.
        """
        if level == "head":
            left = self.head_row_left
            horizontal = self.head_row_horizontal
            cross = self.head_row_cross
            right = self.head_row_right
        elif level == "row":
            left = self.row_left
            horizontal = self.row_horizontal
            cross = self.row_cross
            right = self.row_right
        elif level == "mid":
            left = self.mid_left
            horizontal = " "
            cross = self.mid_vertical
            right = self.mid_right
        elif level == "foot":
            left = self.foot_row_left
            horizontal = self.foot_row_horizontal
            cross = self.foot_row_cross
            right = self.foot_row_right
        else:
            raise ValueError("level must be 'head', 'row' or 'foot'")

        parts: List[str] = []
        append = parts.append
        if edge:
            append(left)
        for last, width in loop_last(widths):
            append(horizontal * width)
            if not last:
                append(cross)
        if edge:
            append(right)
        return "".join(parts)

    def get_bottom(self, widths: Iterable[int]) -> str:
        """Get the bottom of a simple box.

        Args:
            widths (List[int]): Widths of columns.

        Returns:
            str: A string of box characters.
        """

        parts: List[str] = []
        append = parts.append
        append(self.bottom_left)
        for last, width in loop_last(widths):
            append(self.bottom * width)
            if not last:
                append(self.bottom_divider)
        append(self.bottom_right)
        return "".join(parts)


# fmt: off
ASCII: Box = Box(
    "+--+\n"
    "| ||\n"
    "|-+|\n"
    "| ||\n"
    "|-+|\n"
    "|-+|\n"
    "| ||\n"
    "+--+\n",
    ascii=True,
)

ASCII2: Box = Box(
    "+-++\n"
    "| ||\n"
    "+-++\n"
    "| ||\n"
    "+-++\n"
    "+-++\n"
    "| ||\n"
    "+-++\n",
    ascii=True,
)

ASCII_DOUBLE_HEAD: Box = Box(
    "+-++\n"
    "| ||\n"
    "+=++\n"
    "| ||\n"
    "+-++\n"
    "+-++\n"
    "| ||\n"
    "+-++\n",
    ascii=True,
)

SQUARE: Box = Box(
    "┌─┬┐\n"
    "│ ││\n"
    "├─┼┤\n"
    "│ ││\n"
    "├─┼┤\n"
    "├─┼┤\n"
    "│ ││\n"
    "└─┴┘\n"
)

SQUARE_DOUBLE_HEAD: Box = Box(
    "┌─┬┐\n"
    "│ ││\n"
    "╞═╪╡\n"
    "│ ││\n"
    "├─┼┤\n"
    "├─┼┤\n"
    "│ ││\n"
    "└─┴┘\n"
)

MINIMAL: Box = Box(
    "  ╷ \n"
    "  │ \n"
    "╶─┼╴\n"
    "  │ \n"
    "╶─┼╴\n"
    "╶─┼╴\n"
    "  │ \n"
    "  ╵ \n"
)


MINIMAL_HEAVY_HEAD: Box = Box(
    "  ╷ \n"
    "  │ \n"
    "╺━┿╸\n"
    "  │ \n"
    "╶─┼╴\n"
    "╶─┼╴\n"
    "  │ \n"
    "  ╵ \n"
)

MINIMAL_DOUBLE_HEAD: Box = Box(
    "  ╷ \n"
    "  │ \n"
    " ═╪ \n"
    "  │ \n"
    " ─┼ \n"
    " ─┼ \n"
    "  │ \n"
    "  ╵ \n"
)


SIMPLE: Box = Box(
    "    \n"
    "    \n"
    " ── \n"
    "    \n"
    "    \n"
    " ── \n"
    "    \n"
    "    \n"
)

SIMPLE_HEAD: Box = Box(
    "    \n"
    "    \n"
    " ── \n"
    "    \n"
    "    \n"
    "    \n"
    "    \n"
    "    \n"
)


SIMPLE_HEAVY: Box = Box(
    "    \n"
    "    \n"
    " ━━ \n"
    "    \n"
    "    \n"
    " ━━ \n"
    "    \n"
    "    \n"
)


HORIZONTALS: Box = Box(
    " ── \n"
    "    \n"
    " ── \n"
    "    \n"
    " ── \n"
    " ── \n"
    "    \n"
    " ── \n"
)

ROUNDED: Box = Box(
    "╭─┬╮\n"
    "│ ││\n"
    "├─┼┤\n"
    "│ ││\n"
    "├─┼┤\n"
    "├─┼┤\n"
    "│ ││\n"
    "╰─┴╯\n"
)

HEAVY: Box = Box(
    "┏━┳┓\n"
    "┃ ┃┃\n"
    "┣━╋┫\n"
    "┃ ┃┃\n"
    "┣━╋┫\n"
    "┣━╋┫\n"
    "┃ ┃┃\n"
    "┗━┻┛\n"
)

HEAVY_EDGE: Box = Box(
    "┏━┯┓\n"
    "┃ │┃\n"
    "┠─┼┨\n"
    "┃ │┃\n"
    "┠─┼┨\n"
    "┠─┼┨\n"
    "┃ │┃\n"
    "┗━┷┛\n"
)

HEAVY_HEAD: Box = Box(
    "┏━┳┓\n"
    "┃ ┃┃\n"
    "┡━╇┩\n"
    "│ ││\n"
    "├─┼┤\n"
    "├─┼┤\n"
    "│ ││\n"
    "└─┴┘\n"
)

DOUBLE: Box = Box(
    "╔═╦╗\n"
    "║ ║║\n"
    "╠═╬╣\n"
    "║ ║║\n"
    "╠═╬╣\n"
    "╠═╬╣\n"
    "║ ║║\n"
    "╚═╩╝\n"
)

DOUBLE_EDGE: Box = Box(
    "╔═╤╗\n"
    "║ │║\n"
    "╟─┼╢\n"
    "║ │║\n"
    "╟─┼╢\n"
    "╟─┼╢\n"
    "║ │║\n"
    "╚═╧╝\n"
)

MARKDOWN: Box = Box(
    "    \n"
    "| ||\n"
    "|-||\n"
    "| ||\n"
    "|-||\n"
    "|-||\n"
    "| ||\n"
    "    \n",
    ascii=True,
)
# fmt: on

# Map Boxes that don't render with raster fonts on to equivalent that do
LEGACY_WINDOWS_SUBSTITUTIONS = {
    ROUNDED: SQUARE,
    MINIMAL_HEAVY_HEAD: MINIMAL,
    SIMPLE_HEAVY: SIMPLE,
    HEAVY: SQUARE,
    HEAVY_EDGE: SQUARE,
    HEAVY_HEAD: SQUARE,
}

# Map headed boxes to their headerless equivalents
PLAIN_HEADED_SUBSTITUTIONS = {
    HEAVY_HEAD: SQUARE,
    SQUARE_DOUBLE_HEAD: SQUARE,
    MINIMAL_DOUBLE_HEAD: MINIMAL,
    MINIMAL_HEAVY_HEAD: MINIMAL,
    ASCII_DOUBLE_HEAD: ASCII2,
}


if __name__ == "__main__":  # pragma: no cover
    from pip._vendor.rich.columns import Columns
    from pip._vendor.rich.panel import Panel

    from . import box as box
    from .console import Console
    from .table import Table
    from .text import Text

    console = Console(record=True)

    BOXES = [
        "ASCII",
        "ASCII2",
        "ASCII_DOUBLE_HEAD",
        "SQUARE",
        "SQUARE_DOUBLE_HEAD",
        "MINIMAL",
        "MINIMAL_HEAVY_HEAD",
        "MINIMAL_DOUBLE_HEAD",
        "SIMPLE",
        "SIMPLE_HEAD",
        "SIMPLE_HEAVY",
        "HORIZONTALS",
        "ROUNDED",
        "HEAVY",
        "HEAVY_EDGE",
        "HEAVY_HEAD",
        "DOUBLE",
        "DOUBLE_EDGE",
        "MARKDOWN",
    ]

    console.print(Panel("[bold green]Box Constants", style="green"), justify="center")
    console.print()

    columns = Columns(expand=True, padding=2)
    for box_name in sorted(BOXES):
        table = Table(
            show_footer=True, style="dim", border_style="not dim", expand=True
        )
        table.add_column("Header 1", "Footer 1")
        table.add_column("Header 2", "Footer 2")
        table.add_row("Cell", "Cell")
        table.add_row("Cell", "Cell")
        table.box = getattr(box, box_name)
        table.title = Text(f"box.{box_name}", style="magenta")
        columns.add_renderable(table)
    console.print(columns)

    # console.save_svg("box.svg")

SILENT KILLER Tool