Модуль:Hatnote list
Перейти к навигации
Перейти к поиску
Модуль предназначен для реализации hatnote-шаблонов (например, {{перенаправление}}, {{Redirect-multi}}).
Использование в других модулях
[править код]Некоторые функции используются в следующих модулях (проверить):
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local p = {}
--default options table used across the list stringification functions
local stringifyListDefaultOptions = {
conjunction = 'и',
separator = ',',
altSeparator = ';',
space = ' ',
formatted = false
}
--Searches display text only
local function searchDisp(haystack, needle)
return string.find(
string.sub(haystack, (string.find(haystack, '|') or 0) + 1), needle
)
end
-- Stringifies a list generically; probably shouldn't be used directly
local function stringifyList(list, options)
-- Type-checks, defaults, and a shortcut
checkType('stringifyList', 1, list, 'table')
if #list == 0 then return nil end
checkType('stringifyList', 2, options, 'table', true)
options = options or {}
for k, v in pairs(stringifyListDefaultOptions) do
if options[k] == nil then options[k] = v end
end
local s = options.space
-- Set the separator; if any item contains it, use the alternate separator
local separator = options.separator
for k, v in pairs(list) do
if searchDisp(v, separator) then
separator = options.altSeparator
break
end
end
-- Set the conjunction
local conjunction = s .. options.conjunction .. s
-- Return the formatted string
return mw.text.listToText(list, separator .. s, conjunction)
end
--DRY function
function p.conjList (conj, list, fmt)
return stringifyList(list, {conjunction = conj, formatted = fmt})
end
function p.disambiguate(page, disambiguator)
-- Форматирует заголовок страницы со скобками для устранения неоднозначности,
-- то есть «Пример» → «Пример (значения)».
checkType('disambiguate', 1, page, 'string')
checkType('disambiguate', 2, disambiguator, 'string', true)
disambiguator = disambiguator or 'значения'
return mw.ustring.format('%s (%s)', page, disambiguator)
end
function p.forSee(z)
if z then return z .. ' см.' end
return 'см. также'
end
function p.otherUse(z, y)
if not y then return '' end
if z then return '[[' .. y .. ']]' end
return '[[' .. y .. '|другие значения]]'
end
return p