Модуль:SortedCategory
Этому модулю не хватает документации. |
--[[
------------------------------------------
-- SortedCategory
-- Модуль для сортированного заполнения категорий.
------------------------------------------
--]]
local SortedCategory = {}
local GetArticleDate = require("Module:GetArticleDate")
local SerializeTable = require("Module:SerializeTable")
local StringDates2Need = require("Module:StringDates2Need")
function SortedCategory.launch(frame)
local newsDate = GetArticleDate.launchCurrentPage(frame)
local key
local categories = ""
if newsDate == nil or newsDate == "" then
key = " "
categories = categories .. "[[Категория:Дата не распарсилась]]"
else
key = SortedCategory.KeySort(newsDate)
if key == nil then
key = " "
categories = categories .. "[[Категория:Дата не распарсилась" .. frame.args[index] .. "]]"
end
end
index = 1
while frame.args[index] ~= nil do
if (frame.args[index] ~= " " and frame.args[index] ~= "" and string.find(frame.args[index], "{{{") == nil) then
if key ~= " " and key ~= nil then categories = categories .. "[[Категория:" .. frame.args[index] .. "| " .. key .. "]]" --добавляет датой ключ, если распарсилась
else categories = categories .. "[[Категория:" .. frame.args[index] .. "]]" end
end
index = index + 1
end
return categories
end
function SortedCategory.KeySort(newsDate) --Year, month, day
local s = newsDate
if (s == nil or s == '') then return 0 end
local dd = ""
local mm = ""
local yy = ""
for i=1, #s do
local c = s:sub(i,i)
if c == ' ' then break
elseif c < '0' or c > '9' then return nil
else dd = dd .. c end
end
if #dd == 1 then dd = "0" .. dd end
if string.find(s, "января") or string.find(s, "январь") then mm = "01"
elseif string.find(s, "февраля") or string.find(s, "февраль") then mm = "02"
elseif string.find(s, "марта") or string.find(s, "март") then mm = "03"
elseif string.find(s, "апреля") or string.find(s, "апрель") then mm = "04"
elseif string.find(s, "мая") or string.find(s, "май") then mm = "05"
elseif string.find(s, "июня") or string.find(s, "июнь") then mm = "06"
elseif string.find(s, "июля") or string.find(s, "июль") then mm = "07"
elseif string.find(s, "августа") or string.find(s, "август") then mm = "08"
elseif string.find(s, "сентября") or string.find(s, "сентябрь") then mm = "09"
elseif string.find(s, "октября") or string.find(s, "октябрь") then mm = "10"
elseif string.find(s, "ноября") or string.find(s, "ноябрь") then mm = "11"
elseif string.find(s, "декабря") or string.find(s, "декабрь") then mm = "12"
else return nil
end
for i=#s-1, 1, -1 do
local c = s:sub(i,i)
if c == ' ' then break
elseif c < '0' or c > '9' then return nil
else yy = c .. yy end
end
if #yy == 1 then yy = "000" .. yy
elseif #yy == 2 then yy = "00" .. yy
elseif #yy == 3 then yy = "0" .. yy
end
local ISO = yy .. mm .. dd
local sum = string.match(ISO, "%d+%.?%d*")
local key = tostring(1000000000 - sum)
return key
--return tonumber(yy)
--local answer = tonumber(yy) + tonumber(mm) + tonumber(dd)
--return answer
end
return SortedCategory