ハイライト表示¶
Richは、数値、文字列、コレクション、ブール値、Noneなど、テキスト中のパターンを自動的にハイライト表示します。ファイルパス、URL、UUIDなど、より特殊なパターンもハイライト表示されます。
ハイライト表示を無効にするには、print()
または log()
に highlight=False
を設定するか、Console
コンストラクタに highlight=False
を設定します。後者の場合、すべての場所でハイライト表示が無効になります。コンストラクタでハイライト表示を無効にした場合でも、print / log で highlight=True
を設定することで、選択的にハイライト表示を*有効化*できます。
カスタムハイライター¶
デフォルトのハイライト表示がニーズに合わない場合は、カスタムハイライターを定義できます。最も簡単な方法は、正規表現のリストに一致するテキストにスタイルを適用する RegexHighlighter
クラスを拡張することです。
メールアドレスのように見えるテキストをハイライト表示する例を次に示します。
from rich.console import Console
from rich.highlighter import RegexHighlighter
from rich.theme import Theme
class EmailHighlighter(RegexHighlighter):
"""Apply style to anything that looks like an email."""
base_style = "example."
highlights = [r"(?P<email>[\w-]+@([\w-]+\.)+[\w-]+)"]
theme = Theme({"example.email": "bold magenta"})
console = Console(highlighter=EmailHighlighter(), theme=theme)
console.print("Send funds to money@example.org")
highlights
クラス変数には、正規表現のリストを含める必要があります。一致する式のグループ名には、base_style
属性がプレフィックスとして付けられ、一致するテキストのスタイルとして使用されます。上記の例では、メールアドレスには「example.email」スタイルが適用されます。これは、カスタムテーマで定義したものです。
Consoleにハイライターを設定すると、(有効になっている場合)出力するすべてのテキストにハイライト表示が適用されます。また、インスタンスを呼び出し可能オブジェクトとして使用し、結果を出力することで、よりきめ細かくハイライターを使用することもできます。たとえば、メールハイライタークラスは次のように使用できます。
console = Console(theme=theme)
highlight_emails = EmailHighlighter()
console.print(highlight_emails("Send funds to money@example.org"))
RegexHighlighter
は非常に強力ですが、その基底クラスである Highlighter
を拡張して、カスタムのハイライト表示スキームを実装することもできます。これには、ハイライト表示する Text
が渡される単一のメソッド highlight
が含まれています。
すべての文字を異なる色でハイライト表示するという、ばかげた例を次に示します。
from random import randint
from rich import print
from rich.highlighter import Highlighter
class RainbowHighlighter(Highlighter):
def highlight(self, text):
for index in range(len(text)):
text.stylize(f"color({randint(16, 255)})", index, index + 1)
rainbow = RainbowHighlighter()
print(rainbow("I must not fear. Fear is the mind-killer."))
組み込みハイライター¶
次の組み込みハイライターが利用可能です。
ISO8601Highlighter
ISO8601の日時文字列をハイライト表示します。JSONHighlighter
JSON形式の文字列をハイライト表示します。