diff --git a/lib/codeViewer.lua b/lib/codeViewer.lua new file mode 100644 index 00000000..a305fb8d --- /dev/null +++ b/lib/codeViewer.lua @@ -0,0 +1,88 @@ +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 \ No newline at end of file diff --git a/lib/syntax.lua b/lib/syntax.lua index ecbe647e..98402ec5 100644 --- a/lib/syntax.lua +++ b/lib/syntax.lua @@ -208,7 +208,9 @@ end syntax.setColorScheme(syntax.colorSchemes.midnight) --Епты бля! -syntax.highlightFileForDebug("MineOS/Applications/Highlight.app/Resources/TestFile.txt", "midnight") +--syntax.highlightFileForDebug("MineOS/Applications/Highlight.app/Resources/TestFile.txt", "midnight") + +---------------------------------------------------------------------------------------------------------------- return syntax