online multiplayer chess game (note server currently down)
Diffstat (limited to 'PGN/PGN.gd')
-rw-r--r--PGN/PGN.gd17
1 files changed, 8 insertions, 9 deletions
diff --git a/PGN/PGN.gd b/PGN/PGN.gd
index 8a8eaf6..9711f10 100644
--- a/PGN/PGN.gd
+++ b/PGN/PGN.gd
@@ -1,20 +1,19 @@
extends Node
class_name PGN
+var movetextex = Utils.compile(
+ "([NBKRQ]?[a-h]?[1-8]?[\\-x]?[a-h][1-8](?:=?[nbrqkNBRQK])?|[PNBRQK]?@[a-h][1-8]|--|Z0|0000|@@@@|O-O(?:-O)?|0-0(?:-0)?)|(\\{.*)|(;.*)|(\\$[0-9]+)|(\\()|(\\))|(\\*|1-0|0-1|1\\/2-1\\/2)|([\\?!]{1,2})"
+)
+var tagex = Utils.compile('^\\[([A-Za-z0-9_]+)\\s+"([^\\r]*)"\\]\\s*$')
+var tagnameex = Utils.compile("^[A-Za-z0-9_]+\\Z")
-func parse(pgn: String, tags := true):
+
+func parse(pgn: String, tags := true) -> Dictionary:
# put tags into a dictionary,
# and the moves into a array
-
- var movetextex = SanParse.compile(
- "([NBKRQ]?[a-h]?[1-8]?[\\-x]?[a-h][1-8](?:=?[nbrqkNBRQK])?|[PNBRQK]?@[a-h][1-8]|--|Z0|0000|@@@@|O-O(?:-O)?|0-0(?:-0)?)|(\\{.*)|(;.*)|(\\$[0-9]+)|(\\()|(\\))|(\\*|1-0|0-1|1\\/2-1\\/2)|([\\?!]{1,2})",
- false
- )
var lines = Array(pgn.split("\n"))
var headers := {}
if tags:
- var tagex = SanParse.compile('^\\[([A-Za-z0-9_]+)\\s+"([^\\r]*)"\\]\\s*$', false)
- var tagnameex = SanParse.compile("^[A-Za-z0-9_]+\\Z", false)
# get headers
while !lines.empty():
var line = lines[0].strip_edges()
@@ -33,7 +32,7 @@ func parse(pgn: String, tags := true):
headers[cap[1]] = cap[2]
else:
# invalid headers
- return null
+ return {}
else:
break
var movetext := PoolStringArray()