MineOS/lib/bigLetters.lua
Igor Timofeev 55f8c8b770 )))))
2018-05-19 01:06:04 +03:00

615 lines
10 KiB
Lua
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local unicode = require("unicode")
local buffer = require("doubleBuffering")
local bigLetters = {}
local pixelHeight = 5
local lettersInterval = 2
local unknownSymbol = "*"
local spaceWidth = 2
local letters = {
["0"] = {
{ 1, 1, 1 },
{ 1, 0, 1 },
{ 1, 0, 1 },
{ 1, 0, 1 },
{ 1, 1, 1 },
},
["1"] = {
{ 0, 1, 0 },
{ 1, 1, 0 },
{ 0, 1, 0 },
{ 0, 1, 0 },
{ 1, 1, 1 },
},
["2"] = {
{ 1, 1, 1 },
{ 0, 0, 1 },
{ 1, 1, 1 },
{ 1, 0, 0 },
{ 1, 1, 1 },
},
["3"] = {
{ 1, 1, 1 },
{ 0, 0, 1 },
{ 1, 1, 1 },
{ 0, 0, 1 },
{ 1, 1, 1 },
},
["4"] = {
{ 1, 0, 1 },
{ 1, 0, 1 },
{ 1, 1, 1 },
{ 0, 0, 1 },
{ 0, 0, 1 },
},
["5"] = {
{ 1, 1, 1 },
{ 1, 0, 0 },
{ 1, 1, 1 },
{ 0, 0, 1 },
{ 1, 1, 1 },
},
["6"] = {
{ 1, 1, 1 },
{ 1, 0, 0 },
{ 1, 1, 1 },
{ 1, 0, 1 },
{ 1, 1, 1 },
},
["7"] = {
{ 1, 1, 1 },
{ 0, 0, 1 },
{ 0, 0, 1 },
{ 0, 0, 1 },
{ 0, 0, 1 },
},
["8"] = {
{ 1, 1, 1 },
{ 1, 0, 1 },
{ 1, 1, 1 },
{ 1, 0, 1 },
{ 1, 1, 1 },
},
["9"] = {
{ 1, 1, 1 },
{ 1, 0, 1 },
{ 1, 1, 1 },
{ 0, 0, 1 },
{ 1, 1, 1 },
},
["a"] = {
{ 0, 1, 1, 0 },
{ 1, 0, 0, 1 },
{ 1, 1, 1, 1 },
{ 1, 0, 0, 1 },
{ 1, 0, 0, 1 },
},
["b"] = {
{ 1, 1, 1, 0},
{ 1, 0, 0, 1},
{ 1, 1, 1, 0},
{ 1, 0, 0, 1},
{ 1, 1, 1, 1},
},
["c"] = {
{ 0, 1, 1, 1 },
{ 1, 0, 0, 0 },
{ 1, 0, 0, 0 },
{ 1, 0, 0, 0 },
{ 0, 1, 1, 1 },
},
["d"] = {
{ 1, 1, 1, 1, 0 },
{ 0, 1, 0, 0, 1 },
{ 0, 1, 0, 0, 1 },
{ 0, 1, 0, 0, 1 },
{ 1, 1, 1, 1, 0 },
},
["e"] = {
{ 1, 1, 1, 1 },
{ 1, 0, 0, 0 },
{ 1, 1, 1, 0 },
{ 1, 0, 0, 0 },
{ 1, 1, 1, 1 },
},
["f"] = {
{ 1, 1, 1, 1 },
{ 1, 0, 0, 0 },
{ 1, 1, 1, 0 },
{ 1, 0, 0, 0 },
{ 1, 0, 0, 0 },
},
["g"] = {
{ 0, 1, 1, 1},
{ 1, 0, 0, 0},
{ 1, 0, 1, 1},
{ 1, 0, 0, 1},
{ 0, 1, 1, 1},
},
["h"] = {
{ 1, 0, 0, 1},
{ 1, 0, 0, 1},
{ 1, 1, 1, 1},
{ 1, 0, 0, 1},
{ 1, 0, 0, 1},
},
["i"] = {
{ 1, 1, 1},
{ 0, 1, 0},
{ 0, 1, 0},
{ 0, 1, 0},
{ 1, 1, 1},
},
["j"] = {
{ 0, 0, 1},
{ 0, 0, 1},
{ 0, 0, 1},
{ 1, 0, 1},
{ 0, 1, 0},
},
["k"] = {
{ 1, 0, 0, 1},
{ 1, 0, 1, 0},
{ 1, 1, 0, 0},
{ 1, 0, 1, 0},
{ 1, 0, 0, 1},
},
["l"] = {
{ 1, 0, 0},
{ 1, 0, 0},
{ 1, 0, 0},
{ 1, 0, 0},
{ 1, 1, 1},
},
["m"] = {
{ 1, 0, 0, 0, 1 },
{ 1, 1, 0, 1, 1 },
{ 1, 0, 1, 0, 1 },
{ 1, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 1 },
},
["n"] = {
{ 1, 0, 0, 0, 1 },
{ 1, 1, 0, 0, 1 },
{ 1, 0, 1, 0, 1 },
{ 1, 0, 0, 1, 1 },
{ 1, 0, 0, 0, 1 },
},
["o"] = {
{ 0, 1, 1, 0},
{ 1, 0, 0, 1},
{ 1, 0, 0, 1},
{ 1, 0, 0, 1},
{ 0, 1, 1, 0},
},
["p"] = {
{ 1, 1, 1, 0 },
{ 1, 0, 0, 1 },
{ 1, 1, 1, 0 },
{ 1, 0, 0, 0 },
{ 1, 0, 0, 0 },
},
["q"] = {
{ 0, 1, 1, 0},
{ 1, 0, 0, 1},
{ 1, 0, 0, 1},
{ 1, 0, 1, 1},
{ 0, 1, 1, 0},
},
["r"] = {
{ 1, 1, 1, 0},
{ 1, 0, 0, 1},
{ 1, 1, 1, 0},
{ 1, 0, 0, 1},
{ 1, 0, 0, 1},
},
["s"] = {
{ 0, 1, 1, 1},
{ 1, 0, 0, 0},
{ 0, 1, 1, 0},
{ 0, 0, 0, 1},
{ 1, 1, 1, 0},
},
["t"] = {
{ 1, 1, 1, 1, 1 },
{ 0, 0, 1, 0, 0 },
{ 0, 0, 1, 0, 0 },
{ 0, 0, 1, 0, 0 },
{ 0, 0, 1, 0, 0 },
},
["u"] = {
{ 1, 0, 0, 1},
{ 1, 0, 0, 1},
{ 1, 0, 0, 1},
{ 1, 0, 0, 1},
{ 0, 1, 1, 0},
},
["v"] = {
{ 1, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 1 },
{ 0, 1, 0, 1, 0 },
{ 0, 0, 1, 0, 0 },
},
["w"] = {
{ 1, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 1 },
{ 1, 0, 1, 0, 1 },
{ 1, 0, 1, 0, 1 },
{ 0, 1, 0, 1, 0 },
},
["x"] = {
{ 1, 0, 0, 0, 1 },
{ 0, 1, 0, 1, 0 },
{ 0, 0, 1, 0, 0 },
{ 0, 1, 0, 1, 0 },
{ 1, 0, 0, 0, 1 },
},
["y"] = {
{ 1, 0, 0, 1 },
{ 1, 0, 0, 1 },
{ 0, 1, 1, 1 },
{ 0, 0, 0, 1 },
{ 1, 1, 1, 0 },
},
["z"] = {
{ 1, 1, 1, 1, 1 },
{ 0, 0, 0, 1, 0 },
{ 0, 0, 1, 0, 0 },
{ 0, 1, 0, 0, 0 },
{ 1, 1, 1, 1, 1 },
},
["а"] = {
{ 0, 1, 1, 0 },
{ 1, 0, 0, 1 },
{ 1, 1, 1, 1 },
{ 1, 0, 0, 1 },
{ 1, 0, 0, 1 },
},
["б"] = {
{ 1, 1, 1, 1 },
{ 1, 0, 0, 0 },
{ 1, 1, 1, 0 },
{ 1, 0, 0, 1 },
{ 1, 1, 1, 0 },
},
["в"] = {
{ 1, 1, 1, 0 },
{ 1, 0, 0, 1 },
{ 1, 1, 1, 0 },
{ 1, 0, 0, 1 },
{ 1, 1, 1, 0 },
},
["г"] = {
{ 1, 1, 1 },
{ 1, 0, 0 },
{ 1, 0, 0 },
{ 1, 0, 0 },
{ 1, 0, 0 },
},
["д"] = {
{ 0, 0, 1, 1, 0 },
{ 0, 1, 0, 1, 0 },
{ 0, 1, 0, 1, 0 },
{ 0, 1, 0, 1, 0 },
{ 1, 1, 1, 1, 1 },
},
["е"] = {
{ 1, 1, 1, 1 },
{ 1, 0, 0, 0 },
{ 1, 1, 1, 0 },
{ 1, 0, 0, 0 },
{ 1, 1, 1, 1 },
},
["ё"] = {
{ 1, 0, 1, 0 },
{ 0, 0, 0, 0 },
{ 1, 1, 1, 1 },
{ 1, 0, 0, 0 },
{ 1, 1, 1, 0 },
{ 1, 0, 0, 0 },
{ 1, 1, 1, 1 },
},
["ж"] = {
{ 1, 0, 1, 0, 1 },
{ 0, 1, 1, 1, 0 },
{ 0, 0, 1, 0, 0 },
{ 0, 1, 1, 1, 0 },
{ 1, 0, 1, 0, 1 },
},
["з"] = {
{ 0, 1, 1, 1, 0 },
{ 0, 0, 0, 0, 1 },
{ 0, 0, 1, 1, 0 },
{ 0, 0, 0, 0, 1 },
{ 0, 1, 1, 1, 0 },
},
["и"] = {
{ 1, 0, 0, 0, 1 },
{ 1, 0, 0, 1, 1 },
{ 1, 0, 1, 0, 1 },
{ 1, 1, 0, 0, 1 },
{ 1, 0, 0, 0, 1 },
},
["й"] = {
{ 0, 1, 1, 1, 0 },
{ 0, 0, 0, 0, 0 },
{ 1, 0, 0, 0, 1 },
{ 1, 0, 0, 1, 1 },
{ 1, 0, 1, 0, 1 },
{ 1, 1, 0, 0, 1 },
{ 1, 0, 0, 0, 1 },
},
["к"] = {
{ 1, 0, 0, 1, 0 },
{ 1, 0, 1, 0, 0 },
{ 1, 1, 0, 0, 0 },
{ 1, 0, 1, 0, 0 },
{ 1, 0, 0, 1, 0 },
},
["л"] = {
{ 0, 0, 1, 1 },
{ 0, 1, 0, 1 },
{ 0, 1, 0, 1 },
{ 1, 0, 0, 1 },
{ 1, 0, 0, 1 },
},
["м"] = {
{ 1, 0, 0, 0, 1 },
{ 1, 1, 0, 1, 1 },
{ 1, 0, 1, 0, 1 },
{ 1, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 1 },
},
["н"] = {
{ 1, 0, 0, 1 },
{ 1, 0, 0, 1 },
{ 1, 1, 1, 1 },
{ 1, 0, 0, 1 },
{ 1, 0, 0, 1 },
},
["о"] = {
{ 0, 1, 1, 0 },
{ 1, 0, 0, 1 },
{ 1, 0, 0, 1 },
{ 1, 0, 0, 1 },
{ 0, 1, 1, 0 },
},
["п"] = {
{ 1, 1, 1, 1 },
{ 1, 0, 0, 1 },
{ 1, 0, 0, 1 },
{ 1, 0, 0, 1 },
{ 1, 0, 0, 1 },
},
["р"] = {
{ 1, 1, 1, 0},
{ 1, 0, 0, 1},
{ 1, 1, 1, 0},
{ 1, 0, 0, 0},
{ 1, 0, 0, 0},
},
["с"] = {
{ 0, 1, 1, 1 },
{ 1, 0, 0, 0 },
{ 1, 0, 0, 0 },
{ 1, 0, 0, 0 },
{ 0, 1, 1, 1 },
},
["т"] = {
{ 1, 1, 1, 1, 1 },
{ 0, 0, 1, 0, 0 },
{ 0, 0, 1, 0, 0 },
{ 0, 0, 1, 0, 0 },
{ 0, 0, 1, 0, 0 },
},
["у"] = {
{ 1, 0, 0, 1 },
{ 1, 0, 0, 1 },
{ 0, 1, 1, 1 },
{ 0, 0, 0, 1 },
{ 1, 1, 1, 0 },
},
["ф"] = {
{ 0, 1, 1, 1, 0 },
{ 1, 0, 1, 0, 1 },
{ 0, 1, 1, 1, 0 },
{ 0, 0, 1, 0, 0 },
{ 0, 0, 1, 0, 0 },
},
["х"] = {
{ 1, 0, 0, 0, 1 },
{ 0, 1, 0, 1, 0 },
{ 0, 0, 1, 0, 0 },
{ 0, 1, 0, 1, 0 },
{ 1, 0, 0, 0, 1 },
},
["ц"] = {
{ 1, 0, 0, 1, 0 },
{ 1, 0, 0, 1, 0 },
{ 1, 0, 0, 1, 0 },
{ 1, 0, 0, 1, 0 },
{ 0, 1, 1, 1, 1 },
},
["ч"] = {
{ 1, 0, 0, 1 },
{ 1, 0, 0, 1 },
{ 0, 1, 1, 1 },
{ 0, 0, 0, 1 },
{ 0, 0, 0, 1 },
},
["ш"] = {
{ 1, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 1 },
{ 1, 0, 1, 0, 1 },
{ 1, 0, 1, 0, 1 },
{ 1, 1, 1, 1, 1 },
},
["щ"] = {
{ 1, 0, 0, 0, 1, 0 },
{ 1, 0, 0, 0, 1, 0 },
{ 1, 0, 1, 0, 1, 0 },
{ 1, 0, 1, 0, 1, 0 },
{ 1, 1, 1, 1, 1, 1 },
},
["ъ"] = {
{ 1, 1, 0, 0, 0 },
{ 0, 1, 0, 0, 0 },
{ 0, 1, 1, 1, 0 },
{ 0, 1, 0, 0, 1 },
{ 0, 1, 1, 1, 0 },
},
["ы"] = {
{ 1, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 1 },
{ 1, 1, 1, 0, 0, 1 },
{ 1, 0, 0, 1, 0, 1 },
{ 1, 1, 1, 0, 0, 1 },
},
["ь"] = {
{ 1, 0, 0, 0 },
{ 1, 0, 0, 0 },
{ 1, 1, 1, 0 },
{ 1, 0, 0, 1 },
{ 1, 1, 1, 0 },
},
["э"] = {
{ 1, 1, 1, 0 },
{ 0, 0, 0, 1 },
{ 0, 1, 1, 1 },
{ 0, 0, 0, 1 },
{ 1, 1, 1, 0 },
},
["ю"] = {
{ 1, 0, 0, 1, 1, 0 },
{ 1, 0, 1, 0, 0, 1 },
{ 1, 1, 1, 0, 0, 1 },
{ 1, 0, 1, 0, 0, 1 },
{ 1, 0, 0, 1, 1, 0 },
},
["я"] = {
{ 0, 1, 1, 1 },
{ 1, 0, 0, 1 },
{ 0, 1, 1, 1 },
{ 1, 0, 0, 1 },
{ 1, 0, 0, 1 },
},
["-"] = {
{ 0, 0, 0 },
{ 0, 0, 0 },
{ 1, 1, 1 },
{ 0, 0, 0 },
{ 0, 0, 0 },
},
["_"] = {
{ 0, 0, 0 },
{ 0, 0, 0 },
{ 0, 0, 0 },
{ 0, 0, 0 },
{ 1, 1, 1 },
},
["+"] = {
{ 0, 0, 0 },
{ 0, 1, 0 },
{ 1, 1, 1 },
{ 0, 1, 0 },
{ 0, 0, 0 },
},
["*"] = {
{ 0, 0, 0 },
{ 1, 0, 1 },
{ 0, 1, 0 },
{ 1, 0, 1 },
{ 0, 0, 0 },
},
["°"] = {
{ 1 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
},
[""] = {
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 1, 0, 1, 0, 1 },
},
}
function bigLetters.draw(x, y, color, symbol, drawWithSymbol)
if symbol == " " then
return spaceWidth
elseif not letters[symbol] then
symbol = unknownSymbol
end
for j = 1, #letters[symbol] do
for i = 1, #letters[symbol][j] do
if letters[symbol][j][i] == 1 then
if not drawWithSymbol then
buffer.drawRectangle(x + i * 2 - 2, y + (pixelHeight - #letters[symbol]) + j - 1, 2, 1, color, 0xFFFFFF, " ")
else
buffer.drawText(x + i * 2 - 2, y + (pixelHeight - #letters[symbol]) + j - 1, color, "*")
end
end
end
end
return #letters[symbol][1]
end
function bigLetters.drawText(x, y, color, stroka, drawWithSymbol)
checkArg(4, stroka, "string")
for i = 1, unicode.len(stroka) do
x = x + bigLetters.draw(x, y, color, unicode.sub(stroka, i, i), drawWithSymbol) * 2 + lettersInterval
end
return x
end
function bigLetters.getTextSize(text)
local width, height = 0, 0
local symbol, symbolWidth, symbolHeight
for i = 1, unicode.len(text) do
symbol = unicode.sub(text, i, i)
if symbol == " " then
symbolWidth = spaceWidth
symbolHeight = 5
elseif not letters[symbol] then
symbolHeight = #letters[unknownSymbol]
symbolWidth = #letters[unknownSymbol][1]
else
symbolHeight = #letters[symbol]
symbolWidth = #letters[symbol][1]
end
width = width + symbolWidth * 2 + lettersInterval
height = math.max(height, symbolHeight)
end
return (width - lettersInterval), height
end
return bigLetters