Serializer Funktionen ausfaktorisieren, soll man auch einzeln einsetzen koennen

This commit is contained in:
Nero 2022-06-24 20:28:02 +00:00
parent 345bc8951f
commit 2a25c60a4f
3 changed files with 72 additions and 74 deletions

View File

@ -4,3 +4,4 @@ File001 = "On.lua","LUA\On.lua"
File002 = "Prototype.lua","LUA\Prototype.lua"
File003 = "kskit.lua","LUA\kskit.lua"
File004 = "Begriffe.lua","LUA\Begriffe.lua"
File005 = "Serializer.lua","LUA\Serializer.lua"

70
Install_00/Serializer.lua Normal file
View File

@ -0,0 +1,70 @@
-- Tabelle in einen String umwandeln, rekursiv
-- Funktionen als Lua-Werte werden ignoriert
function __tostring(tab)
local t=type(tab)
if t=="table" then
local r=""
-- Tabellen-Keys sammeln und sortieren
local tkeys={}
for k in pairs(tab) do table.insert(tkeys, k) end
table.sort(tkeys, function(a,b) return tostring(a)<tostring(b) end)
-- Durch die Tabelle gehen
for _,k in ipairs(tkeys) do
-- Uns selbst fuer Tabellen-Value aufrufen
local v = __tostring(tab[k])
-- ignore nil values, they unset the key anyways
if v~= nil and v ~= "nil" then
if r~="" then r=r.."," end
-- short format: foo="bar", saves bytes
if type(k)=="string" and k:match("^[%l%u_][%w_]*$") then
r=r..k.."="..v
-- long format: ["foo"]="bar", allows weird keys
else
r=r.."["..__tostring(k).."]="..v
end
end
end
return "{"..r.."}"
elseif t=="number" or t=="boolean" then
return tostring(tab)
elseif t=="string" then
return ("%q"):format(tab)
else
return "nil"
end
end
-- Funktion, welche sich wie print() verhaelt, aber Tabellen als String ausgibt
function nprint(...)
local args={...}
for i=1,#args do
if type(args[i]) == "table" then
args[i]=__tostring(args[i])
end
end
print(table.unpack(args))
end
-- Tabelle in beliebigen Slot speichern
-- Im Slot steht dann eine Lua-Tabelle als String
-- Formatierungszeichen werden URL-encoded, damit EEP mit ihren zurecht kommt
-- Speziell Hochkommas haben mir immer meine Daten abgeschnitten...
function speicherTabelle(Slotnummer, Tabelle)
local s=__tostring(Tabelle):gsub("([%c%%\"])", function(c)
return string.format("%%%02X", string.byte(c))
end)
EEPSaveData(Slotnummer, s)
end
-- Tabelle aus beliebigen Slot laden
-- Sind die Daten nicht lesbar, wird eine leere Tabelle zurueckgegeben
function ladeTabelle(Slotnummer)
local ok, raw = EEPLoadData(Slotnummer)
if not ok then
print("WARNUNG: Daten im Slot ",Slotnummer," unleserlich")
return {}
end
return load("return "..raw:gsub("%%(%x%x)", function(x)
return string.char(tonumber(x, 16))
end))()
end

View File

@ -1,79 +1,6 @@
require("BetterContacts_BH2"){printErrors=true, deprecatedUseGlobal=true}
require("Begriffe")
-- Tabelle in einen String umwandeln, rekursiv
-- Funktionswerte werden ignoriert
function __tostring(self)
local t=type(self)
if t=="table" then
local r=""
-- load and sort table keys
local tkeys={}
for k in pairs(self) do table.insert(tkeys, k) end
table.sort(tkeys, function(a,b) return tostring(a)<tostring(b) end)
-- iterate over our table
for _,k in ipairs(tkeys) do
local v = __tostring(self[k])
-- ignore nil values, they unset the key anyways
if v~= nil and v ~= "nil" then
if r~="" then r=r.."," end
-- short format: foo="bar", saves bytes
if type(k)=="string" and k:match("^[%l%u_][%w_]*$") then
r=r..k.."="..v
-- long format: ["foo"]="bar", allows weird keys
else
r=r.."["..__tostring(k).."]="..v
end
end
end
return "{"..r.."}"
elseif t=="number" or t=="boolean" then
return tostring(self)
elseif t=="string" then
return ("%q"):format(self)
else
return "nil"
end
end
-- Da wir jetzt ohnehin Tabellen in Strings umwandeln koennen, patchen wir
-- print(...) damit diese von dieser Darstellung profitieren kann.
do
local oldprint=print
function print(...)
local args={...}
for i=1,#args do
if type(args[i]) == "table" then
args[i]=__tostring(args[i])
end
end
oldprint(table.unpack(args))
end
end
-- Tabelle in beliebigen Slot speichern
-- Im Slot steht dann eine Lua-Tabelle als String
-- Formatierungszeichen werden URL-encoded, damit EEP mit ihren zurecht kommt
-- Speziell Hochkommas haben mir immer meine Daten abgeschnitten...
function speicherTabelle(Slotnummer, Tabelle)
local s=__tostring(Tabelle):gsub("([%c%%\"])", function(c)
return string.format("%%%02X", string.byte(c))
end)
EEPSaveData(Slotnummer, s)
end
-- Tabelle aus beliebigen Slot laden
-- Sind die Daten nicht lesbar, wird eine leere Tabelle zurueckgegeben
function ladeTabelle(Slotnummer)
local ok, raw = EEPLoadData(Slotnummer)
if not ok then
print("WARNUNG: Daten im Slot ",Slotnummer," unleserlich")
return {}
end
return load("return "..raw:gsub("%%(%x%x)", function(x)
return string.char(tonumber(x, 16))
end))()
end
require("Serializer")
function AnimiereFahrzeugStromabnehmer(Fahrzeug, Richtung)
local Index, _ = Fahrzeug:gsub(";%d*$","")