跳转到内容

模組:Vgname/testcases

维基百科,自由的百科全书

这是本页的一个历史版本,由風中的刀劍留言 | 贡献2015年4月11日 (六) 06:17编辑。这可能和当前版本存在着巨大的差异。

local languageList = mw.loadData('Module:Vgname/languages')
local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')

local function refSeparator( a )
	a = a or ''
	local refPattern = '\127UNIQ%x+%-ref%-%x+%-QINU\127'
	local p, _  = string.find( a, refPattern )
	local contentPart, refPart
	
	if p then
		contentPart, refPart = string.sub( a, 1, p - 1 ), string.sub( a, p )
	else
		contentPart, refPart = a, ''
	end
	
	return contentPart, refPart
end

local function bold( a )
	local cont, ref = refSeparator( a )
	
	if yesno( _bold ) then
		cont = '<b>' .. cont  .. '</b>' .. ref
	end
	
	return cont
end

local function italic( a )
	local cont, ref = refSeparator( a )
	
	if yesno( _italic ) then
		cont = '<i>' .. cont ..'</i>' .. ref
	end
	
	return cont
end

local function isDiff( args )
	if yesno( _diff ) or args.na or args.eu then
		return true
	end
end

local function lang( langcode, a )
	local span = mw.html.create( 'span' )
	local content, ref = refSeparator( a )
	
	span
		:attr( 'lang', langcode )
		:wikitext( '-{' .. content .. '}-' )
		
	return tostring( span )  .. ref 
end

--------------------------------------------------------------------------

local function intro( args )
	local ret = args[1]
	
	ret = bold( ret )
	
	if yesno( _bracket ) then
		ret = '《' .. ret .. '》'
	end
	
	return ret
end

local function original( args ) 
	local ret = ''
	
	for i, v in ipairs( languageList ) do
		if args[v[1]] then
			if isDiff( args ) then
				ret = v[3] .. ':' .. lang( v[1], args[v[1]] )
			else
				ret = v[2] .. ':' .. lang( v[1], args[v[1]] )
			end
			
			break
		end
	end
	
	return ret
end

local function english( args )
	local ret
	
	if args.na then
		ret = '美版名:' .. italic( lang( 'en', args.na ) )
	end
	
	if args.eu then
		ret = ret and ( ret .. ',' ) or ''
		ret = ret .. '欧版名:' .. italic( lang( 'en', args.eu ) )
	end
		
	if args.en and ret == nil then
		ret = isDiff( args ) and '英文版名' or '英文名'
		ret = ret .. ':' .. italic( lang( 'en', args.en ) )
	end
	
	return ret or ''
end

--------------------------------------------------------------------------

local p = {}
 
function p.main(frame)
	local args = getArgs(frame)
	
	_bold = args.bold or 'yes'
	_italic = args.italic or 'yes'
	_bracket = args.italic or 'yes'
	
	return p._main(args)
end
 
function p._main(args)
	return intro( args ) .. original( args ) .. english( args )
end
 
return p