Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -------------------------------------------------------------------------------------
- -- Wojbies API 4.1 - Bigfont - functions to write bigger font using drawing sybols --
- -------------------------------------------------------------------------------------
- --LICENCE: ZLIB/libpng Licence (Zlib)
- -- Copyright (c) 2015-2020 Wojbie ([email protected])
- -- This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.
- -- Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
- -- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- -- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- -- 3. This notice may not be removed or altered from any source distribution.
- --### Initializing
- local b = shell and {} or (_ENV or getfenv())
- b.versionName = "Bigfont By Wojbie"
- b.versionNum = 4.1 --2020-01-28
- --### Font database
- local rawFont = {{"\32\32\32\137\156\148\158\159\148\135\135\144\159\139\32\136\157\32\159\139\32\32\143\32\32\143\32\32\32\32\32\32\32\32\147\148\150\131\148\32\32\32\151\140\148\151\140\147", "\32\32\32\149\132\149\136\156\149\144\32\133\139\159\129\143\159\133\143\159\133\138\32\133\138\32\133\32\32\32\32\32\32\150\150\129\137\156\129\32\32\32\133\131\129\133\131\132", "\32\32\32\130\131\32\130\131\32\32\129\32\32\32\32\130\131\32\130\131\32\32\32\32\143\143\143\32\32\32\32\32\32\130\129\32\130\135\32\32\32\32\131\32\32\131\32\131", "\139\144\32\32\143\148\135\130\144\149\32\149\150\151\149\158\140\129\32\32\32\135\130\144\135\130\144\32\149\32\32\139\32\159\148\32\32\32\32\159\32\144\32\148\32\147\131\132", "\159\135\129\131\143\149\143\138\144\138\32\133\130\149\149\137\155\149\159\143\144\147\130\132\32\149\32\147\130\132\131\159\129\139\151\129\148\32\32\139\131\135\133\32\144\130\151\32", "\32\32\32\32\32\32\130\135\32\130\32\129\32\129\129\131\131\32\130\131\129\140\141\132\32\129\32\32\129\32\32\32\32\32\32\32\131\131\129\32\32\32\32\32\32\32\32\32", "\32\32\32\32\149\32\159\154\133\133\133\144\152\141\132\133\151\129\136\153\32\32\154\32\159\134\129\130\137\144\159\32\144\32\148\32\32\32\32\32\32\32\32\32\32\32\151\129", "\32\32\32\32\133\32\32\32\32\145\145\132\141\140\132\151\129\144\150\146\129\32\32\32\138\144\32\32\159\133\136\131\132\131\151\129\32\144\32\131\131\129\32\144\32\151\129\32", "\32\32\32\32\129\32\32\32\32\130\130\32\32\129\32\129\32\129\130\129\129\32\32\32\32\130\129\130\129\32\32\32\32\32\32\32\32\133\32\32\32\32\32\129\32\129\32\32", "\150\156\148\136\149\32\134\131\148\134\131\148\159\134\149\136\140\129\152\131\32\135\131\149\150\131\148\150\131\148\32\148\32\32\148\32\32\152\129\143\143\144\130\155\32\134\131\148", "\157\129\149\32\149\32\152\131\144\144\131\148\141\140\149\144\32\149\151\131\148\32\150\32\150\131\148\130\156\133\32\144\32\32\144\32\130\155\32\143\143\144\32\152\129\32\134\32", "\130\131\32\131\131\129\131\131\129\130\131\32\32\32\129\130\131\32\130\131\32\32\129\32\130\131\32\130\129\32\32\129\32\32\133\32\32\32\129\32\32\32\130\32\32\32\129\32", "\150\140\150\137\140\148\136\140\132\150\131\132\151\131\148\136\147\129\136\147\129\150\156\145\138\143\149\130\151\32\32\32\149\138\152\129\149\32\32\157\152\149\157\144\149\150\131\148", "\149\143\142\149\32\149\149\32\149\149\32\144\149\32\149\149\32\32\149\32\32\149\32\149\149\32\149\32\149\32\144\32\149\149\130\148\149\32\32\149\32\149\149\130\149\149\32\149", "\130\131\129\129\32\129\131\131\32\130\131\32\131\131\32\131\131\129\129\32\32\130\131\32\129\32\129\130\131\32\130\131\32\129\32\129\131\131\129\129\32\129\129\32\129\130\131\32", "\136\140\132\150\131\148\136\140\132\153\140\129\131\151\129\149\32\149\149\32\149\149\32\149\137\152\129\137\152\129\131\156\133\149\131\32\150\32\32\130\148\32\152\137\144\32\32\32", "\149\32\32\149\159\133\149\32\149\144\32\149\32\149\32\149\32\149\150\151\129\138\155\149\150\130\148\32\149\32\152\129\32\149\32\32\32\150\32\32\149\32\32\32\32\32\32\32", "\129\32\32\130\129\129\129\32\129\130\131\32\32\129\32\130\131\32\32\129\32\129\32\129\129\32\129\32\129\32\131\131\129\130\131\32\32\32\129\130\131\32\32\32\32\140\140\132", "\32\154\32\159\143\32\149\143\32\159\143\32\159\144\149\159\143\32\159\137\145\159\143\144\149\143\32\32\145\32\32\32\145\149\32\144\32\149\32\143\159\32\143\143\32\159\143\32", "\32\32\32\152\140\149\151\32\149\149\32\145\149\130\149\157\140\133\32\149\32\154\143\149\151\32\149\32\149\32\144\32\149\149\153\32\32\149\32\149\133\149\149\32\149\149\32\149", "\32\32\32\130\131\129\131\131\32\130\131\32\130\131\129\130\131\129\32\129\32\140\140\129\129\32\129\32\129\32\137\140\129\130\32\129\32\130\32\129\32\129\129\32\129\130\131\32", "\144\143\32\159\144\144\144\143\32\159\143\144\159\138\32\144\32\144\144\32\144\144\32\144\144\32\144\144\32\144\143\143\144\32\150\129\32\149\32\130\150\32\134\137\134\134\131\148", "\136\143\133\154\141\149\151\32\129\137\140\144\32\149\32\149\32\149\154\159\133\149\148\149\157\153\32\154\143\149\159\134\32\130\148\32\32\149\32\32\151\129\32\32\32\32\134\32", "\133\32\32\32\32\133\129\32\32\131\131\32\32\130\32\130\131\129\32\129\32\130\131\129\129\32\129\140\140\129\131\131\129\32\130\129\32\129\32\130\129\32\32\32\32\32\129\32", "\32\32\32\32\149\32\32\149\32\32\32\32\32\32\32\32\149\32\32\149\32\32\32\32\32\32\32\32\149\32\32\149\32\32\32\32\32\32\32\32\149\32\32\149\32\32\32\32", "\32\32\32\32\32\32\32\32\32\32\32\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\32\32\32\32\32\32\32\32\32\32\32", "\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32", "\32\32\32\32\149\32\32\149\32\32\32\32\32\32\32\32\149\32\32\149\32\32\32\32\32\32\32\32\149\32\32\149\32\32\32\32\32\32\32\32\149\32\32\149\32\32\32\32", "\32\32\32\32\32\32\32\32\32\32\32\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\32\32\32\32\32\32\32\32\32\32\32", "\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32", "\32\32\32\32\145\32\159\139\32\151\131\132\155\143\132\134\135\145\32\149\32\158\140\129\130\130\32\152\147\155\157\134\32\32\144\144\32\32\32\32\32\32\152\131\155\131\131\129", "\32\32\32\32\149\32\149\32\145\148\131\32\149\32\149\140\157\132\32\148\32\137\155\149\32\32\32\149\154\149\137\142\32\153\153\32\131\131\149\131\131\129\149\135\145\32\32\32", "\32\32\32\32\129\32\130\135\32\131\131\129\134\131\132\32\129\32\32\129\32\131\131\32\32\32\32\130\131\129\32\32\32\32\129\129\32\32\32\32\32\32\130\131\129\32\32\32", "\150\150\32\32\148\32\134\32\32\132\32\32\134\32\32\144\32\144\150\151\149\32\32\32\32\32\32\145\32\32\152\140\144\144\144\32\133\151\129\133\151\129\132\151\129\32\145\32", "\130\129\32\131\151\129\141\32\32\142\32\32\32\32\32\149\32\149\130\149\149\32\143\32\32\32\32\142\132\32\154\143\133\157\153\132\151\150\148\151\158\132\151\150\148\144\130\148", "\32\32\32\140\140\132\32\32\32\32\32\32\32\32\32\151\131\32\32\129\129\32\32\32\32\134\32\32\32\32\32\32\32\129\129\32\129\32\129\129\130\129\129\32\129\130\131\32", "\156\143\32\159\141\129\153\140\132\153\137\32\157\141\32\159\142\32\150\151\129\150\131\132\140\143\144\143\141\145\137\140\148\141\141\144\157\142\32\159\140\32\151\134\32\157\141\32", "\157\140\149\157\140\149\157\140\149\157\140\149\157\140\149\157\140\149\151\151\32\154\143\132\157\140\32\157\140\32\157\140\32\157\140\32\32\149\32\32\149\32\32\149\32\32\149\32", "\129\32\129\129\32\129\129\32\129\129\32\129\129\32\129\129\32\129\129\131\129\32\134\32\131\131\129\131\131\129\131\131\129\131\131\129\130\131\32\130\131\32\130\131\32\130\131\32", "\151\131\148\152\137\145\155\140\144\152\142\145\153\140\132\153\137\32\154\142\144\155\159\132\150\156\148\147\32\144\144\130\145\136\137\32\146\130\144\144\130\145\130\136\32\151\140\132", "\151\32\149\151\155\149\149\32\149\149\32\149\149\32\149\149\32\149\149\32\149\152\137\144\157\129\149\149\32\149\149\32\149\149\32\149\149\32\149\130\150\32\32\157\129\149\32\149", "\131\131\32\129\32\129\130\131\32\130\131\32\130\131\32\130\131\32\130\131\32\32\32\32\130\131\32\130\131\32\130\131\32\130\131\32\130\131\32\32\129\32\130\131\32\133\131\32", "\156\143\32\159\141\129\153\140\132\153\137\32\157\141\32\159\142\32\159\159\144\152\140\144\156\143\32\159\141\129\153\140\132\157\141\32\130\145\32\32\147\32\136\153\32\130\146\32", "\152\140\149\152\140\149\152\140\149\152\140\149\152\140\149\152\140\149\149\157\134\154\143\132\157\140\133\157\140\133\157\140\133\157\140\133\32\149\32\32\149\32\32\149\32\32\149\32", "\130\131\129\130\131\129\130\131\129\130\131\129\130\131\129\130\131\129\130\130\131\32\134\32\130\131\129\130\131\129\130\131\129\130\131\129\32\129\32\32\129\32\32\129\32\32\129\32", "\159\134\144\137\137\32\156\143\32\159\141\129\153\140\132\153\137\32\157\141\32\32\132\32\159\143\32\147\32\144\144\130\145\136\137\32\146\130\144\144\130\145\130\138\32\146\130\144", "\149\32\149\149\32\149\149\32\149\149\32\149\149\32\149\149\32\149\149\32\149\131\147\129\138\134\149\149\32\149\149\32\149\149\32\149\149\32\149\154\143\149\32\157\129\154\143\149", "\130\131\32\129\32\129\130\131\32\130\131\32\130\131\32\130\131\32\130\131\32\32\32\32\130\131\32\130\131\129\130\131\129\130\131\129\130\131\129\140\140\129\130\131\32\140\140\129" }, {[[000110000110110000110010101000000010000000100101]], [[000000110110000000000010101000000010000000100101]], [[000000000000000000000000000000000000000000000000]], [[100010110100000010000110110000010100000100000110]], [[000000110000000010110110000110000000000000110000]], [[000000000000000000000000000000000000000000000000]], [[000000110110000010000000100000100000000000000010]], [[000000000110110100010000000010000000000000000100]], [[000000000000000000000000000000000000000000000000]], [[010000000000100110000000000000000000000110010000]], [[000000000000000000000000000010000000010110000000]], [[000000000000000000000000000000000000000000000000]], [[011110110000000100100010110000000100000000000000]], [[000000000000000000000000000000000000000000000000]], [[000000000000000000000000000000000000000000000000]], [[110000110110000000000000000000010100100010000000]], [[000010000000000000110110000000000100010010000000]], [[000000000000000000000000000000000000000000000000]], [[010110010110100110110110010000000100000110110110]], [[000000000000000000000110000000000110000000000000]], [[000000000000000000000000000000000000000000000000]], [[010100010110110000000000000000110000000010000000]], [[110110000000000000110000110110100000000010000000]], [[000000000000000000000000000000000000000000000000]], [[000100011111000100011111000100011111000100011111]], [[000000000000100100100100011011011011111111111111]], [[000000000000000000000000000000000000000000000000]], [[000100011111000100011111000100011111000100011111]], [[000000000000100100100100011011011011111111111111]], [[100100100100100100100100100100100100100100100100]], [[000000110100110110000010000011110000000000011000]], [[000000000100000000000010000011000110000000001000]], [[000000000000000000000000000000000000000000000000]], [[010000100100000000000000000100000000010010110000]], [[000000000000000000000000000000110110110110110000]], [[000000000000000000000000000000000000000000000000]], [[110110110110110110000000110110110110110110110110]], [[000000000000000000000110000000000000000000000000]], [[000000000000000000000000000000000000000000000000]], [[000000000000110110000110010000000000000000010010]], [[000010000000000000000000000000000000000000000000]], [[000000000000000000000000000000000000000000000000]], [[110110110110110110110000110110110110000000000000]], [[000000000000000000000110000000000000000000000000]], [[000000000000000000000000000000000000000000000000]], [[110110110110110110110000110000000000000000010000]], [[000000000000000000000000100000000000000110000110]], [[000000000000000000000000000000000000000000000000]] }}
- --### Genarate fonts using 3x3 chars per a character. (1 character is 6x9 pixels)
- local fonts = {}
- local firstFont = {}
- do
- local char = 0
- local height = #rawFont[1]
- local lenght = #rawFont[1][1]
- for i = 1, height, 3 do
- for j = 1, lenght, 3 do
- local thisChar = string.char(char)
- local temp = {}
- temp[1] = rawFont[1][i]:sub(j, j + 2)
- temp[2] = rawFont[1][i + 1]:sub(j, j + 2)
- temp[3] = rawFont[1][i + 2]:sub(j, j + 2)
- local temp2 = {}
- temp2[1] = rawFont[2][i]:sub(j, j + 2)
- temp2[2] = rawFont[2][i + 1]:sub(j, j + 2)
- temp2[3] = rawFont[2][i + 2]:sub(j, j + 2)
- firstFont[thisChar] = {temp, temp2}
- char = char + 1
- end
- end
- fonts[1] = firstFont
- end
- local function generateFontSize(size,yeld)
- local inverter = {["0"] = "1", ["1"] = "0"} --:gsub("[01]",inverter)
- if size<= #fonts then return true end
- for f = #fonts+1, size do
- --automagicly make bigger fonts using firstFont and fonts[f-1].
- local nextFont = {}
- local lastFont = fonts[f - 1]
- for char = 0, 255 do
- local thisChar = string.char(char)
- --sleep(0) print(f,thisChar)
- local temp = {}
- local temp2 = {}
- local templateChar = lastFont[thisChar][1]
- local templateBack = lastFont[thisChar][2]
- for i = 1, #templateChar do
- local line1, line2, line3, back1, back2, back3 = {}, {}, {}, {}, {}, {}
- for j = 1, #templateChar[1] do
- local currentChar = firstFont[templateChar[i]:sub(j, j)][1]
- table.insert(line1, currentChar[1])
- table.insert(line2, currentChar[2])
- table.insert(line3, currentChar[3])
- local currentBack = firstFont[templateChar[i]:sub(j, j)][2]
- if templateBack[i]:sub(j, j) == "1" then
- table.insert(back1, (currentBack[1]:gsub("[01]", inverter)))
- table.insert(back2, (currentBack[2]:gsub("[01]", inverter)))
- table.insert(back3, (currentBack[3]:gsub("[01]", inverter)))
- else
- table.insert(back1, currentBack[1])
- table.insert(back2, currentBack[2])
- table.insert(back3, currentBack[3])
- end
- end
- table.insert(temp, table.concat(line1))
- table.insert(temp, table.concat(line2))
- table.insert(temp, table.concat(line3))
- table.insert(temp2, table.concat(back1))
- table.insert(temp2, table.concat(back2))
- table.insert(temp2, table.concat(back3))
- end
- nextFont[thisChar] = {temp, temp2}
- if yeld then yeld = "Font"..f.."Yeld"..char os.queueEvent(yeld) os.pullEvent(yeld) end
- end
- fonts[f] = nextFont
- end
- return true
- end
- generateFontSize(3,false)
- --## Use pre-generated fonts instead of old code above.
- --local fonts = {}
- local tHex = {[ colors.white ] = "0", [ colors.orange ] = "1", [ colors.magenta ] = "2", [ colors.lightBlue ] = "3", [ colors.yellow ] = "4", [ colors.lime ] = "5", [ colors.pink ] = "6", [ colors.gray ] = "7", [ colors.lightGray ] = "8", [ colors.cyan ] = "9", [ colors.purple ] = "a", [ colors.blue ] = "b", [ colors.brown ] = "c", [ colors.green ] = "d", [ colors.red ] = "e", [ colors.black ] = "f"}
- --# Write data on terminal in specified location.
- local function stamp(tTerminal, tData, nX, nY)
- local oX, oY = tTerminal.getSize()
- local cX, cY = #tData[1][1], #tData[1]
- nX = nX or math.floor((oX - cX) / 2) + 1
- nY = nY or math.floor((oY - cY) / 2) + 1
- for i = 1, cY do
- if i > 1 and nY + i - 1 > oY then term.scroll(1) nY = nY - 1 end
- tTerminal.setCursorPos(nX, nY + i - 1)
- tTerminal.blit(tData[1][i], tData[2][i], tData[3][i])
- end
- end
- --# Generate data from strings for data and colors.
- local function makeText(nSize, sString, nFC, nBC, bBlit)
- if not type(sString) == "string" then error("Not a String") end
- local cFC = type(nFC) == "string" and nFC:sub(1, 1) or tHex[nFC] or error("Wrong Front Color")
- local cBC = type(nBC) == "string" and nBC:sub(1, 1) or tHex[nBC] or error("Wrong Back Color")
- local font = fonts[nSize] or error("Wrong font size selected")
- local input = {}
- for i in sString:gmatch('.') do table.insert(input, i) end
- local tText = {}
- local height = #font[input[1]][1]
- for nLine = 1, height do
- local outLine = {}
- for i = 1, #input do
- outLine[i] = font[input[i]] and font[input[i]][1][nLine] or ""
- end
- tText[nLine] = table.concat(outLine)
- end
- local tFront = {}
- local tBack = {}
- local tFrontSub = {["0"] = cFC, ["1"] = cBC}
- local tBackSub = {["0"] = cBC, ["1"] = cFC}
- for nLine = 1, height do
- local front = {}
- local back = {}
- for i = 1, #input do
- local template = font[input[i]] and font[input[i]][2][nLine] or ""
- front[i] = template:gsub("[01]", bBlit and {["0"] = nFC:sub(i, i), ["1"] = nBC:sub(i, i)} or tFrontSub)
- back[i] = template:gsub("[01]", bBlit and {["0"] = nBC:sub(i, i), ["1"] = nFC:sub(i, i)} or tBackSub)
- end
- tFront[nLine] = table.concat(front)
- tBack[nLine] = table.concat(back)
- end
- return {tText, tFront, tBack}
- end
- --# Writing in big font using current terminal settings.
- b.bigWrite = function(sString)
- stamp(term, makeText(1, sString, term.getTextColor(), term.getBackgroundColor()), term.getCursorPos())
- local x, y = term.getCursorPos()
- term.setCursorPos(x, y - 2)
- end
- b.bigBlit = function(sString, sFront, sBack)
- stamp(term, makeText(1, sString, sFront, sBack, true), term.getCursorPos())
- local x, y = term.getCursorPos()
- term.setCursorPos(x, y - 2)
- end
- b.bigPrint = function(sString)
- stamp(term, makeText(1, sString, term.getTextColor(), term.getBackgroundColor()), term.getCursorPos())
- print()
- end
- --# Writing in huge font using current terminal settings.
- b.hugeWrite = function(sString)
- stamp(term, makeText(2, sString, term.getTextColor(), term.getBackgroundColor()), term.getCursorPos())
- local x, y = term.getCursorPos()
- term.setCursorPos(x, y - 8)
- end
- b.hugeBlit = function(sString, sFront, sBack)
- stamp(term, makeText(2, sString, sFront, sBack, true), term.getCursorPos())
- local x, y = term.getCursorPos()
- term.setCursorPos(x, y - 8)
- end
- b.hugePrint = function(sString)
- stamp(term, makeText(2, sString, term.getTextColor(), term.getBackgroundColor()), term.getCursorPos())
- print()
- end
- --# Write/blit string on terminal in specified location
- b.writeOn = function(tTerminal, nSize, sString, nX, nY)
- stamp(tTerminal, makeText(nSize, sString, tTerminal.getTextColor(), tTerminal.getBackgroundColor()), nX, nY)
- end
- b.blitOn = function(tTerminal, nSize, sString, sFront, sBack, nX, nY)
- stamp(tTerminal, makeText(nSize, sString, sFront, sBack, true), nX, nY)
- end
- --# Generate blittle object in blittle format for printing with that api.
- b.makeBlittleText = function(nSize, sString, nFC, nBC)
- local out = makeText(nSize, sString, nFC, nBC)
- out.height = #out[1]
- out.width = #out[1][1]
- return out
- end
- --# Calculate higher size fonts
- b.generateFontSize = function(size)
- if type(size) ~= "number" then error("Size need to be a number") end
- if size > 6 then return false end
- return generateFontSize(math.floor(size),true)
- end
- --### Finalizing
- return b
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement