пятница, 11 марта 2011 г.

Календарь выводящий дату в текстовом формате

Данный скрипт, написан на LUA+CAIRO, можно использовать и для вывода любых текстов.







Скрипт

--[[ calendar_words.lua by olgmen 10.03.2011

Выводит текущую дату в текстовом формате. Данный скрипт можно использовать для вывода любых текстов. Текст должен быть заключён в кавычки.

    text        -- любой текст по умолчанию выводится фраза "Conky is good for you !"
    x, y        -- координаты по горизонтали и вертикали, по умолчанию центр окна конки
    colour        -- цвет текста, по умолчанию белый (0xffffff)
    alpha        -- насыщенность цвета, по умолчанию = 1
    font_name    -- названия шрифта, по умолчанию = "Ubuntu"
    font_size    -- размер шрифта, по умолчанию = 14
    angle        -- угол наклона текста, по умолчанию = 0
    italic        -- тип шрифта курсив, по умолчанию отключен = false
    bold        -- тип шрифта жирный, по умолчанию отключен = false
    h_align        -- центровка текста по горизонтали, по умолчанию = "l"
               Возможные варианты
               "l" - координаты слева от текста
               "c" - координаты посередине текста
               "r" - координаты справа от текста
    v_align        -- центровка текста по вертикали, по умолчанию = "b"
               Возможные варианты
               "b" - текст выше оси x
               "t" - текст ниже оси x
               "m" - ось x проходит по середине текста

Для подключения скрипта необходимо в conkyrc добавить строки выше слова TEXT

lua_load ~/путь_до_скрипта/calendar_words.lua
lua_draw_hook_pre conky_draw_calendar

]]

require 'cairo'

function string:split(delimiter)
    local result = { }
    local from  = 1
    local delim_from, delim_to = string.find( self, delimiter, from  )
    while delim_from do
        table.insert( result, string.sub( self, from , delim_from-1 ) )
        from  = delim_to + 1
        delim_from, delim_to = string.find( self, delimiter, from  )
        end
    table.insert( result, string.sub( self, from  ) )
    return result
end

function date_to_words()
    date = os.date("%d")            -- забираем число

    datecut = string.gsub(date, ".", "%1|")
    datetable = string.split(datecut, "|")

    if datetable[1] == "1" then
        datetens = ""
        datespacer = ""

        if datetable[2] == "0" then dateunit = "ДЕСЯТОЕ"
        elseif datetable[2] == "1" then dateunit = "ОДИННАДЦАТОЕ"
        elseif datetable[2] == "2" then dateunit = "ДВЕНАДЦАТОЕ"
        elseif datetable[2] == "3" then dateunit = "ТРИНАДЦАТОЕ"
        elseif datetable[2] == "4" then dateunit = "ЧЕТЫРНАДЦАТОЕ"
        elseif datetable[2] == "5" then dateunit = "ПЯТНАДЦАТОЕ"
        elseif datetable[2] == "6" then dateunit = "ШЕСТНАДЦАТОЕ"
        elseif datetable[2] == "7" then dateunit = "СЕМНАДЦАТОЕ"
        elseif datetable[2] == "8" then dateunit = "ВОСЕМНАДЦАТОЕ"
        elseif datetable[2] == "9" then dateunit = "ДЕВЯТНАДЦАТОЕ"
        end
    end

        
    if datetable[1] == "0" or datetable[1] > "1" then
        datespacer = ""
        if datetable[1] == "2" then datetens = "ДВАДЦАТЬ"
        elseif datetable[1] == "3" then datetens = "ТРИДЦАТЬ"
        elseif datetable[1] == "0" then datetens = ""
        end


        if datetable[2] == "1" then dateunit = "ПЕРВОЕ"
        elseif datetable[2] == "2" then dateunit = "ВТОРОЕ"
        elseif datetable[2] == "3" then dateunit = "ТРЕТЬЕ"
        elseif datetable[2] == "4" then dateunit = "ЧЕТВЕРТОЕ"
        elseif datetable[2] == "5" then dateunit = "ПЯТОЕ"
        elseif datetable[2] == "6" then dateunit = "ШЕСТОЕ"
        elseif datetable[2] == "7" then dateunit = "СЕДЬМОЕ"
        elseif datetable[2] == "8" then dateunit = "ВОСЬМОЕ"
        elseif datetable[2] == "9" then dateunit = "ДЕВЯТОЕ"
        elseif datetable[2] == "0" then dateunit = ""
            datespacer = ""
        end
    end


    if datetable[2] == "0" then
        datetens = ""
        datespacer = ""
        if datetable[1] == "2" then dateunit = "ДВАДЦАТОЕ"
        elseif datetable[1] == "3" then dateunit = "ТРИДЦАТОЕ"
        end
    end

    return ((datetens) .. (datespacer) .. (dateunit))
end

-- ----------------------------------------------------------------
function day_to_words()
    day = os.date("%u")            -- забираем день недели

    if day == "1" then day = "ПОНЕДЕЛЬНИК"
    elseif day == "2" then day = "ВТОРНИК"
    elseif day == "3" then day = "СРЕДА"
    elseif day == "4" then day = "ЧЕТВЕРГ"
    elseif day == "5" then day = "ПЯТНИЦА"
    elseif day == "6" then day = "СУББОТА"
    elseif day == "7" then day ="ВОСКРЕСЕНЬЕ"
    end


    return (day)
end

-- -----------------------------------------------------------------
function month_to_words()

    month = os.date("%m")                -- забираем месяц

    if month == "01" then month = "ЯНВАРЯ"
    elseif month == "02" then month = "ФЕВРАЛЯ"
    elseif month == "03" then month = "МАРТА"
    elseif month == "04" then month = "АПРЕЛЯ"
    elseif month == "05" then month = "МАЯ"
    elseif month == "06" then month = "ИЮНЯ"
    elseif month == "07" then month = "ИЮЛЯ"
    elseif month == "08" then month = "АВГУСТА"
    elseif month == "09" then month = "СЕНТЯБРЯ"
    elseif month == "10" then month = "ОКТЯБРЯ"
    elseif month == "11" then month = "НОЯБРЯ"
    elseif month == "12" then month = "ДЕКАБРЯ"
    end


    return (month)
end

function conky_draw_calendar()

    calendar_settings={
          
    {
    text = "СЕГОДНЯ" .. "  " .. day_to_words(),
    x = 150,
    y = 50,
    bold = true,
    h_align = "c",
    },

    {
    text = date_to_words(),
    x = 150,
    y = 70,
    bold = true,
    h_align = "c",
    },

    {
    text = month_to_words(),
    x = 150,
    y = 90,
    bold = true,
    h_align = "c",
    },

    {
    text = "СЕГОДНЯ" .. "    " .. day_to_words() .. "    " .. date_to_words() .. "    " .. month_to_words(),
    x = 250,
    y = 210,
    bold = true,
    h_align = "c",
    angle = 90,
    },

    {
    text = "СЕГОДНЯ" .. "  " .. day_to_words(),
    x = 140,
    y = 170,
    bold = true,
    h_align = "c",
    angle = 30,
    },

    {
    text = date_to_words(),
    x = 140,
    y = 200,
    bold = true,
    h_align = "c",
    angle = 30,
    },

    {
    text = month_to_words(),
    x = 140,
    y = 230,
    bold = true,
    h_align = "c",
    angle = 30,
    },

    {
    text = date_to_words(),
    x = 140,
    y = 290,
    bold = true,
    h_align = "c",
    colour = 0x46d111,
    alpha = 1,
    },

    {
    text = month_to_words(),
    x = 140,
    y = 310,
    bold = true,
    h_align = "c",
    colour = 0x46d111,
    alpha = 1,
    },

    {
    text = day_to_words(),
    x = 140,
    y = 330,
    bold = true,
    h_align = "c",
    colour = 0x46d111,
    alpha = 1,
    },

    }

    if conky_window == nil then return end

    if tonumber(conky_parse("$updates"))<3 then return end

    local cs = cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)

    for i,v in pairs(calendar_settings) do

        cr = cairo_create (cs)

        display_calendar(v)
        cairo_destroy(cr)
    end

    cairo_surface_destroy(cs)
end

-- -----------------------------------------
-- функция перекодировки цвета
function rgb_to_r_g_b(colour,alpha)
    return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end

-- -----------------------------------------

function display_calendar(t)

    if t.text    == nil then t.text = "Conky is good for you !" end
    if t.x        == nil then t.x = conky_window.width/2 end
    if t.y        == nil then t.y = conky_window.height/2 end
    if t.colour    == nil then t.colour = 0xffffff end
    if t.alpha    == nil then t.alpha = 1 end
    if t.font_name    == nil then t.font_name = "Ubuntu" end
    if t.font_size    == nil then t.font_size = 14 end
    if t.angle    == nil then t.angle = 0 end
    if t.italic    == nil then t.italic = false end

    if t.bold    == nil then t.bold = false end
    if t.h_align    == nil then t.h_align = "l" end
    if t.v_align    == nil then t.v_align = "b" end

    cairo_translate(cr, t.x, t.y)
    cairo_rotate(cr, t.angle*math.pi/180)

-- настройка шрифта
    local slant = CAIRO_FONT_SLANT_NORMAL
    local weight =CAIRO_FONT_WEIGHT_NORMAL

    if t.italic then slant = CAIRO_FONT_SLANT_ITALIC end
    if t.bold then weight = CAIRO_FONT_WEIGHT_BOLD end

    cairo_select_font_face(cr, t.font_name, slant, weight)

    cairo_set_font_size(cr, t.font_size)

    te=cairo_text_extents_t:create()
    cairo_text_extents (cr,t.text,te)


    cairo_set_source_rgba(cr, rgb_to_r_g_b(t.colour, t.alpha))
          
    mx,my=0,0
  
    if t.h_align=="c" then
        mx=-te.width/2
    elseif t.h_align=="r" then
        mx=-te.width
    end

    if t.v_align=="m" then
        my=-te.height/2-te.y_bearing
    elseif t.v_align=="t" then
        my=-te.y_bearing
    end
    cairo_move_to(cr,mx,my)
  
    cairo_show_text(cr,t.text)
   
end


Скачать можно здесь

Комментариев нет:

Отправить комментарий