LeshaInc 623 Опубликовано: 21 февраля, 2016 Rainbow Согласитесь, писать цветной ввод не всегда удобно. Код типа: function coolLog(text, min, max) gpu.setForeground(0xFFFFFF) io.write(text .. " ") gpu.setForeground(0xDD0000) io.write("[" .. min .. "/" .. max .. "]") end не удобен и не универсален. Поэтому я написал библиотеку для цветного вывода. Скачать pastebin get C5aBuY5e /lib/rainbow.lua Пример кода Возможности: local color = require("rainbow") local buf = color.buffer{ colors_ext = { foreground = { seroburomalinovy = 0x735184 } }, patterns = { progress = function (self, info, now, max) return self.fg_white(info) .. " " .. self.fg_red("[" .. now .. "/" .. max .. "]") .. "\n" .. self.bg_black(self.fg_white("")) end } } local mycoolcolor = buf.colorize(0xDEAD00, true) buf(true, "progress", mycoolcolor("i am progress"), buf.fg_red(30), buf.fg_seroburomalinovy(100)) buf("i am text\n") color.core( "i am ", color.core.bg_red("core"), color.core.fg_white(color.core.bg_black(" text\n")) ) Тест палитры: package.loaded["rainbow"] = nil local color = require("rainbow") local colors_to_test = {"red", "black", "gray", "white", "green", "yellow", "blue", "violet", "light_blue"} local buf = color.buffer{ patterns = { color_info = function (self, color) self( self["fg_" .. color](self.bg_black(color .. " ")) ) end } } for _, v in ipairs(colors_to_test) do buf(true, "color_info", v) end Мануал Ядро Ядро Rainbow предоставляет функции для рисования текста. Паттерны и кастомные цвета возможны только в буфферах, о которых пойдет речь чуть позже. Ядро находится в таблице core. Пример работы с ядром: local color = require("rainbow") color.core( color.core.fg_red("Red Text"), color.core.fg_black("") ) Функции ядра: __call(...) - рисует цветной текст. print(...) - делает то же что и __call, рисует текст. Функция __call использует print. colorize(color: number (hex, 0xRRGGBB), isFG: boolean) :function (text: string) - возвращает функцию, которая раскрасит текст, который потом подается в __call или __print. Параметр isFG определяет, раскрашивать текст, или фон. Цвет подается в привычном формате 0xRRGGBB. Больше функций в ядре нет, но есть одна маленькая фича о которой нужно знать. Существует стандартная палитра цветов, доступ к которой можно получить при помощи core.fg_<цвет> или core.bg_<цвет>. Это выдаст нам функцию, которая будет раскрашивать либо текст, либо соответственно фон (определяется текстом fg_ или bg_ перед цветом) Буффер Буффер - это именно то чем мы будем выводить цветной текст. Ядро тоже умеет выводить его, но оно не имеет возможности создать собственные цвета (дефолтные цвета ведь хреново выглядят =) ) и паттерны. Буффер - это класс. buffer(options: table) :table - именно так мы будем воздавать новые буфферы. В таблицу options мы подаем такие аргументы: colors - палитра которая будет использоваться в буффере. Не обязательно, если не будет будет использоваться дефолтная палитра. colors_ext - таблица с цветами, которые будут добавлены в палитру. Это может быть полезно, когда мы используем стандартную палитру, но хотим вставить в нее дополнительные цвета. Не обязательно. patterns - самая полезная таблица - таблица с паттернами. Имеет вид pattern_name = pattern_handler. Паттерны используются вместе с функцией __call. Если в __call передать первым параметром true, а вторым имя паттерна, то наш pattern_handler будет вызван с параметрами: buffer, ..., где ... - остальные параметры переданные в __call. Значение, которое возвратит функция паттерна будет передано в функцию написания текста. Пример работы с буффером: local color = require("rainbow") local buf = color.buffer{ colors = { foreground = { cool = 0xDEAD00 }, background = { cool = 0xDEAD00 } }, colors_ext = { foreground = { very_cool = 0x00DEAD } }, patterns = { test = function (self, arg1) return self.bg_cool(arg1) end } } buf(true, "test", "yeah") -- yeah (со цветом 0xDEAD00) buf(buf.fg_very_cool("aaa")) -- aaa (со цветом 0x00DEAD) Вот собственно и все о буфферах, да и о самой библиотеке в целом. Заключение Советую вам пользоваться этой библиотекой, если вы хотите делать цветной вывод в вашей программе, не надо делать велосипеды. 6 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Krutoy 1 165 Опубликовано: 22 февраля, 2016 Неплохой код. А хочешь пораздаю советов? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LeshaInc Автор темы 623 Опубликовано: 22 февраля, 2016 Неплохой код. А хочешь пораздаю советов? Пораздавай конечно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS 1 868 Опубликовано: 24 февраля, 2016 (изменено) Еще была бы поддержка ключевых знаков по по аналогии с майночатом по типу "&6Привет, &3говнокодер!", а также "&FFFFFFПривет, &A8FFFFговнокодер!" - то вообще сок. А то запоминать все эти буффы, цвета - бр-р-р. Изменено 24 февраля, 2016 пользователем ECS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LeshaInc Автор темы 623 Опубликовано: 24 февраля, 2016 Еще была бы поддержка ключевых знаков по по аналогии с майночатом по типу "&6Привет, &3говнокодер!", а также "&FFFFFFПривет, &A8FFFFговнокодер!" - то вообще сок. А то запоминать все эти буффы, цвета - бр-р-р. Есть оно. color.core("\\F+AAAA00\\Цвет текста\\B+CCCCCC\\ Цвет фона") Не особо удобно так писать, хотя можно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
AlexCatze 56 Опубликовано: 11 февраля, 2021 (изменено) light_blue на самом деле зелёный)) разобрался, что не так Изменено 11 февраля, 2021 пользователем AlexCatze Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах