Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

Jump to content

Module:Chessboard/Chu shogi

From Wikipedia, the free encyclopedia

local p = {}

function p.dims()
	return 12, 12
end

function p.letters()
	return {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L'}
end

p.pattern = '%w%w%w'

function p.image_board(size)
	return string.format( '[[File:ChuShogiboard.svg|%dx%dpx|link=]]', 12 * size, 12 * size )
end

function p.image_square( pc, row, col, size )
	local colornames = {
		l = { m = 'white', f = 'white' },
		d = { m = 'black', f = 'black' }
	}
	local piecenames = {
		am = { name = 'angle mover', gender = 'm', japname='角', fulljapname='角行' },
		bt = { name = 'blind tiger', gender = 'm', japname='虎', fulljapname='盲虎' },
		cg = { name = 'copper general', gender = 'm', japname='銅', fulljapname='銅将' },
		dh = { name = 'dragon horse', gender = 'm', japname='馬', fulljapname='龍馬' },
		dk = { name = 'dragon king', gender = 'm', japname='龍', fulljapname='龍王' },
		de = { name = 'drunk elephant', gender = 'm', japname='象', fulljapname='酔象' },
		fl = { name = 'ferocious leopard', gender = 'm', japname='豹', fulljapname='猛豹 ' },
		fc = { name = 'flying chariot', gender = 'm', japname='飛', fulljapname='飛車' },
		fo = { name = 'flying ox', gender = 'm', japname='牛', fulljapname='飛牛' },
		fs = { name = 'flying stag', gender = 'm', japname='鹿', fulljapname='飛鹿' },
		pn = { name = 'foot soldier', gender = 'm', japname='歩', fulljapname='歩兵' },
		fb = { name = 'free boar', gender = 'm', japname='猪', fulljapname='奔猪' },
		fk = { name = 'free king', gender = 'm', japname='奔', fulljapname='奔王' },
		gb = { name = 'go-between', gender = 'm', japname='仲', fulljapname='仲人' },
		gg = { name = 'golden general', gender = 'm', japname='金', fulljapname='金将' },
		hf = { name = 'horned falcon', gender = 'm', japname='鷹', fulljapname='角鷹' },
		ic = { name = 'incense chariot', gender = 'm', japname='香', fulljapname='香車' },
		jd = { name = 'jade general', gender = 'm', japname='玉', fulljapname='玉将' },
		kg = { name = 'king general', gender = 'm', japname='王', fulljapname='王将' },
		kn = { name = 'kirin', gender = 'm', japname='麒', fulljapname='麒麟' },
		ln = { name = 'lion', gender = 'm', japname='獅', fulljapname='獅子' },
		px = { name = 'phoenix', gender = 'm', japname='鳳', fulljapname='鳳凰' },
		pr = { name = 'prince', gender = 'm', japname='太', fulljapname='太子' },
		rc = { name = 'reverse chariot', gender = 'm', japname='反', fulljapname='反車' },
		sm = { name = 'side mover', gender = 'm', japname='横', fulljapname='横行' },
		sg = { name = 'silver general', gender = 'm', japname='銀', fulljapname='銀将' },
		se = { name = 'soaring eagle', gender = 'm', japname='鷲', fulljapname='飛鷲' },
		tn = { name = 'tokin', gender = 'm', japname='と', fulljapname='と金' },
		vm = { name = 'vertical mover', gender = 'm', japname='竪', fulljapname='竪行' },
		we = { name = 'whale', gender = 'm', japname='鯨', fulljapname='鯨鯢' },
		wh = { name = 'white horse', gender = 'm', japname='駒', fulljapname='白駒' },
		ia = { name = 'inverted angle mover', gender = 'm', japname='角', fulljapname='角行' },
		ih = { name = 'inverted dragon horse', gender = 'm', japname='馬', fulljapname='龍馬' },
		id = { name = 'inverted dragon king', gender = 'm', japname='龍', fulljapname='龍王' },
		ie = { name = 'inverted drunk elephant', gender = 'm', japname='象', fulljapname='酔象' },
		it = { name = 'inverted flying chariot', gender = 'm', japname='飛', fulljapname='飛車' },
		ik = { name = 'inverted free king', gender = 'm', japname='奔', fulljapname='奔王' },
		il = { name = 'inverted lion', gender = 'm', japname='獅', fulljapname='獅子' },
		is = { name = 'inverted side mover', gender = 'm', japname='横', fulljapname='横行' },
		iv = { name = 'inverted vertical mover', gender = 'm', japname='竪', fulljapname='竪行' }
	}
	local symnames = {
		xx = 'black cross',
		ox = 'white cross',
		xo = 'black circle',
		oo = 'white circle',
		ul = 'arrow up-left',
		ua = 'arrow up',
		ur = 'arrow up-right',
		la = 'arrow left',
		ra = 'arrow right',
		dl = 'arrow down-left',
		da = 'arrow down',
		dr = 'arrow down-right',
		lr = 'arrow left-right',
		ud = 'arrow up-down',
		x0 = 'zero',
		x1 = 'one',
		x2 = 'two',
		x3 = 'three',
		x4 = 'four',
		x5 = 'five',
		x6 = 'six',
		x7 = 'seven',
		x8 = 'eight',
		x9 = 'nine',
	}
	local colchar = {'A','B','C','D','E','F','G','H','I','J','K','L'}
    local color = mw.ustring.gsub( pc, '^.*(%w)(%w)(%w).*$', '%3' ) or ''
    local piece = mw.ustring.gsub( pc, '^.*(%w)(%w)(%w).*$', '%1%2' ) or ''
    local alt = colchar[col] .. row .. ' '

    if colornames[color] and piecenames[piece] then
		alt = alt .. colornames[color][piecenames[piece]['gender']] .. ' ' .. piecenames[piece]['name']
    else
		alt = alt .. ( symnames[piece .. color] or piece .. ' ' .. color )
	end

	fn = ''

	if pc == 'aml' then
		fn = 'Angle_Mover_(Chu_Hieroglyph)'
	elseif pc == 'amd' then
		fn = 'Angle_Mover_(Chu_Hieroglyph)-opposite'
	elseif pc == 'btl' then
		fn = 'Blind_Tiger_(Chu_Hieroglyph)'
	elseif pc == 'btd' then
		fn = 'Blind_Tiger_(Chu_Hieroglyph)-opposite'
	elseif pc == 'cgl' then
		fn = 'Copper_General_(Chu_Hieroglyph)'
	elseif pc == 'cgd' then
		fn = 'Copper_General_(Chu_Hieroglyph)-opposite'
	elseif pc == 'dhl' then
		fn = 'Dragon_Horse_(Chu_Hieroglyph)'
	elseif pc == 'dhd' then
		fn = 'Dragon_Horse_(Chu_Hieroglyph)-opposite'
	elseif pc == 'dkl' then
		fn = 'Dragon_King_(Chu_Hieroglyph)'
	elseif pc == 'dkd' then
		fn = 'Dragon_King_(Chu_Hieroglyph)-opposite'
	elseif pc == 'del' then
		fn = 'Drunk_Elephant_(Chu_Hieroglyph)'
	elseif pc == 'ded' then
		fn = 'Drunk_Elephant_(Chu_Hieroglyph)-opposite'
	elseif pc == 'fll' then
		fn = 'Ferocious_Leopard_(Chu_Hieroglyph)'
	elseif pc == 'fld' then
		fn = 'Ferocious_Leopard_(Chu_Hieroglyph)-opposite'
	elseif pc == 'fcl' then
		fn = 'Flying_Chariot_(Chu_Hieroglyph)'
	elseif pc == 'fcd' then
		fn = 'Flying_Chariot_(Chu_Hieroglyph)-opposite'
	elseif pc == 'fol' then
		fn = 'Flying_Ox_(Chu_Hieroglyph)'
	elseif pc == 'fod' then
		fn = 'Flying_Ox_(Chu_Hieroglyph)-opposite'
	elseif pc == 'fsl' then
		fn = 'Flying_Stag_(Chu_Hieroglyph)'
	elseif pc == 'fsd' then
		fn = 'Flying_Stag_(Chu_Hieroglyph)-opposite'
	elseif pc == 'pnl' then
		fn = 'Foot_Soldier_(Chu_Hieroglyph)'
	elseif pc == 'pnd' then
		fn = 'Foot_Soldier_(Chu_Hieroglyph)-opposite'
	elseif pc == 'fbl' then
		fn = 'Free_Boar_(Chu_Hieroglyph)'
	elseif pc == 'fbd' then
		fn = 'Free_Boar_(Chu_Hieroglyph)-opposite'
	elseif pc == 'fkl' then
		fn = 'Free_King_(Chu_Hieroglyph)'
	elseif pc == 'fkd' then
		fn = 'Free_King_(Chu_Hieroglyph)-opposite'
	elseif pc == 'gbl' then
		fn = 'Go-Between_(Chu_Hieroglyph)'
	elseif pc == 'gbd' then
		fn = 'Go-Between_(Chu_Hieroglyph)-opposite'
	elseif pc == 'ggl' then
		fn = 'Golden_General_(Chu_Hieroglyph)'
	elseif pc == 'ggd' then
		fn = 'Golden_General_(Chu_Hieroglyph)-opposite'
	elseif pc == 'hfl' then
		fn = 'Horned_Falcon_(Chu_Hieroglyph)'
	elseif pc == 'hfd' then
		fn = 'Horned_Falcon_(Chu_Hieroglyph)-opposite'
	elseif pc == 'icl' then
		fn = 'Incense_Chariot_(Chu_Hieroglyph)'
	elseif pc == 'icd' then
		fn = 'Incense_Chariot_(Chu_Hieroglyph)-opposite'
	elseif pc == 'jdl' then
		fn = 'Jade_General_(Chu_Hieroglyph)'
	elseif pc == 'jdd' then
		fn = 'Jade_General_(Chu_Hieroglyph)-opposite'
	elseif pc == 'kgl' then
		fn = 'King_General_(Chu_Hieroglyph)'
	elseif pc == 'kgd' then
		fn = 'King_General_(Chu_Hieroglyph)-opposite'
	elseif pc == 'knl' then
		fn = 'Kirin_(Chu_Hieroglyph)'
	elseif pc == 'knd' then
		fn = 'Kirin_(Chu_Hieroglyph)-opposite'
	elseif pc == 'lnl' then
		fn = 'Lion_(Chu_Hieroglyph)'
	elseif pc == 'lnd' then
		fn = 'Lion_(Chu_Hieroglyph)-opposite'
	elseif pc == 'pxl' then
		fn = 'Phoenix_(Chu_Hieroglyph)'
	elseif pc == 'pxd' then
		fn = 'Phoenix_(Chu_Hieroglyph)-opposite'
	elseif pc == 'prl' then
		fn = 'Prince_(Chu_Hieroglyph)'
	elseif pc == 'prd' then
		fn = 'Prince_(Chu_Hieroglyph)-opposite'
	elseif pc == 'rcl' then
		fn = 'Reverse_Chariot_(Chu_Hieroglyph)'
	elseif pc == 'rcd' then
		fn = 'Reverse_Chariot_(Chu_Hieroglyph)-opposite'
	elseif pc == 'sml' then
		fn = 'Side_Mover_(Chu_Hieroglyph)'
	elseif pc == 'smd' then
		fn = 'Side_Mover_(Chu_Hieroglyph)-opposite'
	elseif pc == 'sgl' then
		fn = 'Silver_General_(Chu_Hieroglyph)'
	elseif pc == 'sgd' then
		fn = 'Silver_General_(Chu_Hieroglyph)-opposite'
	elseif pc == 'sel' then
		fn = 'Soaring_Eagle_(Chu_Hieroglyph)'
	elseif pc == 'sed' then
		fn = 'Soaring_Eagle_(Chu_Hieroglyph)-opposite'
	elseif pc == 'tnl' then
		fn = 'Tokin_(Chu_Hieroglyph)'
	elseif pc == 'tnd' then
		fn = 'Tokin_(Chu_Hieroglyph)-opposite'
	elseif pc == 'vml' then
		fn = 'Vertical_Mover_(Chu_Hieroglyph)'
	elseif pc == 'vmd' then
		fn = 'Vertical_Mover_(Chu_Hieroglyph)-opposite'
	elseif pc == 'wel' then
		fn = 'Whale_(Chu_Hieroglyph)'
	elseif pc == 'wed' then
		fn = 'Whale_(Chu_Hieroglyph)-opposite'
	elseif pc == 'whl' then
		fn = 'White_Horse_(Chu_Hieroglyph)'
	elseif pc == 'whd' then
		fn = 'White_Horse_(Chu_Hieroglyph)-opposite'
	elseif pc == 'ial' then
		fn = 'Angle_Mover_(Chu_Hieroglyph)-inverted'
	elseif pc == 'iad' then
		fn = 'Angle_Mover_(Chu_Hieroglyph)-opposite-inverted'
	elseif pc == 'ihl' then
		fn = 'Dragon_Horse_(Chu_Hieroglyph)-inverted'
	elseif pc == 'ihd' then
		fn = 'Dragon_Horse_(Chu_Hieroglyph)-opposite-inverted'
	elseif pc == 'idl' then
		fn = 'Dragon_King_(Chu_Hieroglyph)-inverted'
	elseif pc == 'idd' then
		fn = 'Dragon_King_(Chu_Hieroglyph)-opposite-inverted'
	elseif pc == 'iel' then
		fn = 'Drunk_Elephant_(Chu_Hieroglyph)-inverted'
	elseif pc == 'ied' then
		fn = 'Drunk_Elephant_(Chu_Hieroglyph)-opposite-inverted'
	elseif pc == 'itl' then
		fn = 'Flying_Chariot_(Chu_Hieroglyph)-inverted'
	elseif pc == 'itd' then
		fn = 'Flying_Chariot_(Chu_Hieroglyph)-opposite-inverted'
	elseif pc == 'ikl' then
		fn = 'Free_King_(Chu_Hieroglyph)-inverted'
	elseif pc == 'ikd' then
		fn = 'Free_King_(Chu_Hieroglyph)-opposite-inverted'
	elseif pc == 'ill' then
		fn = 'Lion_(Chu_Hieroglyph)-inverted'
	elseif pc == 'ild' then
		fn = 'Lion_(Chu_Hieroglyph)-opposite-inverted'
	elseif pc == 'isl' then
		fn = 'Side_Mover_(Chu_Hieroglyph)-inverted'
	elseif pc == 'isd' then
		fn = 'Side_Mover_(Chu_Hieroglyph)-opposite-inverted'
	elseif pc == 'ivl' then
		fn = 'Vertical_Mover_(Chu_Hieroglyph)-inverted'
	elseif pc == 'ivd' then
		fn = 'Vertical_Mover_(Chu_Hieroglyph)-opposite-inverted'
	end

	return string.format( '[[File:%s.svg|%dx%dpx|alt=%s|%s|top]]', fn, size, size, alt, alt )

end

return p