コンソールマークアップ

Richは、Richが文字列を受け入れるほぼすべての場所(例:print()log())に色やスタイルを挿入するために使用できるシンプルなマークアップをサポートしています。

いくつかの例を見るには、次のコマンドを実行してください

python -m rich.markup

構文

コンソールマークアップは、bbcode に触発された構文を使用します。スタイル(スタイル 参照)を角括弧で囲んで記述すると、例えば [bold red] のように、対応する [/bold red] で *閉じられる* まで、そのスタイルが適用されます。

簡単な例を次に示します

from rich import print
print("[bold red]alert![/bold red] Something happened")

スタイルを閉じない場合、文字列の最後まで適用されます。これは、1行だけスタイルを設定したい場合に便利です。例えば

print("[bold italic yellow on red blink]This text is impossible to read")

スタイルを閉じるための省略形があります。終了タグからスタイル名を省略すると、Richは最後のスタイルを閉じます。例えば

print("[bold red]Bold and red[/] not bold or red")

これらのマークアップタグは互いに組み合わせて使用することができ、厳密にネストする必要はありません。次の例は、マークアップタグのオーバーラップを示しています

print("[bold]Bold[italic] bold and italic [/bold]italic[/italic]")

エラー

マークアップに次のいずれかのエラーが含まれている場合、Rich は MarkupError を発生させます

  • タグの不一致、例:"[bold]Hello[/red]"

  • 暗黙の閉じタグに対応するタグがない、例:"no tags[/]"

エスケープ

Richがマークアップとして解釈するものを出力したい場合があります。タグの前にバックスラッシュを付けることで、タグを*エスケープ*できます。次に例を示します

>>> from rich import print
>>> print(r"foo\[bar]")
foo[bar]

バックスラッシュがない場合、Rich は [bar] をタグと見なし、「bar」スタイルがない場合は出力から削除します。

注意

バックスラッシュがタグをエスケープしないようにして、タグの前にリテラルのバックスラッシュを出力したい場合は、2つのバックスラッシュを入力できます。

関数 escape() は、テキストのエスケープを処理します。

例えば、str.format や f 文字列を使用してコンソールマークアップを動的に構築する場合、エスケープは重要です。エスケープしないと、タグを挿入したくない場所にタグが挿入される可能性があります。次の関数を考えてみましょう

def greet(name):
    console.print(f"Hello {name}!")

greet("Will") を呼び出すと挨拶が表示されますが、greet("[blink]Gotcha![/blink]") を呼び出すと、点滅するテキストも表示されます。これは望ましくない場合があります。解決策は、引数をエスケープすることです

from rich.markup import escape
def greet(name):
    console.print(f"Hello {escape(name)}!")

絵文字

*絵文字コード*をマークアップに追加すると、対応するUnicode文字に置き換えられます。絵文字コードは、絵文字の名前をコロン(:)で囲んだものです。次に例を示します

>>> from rich import print
>>> print(":warning:")
⚠️

絵文字には、フルカラーで表示される「絵文字」バリアントと、モノクロ(デフォルトの色に設定されているもの)で表示される「テキスト」バリアントの2つのバリアントがあります。絵文字コードに `-emoji` または `-text` を追加することで、目的のバリアントを指定できます。次に例を示します

>>> from rich import print
>>> print(":red_heart-emoji:")
>>> print(":red_heart-text:")

利用可能なすべて絵文字のリストを表示するには、次のコマンドを実行します

python -m rich.emoji

マークアップのレンダリング

デフォルトでは、Richは、print() に明示的に文字列を渡したとき、または TablePanel などの別のレンダリング可能なオブジェクトに文字列を埋め込んだときに、コンソールマークアップをレンダリングします。

コンソールマークアップは便利ですが、構文が出力したい文字列と競合する場合は、無効にした方が良い場合があります。print() メソッドまたは Console コンストラクタで markup=False を設定することで、無効にできます。

マークアップAPI

from_markup() を呼び出すことで、文字列をスタイル付きテキストに変換できます。これは、出力したり、さらにスタイルを追加したりできる Text インスタンスを返します。