pasta_lua 0.2.1

Pasta Lua - Lua integration for Pasta DSL
Documentation
local PASTA = require "pasta"
local GLOBAL = require "pasta.global"

do
    local ACTOR = PASTA.create_actor("さくら")
    ACTOR:create_word("通常"):entry([=[\s[0]]=], [=[\s[100]]=])
    ACTOR:create_word("照れ"):entry([=[\s[1]]=])
    ACTOR:create_word("驚き"):entry([=[\s[2]]=])
    ACTOR:create_word("ぐんにょり"):entry([=[\s[3]]=])
    ACTOR:create_word("怒り"):entry([=[\s[4]]=])
end

do
    local ACTOR = PASTA.create_actor("うにゅう")
    ACTOR:create_word("通常"):entry([=[\s[10]]=])
    ACTOR:create_word("刮目"):entry([=[\s[11]]=])
end

PASTA.create_word("挨拶"):entry("こんにちは", "やあ", "ハロー")
do
    local SCENE = PASTA.create_scene("メイン")

    SCENE:create_word("場所"):entry("東京", "大阪", "京都")
    SCENE:create_word("天気"):entry("晴れ", "曇り", "")

    function SCENE.__start__(act, ...)
        local args = { ... }
        local save, var = act:init_scene(SCENE)
        act:clear_spot()
        act:set_spot("さくら", 0)
        act:set_spot("うにゅう", 1)

        act:call(SCENE.__global_name__, "グローバル単語呼び出し", {}, table.unpack(args))
        act:call(SCENE.__global_name__, "ローカル単語呼び出し", {}, table.unpack(args))
        act:call(SCENE.__global_name__, "会話分岐", {}, table.unpack(args))
        act:call(SCENE.__global_name__, "変数代入", {}, table.unpack(args))
        act:call(SCENE.__global_name__, "引数付き呼び出し", {}, var.カウンタ, save.グローバル, table.unpack(args))
        act:call(SCENE.__global_name__, "グローバル関数呼び出し", {}, table.unpack(args))
        return act:call(SCENE.__global_name__, "共有プロパティ操作", {}, table.unpack(args))
    end

    function SCENE.グローバル単語呼び出し_1(act, ...)
        local args = { ... }
        local save, var = act:init_scene(SCENE)

        act.さくら:talk(act.さくら:word("笑顔"))
        act.さくら:talk(act.さくら:word("挨拶"))
        act.さくら:talk("")
        act.うにゅう:talk(act.うにゅう:word("通常"))
        act.うにゅう:talk("やふぅ。")
    end

    function SCENE.ローカル単語呼び出し_1(act, ...)
        local args = { ... }
        local save, var = act:init_scene(SCENE)

        act.さくら:talk(act.さくら:word("通常"))
        act.さくら:talk(act.さくら:word("場所"))
        act.さくら:talk("の天気は?")
        act.うにゅう:talk(act.うにゅう:word("天気"))
        act.うにゅう:talk("らしいで。")
    end

    function SCENE.会話分岐_1(act, ...)
        local args = { ... }
        local save, var = act:init_scene(SCENE)

        act.さくら:talk("ローカル分岐1だよ。")
        act.うにゅう:talk("ちっぽけやね。")
    end

    function SCENE.会話分岐_2(act, ...)
        local args = { ... }
        local save, var = act:init_scene(SCENE)

        act.さくら:talk("ローカル分岐2だよ。")
        act.うにゅう:talk("もっと飛べる、ワイは飛べるんや!")
        act.さくら:talk(act.さくら:word("ぐんにょり"))
        act.さくら:talk("なんでだよ。")
    end

    function SCENE.変数代入_1(act, ...)
        local args = { ... }
        local save, var = act:init_scene(SCENE)

        act.さくら:talk(act.さくら:word("通常"))
        act.さくら:talk("変数を代入。")
        act.うにゅう:talk("中身は内緒や。")
        var.カウンタ = 10
        save.グローバル = act:expr_fn("関数", 2 + 1)
        var.場所 = act:word("場所")
    end

    function SCENE.引数付き呼び出し_1(act, ...)
        local args = { ... }
        local save, var = act:init_scene(SCENE)

        act.さくら:talk("第1引数は")
        act.さくら:talk(tostring(args[1]))
        act.さくら:talk("だよ。")
        act.うにゅう:talk("第2引数は")
        act.うにゅう:talk(tostring(args[2]))
        act.うにゅう:talk("やね。")
    end

    function SCENE.グローバル関数呼び出し_1(act, ...)
        local args = { ... }
        local save, var = act:init_scene(SCENE)

        act.さくら:talk(tostring(GLOBAL.グローバル関数(act, "グローバル")))
        act.さくら:talk(" を呼んだよ。")
        var.結果 = GLOBAL.グローバル関数(act, "代入テスト")
        GLOBAL.グローバル関数(act, "式文テスト")
        act:expr_fn("関数", 42)
        act.うにゅう:talk("ローカルもいけるで")
        act.うにゅう:talk(tostring(act.うにゅう:expr_fn("関数", 1)))
    end

    function SCENE.共有プロパティ操作_1(act, ...)
        local args = { ... }
        local save, var = act:init_scene(SCENE)

        act:set_property("system.name", "テストゴースト")
        var.ゴースト名 = act:get_property("currentghost.name")
        save.= act:get_property("currentghost.balloon.scope(0).validwidth.initial")
        act.さくら:talk(act.さくら:word("通常"))
        act.さくら:talk("名前は")
        act.さくら:talk(tostring(act:get_property("currentghost.name")))
        act.さくら:talk("です。")
        act.うにゅう:talk("幅は")
        act.うにゅう:talk(tostring(var.ゴースト名))
        act.うにゅう:talk("だって。")
    end
end

do
    local SCENE = PASTA.create_scene("会話分岐")

    function SCENE.__start__(act, ...)
        local args = { ... }
        local save, var = act:init_scene(SCENE)

        act.さくら:talk("グローバルの分岐に飛んできた。")
        act.うにゅう:talk("世界取れるで。")
    end
end