Модул:parsepage
Documentation for this module may be created at Модул:parsepage/doc
local function escre(s)
return s:gsub("[?^$%(%)%%.%[%]*+-]","%%%0")
end
local function getSection(page, secs) -- page,[level1, level2, ...]
local npage = mw.title.new(page);
local content = (npage and npage:getContent()) or ''
local code = content:gsub("<!--.*-->",'');
-- Ошибается, если комментарии заключены в тэги типа nowiki, но будем надеяться, этого в статьях не будет
for i = 1, 6 do
if secs[i] then
local c = table.concat{ ('='):rep(i),"%s*",escre(secs[i]),"%s*",('='):rep(i),"%s*\n" }
local hs,hf = code:find( "\n"..c )
if not hs then
hs,hf = code:find( "^"..c )
end
if not hs then return nil end
-- Конец секции - не более i знаков = или конец кода
local eos = code:find( "\n(="..("=?"):rep(i-1)..")[^=\n][^\n]*%1%s*\n", hf )
if eos then code = code:sub(hf+1,eos-1) else code = code:sub(hf+1) end
end
end
return code
end
return {
getSection = getSection,
section = function(frame) -- page="Page", 3="Section"; с параметром u=... берёт числа из шаблона
local pf,a = frame:getParent()
if frame.args.u then a = pf.args else a=frame.args end
return getSection( (frame.args.page or pf.args.page), a )
end
}