ユーザー定義ステートメント 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) link

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

name

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

parse

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

lint

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

execute

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

predict

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

next

これを呼び出して次のステートメントを決定します。これには parse から返されたオブジェクトが引数として渡されます。ラベルか、次のステートメントに処理を移すなら None を返すべきです。

scry

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

block

これがブロックを取るなら True 、そうでなければ False です。

init

このステートメントが初期化時にのみ実行されるべきなら True です。 ( ステートメントが init ブロック内でなければ自動的に init 0 ブロックに配置されます。)

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."