Implementa {{ Diagrama de ajedrez }}{{#invoke:Chessboard|function_name}}
local p = {} cfg local , nfilas , ncols función local innerboard ( args , tamaño , rev ) patrón = cfg.patrón o ' % w% w ' raíz local = mw.html . crear ( 'div' ) raíz : addClass ( 'tablero de ajedrez notheme' ) : css ( 'posición' , 'relativo' ) : wikitext ( cfg . image_board ( tamaño )) para trow = 1 , nrows hacer fila local = rev y trow o ( 1 + nrows - trow ) para tcol = 1 , ncols hacer col local = rev y ( 1 + ncols - tcol ) o tcol pieza local = args [ ncols * ( nrows - fila ) + col + 2 ] o '' si pieza : match ( patrón ) entonces img local = cfg . image_square ( pieza : match ( patrón ), fila , columna , tamaño ) raíz : etiqueta ( 'div' ) : css ( 'posición' , 'absoluta' ) : css ( 'índice z' , '3' ) : css ( 'arriba' , tostring (( trow - 1 ) * tamaño ) .. 'px' ) : css ( 'izquierda' , tostring (( tcol - 1 ) * tamaño ) .. 'px' ) : css ( 'ancho' , tamaño .. 'px' ) : css ( 'alto' , tamaño .. 'px' ) : wikitext ( img ) fin fin fin volver tostring ( raíz ) fin función tablero de ajedrez ( args , tamaño , rev , letras , números , encabezado , pie de página , alinear , borrar ) función letras_fila ( rev , num_lt , num_rt ) letras locales = cfg . letras () raíz local = mw . html . crear ( '' ) si num_lt entonces raíz : etiqueta ( 'td' ) : css ( 'vertical-align' , 'inherit' ) : css ( 'padding' , '0' ) fin para k = 1 , ncols hacer raíz : etiqueta ( 'td' ) : css ( 'padding' , '0' ) : css ( 'vertical-align' , 'inherit' ) : css ( 'text-align' , 'center' ) : css ( 'height' , '18px' ) : css ( 'width' , size .. 'px' ) :wikitexto ( rev y letras [ 1 + ncols - k ] o letras [ k ]) fin si num_rt entonces raíz : etiqueta ( 'td' ) : css ( 'vertical-align' , 'inherit' ) : css ( 'padding' , '0' ) fin retorno astring ( raíz ) fin local letras_tp = letras : coincide ( 'ambos' ) o letras : coincide ( 'arriba' ) local letras_bt = letras : coincide ( 'ambos' ) o letras : coincide ( 'abajo' ) local números_lt = números : coincide ( 'ambos' ) o números : coincide ( 'izquierda' ) local números_rt = números : coincide ( 'ambos' ) o números : coincide ( ' derecha ' ) local ancho = ncols * tamaño + 2 si ( números_lt ) entonces ancho = ancho + 18 fin si ( números_rt ) entonces ancho = ancho + 18 fin local raíz = mw.html . crear ( 'div' ) : addClass ( 'thumb' ) : addClass ( 'noviewer' ) : addClass ( align ) si ( encabezado y encabezado ~= '' ) entonces raíz : etiqueta ( 'div' ) : addClass ( 'center' ) : css ( 'line-height' ,'130%' ) : css ( 'margen' , '0 auto' ) : css ( 'ancho máximo' , ( ancho + ncols ) .. 'px' ) : wikitexto ( encabezado ) fin local div = raíz : etiqueta ( 'div' ) : addClass ( 'thumbinner' ) : css ( 'ancho' , ancho .. 'px' ) local b = div : etiqueta ( 'tabla' ) : attr ( 'relleno de celdas' , '0' ) : attr ( 'espaciado de celdas' , '0' ) : css ( 'tamaño de fuente' , '88%' ) : css ( 'borde' , '1px #c8ccd1 sólido' ) : css ( 'relleno' , '0' ) : css ( 'margen' , 'automático' ) si ( letras_tp ) entonces b : etiqueta ( 'tr' ) : css ( 'vertical-align' , 'middle' ) : wikitexto ( letras_fila ( rev , números_lt , números_rt )) fin local tablerow = b : etiqueta ( 'tr' ) : css ( 'vertical-align' , 'middle' ) si ( números_lt ) entonces tablerow : etiqueta ( 'td' ) : css ( 'padding' , '0' : css ( ' vertical-align' , 'inherit' ) : css ( 'text-align' ,'centro' ) : css ( 'ancho' , '18px' ) : css ( 'altura' , tamaño ... 'px' ) : wikitexto ( rev y 1 o nfilas ) fin local td = tablerow : etiqueta ( 'td' ) : attr ( 'colspan' , ncols ) : attr ( 'rowspan' , nfilas ) : css ( 'relleno' , '0' ) : css ( 'alineación-vertical' , 'heredada' ) : wikitexto ( tablero interno ( argumentos , tamaño , rev )) si ( números_rt ) entonces tablerow : etiqueta ( 'td' ) : css ( 'relleno' , '0' ) : css ( 'alineación-vertical' , 'heredada' ) : css ( 'alineación-texto' , 'centro' ) : css ( 'ancho' , '18px' ) : css ( 'altura' , tamaño .. 'px' ) : wikitexto ( rev y 1 o nfilas ) fin si ( numbers_lt o numbers_rt ) entonces para trow = 2 , nfilas hacer idx local = rev y trow o ( 1 + nfilas - trow ) tablerow = b : etiqueta ( 'tr' ) : css ( 'vertical-align' , 'middle' ) si ( numbers_lt ) entonces tablerow : etiqueta ( 'td' ) :css ( 'relleno' , '0' ) : css ( 'alineación vertical' , 'heredar' ) : css ( 'alineación de texto' , 'centro' ) : css ( 'altura' , tamaño .. 'px' ) : wikitexto ( idx ) fin si ( números_rt ) entonces tablerow : etiqueta ( 'td' ) : css ( 'relleno' , '0' : css ( ' alineación vertical' , 'heredar' ) : css ( 'alineación de texto' , 'centro' ) : css ( 'altura' , tamaño .. 'px' ) : wikitexto ( idx ) fin fin fin si ( letras_bt ) entonces b : etiqueta ( 'tr' ) : css ( 'alineación vertical' , 'medio' ) : wikitexto ( letras_fila ( rev , números_lt , números_rt )) fin si pie de página y mw . texto . trim ( pie de página ) ~= '' entonces div : etiqueta ( 'div' ) : addClass ( 'thumbcaption' ) : wikitext ( pie de página ) fin retorno tostring ( raíz ) fin función convertFenToArgs ( fen ) -- convierte la notación FEN a una matriz de 64 entradas de posiciones, desplazada por 2 local res = { ' ' , ' ' } -- Recorre las filas, que están delimitadas por / para srow en string.gmatch ( "/" .. fen ,"/%w+" ) do - Recorre todas las letras y números de la fila para pieza en srow : gmatch ( "%w" ) hacer si pieza : match ( "%d" ) entonces -- si es un dígito para k = 1 , pieza hacer tabla.insert ( res , ' ' ) fin de lo contrario -- no es un dígito local color = pieza : match ( '%u' ) y 'l' o 'd' pieza = pieza : lower () tabla.insert ( res , pieza ... color ) fin fin fin devolver res fin función convertArgsToFen ( args , offset ) función nullOrWhitespace ( s ) devolver no s o s : match ( '^%s*(.-)%s*$' ) == '' fin función pieza ( s ) devolver nullOrWhitespace ( s ) y 1 o s : gsub ( '%s*(%a)(%a)%s*' , función ( a , b ) devolver b == 'l' y a : upper () o a fin ) fin local res = '' desplazamiento = desplazamiento o 0 para fila = 1 , 8 hacer para archivo = 1 , 8 hacer res = res .. pieza ( args [ 8 * ( fila - 1 ) + archivo + desplazamiento ] ) fin si fila < 8 entonces res = res .. '/' fin fin retorno mw . ustring . gsub ( res , '1+' , función ( s ) retorno # s fin ) fin función p . tablero ( marco ) local args = marco . args local pargs = marco : getParent () . args local estilo = args . estilo o pargs . estilo o 'Ajedrez' cfg = require ( 'Módulo:Tablero de ajedrez/' .. estilo ) nfilas , ncols = cfg . dims () local tamaño = args . tamaño o pargs . tamaño o '26' local reverse = ( args . reverse o pargs . reverse o '' ): lower () == "true" local letters = ( args . letters o pargs . letters o 'ambos' ): lower () local numbers = ( args . numbers o pargs . numbers o 'ambos' ): lower () local header = args [ 2 ] o pargs [ 2 ] o '' local footer = args [ nrows * ncols + 3 ] o pargs [ nrows * ncols + 3 ] o '' local align = ( args [ 1 ] o pargs [ 1 ] o 'tright' ): lower () local clear = args . clear o pargs . clear o ( align : match ( 'tright' ) y 'right' ) o 'none' local fen = args . fen o pargs . fen local pgn = args . pgn o pargs . pgn size = mw . ustring . match ( size , '[%d]+' ) o '26' -- eliminar px de size if ( pgn ) then local pgnModule = require ( 'Module:Pgn' ) metadata , moves = pgnModule . main ( pgn ) fen = moves [ # moves ] end if ( fen ) then align = args . align o pargs . align o 'tright' clear = args . clear o pargs . clear o ( align : match ( 'tright' ) y 'right' ) o 'none' header = args . header o pargs . header o '' footer = args . footer o pargs . footer o '' return chessboard ( convertFenToArgs ( fen ), size , reverse , letras , números , header , footer , align , clear ) end if args [ 3 ] then devolver tablero de ajedrez ( args , tamaño , revertir , letras , números , encabezado , pie de página , alinear , borrar ) de lo contrario devolver tablero de ajedrez ( pargs , tamaño , revertir , letras , números , encabezado , pie de página , alinear , borrar ) fin fin devolver p