Module:Hatnote list: Difference between revisions

Undid revision 1062166786 by Matthiaspaul (talk); should be fixed now, and if not, please ping me with examples as I couldn't reproduce the original error
m (1 revision imported)
(Undid revision 1062166786 by Matthiaspaul (talk); should be fixed now, and if not, please ping me with examples as I couldn't reproduce the original error)
Line 9: Line 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')
Line 29: Line 30:
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
function stringifyList(list, options)
local 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")
Line 42: Line 50:
local s = options.space
local s = options.space
-- Format the list if requested
-- Format the list if requested
if options.formatted then list = mHatnote.formatPages(unpack(list)) end
if options.formatted then
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
Line 65: Line 73:


--DRY function
--DRY function
function conjList (conj, list, fmt)
function p.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 conjList("and", ...) end
function p.andList (...) return p.conjList("and", ...) end
function p.orList (...) return conjList("or", ...) end
function p.orList (...) return p.conjList("or", ...) end


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
Line 89: Line 97:


--Collapses duplicate punctuation
--Collapses duplicate punctuation
function punctuationCollapse (text)
local function punctuationCollapse (text)
local replacements = {
local replacements = {
["%.%.$"] = ".",
["%.%.$"] = ".",
Line 171: Line 179:
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 = p.andList(v.pages, true) or mHatnote._formatLink{link = mHatnote.disambiguate(options.title)}
local pagesStr =
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)
Anonymous user