Модуль:Алфавит
Внешний вид
Для документации этого модуля может быть создана страница Модуль:Алфавит/Документация
-- модуль для формирования блока алфавита для индексов
-- загрузка модуля данных с таблицей языков
local languages = mw.loadData("Module:language/data");
local p = {};
function p.generate_alphabet_first_links(frame)
local code = frame.args['lang']
local reversed = frame.args['reversed']
local data = languages[code]
local result = ''
if data['alphabet'] then
alphabet = data['alphabet']
if reversed ~= '' then
alphabet = mw.ustring.lower(alphabet)
end
letters = string.gmatch(alphabet, '([^ ]+)')
for letter in letters do
if reversed ~= '' then
letter = '-' .. letter -- добавить дефис перед буквой
end
-- нам нужна такая строка: "[[../A|A]] • ":
result = result .. "[[../" .. letter .. "|" .. letter .. "]] • "
end
end
return result
end
function get_array(iterator)
local items = {}
local i = 1
for item in iterator do
items[i] = item
i = i + 1
end
return items
end
function p.generate_alphabet_other_links(frame)
local items = frame.args['items']
local reversed = frame.args['reversed']
local result = ''
items = string.gmatch(items, '([^,]+)')
for item in items do
-- "[[../X#xx|xx]] · " - если содержит символ '#'
-- "[[#xx|xx]]↓ · " - если все буквы маленькие
-- "[[../Xx|xx]] · " - если начинается с большой буквы
pos = string.find(item, '#')
if reversed ~= '' then
if pos ~= nil then
parts_iterator = string.gmatch(item, '([^#]+)') -- пытаемся делить по '#'
parts = get_array(parts_iterator)
result = result .. "[[../" .. parts[1] .. "#-" .. parts[2] .. "|-" .. parts[2] .. "]] · "
elseif string.byte(item) ~= string.byte("-") then
result = result .. "[[#-" .. item .. "|-" .. item .. "]]↓ · "
else
result = result .. "[[../" .. item .. "|" .. item .. "]] · "
end
else
if pos ~= nil then
parts_iterator = string.gmatch(item, '([^#]+)') -- пытаемся делить по '#'
parts = get_array(parts_iterator)
result = result .. "[[../" .. parts[1] .. "#" .. parts[2] .. "|" .. parts[2] .. "]] · "
elseif mw.ustring.lower(item) == item then
result = result .. "[[#" .. item .. "|" .. item .. "]]↓ · "
else
result = result .. "[[../" .. item .. "|" .. mw.ustring.lower(item) .. "]] · "
end
end
end
if result ~= '' then
result = result:sub(1,#result-3) -- убираем последнюю "·" из результата
end
return result
end
return p