мНет описания правки
Метки: ручная отмена отменено
мНет описания правки
 
(не показано 8 промежуточных версий этого же участника)
Строка 1: Строка 1:
-- Модуль:СтихКолонки
local p = {}
local p = {}


function p.main(frame)
function p.main(frame)
     local args = frame.args
     local args = frame.args
     local max_columns = tonumber(args[1]) or 4  -- По умолчанию 4 колонки
     local parentArgs = frame:getParent().args


     -- Ограничиваем максимальное количество колонок до 4
     local allArgs = {}
     max_columns = math.min(max_columns, 4)
     for k, v in pairs(parentArgs) do
     if max_columns < 1 then max_columns = 4 end -- Убеждаемся, что число колонок не меньше 1
        allArgs[k] = v
    end
    for k, v in pairs(args) do
        allArgs[k] = v
     end


     local content = args[2] or '' -- Захватываем весь текст из второго аргумента
     local content = allArgs[1] or ''
    local max_columns = tonumber(allArgs['колонок']) or 2


     -- Обрабатываем содержимое, разбивая по трем или более переводам строки
     -- Разделяем текст на строфы по двойному переносу строки
     local parts = mw.text.split(content, 'n%s*n%s*n')
     local stanzas = mw.text.split(content, 'nn')
    local result = '<div class="column-container" style="column-count:' .. max_columns .. '; -webkit-column-count:' .. max_columns .. ';">'


     for i, part in ipairs(parts) do
    -- Формируем стиль для контейнера колонок с явным указанием всех префиксов
         part = mw.text.trim(part)
    local column_style = string.format([[
         -- Если часть не пуста, добавляем её
        -webkit-column-count: %d;
         if part ~= '' then
        -moz-column-count: %d;
            -- Добавляем стиль break-inside: avoid
        column-count: %d;
            result = result .. '<div class="column-break" style="break-inside: avoid; page-break-inside: avoid; -webkit-column-break-inside: avoid;">' .. part .. '</div>'
        column-gap: 1em;
        end
    ]], max_columns, max_columns, max_columns)
 
    -- Начало контейнера
    local result = '<div class="column-container" style="' .. column_style .. '">'
 
     for i, stanza in ipairs(stanzas) do
         stanza = mw.text.trim(stanza)
         -- Обрабатываем вики-разметку для каждой строфы отдельно
         stanza = frame:preprocess(stanza)
        result = result .. '<div>' .. stanza .. '</div>'
     end
     end



Текущая версия от 19:25, 2 ноября 2024

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

local p = {}

function p.main(frame)
    local args = frame.args
    local parentArgs = frame:getParent().args

    local allArgs = {}
    for k, v in pairs(parentArgs) do
        allArgs[k] = v
    end
    for k, v in pairs(args) do
        allArgs[k] = v
    end

    local content = allArgs[1] or ''
    local max_columns = tonumber(allArgs['колонок']) or 2

    -- Разделяем текст на строфы по двойному переносу строки
    local stanzas = mw.text.split(content, 'nn')

    -- Формируем стиль для контейнера колонок с явным указанием всех префиксов
    local column_style = string.format([[
        -webkit-column-count: %d;
        -moz-column-count: %d;
        column-count: %d;
        column-gap: 1em;
    ]], max_columns, max_columns, max_columns)

    -- Начало контейнера
    local result = '<div class="column-container" style="' .. column_style .. '">'

    for i, stanza in ipairs(stanzas) do
        stanza = mw.text.trim(stanza)
        -- Обрабатываем вики-разметку для каждой строфы отдельно
        stanza = frame:preprocess(stanza)
        result = result .. '<div>' .. stanza .. '</div>'
    end

    result = result .. '</div>'
    return result
end

return p