カスタムテキストタグ link

Ren'Pyはテキストタグの定義をサポートしています。これらのテキストタグは、内部でテキストやその他のタグを追加削除してテキストやタグを扱えます。

カスタムテキストタグはテキストタグ関数を次の辞書の1つに代入して作成します。

define config.custom_text_tags = { } link

テキストタグの名前をキー、テキストタグ関数を値とする辞書であり、他のテキストを囲めるタグです。

define config.self_closing_custom_text_tags = { } link

テキストタグの名前をキー、self-closing テキストタグ関数を値とする辞書であり、他のテキストを囲めないタグです。

警告

関数は予測処理中にいつ呼び出されるか分からないため、ゲームの状態(特にグローバル変数)に動作を依存せず、副作用 (例えば ステートメントに相当するもの の呼び出しや変数の変更) を起こさないべきです。

テキストタグ関数は 3 つの引数を受け取ります。 : タグ自身とそのタグへの引数、内容のタプルのリストです。 例えば以下のテキストでは

"{big=2}Hello, {b}World{/b}{/big}"

タグは "big" であり、引数は文字列の "2" に、内容のタプルは以下になります。

[
    (renpy.TEXT_TEXT, "Hello, "),
    (renpy.TEXT_TAG, "b"),
    (renpy.TEXT_TEXT, "World"),
    (renpy.TEXT_TAG, "/b"),
]

テキストタグ関数は新しい内容のタプルのリストを返すべきで、それを使用して、テキストタグとその内容を置き換えます。

内容のタプルは 2 つの要素で構成されます。最初の要素は以下のリストにある定数の 1 つです。 2 つ目の要素は後述するとおり、最初の要素により様々です。

renpy.TEXT_TEXT

2 つ目の要素はユーザーに表示されることを意図したテキストです。

renpy.TEXT_TAG

2 つ目の要素はテキストタグの中身で、閉じ括弧は含みません。

renpy.TEXT_DISPLAYABLE

2 つ目の要素はテキストに埋め込まれる displayable です。

renpy.TEXT_PARAGRAPH

これは段落分けを表し、2 つ目の要素は未定義です(が、なくてはなりません)。

self-closing テキストタグも、三番目の引数をとらない以外は同じです。

tokenized 引数が True であれば、 Text() にトークンのリストを渡せます。

警告

{p} や {w}, {nw}, {fast} のような台詞のテキストタグはカスタムテキストタグの前に処理されます。また、カスタムテキストタグ内には含まないか、変更せずに渡すべきです。

link

例えば big テキストタグは {size} テキストタグのように動作しますが、その引数を乗算して適用します。

init python:

    def big_tag(tag, argument, contents):

        size = int(argument) * 20

        return [
                (renpy.TEXT_TAG, u"size={}".format(size)),
            ] + contents + [
                (renpy.TEXT_TAG, u"/size"),
            ]

    config.custom_text_tags["big"] = big_tag


"This is {big=3}BIG!{/big}"

例えば rot13 テキストタグは rot13 変換をテキストに適用します。 rot26 - rot13 は 2 回適用されると元のテキストに戻ることに注意してください。

init python:

    def rot13_transform(s):

        ROT13 = { }

        for i, j in zip("ABCDEFGHIJKLM", "NOPQRSTUVWXYZ"):
             ROT13[i] = j
             ROT13[j] = i

             i = i.lower()
             j = j.lower()

             ROT13[i] = j
             ROT13[j] = i

        return "".join(ROT13.get(i, i) for i in s)

    def rot13_tag(tag, argument, contents):
        rv = [ ]

        for kind, text in contents:

            if kind == renpy.TEXT_TEXT:
                text = rot13_transform(text)

            rv.append((kind, text))

        return rv

    config.custom_text_tags["rot13"] = rot13_tag

"Rot0. {rot13}Rot13. {rot13}Rot26. {/rot13}Rot13. {/rot13}Rot0."

bang テキストタグは、特定の画像をテキストに挿入し、閉じタグを必要としません。

init python:
    def bang_tag(tag, argument):
        return [ ( renpy.TEXT_TAG, "size=40"), (renpy.TEXT_TEXT, "!"), (renpy.TEXT_TAG, "/size") ]

    config.self_closing_custom_text_tags["bang"] = bang_tag

"This is awesome{bang}"