リッチテキスト

Richには、文字列に色とスタイル属性でマークアップできるTextクラスがあります。 Textインスタンスは、文字列が受け入れられる場所であればどこでも使用できるため、表示を細かく制御できます。

このクラスは、テキストの領域がマークアップされた文字列のようなものと考えてください。組み込みのstrとは異なり、Textインスタンスは変更可能であり、ほとんどのメソッドは新しいインスタンスを返すのではなく、インプレースで動作します。

Textにスタイルを追加する1つの方法は、開始オフセットと終了オフセットにスタイルを適用するstylize()メソッドです。次に例を示します

from rich.console import Console
from rich.text import Text

console = Console()
text = Text("Hello, World!")
text.stylize("bold magenta", 0, 6)
console.print(text)

これは、最初の単語を太字のマゼンタで表示し、ターミナルに「Hello, World!」と出力します。

または、append()を呼び出して、文字列とスタイルをTextの末尾に追加することで、スタイル付きテキストを作成することもできます。次に例を示します

text = Text()
text.append("Hello", style="bold magenta")
text.append(" World!")
console.print(text)

すでにANSIコードでフォーマットされているテキストを使用する場合は、from_ansi()を呼び出して、Textオブジェクトに変換します

text = Text.from_ansi("\033[1mHello, World!\033[0m")
console.print(text.spans)

パーツからTextインスタンスを構築することは一般的な要件であるため、Richは文字列または文字列とスタイルのペアを結合し、Textインスタンスを返すassemble()を提供しています。次の例は上記のコードと同等です

text = Text.assemble(("Hello", "bold magenta"), " World!")
console.print(text)

highlight_words()を使用してテキスト内の特定の単語にスタイルを適用したり、究極の制御のためにhighlight_regex()を呼び出して*正規表現*に一致するテキストを強調表示したりできます。

テキスト属性

Textクラスには、テキストの表示方法を変更するためにコンストラクターで設定できるパラメーターがいくつかあります。

  • justifyは「left」、「center」、「right」、または「full」にする必要があり、デフォルトのjustify動作をオーバーライドします。

  • overflowは「fold」、「crop」、または「ellipsis」にする必要があり、デフォルトのオーバーフローをオーバーライドします。

  • no_wrapは、テキストが使用可能な幅よりも長い場合、折り返しを防ぎます。

  • tab_sizeタブの文字数を設定します。

Textインスタンスは、Rich APIのほぼすべての場所でプレーン文字列の代わりに使用できます。これにより、他のRichレンダー可能オブジェクト内でテキストがどのようにレンダリングされるかを詳細に制御できます。たとえば、次の例では、Panel内のテキストを右揃えにします

from rich import print
from rich.panel import Panel
from rich.text import Text
panel = Panel(Text("Hello", justify="right"))
print(panel)