MineOS/lib/codeViewer.lua
Igor Timofeev 9334ed31b8 ss
2015-11-20 14:27:48 +03:00

88 lines
3.1 KiB
Lua

local syntax = require("syntax")
local gpu = require("component").gpu
local buffer = require("doubleBuffering")
local unicode = require("unicode")
local codeViewer = {}
----------------------------------------------------------------------------------------------------------------------------------------
local colorSchemes = {
midnight = {
text = 0xFFFFFF,
background = 0x262626,
lineNumbers = 0x444444,
lineNumbersText = 0xDDDDDD,
scrollBar = 0x444444,
scrollBarPipe = 0x24c0ff,
},
}
local currentColorScheme = colorSchemes.midnight
----------------------------------------------------------------------------------------------------------------------------------------
local function loadFile(path)
local array = {}
local file = io.open(path, "r")
for line in file:lines() do table.insert(array, line) end
file:close()
return array
end
function codeViewer.view(x, y, width, height, strings, fromString)
local maximumNumberOfAvailableStrings
if strings[fromString + height - 1] then
maximumNumberOfAvailableStrings = fromString + height - 1
else
maximumNumberOfAvailableStrings = #strings
end
local widthOfStringCounter = unicode.len(maximumNumberOfAvailableStrings) + 2
--Рисуем номера линий
buffer.square(x, y, widthOfStringCounter, height, currentColorScheme.lineNumbers, 0xFFFFFF, " ")
local yPos = y
for i = fromString, maximumNumberOfAvailableStrings do
buffer.text(x + widthOfStringCounter - unicode.len(i) - 1, yPos, currentColorScheme.text, tostring(i))
yPos = yPos + 1
end
--Рисуем подложку под текст
buffer.square(x + widthOfStringCounter, y, width - widthOfStringCounter, height, currentColorScheme.background, 0xFFFFFF, " ")
--Рисуем текст
local widthOfText = width - widthOfStringCounter - 3
yPos = y
for i = fromString, maximumNumberOfAvailableStrings do
syntax.highlight(x + widthOfStringCounter + 1, yPos, strings[i], widthOfText)
yPos = yPos + 1
end
--Скроллбар
buffer.scrollBar(x + width - 1, y, 1, height, #strings, fromString, currentColorScheme.scrollBar, currentColorScheme.scrollBarPipe)
buffer.draw()
end
----------------------------------------------------------------------------------------------------------------------------------------
-- local strings = loadFile("MineOS/Applications/Highlight.app/Resources/TestFile.txt")
-- local xSize, ySize = gpu.getResolution()
-- buffer.square(1, 1, xSize, ySize, ecs.colors.red, 0xFFFFFF, " ")
-- buffer.draw(true)
-- local fromString = 1
-- codeViewer.view(2, 2, 80, 26, strings, fromString)
-- while true do
-- local e = {event.pull()}
-- if e[1] == "key_down" then
-- if e[4] == 200 then
-- if fromString > 1 then fromString = fromString - 1; codeViewer.view(2, 2, 80, 26, strings, fromString) end
-- elseif e[4] == 208 then
-- if fromString < #strings then fromString = fromString + 1; codeViewer.view(2, 2, 80, 26, strings, fromString) w end
-- end
-- end
-- end
----------------------------------------------------------------------------------------------------------------------------------------
return codeViewer