Crate chess_notation_parser
source · [−]Expand description
Chess notation parser
Crate transforms algebraic chess notation into software readable structs and
vice versa. Parsed chess notation for each turn is stored within Turn
struct.
To parse a certain chess turn, such as d2xe3, store it in form of &str
and pass it as an argument into Turn::try_from() function.
Turn is an enum with two elements:
- Castling- a struct which describes castling turn
- Move- a struct which describes every other possible turn
Example for Castling turn
0-0 will be translated to:
Turn::Castling(Castling {
    r#type: CastlingType::Short,
    flags: Flag::NONE,
});Examples for Move turns
d6 will be translated to:
Turn::Move (Move {
    who: Piece::Pawn,
    dst: Square::D6,
    flags: Flag::NONE,
    src: None,
    promotion: None,
});d7xe8=B+? will be translated to:
Turn::Move (Move {
    who: Piece::Pawn,
    dst: Square::E8,
    flags: Flag::CHECK | Flag::CAPTURE,
    src: Some(vec![Square::D7]),
    promotion: Some(Piece::Bishop),
});Nab3# will be translated to:
Turn::Move (Move {
    who: Piece::Knight,
    dst: Square::B3,
    flags: Flag::CHECKMATE,
    src: Some(Square::get_file('a').unwrap()),  // Vector of 'Ax' squares
    promotion: None,
});Chess notation parser rules
- 
Square notation should use lowercase alphabetic characters - Valid: a1,a2…h7,h8.
 
- Valid: 
- 
Castling notation can be written with both 0andO- Valid example: 0-0-0orO-O
- When Castlingturn is printed out, it will be printed with0notation
 
- Valid example: 
- 
Notation for pieces: - K: King
- Q: Queen
- R: Rook
- B: Bishop
- N: Knight
- Pawns are indicated by the absence of the letter
 
- 
Capture is annotated with a lowercase xcharacter- Valid example: Qxd3
 
- Valid example: 
- 
Check is annotated with a +character- Valid example: Qd3+
 
- Valid example: 
- 
Checkmate is annotated with a #character- Valid example: Qd3#
 
- Valid example: 
- 
Pawn promotion is annoted with =symbol followed by a piece to which pawn is promoted to- Pawn promotion is valid only for ranks 8and1
- Valid example: g8=Q
 
- Pawn promotion is valid only for ranks 
- 
Comments ??,!!,?,!,!?,?!are allowed only at the end of the turn- Valid example: a1=B??
- Invalid example: ??a1=B
 
- Valid example: 
Modules
Bitmask flag depicts special capabilities of a chess turn (check, checkmate, capture)
Macros
Creates a Turn::Castling from given number of arguments
Creates a Turn::Move from given number of arguments
Structs
Enums
Castling type (side)
Chess pieces
Chess board square
Struct representation of a string formatted chess turn
Traits
Implements function to easily check chess turn flags