Модуль:MetaCatDoc (Bk;rl,&MetaCatDoc)
Перейти к навигации
Перейти к поиску
Модуль для создания страницы документации шаблонов, использующих модули
Модуль генерирует список категорий и список шаблонов. Используется в шаблонах {{year-doc}}, {{decade-doc}}, {{century-doc}} и {{country-doc}}.
Пример: {{#invoke:MetaCatDoc|main}}
в шаблоне «{{Архитектура по векам}}» покажет
Добавляет категории:
- Искусство <век> века
- Архитектура по векам
Добавляет шаблон:
- {{Родственные проекты|Портал=Архитектура}}
---*- mode: lua; coding: utf-8; -*-
local p = {}
local title = mw.title.getCurrentTitle().text
local getArgs = require('Module:Arguments').getArgs
local toroman = require('Module:Roman').convert
local ft = string.format
-- Функция для замены шаблонов {{templatename из заголовка|...}} на templatename
local function replaceTemplates(text)
text = string.gsub(text, '{{%s*([^|{}]-)%s*из заголовка[^}]*}}', '<%1>')
return text
end
function p.main(frame)
local args = getArgs(frame)
title = args['title'] or title
local templ = string.gsub(title, '/doc$', '') -- rm /doc
local text = mw.title.new(templ,10):getContent()
text = replaceTemplates(text) -- замена вхождений шаблонов парсинга слов из заголовка
text = string.gsub(text, '<noinclude>.-</noinclude>', '')
text = string.gsub(text, '<!--.--->', '')
if string.find(text, 'YearMetaCat2') then
mn = 'YearMetaCat2'
elseif string.find(text, 'DecadeMetaCat') then
mn = 'DecadeMetaCat'
elseif string.find(text, 'CenturyMetaCat') then
mn = 'CenturyMetaCat'
elseif string.find(text, 'CountryMetaCat') then
mn = 'CountryMetaCat'
else
error('не найден модуль (YearMetaCat2/DecadeMetaCat/CenturyMetaCat/CountryMetaCat)')
end
local ret = "'''Добавляет категории:'''\n"
local cats = string.gsub(text, '.-{{#invoke:'..mn..'|main(.-)}}.*', '%1')
for _, c in ipairs(mw.text.split(cats, '|', true)) do
if c ~= '' and not string.find(c, '=') then
local cc = mw.text.split(c, '!', true)
local c1 = mw.text.trim(cc[1])
if mn == 'CenturyMetaCat' then
local c3 = mw.text.trim(cc[3] or '')
local c4 = mw.text.trim(cc[4] or '')
local ss
if c3 ~= '' and c4 ~= '' then
c3 = tonumber(c3)
c4 = tonumber(c4)
if c3 < 0 and c4 < 0 then
ss = ft('%s [с %s по %s века до н. э.]', c1, toroman(-c3), toroman(-c4))
elseif c3 < 0 and c4 > 0 then
ss = ft('%s [с %s века до н. э. по %s век]', c1, toroman(-c3), toroman(c4))
else
ss = ft('%s [с %s по %s века]', c1, toroman(c3), toroman(c4))
end
elseif c3 ~= '' then
c3 = tonumber(c3)
if c3 < 0 then
ss = ft('%s [с %s века до н. э.]', c1, toroman(-c3))
else
ss = ft('%s [с %s века]', c1, toroman(c3))
end
elseif c4 ~= '' then
c4 = tonumber(c4)
if c4 < 0 then
ss = ft('%s [до %s века до н. э.]', c1, toroman(-c4))
else
ss = ft('%s [до %s века]', c1, toroman(c4))
end
else
ss = c1
end
ret = ret..'* '..ss..'\n'
else -- not century
ret = ret..'* '..c1..'\n'
end
end
end
local templs = ''
local n = 0
for t in string.gmatch(text, '{{[^#].-}}') do
t = mw.text.trim(string.sub(t, 3, -3))
t = string.gsub(t, '{{#invoke:'..mn..'|expand|', '')
n = n + 1
local i = string.find(t, '|')
if i then
local tn = string.sub(t, 0, i-1)
local a = string.sub(t, i)
templs = templs..ft('* {{[[Ш:%s|%s]]%s}}\n', tn, tn, a)
else
templs = templs..ft('* {{[[Ш:%s|%s]]}}\n', t, t)
end
end
if n == 1 then
ret = ret.."'''Добавляет шаблон:'''\n"..templs
elseif n > 1 then
ret = ret.."'''Добавляет шаблоны:'''\n"..templs
end
return ret
end
return p