Position.fromFen constructor
Position.fromFen(
- String fen
Implementation
factory Position.fromFen(String fen) {
final p = Position();
final parts = fen.trim().split(RegExp(r'\s+'));
final placement = parts[0];
var rank = 7, file = 0;
for (final ch in placement.split('')) {
if (ch == '/') {
rank--;
file = 0;
} else if (RegExp(r'[1-8]').hasMatch(ch)) {
file += int.parse(ch);
} else {
final color = ch == ch.toUpperCase() ? white : black;
final type = _pieceTypeFromChar(ch.toLowerCase());
p._addPiece(color, type, rank * 8 + file);
file++;
}
}
p.turn = (parts.length > 1 && parts[1] == 'b') ? black : white;
p.castling = 0;
if (parts.length > 2 && parts[2] != '-') {
for (final c in parts[2].split('')) {
switch (c) {
case 'K':
p.castling |= castleWK;
case 'Q':
p.castling |= castleWQ;
case 'k':
p.castling |= castleBK;
case 'q':
p.castling |= castleBQ;
}
}
}
p.epSquare = (parts.length > 3 && parts[3] != '-')
? _squareFromName(parts[3])
: -1;
p.halfmove = parts.length > 4 ? int.tryParse(parts[4]) ?? 0 : 0;
p.fullmove = parts.length > 5 ? int.tryParse(parts[5]) ?? 1 : 1;
return p;
}