|  | @@ -26,14 +26,8 @@ class ChessSession:
 | 
											
												
													
														|  |          move = move.strip()
 |  |          move = move.strip()
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          try:
 |  |          try:
 | 
											
												
													
														|  | -            if move.startswith(":"):
 |  | 
 | 
											
												
													
														|  | -                move = self.board.parse_san(move[1:])
 |  | 
 | 
											
												
													
														|  | -            else:
 |  | 
 | 
											
												
													
														|  | -                move = self.board.parse_uci(move)
 |  | 
 | 
											
												
													
														|  | -        except (chess.InvalidMoveError, chess.IllegalMoveError):
 |  | 
 | 
											
												
													
														|  | -            raise IllegalMove(move)
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -        if move != chess.Move.null() and move not in self.board.legal_moves:
 |  | 
 | 
											
												
													
														|  | 
 |  | +            move = self.board.parse_san(move)
 | 
											
												
													
														|  | 
 |  | +        except (chess.InvalidMoveError, chess.IllegalMoveError, chess.AmbiguousMoveError):
 | 
											
												
													
														|  |              raise IllegalMove(move)
 |  |              raise IllegalMove(move)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          return move
 |  |          return move
 | 
											
										
											
												
													
														|  | @@ -65,9 +59,23 @@ class ChessSession:
 | 
											
												
													
														|  |      def from_moves(self, moves, strict=True):
 |  |      def from_moves(self, moves, strict=True):
 | 
											
												
													
														|  |          self.board.reset()
 |  |          self.board.reset()
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        moves = moves.strip().split(" ")
 |  | 
 | 
											
												
													
														|  | -        if len(moves) > 600 or (strict and len(moves) % 2 != 0):
 |  | 
 | 
											
												
													
														|  | -            raise IllegalMove
 |  | 
 | 
											
												
													
														|  | 
 |  | +        moves = moves.strip()
 | 
											
												
													
														|  | 
 |  | +        if moves.startswith("1."):
 | 
											
												
													
														|  | 
 |  | +            text = moves
 | 
											
												
													
														|  | 
 |  | +            moves = []
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            while text and len(moves) < 600:
 | 
											
												
													
														|  | 
 |  | +                match = re.match(r"^(?:\d+\. ?([^.\s]+) ([^.\s]+))", text)
 | 
											
												
													
														|  | 
 |  | +                if not match:
 | 
											
												
													
														|  | 
 |  | +                    raise IllegalMove
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +                moves.extend((match.group(1), match.group(2)))           
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +                text = text[match.end() - match.start():].strip()
 | 
											
												
													
														|  | 
 |  | +        else:
 | 
											
												
													
														|  | 
 |  | +            moves = moves.split(" ")
 | 
											
												
													
														|  | 
 |  | +            if len(moves) > 600 or (strict and len(moves) % 2 != 0):
 | 
											
												
													
														|  | 
 |  | +                raise IllegalMove
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          for i, move in zip(range(len(moves)), moves):
 |  |          for i, move in zip(range(len(moves)), moves):
 | 
											
												
													
														|  |              move = self.parse_move(move)
 |  |              move = self.parse_move(move)
 |