มอดูล:Chess
หน้าตา
เอกสารการใช้งานสำหรับมอดูลนี้อาจสร้างขึ้นที่ มอดูล:Chess/doc
local p = {};
function p.pagename2pgn( frame )
local pgn = frame.args[1] or ''
if pgn == '' then
local pagename = mw.title.getCurrentTitle().text
if pagename:sub(1, 23) == "Chess Opening Theory/1." then
pgn = pagename:sub(22):gsub("/", " "):gsub("[0-9]+%.%.%.", "")
else
return
end
end
local enc = mw.uri.encode( pgn )
return string.format( '[https://lichess.org/analysis/pgn/%s %s]', enc, pgn )
end
-- Determines whether it's White's or Black's turn. Returns ' w' if arg contains
-- three dots, ' b' if arg contains one dot, or '' otherwise.
local function whoseTurn( subpagename )
local _, count = subpagename:gsub( "%.", "" )
if count == 3 then
return " w" -- White
elseif count == 1 then
return " b" -- Black
else
return ""
end
end
-- From [[w:Module:Chessboard]].
-- Generates "rnbqkbnr/pppp1ppp/8/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R b" if args =
-- {'rd','nd','bd','qd','kd','bd','nd','rd',
-- 'pd','pd','pd','pd',' ','pd','pd','pd',
-- ' ',' ',' ',' ',' ',' ',' ',' ',
-- ' ',' ',' ',' ','pd',' ',' ',' ',
-- ' ',' ',' ',' ','pl',' ',' ',' ',
-- ' ',' ',' ',' ',' ','nl',' ',' ',
-- 'pl','pl','pl','pl',' ','pl','pl','pl',
-- 'rl','nl','bl','ql','kl','bl',' ','rl',}
local function convertArgsToFen( args, offset )
local function nullOrWhitespace( s ) return not s or s:match( '^%s*(.-)%s*$' ) == '' end
local function piece( s )
return nullOrWhitespace( s ) and 1
or s:gsub( '%s*(%a)(%a)%s*', function( a, b ) return b == 'l' and a:upper() or a end )
end
local res = ''
for row = 1, 8 do
for file = 1, 8 do
res = res .. piece( args[ 8*(row-1) + file + offset ] )
end
if row < 8 then res = res .. '/' end
end
res = mw.ustring.gsub( res, '1+', function( s ) return #s end )
return res .. whoseTurn( mw.title.getCurrentTitle().subpageText )
end
function p.ascii2fen( frame )
local fen = convertArgsToFen( frame:getParent().args, 2 ) -- args start {{{3}}}
local enc = mw.uri.encode( fen, 'WIKI' )
return string.format('[https://lichess.org/analysis/standard/%s#explorer %s]', enc, fen)
end
return p