제작자 정의 명령문으로는 렌파이에 자신이 만든 명령문을 추가할 수 있습니다. 이 기능으로 현재 렌파이 문법에서 지원하지 않는 것들을 추가할 수 있습니다.
제작자 정의 명령문은 python early 블럭에서 정의해야 합니다. 더불어 제작자 정의 명령문이 포함된 파일은 해당 명령문을 사용하는 파일보다 먼저 불려와야 합니다. 렌파이는 파일을 유니코드 순서대로 불러오기 때문에, 제작자 정의 명령문을 정의한 파일 이름 앞에 01 또는 작은 숫자 문자를 접두사로 사용하는 것이 타당할 것입니다.
제작자 정의 명령문은 해당 명령문을 정의한 파일 내에서 사용할 수 없습니다.
제작자 정의 명령문은 renpy.register_statement 함수를 사용해 등록할 수 있습니다.
renpy.
register_statement
(name, parse=None, lint=None, execute=None, predict=None, next=None, scry=None, block=False, init=False, translatable=False)¶제작자 정의 명령문을 등록합니다.
parse 메소드는 Lexer 객체를 받습니다.:
Lexer
¶eol
()¶lexer가 행의 끝에 다다랐다면 True이다.
match
(re)¶임의의 정규표현식 문자열과 대조한다.
대상을 대조하는 렉서 내에 있는 모든 명령문은 이 함수에 따라 구현된다. 우선 공백은 무시하고, 행과 대조해본다. 대조에 성공했다면, 대조된 텍스트를 반환한다. 그 외에는 None을 반환한다.
keyword
(s)¶s 를 키워드로 대조한다.
name
()¶이름을 대조한다. 내장 키워드와는 대조하지 않는다.
word
()¶키워드를 포함한 모든 단어를 대조한다. 일치한 단어는 텍스트로 반환한다.
string
()¶렌파이 문자열을 대조한다.
integer
()¶정수를 대조하고 해당 정수가 포함된 문자열을 반환한다.
float
()¶부동소수점 숫자를 대조하고 해당 숫자가 포함된 문자열을 반환한다.
simple_expression
()¶단순 파이썬 표현식을 대조하고 그 표현식을 문자열로 반환한다.
rest
()¶공백은 무시하고 행의 나머지 부분은 반환한다.
checkpoint
()¶렉셔의 현재 상태를 대표하는 불투명 객체를 반환한다.
revert
(o)¶`o`가 checkpoint()에서 반환된 객체라면, lexer는 checkpoint()가 호출되었을 때의 상태로 되돌아간다. (이는 역추적을 위해 사용되는 기능이다.)
subblock_lexer
()¶현재 행과 관련 있는 블럭 대신에 Lexer를 반환한다.
advance
()¶서브블록 렉서에서 다음 행으로 진행한다. 이 메소드는 반드시 첫 번째 행을 분석할 수 있도록 첫 번째 행 앞에서 호출되어야 한다.
스크립트 오류 검사 기능을 작성할 때 유용한 함수입니다.
s에 있는 텍스트 태그를 확인한다. 오류가 있으면 에러 문자열을 반환하며, 없으면 None을 반환한다.
아래 예제는 따옴표 없는 문자가 기본 대사로 사용되는 "line"이라는 명령문을 생성합니다.
python early:
def parse_smartline(lex):
who = lex.simple_expression()
what = lex.rest()
return (who, what)
def execute_smartline(o):
who, what = o
renpy.say(eval(who), what)
def lint_smartline(o):
who, what = o
try:
eval(who)
except:
renpy.error("Character not defined: %s" % who)
tte = renpy.check_text_tags(what)
if tte:
renpy.error(tte)
renpy.register_statement("line", parse=parse_smartline, execute=execute_smartline, lint=lint_smartline)
이 명령문은 다음처럼 작성해 사용할 수 있습니다.:
line e "이 인용문은 제대로 나타날 거야," 아이린이 말했다, "게다가 역슬래시를 같이 적을 필요도 없지."