forked from mtcontrib/signs_lib
4ff54c9a4d
Any sign can now use a 15 or 31 px font, at any reasonable visual scale, line width, number of lines, etc. Split most signs off into a separate mod, basic_signs, which depends on this one. Only the default minetest_game wood and steel signs remain in signs_lib, completely redefined. The wall/yard/ceiling function for wooden signs has been rewitten and moved to basic_signs, too. signs_lib can now put almost any wall sign onto almost any kind of posts/fence, as with most signs in my street_signs mod. Mods can add their fences/posts to its "allowed" list, if needed (signs_lib tries to detect most kinds of suitable fences, poles, posts, etc). All signs affected by these changes are similar to what they've always been, for continuity. The main difference is that they all use a 15px font now, with a slightly larger scale, and the positions of some have changed slightly. Dropped the old "@KEYWORD" feature (but it could be re-added if it turns out to be needed), and most of the old cruft like "|" for line breaks. Created new wood and steel sign textures, derived from HDX. See standard_signs.lua for examples of how the new API is used. The "standard" text sizing/position/etc. variables are all at the top of api.lua.
266 lines
5.0 KiB
Lua
266 lines
5.0 KiB
Lua
-- encoding borrowed from signs_lib fork at https://github.com/lord-server/lord
|
|
|
|
local ansi_decode = {
|
|
[128] = "\208\130",
|
|
[129] = "\208\131",
|
|
[130] = "\226\128\154",
|
|
[131] = "\209\147",
|
|
[132] = "\226\128\158",
|
|
[133] = "\226\128\166",
|
|
[134] = "\226\128\160",
|
|
[135] = "\226\128\161",
|
|
[136] = "\226\130\172",
|
|
[137] = "\226\128\176",
|
|
[138] = "\208\137",
|
|
[139] = "\226\128\185",
|
|
[140] = "\208\138",
|
|
[141] = "\208\140",
|
|
[142] = "\208\139",
|
|
[143] = "\208\143",
|
|
[144] = "\209\146",
|
|
[145] = "\226\128\152",
|
|
[146] = "\226\128\153",
|
|
[147] = "\226\128\156",
|
|
[148] = "\226\128\157",
|
|
[149] = "\226\128\162",
|
|
[150] = "\226\128\147",
|
|
[151] = "\226\128\148",
|
|
[152] = "\194\152",
|
|
[153] = "\226\132\162",
|
|
[154] = "\209\153",
|
|
[155] = "\226\128\186",
|
|
[156] = "\209\154",
|
|
[157] = "\209\156",
|
|
[158] = "\209\155",
|
|
[159] = "\209\159",
|
|
[160] = "\194\160",
|
|
[161] = "\209\142",
|
|
[162] = "\209\158",
|
|
[163] = "\208\136",
|
|
[164] = "\194\164",
|
|
[165] = "\210\144",
|
|
[166] = "\194\166",
|
|
[167] = "\194\167",
|
|
[168] = "\208\129",
|
|
[169] = "\194\169",
|
|
[170] = "\208\132",
|
|
[171] = "\194\171",
|
|
[172] = "\194\172",
|
|
[173] = "\194\173",
|
|
[174] = "\194\174",
|
|
[175] = "\208\135",
|
|
[176] = "\194\176",
|
|
[177] = "\194\177",
|
|
[178] = "\208\134",
|
|
[179] = "\209\150",
|
|
[180] = "\210\145",
|
|
[181] = "\194\181",
|
|
[182] = "\194\182",
|
|
[183] = "\194\183",
|
|
[184] = "\209\145",
|
|
[185] = "\226\132\150",
|
|
[186] = "\209\148",
|
|
[187] = "\194\187",
|
|
[188] = "\209\152",
|
|
[189] = "\208\133",
|
|
[190] = "\209\149",
|
|
[191] = "\209\151"
|
|
}
|
|
local utf8_decode = {
|
|
[128] = {
|
|
[147] = "\150",
|
|
[148] = "\151",
|
|
[152] = "\145",
|
|
[153] = "\146",
|
|
[154] = "\130",
|
|
[156] = "\147",
|
|
[157] = "\148",
|
|
[158] = "\132",
|
|
[160] = "\134",
|
|
[161] = "\135",
|
|
[162] = "\149",
|
|
[166] = "\133",
|
|
[176] = "\137",
|
|
[185] = "\139",
|
|
[186] = "\155"
|
|
},
|
|
[130] = {[172] = "\136"},
|
|
[132] = {[150] = "\185", [162] = "\153"},
|
|
[194] = {
|
|
[152] = "\152",
|
|
[160] = "\160",
|
|
[164] = "\164",
|
|
[166] = "\166",
|
|
[167] = "\167",
|
|
[169] = "\169",
|
|
[171] = "\171",
|
|
[172] = "\172",
|
|
[173] = "\173",
|
|
[174] = "\174",
|
|
[176] = "\176",
|
|
[177] = "\177",
|
|
[181] = "\181",
|
|
[182] = "\182",
|
|
[183] = "\183",
|
|
[187] = "\187"
|
|
},
|
|
[208] = {
|
|
[129] = "\168",
|
|
[130] = "\128",
|
|
[131] = "\129",
|
|
[132] = "\170",
|
|
[133] = "\189",
|
|
[134] = "\178",
|
|
[135] = "\175",
|
|
[136] = "\163",
|
|
[137] = "\138",
|
|
[138] = "\140",
|
|
[139] = "\142",
|
|
[140] = "\141",
|
|
[143] = "\143",
|
|
[144] = "\192",
|
|
[145] = "\193",
|
|
[146] = "\194",
|
|
[147] = "\195",
|
|
[148] = "\196",
|
|
[149] = "\197",
|
|
[150] = "\198",
|
|
[151] = "\199",
|
|
[152] = "\200",
|
|
[153] = "\201",
|
|
[154] = "\202",
|
|
[155] = "\203",
|
|
[156] = "\204",
|
|
[157] = "\205",
|
|
[158] = "\206",
|
|
[159] = "\207",
|
|
[160] = "\208",
|
|
[161] = "\209",
|
|
[162] = "\210",
|
|
[163] = "\211",
|
|
[164] = "\212",
|
|
[165] = "\213",
|
|
[166] = "\214",
|
|
[167] = "\215",
|
|
[168] = "\216",
|
|
[169] = "\217",
|
|
[170] = "\218",
|
|
[171] = "\219",
|
|
[172] = "\220",
|
|
[173] = "\221",
|
|
[174] = "\222",
|
|
[175] = "\223",
|
|
[176] = "\224",
|
|
[177] = "\225",
|
|
[178] = "\226",
|
|
[179] = "\227",
|
|
[180] = "\228",
|
|
[181] = "\229",
|
|
[182] = "\230",
|
|
[183] = "\231",
|
|
[184] = "\232",
|
|
[185] = "\233",
|
|
[186] = "\234",
|
|
[187] = "\235",
|
|
[188] = "\236",
|
|
[189] = "\237",
|
|
[190] = "\238",
|
|
[191] = "\239"
|
|
},
|
|
[209] = {
|
|
[128] = "\240",
|
|
[129] = "\241",
|
|
[130] = "\242",
|
|
[131] = "\243",
|
|
[132] = "\244",
|
|
[133] = "\245",
|
|
[134] = "\246",
|
|
[135] = "\247",
|
|
[136] = "\248",
|
|
[137] = "\249",
|
|
[138] = "\250",
|
|
[139] = "\251",
|
|
[140] = "\252",
|
|
[141] = "\253",
|
|
[142] = "\254",
|
|
[143] = "\255",
|
|
[144] = "\161",
|
|
[145] = "\184",
|
|
[146] = "\144",
|
|
[147] = "\131",
|
|
[148] = "\186",
|
|
[149] = "\190",
|
|
[150] = "\179",
|
|
[151] = "\191",
|
|
[152] = "\188",
|
|
[153] = "\154",
|
|
[154] = "\156",
|
|
[155] = "\158",
|
|
[156] = "\157",
|
|
[158] = "\162",
|
|
[159] = "\159"
|
|
},
|
|
[210] = {[144] = "\165", [145] = "\180"}
|
|
}
|
|
|
|
local nmdc = {
|
|
[36] = "$",
|
|
[124] = "|"
|
|
}
|
|
|
|
function AnsiToUtf8(s)
|
|
local r, b = ""
|
|
for i = 1, s and s:len() or 0 do
|
|
b = s:byte(i)
|
|
if b < 128 then
|
|
r = r .. string.char(b)
|
|
else
|
|
if b > 239 then
|
|
r = r .. "\209" .. string.char(b - 112)
|
|
elseif b > 191 then
|
|
r = r .. "\208" .. string.char(b - 48)
|
|
elseif ansi_decode[b] then
|
|
r = r .. ansi_decode[b]
|
|
else
|
|
r = r .. "_"
|
|
end
|
|
end
|
|
end
|
|
return r
|
|
end
|
|
|
|
function Utf8ToAnsi(s)
|
|
local a, j, r, b = 0, 0, ""
|
|
for i = 1, s and s:len() or 0 do
|
|
b = s:byte(i)
|
|
if b < 128 then
|
|
if nmdc[b] then
|
|
r = r .. nmdc[b]
|
|
else
|
|
r = r .. string.char(b)
|
|
end
|
|
elseif a == 2 then
|
|
a, j = a - 1, b
|
|
elseif a == 1 then
|
|
--if j == nil or b == nil then return r end
|
|
--print(j)
|
|
--print(b)
|
|
--local ansi = utf8_decode[j]
|
|
--if ansi == nil then return r end
|
|
--if ansi[b] == nil then return r end
|
|
if utf8_decode[j] then
|
|
if utf8_decode[j][b] then
|
|
a, r = a - 1, r .. utf8_decode[j][b]
|
|
end
|
|
end
|
|
elseif b == 226 then
|
|
a = 2
|
|
elseif b == 194 or b == 208 or b == 209 or b == 210 then
|
|
j, a = b, 1
|
|
else
|
|
r = r .. "_"
|
|
end
|
|
end
|
|
return r
|
|
end
|