Add support for pre-move comments in GameNode and StringExporter
This PR adds a pre_comment attribute to GameNode and updates the StringExporter to support writing comments immediately before a move token.
Use Case: In many educational chess materials (and complex PGNs), there is a semantic difference between a comment explaining the previous position and a comment giving instructions specifically for the upcoming move (e.g., "Find the best move").
Currently, users are forced to append such comments to node.parent.comment, which works for PGN validity but loses the logical association in the object model.
Changes:
- Added
pre_commentattribute toGameNode. - Added
visit_pre_commenttoBaseVisitorandStringExporterMixin. - Updated
ChildNode._accept_nodeto visit the pre-comment before the move.
This implementation ensures that force_movenumber is triggered after a pre-comment, producing valid PGN output like:
1. e4 {Post-comment} {Pre-comment for next move} 2. Nf3