Модуль:Aggregator Clear: различия между версиями
Материал из Поле цифровой дидактики
Patarakin (обсуждение | вклад) Новая страница: «local p = {} local function getArgs(frame) local args = {} for k, v in pairs(frame.args) do if type(v) == 'string' and v ~= '' then args[k] = mw.text.trim(v) end end return args end local function getTitleObject(titleText) if not titleText or titleText == '' then return mw.title.getCurrentTitle() end return mw.title.new(titleText) end local function getContent(titleText) local titleObj =...» |
Patarakin (обсуждение | вклад) Нет описания правки |
||
| Строка 69: | Строка 69: | ||
function p.args(frame) | function p.args(frame) | ||
local args = getArgs(frame) | local args = getArgs(frame) | ||
return | return countArgs(args) | ||
end | end | ||
| Строка 78: | Строка 78: | ||
return err | return err | ||
end | end | ||
return | return #text | ||
end | end | ||
| Строка 96: | Строка 96: | ||
return err | return err | ||
end | end | ||
return | return countLinks(text) | ||
end | end | ||
| Строка 105: | Строка 105: | ||
return err | return err | ||
end | end | ||
return | return countHeadings(text) | ||
end | end | ||
| Строка 123: | Строка 123: | ||
return p.headings(frame) | return p.headings(frame) | ||
else | else | ||
return 'Ошибка: неизвестный режим | return 'Ошибка: неизвестный режим' | ||
end | end | ||
end | end | ||
return p | return p | ||
Текущая версия от 08:04, 21 мая 2026
Модуль используется внутри проекта Статистическое сравнение страниц
- Предполагается, что функции модуля отдают числа, которые далее используются для статистического анализа
local p = {}
local function getArgs(frame)
local args = {}
for k, v in pairs(frame.args) do
if type(v) == 'string' and v ~= '' then
args[k] = mw.text.trim(v)
end
end
return args
end
local function getTitleObject(titleText)
if not titleText or titleText == '' then
return mw.title.getCurrentTitle()
end
return mw.title.new(titleText)
end
local function getContent(titleText)
local titleObj = getTitleObject(titleText)
if not titleObj then
return nil, 'Ошибка: некорректное имя страницы'
end
local content = titleObj:getContent()
if not content then
return nil, 'Ошибка: страница не существует или содержимое недоступно'
end
return content, nil
end
local function countArgs(args)
local n = 0
for _ in pairs(args) do
n = n + 1
end
return n
end
local function countWords(text)
local n = 0
for _ in mw.ustring.gmatch(text, '%S+') do
n = n + 1
end
return n
end
local function countLinks(text)
local n = 0
for _ in mw.ustring.gmatch(text, '%[%[[^%]]+%]%]') do
n = n + 1
end
return n
end
local function countHeadings(text)
local n = 0
for _ in mw.ustring.gmatch(text, '\n==+[^=\n]+==+') do
n = n + 1
end
if mw.ustring.match(text, '^==+[^=\n]+==+') then
n = n + 1
end
return n
end
function p.args(frame)
local args = getArgs(frame)
return countArgs(args)
end
function p.chars(frame)
local args = getArgs(frame)
local text, err = getContent(args.title)
if not text then
return err
end
return #text
end
function p.words(frame)
local args = getArgs(frame)
local text, err = getContent(args.title)
if not text then
return err
end
return countWords(text)
end
function p.links(frame)
local args = getArgs(frame)
local text, err = getContent(args.title)
if not text then
return err
end
return countLinks(text)
end
function p.headings(frame)
local args = getArgs(frame)
local text, err = getContent(args.title)
if not text then
return err
end
return countHeadings(text)
end
function p.main(frame)
local args = getArgs(frame)
local mode = args.mode or 'args'
if mode == 'args' then
return p.args(frame)
elseif mode == 'chars' then
return p.chars(frame)
elseif mode == 'words' then
return p.words(frame)
elseif mode == 'links' then
return p.links(frame)
elseif mode == 'headings' then
return p.headings(frame)
else
return 'Ошибка: неизвестный режим'
end
end
return p
