мНет описания правки
мНет описания правки
Строка 2: Строка 2:


function p.main(frame)
function p.main(frame)
    -- Получаем аргументы из текущего фрейма и родительского
     local args = frame.args
     local args = frame.args
     local parentArgs = frame:getParent().args
     local parentArgs = frame:getParent().args


    -- Объединяем аргументы
     local allArgs = {}
     local allArgs = {}
     for k, v in pairs(parentArgs) do
     for k, v in pairs(parentArgs) do
Строка 15: Строка 13:
     end
     end


    -- Получаем текст и количество колонок
     local content = allArgs[1] or ''
     local content = allArgs[1] or ''
     local max_columns = tonumber(allArgs['колонок']) or 2
     local max_columns = tonumber(allArgs['колонок']) or 2


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


    -- Разделяем текст на строфы
    local stanzas = mw.text.split(content, '%s*n%s*n%s*')
     local result = '<div class="column-container" style="-moz-column-count:' .. max_columns .. '; -webkit-column-count:' .. max_columns .. '; column-count:' .. max_columns .. '; column-gap: 1em;">'
     local result = '<div class="column-container" style="-moz-column-count:' .. max_columns .. '; -webkit-column-count:' .. max_columns .. '; column-count:' .. max_columns .. '; column-gap: 1em;">'


     for i, stanza in ipairs(stanzas) do
     for i, stanza in ipairs(stanzas) do
         stanza = mw.text.trim(stanza)
         stanza = mw.text.trim(stanza)
         -- Используем mw.text.nowiki для исключения проблем с парсингом
         -- Обрабатываем вики-разметку для каждой строфы отдельно
         result = result .. '<div style="break-inside: avoid; page-break-inside: avoid; -webkit-column-break-inside: avoid; white-space: pre-wrap;">' .. mw.text.nowiki(stanza) .. '</div>'
        stanza = frame:expandTemplate{ title = 'Block', args = { stanza } }
         result = result .. stanza
     end
     end



Версия от 19:17, 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 result = '<div class="column-container" style="-moz-column-count:' .. max_columns .. '; -webkit-column-count:' .. max_columns .. '; column-count:' .. max_columns .. '; column-gap: 1em;">'

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

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

return p