GRAYBYTE WORDPRESS FILE MANAGER4531

Server IP : 198.54.121.189 / Your IP : 216.73.216.112
System : Linux premium69.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
PHP Version : 7.4.33
Disable Function : NONE
cURL : ON | WGET : ON | Sudo : OFF | Pkexec : OFF
Directory : /opt/hc_python/lib/python3.12/site-packages/pip/_vendor/rich/
Upload Files :
Current_dir [ Not Writeable ] Document_root [ Writeable ]

Command :


Current File : /opt/hc_python/lib/python3.12/site-packages/pip/_vendor/rich//markup.py
import re
from ast import literal_eval
from operator import attrgetter
from typing import Callable, Iterable, List, Match, NamedTuple, Optional, Tuple, Union

from ._emoji_replace import _emoji_replace
from .emoji import EmojiVariant
from .errors import MarkupError
from .style import Style
from .text import Span, Text

RE_TAGS = re.compile(
    r"""((\\*)\[([a-z#/@][^[]*?)])""",
    re.VERBOSE,
)

RE_HANDLER = re.compile(r"^([\w.]*?)(\(.*?\))?$")


class Tag(NamedTuple):
    """A tag in console markup."""

    name: str
    """The tag name. e.g. 'bold'."""
    parameters: Optional[str]
    """Any additional parameters after the name."""

    def __str__(self) -> str:
        return (
            self.name if self.parameters is None else f"{self.name} {self.parameters}"
        )

    @property
    def markup(self) -> str:
        """Get the string representation of this tag."""
        return (
            f"[{self.name}]"
            if self.parameters is None
            else f"[{self.name}={self.parameters}]"
        )


_ReStringMatch = Match[str]  # regex match object
_ReSubCallable = Callable[[_ReStringMatch], str]  # Callable invoked by re.sub
_EscapeSubMethod = Callable[[_ReSubCallable, str], str]  # Sub method of a compiled re


def escape(
    markup: str,
    _escape: _EscapeSubMethod = re.compile(r"(\\*)(\[[a-z#/@][^[]*?])").sub,
) -> str:
    """Escapes text so that it won't be interpreted as markup.

    Args:
        markup (str): Content to be inserted in to markup.

    Returns:
        str: Markup with square brackets escaped.
    """

    def escape_backslashes(match: Match[str]) -> str:
        """Called by re.sub replace matches."""
        backslashes, text = match.groups()
        return f"{backslashes}{backslashes}\\{text}"

    markup = _escape(escape_backslashes, markup)
    if markup.endswith("\\") and not markup.endswith("\\\\"):
        return markup + "\\"

    return markup


def _parse(markup: str) -> Iterable[Tuple[int, Optional[str], Optional[Tag]]]:
    """Parse markup in to an iterable of tuples of (position, text, tag).

    Args:
        markup (str): A string containing console markup

    """
    position = 0
    _divmod = divmod
    _Tag = Tag
    for match in RE_TAGS.finditer(markup):
        full_text, escapes, tag_text = match.groups()
        start, end = match.span()
        if start > position:
            yield start, markup[position:start], None
        if escapes:
            backslashes, escaped = _divmod(len(escapes), 2)
            if backslashes:
                # Literal backslashes
                yield start, "\\" * backslashes, None
                start += backslashes * 2
            if escaped:
                # Escape of tag
                yield start, full_text[len(escapes) :], None
                position = end
                continue
        text, equals, parameters = tag_text.partition("=")
        yield start, None, _Tag(text, parameters if equals else None)
        position = end
    if position < len(markup):
        yield position, markup[position:], None


def render(
    markup: str,
    style: Union[str, Style] = "",
    emoji: bool = True,
    emoji_variant: Optional[EmojiVariant] = None,
) -> Text:
    """Render console markup in to a Text instance.

    Args:
        markup (str): A string containing console markup.
        style: (Union[str, Style]): The style to use.
        emoji (bool, optional): Also render emoji code. Defaults to True.
        emoji_variant (str, optional): Optional emoji variant, either "text" or "emoji". Defaults to None.


    Raises:
        MarkupError: If there is a syntax error in the markup.

    Returns:
        Text: A test instance.
    """
    emoji_replace = _emoji_replace
    if "[" not in markup:
        return Text(
            emoji_replace(markup, default_variant=emoji_variant) if emoji else markup,
            style=style,
        )
    text = Text(style=style)
    append = text.append
    normalize = Style.normalize

    style_stack: List[Tuple[int, Tag]] = []
    pop = style_stack.pop

    spans: List[Span] = []
    append_span = spans.append

    _Span = Span
    _Tag = Tag

    def pop_style(style_name: str) -> Tuple[int, Tag]:
        """Pop tag matching given style name."""
        for index, (_, tag) in enumerate(reversed(style_stack), 1):
            if tag.name == style_name:
                return pop(-index)
        raise KeyError(style_name)

    for position, plain_text, tag in _parse(markup):
        if plain_text is not None:
            # Handle open brace escapes, where the brace is not part of a tag.
            plain_text = plain_text.replace("\\[", "[")
            append(emoji_replace(plain_text) if emoji else plain_text)
        elif tag is not None:
            if tag.name.startswith("/"):  # Closing tag
                style_name = tag.name[1:].strip()

                if style_name:  # explicit close
                    style_name = normalize(style_name)
                    try:
                        start, open_tag = pop_style(style_name)
                    except KeyError:
                        raise MarkupError(
                            f"closing tag '{tag.markup}' at position {position} doesn't match any open tag"
                        ) from None
                else:  # implicit close
                    try:
                        start, open_tag = pop()
                    except IndexError:
                        raise MarkupError(
                            f"closing tag '[/]' at position {position} has nothing to close"
                        ) from None

                if open_tag.name.startswith("@"):
                    if open_tag.parameters:
                        handler_name = ""
                        parameters = open_tag.parameters.strip()
                        handler_match = RE_HANDLER.match(parameters)
                        if handler_match is not None:
                            handler_name, match_parameters = handler_match.groups()
                            parameters = (
                                "()" if match_parameters is None else match_parameters
                            )

                        try:
                            meta_params = literal_eval(parameters)
                        except SyntaxError as error:
                            raise MarkupError(
                                f"error parsing {parameters!r} in {open_tag.parameters!r}; {error.msg}"
                            )
                        except Exception as error:
                            raise MarkupError(
                                f"error parsing {open_tag.parameters!r}; {error}"
                            ) from None

                        if handler_name:
                            meta_params = (
                                handler_name,
                                meta_params
                                if isinstance(meta_params, tuple)
                                else (meta_params,),
                            )

                    else:
                        meta_params = ()

                    append_span(
                        _Span(
                            start, len(text), Style(meta={open_tag.name: meta_params})
                        )
                    )
                else:
                    append_span(_Span(start, len(text), str(open_tag)))

            else:  # Opening tag
                normalized_tag = _Tag(normalize(tag.name), tag.parameters)
                style_stack.append((len(text), normalized_tag))

    text_length = len(text)
    while style_stack:
        start, tag = style_stack.pop()
        style = str(tag)
        if style:
            append_span(_Span(start, text_length, style))

    text.spans = sorted(spans[::-1], key=attrgetter("start"))
    return text


if __name__ == "__main__":  # pragma: no cover
    MARKUP = [
        "[red]Hello World[/red]",
        "[magenta]Hello [b]World[/b]",
        "[bold]Bold[italic] bold and italic [/bold]italic[/italic]",
        "Click [link=https://www.willmcgugan.com]here[/link] to visit my Blog",
        ":warning-emoji: [bold red blink] DANGER![/]",
    ]

    from pip._vendor.rich import print
    from pip._vendor.rich.table import Table

    grid = Table("Markup", "Result", padding=(0, 1))

    for markup in MARKUP:
        grid.add_row(Text(markup), markup)

    print(grid)

[ Back ]
Name
Size
Last Modified
Owner / Group
Permissions
Options
..
--
May 23 2025 08:31:17
root / root
0755
__pycache__
--
May 23 2025 08:31:18
root / root
0755
__init__.py
5.947 KB
May 23 2025 08:31:17
root / root
0644
__main__.py
8.278 KB
May 23 2025 08:31:17
root / root
0644
_cell_widths.py
9.97 KB
May 23 2025 08:31:17
root / root
0644
_emoji_codes.py
136.948 KB
May 23 2025 08:31:17
root / root
0644
_emoji_replace.py
1.039 KB
May 23 2025 08:31:17
root / root
0644
_export_format.py
2.078 KB
May 23 2025 08:31:17
root / root
0644
_extension.py
0.259 KB
May 23 2025 08:31:17
root / root
0644
_fileno.py
0.78 KB
May 23 2025 08:31:17
root / root
0644
_inspect.py
9.429 KB
May 23 2025 08:31:17
root / root
0644
_log_render.py
3.149 KB
May 23 2025 08:31:17
root / root
0644
_loop.py
1.207 KB
May 23 2025 08:31:17
root / root
0644
_null_file.py
1.361 KB
May 23 2025 08:31:17
root / root
0644
_palettes.py
6.897 KB
May 23 2025 08:31:17
root / root
0644
_pick.py
0.413 KB
May 23 2025 08:31:17
root / root
0644
_ratio.py
5.343 KB
May 23 2025 08:31:17
root / root
0644
_spinners.py
19.452 KB
May 23 2025 08:31:17
root / root
0644
_stack.py
0.343 KB
May 23 2025 08:31:17
root / root
0644
_timer.py
0.407 KB
May 23 2025 08:31:17
root / root
0644
_win32_console.py
22.222 KB
May 23 2025 08:31:17
root / root
0644
_windows.py
1.88 KB
May 23 2025 08:31:17
root / root
0644
_windows_renderer.py
2.718 KB
May 23 2025 08:31:17
root / root
0644
_wrap.py
3.324 KB
May 23 2025 08:31:17
root / root
0644
abc.py
0.869 KB
May 23 2025 08:31:17
root / root
0644
align.py
10.224 KB
May 23 2025 08:31:17
root / root
0644
ansi.py
6.759 KB
May 23 2025 08:31:17
root / root
0644
bar.py
3.187 KB
May 23 2025 08:31:17
root / root
0644
box.py
10.577 KB
May 23 2025 08:31:17
root / root
0644
cells.py
5.01 KB
May 23 2025 08:31:17
root / root
0644
color.py
17.784 KB
May 23 2025 08:31:17
root / root
0644
color_triplet.py
1.029 KB
May 23 2025 08:31:17
root / root
0644
columns.py
6.964 KB
May 23 2025 08:31:17
root / root
0644
console.py
98.208 KB
May 23 2025 08:31:17
root / root
0644
constrain.py
1.258 KB
May 23 2025 08:31:17
root / root
0644
containers.py
5.373 KB
May 23 2025 08:31:17
root / root
0644
control.py
6.475 KB
May 23 2025 08:31:17
root / root
0644
default_styles.py
8.063 KB
May 23 2025 08:31:17
root / root
0644
diagnose.py
0.975 KB
May 23 2025 08:31:17
root / root
0644
emoji.py
2.442 KB
May 23 2025 08:31:17
root / root
0644
errors.py
0.627 KB
May 23 2025 08:31:17
root / root
0644
file_proxy.py
1.644 KB
May 23 2025 08:31:17
root / root
0644
filesize.py
2.426 KB
May 23 2025 08:31:17
root / root
0644
highlighter.py
9.361 KB
May 23 2025 08:31:17
root / root
0644
json.py
4.913 KB
May 23 2025 08:31:17
root / root
0644
jupyter.py
3.176 KB
May 23 2025 08:31:17
root / root
0644
layout.py
13.676 KB
May 23 2025 08:31:17
root / root
0644
live.py
13.936 KB
May 23 2025 08:31:17
root / root
0644
live_render.py
3.58 KB
May 23 2025 08:31:17
root / root
0644
logging.py
12.166 KB
May 23 2025 08:31:17
root / root
0644
markup.py
8.253 KB
May 23 2025 08:31:17
root / root
0644
measure.py
5.181 KB
May 23 2025 08:31:17
root / root
0644
padding.py
4.793 KB
May 23 2025 08:31:17
root / root
0644
pager.py
0.809 KB
May 23 2025 08:31:17
root / root
0644
palette.py
3.316 KB
May 23 2025 08:31:17
root / root
0644
panel.py
10.962 KB
May 23 2025 08:31:17
root / root
0644
pretty.py
35.538 KB
May 23 2025 08:31:17
root / root
0644
progress.py
58.942 KB
May 23 2025 08:31:17
root / root
0644
progress_bar.py
7.971 KB
May 23 2025 08:31:17
root / root
0644
prompt.py
12.155 KB
May 23 2025 08:31:17
root / root
0644
protocol.py
1.358 KB
May 23 2025 08:31:17
root / root
0644
py.typed
0 KB
May 23 2025 08:31:17
root / root
0644
region.py
0.162 KB
May 23 2025 08:31:17
root / root
0644
repr.py
4.327 KB
May 23 2025 08:31:17
root / root
0644
rule.py
4.494 KB
May 23 2025 08:31:17
root / root
0644
scope.py
2.776 KB
May 23 2025 08:31:17
root / root
0644
screen.py
1.554 KB
May 23 2025 08:31:17
root / root
0644
segment.py
24.163 KB
May 23 2025 08:31:17
root / root
0644
spinner.py
4.262 KB
May 23 2025 08:31:17
root / root
0644
status.py
4.32 KB
May 23 2025 08:31:17
root / root
0644
style.py
26.425 KB
May 23 2025 08:31:17
root / root
0644
styled.py
1.229 KB
May 23 2025 08:31:17
root / root
0644
syntax.py
34.925 KB
May 23 2025 08:31:17
root / root
0644
table.py
39.11 KB
May 23 2025 08:31:17
root / root
0644
terminal_theme.py
3.291 KB
May 23 2025 08:31:17
root / root
0644
text.py
46.438 KB
May 23 2025 08:31:17
root / root
0644
theme.py
3.683 KB
May 23 2025 08:31:17
root / root
0644
themes.py
0.1 KB
May 23 2025 08:31:17
root / root
0644
traceback.py
34.346 KB
May 23 2025 08:31:17
root / root
0644
tree.py
9.229 KB
May 23 2025 08:31:17
root / root
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2025
CONTACT ME
Static GIF