---- Этот модуль содержит функции работы с текстом страницы
local p = {}
--[[
Функция возвращает названия всех секций на странице
Параметры:
1. page= имя страницы (текущая по умолчанию)
2. level= уровень секции (2 по умолчанию)
3. namespace= простраство имён (статьи); простраство имён можно передовать внутри имени страницы через двоеточие
4. delimiter= разделитель названий секций (' • ' по умолчанию)
Возвращаемое значение:
Строка, содержащая список всех секций, разделённых указанным разделителем
]]
function p.sections(frame)
local function getParameters( frame_args, arg_list )
local new_args = {};
local index = 1;
local value;
for i,arg in ipairs( arg_list ) do
value = frame_args[arg]
if value == nil then
value = frame_args[index];
index = index + 1;
end
new_args[arg] = value;
end
return new_args;
end
local new_args = getParameters( frame.args, { 'page', 'level', 'namespace', 'delimiter', 'get_numbers', 'firstonly' } );
local page = new_args['page'] or '';
local namespace = new_args['namespace'] or '';
local level = new_args['level'] or 2;
local delimiter = new_args['delimiter'] or '\n';
local get_numbers = new_args['get_numbers'] or false;
local firstonly = new_args['firstonly'] or false;
local pagepointer;
if page == '' then
pagepointer=mw.title.getCurrentTitle()
assert(pagepointer,"failed to access getCurrentTitle")
else
pagepointer=mw.title.new(page, namespace)
assert(pagepointer,"failed to access mw.title.new("..tostring(page)..")")
end
local text=pagepointer.getContent(pagepointer);
assert (text,"error: failed to get text from ".. page)
text= mw.ustring.gsub( text, "<!%-%-.-%-%->", "" ); -- убираем HTML комментарии
local hpref = mw.ustring.rep("=", tonumber(level));
local iterator = mw.ustring.gmatch(text, "\n" .. hpref .. "%s*([^=]-)%s*" .. hpref .."\n");
local sections = {};
local tocNumber = 1
for sectionname in iterator do
table.insert(sections, sectionname .. (get_numbers and ' [' .. tocNumber .. ']' or ''));
tocNumber = tocNumber + 1;
end
if firstonly then return sections[1] else
return table.concat(sections, delimiter);
end
end
return p