From 32e2691eb7752eeff08afbe5dd2595d9b5c28ef7 Mon Sep 17 00:00:00 2001 From: Sabine Lim Date: Tue, 16 May 2023 19:19:09 +1000 Subject: [PATCH 01/10] Move XMLParser into its own file --- Basalt/libraries/xmlParser.lua | 145 +++++++++++++++++++++++ Basalt/plugins/{xml.lua => reactive.lua} | 145 +---------------------- 2 files changed, 147 insertions(+), 143 deletions(-) create mode 100644 Basalt/libraries/xmlParser.lua rename Basalt/plugins/{xml.lua => reactive.lua} (75%) diff --git a/Basalt/libraries/xmlParser.lua b/Basalt/libraries/xmlParser.lua new file mode 100644 index 0000000..f76b835 --- /dev/null +++ b/Basalt/libraries/xmlParser.lua @@ -0,0 +1,145 @@ +local XMLNode = {} + +XMLNode.new = function(name) + local node = {} + node.___value = nil + node.___name = name + node.___children = {} + node.___props = {} + node.___reactiveProps = {} + + function node:value() return self.___value end + function node:setValue(val) self.___value = val end + function node:name() return self.___name end + function node:setName(name) self.___name = name end + function node:children() return self.___children end + function node:numChildren() return #self.___children end + function node:addChild(child) + if self[child:name()] ~= nil then + if type(self[child:name()].name) == "function" then + local tempTable = {} + table.insert(tempTable, self[child:name()]) + self[child:name()] = tempTable + end + table.insert(self[child:name()], child) + else + self[child:name()] = child + end + table.insert(self.___children, child) + end + + function node:properties() return self.___props end + function node:numProperties() return #self.___props end + function node:addProperty(name, value) + local lName = "@" .. name + if self[lName] ~= nil then + if type(self[lName]) == "string" then + local tempTable = {} + table.insert(tempTable, self[lName]) + self[lName] = tempTable + end + table.insert(self[lName], value) + else + self[lName] = value + end + table.insert(self.___props, { name = name, value = self[lName] }) + end + + function node:reactiveProperties() return self.___reactiveProps end + function node:addReactiveProperty(name, value) + self.___reactiveProps[name] = value + end + + return node +end + +local XMLParser = {} + +function XMLParser:ToXmlString(value) + value = string.gsub(value, "&", "&"); -- '&' -> "&" + value = string.gsub(value, "<", "<"); -- '<' -> "<" + value = string.gsub(value, ">", ">"); -- '>' -> ">" + value = string.gsub(value, "\"", """); -- '"' -> """ + value = string.gsub(value, "([^%w%&%;%p%\t% ])", + function(c) + return string.format("&#x%X;", string.byte(c)) + end); + return value; +end + +function XMLParser:FromXmlString(value) + value = string.gsub(value, "&#x([%x]+)%;", + function(h) + return string.char(tonumber(h, 16)) + end); + value = string.gsub(value, "&#([0-9]+)%;", + function(h) + return string.char(tonumber(h, 10)) + end); + value = string.gsub(value, """, "\""); + value = string.gsub(value, "'", "'"); + value = string.gsub(value, ">", ">"); + value = string.gsub(value, "<", "<"); + value = string.gsub(value, "&", "&"); + return value; +end + +function XMLParser:ParseProps(node, s) + string.gsub(s, "(%w+)=([\"'])(.-)%2", function(w, _, a) + node:addProperty(w, self:FromXmlString(a)) + end) +end + +function XMLParser:ParseReactiveProps(node, s) + string.gsub(s, "(%w+)={(.-)}", function(w, a) + node:addReactiveProperty(w, a) + end) +end + +function XMLParser:ParseXmlText(xmlText) + local stack = {} + local top = XMLNode.new() + table.insert(stack, top) + local ni, c, label, xarg, empty + local i, j = 1, 1 + while true do + ni, j, c, label, xarg, empty = string.find(xmlText, "<(%/?)([%w_:]+)(.-)(%/?)>", i) + if not ni then break end + local text = string.sub(xmlText, i, ni - 1); + if not string.find(text, "^%s*$") then + local lVal = (top:value() or "") .. self:FromXmlString(text) + stack[#stack]:setValue(lVal) + end + if empty == "/" then -- empty element tag + local lNode = XMLNode.new(label) + self:ParseProps(lNode, xarg) + self:ParseReactiveProps(lNode, xarg) + top:addChild(lNode) + elseif c == "" then -- start tag + local lNode = XMLNode.new(label) + self:ParseProps(lNode, xarg) + self:ParseReactiveProps(lNode, xarg) + table.insert(stack, lNode) + top = lNode + else -- end tag + local toclose = table.remove(stack) -- remove top + + top = stack[#stack] + if #stack < 1 then + error("XMLParser: nothing to close with " .. label) + end + if toclose:name() ~= label then + error("XMLParser: trying to close " .. toclose.name .. " with " .. label) + end + top:addChild(toclose) + end + i = j + 1 + end + local text = string.sub(xmlText, i); + if #stack > 1 then + error("XMLParser: unclosed " .. stack[#stack]:name()) + end + return top +end + +return XMLParser diff --git a/Basalt/plugins/xml.lua b/Basalt/plugins/reactive.lua similarity index 75% rename from Basalt/plugins/xml.lua rename to Basalt/plugins/reactive.lua index 726bcfa..1d1562d 100644 --- a/Basalt/plugins/xml.lua +++ b/Basalt/plugins/reactive.lua @@ -1,149 +1,8 @@ +local XMLParser = require("xmlParser") local utils = require("utils") local uuid = utils.uuid local xmlValue = utils.xmlValue -local function newNode(name) - local node = {} - node.___value = nil - node.___name = name - node.___children = {} - node.___props = {} - node.___reactiveProps = {} - - function node:value() return self.___value end - function node:setValue(val) self.___value = val end - function node:name() return self.___name end - function node:setName(name) self.___name = name end - function node:children() return self.___children end - function node:numChildren() return #self.___children end - function node:addChild(child) - if self[child:name()] ~= nil then - if type(self[child:name()].name) == "function" then - local tempTable = {} - table.insert(tempTable, self[child:name()]) - self[child:name()] = tempTable - end - table.insert(self[child:name()], child) - else - self[child:name()] = child - end - table.insert(self.___children, child) - end - - function node:properties() return self.___props end - function node:numProperties() return #self.___props end - function node:addProperty(name, value) - local lName = "@" .. name - if self[lName] ~= nil then - if type(self[lName]) == "string" then - local tempTable = {} - table.insert(tempTable, self[lName]) - self[lName] = tempTable - end - table.insert(self[lName], value) - else - self[lName] = value - end - table.insert(self.___props, { name = name, value = self[lName] }) - end - - function node:reactiveProperties() return self.___reactiveProps end - function node:addReactiveProperty(name, value) - self.___reactiveProps[name] = value - end - - return node -end - -local XmlParser = {} - -function XmlParser:ToXmlString(value) - value = string.gsub(value, "&", "&"); -- '&' -> "&" - value = string.gsub(value, "<", "<"); -- '<' -> "<" - value = string.gsub(value, ">", ">"); -- '>' -> ">" - value = string.gsub(value, "\"", """); -- '"' -> """ - value = string.gsub(value, "([^%w%&%;%p%\t% ])", - function(c) - return string.format("&#x%X;", string.byte(c)) - end); - return value; -end - -function XmlParser:FromXmlString(value) - value = string.gsub(value, "&#x([%x]+)%;", - function(h) - return string.char(tonumber(h, 16)) - end); - value = string.gsub(value, "&#([0-9]+)%;", - function(h) - return string.char(tonumber(h, 10)) - end); - value = string.gsub(value, """, "\""); - value = string.gsub(value, "'", "'"); - value = string.gsub(value, ">", ">"); - value = string.gsub(value, "<", "<"); - value = string.gsub(value, "&", "&"); - return value; -end - -function XmlParser:ParseProps(node, s) - string.gsub(s, "(%w+)=([\"'])(.-)%2", function(w, _, a) - node:addProperty(w, self:FromXmlString(a)) - end) -end - -function XmlParser:ParseReactiveProps(node, s) - string.gsub(s, "(%w+)={(.-)}", function(w, a) - node:addReactiveProperty(w, a) - end) -end - -function XmlParser:ParseXmlText(xmlText) - local stack = {} - local top = newNode() - table.insert(stack, top) - local ni, c, label, xarg, empty - local i, j = 1, 1 - while true do - ni, j, c, label, xarg, empty = string.find(xmlText, "<(%/?)([%w_:]+)(.-)(%/?)>", i) - if not ni then break end - local text = string.sub(xmlText, i, ni - 1); - if not string.find(text, "^%s*$") then - local lVal = (top:value() or "") .. self:FromXmlString(text) - stack[#stack]:setValue(lVal) - end - if empty == "/" then -- empty element tag - local lNode = newNode(label) - self:ParseProps(lNode, xarg) - self:ParseReactiveProps(lNode, xarg) - top:addChild(lNode) - elseif c == "" then -- start tag - local lNode = newNode(label) - self:ParseProps(lNode, xarg) - self:ParseReactiveProps(lNode, xarg) - table.insert(stack, lNode) - top = lNode - else -- end tag - local toclose = table.remove(stack) -- remove top - - top = stack[#stack] - if #stack < 1 then - error("XmlParser: nothing to close with " .. label) - end - if toclose:name() ~= label then - error("XmlParser: trying to close " .. toclose.name .. " with " .. label) - end - top:addChild(toclose) - end - i = j + 1 - end - local text = string.sub(xmlText, i); - if #stack > 1 then - error("XmlParser: unclosed " .. stack[#stack]:name()) - end - return top -end - local function maybeExecuteScript(data, renderContext) local script = xmlValue('script', data) if (script ~= nil) then @@ -377,7 +236,7 @@ return { renderContext.env = _ENV renderContext.env.props = props local f = fs.open(path, "r") - local data = XmlParser:ParseXmlText(f.readAll()) + local data = XMLParser:ParseXmlText(f.readAll()) f.close() lastXMLReferences = {} maybeExecuteScript(data, renderContext) -- 2.49.1 From 21e2e651a219ded1b07c631c2c5aa38d28999169 Mon Sep 17 00:00:00 2001 From: Sabine Lim Date: Tue, 16 May 2023 19:44:15 +1000 Subject: [PATCH 02/10] Move xmlValue to xmlParser --- Basalt/libraries/utils.lua | 22 ---------------------- Basalt/libraries/xmlParser.lua | 22 ++++++++++++++++++++++ Basalt/plugins/advancedBackground.lua | 5 ++--- Basalt/plugins/animations.lua | 9 ++++----- Basalt/plugins/bigfonts.lua | 5 ++--- Basalt/plugins/border.lua | 21 ++++++++++----------- Basalt/plugins/dynamicValues.lua | 1 - Basalt/plugins/reactive.lua | 19 +++++++++---------- Basalt/plugins/shadow.lua | 5 ++--- Basalt/plugins/textures.lua | 8 ++++---- 10 files changed, 55 insertions(+), 62 deletions(-) diff --git a/Basalt/libraries/utils.lua b/Basalt/libraries/utils.lua index 4fc0812..f76e26a 100644 --- a/Basalt/libraries/utils.lua +++ b/Basalt/libraries/utils.lua @@ -273,28 +273,6 @@ removeTags = removeTags, wrapText = wrapText, -xmlValue = function(name, tab) - local var - if(type(tab)~="table")then return end - if(tab[name]~=nil)then - if(type(tab[name])=="table")then - if(tab[name].value~=nil)then - var = tab[name]:value() - end - end - end - if(var==nil)then var = tab["@"..name] end - - if(var=="true")then - var = true - elseif(var=="false")then - var = false - elseif(tonumber(var)~=nil)then - var = tonumber(var) - end - return var -end, - convertRichText = convertRichText, --- Writes text with special color tags diff --git a/Basalt/libraries/xmlParser.lua b/Basalt/libraries/xmlParser.lua index f76b835..2df5ca5 100644 --- a/Basalt/libraries/xmlParser.lua +++ b/Basalt/libraries/xmlParser.lua @@ -55,6 +55,28 @@ end local XMLParser = {} +function XMLParser.XmlValue(name, tab) + local var + if(type(tab)~="table")then return end + if(tab[name]~=nil)then + if(type(tab[name])=="table")then + if(tab[name].value~=nil)then + var = tab[name]:value() + end + end + end + if(var==nil)then var = tab["@"..name] end + + if(var=="true")then + var = true + elseif(var=="false")then + var = false + elseif(tonumber(var)~=nil)then + var = tonumber(var) + end + return var +end + function XMLParser:ToXmlString(value) value = string.gsub(value, "&", "&"); -- '&' -> "&" value = string.gsub(value, "<", "<"); -- '<' -> "<" diff --git a/Basalt/plugins/advancedBackground.lua b/Basalt/plugins/advancedBackground.lua index 022d78d..33e74ff 100644 --- a/Basalt/plugins/advancedBackground.lua +++ b/Basalt/plugins/advancedBackground.lua @@ -1,5 +1,4 @@ -local utils = require("utils") -local xmlValue = utils.xmlValue +local XMLParser = require("xmlParser") return { VisualObject = function(base) @@ -31,7 +30,7 @@ return { setValuesByXMLData = function(self, data, scripts) base.setValuesByXMLData(self, data, scripts) - if(xmlValue("background-symbol", data)~=nil)then self:setBackgroundSymbol(xmlValue("background-symbol", data), xmlValue("background-symbol-color", data)) end + if(XMLParser.XmlValue("background-symbol", data)~=nil)then self:setBackgroundSymbol(XMLParser.XmlValue("background-symbol", data), XMLParser.XmlValue("background-symbol-color", data)) end return self end, diff --git a/Basalt/plugins/animations.lua b/Basalt/plugins/animations.lua index ca84ab3..36f41de 100644 --- a/Basalt/plugins/animations.lua +++ b/Basalt/plugins/animations.lua @@ -215,8 +215,7 @@ local lerp = { easeInOutBounce=easeInOutBounce, } -local utils = require("utils") -local xmlValue = utils.xmlValue +local XMLParser = require("xmlParser") return { VisualObject = function(base, basalt) @@ -341,9 +340,9 @@ return { setValuesByXMLData = function(self, data, scripts) base.setValuesByXMLData(self, data, scripts) - local animX, animY, animateDuration, animeteTimeOffset, animateMode = xmlValue("animateX", data), xmlValue("animateY", data), xmlValue("animateDuration", data), xmlValue("animateTimeOffset", data), xmlValue("animateMode", data) - local animW, animH, animateDuration, animeteTimeOffset, animateMode = xmlValue("animateW", data), xmlValue("animateH", data), xmlValue("animateDuration", data), xmlValue("animateTimeOffset", data), xmlValue("animateMode", data) - local animXOffset, animYOffset, animateDuration, animeteTimeOffset, animateMode = xmlValue("animateXOffset", data), xmlValue("animateYOffset", data), xmlValue("animateDuration", data), xmlValue("animateTimeOffset", data), xmlValue("animateMode", data) + local animX, animY, animateDuration, animeteTimeOffset, animateMode = XMLParser.XmlValue("animateX", data), XMLParser.XmlValue("animateY", data), XMLParser.XmlValue("animateDuration", data), XMLParser.XmlValue("animateTimeOffset", data), XMLParser.XmlValue("animateMode", data) + local animW, animH, animateDuration, animeteTimeOffset, animateMode = XMLParser.XmlValue("animateW", data), XMLParser.XmlValue("animateH", data), XMLParser.XmlValue("animateDuration", data), XMLParser.XmlValue("animateTimeOffset", data), XMLParser.XmlValue("animateMode", data) + local animXOffset, animYOffset, animateDuration, animeteTimeOffset, animateMode = XMLParser.XmlValue("animateXOffset", data), XMLParser.XmlValue("animateYOffset", data), XMLParser.XmlValue("animateDuration", data), XMLParser.XmlValue("animateTimeOffset", data), XMLParser.XmlValue("animateMode", data) if(animX~=nil and animY~=nil)then self:animatePosition(animX, animY, animateDuration, animeteTimeOffset, animateMode) end diff --git a/Basalt/plugins/bigfonts.lua b/Basalt/plugins/bigfonts.lua index 9d29bbb..b4ae4ee 100644 --- a/Basalt/plugins/bigfonts.lua +++ b/Basalt/plugins/bigfonts.lua @@ -140,8 +140,7 @@ local function makeText(nSize, sString, nFC, nBC, bBlit) end -- The following code is related to basalt and has nothing to do with bigfonts, it creates a plugin which will be added to labels: -local utils = require("utils") -local xmlValue = utils.xmlValue +local XMLParser = require("xmlParser") return { Label = function(base) local fontsize = 1 @@ -198,7 +197,7 @@ return { setValuesByXMLData = function(self, data, scripts) base.setValuesByXMLData(self, data, scripts) - if(xmlValue("fontSize", data)~=nil)then self:setFontSize(xmlValue("fontSize", data)) end + if(XMLParser.XmlValue("fontSize", data)~=nil)then self:setFontSize(XMLParser.XmlValue("fontSize", data)) end return self end, diff --git a/Basalt/plugins/border.lua b/Basalt/plugins/border.lua index 6c00d5c..639ca89 100644 --- a/Basalt/plugins/border.lua +++ b/Basalt/plugins/border.lua @@ -1,5 +1,4 @@ -local utils = require("utils") -local xmlValue = utils.xmlValue +local XMLParser = require("xmlParser") return { VisualObject = function(base) @@ -85,16 +84,16 @@ return { setValuesByXMLData = function(self, data, scripts) base.setValuesByXMLData(self, data) local borders = {} - if(xmlValue("border", data)~=nil)then - borders["top"] = colors[xmlValue("border", data)] - borders["bottom"] = colors[xmlValue("border", data)] - borders["left"] = colors[xmlValue("border", data)] - borders["right"] = colors[xmlValue("border", data)] + if(XMLParser.XmlValue("border", data)~=nil)then + borders["top"] = colors[XMLParser.XmlValue("border", data)] + borders["bottom"] = colors[XMLParser.XmlValue("border", data)] + borders["left"] = colors[XMLParser.XmlValue("border", data)] + borders["right"] = colors[XMLParser.XmlValue("border", data)] end - if(xmlValue("borderTop", data)~=nil)then borders["top"] = colors[xmlValue("borderTop", data)] end - if(xmlValue("borderBottom", data)~=nil)then borders["bottom"] = colors[xmlValue("borderBottom", data)] end - if(xmlValue("borderLeft", data)~=nil)then borders["left"] = colors[xmlValue("borderLeft", data)] end - if(xmlValue("borderRight", data)~=nil)then borders["right"] = colors[xmlValue("borderRight", data)] end + if(XMLParser.XmlValue("borderTop", data)~=nil)then borders["top"] = colors[XMLParser.XmlValue("borderTop", data)] end + if(XMLParser.XmlValue("borderBottom", data)~=nil)then borders["bottom"] = colors[XMLParser.XmlValue("borderBottom", data)] end + if(XMLParser.XmlValue("borderLeft", data)~=nil)then borders["left"] = colors[XMLParser.XmlValue("borderLeft", data)] end + if(XMLParser.XmlValue("borderRight", data)~=nil)then borders["right"] = colors[XMLParser.XmlValue("borderRight", data)] end self:setBorder(borders["top"], borders["bottom"], borders["left"], borders["right"]) return self end diff --git a/Basalt/plugins/dynamicValues.lua b/Basalt/plugins/dynamicValues.lua index 7c58315..4e9e9c6 100644 --- a/Basalt/plugins/dynamicValues.lua +++ b/Basalt/plugins/dynamicValues.lua @@ -1,6 +1,5 @@ local utils = require("utils") local count = utils.tableCount -local xmlValue = utils.xmlValue return { VisualObject = function(base, basalt) diff --git a/Basalt/plugins/reactive.lua b/Basalt/plugins/reactive.lua index 1d1562d..83d02a0 100644 --- a/Basalt/plugins/reactive.lua +++ b/Basalt/plugins/reactive.lua @@ -1,10 +1,9 @@ local XMLParser = require("xmlParser") local utils = require("utils") local uuid = utils.uuid -local xmlValue = utils.xmlValue local function maybeExecuteScript(data, renderContext) - local script = xmlValue('script', data) + local script = XMLParser.XmlValue('script', data) if (script ~= nil) then load(script, nil, "t", renderContext.env)() end @@ -286,8 +285,8 @@ return { if(data["rules"]["rule"].properties~=nil)then tab = {data["rules"]["rule"]} end for k,v in pairs(tab)do - if(xmlValue("pattern", v)~=nil)then - self:addRule(xmlValue("pattern", v), colors[xmlValue("fg", v)], colors[xmlValue("bg", v)]) + if(XMLParser.XmlValue("pattern", v)~=nil)then + self:addRule(XMLParser.XmlValue("pattern", v), colors[XMLParser.XmlValue("fg", v)], colors[XMLParser.XmlValue("bg", v)]) end end end @@ -301,7 +300,7 @@ return { Thread = function(base, basalt) local object = { setValuesByXMLData = function(self, data, renderContext) - local script = xmlValue("start", data)~=nil + local script = XMLParser.XmlValue("start", data)~=nil if(script~=nil)then local f = load(script, nil, "t", renderContext.env) self:start(f) @@ -334,7 +333,7 @@ return { if(tab.properties~=nil)then tab = {tab} end for _,v in pairs(tab)do if(self:getType()~="Radio")then - self:addItem(xmlValue("text", v), colors[xmlValue("bg", v)], colors[xmlValue("fg", v)]) + self:addItem(XMLParser.XmlValue("text", v), colors[XMLParser.XmlValue("bg", v)], colors[XMLParser.XmlValue("fg", v)]) end end end @@ -362,7 +361,7 @@ return { local tab = data["item"] if(tab.properties~=nil)then tab = {tab} end for _,v in pairs(tab)do - self:addItem(xmlValue("text", v), xmlValue("x", v), xmlValue("y", v), colors[xmlValue("bg", v)], colors[xmlValue("fg", v)]) + self:addItem(XMLParser.XmlValue("text", v), XMLParser.XmlValue("x", v), XMLParser.XmlValue("y", v), colors[XMLParser.XmlValue("bg", v)], colors[XMLParser.XmlValue("fg", v)]) end end return self @@ -379,7 +378,7 @@ return { local tab = data["item"] if(tab.properties~=nil)then tab = {tab} end for _,_ in pairs(tab)do - self:addDataPoint(xmlValue("value")) + self:addDataPoint(XMLParser.XmlValue("value")) end end return self @@ -397,7 +396,7 @@ return { local tab = data["node"] if(tab.properties~=nil)then tab = {tab} end for _,v in pairs(tab)do - local n = node:addNode(xmlValue("text", v), colors[xmlValue("bg", v)], colors[xmlValue("fg", v)]) + local n = node:addNode(XMLParser.XmlValue("text", v), colors[XMLParser.XmlValue("bg", v)], colors[XMLParser.XmlValue("fg", v)]) addNode(n, v) end end @@ -406,7 +405,7 @@ return { local tab = data["node"] if(tab.properties~=nil)then tab = {tab} end for _,v in pairs(tab)do - local n = self:addNode(xmlValue("text", v), colors[xmlValue("bg", v)], colors[xmlValue("fg", v)]) + local n = self:addNode(XMLParser.XmlValue("text", v), colors[XMLParser.XmlValue("bg", v)], colors[XMLParser.XmlValue("fg", v)]) addNode(n, v) end end diff --git a/Basalt/plugins/shadow.lua b/Basalt/plugins/shadow.lua index c53c188..496bbbd 100644 --- a/Basalt/plugins/shadow.lua +++ b/Basalt/plugins/shadow.lua @@ -1,5 +1,4 @@ -local utils = require("utils") -local xmlValue = utils.xmlValue +local XMLParser = require("xmlParser") return { VisualObject = function(base) @@ -33,7 +32,7 @@ return { setValuesByXMLData = function(self, data, scripts) base.setValuesByXMLData(self, data, scripts) - if(xmlValue("shadow", data)~=nil)then self:setShadow(xmlValue("shadow", data)) end + if(XMLParser.XmlValue("shadow", data)~=nil)then self:setShadow(XMLParser.XmlValue("shadow", data)) end return self end } diff --git a/Basalt/plugins/textures.lua b/Basalt/plugins/textures.lua index 2cc40ba..e2790ab 100644 --- a/Basalt/plugins/textures.lua +++ b/Basalt/plugins/textures.lua @@ -1,6 +1,6 @@ local images = require("images") local utils = require("utils") -local xmlValue = utils.xmlValue +local XMLParser = require("xmlParser") return { VisualObject = function(base) local textureId, infinitePlay = 1, true @@ -111,9 +111,9 @@ return { setValuesByXMLData = function(self, data, scripts) base.setValuesByXMLData(self, data, scripts) - if(xmlValue("texture", data)~=nil)then self:addTexture(xmlValue("texture", data), xmlValue("animate", data)) end - if(xmlValue("textureMode", data)~=nil)then self:setTextureMode(xmlValue("textureMode", data)) end - if(xmlValue("infinitePlay", data)~=nil)then self:setInfinitePlay(xmlValue("infinitePlay", data)) end + if(XMLParser.XmlValue("texture", data)~=nil)then self:addTexture(XMLParser.XmlValue("texture", data), XMLParser.XmlValue("animate", data)) end + if(XMLParser.XmlValue("textureMode", data)~=nil)then self:setTextureMode(XMLParser.XmlValue("textureMode", data)) end + if(XMLParser.XmlValue("infinitePlay", data)~=nil)then self:setInfinitePlay(XMLParser.XmlValue("infinitePlay", data)) end return self end } -- 2.49.1 From 9b790636418f9429d6e4207ed782bb90b433f558 Mon Sep 17 00:00:00 2001 From: Sabine Lim Date: Tue, 16 May 2023 19:59:41 +1000 Subject: [PATCH 03/10] Remove getters and setters --- Basalt/libraries/xmlParser.lua | 67 +++++++++++++++------------------- Basalt/plugins/reactive.lua | 41 ++++++++++----------- 2 files changed, 49 insertions(+), 59 deletions(-) diff --git a/Basalt/libraries/xmlParser.lua b/Basalt/libraries/xmlParser.lua index 2df5ca5..7c820fd 100644 --- a/Basalt/libraries/xmlParser.lua +++ b/Basalt/libraries/xmlParser.lua @@ -2,35 +2,27 @@ local XMLNode = {} XMLNode.new = function(name) local node = {} - node.___value = nil - node.___name = name - node.___children = {} - node.___props = {} - node.___reactiveProps = {} + node.value = nil + node.name = name + node.children = {} + node.attributes = {} + node.computedAttributes = {} - function node:value() return self.___value end - function node:setValue(val) self.___value = val end - function node:name() return self.___name end - function node:setName(name) self.___name = name end - function node:children() return self.___children end - function node:numChildren() return #self.___children end function node:addChild(child) - if self[child:name()] ~= nil then - if type(self[child:name()].name) == "function" then + if self[child.name] ~= nil then + if type(self[child.name].name) == "function" then local tempTable = {} - table.insert(tempTable, self[child:name()]) - self[child:name()] = tempTable + table.insert(tempTable, self[child.name]) + self[child.name] = tempTable end - table.insert(self[child:name()], child) + table.insert(self[child.name], child) else - self[child:name()] = child + self[child.name] = child end - table.insert(self.___children, child) + table.insert(self.children, child) end - function node:properties() return self.___props end - function node:numProperties() return #self.___props end - function node:addProperty(name, value) + function node:addAttribute(name, value) local lName = "@" .. name if self[lName] ~= nil then if type(self[lName]) == "string" then @@ -42,12 +34,11 @@ XMLNode.new = function(name) else self[lName] = value end - table.insert(self.___props, { name = name, value = self[lName] }) + table.insert(self.attributes, { name = name, value = self[lName] }) end - function node:reactiveProperties() return self.___reactiveProps end - function node:addReactiveProperty(name, value) - self.___reactiveProps[name] = value + function node:addComputedAttribute(name, value) + self.computedAttributes[name] = value end return node @@ -61,7 +52,7 @@ function XMLParser.XmlValue(name, tab) if(tab[name]~=nil)then if(type(tab[name])=="table")then if(tab[name].value~=nil)then - var = tab[name]:value() + var = tab[name].value end end end @@ -106,15 +97,15 @@ function XMLParser:FromXmlString(value) return value; end -function XMLParser:ParseProps(node, s) +function XMLParser:ParseAttributes(node, s) string.gsub(s, "(%w+)=([\"'])(.-)%2", function(w, _, a) - node:addProperty(w, self:FromXmlString(a)) + node:addAttribute(w, self:FromXmlString(a)) end) end -function XMLParser:ParseReactiveProps(node, s) +function XMLParser:ParseComputedAttributes(node, s) string.gsub(s, "(%w+)={(.-)}", function(w, a) - node:addReactiveProperty(w, a) + node:addComputedAttribute(w, a) end) end @@ -129,18 +120,18 @@ function XMLParser:ParseXmlText(xmlText) if not ni then break end local text = string.sub(xmlText, i, ni - 1); if not string.find(text, "^%s*$") then - local lVal = (top:value() or "") .. self:FromXmlString(text) - stack[#stack]:setValue(lVal) + local lVal = (top.value or "") .. self:FromXmlString(text) + stack[#stack].value = lVal end if empty == "/" then -- empty element tag local lNode = XMLNode.new(label) - self:ParseProps(lNode, xarg) - self:ParseReactiveProps(lNode, xarg) + self:ParseAttributes(lNode, xarg) + self:ParseComputedAttributes(lNode, xarg) top:addChild(lNode) elseif c == "" then -- start tag local lNode = XMLNode.new(label) - self:ParseProps(lNode, xarg) - self:ParseReactiveProps(lNode, xarg) + self:ParseAttributes(lNode, xarg) + self:ParseComputedAttributes(lNode, xarg) table.insert(stack, lNode) top = lNode else -- end tag @@ -150,7 +141,7 @@ function XMLParser:ParseXmlText(xmlText) if #stack < 1 then error("XMLParser: nothing to close with " .. label) end - if toclose:name() ~= label then + if toclose.name ~= label then error("XMLParser: trying to close " .. toclose.name .. " with " .. label) end top:addChild(toclose) @@ -159,7 +150,7 @@ function XMLParser:ParseXmlText(xmlText) end local text = string.sub(xmlText, i); if #stack > 1 then - error("XMLParser: unclosed " .. stack[#stack]:name()) + error("XMLParser: unclosed " .. stack[#stack].name) end return top end diff --git a/Basalt/plugins/reactive.lua b/Basalt/plugins/reactive.lua index 83d02a0..5a0eb96 100644 --- a/Basalt/plugins/reactive.lua +++ b/Basalt/plugins/reactive.lua @@ -27,7 +27,7 @@ end local function registerFunctionEvents(self, data, events, renderContext) for _, event in pairs(events) do - local expression = data:reactiveProperties()[event] + local expression = data.computedAttributes[event] if (expression ~= nil) then registerFunctionEvent(self, expression .. "()", self[event], renderContext) end @@ -116,14 +116,14 @@ return { local object = { setValuesByXMLData = function(self, data, renderContext) renderContext.env[self:getName()] = self - for prop, expression in pairs(data:reactiveProperties()) do + for prop, expression in pairs(data.computedAttributes) do local update = function() local value = load("return " .. expression, nil, "t", renderContext.env)() self:setProperty(prop, value) end basalt.effect(update) end - for _, prop in ipairs(data:properties()) do + for _, prop in ipairs(data.attributes) do self:setProperty(prop.name, prop.value) end registerFunctionEvents(self, data, { @@ -173,7 +173,7 @@ return { local function addXMLObjectType(node, addFn, self, renderContext) if (node ~= nil) then - if (node.properties ~= nil) then + if (node.attributes ~= nil) then node = {node} end for _, v in pairs(node) do @@ -186,11 +186,11 @@ return { local function insertChildLayout(self, layout, node, renderContext) local props = {} - for _, prop in ipairs(node:properties()) do + for _, prop in ipairs(node.attributes) do props[prop.name] = prop.value end local updateFns = {} - for prop, expression in pairs(node:reactiveProperties()) do + for prop, expression in pairs(node.computedAttributes) do updateFns[prop] = basalt.derived(function() return load("return " .. expression, nil, "t", renderContext.env)() end) @@ -207,12 +207,11 @@ return { setValuesByXMLData = function(self, data, renderContext) lastXMLReferences = {} base.setValuesByXMLData(self, data, renderContext) - - local children = data:children() + local _OBJECTS = basalt.getObjects() - for _, childNode in pairs(children) do - local tagName = childNode.___name + for _, childNode in pairs(data.children) do + local tagName = childNode.name if (tagName ~= "animation") then local layout = renderContext.env[tagName] local objectKey = tagName:gsub("^%l", string.upper) @@ -257,22 +256,22 @@ return { base.setValuesByXMLData(self, data, renderContext) if(data["lines"]~=nil)then local l = data["lines"]["line"] - if(l.properties~=nil)then l = {l} end + if(l.attributes~=nil)then l = {l} end for _,v in pairs(l)do - self:addLine(v:value()) + self:addLine(v.value) end end if(data["keywords"]~=nil)then for k,v in pairs(data["keywords"])do if(colors[k]~=nil)then local entry = v - if(entry.properties~=nil)then entry = {entry} end + if(entry.attributes~=nil)then entry = {entry} end local tab = {} for a,b in pairs(entry)do local keywordList = b["keyword"] - if(b["keyword"].properties~=nil)then keywordList = {b["keyword"]} end + if(b["keyword"].attributes~=nil)then keywordList = {b["keyword"]} end for c,d in pairs(keywordList)do - table.insert(tab, d:value()) + table.insert(tab, d.value) end end self:addKeywords(colors[k], tab) @@ -282,7 +281,7 @@ return { if(data["rules"]~=nil)then if(data["rules"]["rule"]~=nil)then local tab = data["rules"]["rule"] - if(data["rules"]["rule"].properties~=nil)then tab = {data["rules"]["rule"]} end + if(data["rules"]["rule"].attributes~=nil)then tab = {data["rules"]["rule"]} end for k,v in pairs(tab)do if(XMLParser.XmlValue("pattern", v)~=nil)then @@ -330,7 +329,7 @@ return { base.setValuesByXMLData(self, data, renderContext) if(data["item"]~=nil)then local tab = data["item"] - if(tab.properties~=nil)then tab = {tab} end + if(tab.attributes~=nil)then tab = {tab} end for _,v in pairs(tab)do if(self:getType()~="Radio")then self:addItem(XMLParser.XmlValue("text", v), colors[XMLParser.XmlValue("bg", v)], colors[XMLParser.XmlValue("fg", v)]) @@ -359,7 +358,7 @@ return { base.setValuesByXMLData(self, data, renderContext) if(data["item"]~=nil)then local tab = data["item"] - if(tab.properties~=nil)then tab = {tab} end + if(tab.attributes~=nil)then tab = {tab} end for _,v in pairs(tab)do self:addItem(XMLParser.XmlValue("text", v), XMLParser.XmlValue("x", v), XMLParser.XmlValue("y", v), colors[XMLParser.XmlValue("bg", v)], colors[XMLParser.XmlValue("fg", v)]) end @@ -376,7 +375,7 @@ return { base.setValuesByXMLData(self, data, renderContext) if(data["item"]~=nil)then local tab = data["item"] - if(tab.properties~=nil)then tab = {tab} end + if(tab.attributes~=nil)then tab = {tab} end for _,_ in pairs(tab)do self:addDataPoint(XMLParser.XmlValue("value")) end @@ -394,7 +393,7 @@ return { local function addNode(node, data) if(data["node"]~=nil)then local tab = data["node"] - if(tab.properties~=nil)then tab = {tab} end + if(tab.attributes~=nil)then tab = {tab} end for _,v in pairs(tab)do local n = node:addNode(XMLParser.XmlValue("text", v), colors[XMLParser.XmlValue("bg", v)], colors[XMLParser.XmlValue("fg", v)]) addNode(n, v) @@ -403,7 +402,7 @@ return { end if(data["node"]~=nil)then local tab = data["node"] - if(tab.properties~=nil)then tab = {tab} end + if(tab.attributes~=nil)then tab = {tab} end for _,v in pairs(tab)do local n = self:addNode(XMLParser.XmlValue("text", v), colors[XMLParser.XmlValue("bg", v)], colors[XMLParser.XmlValue("fg", v)]) addNode(n, v) -- 2.49.1 From 45cbbcc865738a441c6037db0913ee535cdbc162 Mon Sep 17 00:00:00 2001 From: Sabine Lim Date: Tue, 16 May 2023 20:14:19 +1000 Subject: [PATCH 04/10] Simplify XMLNode data structure --- Basalt/libraries/xmlParser.lua | 33 +++++++-------------------------- Basalt/plugins/reactive.lua | 16 +++++----------- 2 files changed, 12 insertions(+), 37 deletions(-) diff --git a/Basalt/libraries/xmlParser.lua b/Basalt/libraries/xmlParser.lua index 7c820fd..c686330 100644 --- a/Basalt/libraries/xmlParser.lua +++ b/Basalt/libraries/xmlParser.lua @@ -6,7 +6,6 @@ XMLNode.new = function(name) node.name = name node.children = {} node.attributes = {} - node.computedAttributes = {} function node:addChild(child) if self[child.name] ~= nil then @@ -23,22 +22,7 @@ XMLNode.new = function(name) end function node:addAttribute(name, value) - local lName = "@" .. name - if self[lName] ~= nil then - if type(self[lName]) == "string" then - local tempTable = {} - table.insert(tempTable, self[lName]) - self[lName] = tempTable - end - table.insert(self[lName], value) - else - self[lName] = value - end - table.insert(self.attributes, { name = name, value = self[lName] }) - end - - function node:addComputedAttribute(name, value) - self.computedAttributes[name] = value + self.attributes[name] = value end return node @@ -98,14 +82,13 @@ function XMLParser:FromXmlString(value) end function XMLParser:ParseAttributes(node, s) - string.gsub(s, "(%w+)=([\"'])(.-)%2", function(w, _, a) - node:addAttribute(w, self:FromXmlString(a)) + -- Parse "" style attributes + local _, _ = string.gsub(s, "(%w+)=([\"'])(.-)%2", function(w, _, a) + node:addAttribute(w, "\"" .. self:FromXmlString(a) .. "\"") end) -end - -function XMLParser:ParseComputedAttributes(node, s) - string.gsub(s, "(%w+)={(.-)}", function(w, a) - node:addComputedAttribute(w, a) + -- Parse {} style attributes + local _, _ = string.gsub(s, "(%w+)={(.-)}", function(w, a) + node:addAttribute(w, a) end) end @@ -126,12 +109,10 @@ function XMLParser:ParseXmlText(xmlText) if empty == "/" then -- empty element tag local lNode = XMLNode.new(label) self:ParseAttributes(lNode, xarg) - self:ParseComputedAttributes(lNode, xarg) top:addChild(lNode) elseif c == "" then -- start tag local lNode = XMLNode.new(label) self:ParseAttributes(lNode, xarg) - self:ParseComputedAttributes(lNode, xarg) table.insert(stack, lNode) top = lNode else -- end tag diff --git a/Basalt/plugins/reactive.lua b/Basalt/plugins/reactive.lua index 5a0eb96..5f5e3b6 100644 --- a/Basalt/plugins/reactive.lua +++ b/Basalt/plugins/reactive.lua @@ -27,7 +27,7 @@ end local function registerFunctionEvents(self, data, events, renderContext) for _, event in pairs(events) do - local expression = data.computedAttributes[event] + local expression = data.attributes[event] if (expression ~= nil) then registerFunctionEvent(self, expression .. "()", self[event], renderContext) end @@ -116,16 +116,13 @@ return { local object = { setValuesByXMLData = function(self, data, renderContext) renderContext.env[self:getName()] = self - for prop, expression in pairs(data.computedAttributes) do + for attribute, expression in pairs(data.attributes) do local update = function() local value = load("return " .. expression, nil, "t", renderContext.env)() - self:setProperty(prop, value) + self:setProperty(attribute, value) end basalt.effect(update) end - for _, prop in ipairs(data.attributes) do - self:setProperty(prop.name, prop.value) - end registerFunctionEvents(self, data, { "onClick", "onClickUp", @@ -185,16 +182,13 @@ return { end local function insertChildLayout(self, layout, node, renderContext) - local props = {} - for _, prop in ipairs(node.attributes) do - props[prop.name] = prop.value - end local updateFns = {} - for prop, expression in pairs(node.computedAttributes) do + for prop, expression in pairs(node.attributes) do updateFns[prop] = basalt.derived(function() return load("return " .. expression, nil, "t", renderContext.env)() end) end + local props = {} setmetatable(props, { __index = function(_, k) return updateFns[k]() -- 2.49.1 From 84f32c91a45ca0c872c238e3cab0151b12e4f9fa Mon Sep 17 00:00:00 2001 From: Sabine Lim Date: Tue, 16 May 2023 21:13:10 +1000 Subject: [PATCH 05/10] Remove unused functions --- Basalt/libraries/xmlParser.lua | 214 +++++++++++--------------- Basalt/plugins/advancedBackground.lua | 2 +- Basalt/plugins/animations.lua | 6 +- Basalt/plugins/bigfonts.lua | 2 +- Basalt/plugins/border.lua | 18 +-- Basalt/plugins/reactive.lua | 20 +-- Basalt/plugins/shadow.lua | 2 +- Basalt/plugins/textures.lua | 6 +- 8 files changed, 120 insertions(+), 150 deletions(-) diff --git a/Basalt/libraries/xmlParser.lua b/Basalt/libraries/xmlParser.lua index c686330..b8f7c79 100644 --- a/Basalt/libraries/xmlParser.lua +++ b/Basalt/libraries/xmlParser.lua @@ -1,139 +1,109 @@ -local XMLNode = {} +local XMLNode = { + new = function(name) + return { + value = nil, + name = name, + children = {}, + attributes = {}, -XMLNode.new = function(name) - local node = {} - node.value = nil - node.name = name - node.children = {} - node.attributes = {} + addChild = function(self, child) + if self[child.name] ~= nil then + if type(self[child.name].name) == "function" then + local tempTable = {} + table.insert(tempTable, self[child.name]) + self[child.name] = tempTable + end + table.insert(self[child.name], child) + else + self[child.name] = child + end + table.insert(self.children, child) + end, - function node:addChild(child) - if self[child.name] ~= nil then - if type(self[child.name].name) == "function" then - local tempTable = {} - table.insert(tempTable, self[child.name]) - self[child.name] = tempTable + addAttribute = function(self, name, value) + self.attributes[name] = value end - table.insert(self[child.name], child) - else - self[child.name] = child - end - table.insert(self.children, child) + } end +} - function node:addAttribute(name, value) - self.attributes[name] = value - end - - return node -end - -local XMLParser = {} - -function XMLParser.XmlValue(name, tab) - local var - if(type(tab)~="table")then return end - if(tab[name]~=nil)then - if(type(tab[name])=="table")then - if(tab[name].value~=nil)then - var = tab[name].value - end - end - end - if(var==nil)then var = tab["@"..name] end - - if(var=="true")then - var = true - elseif(var=="false")then - var = false - elseif(tonumber(var)~=nil)then - var = tonumber(var) - end - return var -end - -function XMLParser:ToXmlString(value) - value = string.gsub(value, "&", "&"); -- '&' -> "&" - value = string.gsub(value, "<", "<"); -- '<' -> "<" - value = string.gsub(value, ">", ">"); -- '>' -> ">" - value = string.gsub(value, "\"", """); -- '"' -> """ - value = string.gsub(value, "([^%w%&%;%p%\t% ])", - function(c) - return string.format("&#x%X;", string.byte(c)) - end); - return value; -end - -function XMLParser:FromXmlString(value) - value = string.gsub(value, "&#x([%x]+)%;", - function(h) - return string.char(tonumber(h, 16)) - end); - value = string.gsub(value, "&#([0-9]+)%;", - function(h) - return string.char(tonumber(h, 10)) - end); - value = string.gsub(value, """, "\""); - value = string.gsub(value, "'", "'"); - value = string.gsub(value, ">", ">"); - value = string.gsub(value, "<", "<"); - value = string.gsub(value, "&", "&"); - return value; -end - -function XMLParser:ParseAttributes(node, s) +local parseAttributes = function(node, s) -- Parse "" style attributes - local _, _ = string.gsub(s, "(%w+)=([\"'])(.-)%2", function(w, _, a) - node:addAttribute(w, "\"" .. self:FromXmlString(a) .. "\"") + local _, _ = string.gsub(s, "(%w+)=([\"'])(.-)%2", function(attribute, _, value) + node:addAttribute(attribute, "\"" .. value .. "\"") end) -- Parse {} style attributes - local _, _ = string.gsub(s, "(%w+)={(.-)}", function(w, a) - node:addAttribute(w, a) + local _, _ = string.gsub(s, "(%w+)={(.-)}", function(attribute, expression) + node:addAttribute(attribute, expression) end) end -function XMLParser:ParseXmlText(xmlText) - local stack = {} - local top = XMLNode.new() - table.insert(stack, top) - local ni, c, label, xarg, empty - local i, j = 1, 1 - while true do - ni, j, c, label, xarg, empty = string.find(xmlText, "<(%/?)([%w_:]+)(.-)(%/?)>", i) - if not ni then break end - local text = string.sub(xmlText, i, ni - 1); - if not string.find(text, "^%s*$") then - local lVal = (top.value or "") .. self:FromXmlString(text) - stack[#stack].value = lVal +local XMLParser = { + xmlValue = function(name, tab) + local var + if(type(tab)~="table")then return end + if(tab[name]~=nil)then + if(type(tab[name])=="table")then + if(tab[name].value~=nil)then + var = tab[name].value + end + end end - if empty == "/" then -- empty element tag - local lNode = XMLNode.new(label) - self:ParseAttributes(lNode, xarg) - top:addChild(lNode) - elseif c == "" then -- start tag - local lNode = XMLNode.new(label) - self:ParseAttributes(lNode, xarg) - table.insert(stack, lNode) - top = lNode - else -- end tag - local toclose = table.remove(stack) -- remove top + if(var==nil)then var = tab["@"..name] end - top = stack[#stack] - if #stack < 1 then - error("XMLParser: nothing to close with " .. label) - end - if toclose.name ~= label then - error("XMLParser: trying to close " .. toclose.name .. " with " .. label) - end - top:addChild(toclose) + if(var=="true")then + var = true + elseif(var=="false")then + var = false + elseif(tonumber(var)~=nil)then + var = tonumber(var) end - i = j + 1 + return var + end, + + parseText = function(xmlText) + local stack = {} + local top = XMLNode.new() + table.insert(stack, top) + local ni, c, label, xarg, empty + local i, j = 1, 1 + while true do + ni, j, c, label, xarg, empty = string.find(xmlText, "<(%/?)([%w_:]+)(.-)(%/?)>", i) + if not ni then break end + local text = string.sub(xmlText, i, ni - 1); + if not string.find(text, "^%s*$") then + local lVal = (top.value or "") .. text + stack[#stack].value = lVal + end + if empty == "/" then -- empty element tag + local lNode = XMLNode.new(label) + parseAttributes(lNode, xarg) + top:addChild(lNode) + elseif c == "" then -- start tag + local lNode = XMLNode.new(label) + parseAttributes(lNode, xarg) + table.insert(stack, lNode) + top = lNode + else -- end tag + local toclose = table.remove(stack) -- remove top + + top = stack[#stack] + if #stack < 1 then + error("XMLParser: nothing to close with " .. label) + end + if toclose.name ~= label then + error("XMLParser: trying to close " .. toclose.name .. " with " .. label) + end + top:addChild(toclose) + end + i = j + 1 + end + local text = string.sub(xmlText, i); + if #stack > 1 then + error("XMLParser: unclosed " .. stack[#stack].name) + end + return top end - local text = string.sub(xmlText, i); - if #stack > 1 then - error("XMLParser: unclosed " .. stack[#stack].name) - end - return top -end +} return XMLParser diff --git a/Basalt/plugins/advancedBackground.lua b/Basalt/plugins/advancedBackground.lua index 33e74ff..1eff6dd 100644 --- a/Basalt/plugins/advancedBackground.lua +++ b/Basalt/plugins/advancedBackground.lua @@ -30,7 +30,7 @@ return { setValuesByXMLData = function(self, data, scripts) base.setValuesByXMLData(self, data, scripts) - if(XMLParser.XmlValue("background-symbol", data)~=nil)then self:setBackgroundSymbol(XMLParser.XmlValue("background-symbol", data), XMLParser.XmlValue("background-symbol-color", data)) end + if(XMLParser.xmlValue("background-symbol", data)~=nil)then self:setBackgroundSymbol(XMLParser.xmlValue("background-symbol", data), XMLParser.xmlValue("background-symbol-color", data)) end return self end, diff --git a/Basalt/plugins/animations.lua b/Basalt/plugins/animations.lua index 36f41de..2897c88 100644 --- a/Basalt/plugins/animations.lua +++ b/Basalt/plugins/animations.lua @@ -340,9 +340,9 @@ return { setValuesByXMLData = function(self, data, scripts) base.setValuesByXMLData(self, data, scripts) - local animX, animY, animateDuration, animeteTimeOffset, animateMode = XMLParser.XmlValue("animateX", data), XMLParser.XmlValue("animateY", data), XMLParser.XmlValue("animateDuration", data), XMLParser.XmlValue("animateTimeOffset", data), XMLParser.XmlValue("animateMode", data) - local animW, animH, animateDuration, animeteTimeOffset, animateMode = XMLParser.XmlValue("animateW", data), XMLParser.XmlValue("animateH", data), XMLParser.XmlValue("animateDuration", data), XMLParser.XmlValue("animateTimeOffset", data), XMLParser.XmlValue("animateMode", data) - local animXOffset, animYOffset, animateDuration, animeteTimeOffset, animateMode = XMLParser.XmlValue("animateXOffset", data), XMLParser.XmlValue("animateYOffset", data), XMLParser.XmlValue("animateDuration", data), XMLParser.XmlValue("animateTimeOffset", data), XMLParser.XmlValue("animateMode", data) + local animX, animY, animateDuration, animeteTimeOffset, animateMode = XMLParser.xmlValue("animateX", data), XMLParser.xmlValue("animateY", data), XMLParser.xmlValue("animateDuration", data), XMLParser.xmlValue("animateTimeOffset", data), XMLParser.xmlValue("animateMode", data) + local animW, animH, animateDuration, animeteTimeOffset, animateMode = XMLParser.xmlValue("animateW", data), XMLParser.xmlValue("animateH", data), XMLParser.xmlValue("animateDuration", data), XMLParser.xmlValue("animateTimeOffset", data), XMLParser.xmlValue("animateMode", data) + local animXOffset, animYOffset, animateDuration, animeteTimeOffset, animateMode = XMLParser.xmlValue("animateXOffset", data), XMLParser.xmlValue("animateYOffset", data), XMLParser.xmlValue("animateDuration", data), XMLParser.xmlValue("animateTimeOffset", data), XMLParser.xmlValue("animateMode", data) if(animX~=nil and animY~=nil)then self:animatePosition(animX, animY, animateDuration, animeteTimeOffset, animateMode) end diff --git a/Basalt/plugins/bigfonts.lua b/Basalt/plugins/bigfonts.lua index b4ae4ee..a1086ee 100644 --- a/Basalt/plugins/bigfonts.lua +++ b/Basalt/plugins/bigfonts.lua @@ -197,7 +197,7 @@ return { setValuesByXMLData = function(self, data, scripts) base.setValuesByXMLData(self, data, scripts) - if(XMLParser.XmlValue("fontSize", data)~=nil)then self:setFontSize(XMLParser.XmlValue("fontSize", data)) end + if(XMLParser.xmlValue("fontSize", data)~=nil)then self:setFontSize(XMLParser.xmlValue("fontSize", data)) end return self end, diff --git a/Basalt/plugins/border.lua b/Basalt/plugins/border.lua index 639ca89..6f4f093 100644 --- a/Basalt/plugins/border.lua +++ b/Basalt/plugins/border.lua @@ -84,16 +84,16 @@ return { setValuesByXMLData = function(self, data, scripts) base.setValuesByXMLData(self, data) local borders = {} - if(XMLParser.XmlValue("border", data)~=nil)then - borders["top"] = colors[XMLParser.XmlValue("border", data)] - borders["bottom"] = colors[XMLParser.XmlValue("border", data)] - borders["left"] = colors[XMLParser.XmlValue("border", data)] - borders["right"] = colors[XMLParser.XmlValue("border", data)] + if(XMLParser.xmlValue("border", data)~=nil)then + borders["top"] = colors[XMLParser.xmlValue("border", data)] + borders["bottom"] = colors[XMLParser.xmlValue("border", data)] + borders["left"] = colors[XMLParser.xmlValue("border", data)] + borders["right"] = colors[XMLParser.xmlValue("border", data)] end - if(XMLParser.XmlValue("borderTop", data)~=nil)then borders["top"] = colors[XMLParser.XmlValue("borderTop", data)] end - if(XMLParser.XmlValue("borderBottom", data)~=nil)then borders["bottom"] = colors[XMLParser.XmlValue("borderBottom", data)] end - if(XMLParser.XmlValue("borderLeft", data)~=nil)then borders["left"] = colors[XMLParser.XmlValue("borderLeft", data)] end - if(XMLParser.XmlValue("borderRight", data)~=nil)then borders["right"] = colors[XMLParser.XmlValue("borderRight", data)] end + if(XMLParser.xmlValue("borderTop", data)~=nil)then borders["top"] = colors[XMLParser.xmlValue("borderTop", data)] end + if(XMLParser.xmlValue("borderBottom", data)~=nil)then borders["bottom"] = colors[XMLParser.xmlValue("borderBottom", data)] end + if(XMLParser.xmlValue("borderLeft", data)~=nil)then borders["left"] = colors[XMLParser.xmlValue("borderLeft", data)] end + if(XMLParser.xmlValue("borderRight", data)~=nil)then borders["right"] = colors[XMLParser.xmlValue("borderRight", data)] end self:setBorder(borders["top"], borders["bottom"], borders["left"], borders["right"]) return self end diff --git a/Basalt/plugins/reactive.lua b/Basalt/plugins/reactive.lua index 5f5e3b6..9d46051 100644 --- a/Basalt/plugins/reactive.lua +++ b/Basalt/plugins/reactive.lua @@ -3,7 +3,7 @@ local utils = require("utils") local uuid = utils.uuid local function maybeExecuteScript(data, renderContext) - local script = XMLParser.XmlValue('script', data) + local script = XMLParser.xmlValue('script', data) if (script ~= nil) then load(script, nil, "t", renderContext.env)() end @@ -228,7 +228,7 @@ return { renderContext.env = _ENV renderContext.env.props = props local f = fs.open(path, "r") - local data = XMLParser:ParseXmlText(f.readAll()) + local data = XMLParser.parseText(f.readAll()) f.close() lastXMLReferences = {} maybeExecuteScript(data, renderContext) @@ -278,8 +278,8 @@ return { if(data["rules"]["rule"].attributes~=nil)then tab = {data["rules"]["rule"]} end for k,v in pairs(tab)do - if(XMLParser.XmlValue("pattern", v)~=nil)then - self:addRule(XMLParser.XmlValue("pattern", v), colors[XMLParser.XmlValue("fg", v)], colors[XMLParser.XmlValue("bg", v)]) + if(XMLParser.xmlValue("pattern", v)~=nil)then + self:addRule(XMLParser.xmlValue("pattern", v), colors[XMLParser.xmlValue("fg", v)], colors[XMLParser.xmlValue("bg", v)]) end end end @@ -293,7 +293,7 @@ return { Thread = function(base, basalt) local object = { setValuesByXMLData = function(self, data, renderContext) - local script = XMLParser.XmlValue("start", data)~=nil + local script = XMLParser.xmlValue("start", data)~=nil if(script~=nil)then local f = load(script, nil, "t", renderContext.env) self:start(f) @@ -326,7 +326,7 @@ return { if(tab.attributes~=nil)then tab = {tab} end for _,v in pairs(tab)do if(self:getType()~="Radio")then - self:addItem(XMLParser.XmlValue("text", v), colors[XMLParser.XmlValue("bg", v)], colors[XMLParser.XmlValue("fg", v)]) + self:addItem(XMLParser.xmlValue("text", v), colors[XMLParser.xmlValue("bg", v)], colors[XMLParser.xmlValue("fg", v)]) end end end @@ -354,7 +354,7 @@ return { local tab = data["item"] if(tab.attributes~=nil)then tab = {tab} end for _,v in pairs(tab)do - self:addItem(XMLParser.XmlValue("text", v), XMLParser.XmlValue("x", v), XMLParser.XmlValue("y", v), colors[XMLParser.XmlValue("bg", v)], colors[XMLParser.XmlValue("fg", v)]) + self:addItem(XMLParser.xmlValue("text", v), XMLParser.xmlValue("x", v), XMLParser.xmlValue("y", v), colors[XMLParser.xmlValue("bg", v)], colors[XMLParser.xmlValue("fg", v)]) end end return self @@ -371,7 +371,7 @@ return { local tab = data["item"] if(tab.attributes~=nil)then tab = {tab} end for _,_ in pairs(tab)do - self:addDataPoint(XMLParser.XmlValue("value")) + self:addDataPoint(XMLParser.xmlValue("value")) end end return self @@ -389,7 +389,7 @@ return { local tab = data["node"] if(tab.attributes~=nil)then tab = {tab} end for _,v in pairs(tab)do - local n = node:addNode(XMLParser.XmlValue("text", v), colors[XMLParser.XmlValue("bg", v)], colors[XMLParser.XmlValue("fg", v)]) + local n = node:addNode(XMLParser.xmlValue("text", v), colors[XMLParser.xmlValue("bg", v)], colors[XMLParser.xmlValue("fg", v)]) addNode(n, v) end end @@ -398,7 +398,7 @@ return { local tab = data["node"] if(tab.attributes~=nil)then tab = {tab} end for _,v in pairs(tab)do - local n = self:addNode(XMLParser.XmlValue("text", v), colors[XMLParser.XmlValue("bg", v)], colors[XMLParser.XmlValue("fg", v)]) + local n = self:addNode(XMLParser.xmlValue("text", v), colors[XMLParser.xmlValue("bg", v)], colors[XMLParser.xmlValue("fg", v)]) addNode(n, v) end end diff --git a/Basalt/plugins/shadow.lua b/Basalt/plugins/shadow.lua index 496bbbd..483a14b 100644 --- a/Basalt/plugins/shadow.lua +++ b/Basalt/plugins/shadow.lua @@ -32,7 +32,7 @@ return { setValuesByXMLData = function(self, data, scripts) base.setValuesByXMLData(self, data, scripts) - if(XMLParser.XmlValue("shadow", data)~=nil)then self:setShadow(XMLParser.XmlValue("shadow", data)) end + if(XMLParser.xmlValue("shadow", data)~=nil)then self:setShadow(XMLParser.xmlValue("shadow", data)) end return self end } diff --git a/Basalt/plugins/textures.lua b/Basalt/plugins/textures.lua index e2790ab..76d8678 100644 --- a/Basalt/plugins/textures.lua +++ b/Basalt/plugins/textures.lua @@ -111,9 +111,9 @@ return { setValuesByXMLData = function(self, data, scripts) base.setValuesByXMLData(self, data, scripts) - if(XMLParser.XmlValue("texture", data)~=nil)then self:addTexture(XMLParser.XmlValue("texture", data), XMLParser.XmlValue("animate", data)) end - if(XMLParser.XmlValue("textureMode", data)~=nil)then self:setTextureMode(XMLParser.XmlValue("textureMode", data)) end - if(XMLParser.XmlValue("infinitePlay", data)~=nil)then self:setInfinitePlay(XMLParser.XmlValue("infinitePlay", data)) end + if(XMLParser.xmlValue("texture", data)~=nil)then self:addTexture(XMLParser.xmlValue("texture", data), XMLParser.xmlValue("animate", data)) end + if(XMLParser.xmlValue("textureMode", data)~=nil)then self:setTextureMode(XMLParser.xmlValue("textureMode", data)) end + if(XMLParser.xmlValue("infinitePlay", data)~=nil)then self:setInfinitePlay(XMLParser.xmlValue("infinitePlay", data)) end return self end } -- 2.49.1 From 4b029c97284e999f661842d2a8f91e6b295b57f1 Mon Sep 17 00:00:00 2001 From: Sabine Lim Date: Tue, 16 May 2023 21:16:35 +1000 Subject: [PATCH 06/10] Clarify comments --- Basalt/libraries/xmlParser.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Basalt/libraries/xmlParser.lua b/Basalt/libraries/xmlParser.lua index b8f7c79..9c13752 100644 --- a/Basalt/libraries/xmlParser.lua +++ b/Basalt/libraries/xmlParser.lua @@ -28,11 +28,11 @@ local XMLNode = { } local parseAttributes = function(node, s) - -- Parse "" style attributes + -- Parse "" style string attributes local _, _ = string.gsub(s, "(%w+)=([\"'])(.-)%2", function(attribute, _, value) node:addAttribute(attribute, "\"" .. value .. "\"") end) - -- Parse {} style attributes + -- Parse {} style computed attributes local _, _ = string.gsub(s, "(%w+)={(.-)}", function(attribute, expression) node:addAttribute(attribute, expression) end) -- 2.49.1 From 884c02b5f7350fa0f2f0607bdd7f8e46105c8539 Mon Sep 17 00:00:00 2001 From: Sabine Lim Date: Tue, 16 May 2023 21:47:27 +1000 Subject: [PATCH 07/10] Rename data to node --- Basalt/libraries/xmlParser.lua | 2 +- Basalt/plugins/advancedBackground.lua | 6 +- Basalt/plugins/animations.lua | 10 +- Basalt/plugins/bigfonts.lua | 6 +- Basalt/plugins/border.lua | 22 ++-- Basalt/plugins/reactive.lua | 138 +++++++++++++------------- Basalt/plugins/shadow.lua | 6 +- Basalt/plugins/textures.lua | 10 +- 8 files changed, 98 insertions(+), 102 deletions(-) diff --git a/Basalt/libraries/xmlParser.lua b/Basalt/libraries/xmlParser.lua index 9c13752..e8dbe10 100644 --- a/Basalt/libraries/xmlParser.lua +++ b/Basalt/libraries/xmlParser.lua @@ -1,8 +1,8 @@ local XMLNode = { new = function(name) return { - value = nil, name = name, + value = nil, children = {}, attributes = {}, diff --git a/Basalt/plugins/advancedBackground.lua b/Basalt/plugins/advancedBackground.lua index 1eff6dd..c848e20 100644 --- a/Basalt/plugins/advancedBackground.lua +++ b/Basalt/plugins/advancedBackground.lua @@ -28,9 +28,9 @@ return { return bgSymbolColor end, - setValuesByXMLData = function(self, data, scripts) - base.setValuesByXMLData(self, data, scripts) - if(XMLParser.xmlValue("background-symbol", data)~=nil)then self:setBackgroundSymbol(XMLParser.xmlValue("background-symbol", data), XMLParser.xmlValue("background-symbol-color", data)) end + setValuesByXMLData = function(self, node, scripts) + base.setValuesByXMLData(self, node, scripts) + if(XMLParser.xmlValue("background-symbol", node)~=nil)then self:setBackgroundSymbol(XMLParser.xmlValue("background-symbol", node), XMLParser.xmlValue("background-symbol-color", node)) end return self end, diff --git a/Basalt/plugins/animations.lua b/Basalt/plugins/animations.lua index 2897c88..7cb27cd 100644 --- a/Basalt/plugins/animations.lua +++ b/Basalt/plugins/animations.lua @@ -338,11 +338,11 @@ return { end end, - setValuesByXMLData = function(self, data, scripts) - base.setValuesByXMLData(self, data, scripts) - local animX, animY, animateDuration, animeteTimeOffset, animateMode = XMLParser.xmlValue("animateX", data), XMLParser.xmlValue("animateY", data), XMLParser.xmlValue("animateDuration", data), XMLParser.xmlValue("animateTimeOffset", data), XMLParser.xmlValue("animateMode", data) - local animW, animH, animateDuration, animeteTimeOffset, animateMode = XMLParser.xmlValue("animateW", data), XMLParser.xmlValue("animateH", data), XMLParser.xmlValue("animateDuration", data), XMLParser.xmlValue("animateTimeOffset", data), XMLParser.xmlValue("animateMode", data) - local animXOffset, animYOffset, animateDuration, animeteTimeOffset, animateMode = XMLParser.xmlValue("animateXOffset", data), XMLParser.xmlValue("animateYOffset", data), XMLParser.xmlValue("animateDuration", data), XMLParser.xmlValue("animateTimeOffset", data), XMLParser.xmlValue("animateMode", data) + setValuesByXMLData = function(self, node, scripts) + base.setValuesByXMLData(self, node, scripts) + local animX, animY, animateDuration, animeteTimeOffset, animateMode = XMLParser.xmlValue("animateX", node), XMLParser.xmlValue("animateY", node), XMLParser.xmlValue("animateDuration", node), XMLParser.xmlValue("animateTimeOffset", node), XMLParser.xmlValue("animateMode", node) + local animW, animH, animateDuration, animeteTimeOffset, animateMode = XMLParser.xmlValue("animateW", node), XMLParser.xmlValue("animateH", node), XMLParser.xmlValue("animateDuration", node), XMLParser.xmlValue("animateTimeOffset", node), XMLParser.xmlValue("animateMode", node) + local animXOffset, animYOffset, animateDuration, animeteTimeOffset, animateMode = XMLParser.xmlValue("animateXOffset", node), XMLParser.xmlValue("animateYOffset", node), XMLParser.xmlValue("animateDuration", node), XMLParser.xmlValue("animateTimeOffset", node), XMLParser.xmlValue("animateMode", node) if(animX~=nil and animY~=nil)then self:animatePosition(animX, animY, animateDuration, animeteTimeOffset, animateMode) end diff --git a/Basalt/plugins/bigfonts.lua b/Basalt/plugins/bigfonts.lua index a1086ee..a9a9a68 100644 --- a/Basalt/plugins/bigfonts.lua +++ b/Basalt/plugins/bigfonts.lua @@ -195,9 +195,9 @@ return { end end, - setValuesByXMLData = function(self, data, scripts) - base.setValuesByXMLData(self, data, scripts) - if(XMLParser.xmlValue("fontSize", data)~=nil)then self:setFontSize(XMLParser.xmlValue("fontSize", data)) end + setValuesByXMLData = function(self, node, scripts) + base.setValuesByXMLData(self, node, scripts) + if(XMLParser.xmlValue("fontSize", node)~=nil)then self:setFontSize(XMLParser.xmlValue("fontSize", node)) end return self end, diff --git a/Basalt/plugins/border.lua b/Basalt/plugins/border.lua index 6f4f093..7315fae 100644 --- a/Basalt/plugins/border.lua +++ b/Basalt/plugins/border.lua @@ -81,19 +81,19 @@ return { end) end, - setValuesByXMLData = function(self, data, scripts) - base.setValuesByXMLData(self, data) + setValuesByXMLData = function(self, node, scripts) + base.setValuesByXMLData(self, node) local borders = {} - if(XMLParser.xmlValue("border", data)~=nil)then - borders["top"] = colors[XMLParser.xmlValue("border", data)] - borders["bottom"] = colors[XMLParser.xmlValue("border", data)] - borders["left"] = colors[XMLParser.xmlValue("border", data)] - borders["right"] = colors[XMLParser.xmlValue("border", data)] + if(XMLParser.xmlValue("border", node)~=nil)then + borders["top"] = colors[XMLParser.xmlValue("border", node)] + borders["bottom"] = colors[XMLParser.xmlValue("border", node)] + borders["left"] = colors[XMLParser.xmlValue("border", node)] + borders["right"] = colors[XMLParser.xmlValue("border", node)] end - if(XMLParser.xmlValue("borderTop", data)~=nil)then borders["top"] = colors[XMLParser.xmlValue("borderTop", data)] end - if(XMLParser.xmlValue("borderBottom", data)~=nil)then borders["bottom"] = colors[XMLParser.xmlValue("borderBottom", data)] end - if(XMLParser.xmlValue("borderLeft", data)~=nil)then borders["left"] = colors[XMLParser.xmlValue("borderLeft", data)] end - if(XMLParser.xmlValue("borderRight", data)~=nil)then borders["right"] = colors[XMLParser.xmlValue("borderRight", data)] end + if(XMLParser.xmlValue("borderTop", node)~=nil)then borders["top"] = colors[XMLParser.xmlValue("borderTop", node)] end + if(XMLParser.xmlValue("borderBottom", node)~=nil)then borders["bottom"] = colors[XMLParser.xmlValue("borderBottom", node)] end + if(XMLParser.xmlValue("borderLeft", node)~=nil)then borders["left"] = colors[XMLParser.xmlValue("borderLeft", node)] end + if(XMLParser.xmlValue("borderRight", node)~=nil)then borders["right"] = colors[XMLParser.xmlValue("borderRight", node)] end self:setBorder(borders["top"], borders["bottom"], borders["left"], borders["right"]) return self end diff --git a/Basalt/plugins/reactive.lua b/Basalt/plugins/reactive.lua index 9d46051..c093233 100644 --- a/Basalt/plugins/reactive.lua +++ b/Basalt/plugins/reactive.lua @@ -2,34 +2,30 @@ local XMLParser = require("xmlParser") local utils = require("utils") local uuid = utils.uuid -local function maybeExecuteScript(data, renderContext) - local script = XMLParser.xmlValue('script', data) - if (script ~= nil) then - load(script, nil, "t", renderContext.env)() +local function maybeExecuteScript(nodeTree, renderContext) + for _, node in ipairs(nodeTree.children) do + if (node.name == "script") then + return load(node.value, nil, "t", renderContext.env)() + end end end -local function registerFunctionEvent(self, data, event, renderContext) +local function registerFunctionEvent(self, event, script, renderContext) local eventEnv = renderContext.env - if(data:sub(1,1)=="$")then - local data = data:sub(2) - event(self, self:getBasalt().getVariable(data)) - else - event(self, function(...) - eventEnv.event = {...} - local success, msg = pcall(load(data, nil, "t", eventEnv)) - if not success then - error("XML Error: "..msg) - end - end) - end + event(self, function(...) + eventEnv.event = {...} + local success, msg = pcall(load(script, nil, "t", eventEnv)) + if not success then + error("XML Error: "..msg) + end + end) end -local function registerFunctionEvents(self, data, events, renderContext) +local function registerFunctionEvents(self, node, events, renderContext) for _, event in pairs(events) do - local expression = data.attributes[event] + local expression = node.attributes[event] if (expression ~= nil) then - registerFunctionEvent(self, expression .. "()", self[event], renderContext) + registerFunctionEvent(self, self[event], expression .. "()", renderContext) end end end @@ -114,16 +110,16 @@ return { VisualObject = function(base, basalt) local object = { - setValuesByXMLData = function(self, data, renderContext) + setValuesByXMLData = function(self, node, renderContext) renderContext.env[self:getName()] = self - for attribute, expression in pairs(data.attributes) do + for attribute, expression in pairs(node.attributes) do local update = function() local value = load("return " .. expression, nil, "t", renderContext.env)() self:setProperty(attribute, value) end basalt.effect(update) end - registerFunctionEvents(self, data, { + registerFunctionEvents(self, node, { "onClick", "onClickUp", "onHover", @@ -148,9 +144,9 @@ return { ChangeableObject = function(base, basalt) local object = { - setValuesByXMLData = function(self, data, renderContext) - base.setValuesByXMLData(self, data, renderContext) - registerFunctionEvent(self, data, { + setValuesByXMLData = function(self, node, renderContext) + base.setValuesByXMLData(self, node, renderContext) + registerFunctionEvent(self, node, { "onChange" }, renderContext) return self @@ -162,9 +158,9 @@ return { Container = function(base, basalt) local lastXMLReferences = {} - local function xmlDefaultValues(data, obj, renderContext) + local function xmlDefaultValues(node, obj, renderContext) if (obj~=nil) then - obj:setValuesByXMLData(data, renderContext) + obj:setValuesByXMLData(node, renderContext) end end @@ -198,13 +194,13 @@ return { end local object = { - setValuesByXMLData = function(self, data, renderContext) + setValuesByXMLData = function(self, node, renderContext) lastXMLReferences = {} - base.setValuesByXMLData(self, data, renderContext) + base.setValuesByXMLData(self, node, renderContext) local _OBJECTS = basalt.getObjects() - for _, childNode in pairs(data.children) do + for _, childNode in pairs(node.children) do local tagName = childNode.name if (tagName ~= "animation") then local layout = renderContext.env[tagName] @@ -218,7 +214,7 @@ return { end end - addXMLObjectType(data["animation"], self.addAnimation, self, renderContext) + addXMLObjectType(node["animation"], self.addAnimation, self, renderContext) return self end, @@ -228,11 +224,11 @@ return { renderContext.env = _ENV renderContext.env.props = props local f = fs.open(path, "r") - local data = XMLParser.parseText(f.readAll()) + local nodeTree = XMLParser.parseText(f.readAll()) f.close() lastXMLReferences = {} - maybeExecuteScript(data, renderContext) - self:setValuesByXMLData(data, renderContext) + maybeExecuteScript(nodeTree, renderContext) + self:setValuesByXMLData(nodeTree, renderContext) end return self end, @@ -246,17 +242,17 @@ return { Textfield = function(base, basalt) local object = { - setValuesByXMLData = function(self, data, renderContext) - base.setValuesByXMLData(self, data, renderContext) - if(data["lines"]~=nil)then - local l = data["lines"]["line"] + setValuesByXMLData = function(self, node, renderContext) + base.setValuesByXMLData(self, node, renderContext) + if(node["lines"]~=nil)then + local l = node["lines"]["line"] if(l.attributes~=nil)then l = {l} end for _,v in pairs(l)do self:addLine(v.value) end end - if(data["keywords"]~=nil)then - for k,v in pairs(data["keywords"])do + if(node["keywords"]~=nil)then + for k,v in pairs(node["keywords"])do if(colors[k]~=nil)then local entry = v if(entry.attributes~=nil)then entry = {entry} end @@ -272,10 +268,10 @@ return { end end end - if(data["rules"]~=nil)then - if(data["rules"]["rule"]~=nil)then - local tab = data["rules"]["rule"] - if(data["rules"]["rule"].attributes~=nil)then tab = {data["rules"]["rule"]} end + if(node["rules"]~=nil)then + if(node["rules"]["rule"]~=nil)then + local tab = node["rules"]["rule"] + if(node["rules"]["rule"].attributes~=nil)then tab = {node["rules"]["rule"]} end for k,v in pairs(tab)do if(XMLParser.xmlValue("pattern", v)~=nil)then @@ -292,8 +288,8 @@ return { Thread = function(base, basalt) local object = { - setValuesByXMLData = function(self, data, renderContext) - local script = XMLParser.xmlValue("start", data)~=nil + setValuesByXMLData = function(self, node, renderContext) + local script = XMLParser.xmlValue("start", node)~=nil if(script~=nil)then local f = load(script, nil, "t", renderContext.env) self:start(f) @@ -306,9 +302,9 @@ return { Timer = function(base, basalt) local object = { - setValuesByXMLData = function(self, data, renderContext) - base.setValuesByXMLData(self, data, renderContext) - registerFunctionEvents(self, data, { + setValuesByXMLData = function(self, node, renderContext) + base.setValuesByXMLData(self, node, renderContext) + registerFunctionEvents(self, node, { "onCall" }, renderContext) return self @@ -319,10 +315,10 @@ return { List = function(base, basalt) local object = { - setValuesByXMLData = function(self, data, renderContext) - base.setValuesByXMLData(self, data, renderContext) - if(data["item"]~=nil)then - local tab = data["item"] + setValuesByXMLData = function(self, node, renderContext) + base.setValuesByXMLData(self, node, renderContext) + if(node["item"]~=nil)then + local tab = node["item"] if(tab.attributes~=nil)then tab = {tab} end for _,v in pairs(tab)do if(self:getType()~="Radio")then @@ -338,8 +334,8 @@ return { Dropdown = function(base, basalt) local object = { - setValuesByXMLData = function(self, data, renderContext) - base.setValuesByXMLData(self, data, renderContext) + setValuesByXMLData = function(self, node, renderContext) + base.setValuesByXMLData(self, node, renderContext) return self end, } @@ -348,10 +344,10 @@ return { Radio = function(base, basalt) local object = { - setValuesByXMLData = function(self, data, renderContext) - base.setValuesByXMLData(self, data, renderContext) - if(data["item"]~=nil)then - local tab = data["item"] + setValuesByXMLData = function(self, node, renderContext) + base.setValuesByXMLData(self, node, renderContext) + if(node["item"]~=nil)then + local tab = node["item"] if(tab.attributes~=nil)then tab = {tab} end for _,v in pairs(tab)do self:addItem(XMLParser.xmlValue("text", v), XMLParser.xmlValue("x", v), XMLParser.xmlValue("y", v), colors[XMLParser.xmlValue("bg", v)], colors[XMLParser.xmlValue("fg", v)]) @@ -365,10 +361,10 @@ return { Graph = function(base, basalt) local object = { - setValuesByXMLData = function(self, data, renderContext) - base.setValuesByXMLData(self, data, renderContext) - if(data["item"]~=nil)then - local tab = data["item"] + setValuesByXMLData = function(self, node, renderContext) + base.setValuesByXMLData(self, node, renderContext) + if(node["item"]~=nil)then + local tab = node["item"] if(tab.attributes~=nil)then tab = {tab} end for _,_ in pairs(tab)do self:addDataPoint(XMLParser.xmlValue("value")) @@ -382,11 +378,11 @@ return { Treeview = function(base, basalt) local object = { - setValuesByXMLData = function(self, data, renderContext) - base.setValuesByXMLData(self, data, renderContext) - local function addNode(node, data) - if(data["node"]~=nil)then - local tab = data["node"] + setValuesByXMLData = function(self, node, renderContext) + base.setValuesByXMLData(self, node, renderContext) + local function addNode(node, node) + if(node["node"]~=nil)then + local tab = node["node"] if(tab.attributes~=nil)then tab = {tab} end for _,v in pairs(tab)do local n = node:addNode(XMLParser.xmlValue("text", v), colors[XMLParser.xmlValue("bg", v)], colors[XMLParser.xmlValue("fg", v)]) @@ -394,8 +390,8 @@ return { end end end - if(data["node"]~=nil)then - local tab = data["node"] + if(node["node"]~=nil)then + local tab = node["node"] if(tab.attributes~=nil)then tab = {tab} end for _,v in pairs(tab)do local n = self:addNode(XMLParser.xmlValue("text", v), colors[XMLParser.xmlValue("bg", v)], colors[XMLParser.xmlValue("fg", v)]) diff --git a/Basalt/plugins/shadow.lua b/Basalt/plugins/shadow.lua index 483a14b..9965893 100644 --- a/Basalt/plugins/shadow.lua +++ b/Basalt/plugins/shadow.lua @@ -30,9 +30,9 @@ return { end) end, - setValuesByXMLData = function(self, data, scripts) - base.setValuesByXMLData(self, data, scripts) - if(XMLParser.xmlValue("shadow", data)~=nil)then self:setShadow(XMLParser.xmlValue("shadow", data)) end + setValuesByXMLData = function(self, node, scripts) + base.setValuesByXMLData(self, node, scripts) + if(XMLParser.xmlValue("shadow", node)~=nil)then self:setShadow(XMLParser.xmlValue("shadow", node)) end return self end } diff --git a/Basalt/plugins/textures.lua b/Basalt/plugins/textures.lua index 76d8678..0a1f51a 100644 --- a/Basalt/plugins/textures.lua +++ b/Basalt/plugins/textures.lua @@ -109,11 +109,11 @@ return { self:setDrawState("texture-base", false) end, - setValuesByXMLData = function(self, data, scripts) - base.setValuesByXMLData(self, data, scripts) - if(XMLParser.xmlValue("texture", data)~=nil)then self:addTexture(XMLParser.xmlValue("texture", data), XMLParser.xmlValue("animate", data)) end - if(XMLParser.xmlValue("textureMode", data)~=nil)then self:setTextureMode(XMLParser.xmlValue("textureMode", data)) end - if(XMLParser.xmlValue("infinitePlay", data)~=nil)then self:setInfinitePlay(XMLParser.xmlValue("infinitePlay", data)) end + setValuesByXMLData = function(self, node, scripts) + base.setValuesByXMLData(self, node, scripts) + if(XMLParser.xmlValue("texture", node)~=nil)then self:addTexture(XMLParser.xmlValue("texture", node), XMLParser.xmlValue("animate", node)) end + if(XMLParser.xmlValue("textureMode", node)~=nil)then self:setTextureMode(XMLParser.xmlValue("textureMode", node)) end + if(XMLParser.xmlValue("infinitePlay", node)~=nil)then self:setInfinitePlay(XMLParser.xmlValue("infinitePlay", node)) end return self end } -- 2.49.1 From 3ded892887d1b648e3f8a72ecd72beb2130c61c8 Mon Sep 17 00:00:00 2001 From: Sabine Lim Date: Tue, 16 May 2023 21:50:00 +1000 Subject: [PATCH 08/10] Rename name to tag --- Basalt/libraries/xmlParser.lua | 38 +++++++++++++++++----------------- Basalt/plugins/reactive.lua | 4 ++-- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/Basalt/libraries/xmlParser.lua b/Basalt/libraries/xmlParser.lua index e8dbe10..37fc3ac 100644 --- a/Basalt/libraries/xmlParser.lua +++ b/Basalt/libraries/xmlParser.lua @@ -1,27 +1,27 @@ local XMLNode = { - new = function(name) + new = function(tag) return { - name = name, + tag = tag, value = nil, children = {}, attributes = {}, addChild = function(self, child) - if self[child.name] ~= nil then - if type(self[child.name].name) == "function" then + if self[child.tag] ~= nil then + if type(self[child.tag].tag) == "function" then local tempTable = {} - table.insert(tempTable, self[child.name]) - self[child.name] = tempTable + table.insert(tempTable, self[child.tag]) + self[child.tag] = tempTable end - table.insert(self[child.name], child) + table.insert(self[child.tag], child) else - self[child.name] = child + self[child.tag] = child end table.insert(self.children, child) end, - addAttribute = function(self, name, value) - self.attributes[name] = value + addAttribute = function(self, tag, value) + self.attributes[tag] = value end } end @@ -39,17 +39,17 @@ local parseAttributes = function(node, s) end local XMLParser = { - xmlValue = function(name, tab) + xmlValue = function(tag, tab) local var if(type(tab)~="table")then return end - if(tab[name]~=nil)then - if(type(tab[name])=="table")then - if(tab[name].value~=nil)then - var = tab[name].value + if(tab[tag]~=nil)then + if(type(tab[tag])=="table")then + if(tab[tag].value~=nil)then + var = tab[tag].value end end end - if(var==nil)then var = tab["@"..name] end + if(var==nil)then var = tab["@"..tag] end if(var=="true")then var = true @@ -91,8 +91,8 @@ local XMLParser = { if #stack < 1 then error("XMLParser: nothing to close with " .. label) end - if toclose.name ~= label then - error("XMLParser: trying to close " .. toclose.name .. " with " .. label) + if toclose.tag ~= label then + error("XMLParser: trying to close " .. toclose.tag .. " with " .. label) end top:addChild(toclose) end @@ -100,7 +100,7 @@ local XMLParser = { end local text = string.sub(xmlText, i); if #stack > 1 then - error("XMLParser: unclosed " .. stack[#stack].name) + error("XMLParser: unclosed " .. stack[#stack].tag) end return top end diff --git a/Basalt/plugins/reactive.lua b/Basalt/plugins/reactive.lua index c093233..f3ded79 100644 --- a/Basalt/plugins/reactive.lua +++ b/Basalt/plugins/reactive.lua @@ -4,7 +4,7 @@ local uuid = utils.uuid local function maybeExecuteScript(nodeTree, renderContext) for _, node in ipairs(nodeTree.children) do - if (node.name == "script") then + if (node.tag == "script") then return load(node.value, nil, "t", renderContext.env)() end end @@ -201,7 +201,7 @@ return { local _OBJECTS = basalt.getObjects() for _, childNode in pairs(node.children) do - local tagName = childNode.name + local tagName = childNode.tag if (tagName ~= "animation") then local layout = renderContext.env[tagName] local objectKey = tagName:gsub("^%l", string.upper) -- 2.49.1 From f2113417b072c83e36d3bf74b9d544f32161b938 Mon Sep 17 00:00:00 2001 From: Sabine Lim Date: Tue, 16 May 2023 21:53:34 +1000 Subject: [PATCH 09/10] Reorder --- Basalt/libraries/xmlParser.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Basalt/libraries/xmlParser.lua b/Basalt/libraries/xmlParser.lua index 37fc3ac..c1b5d1c 100644 --- a/Basalt/libraries/xmlParser.lua +++ b/Basalt/libraries/xmlParser.lua @@ -3,8 +3,8 @@ local XMLNode = { return { tag = tag, value = nil, - children = {}, attributes = {}, + children = {}, addChild = function(self, child) if self[child.tag] ~= nil then -- 2.49.1 From b5051e4e93d59b537034cc51e47ce79fb4356eb2 Mon Sep 17 00:00:00 2001 From: Sabine Lim Date: Tue, 16 May 2023 22:13:14 +1000 Subject: [PATCH 10/10] Remove all special uses of xmlValue --- Basalt/libraries/xmlParser.lua | 32 ----- Basalt/plugins/advancedBackground.lua | 10 +- Basalt/plugins/animations.lua | 19 +-- Basalt/plugins/bigfonts.lua | 8 +- Basalt/plugins/border.lua | 17 --- Basalt/plugins/reactive.lua | 184 ++------------------------ Basalt/plugins/shadow.lua | 6 - Basalt/plugins/textures.lua | 8 -- 8 files changed, 12 insertions(+), 272 deletions(-) diff --git a/Basalt/libraries/xmlParser.lua b/Basalt/libraries/xmlParser.lua index c1b5d1c..dde7575 100644 --- a/Basalt/libraries/xmlParser.lua +++ b/Basalt/libraries/xmlParser.lua @@ -7,16 +7,6 @@ local XMLNode = { children = {}, addChild = function(self, child) - if self[child.tag] ~= nil then - if type(self[child.tag].tag) == "function" then - local tempTable = {} - table.insert(tempTable, self[child.tag]) - self[child.tag] = tempTable - end - table.insert(self[child.tag], child) - else - self[child.tag] = child - end table.insert(self.children, child) end, @@ -39,28 +29,6 @@ local parseAttributes = function(node, s) end local XMLParser = { - xmlValue = function(tag, tab) - local var - if(type(tab)~="table")then return end - if(tab[tag]~=nil)then - if(type(tab[tag])=="table")then - if(tab[tag].value~=nil)then - var = tab[tag].value - end - end - end - if(var==nil)then var = tab["@"..tag] end - - if(var=="true")then - var = true - elseif(var=="false")then - var = false - elseif(tonumber(var)~=nil)then - var = tonumber(var) - end - return var - end, - parseText = function(xmlText) local stack = {} local top = XMLNode.new() diff --git a/Basalt/plugins/advancedBackground.lua b/Basalt/plugins/advancedBackground.lua index c848e20..4c38f5a 100644 --- a/Basalt/plugins/advancedBackground.lua +++ b/Basalt/plugins/advancedBackground.lua @@ -28,12 +28,6 @@ return { return bgSymbolColor end, - setValuesByXMLData = function(self, node, scripts) - base.setValuesByXMLData(self, node, scripts) - if(XMLParser.xmlValue("background-symbol", node)~=nil)then self:setBackgroundSymbol(XMLParser.xmlValue("background-symbol", node), XMLParser.xmlValue("background-symbol-color", node)) end - return self - end, - draw = function(self) base.draw(self) self:addDraw("advanced-bg", function() @@ -44,8 +38,8 @@ return { self:addForegroundBox(1, 1, w, h, bgSymbolColor) end end - end, 2) - end, + end, 2) + end } return object diff --git a/Basalt/plugins/animations.lua b/Basalt/plugins/animations.lua index 7cb27cd..99fe8f0 100644 --- a/Basalt/plugins/animations.lua +++ b/Basalt/plugins/animations.lua @@ -336,24 +336,7 @@ return { end end end - end, - - setValuesByXMLData = function(self, node, scripts) - base.setValuesByXMLData(self, node, scripts) - local animX, animY, animateDuration, animeteTimeOffset, animateMode = XMLParser.xmlValue("animateX", node), XMLParser.xmlValue("animateY", node), XMLParser.xmlValue("animateDuration", node), XMLParser.xmlValue("animateTimeOffset", node), XMLParser.xmlValue("animateMode", node) - local animW, animH, animateDuration, animeteTimeOffset, animateMode = XMLParser.xmlValue("animateW", node), XMLParser.xmlValue("animateH", node), XMLParser.xmlValue("animateDuration", node), XMLParser.xmlValue("animateTimeOffset", node), XMLParser.xmlValue("animateMode", node) - local animXOffset, animYOffset, animateDuration, animeteTimeOffset, animateMode = XMLParser.xmlValue("animateXOffset", node), XMLParser.xmlValue("animateYOffset", node), XMLParser.xmlValue("animateDuration", node), XMLParser.xmlValue("animateTimeOffset", node), XMLParser.xmlValue("animateMode", node) - if(animX~=nil and animY~=nil)then - self:animatePosition(animX, animY, animateDuration, animeteTimeOffset, animateMode) - end - if(animW~=nil and animH~=nil)then - self:animateSize(animW, animH, animateDuration, animeteTimeOffset, animateMode) - end - if(animXOffset~=nil and animYOffset~=nil)then - self:animateOffset(animXOffset, animYOffset, animateDuration, animeteTimeOffset, animateMode) - end - return self - end, + end } return object diff --git a/Basalt/plugins/bigfonts.lua b/Basalt/plugins/bigfonts.lua index a9a9a68..2dd01bb 100644 --- a/Basalt/plugins/bigfonts.lua +++ b/Basalt/plugins/bigfonts.lua @@ -195,12 +195,6 @@ return { end end, - setValuesByXMLData = function(self, node, scripts) - base.setValuesByXMLData(self, node, scripts) - if(XMLParser.xmlValue("fontSize", node)~=nil)then self:setFontSize(XMLParser.xmlValue("fontSize", node)) end - return self - end, - draw = function(self) base.draw(self) self:addDraw("bigfonts", function() @@ -219,7 +213,7 @@ return { end end end) - end, + end } return object end diff --git a/Basalt/plugins/border.lua b/Basalt/plugins/border.lua index 7315fae..517cd86 100644 --- a/Basalt/plugins/border.lua +++ b/Basalt/plugins/border.lua @@ -79,23 +79,6 @@ return { end end end) - end, - - setValuesByXMLData = function(self, node, scripts) - base.setValuesByXMLData(self, node) - local borders = {} - if(XMLParser.xmlValue("border", node)~=nil)then - borders["top"] = colors[XMLParser.xmlValue("border", node)] - borders["bottom"] = colors[XMLParser.xmlValue("border", node)] - borders["left"] = colors[XMLParser.xmlValue("border", node)] - borders["right"] = colors[XMLParser.xmlValue("border", node)] - end - if(XMLParser.xmlValue("borderTop", node)~=nil)then borders["top"] = colors[XMLParser.xmlValue("borderTop", node)] end - if(XMLParser.xmlValue("borderBottom", node)~=nil)then borders["bottom"] = colors[XMLParser.xmlValue("borderBottom", node)] end - if(XMLParser.xmlValue("borderLeft", node)~=nil)then borders["left"] = colors[XMLParser.xmlValue("borderLeft", node)] end - if(XMLParser.xmlValue("borderRight", node)~=nil)then borders["right"] = colors[XMLParser.xmlValue("borderRight", node)] end - self:setBorder(borders["top"], borders["bottom"], borders["left"], borders["right"]) - return self end } diff --git a/Basalt/plugins/reactive.lua b/Basalt/plugins/reactive.lua index f3ded79..b9d1485 100644 --- a/Basalt/plugins/reactive.lua +++ b/Basalt/plugins/reactive.lua @@ -200,22 +200,21 @@ return { local _OBJECTS = basalt.getObjects() - for _, childNode in pairs(node.children) do - local tagName = childNode.tag - if (tagName ~= "animation") then + for _, child in pairs(node.children) do + local tagName = child.tag + if (tagName == "animation") then + addXMLObjectType(child, self.addAnimation, self, renderContext) + else local layout = renderContext.env[tagName] local objectKey = tagName:gsub("^%l", string.upper) if (layout ~= nil) then - insertChildLayout(self, layout, childNode, renderContext) + insertChildLayout(self, layout, child, renderContext) elseif (_OBJECTS[objectKey] ~= nil) then local addFn = self["add" .. objectKey] - addXMLObjectType(childNode, addFn, self, renderContext) + addXMLObjectType(child, addFn, self, renderContext) end end end - - addXMLObjectType(node["animation"], self.addAnimation, self, renderContext) - return self end, loadLayout = function(self, path, props) @@ -238,172 +237,5 @@ return { end, } return object - end, - - Textfield = function(base, basalt) - local object = { - setValuesByXMLData = function(self, node, renderContext) - base.setValuesByXMLData(self, node, renderContext) - if(node["lines"]~=nil)then - local l = node["lines"]["line"] - if(l.attributes~=nil)then l = {l} end - for _,v in pairs(l)do - self:addLine(v.value) - end - end - if(node["keywords"]~=nil)then - for k,v in pairs(node["keywords"])do - if(colors[k]~=nil)then - local entry = v - if(entry.attributes~=nil)then entry = {entry} end - local tab = {} - for a,b in pairs(entry)do - local keywordList = b["keyword"] - if(b["keyword"].attributes~=nil)then keywordList = {b["keyword"]} end - for c,d in pairs(keywordList)do - table.insert(tab, d.value) - end - end - self:addKeywords(colors[k], tab) - end - end - end - if(node["rules"]~=nil)then - if(node["rules"]["rule"]~=nil)then - local tab = node["rules"]["rule"] - if(node["rules"]["rule"].attributes~=nil)then tab = {node["rules"]["rule"]} end - for k,v in pairs(tab)do - - if(XMLParser.xmlValue("pattern", v)~=nil)then - self:addRule(XMLParser.xmlValue("pattern", v), colors[XMLParser.xmlValue("fg", v)], colors[XMLParser.xmlValue("bg", v)]) - end - end - end - end - return self - end, - } - return object - end, - - Thread = function(base, basalt) - local object = { - setValuesByXMLData = function(self, node, renderContext) - local script = XMLParser.xmlValue("start", node)~=nil - if(script~=nil)then - local f = load(script, nil, "t", renderContext.env) - self:start(f) - end - return self - end, - } - return object - end, - - Timer = function(base, basalt) - local object = { - setValuesByXMLData = function(self, node, renderContext) - base.setValuesByXMLData(self, node, renderContext) - registerFunctionEvents(self, node, { - "onCall" - }, renderContext) - return self - end, - } - return object - end, - - List = function(base, basalt) - local object = { - setValuesByXMLData = function(self, node, renderContext) - base.setValuesByXMLData(self, node, renderContext) - if(node["item"]~=nil)then - local tab = node["item"] - if(tab.attributes~=nil)then tab = {tab} end - for _,v in pairs(tab)do - if(self:getType()~="Radio")then - self:addItem(XMLParser.xmlValue("text", v), colors[XMLParser.xmlValue("bg", v)], colors[XMLParser.xmlValue("fg", v)]) - end - end - end - return self - end, - } - return object - end, - - Dropdown = function(base, basalt) - local object = { - setValuesByXMLData = function(self, node, renderContext) - base.setValuesByXMLData(self, node, renderContext) - return self - end, - } - return object - end, - - Radio = function(base, basalt) - local object = { - setValuesByXMLData = function(self, node, renderContext) - base.setValuesByXMLData(self, node, renderContext) - if(node["item"]~=nil)then - local tab = node["item"] - if(tab.attributes~=nil)then tab = {tab} end - for _,v in pairs(tab)do - self:addItem(XMLParser.xmlValue("text", v), XMLParser.xmlValue("x", v), XMLParser.xmlValue("y", v), colors[XMLParser.xmlValue("bg", v)], colors[XMLParser.xmlValue("fg", v)]) - end - end - return self - end, - } - return object - end, - - Graph = function(base, basalt) - local object = { - setValuesByXMLData = function(self, node, renderContext) - base.setValuesByXMLData(self, node, renderContext) - if(node["item"]~=nil)then - local tab = node["item"] - if(tab.attributes~=nil)then tab = {tab} end - for _,_ in pairs(tab)do - self:addDataPoint(XMLParser.xmlValue("value")) - end - end - return self - end, - } - return object - end, - - Treeview = function(base, basalt) - local object = { - setValuesByXMLData = function(self, node, renderContext) - base.setValuesByXMLData(self, node, renderContext) - local function addNode(node, node) - if(node["node"]~=nil)then - local tab = node["node"] - if(tab.attributes~=nil)then tab = {tab} end - for _,v in pairs(tab)do - local n = node:addNode(XMLParser.xmlValue("text", v), colors[XMLParser.xmlValue("bg", v)], colors[XMLParser.xmlValue("fg", v)]) - addNode(n, v) - end - end - end - if(node["node"]~=nil)then - local tab = node["node"] - if(tab.attributes~=nil)then tab = {tab} end - for _,v in pairs(tab)do - local n = self:addNode(XMLParser.xmlValue("text", v), colors[XMLParser.xmlValue("bg", v)], colors[XMLParser.xmlValue("fg", v)]) - addNode(n, v) - end - end - - - return self - end, - } - return object - end, - + end } diff --git a/Basalt/plugins/shadow.lua b/Basalt/plugins/shadow.lua index 9965893..d807f2d 100644 --- a/Basalt/plugins/shadow.lua +++ b/Basalt/plugins/shadow.lua @@ -28,12 +28,6 @@ return { end end end) - end, - - setValuesByXMLData = function(self, node, scripts) - base.setValuesByXMLData(self, node, scripts) - if(XMLParser.xmlValue("shadow", node)~=nil)then self:setShadow(XMLParser.xmlValue("shadow", node)) end - return self end } diff --git a/Basalt/plugins/textures.lua b/Basalt/plugins/textures.lua index 0a1f51a..2e7d953 100644 --- a/Basalt/plugins/textures.lua +++ b/Basalt/plugins/textures.lua @@ -107,14 +107,6 @@ return { end end, 1) self:setDrawState("texture-base", false) - end, - - setValuesByXMLData = function(self, node, scripts) - base.setValuesByXMLData(self, node, scripts) - if(XMLParser.xmlValue("texture", node)~=nil)then self:addTexture(XMLParser.xmlValue("texture", node), XMLParser.xmlValue("animate", node)) end - if(XMLParser.xmlValue("textureMode", node)~=nil)then self:setTextureMode(XMLParser.xmlValue("textureMode", node)) end - if(XMLParser.xmlValue("infinitePlay", node)~=nil)then self:setInfinitePlay(XMLParser.xmlValue("infinitePlay", node)) end - return self end } -- 2.49.1