پودمان:Hatnote list: تفاوت میان نسخه‌ها

۵۹۸ بایت اضافه‌شده ،  ‏۱۳ دسامبر ۲۰۲۲
جز
۱ نسخه واردشده
جز (۱ نسخه واردشده)
جز (۱ نسخه واردشده)
 
(یک نسخهٔ میانی ویرایش شده توسط یک کاربر دیگر نشان داده نشد)
خط ۹: خط ۹:


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')
خط ۲۹: خط ۳۰:
formatted = false
formatted = false
}
}
--Searches display text only
local function searchDisp(haystack, needle)
return mw.ustring.find(
mw.ustring.sub(haystack, (mw.ustring.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")
خط ۴۲: خط ۵۰:
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
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
خط ۶۵: خط ۷۳:


--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("و", ...) end
function p.andList (...) return p.conjList("و", ...) end
function p.orList (...) return conjList("یا", ...) end
function p.orList (...) return p.conjList("یا", ...) end


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
خط ۸۵: خط ۹۳:
title = mw.title.getCurrentTitle().text,
title = mw.title.getCurrentTitle().text,
otherText = 'دیگر کاربردها',
otherText = 'دیگر کاربردها',
forSeeForm = 'برای %%s را ببینید.'
forSeeForm = 'برای %s %s را ببینید.',
}
}


--Collapses duplicate punctuation
--Collapses duplicate punctuation
function punctuationCollapse (text)
local function punctuationCollapse (text)
local replacements = {
local replacements = {
["%.%.$"] = ".",
["%.%.$"] = ".",
["%?%.$"] = "؟",
["%؟%.$"] = "؟",
["%!%.$"] = "!",
["%!%.$"] = "!",
["%.%]%]%.$"] = ".]]",
["%.%]%]%.$"] = ".]]",
["%?%]%]%.$"] = "؟]]",
["%؟%]%]%.$"] = "؟]]",
["%!%]%]%.$"] = "!]]"
["%!%]%]%.$"] = "!]]"
}
}
for k, v in pairs(replacements) do text = string.gsub(text, k, v) end
for k, v in pairs(replacements) do text = mw.ustring.gsub(text, k, v) end
return text
return text
end
end
خط ۱۲۵: خط ۱۳۳:
local i = from
local i = from
local terminated = false
local terminated = false
-- If there is extra text, and no arguments are given, give nil value
-- to not produce default of "For other uses, see foo (disambiguation)"
if options.extratext and i > maxArg then return nil end
-- Loop to generate rows
-- Loop to generate rows
repeat
repeat
خط ۱۵۷: خط ۱۶۸:
function p.forSeeTableToString (forSeeTable, options)
function p.forSeeTableToString (forSeeTable, options)
-- Type-checks and defaults
-- Type-checks and defaults
checkType("forSeeTableToString", 1, forSeeTable, "table")
checkType("forSeeTableToString", 1, forSeeTable, "table", true)
checkType("forSeeTableToString", 2, options, "table", true)
checkType("forSeeTableToString", 2, options, "table", true)
options = options or {}
options = options or {}
خط ۱۶۵: خط ۱۷۶:
-- Stringify each for-see item into a list
-- Stringify each for-see item into a list
local strList = {}
local strList = {}
for k, v in pairs(forSeeTable) do
if forSeeTable then
local useStr = v.use or options.otherText
for k, v in pairs(forSeeTable) do
local pagesStr = p.andList(v.pages, true) or
local useStr = v.use or options.otherText
mHatnote._formatLink(mHatnote.disambiguate(options.title))
local pagesStr =
local forSeeStr = string.format(options.forSeeForm, useStr, pagesStr)
p.andList(v.pages, true) or
forSeeStr = punctuationCollapse(forSeeStr)
mFormatLink._formatLink{
table.insert(strList, forSeeStr)
categorizeMissing = mHatnote.missingTargetCat,
link = mHatnote.disambiguate(options.title)
}
local forSeeStr = mw.ustring.format(options.forSeeForm, useStr, pagesStr)
forSeeStr = punctuationCollapse(forSeeStr)
table.insert(strList, forSeeStr)
end
end
end
if options.extratext then table.insert(strList, punctuationCollapse(options.extratext..'.')) end
-- Return the concatenated list
-- Return the concatenated list
return table.concat(strList, ' ')
return table.concat(strList, ' ')