Пользовательские текстовые теги (Custom Text Tags)
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" на английском языке.
На главную страницу | Официальная документация движка | Вернуться к началу статьи |