Author: Tim Foden
Date: 12:05:45 01/29/02
I am in the process of fiddling with a GUI of mine (in the long run up to
releasing it as a GUI for Green Light). I am currently trying to figure
out how to handle comments in PGN. I want to store the whole PGN tree in my
program, and allow variation to be played, added, removed, etc.
To be more specific, I want to be able to load a PGN file, and save it again,
and not lose any of the comment information (including its position).
Here is some example PGN (one of Kurt Utzingers great commented games,
truncated, and with most of the comments stripped out):
[Event "Gromit382_Pharaon261"]
[Site "Wetzikon"]
[Date "2002.01.19"]
[Round "1"]
[White "Gromit382"]
[Black "Pharaon 2.61"]
[Result "1/2-1/2"]
[ECO "A84"]
[Annotator "Utzinger,K"]
[PlyCount "299"]
[Time Control "40 move/40 min"]
{Gromit 3.8.2 - Pharaon 2.61, WinBoard 4.2.5 match, 40'/40, P3 650/128, 32 MB
hash each, ponder=off, 4-men and partly 5-men TB's } 1. d4 d5 2. c4 c6 3.
Nf3 e6 4. e3 {White last book move} 4... f5 5. Bd3 Nf6 {Black last book move}
6. Nc3 Be7 7. O-O O-O 8. Bd2 Ne4 9. Be1 Re8 10. Qe2 Nd7 11. a4 Bd6 12. b4 Qf6
13. b5 Qg6 14. Rc1 Rb8 15. Qd1 Rd8 16. cxd5 exd5 17. Ne2 c5
{In my opinion a wrong decision that
leads to a weak isolated d-pawn. But more important is the fact that White now
finds the opportunity to activate his pieces.} (17... Qh6 18. bxc6 bxc6 19. Ng3
Nb6 20. Rxc6 Bd7 21. Rc1 Nxa4 {with better play for Black.}) 18. dxc5 Ndxc5 19.
Bb1 Be6 20. Ned4 Bd7 21. Ba2 Qf7 22. Bb4 b6 23. Ne2 ({Most interesting is} 23.
Nc6 Bxc6 24. bxc6 Rbc8 25.
Nd4 {and it is difficult for Black to find a good defence.}) 23... Bc8
{rest of game removed - TCF} 1/2-1/2
Most comments in PGN seem to apply to the move directly before the comment,
or to be applicable to the position that has been arrived at by the move
directly before the comment. Examples of these can be found after moves w4,
B5, B17, B21 (in the variation) and W25 (in the variation).
My program currently associates comments with the position in the tree where
the comment occurs, so the above are treated quite well.
The next place for a comment is the initial one ... {Gromit 3.8.2 - ...}.
This occurs before any moves have been made.
My program copes with this one, as it automatically associates it with the
root position, which seems to be the correct action in this case.
So, now we get to the comment that is causing me a problem. It is the one
at the beginning of the variation of move 23. --> ({Most interesting is} 23.
Nc6 etc.). My program currently associates the "Most interesting is" with the
position after 22... b6. This is almost certainly not the correct thing to
do. It definately means that there is a change when I save the game again.
The main problem with this comment is that it is right at the start of a
variation (before the first move in the variation). You only really want to
display it when the user is in the variation, but at the time the comment
is parsed, there is no variation to hang it on (in my program). Even worse,
variations are not explicit in my tree structure. There are only positions,
and child positions... there is not explicit storate for edges (moves). The
moves are stored in the positions themselves, as are the comments.
So, I have a couple of questions which I hope someone may be able to answer :)
1. In the absence of a standard way of dealing with the comments situation
above, what do other people do in their programs? Maybe I should add a
specific Variation class, and if a comment comes before the first move
in a variation, I could add it to this.
2. Is there a more up-to-date PGN spec than the one I have dated 1994.03.12?
If there is, does it say more about comments than the one I have?
Cheers, Tim.
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.