def __rich_console__(self, console: Console, options: ConsoleOptions) -> RenderResult: width = options.max_width characters = self.characters or "─" chars_len = cell_len(characters) if not self.title: rule_text = Text(characters * ((width // chars_len) + 1), self.style) rule_text.truncate(width) else: if isinstance(self.title, Text): title_text = self.title else: title_text = console.render_str(self.title, style="rule.text") if cell_len(title_text.plain) > width - 4: title_text.truncate(width - 4, overflow="ellipsis") title_text.plain = title_text.plain.replace("\n", " ") title_text = title_text.tabs_to_spaces() rule_text = Text(end=self.end) 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) rule_text.plain = set_cell_size(rule_text.plain, width) yield rule_text
def __rich_console__(self, console: Console, options: ConsoleOptions) -> RenderResult: width = options.max_width character = self.character or "─" if not self.title: yield Text(character * width, self.style) else: if isinstance(self.title, Text): title_text = self.title else: title_text = console.render_str(self.title, style="rule.text") if cell_len(title_text.plain) > width - 4: title_text.truncate(width - 4, overflow="ellipsis") title_text.plain = title_text.plain.replace("\n", " ") title_text = title_text.tabs_to_spaces() rule_text = Text(end=self.end) center = (width - cell_len(title_text.plain)) // 2 rule_text.append(character * (center - 1) + " ", self.style) rule_text.append(title_text) rule_text.append( " " + character * (width - cell_len(rule_text.plain) - 1), self.style) yield rule_text
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: yield self._rule_line(chars_len, width) 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() required_space = 4 if self.align == "center" else 2 truncate_width = max(0, width - required_space) if not truncate_width: yield self._rule_line(chars_len, width) return rule_text = Text(end=self.end) if self.align == "center": title_text.truncate(truncate_width, 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(truncate_width, 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(truncate_width, 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
def __console__(self, console: Console, options: ConsoleOptions) -> RenderResult: width = options.max_width if not self.title: yield Text(self.character * width, self.style) else: if isinstance(self.title, Text): title_text = self.title else: title_text = console.render_str(self.title, style="rule.text") if len(title_text) > width - 4: title_text.set_length(width - 4) rule_text = Text() center = (width - len(title_text)) // 2 rule_text.append(self.character * (center - 1) + " ", self.style) rule_text.append(title_text) rule_text.append( " " + self.character * (width - len(rule_text) - 1), self.style ) yield rule_text