parse pgn in single pass