跳转到内容

Module:LinkArray

此模块用于将一个给定分隔符的列表转换为以另一给定分隔符分隔的链接列表。

用法

  • directlink:设置此参数以使用{{Direct link}}而非[[foo]];
  • prefix:所有链接的公共前缀;
  • suffix:所有链接的公共后缀;
  • nameprefix:所有链接显示文字的公共前缀;
  • namesuffix:所有链接显示文字的公共后缀;
  • pretty:设置此参数以使用更自然的分隔符方式;
    • 设置此项后delimiterfinaldelimiter将默认从MediaWiki名字空间内寻找合适的值,也可手动指定;
  • sep:转换前的列表分隔符,默认为,
  • delimiter:转换后的列表分隔符;
  • finaldelimiter:转换后的最后一个列表分隔符,仅当设置了pretty时有实际效果。

另见

local p = {}

local function stringToArray(str, sep)
	local arr = {}
	for v in mw.text.gsplit(str, '%s*' .. sep .. '%s*') do
		if v ~= '' then
			table.insert(arr, v)
		end
	end
	return arr
end

local function tableToArray(tbl)
	local arr = {}
	for k, v in pairs(tbl) do
		if type(k) == 'number' and v ~= '' then
			arr[k] = v
		end
	end
	table.sort(arr)
	return arr
end

function p.main()
	local args = require('Module:ProcessArgs').merge(true)
	return p.linkArray(args)
end
	
function p.linkArray(args)
	local f = mw.getCurrentFrame()
	local prefix = args.prefix or ''
	local suffix = args.suffix or ''
	local namePrefix = args.nameprefix or ''
	local nameSuffix = args.namesuffix or ''
	local delimiter = args.delimiter
	local finalDelimiter = args.finaldelimiter
	local sep = args.sep or ','
	local linkPrefix = args.directlink and '{{Direct link|' or '[['
	local linkSuffix = args.directlink and '}}' or ']]'

	local arr = {}
	if args.mode and args.mode ~= 'single' then
		arr = tableToArray(args)
	else
		arr = stringToArray(args[1], sep)
	end
	
	local tbl = {}
	for _, v in ipairs(arr) do
		table.insert(
			tbl, f:preprocess(
				linkPrefix .. prefix ..
				mw.text.trim(v) .. suffix .. '|' ..
				namePrefix .. mw.text.trim(v) ..
				nameSuffix .. linkSuffix
			)
		)
	end
	if args.pretty then
		return mw.text.listToText(tbl, delimiter, finalDelimiter)
	else
		return table.concat(tbl, delimiter)
	end
end

return p
Cookie帮助我们提供我们的服务。通过使用我们的服务,您同意我们使用cookie。