mirror of https://github.com/Textualize/rich.git
features
This commit is contained in:
parent
c8e0779f9e
commit
4f09944526
Binary file not shown.
After Width: | Height: | Size: 1.2 MiB |
|
@ -0,0 +1,169 @@
|
||||||
|
from rich.console import Console, ConsoleOptions, RenderGroup, RenderResult
|
||||||
|
from rich.markdown import Markdown
|
||||||
|
from rich.measure import Measurement
|
||||||
|
from rich.padding import Padding
|
||||||
|
from rich.panel import Panel
|
||||||
|
from rich.style import Style
|
||||||
|
from rich.table import Table
|
||||||
|
from rich.syntax import Syntax
|
||||||
|
from rich.text import Text
|
||||||
|
from rich import box
|
||||||
|
|
||||||
|
|
||||||
|
class ColorBox:
|
||||||
|
def __init__(self, start: int = 16):
|
||||||
|
self.start = start
|
||||||
|
|
||||||
|
def __console__(self, console: Console, options: ConsoleOptions) -> RenderResult:
|
||||||
|
start = self.start
|
||||||
|
for color_start in range(start, start + 36, 6):
|
||||||
|
text = Text()
|
||||||
|
for color_no in range(color_start, color_start + 6):
|
||||||
|
text.append(" ", Style(bgcolor=str(color_no)))
|
||||||
|
yield text
|
||||||
|
|
||||||
|
def __measure__(self, console: "Console", max_width: int) -> Measurement:
|
||||||
|
return Measurement(12, 12)
|
||||||
|
|
||||||
|
|
||||||
|
console = Console()
|
||||||
|
|
||||||
|
table = Table.grid()
|
||||||
|
table.title = "Rich features"
|
||||||
|
table.expand = False
|
||||||
|
table.padding = (1, 1, 0, 0)
|
||||||
|
table.add_column("Feature", no_wrap=True, justify="right", style="bold red")
|
||||||
|
table.add_column("Demonstration")
|
||||||
|
|
||||||
|
color_table = Table(
|
||||||
|
box=None,
|
||||||
|
expand=False,
|
||||||
|
show_header=False,
|
||||||
|
show_edge=False,
|
||||||
|
pad_edge=False,
|
||||||
|
padding=0,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
color_table.add_row(*(ColorBox(16 + color * 36) for color in range(6)))
|
||||||
|
|
||||||
|
from rich.measure import Measurement
|
||||||
|
|
||||||
|
m = Measurement.get(console, color_table, console.size.width)
|
||||||
|
|
||||||
|
table.add_row(
|
||||||
|
"Colors",
|
||||||
|
RenderGroup(
|
||||||
|
"[bold yellow]256[/] colors or [bold green]16.7 million[/] colors [blue](if supported by your terminal)[/].",
|
||||||
|
Padding(color_table, (1, 0, 0, 0)),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
table.add_row(
|
||||||
|
"Styles",
|
||||||
|
"All ansi styles: [bold]bold[/], [dim]dim[/], [italic]italic[/italic], [underline]underline[/], [strike]strikethrough[/], [reverse]reverse[/], and even [blink]blink[/].",
|
||||||
|
)
|
||||||
|
|
||||||
|
lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque in metus sed sapien ultricies pretium a at justo. Maecenas luctus velit et auctor maximus. Donec faucibus vel arcu id pretium. Phasellus sit amet semper turpis."
|
||||||
|
lorem_table = Table.grid()
|
||||||
|
lorem_table.padding = (0, 1)
|
||||||
|
lorem_table.pad_edge = False
|
||||||
|
lorem_table.add_row(
|
||||||
|
Text(lorem, justify="left", style="green"),
|
||||||
|
Text(lorem, justify="center", style="yellow"),
|
||||||
|
Text(lorem, justify="right", style="blue"),
|
||||||
|
Text(lorem, justify="full", style="red"),
|
||||||
|
)
|
||||||
|
table.add_row(
|
||||||
|
"Text",
|
||||||
|
RenderGroup(
|
||||||
|
Text.from_markup(
|
||||||
|
"""Word wrap text. Justify [green]left[/], [yellow]center[/], [blue]right[/] or [red]full[/].\n\n"""
|
||||||
|
),
|
||||||
|
lorem_table,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def comparison(renderable1, renderable2) -> Table:
|
||||||
|
table = Table(show_header=False, box=None, expand=True)
|
||||||
|
table.add_column("1", ratio=1)
|
||||||
|
table.add_column("2", ratio=1)
|
||||||
|
table.add_row(renderable1, renderable2)
|
||||||
|
return table
|
||||||
|
|
||||||
|
|
||||||
|
table.add_row(
|
||||||
|
"Chinese Japanese & Korean support",
|
||||||
|
Panel("该库支持中文,日文和韩文文本!", expand=False, style="red", box=box.DOUBLE_EDGE,),
|
||||||
|
)
|
||||||
|
|
||||||
|
emoji_example = "Render emoji code: :+1: :apple: :ant: :bear: :baguette_bread: :bus: "
|
||||||
|
table.add_row("Emoji", comparison(Text(emoji_example), emoji_example))
|
||||||
|
|
||||||
|
markup_example = "[bold magenta]Rich[/] supports a simple [i]bbcode[/i] like [b]markup[/b], you can use to insert [yellow]color[/] and [underline]style[/]."
|
||||||
|
table.add_row(
|
||||||
|
"Console markup", comparison(Text(markup_example), markup_example),
|
||||||
|
)
|
||||||
|
|
||||||
|
example_table = Table(
|
||||||
|
title="Star Wars box office", show_header=True, header_style="bold magenta"
|
||||||
|
)
|
||||||
|
example_table.add_column("Date", style="dim", width=12)
|
||||||
|
example_table.add_column("Title")
|
||||||
|
example_table.add_column("Production Budget", justify="right")
|
||||||
|
example_table.add_column("Box Office", justify="right")
|
||||||
|
example_table.add_row(
|
||||||
|
"Dev 20, 2019", "Star Wars: The Rise of Skywalker", "$275,000,0000", "$375,126,118"
|
||||||
|
)
|
||||||
|
example_table.add_row(
|
||||||
|
"May 25, 2018",
|
||||||
|
"[red]Solo[/red]: A Star Wars Story",
|
||||||
|
"$275,000,0000",
|
||||||
|
"$393,151,347",
|
||||||
|
)
|
||||||
|
example_table.add_row(
|
||||||
|
"Dec 15, 2017",
|
||||||
|
"Star Wars Ep. VIII: The Last Jedi",
|
||||||
|
"$262,000,000",
|
||||||
|
"[bold]$1,332,539,889[/bold]",
|
||||||
|
)
|
||||||
|
|
||||||
|
table.add_row("Tables", example_table)
|
||||||
|
|
||||||
|
|
||||||
|
code = '''\
|
||||||
|
def iter_last(values: Iterable[T]) -> Iterable[Tuple[bool, T]]:
|
||||||
|
"""Iterate and generate a tuple with a flag for last value."""
|
||||||
|
iter_values = iter(values)
|
||||||
|
try:
|
||||||
|
previous_value = next(iter_values)
|
||||||
|
except StopIteration:
|
||||||
|
return
|
||||||
|
for value in iter_values:
|
||||||
|
yield False, previous_value
|
||||||
|
previous_value = value
|
||||||
|
yield True, previous_value'''
|
||||||
|
|
||||||
|
table.add_row("Syntax highlighting", Syntax(code, "python3", line_numbers=True))
|
||||||
|
|
||||||
|
markdown_example = """\
|
||||||
|
# Markdown
|
||||||
|
|
||||||
|
Supports much of the *markdown*, __syntax__!
|
||||||
|
|
||||||
|
- Headers
|
||||||
|
- Basic formatting: bold, italic, code etc
|
||||||
|
- Block quotes
|
||||||
|
- Lists, and more...
|
||||||
|
|
||||||
|
"""
|
||||||
|
table.add_row("Markdown", comparison(markdown_example, Markdown(markdown_example)))
|
||||||
|
|
||||||
|
|
||||||
|
table.add_row(
|
||||||
|
"And more", """Progress bars, styled logging handler, tracebacks, etc..."""
|
||||||
|
)
|
||||||
|
|
||||||
|
console.print(table)
|
||||||
|
console.print()
|
Loading…
Reference in New Issue