I'm scanning old club zines. Apart from a colleague of mine who has the habit of hübnering up nested annotations with a mix of {[()]} (if done correctly, this should be no problem for PGN standard, since {} defines a comment regardless of additional brackets) there is also easily a ( mistaken for { in OCR or the other way round, or I forget to change () (in the zine) to {} or vice versa.
Here is a random example of a bug from today:
[FEN ""]
1. d4 Nf6 2. g3 c5 3. c3 cxd4 4. cxd4 d5 5. Nc3 Bf5 {comment} 6. Qb3 Nc6 7. Nf3 {comment} 7...Na5 8. Qa4+ Bd7 9. Qd1 {comment) 9...e6 10. Bg2 Bd6 11. O-O O-O 12. Ne5 {comment} 12...Rc8 {comment) 13. Bg5 Nc4 {comment} 14. Bxf6 gxf6 15. Nxc4 Rxc4 16. e4
As you observe, two closing ) should be }. (Spotted them both in the source code?)
Here are some options I already tried:
- My usual PGN software is ChessPad, which said "Bxf6 illegal move". But the error happened far before that.
- Caissa Online PGN (my other favorite tool) gives total nonsense.
- Lichess doesn't accept it at all.
- I'm too lazy at the moment to write a Python parser.
- Brian (comment below) suggested "abusing" the CSE PGN tool. Guess what, indeed it barfs exactly where it should (at the first error), and would be a viable option if I can't find the bug. I'm still not happy with writing a "fake" question just to parse my PGN files.
Thus I would like you to suggest good standalone PGN software which nails down the error(s) in buggy PGNs exactly where it happens, as the CSE parser seems to do. This includes illegal moves due to typos, which are also frequent. (Clearly, this is tricky: a naive approach in the given example might pair the first closing bracket with the one still open after Qd1, and thus find as "next" move 12...Rc8 and protest there.)