aboutsummaryrefslogtreecommitdiff
path: root/advtrains_interlocking/textures
ModeNameSize
-rw-r--r--at_il_route_end.png451logplain
-rw-r--r--at_il_route_lock.png534logplain
-rw-r--r--at_il_route_lock_edit.png533logplain
-rw-r--r--at_il_route_set.png398logplain
-rw-r--r--at_il_route_start.png380logplain
-rw-r--r--at_il_routep_advance.png304logplain
-rw-r--r--at_il_routep_end_here.png243logplain
-rw-r--r--at_il_routep_end_over.png281logplain
-rw-r--r--at_il_routep_end_over_last.png277logplain
-rw-r--r--at_il_signal_asp_danger.png247logplain
-rw-r--r--at_il_signal_asp_free.png245logplain
-rw-r--r--at_il_signal_asp_slow.png245logplain
-rw-r--r--at_il_signal_ip.png285logplain
-rw-r--r--at_il_signal_off.png236logplain
-rw-r--r--at_il_tcb_marker.png308logplain
-rw-r--r--at_il_tcb_node.png279logplain
-rw-r--r--at_il_tool.png337logplain
-rw-r--r--at_il_turnout_cr_l.png314logplain
-rw-r--r--at_il_turnout_cr_r.png298logplain
-rw-r--r--at_il_turnout_free.png367logplain
-rw-r--r--at_il_turnout_st.png229logplain
span class="hl opt">) local ks, vs, writeit, istable for key, value in pairs(t) do ks = value_to_string(key, false) writeit = true istable = type(value)=="table" if istable then vs = "T" if config and config.skip_empty_tables then writeit = not table_is_empty(value) end else vs = value_to_string(value, true) end if writeit then file:write(ks..":"..vs.."\n") if istable then write_table(value, file, config) file:write("E\n") end end end end function value_to_string(t) if type(t)=="table" then file:close() error("Can not serialize a table in the key position!") elseif type(t)=="boolean" then if t then return "B1" else return "B0" end elseif type(t)=="number" then return "N"..t elseif type(t)=="string" then return "S"..escape_chars(t) else --error("Can not serialize '"..type(t).."' type!") return "S<function>" end return str end function escape_chars(str) local rstr = string.gsub(str, "&", "&&") rstr = string.gsub(rstr, ":", "&:") rstr = string.gsub(rstr, "\r", "&r") rstr = string.gsub(rstr, "\n", "&n") return rstr end ------ local read_table, string_to_value, unescape_chars function read_table(t, file) local line, ks, vs, kv, vv, vt while true do line = file:read("*l") if not line then file:close() error("Unexpected EOF or read error!") end -- possibly windows fix: strip trailing \r's from line line = string.gsub(line, "\r$", "") if line=="E" then -- done with this table return end ks, vs = string.match(line, "^(.*[^&]):(.+)$") if not ks or not vs then file:close() error("Unable to parse line: '"..line.."'!") end kv = string_to_value(ks) vv, vt = string_to_value(vs, true) if vt then read_table(vv, file) end -- put read value in table t[kv] = vv end end -- returns: value, is_table function string_to_value(str, table_allow) local first = string.sub(str, 1,1) local rest = string.sub(str, 2) if first=="T" then if table_allow then return {}, true else file:close() error("Table not allowed in key component!") end elseif first=="N" then local num = tonumber(rest) if num then return num else file:close() error("Unable to parse number: '"..rest.."'!") end elseif first=="B" then if rest=="0" then return false elseif rest=="1" then return true else file:close() error("Unable to parse boolean: '"..rest.."'!") end elseif first=="S" then return unescape_chars(rest) else file:close() error("Unknown literal type '"..first.."' for literal '"..str.."'!") end end function unescape_chars(str) --TODO local rstr = string.gsub(str, "&:", ":") rstr = string.gsub(rstr, "&n", "\n") rstr = string.gsub(rstr, "&r", "\r") rstr = string.gsub(rstr, "&&", "&") return rstr end ------ --[[ config = { skip_empty_tables = false -- if true, does not store empty tables -- On next read, keys that mapped to empty tables resolve to nil } ]] -- Writes the passed table into the passed file descriptor, and closes the file local function write_to_fd(root_table, file, config) file:write("LUA_SER v=2\n") write_table(root_table, file, config) file:write("E\nEND_SER\n") file:close() end -- Reads the file contents from the passed file descriptor and returns the table on success -- Throws errors when something is wrong. Closes the file. -- config: see above local function read_from_fd(file) local first_line = file:read("*line") -- possibly windows fix: strip trailing \r's from line first_line = string.gsub(first_line, "\r$", "") if not string.match(first_line, "LUA_SER v=[12]") then file:close()