diff --git a/Basalt/libraries/utils.lua b/Basalt/libraries/utils.lua index 3c0fbc1..f998686 100644 --- a/Basalt/libraries/utils.lua +++ b/Basalt/libraries/utils.lua @@ -2,19 +2,21 @@ local tHex = require("tHex") local sub,find,reverse,rep,insert,len = string.sub,string.find,string.reverse,string.rep,table.insert,string.len local function splitString(str, delimiter) - local result = {} + local results = {} + local nResults = 1 if str == "" or delimiter == "" then - return result + return results end local start = 1 local delim_start, delim_end = find(str, delimiter, start) while delim_start do - insert(result, sub(str, start, delim_start - 1)) + insert(results, sub(str, start, delim_start - 1)) + nResults = nResults + 1 start = delim_end + 1 delim_start, delim_end = find(str, delimiter, start) end - insert(result, sub(str, start)) - return result + insert(results, sub(str, start)) + return results, nResults end local function removeTags(input) diff --git a/Basalt/plugins/xml.lua b/Basalt/plugins/xml.lua index 620ebc4..ba24713 100644 --- a/Basalt/plugins/xml.lua +++ b/Basalt/plugins/xml.lua @@ -205,17 +205,26 @@ return { setValuesByXMLData = function(self, data, scripts) scripts.env[self:getName()] = self for k,v in pairs(data:reactiveProperties()) do - local sharedVariable = string.sub(v, 8, -1) - local sharedObservers = scripts.env.sharedObservers - if (sharedObservers[sharedVariable]) == nil then - sharedObservers[sharedVariable] = {} + local parts, nParts = utils.splitString(v, "%.") + if (nParts ~= 2) then + return end - table.insert( - sharedObservers[sharedVariable], - function(val) - self:updateValue(k, val) + local tableName = parts[1] + local entryName = parts[2] + if (tableName == "props") then + self:updateValue(k, scripts.env.props[entryName]) + elseif (tableName == "shared") then + local sharedObservers = scripts.env.sharedObservers + if (sharedObservers[entryName]) == nil then + sharedObservers[entryName] = {} end - ) + table.insert( + sharedObservers[entryName], + function(val) + self:updateValue(k, val) + end + ) + end end self:updateSpecifiedValuesByXMLData(data, { @@ -332,11 +341,12 @@ return { return lastXMLReferences end, - loadLayout = function(self, path) + loadLayout = function(self, path, props) if(fs.exists(path))then local scripts = {} scripts.env = _ENV scripts.env.basalt = basalt + scripts.env.props = props scripts.env.shared = {} scripts.env.sharedObservers = {} local shared = {} @@ -430,12 +440,13 @@ return { return lastXMLReferences end, - loadLayout = function(self, path) + loadLayout = function(self, path, props) if(fs.exists(path))then local scripts = {} scripts.env = _ENV scripts.env.basalt = basalt scripts.env.main = self + scripts.env.props = props scripts.env.shared = {} scripts.env.sharedObservers = {} local shared = {}