local STORE = require("pasta.store")
local WORD = {}
local WORD_BUILDER_IMPL = {}
WORD_BUILDER_IMPL.__index = WORD_BUILDER_IMPL
function WORD_BUILDER_IMPL.entry(self, ...)
local values = { ... }
if #values > 0 then
table.insert(self._registry[self._key], values)
end
return self
end
local function create_builder(registry, key)
if not registry[key] then
registry[key] = {}
end
local builder = {
_registry = registry,
_key = key,
}
return setmetatable(builder, WORD_BUILDER_IMPL)
end
function WORD.create_global(key)
return create_builder(STORE.global_words, key)
end
function WORD.create_local(scene_name, key)
if not STORE.local_words[scene_name] then
STORE.local_words[scene_name] = {}
end
return create_builder(STORE.local_words[scene_name], key)
end
function WORD.create_actor(actor_name, key)
if not STORE.actor_words[actor_name] then
STORE.actor_words[actor_name] = {}
end
return create_builder(STORE.actor_words[actor_name], key)
end
function WORD.get_all_words()
return {
global = STORE.global_words,
["local"] = STORE.local_words,
actor = STORE.actor_words
}
end
function WORD.get_global_words()
return STORE.global_words
end
function WORD.get_local_words(scene_name)
return STORE.local_words[scene_name]
end
function WORD.get_actor_words(actor_name)
return STORE.actor_words[actor_name]
end
function WORD.create_word(key)
return WORD.create_global(key)
end
function WORD.resolve_value(value, act)
if value == nil then
return nil
elseif type(value) == "function" then
return value(act)
elseif type(value) == "table" then
if #value > 0 then
return value[1]
end
return nil
else
return tostring(value)
end
end
return WORD