Модул:Pageparser

Мавод аз Википедиа — донишномаи озод
Ҳуҷҷатгузорӣ
 ---- Этот модуль содержит функции работы с текстом страницы
local p = {}
 
--[[ 
  Функция возвращает названия всех секций на странице
  
  Параметры:
  1. page= имя страницы (текущая по умолчанию)
  2. level= уровень секции (2 по умолчанию)
  3. namespace= простраство имён (статьи); простраство имён можно передовать внутри имени страницы через двоеточие
  4. delimiter= разделитель названий секций (' • ' по умолчанию)
  
  Возвращаемое значение:
  Строка, содержащая список всех секций, разделённых указанным разделителем
]]
function p.sections(frame)
    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' } );
    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 ' • ';
    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 = {};
    for sectionname in iterator do
        table.insert(sections, sectionname);    
    end
    return table.concat(sections, delimiter);
    
end

return p