Модуль:СтихКолонки: различия между версиями
Grayenot (обсуждение | вклад) мНет описания правки |
Grayenot (обсуждение | вклад) мНет описания правки |
||
Строка 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 | -- Объединяем аргументы | ||
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 | |||
-- Обрабатываем вики-разметку в тексте | |||
content = frame:preprocess(content) | |||
-- Разделяем текст на строфы | |||
local stanzas = mw.text.split(content, '%s*n%s*n%s*') | 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;">' | 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) | ||
result = result .. '<div style="break-inside: avoid; white-space: pre-wrap;">' .. mw.text. | -- Используем 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>' | |||
end | end | ||
Версия от 19:11, 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 -- Обрабатываем вики-разметку в тексте content = frame:preprocess(content) -- Разделяем текст на строфы 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;">' for i, stanza in ipairs(stanzas) do 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>' end result = result .. '</div>' return result end return p