Пример #1
0
def _prefix_with_indent(
    s: Union[Text, str],
    console: Console,
    *,
    prefix: str,
    indent: str,
) -> Text:
    if isinstance(s, Text):
        text = s
    else:
        text = console.render_str(s)

    return console.render_str(prefix, overflow="ignore") + console.render_str(
        f"\n{indent}", overflow="ignore").join(text.split(allow_blank=True))
Пример #2
0
    def __rich_console__(self, console: Console,
                         options: ConsoleOptions) -> RenderResult:
        width = options.max_width

        # Python3.6 doesn't have an isascii method on str
        isascii = getattr(str, "isascii",
                          None) or (lambda s: all(ord(c) < 128 for c in s))
        characters = ("-" if
                      (options.ascii_only
                       and not isascii(self.characters)) else self.characters)

        chars_len = cell_len(characters)
        if not self.title:
            rule_text = Text(characters * ((width // chars_len) + 1),
                             self.style)
            rule_text.truncate(width)
            rule_text.plain = set_cell_size(rule_text.plain, width)
            yield rule_text
            return

        if isinstance(self.title, Text):
            title_text = self.title
        else:
            title_text = console.render_str(self.title, style="rule.text")

        title_text.plain = title_text.plain.replace("\n", " ")
        title_text.expand_tabs()
        rule_text = Text(end=self.end)

        if self.align == "center":
            title_text.truncate(width - 4, overflow="ellipsis")
            side_width = (width - cell_len(title_text.plain)) // 2
            left = Text(characters * (side_width // chars_len + 1))
            left.truncate(side_width - 1)
            right_length = width - cell_len(left.plain) - cell_len(
                title_text.plain)
            right = Text(characters * (side_width // chars_len + 1))
            right.truncate(right_length)
            rule_text.append(left.plain + " ", self.style)
            rule_text.append(title_text)
            rule_text.append(" " + right.plain, self.style)
        elif self.align == "left":
            title_text.truncate(width - 2, overflow="ellipsis")
            rule_text.append(title_text)
            rule_text.append(" ")
            rule_text.append(characters * (width - rule_text.cell_len),
                             self.style)
        elif self.align == "right":
            title_text.truncate(width - 2, overflow="ellipsis")
            rule_text.append(characters * (width - title_text.cell_len - 1),
                             self.style)
            rule_text.append(" ")
            rule_text.append(title_text)

        rule_text.plain = set_cell_size(rule_text.plain, width)
        yield rule_text