-- сообщения об ошибке
function err(s)
return "<span style=\"color:red\">" .. s .. "</span>"
end
function errParamNotSpecified(name)
return err("не указан параметр <code>|" .. name .. " = </code>")
end
-- Обеспечивает наличие в конце строки хотя бы одной точки.
function EnsureDot(s)
return mw.ustring.gsub(s, "([^%.])$", "%1.")
end
-- Удаляет из строки последнюю точку, если она есть.
function RemoveDot(s)
return mw.ustring.gsub(s, "%.$", "")
end
-- Курсив
function Italic(s)
return "''" .. s .. "''"
end
--[[
почти не оформленная ссылка на MathWorld по известным:
path Часть URL, начиная с '/'
title Отображаемый заголовок
]]
function RawMWLink(frame, path, title)
local ref_en = frame:expandTemplate({title = "ref-en"})
return "[https://mathworld.wolfram.com" .. path .. " " .. title .. "]" .. ref_en
end
--[[
готовая к отображению ссылка на entry по известным:
urlname "RubiksCube" для ссылки "https://mathworld.wolfram.com/RubiksCube.html"
title Заголовок для отображения ("Rubik's Cube" в предыдущем примере)
author Автор entry (часто, но не всегда, "Weisstein, Eric W.")
]]
function MWEntryByAuthorTitleUrlname(frame, author, title, urlname)
local path = "/" .. urlname .. ".html"
local link = RawMWLink(frame, path, title)
local tail = " на сайте Wolfram [[MathWorld]]."
return Italic(EnsureDot(author)) .. " " .. link .. tail
end
--[[ exported functions ]]
local p = {}
-- реализация шаблона {{MathWorld}}
function p.MathWorld(_frame)
-- прямой доступ к параметрам вызывающего шаблона
local frame = _frame:getParent()
-- urlname
local urlname = frame.args[1] or frame.args["urlname"] or frame.args["id"]
if urlname == nil then
return errParamNotSpecified("urlname")
end
-- title
local title = frame.args[2] or frame.args["title"]
if title == nil then
return errParamNotSpecified("title")
end
-- author
local author = frame.args["author"] or "Weisstein, Eric W"
-- оформить ссылку
return MWEntryByAuthorTitleUrlname(frame, author, title, urlname)
end
-- реализация шаблона {{MathWorld3}}
function p.MathWorld3(_frame)
local function UrlnameFromTitle(title)
local replacements = {
{"[ ']", ""},
{"[áâ]", "a"},
{"é", "e"},
{"ö", "oe"}
}
local s = title
for i, r in ipairs(replacements) do
s = mw.ustring.gsub(s, r[1], r[2])
end
return s
end
local frame = _frame:getParent()
-- title, urlname
local title
local urlname
if frame.args[1] and frame.args[2] then
-- порядок как в {{MathWorld}}
urlname, title = frame.args[1], frame.args[2]
else
title = frame.args[1]
if title == nil then
return err("не указан заголовок (пример: <code>" ..
mw.text.nowiki("{{MathWorld3|Rubik's Cube}}") ..
"</code>)")
end
urlname = UrlnameFromTitle(title)
end
-- author
local author = frame.args["author"] or "Weisstein, Eric W"
-- оформить ссылку
return MWEntryByAuthorTitleUrlname(frame, author, title, urlname)
end
return p