렌파이는 자신만의 텍스트 태그 만들기를 지원합니다. 직접 만든 텍스트 태그로 텍스트나 텍스트 태그를 추가하거나 제거하는 등, 이들을 조작할 수 있습니다.
맞춤 텍스트 태그는 텍스트 태그 함수를 config.custom_text_tags 딕셔너리 항목에 배정하는 방법으로 생성할 수 있습니다.
텍스트 태그 이름을 텍스트 태그 함수에 매핑한다.
텍스트 태그 함수는 인수를 세 개 받습니다.: 태그, 태그에 사용할 인수, 정보 튜플의 리스트. 예를 들어 다음과 같은 텍스트가 있을 때:
"{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"),
]
텍스트 태그 함수는 새로운 정보 튜플의 리스트 하나를 반환해야 합니다. 이 리스트는 텍스트 태그와 그 내용을 교체할 때 사용합니다.
정보 튜플은 두 가지 요소로 구성되어 있습니다. 첫 번째 요소는 아래 나열된 상수 가운데 하나입니다. 두 번째 요소는 첫 번째 요소에 따라 아래에 기술한 대로 여러 가지 가운데 하나가 될 수 있습니다.
renpy.TEXT_TEXT
두 번째 요소는 사용자에게 표시할 텍스트입니다.
renpy.TEXT_TAG
두 번째 요소는 괄호가 빠진 텍스트 태그 정보입니다.
renpy.TEXT_DISPLAYABLE
두 번째 요소는 텍스트에 연결될 디스플레이어블입니다.
renpy.TEXT_PARAGRAPH
이 것은 문단 분리를 나타내며, 두 번째 요소는 정의되지 않으나 존재해야 합니다.
대사 텍스트 태그인 {p}, {w}, {nw}, {fast} 는 맞춤 텍스트 태그보다 앞서 처리되므로 맞춤 텍스트 태그 안에 포함하거나, 맞춤 텍스트 태그를 그대로 지나치는 식으로 사용해서는 안 됩니다.
예제 텍스트 태그 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 변환을 텍스트에 적용합니다. rot13 태그가 두 번 적용된 Rot26이라는 텍스트는 평범한 텍스트라는 점을 기억하세요.
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."