online multiplayer chess game (note server currently down)
Diffstat (limited to 'PGN/PGN.gd')
-rw-r--r--PGN/PGN.gd38
1 files changed, 8 insertions, 30 deletions
diff --git a/PGN/PGN.gd b/PGN/PGN.gd
index 32ca121..52d15bc 100644
--- a/PGN/PGN.gd
+++ b/PGN/PGN.gd
@@ -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}