online multiplayer chess game (note server currently down)
Diffstat (limited to 'PGN/PGN.gd')
| -rw-r--r-- | PGN/PGN.gd | 38 |
1 files changed, 8 insertions, 30 deletions
@@ -2,7 +2,7 @@ extends Node class_name PGN -func parse(string): +func parse(string) -> Dictionary: # put tags into a dictionary, # and the moves into a array @@ -17,13 +17,15 @@ func parse(string): var headers := {} var lines = Array(string.split("\n")) while !lines.empty(): - var line = lines.pop_front().strip_edges() + var line = lines[0].strip_edges() if !line or line[0] in ["%", ";"]: + lines.pop_front() continue if line[0] != "[": break + lines.pop_front() var tag_match = tagex.search(line) if tag_match: var cap = tag_match.strings @@ -32,7 +34,7 @@ func parse(string): else: # invalid headers push_error("invalid headers") - return + return {} else: break @@ -44,30 +46,6 @@ func parse(string): if line[0] in ["%", ";"]: continue for found in movetextex.search_all(line): - movetext.append(found.strings[1]) - - return [headers, movetext] - - -func _ready(): - var parsed = parse( - """ - [Event \"F/S Return Match\"] - [Site \"Belgrade, Serbia JUG\"] - [Date \"1992.11.04\"] - [Round \"29\"] - [White \"Fischer, Robert J.\"] - [Black \"Spassky, Boris V.\"] - [Result \"1/2-1/2\"] - - 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 {This opening is called the Ruy Lopez.} - 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Nb8 10. d4 Nbd7 - 11. c4 c6 12. cxb5 axb5 13. Nc3 Bb7 14. Bg5 b4 15. Nb1 h6 16. Bh4 c5 17. dxe5 - Nxe4 18. Bxe7 Qxe7 19. exd6 Qf6 20. Nbd2 Nxd6 21. Nc4 Nxc4 22. Bxc4 Nb6 - 23. Ne5 Rae8 24. Bxf7+ Rxf7 25. Nxf7 Rxe1+ 26. Qxe1 Kxf7 27. Qe3 Qg5 28. Qxg5 - hxg5 29. b3 Ke6 30. a3 Kd6 31. axb4 cxb4 32. Ra5 Nd5 33. f3 Bc8 34. Kf2 Bf5 - 35. Ra7 g6 36. Ra6+ Kc5 37. Ke1 Nf4 38. g3 Nxh3 39. Kd2 Kb5 40. Rd6 Kc5 41. Ra6 - Nf2 42. g4 Bd3 43. Re6 1/2-1/2 - """ - ) - print(parsed) + if found.strings[1]: + movetext.append(found.strings[1]) + return {"headers": headers, "moves": movetext} |