Пользовательские текстовые теги (Custom Text Tags)

Материал из Ren'Py Wiki
Перейти к навигации Перейти к поиску

Ren'Py поддерживает определение ваших собственных текстовых тегов. Эти текстовые теги могут управлять текстом и текстовыми тегами, определенными внутри кода, включая добавление и удаление текста и других текстовых тегов.


Пользовательские текстовые теги создаются путём назначения функции текстового тега на ту или иную позицию в словаре config.custom_text_tags или словаре config.self_closing_custom_tags.

define config.custom_text_tags

Сопоставляет имена текстовых тегов с функциями текстовых тегов, когда текстовый тег может охватить другой текст.

define config.self_closing_custom_text_tags

Сопоставляет имена текстовых тегов с функциями самозакрывающихся текстовых тегов, когда текстовый тег не охватывает другой текст.


Функция текстового тега принимает три аргумента:

  • Тег
  • Аргумент для тега
  • Список содержимого кортежей

Например, для текста:

"{big=2}Привет, {b}Мир{/b}{/big}"

Тег будет «big», аргументом будет строка «2», а список содержимого кортежей будет:

[
    (renpy.TEXT_TEXT, "Привет, "),
    (renpy.TEXT_TAG, "b"),
    (renpy.TEXT_TEXT, "Мир"),
    (renpy.TEXT_TAG, "/b"),
]


Функция текстового тега должна возвращать новый список содержимого кортежей, который используется для замены текстового тега и его содержимого.

Содержимое кортежей состоит из двух компонентов:

  • Первый компонент является одной из констант в списке ниже.
  • Второй компонент изменяется в зависимости от первого компонента, как описано ниже.
renpy.TEXT_TEXT
Второй компонент – текст, предназначенный для отображения пользователю.
renpy.TEXT_TAG
Второй компонент – содержимое текстового тега без закрывающих скобок.
renpy.TEXT_DISPLAYABLE
Второй компонент – отображаемый элемент для встраивания в текст.
renpy.TEXT_PARAGRAPH
Представляет разрыв между абзацами, а второй компонент не определён (но должен присутствовать).


Функция самозакрывающегося текстового тега аналогична, за исключением того, что она не принимает третий аргумент.

Предостережения (Caveats)[править | править код]

Текстовые теги диалога {p}, {w}, {nw} и {fast} обрабатываются перед пользовательскими текстовыми тегами и должны либо не включаться в пользовательский текстовый тег, либо осуществляться без изменений.

Примеры (Examples)[править | править код]

Пример текстового тега 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


"Он {big=3}БОЛЬШОЙ!{/big}"


Пример текстового тега rot13 применяет преобразование ROT13 к тексту. Обратите внимание, что ROT26 – ROT13, примененный дважды - это просто обычный текст.

init python:

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

        for kind, text in contents:

            if kind == renpy.TEXT_TEXT:
                text = text.encode("rot13")

            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

"Это потрясающе{bang}"

Источник[править | править код]

Статья "Custom Text Tags" на английском языке.


На главную страницу Официальная документация движка Вернуться к началу статьи