mirror of
https://github.com/IgorTimofeev/MineOS.git
synced 2026-03-26 01:32:46 +01:00
Система дебага с возможностью отправить отчет об ошибке лично мне
This commit is contained in:
142
lib/ECSAPI.lua
142
lib/ECSAPI.lua
@@ -1183,148 +1183,6 @@ function ecs.inputText(x, y, limit, cheBiloVvedeno, background, foreground, just
|
||||
end
|
||||
end
|
||||
|
||||
--Функция парсинга сообщения об ошибке. Конвертирует из строки в массив и переводит на русский.
|
||||
function ecs.parseErrorMessage(error, translate)
|
||||
|
||||
local parsedError = {}
|
||||
|
||||
--ПОИСК ЭНТЕРОВ
|
||||
local starting, ending, searchFrom = nil, nil, 1
|
||||
for i = 1, unicode.len(error) do
|
||||
starting, ending = string.find(error, "\n", searchFrom)
|
||||
if starting then
|
||||
table.insert(parsedError, unicode.sub(error, searchFrom, starting - 1))
|
||||
searchFrom = ending + 1
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
--На всякий случай, если сообщение об ошибке без энтеров вообще, т.е. однострочное
|
||||
if #parsedError == 0 and error ~= "" and error ~= nil and error ~= " " then
|
||||
table.insert(parsedError, error)
|
||||
end
|
||||
|
||||
--Замена /r/n и табсов
|
||||
for i = 1, #parsedError do
|
||||
parsedError[i] = string.gsub(parsedError[i], "\r\n", "\n")
|
||||
parsedError[i] = string.gsub(parsedError[i], " ", " ")
|
||||
end
|
||||
|
||||
if translate then
|
||||
for i = 1, #parsedError do
|
||||
parsedError[i] = string.gsub(parsedError[i], "interrupted", "Выполнение программы прервано пользователем")
|
||||
parsedError[i] = string.gsub(parsedError[i], " got ", " получена ")
|
||||
parsedError[i] = string.gsub(parsedError[i], " expected,", " ожидается,")
|
||||
parsedError[i] = string.gsub(parsedError[i], "bad argument #", "Неверный аргумент #")
|
||||
parsedError[i] = string.gsub(parsedError[i], "stack traceback", "Отслеживание ошибки")
|
||||
parsedError[i] = string.gsub(parsedError[i], "tail calls", "Дочерние вызовы")
|
||||
parsedError[i] = string.gsub(parsedError[i], "in function", "в функции")
|
||||
parsedError[i] = string.gsub(parsedError[i], "in main chunk", "в основной программе")
|
||||
parsedError[i] = string.gsub(parsedError[i], "unexpected symbol near", "неожиданный символ рядом с")
|
||||
parsedError[i] = string.gsub(parsedError[i], "attempt to index", "пытаюсь получить значение индекса массива")
|
||||
parsedError[i] = string.gsub(parsedError[i], "attempt to get length of", "не удается получить длину")
|
||||
parsedError[i] = string.gsub(parsedError[i], ": ", ", ")
|
||||
parsedError[i] = string.gsub(parsedError[i], " module ", " модуль ")
|
||||
parsedError[i] = string.gsub(parsedError[i], "not found", "не найден")
|
||||
parsedError[i] = string.gsub(parsedError[i], "no field package.preload", "не найдена библиотека")
|
||||
parsedError[i] = string.gsub(parsedError[i], "no file", "нет файла")
|
||||
parsedError[i] = string.gsub(parsedError[i], "local", "локальной")
|
||||
parsedError[i] = string.gsub(parsedError[i], "global", "глобальной")
|
||||
parsedError[i] = string.gsub(parsedError[i], "no primary", "не найден компонент")
|
||||
parsedError[i] = string.gsub(parsedError[i], "available", "в доступе")
|
||||
parsedError[i] = string.gsub(parsedError[i], "attempt to concatenate", "не могу присоединить")
|
||||
parsedError[i] = string.gsub(parsedError[i], "a nil value", "переменная равна nil")
|
||||
end
|
||||
end
|
||||
|
||||
starting, ending = nil, nil
|
||||
|
||||
return parsedError
|
||||
end
|
||||
|
||||
--Отображение сообщения об ошибке компиляции скрипта в красивом окошке.
|
||||
function ecs.displayCompileMessage(y, reason, translate, withAnimation)
|
||||
|
||||
local xSize, ySize = gpu.getResolution()
|
||||
|
||||
--Переводим причину в массив
|
||||
reason = ecs.parseErrorMessage(reason, translate)
|
||||
|
||||
--Получаем ширину и высоту окошка
|
||||
local width = math.floor(xSize * 7 / 10)
|
||||
local textWidth = width - 11
|
||||
reason = ecs.stringWrap(reason, textWidth)
|
||||
local height = #reason + 6
|
||||
|
||||
--Просчет вот этой хуйни, аааахаахах
|
||||
local difference = ySize - (height + y)
|
||||
if difference < 0 then
|
||||
for i = 1, (math.abs(difference) + 1) do
|
||||
table.remove(reason, #reason)
|
||||
end
|
||||
table.insert(reason, "…")
|
||||
height = #reason + 6
|
||||
end
|
||||
|
||||
local x = math.floor(xSize / 2 - width / 2)
|
||||
|
||||
--Иконочка воскл знака на красном фоне
|
||||
local errorImage = {
|
||||
{{0xff0000,0xffffff,"#"},{0xff0000,0xffffff,"#"},{0xff0000,0xffffff," "},{0xff0000,0xffffff,"#"},{0xff0000,0xffffff,"#"}},
|
||||
{{0xff0000,0xffffff,"#"},{0xff0000,0xffffff," "},{0xff0000,0xffffff,"!"},{0xff0000,0xffffff," "},{0xff0000,0xffffff,"#"}},
|
||||
{{0xff0000,0xffffff," "},{0xff0000,0xffffff," "},{0xff0000,0xffffff," "},{0xff0000,0xffffff," "},{0xff0000,0xffffff," "}}
|
||||
}
|
||||
|
||||
--Запоминаем, че было отображено
|
||||
local oldPixels
|
||||
|
||||
local function drawCompileMessage(y)
|
||||
ecs.square(x, y, width, height, ecs.windowColors.background)
|
||||
ecs.windowShadow(x, y, width, height)
|
||||
--Рисуем воскл знак
|
||||
ecs.drawCustomImage(x + 2, y + 1, errorImage)
|
||||
|
||||
--Рисуем текст
|
||||
local yPos = y + 1
|
||||
local xPos = x + 9
|
||||
gpu.setBackground(ecs.windowColors.background)
|
||||
|
||||
ecs.colorText(xPos, yPos, ecs.windowColors.usualText, "Код ошибки:")
|
||||
yPos = yPos + 2
|
||||
|
||||
gpu.setForeground( 0xcc0000 )
|
||||
for i = 1, #reason do
|
||||
gpu.set(xPos, yPos, reason[i])
|
||||
yPos = yPos + 1
|
||||
end
|
||||
|
||||
yPos = yPos + 1
|
||||
ecs.colorText(xPos, yPos, ecs.windowColors.usualText, ecs.stringLimit("end", "Нажмите любую клавишу, чтобы продолжить", textWidth))
|
||||
end
|
||||
|
||||
--Типа анимация, ога
|
||||
if withAnimation then
|
||||
oldPixels = ecs.rememberOldPixels(x, 1, x + width + 1, height + 1)
|
||||
for i = -height, 1, 1 do
|
||||
drawCompileMessage(i)
|
||||
os.sleep(0.01)
|
||||
end
|
||||
else
|
||||
oldPixels = ecs.rememberOldPixels(x, y, x + width + 1, y + height)
|
||||
drawCompileMessage(y)
|
||||
end
|
||||
|
||||
--Пикаем звуком кароч
|
||||
for i = 1, 3 do
|
||||
computer.beep(1000)
|
||||
end
|
||||
--Ждем сам знаешь чего
|
||||
ecs.wait()
|
||||
--Рисуем, че было нарисовано
|
||||
ecs.drawOldPixels(oldPixels)
|
||||
end
|
||||
|
||||
--Спросить, заменять ли файл (если таковой уже имеется)
|
||||
function ecs.askForReplaceFile(path, includeForAllButton)
|
||||
local cyka = {
|
||||
|
||||
Reference in New Issue
Block a user