全站通知:
模块:Hatnote
刷
历
编
跳到导航
跳到搜索
local getArgs = require('Module:Arguments').getArgs
local p = {}
-- 获取页面类型
local function getPageType(title, hasSection)
if hasSection then return '章节' end
local nsText = title.nsText
if nsText == '模板' then
return '模板'
elseif nsText == '模块' then
return '模块'
else
return '条目'
end
end
-- 格式化链接
local function formatLink(text)
if text:find('[[', 1, true) and text:find(']]', 1, true) then
return "“'''" .. text .. "'''”"
else
return "“'''[[" .. text .. "]]'''”"
end
end
-- 检查是否为连接词
local function isConnector(text)
return text == '和' or text == '或' or text == '、'
end
-- 获取最大数字索引
local function getMaxIndex(args)
local maxIndex = 0
for key, _ in pairs(args) do
local index = tonumber(key)
if index and index > 0 and math.floor(index) == index then
if index > maxIndex then maxIndex = index end
end
end
return maxIndex
end
-- 处理描述和链接序列
local function processDescriptionLinks(args, startIndex, maxIndex, pagename)
local parts = {}
local state = '' -- 状态: '' | 'link' | 'end'
for i = startIndex, maxIndex do
local value = args[i]
if value then
if state == 'link' then
table.insert(parts, formatLink(value))
state = 'end'
elseif isConnector(value) then
table.insert(parts, value)
else
if state == 'end' then table.insert(parts, ';') end
local description = (value ~= '') and value or '其他用法'
table.insert(parts, '关于' .. description .. ',请见')
state = 'link'
end
end
end
-- fallback
if state == 'link' then
table.insert(parts, formatLink(pagename .. '(消歧义)'))
end
return parts, state
end
-- For
function p.about(frame)
local args = getArgs(frame,
{trim = true, removeBlanks = false, parentOnly = true})
local maxIndex = getMaxIndex(args)
local title = mw.title.getCurrentTitle()
local pagename = title.text
local contentParts = {'[[File:Disambig gray.svg|25px|link=]] '}
if args[1] then
local pageType = getPageType(title, args.section)
table.insert(contentParts,
'本' .. pageType .. '介绍的是' .. args[1])
end
local subsequentParts = processDescriptionLinks(args, 2, maxIndex, pagename)
if maxIndex < 2 and args[1] then
table.insert(subsequentParts, '关于其他用法,请见' ..
formatLink(pagename .. '(消歧义)'))
end
local finalParts = {table.concat(contentParts, '')}
if #subsequentParts > 0 then
if args[1] then table.insert(finalParts, '。 ') end
table.insert(finalParts, table.concat(subsequentParts, ' '))
table.insert(finalParts, '。')
elseif args[1] then
table.insert(finalParts, '。')
end
local finalContent = table.concat(finalParts, '')
return frame:expandTemplate{title = 'hatnote', args = {finalContent}}
end
-- For
function p.for2(frame)
local args = getArgs(frame,
{trim = true, removeBlanks = false, parentOnly = true})
local maxIndex = getMaxIndex(args)
local title = mw.title.getCurrentTitle()
local pagename = title.text
local contentParts = {'[[File:Disambig gray.svg|25px|link=]] '}
if args.R then table.insert(contentParts, args.R) end
local subsequentParts = processDescriptionLinks(args, 1, maxIndex, pagename)
if maxIndex < 1 then
table.insert(subsequentParts, '关于其他用法,请见')
table.insert(subsequentParts, formatLink(pagename .. '(消歧义)'))
end
local finalParts = {table.concat(contentParts, '')}
if #subsequentParts > 0 then
if args.R then table.insert(finalParts, ' ') end
table.insert(finalParts, table.concat(subsequentParts, ' '))
table.insert(finalParts, '。')
end
local finalContent = table.concat(finalParts, '')
return frame:expandTemplate{title = 'hatnote', args = {finalContent}}
end
p['for'] = p.for2
return p

沪公网安备 31011002002714 号