カスタムテキストタグ link

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

カスタムテキストタグはテキストタグ関数を config.custom_text_tags または config.self_closing_custom_tags に加えれば作成します。

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 テキストタグも、三番目の引数をとらない以外は同じです。

注意 link

{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}"