모듈:Xiangqi diagram

위키백과, 우리 모두의 백과사전.
function format(s)
	s = string.gsub(s or '', '\n', '')
	return s
end

local qidata = {
	gd = {'将', '將'},
	ad = {'士'},
	ed = {'象'},
	rd = {'车', '車'},
	hd = {'马', '馬'},
	cd = {'砲', '包'},
	sd = {'卒'},

	gl = {'帅', '帥'},
	al = {'仕'},
	el = {'相'},
	rl = {'伡', '俥'},
	hl = {'㐷', '傌'},
	cl = {'炮'},
	sl = {'兵'}
}

local p = {}
function p.board(frame)
	local args = require('Module:Arguments').getArgs(frame)
	local align = format(args[1])
	if align == '' then
		align = 'tright'
	end
	local header = format(args[2])
	local footer = format(args[93])

	local size
	local width
	local height

	if args.size ~= nil then
		size = args.size
		width = size * 9
		height = size * 12
	elseif args.width ~= nil then
		width = args.width
		size = width / 9
		height = size * 12
	elseif args.height ~= nil then
		height = args.height
		size = height / 12
		width = size * 9
	else
		size = 25
		width = 225
		height = 300
	end

	local ss = ''
	ss = ss .. '<div class="' .. align .. '" style="clear:right;">'
	ss = ss .. '<div style="text-align:center;width:100%;">' .. header .. '</div>'
	ss = ss .. '<div style="position:relative;width:' .. width .. 'px;height:' .. height .. 'px;">'
	ss = ss .. '<div style="position:absolute;">[[File:Xiangqi_board.svg|' .. width .. 'px]]</div>'
	for i = 0, 9 do
		for j = 0, 8 do
			local s = format(args[i * 9 + j + 3])
			s = string.gsub(s, ' ', '')
			s = string.gsub(s, ' ', '')
			s = string.gsub(s, '_', '')
			for key, val in pairs(qidata) do
				for k, qi in ipairs(val) do
					if s == qi then
						s = key
					end
				end
			end
			if s ~= '' then
				ss = ss .. '<div style="'
				ss = ss .. 'position:absolute;'
				ss = ss .. 'left:' .. j * size .. 'px;'
				ss = ss .. 'top:' .. (i + 1) * size .. 'px;'
				ss = ss .. '">'
				ss = ss .. '[[File:Xiangqi_' .. s .. '1.svg|' .. size .. 'px]]'
				ss = ss .. '</div>'
			end
		end
	end
	ss = ss .. '</div><div style="width:100%">' .. footer .. '</div></div>'
	return ss
end

return p