toFen method

String toFen()

Implementation

String toFen() {
  final sb = StringBuffer();
  for (var rank = 7; rank >= 0; rank--) {
    var empty = 0;
    for (var file = 0; file < 8; file++) {
      final sq = rank * 8 + file;
      final type = mailbox[sq];
      if (type == -1) {
        empty++;
      } else {
        if (empty > 0) {
          sb.write(empty);
          empty = 0;
        }
        final isWhite = (occ[white] & (1 << sq)) != 0;
        final ch = _pieceChar(type);
        sb.write(isWhite ? ch.toUpperCase() : ch);
      }
    }
    if (empty > 0) sb.write(empty);
    if (rank > 0) sb.write('/');
  }
  sb.write(turn == white ? ' w ' : ' b ');
  final c = StringBuffer();
  if ((castling & castleWK) != 0) c.write('K');
  if ((castling & castleWQ) != 0) c.write('Q');
  if ((castling & castleBK) != 0) c.write('k');
  if ((castling & castleBQ) != 0) c.write('q');
  sb.write(c.isEmpty ? '-' : c.toString());
  sb.write(' ');
  sb.write(epSquare >= 0 ? _squareName(epSquare) : '-');
  sb.write(' $halfmove $fullmove');
  return sb.toString();
}