Re-built onto the new API formerly part of my street_signs mod
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.
2019-09-11 18:03:04 +02:00
|
|
|
-- encoding borrowed from signs_lib fork at https://github.com/lord-server/lord
|
2018-03-24 20:35:42 +01:00
|
|
|
|
|
|
|
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
|