<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AChessboard_mxn</id>
	<title>Module:Chessboard mxn - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AChessboard_mxn"/>
	<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:Chessboard_mxn&amp;action=history"/>
	<updated>2026-06-29T04:31:38Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.3</generator>
	<entry>
		<id>https://mywikibiz.com/index.php?title=Module:Chessboard_mxn&amp;diff=471243&amp;oldid=prev</id>
		<title>Zoran: Pywikibot 6.4.0</title>
		<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:Chessboard_mxn&amp;diff=471243&amp;oldid=prev"/>
		<updated>2021-07-15T20:57:12Z</updated>

		<summary type="html">&lt;p&gt;Pywikibot 6.4.0&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function chessboard(args, size, rows, cols, rev, trans, lightdark, altprefix, letters, numbers, header, footer, align, clear)&lt;br /&gt;
    function colchar( col )&lt;br /&gt;
        return (col &amp;lt;= 26) and ( &amp;quot;abcdefghijklmnopqrstuvwxyz&amp;quot; ):sub( col, col ) &lt;br /&gt;
        	or ( &amp;quot;abcdefghijklmnopqrstuvwxyz&amp;quot; ):sub( math.floor((col-1)/26), math.floor((col-1)/26) ) &lt;br /&gt;
        		.. ( &amp;quot;abcdefghijklmnopqrstuvwxyz&amp;quot; ):sub( col-math.floor((col-1)/26)*26, col-math.floor((col-1)/26)*26)&lt;br /&gt;
    end&lt;br /&gt;
    function image_square( pc, row, col, size, t, flip, altprefix )&lt;br /&gt;
        local colornames = { l = 'white', d = 'black', u = 'unknown color' }&lt;br /&gt;
        local piecenames = { &lt;br /&gt;
            p = 'pawn', &lt;br /&gt;
            r = 'rook', &lt;br /&gt;
            n = 'knight', &lt;br /&gt;
            b = 'bishop', &lt;br /&gt;
            q = 'queen', &lt;br /&gt;
            k = 'king', &lt;br /&gt;
            a = 'princess',&lt;br /&gt;
            c = 'empress', &lt;br /&gt;
            z = 'champion', &lt;br /&gt;
            w = 'wizard', &lt;br /&gt;
            t = 'fool', &lt;br /&gt;
            h = 'upside-down pawn', &lt;br /&gt;
            m = 'upside-down rook', &lt;br /&gt;
            s = 'upside-down knight', &lt;br /&gt;
            f = 'upside-down king',  &lt;br /&gt;
            e = 'upside-down bishop', &lt;br /&gt;
            g = 'upside-down queen',&lt;br /&gt;
            G = 'giraffe',&lt;br /&gt;
            U = 'unicorn',&lt;br /&gt;
            Z = 'zebra'&lt;br /&gt;
            }&lt;br /&gt;
        local symnames = { &lt;br /&gt;
            xx = 'black cross', &lt;br /&gt;
            ox = 'white cross', &lt;br /&gt;
            xo = 'black circle', &lt;br /&gt;
            oo = 'white circle',&lt;br /&gt;
            ul = 'up-left arrow', &lt;br /&gt;
            ua = 'up arrow', &lt;br /&gt;
            ur = 'up-right arrow', &lt;br /&gt;
            la = 'left arrow', &lt;br /&gt;
            ra = 'right arrow',&lt;br /&gt;
            dl = 'down-left arrow', &lt;br /&gt;
            da = 'down arrow', &lt;br /&gt;
            dr = 'down-right arrow', &lt;br /&gt;
            lr = 'left-right arrow', &lt;br /&gt;
            ud = 'up-down arrow',&lt;br /&gt;
            db = 'up-right and down-left arrow',&lt;br /&gt;
            dw = 'up-left and down-right arrow',&lt;br /&gt;
            x0 = 'zero', &lt;br /&gt;
            x1 = 'one', &lt;br /&gt;
            x2 = 'two', &lt;br /&gt;
            x3 = 'three', &lt;br /&gt;
            x4 = 'four', &lt;br /&gt;
            x5 = 'five', &lt;br /&gt;
            x6 = 'six', &lt;br /&gt;
            x7 = 'seven', &lt;br /&gt;
            x8 = 'eight', &lt;br /&gt;
            x9 = 'nine'&lt;br /&gt;
        }&lt;br /&gt;
        local color = mw.ustring.gsub( pc, '^.*(%w)(%w).*$', '%2' ) or ''&lt;br /&gt;
        local piece = mw.ustring.gsub( pc, '^.*(%w)(%w).*$', '%1' ) or ''&lt;br /&gt;
        local alt = altprefix .. colchar( col ) .. row .. ' '&lt;br /&gt;
        if ( colornames[color] and piecenames[piece] ) then&lt;br /&gt;
            alt = alt .. colornames[color] .. ' ' .. piecenames[piece]&lt;br /&gt;
        else&lt;br /&gt;
            alt = alt .. ( symnames[piece .. color] or piece .. ' ' .. color )&lt;br /&gt;
        end&lt;br /&gt;
        local ld = t and 't' or ((((row + col + flip) % 2) == 0) and 'd' or 'l')&lt;br /&gt;
        &lt;br /&gt;
        return string.format( '[[File:Chess %s%s%s45.svg|%dx%dpx|alt=%s|%s]]', piece, color, ld, size, size, alt, alt )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    function letters_row( rev, num_lt, num_rt, cols )&lt;br /&gt;
        local res = '&amp;lt;tr style=&amp;quot;vertical-align:middle&amp;quot;&amp;gt;' .. ( num_lt and '&amp;lt;td style=&amp;quot;padding:0; vertical-align:inherit&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;' or '' ) .. '&amp;lt;td style=&amp;quot;padding:0; vertical-align:inherit; height:18px&amp;quot;&amp;gt;'&lt;br /&gt;
        for k = 1, cols do&lt;br /&gt;
            res = res .. colchar(rev and (cols - k + 1) or k) .. '&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:0; vertical-align:inherit&amp;quot;&amp;gt;'&lt;br /&gt;
        end&lt;br /&gt;
        res = res .. '&amp;lt;/td&amp;gt;' .. ( num_lt and '&amp;lt;td style=&amp;quot;padding:0; vertical-align:inherit&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;' or '' ) .. '&amp;lt;/tr&amp;gt;'&lt;br /&gt;
        return res&lt;br /&gt;
    end&lt;br /&gt;
    local letters_tp = letters:match('both') or letters:match('top')&lt;br /&gt;
    local letters_bt = letters:match('both') or letters:match('bottom')&lt;br /&gt;
    local numbers_lt = numbers:match('both') or numbers:match('left')&lt;br /&gt;
    local numbers_rt = numbers:match('both') or numbers:match('right')&lt;br /&gt;
    local width = cols * size + 2&lt;br /&gt;
    local flip = lightdark and 1 or 0&lt;br /&gt;
    if ( numbers_lt ) then width = width + 18 end&lt;br /&gt;
    if ( numbers_rt ) then width = width + 18 end&lt;br /&gt;
&lt;br /&gt;
    local b = ''&lt;br /&gt;
    local caption = ''&lt;br /&gt;
&lt;br /&gt;
    if ( letters_tp ) then b = b .. letters_row(rev, numbers_lt, numbers_rt, cols) .. '\n' end&lt;br /&gt;
    for trow = 1,rows do&lt;br /&gt;
        local row = rev and trow or (rows - trow + 1)&lt;br /&gt;
        b = b .. '&amp;lt;tr style=&amp;quot;vertical-align:middle&amp;quot;&amp;gt;'&lt;br /&gt;
        if ( numbers_lt ) then b = b .. '&amp;lt;td style=&amp;quot;padding:0; vertical-align:inherit; width:18px&amp;quot;&amp;gt;' .. row .. '&amp;lt;/td&amp;gt;' end&lt;br /&gt;
        for tcol = 1,cols do&lt;br /&gt;
            local col = rev and (cols - tcol + 1) or tcol&lt;br /&gt;
            local idx = cols*(rows - row) + col + 2&lt;br /&gt;
            if (args[idx] == nil) then args[idx] = '  ' end&lt;br /&gt;
            local img = image_square(args[idx]:match('%w%w') or '', row, col, size, trans, flip, altprefix )&lt;br /&gt;
            local bg = (((trow + tcol + flip) % 2) == 0) and '#ffce9e' or '#d18b47'&lt;br /&gt;
            b = b .. '&amp;lt;td style=&amp;quot;padding:0; vertical-align:inherit; background-color: ' .. bg .. ';&amp;quot;&amp;gt;' .. img .. '&amp;lt;/td&amp;gt;'&lt;br /&gt;
        end&lt;br /&gt;
        if ( numbers_rt ) then b = b .. '&amp;lt;td style=&amp;quot;padding:0; vertical-align:inherit; width:18px&amp;quot;&amp;gt;' .. row .. '&amp;lt;/td&amp;gt;' end&lt;br /&gt;
        b = b .. '&amp;lt;/tr&amp;gt;'&lt;br /&gt;
    end&lt;br /&gt;
    if ( letters_bt ) then b = b .. letters_row(rev, numbers_lt, numbers_rt, cols) .. '\n' end&lt;br /&gt;
&lt;br /&gt;
    if footer:match('^%s*$')&lt;br /&gt;
    then&lt;br /&gt;
    else    &lt;br /&gt;
        caption = '&amp;lt;div class=&amp;quot;thumbcaption&amp;quot;&amp;gt;' .. footer .. '&amp;lt;/div&amp;gt;\n'&lt;br /&gt;
    end&lt;br /&gt;
    b = '&amp;lt;table cellpadding=0 cellspacing=0 class=&amp;quot;center&amp;quot; style=&amp;quot;line-height: 0; background:white; font-size:88%; border:1px #c8ccd1 solid;'&lt;br /&gt;
        .. 'padding:0; margin:auto&amp;quot;&amp;gt;\n' .. b .. '\n&amp;lt;/table&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
    if noframe then&lt;br /&gt;
        return b&lt;br /&gt;
    else&lt;br /&gt;
        return '&amp;lt;div class=&amp;quot;thumb ' .. align .. '&amp;quot;&amp;gt;'&lt;br /&gt;
        .. '&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;' .. header .. '&amp;lt;/div&amp;gt;' .. '\n&amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width:' .. width .. 'px;&amp;quot;&amp;gt;\n' &lt;br /&gt;
        .. b .. '\n' .. caption .. '&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;'&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function convertFenToArgs( fen )&lt;br /&gt;
    -- converts FEN notation to an array of positions, offset by 2&lt;br /&gt;
    local res = {' ', ' '}&lt;br /&gt;
    -- Loop over rows, which are delimited by /&lt;br /&gt;
    for srow in string.gmatch(&amp;quot;/&amp;quot; .. fen, &amp;quot;/%w+&amp;quot;) do&lt;br /&gt;
        -- Loop over all letters and numbers in the row&lt;br /&gt;
        for piece in srow:gmatch( &amp;quot;%w&amp;quot; ) do&lt;br /&gt;
            if (piece:match(&amp;quot;%d&amp;quot;)) then&lt;br /&gt;
                -- if a digit&lt;br /&gt;
                for k=1,piece do&lt;br /&gt;
                    table.insert(res,' ')&lt;br /&gt;
                end&lt;br /&gt;
            else &lt;br /&gt;
                -- not a digit&lt;br /&gt;
                local color = piece:match( '%u' ) and 'l' or 'd'&lt;br /&gt;
                piece = piece:lower()&lt;br /&gt;
                table.insert(res, piece .. color )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.board(frame)&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local pargs = frame:getParent().args&lt;br /&gt;
    local size = (args.size or pargs.size) or '26'&lt;br /&gt;
    local reverse = (args.reverse or pargs.reverse or '' ):lower() == &amp;quot;true&amp;quot;&lt;br /&gt;
    local trans = (args.transparent or pargs.transparent or '' ):lower() == &amp;quot;true&amp;quot;&lt;br /&gt;
    local lightdark = (args.lightdark or pargs.lightdark or '' ):lower() == &amp;quot;swap&amp;quot;&lt;br /&gt;
    local altprefix = args.altprefix or pargs.altprefix or ''&lt;br /&gt;
    local rows = args.rows or pargs.rows or 8&lt;br /&gt;
    local cols = args.cols or pargs.cols or 8&lt;br /&gt;
    local letters = ( args.letters or pargs.letters or 'both' ):lower() &lt;br /&gt;
    local numbers = ( args.numbers or pargs.numbers or 'both' ):lower() &lt;br /&gt;
    local header =  mw.ustring.gsub( args[2] or pargs[2] or '', '^%s*(.-)%s*$', '%1' )&lt;br /&gt;
    local footer = args[3 + rows*cols] or pargs[3 + rows*cols] or ''&lt;br /&gt;
    local align = ( args[1] or pargs[1] or 'tright' ):lower()&lt;br /&gt;
    local clear = ( args.clear or pargs.clear ) or ( align:match('tright') and 'right' or 'none' )&lt;br /&gt;
    local noframe = (args.noframe or pargs.noframe or ''):lower() == &amp;quot;true&amp;quot;&lt;br /&gt;
    local fen = args.fen or pargs.fen&lt;br /&gt;
&lt;br /&gt;
    size = mw.ustring.match(size, '[%d]+') or '26' -- remove px from size&lt;br /&gt;
    if (fen) then&lt;br /&gt;
        align = ( args.align or pargs.align or 'tright' ):lower()&lt;br /&gt;
        clear = ( args.clear or pargs.clear ) or ( align:match('tright') and 'right' or 'none' )&lt;br /&gt;
        header = args.header or pargs.header or ''&lt;br /&gt;
        footer = args.footer or pargs.footer or ''&lt;br /&gt;
        return chessboard(convertFenToArgs( fen ), size, rows, cols, reverse, trans, lightdark, altprefix, letters, numbers, header, footer, align, clear, noframe)&lt;br /&gt;
    end&lt;br /&gt;
    if args[3] then&lt;br /&gt;
        return chessboard(args, size, rows, cols, reverse, trans, lightdark, altprefix, letters, numbers, header, footer, align, clear, noframe)&lt;br /&gt;
    else&lt;br /&gt;
        return chessboard(pargs, size, rows, cols, reverse, trans, lightdark, altprefix, letters, numbers, header, footer, align, clear, noframe)&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Zoran</name></author>
	</entry>
</feed>