Перейти к содержимому
LeshaInc

Rainbow - цветной вывод

Рекомендуемые сообщения

HE0meKY.png

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"))
)

jlqKb8O.png

 

 

 

Тест палитры:

 

 

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

nmm58H0.png

 

 

 


 

Мануал

Ядро

Ядро 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Привет, &3говнокодер!", а также "&FFFFFFПривет, &A8FFFFговнокодер!" - то вообще сок. А то запоминать все эти буффы, цвета - бр-р-р.

 

7514d823845dbadcc9b202b6c16ee6b3.png

Изменено пользователем ECS

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Еще была бы поддержка ключевых знаков по по аналогии с майночатом по типу "&6Привет, &3говнокодер!", а также "&FFFFFFПривет, &A8FFFFговнокодер!" - то вообще сок. А то запоминать все эти буффы, цвета - бр-р-р.

 

7514d823845dbadcc9b202b6c16ee6b3.png

 

Есть оно.

 

color.core("\\F+AAAA00\\Цвет текста\\B+CCCCCC\\ Цвет фона")

Не особо удобно так писать, хотя можно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...