Modul:Benutzer:Thornard/Vorlage:Schachbrett
Die Dokumentation für dieses Modul kann unter Modul:Benutzer:Thornard/Vorlage:Schachbrett/Doku erstellt werden
local function trim(text)
while mw.ustring.sub(text,1,1) == " " do
text= mw.ustring.sub(text,2,-1);
end
while mw.ustring.sub(text,-1,-1) == " " do
text= mw.ustring.sub(text,1,-2);
end
return text;
end
local p = {}
-- Erzeugt aus einem String aus algebraischer Notation für die Parameter Z1 bis Z8
-- Die Funktion ist nicht sehr effektiv, da für jede Zeile die komplette Stellung ermittelt werden muss.
function p.GetAlgebraicRow(frame)
local board = {}
local result = '';
local acn = frame.args['Algebraic'] or ''
local idx = tonumber(frame.args['Z']) or 1 ;
local replace_color = { ['W']='l', ['S']='d' }
local replace_piece = { ['K']='k', ['D']='q', ['T']='r', ['S']='n', ['L']='b', ['B']='p', ['G']='g', ['N']='s' }
local replace_piece_ENG = { ['K']='k', ['Q']='q', ['R']='r', ['N']='n', ['B']='b', ['P']='p', ['G']='g', ['S']='s' }
local replace_file = { ['a']=1, ['b']=2, ['c']=3, ['d']=4,
['e']=5, ['f']=6, ['g']=7, ['h']=8 }
-- Brett wird "leer" vorbelegt.
for i = 1, 8 do
board[i] = {}
for j = 1, 8 do
board[i][j] = '--'
end
end
-- Dies sind die Vorgaben
local default_color = 'l' -- Weiß
local default_piece = 'p' -- Bauer
acn = trim(acn)
while string.len(acn) > 0 do
_, _, piece, file, line = string.find(acn, "^(%a)(%w)(%d)");
if (piece ~= nil) and (file ~= nil) and (line ~= nil) then
default_piece = replace_piece[piece]
board[replace_file[file]][tonumber(line)] = default_piece .. default_color
-- Es werden die ersten 4 Zeichen abgetrennt, so dass ein Trennzeichen auch
-- entfernt wird.
acn = string.sub(acn,5,-1)
else
-- einfache algebraische Koordinaten sind ein Spielstein des aktuellen Typs
-- Achtung: Dies sind nicht Bauchern
_, _, file, line = string.find(acn, "^(%a)(%d)");
if (file ~= nil) and (line ~= nil) then
board[replace_file[file]][tonumber(line)] = default_piece .. default_color
acn = string.sub(acn,4,-1)
else
-- mit W und S kann die Farbe gesetzt werden
_, _, color = string.find(acn, "^(%a)");
if (color ~= nil) then
if color == 'W' then default_color = replace_color[color] end
if color == 'S' then default_color = replace_color[color] end
acn = string.sub(acn,3,-1)
else
-- ein Bindestrich setzt die Farbe auf Schwarz
color = string.find(acn, "^%-");
if (color ~= nil) then
default_color = 'd'
default_piece = 'p'
acn = string.sub(acn,2,-1)
else
-- Wenn irgendetwas nicht funktioniert wird einfach eine
-- leere Zeile zurückgegeben.
return '--/--/--/--/--/--/--/--/'
end
end
end
end
acn = trim(acn);
end
-- String für die entsprechende Zeile zusammenbauen
for i = 1,8 do
result = result .. board[i][idx] .. '/';
end
return result;
end
return p;