Перейти к содержанию

Модуль:CategorySator

Материал из Викиучебника — открытых книг для открытого мира

Для документации этого модуля может быть создана страница Модуль:CategorySator/doc

local p = {}

function p.Cat(frame)
    -- Получаем исходный текст из параметров; если параметр не передан, то пустая строка.
    local input = frame.args[1] or ""
    -- Разбиваем строку на элементы по запятой.
    local words = mw.text.split(input, ",")
    local categories = {}
    local originalLinks = {}
    
    for i, word in ipairs(words) do
        -- Убираем лишние пробелы.
        local trimmed = mw.text.trim(word)
        if trimmed ~= "" then
            -- Формируем категорию для дальнейшего использования.
            table.insert(categories, "[[Категория:" .. trimmed .. "]]")
            -- Формируем ссылку для исходного текста.
            table.insert(originalLinks, "[[:Категория:" .. trimmed .. "|" .. trimmed .. "]]")
        end
    end
    
    -- Собираем исходный текст в виде списка ссылок, разделённых запятой и пробелом.
    local originalTextFormatted = table.concat(originalLinks, ", ")
    -- Собираем итоговый результат: сначала вывод исходного текста, затем каждая категория с новой строки.
    local output = originalTextFormatted .. "\n" .. table.concat(categories, "\n")
    return output
end

function p.Book(frame)
    -- Получаем исходный текст из параметров; если параметр не передан, то пустая строка.
    local input = frame.args[1] or ""
    -- Разбиваем строку на элементы по запятой.
    local words = mw.text.split(input, ",")
    local categories = {}
    
    for i, word in ipairs(words) do
        -- Убираем лишние пробелы.
        local trimmed = mw.text.trim(word)
        if trimmed ~= "" then
            -- Формируем категорию для дальнейшего использования.
            table.insert(categories, "[[Категория:" .. trimmed .. "]]")
            -- Формируем ссылку для исходного текста.
        end
    end
   
    -- Собираем итоговый результат: сначала вывод исходного текста, затем каждая категория с новой строки.
    local output = table.concat(categories, "\n")
    return output
end


-- Функция для обрезки пробелов по краям строки
local function trim(s)
    return (s:gsub("^%s*(.-)%s*$", "%1"))
end

-- Функция для преобразования первой буквы строки в заглавную
local function firstToUpper(s)
    if s == "" then return "" end
    return s:sub(1,1):upper() .. s:sub(2)
end

function p.main(frame)
    local input = frame.args[1] or ""
    local output = {}
    
    -- Разбиваем строку по запятым
    for token in string.gmatch(input, "[^,]+") do
        local word = trim(token)
        word = firstToUpper(word)
        table.insert(output, string.format("[[:Категория:%s|%s]]", word, word))
    end
    
    return table.concat(output, ", <br/> ")
end


return p