online multiplayer chess game (note server currently down)
Diffstat (limited to 'PGN/PGN.gd')
| -rw-r--r-- | PGN/PGN.gd | 17 |
1 files changed, 8 insertions, 9 deletions
@@ -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() |