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 turnMove- 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: KingQ: QueenR: RookB: BishopN: 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