Modul:Hatnote list: Unterschied zwischen den Versionen

Undid revision 1062157581 by Nihiltres (talk) Temp undo as Template:See also now throws errors like "Lua error: bad argument #1 to 'title.new' (number or string expected, got nil)." (for example in article Bronshtein and Semendyayev).
(Updated from sandbox to use Module:Format link, and export conjList (credit Jackmcbarn), and tag functions local, and extract searchDisp as a nested function)
(Undid revision 1062157581 by Nihiltres (talk) Temp undo as Template:See also now throws errors like "Lua error: bad argument #1 to 'title.new' (number or string expected, got nil)." (for example in article Bronshtein and Semendyayev).)
Zeile 9: Zeile 9:


local mArguments --initialize lazily
local mArguments --initialize lazily
local mFormatLink = require('Module:Format link')
local mHatnote = require('Module:Hatnote')
local mHatnote = require('Module:Hatnote')
local libraryUtil = require('libraryUtil')
local libraryUtil = require('libraryUtil')
Zeile 30: Zeile 29:
formatted = false
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
-- Stringifies a list generically; probably shouldn't be used directly
local function stringifyList(list, options)
function stringifyList(list, options)
-- Type-checks, defaults, and a shortcut
-- Type-checks, defaults, and a shortcut
checkType("stringifyList", 1, list, "table")
checkType("stringifyList", 1, list, "table")
Zeile 50: Zeile 42:
local s = options.space
local s = options.space
-- Format the list if requested
-- Format the list if requested
if options.formatted then
if options.formatted then list = mHatnote.formatPages(unpack(list)) end
list = mFormatLink.formatPages(
{categorizeMissing = mHatnote.missingTargetCat}, list
)
end
-- Set the separator; if any item contains it, use the alternate separator
-- Set the separator; if any item contains it, use the alternate separator
local separator = options.separator
local separator = options.separator
--searches display text only
local function searchDisp(t, f)
return string.find(string.sub(t, (string.find(t, '|') or 0) + 1), f)
end
for k, v in pairs(list) do
for k, v in pairs(list) do
if searchDisp(v, separator) then
if searchDisp(v, separator) then
Zeile 73: Zeile 65:


--DRY function
--DRY function
function p.conjList (conj, list, fmt)
function conjList (conj, list, fmt)
return stringifyList(list, {conjunction = conj, formatted = fmt})
return stringifyList(list, {conjunction = conj, formatted = fmt})
end
end


-- Stringifies lists with "and" or "or"
-- Stringifies lists with "and" or "or"
function p.andList (...) return p.conjList("and", ...) end
function p.andList (...) return conjList("and", ...) end
function p.orList (...) return p.conjList("or", ...) end
function p.orList (...) return conjList("or", ...) end


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
Zeile 97: Zeile 89:


--Collapses duplicate punctuation
--Collapses duplicate punctuation
local function punctuationCollapse (text)
function punctuationCollapse (text)
local replacements = {
local replacements = {
["%.%.$"] = ".",
["%.%.$"] = ".",
Zeile 179: Zeile 171:
for k, v in pairs(forSeeTable) do
for k, v in pairs(forSeeTable) do
local useStr = v.use or options.otherText
local useStr = v.use or options.otherText
local pagesStr =
local pagesStr = p.andList(v.pages, true) or mHatnote._formatLink{link = mHatnote.disambiguate(options.title)}
p.andList(v.pages, true) or
mFormatLink._formatLink{
categorizeMissing = mHatnote.missingTargetCat,
link = mHatnote.disambiguate(options.title)
}
local forSeeStr = string.format(options.forSeeForm, useStr, pagesStr)
local forSeeStr = string.format(options.forSeeForm, useStr, pagesStr)
forSeeStr = punctuationCollapse(forSeeStr)
forSeeStr = punctuationCollapse(forSeeStr)
Anonymer Benutzer