ハイライト表示

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."))

組み込みハイライター

次の組み込みハイライターが利用可能です。