ユーザー定義ステートメント link

ユーザー定義ステートメントは独自のステートメントを Ren'Py に追加出来るようにします。これにより現在の Ren'Py の文法ではサポートされない機能が追加出来ます。

ユーザー定義ステートメントは python early ブロックで定義される必要があり、さらにそれを定義するファイルはそれを使用するどのファイルよりも先にロードされる必要があります。 Ren'Py はユニコード順にファイルをロードするので一般的にはユーザー定義ステートメントを含めるファイル名は 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, execute_init=None) link

これはユーザー定義ステートメントを登録します。

name

これはステートメントを開始する名前のスペース区切りのリストか、または空の文字列にして新しいデフォルトステートメントを定義します。 ( デフォルトステートメントは say ステートメントを置き換えるでしょう )

block

False なら、ステートメントはブロックを予測しません。 True ならブロックを予測し、 そのブロックの解釈は lexer に任せます。文字列 "script" なら、ブロックは一つ以上の Ren'Py スクリプト言語を含むものとして解釈されれます。

parse

これは Lexer オブジェクトを引数に取る関数です。この関数はステートメントを解析し、任意のオブジェクトを返すべきです。このオブジェクトは他のすべての関数に引数として渡されます。

lint

これはステートメントをチェックするために呼び出され、 parse から返された 1 つのオブジェクトを引数として渡されます。 renpy.error() を呼び出してエラーを報告するとよいでしょう。

execute

これはステートメントが実行されると呼び出される関数で、 parse から返された 1 つのオブジェクトを引数として渡されます。

execute_init

これは優先度 0 で初期化時に呼び出される関数です。

predict

これはステートメントに使用される画像を予測するために呼び出される関数で、 parse から返された 1 つのオブジェクトを引数として渡されます。 ステートメントに使用される displayable のリストを返すべきです。

next

これは次のステートメントを決定するために呼び出される関数です。

block が "script" でないなら、これには一つの引数が渡され、パース関数から返されたオブジェクトです。 block が "script" なら、追加の引数が渡され、そのブロックの最初のステートメントを名付けるオブジェクトです。

ジャンプ先のラベルを指定する文字列、ブロックへ制御を移すための第二引数または、この後のステートメントに制御を継続するなら None を返す関数であるべきです。

scry

Ren'Py 内部で使用されます。

init

このステートメントが初期化時にのみ実行されるべきなら True です。 ( ステートメントが init ブロック内でなければ自動的に init 0 ブロックに配置されます。) これは execute_init 関数に加えては実行関数を呼び出します。

parse メソッドは Lexer オブジェクトを受け取ります。

class Lexer link
eol() link

lexerが行の末端に達していれば True を返します。

match(re) link

任意の正規表現文字列にマッチします。

何かをマッチさせるすべての lexer のステートメントは、この関数と同様な方法で実装されています。最初に空白をスキップし、その行に対してマッチするかを試みます。マッチが成功すればマッチしたテキストが返され、そうでなければ None が返されます。

keyword(s) link

キーワードとして s にマッチします。

name() link

名前にマッチしますが組み込みのキーワードにはマッチしません。

word() link

キーワードを含むどのような単語にもマッチします。マッチした単語を返します。

string() link

文字列にマッチします。

integer() link

整数にマッチし、整数の文字列を返します。

float() link

浮動小数点にマッチし、浮動小数点の文字列を返します。

simple_expression() link

単純式にマッチし、文字列としてそれを返します。

rest() link

空白をスキップし、行の残りを返します。

checkpoint() link

現在の lexer の状態を表現するオブジェクトを返します。

revert(o) link

o が checkpoint() から返されたオブジェクトなら、 lexer の状態を checkpoint() が呼び出されたときにまで戻します。 ( これはロールバックのために使用されます。 )

subblock_lexer() link

現在のブロックと関連付けられたブロックに対する Lexer を返します。

advance() link

サブブロック lexer で、次の行に解析を進めます。一行目を解析できるようにするために、一行目よりも前で呼び出される必要があります。

Lint 用ユーティリティー関数 link

これらの関数は lint 関数を記述するのに便利です。

renpy.check_text_tags(s) link

s 内部のテキストタグが正しいかチェックします。エラーがあればエラー文字列を、なければ None を返します。

link

これは新しいステートメント「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 "These quotes will show up," Eileen said, "and don't need to be backslashed."