online multiplayer chess game (note server currently down)
Diffstat (limited to 'SanParse/SanParse.gd')
| -rw-r--r-- | SanParse/SanParse.gd | 163 |
1 files changed, 0 insertions, 163 deletions
diff --git a/SanParse/SanParse.gd b/SanParse/SanParse.gd deleted file mode 100644 index 53663af..0000000 --- a/SanParse/SanParse.gd +++ /dev/null @@ -1,163 +0,0 @@ -extends Node -class_name SanParser - -const end := "(\\+|\\#)?(\\?\\?|\\?|\\?!|!|!!)?$" # annotation - -var regexs := { - "pawn_move": compile("^([a-h])([1-8])"), - "long_pawn_move": compile("^([a-h])([1-8])([a-h])([1-8])"), # long-san - "piece_movement": compile("^([KQBNR])([a-h])([1-8])"), - "specific_row_piece_movement": compile("^([KQBNR])([0-9])([a-h])([1-8])"), - "specific_column_piece_movement": compile("^([KQBNR])([a-h])([a-h])([1-8])"), - "long_piece_movement": compile("^([KQBNR])([a-h])([0-9])([a-h])([1-8])"), - "pawn_capture": compile("^([a-h])x([a-h])([1-8])(?:=?([KQBNR]))?"), - "long_pawn_capture": compile("^([a-h])([1-8])x([a-h])([1-8])(?:=?([KQBNR]))?"), - "piece_capture": compile("^([KQBNR])x([a-h])([1-8])"), - "specific_column_piece_capture": compile("^([KQBNR])([a-h])x([a-h])([1-8])"), - "specific_row_piece_capture": compile("^([KQBNR])([0-9])x([a-h])([1-8])"), - "long_piece_capture": compile("^([KQBNR])([a-h])([0-9])x([a-h])([1-8])"), - "pawn_promotion": compile("^([a-h])([1-8])=?([KQBNR])"), - "long_pawn_promotion": compile("^([a-h])([1-8])([a-h])([1-8])=?([KQBNR])"), - "castling": compile("^(O-O-O|O-O)"), -} - - -static func pos(col: String, row: String) -> Vector2: - return Utils.from_algebraic(col + row) - - -const UNKNOWN_POS = Vector2(-1, -1) -enum { PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING } - - -static func from_str(string: String) -> int: - var find = " NBRQK".find(string) - if find != -1: - return find - else: - return "PNBRQK".find(string) - - -func compile(regxstr: String, app_end := true) -> RegEx: #app_end because append end get it - var reg = RegEx.new() - reg.compile(regxstr + end if app_end else regxstr) - return reg - - -func parse(san: String) -> Move: - var mv = regexmatch(san) - mv.generated_from = san # for debugging i just moved the thing over so i can do this - return mv - - -func regexmatch(san: String) -> Move: - var re: RegExMatch = regexs.pawn_move.search(san) - if re: - var cap = re.strings - var mov = Move.new(PAWN, [UNKNOWN_POS, pos(cap[1], cap[2])]).set_check_type(cap[3]) - return mov - - re = regexs.long_pawn_move.search(san) - if re: - var cap = re.strings - var mov = Move.new(PAWN, [pos(cap[1], cap[2]), pos(cap[3], cap[4])]).set_check_type(cap[5]) - return mov - - re = regexs.piece_movement.search(san) - if re: - var cap = re.strings - var mov = Move.new(from_str(cap[1]), [UNKNOWN_POS, pos(cap[2], cap[3])]) - mov.set_check_type(cap[4]) - return mov - - re = regexs.specific_row_piece_movement.search(san) - if re: - var cap = re.strings - var mov = Move.new(from_str(cap[1]), [Vector2(-1, Utils.row_pos(cap[2])), pos(cap[3], cap[4])]) - mov.set_check_type(cap[5]) - return mov - - re = regexs.specific_column_piece_movement.search(san) - if re: - var cap = re.strings - var mov = Move.new(from_str(cap[1]), [Vector2(Utils.col_pos(cap[2]), -1), pos(cap[3], cap[4])]) - mov.set_check_type(cap[5]) - return mov - - re = regexs.long_piece_movement.search(san) - if re: - var cap = re.strings - var mov = Move.new(from_str(cap[1]), [pos(cap[2], cap[3]), pos(cap[4], cap[5])]) - mov.set_check_type(cap[6]) - return mov - - re = regexs.pawn_capture.search(san) - if re: - var cap = re.strings - var mov = Move.new(PAWN, [Vector2(Utils.col_pos(cap[1]), -1), pos(cap[2], cap[3])], true) - mov.promotion = from_str(cap[4]) - mov.set_check_type(cap[5]) - return mov - - re = regexs.long_pawn_capture.search(san) - if re: - var cap = re.strings - var mov = Move.new(PAWN, [pos(cap[1], cap[2]), pos(cap[3], cap[4])], true) - mov.promotion = from_str(cap[5]) - mov.set_check_type(cap[6]) - return mov - - re = regexs.piece_capture.search(san) - if re: - var cap = re.strings - var mov = Move.new(from_str(cap[1]), [UNKNOWN_POS, pos(cap[2], cap[3])], true) - mov.set_check_type(cap[4]) - return mov - - re = regexs.specific_column_piece_capture.search(san) - if re: - var cap = re.strings - var mov = Move.new(from_str(cap[1]), [Vector2(Utils.col_pos(cap[2]), -1), pos(cap[3], cap[4])], true) - mov.set_check_type(cap[5]) - return mov - - re = regexs.specific_row_piece_capture.search(san) - if re: - var cap = re.strings - var mov = Move.new(from_str(cap[1]), [Vector2(-1, Utils.row_pos(cap[2])), pos(cap[3], cap[4])], true) - mov.set_check_type(cap[5]) - return mov - - re = regexs.long_piece_capture.search(san) - if re: - var cap = re.strings - var mov = Move.new(from_str(cap[1]), [pos(cap[2], cap[3]), pos(cap[4], cap[5])], true) - mov.set_check_type(cap[6]) - return mov - - re = regexs.pawn_promotion.search(san) - if re: - var cap = re.strings - var mov = Move.new(PAWN, [UNKNOWN_POS, pos(cap[1], cap[2])], true) - mov.promotion = from_str(cap[3]) - mov.set_check_type(cap[4]) - return mov - - re = regexs.long_pawn_promotion.search(san) - if re: - var cap = re.strings - var mov = Move.new(PAWN, [pos(cap[1], cap[2]), pos(cap[3], cap[4])], true) - mov.promotion = from_str(cap[5]) - mov.set_check_type(cap[6]) - return mov - - re = regexs.castling.search(san) - if re: - var cap = re.strings - var mov = Move.new(KING, Move.castle_type(cap[1])) - mov.set_check_type(cap[2]) - return mov - - push_error("regex exhausted: no matches(%s)" % san) - - return null |