мНет описания правки
мНет описания правки
Строка 1: Строка 1:
-- Модуль:СтихКолонки
local p = {}
local p = {}


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


     -- Ограничиваем максимальное количество колонок до 4
     local stanzas = mw.text.split(content, '%s*n%s*n%s*')
    max_columns = math.min(max_columns, 4)
     local result = '<div class="column-container" style="column-count:' .. max_columns .. '; column-gap: 1em;">'
     if max_columns < 1 then max_columns = 4 end  -- Убеждаемся, что число колонок не меньше 1


    local content = args[2] or ''  -- Захватываем весь текст из второго аргумента
     for i, stanza in ipairs(stanzas) do
 
         stanza = mw.text.trim(stanza)
    -- Обрабатываем содержимое, разбивая по пустым строкам
         result = result .. '<div style="break-inside: avoid; white-space: pre-wrap;">' .. mw.text.encode(stanza) .. '</div>'
    local parts = mw.text.split(content, '<br />')
    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)
        -- Добавляем стиль break-inside: avoid
         result = result .. '<div class="column-break" style="break-inside: avoid; page-break-inside: avoid; -webkit-column-break-inside: avoid;">' .. part .. '</div>'
     end
     end



Версия от 18:57, 2 ноября 2024

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

local p = {}

function p.main(frame)
    local content = frame:getParent().args[1] or ''
    local max_columns = tonumber(frame.args['колонок']) or 2

    local stanzas = mw.text.split(content, '%s*n%s*n%s*')
    local result = '<div class="column-container" style="column-count:' .. max_columns .. '; column-gap: 1em;">'

    for i, stanza in ipairs(stanzas) do
        stanza = mw.text.trim(stanza)
        result = result .. '<div style="break-inside: avoid; white-space: pre-wrap;">' .. mw.text.encode(stanza) .. '</div>'
    end

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

return p