otclient-redemption/modules/modulelib/ext/parse.lua
Renato Machado ebc37798ef
improve: html syntax
- cleanup and organization
- add support tag link to import external css ex: <link href="module/any.css" />
- fix display block alignment
- add textarea css
2024-07-26 14:01:35 -03:00

60 lines
1.5 KiB
Lua

local parseAttrPropList = function(str)
local obj = {}
for _, style_v in pairs(str:split(';')) do
local attr = style_v:trim():split(':')
local name = attr[1]
if name then
local value = attr[2]:trim()
value = tonumber(value) or value
obj[name:trim()] = value
end
end
return obj
end
local parseStyle = function(widget, el)
local styleStr = el.attributes.style:trim()
if styleStr == '' then
return
end
local style = parseAttrPropList(styleStr)
widget:mergeStyle(style)
el.style = style
end
local parseLayout = function(widget, el)
local layout = parseAttrPropList(el.attributes.layout)
widget:mergeStyle({ layout = layout })
end
local function parseExpression(content, controller)
local lastPos = nil
while true do
local pos = content:find('{{', lastPos)
if not pos then
break
end
lastPos = content:find('}}', lastPos)
local script = content:sub(pos + 2, lastPos - 1)
local res = nil
if content:sub(pos - 2, pos - 1) == 'tr' then
pos = pos - 2
res = tr(script)
else
local f = loadstring('return function(self) return ' .. script .. ' end')
res = f()(controller)
end
if res then
content = table.concat { content:sub(1, pos - 1), res, content:sub(lastPos + 2) }
end
end
return content
end
return parseStyle, parseLayout, parseExpression