Модуль:MathWorld
Для документации этого модуля может быть создана страница Модуль:MathWorld/doc
-- сообщения об ошибке 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 "[http://mathworld.wolfram.com" .. path .. " " .. title .. "]" .. ref_en end --[[ готовая к отображению ссылка на entry по известным: urlname "RubiksCube" для ссылки "http://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