X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=parser.l;h=ba9ffa6f3cd42e22e281c6d51a159a6a071a13b2;hb=1f84be6944ee48b72a33cf064661fa1a2129b885;hp=0e4f898142bf6cd63c2934cdee45e154cc579b6a;hpb=88082a3882690efd9ea7d3e01ad9d6dd5f5baf86;p=xboard.git diff --git a/parser.l b/parser.l index 0e4f898..ba9ffa6 100644 --- a/parser.l +++ b/parser.l @@ -236,6 +236,7 @@ extern void CopyBoard P((Board to, Board from)); piece = boards[yyboardindex] [currentMoveString[1] - ONE][currentMoveString[0] - AAA]; + if(PieceToChar(piece) == '+' && appData.icsActive) promoted = 1, yytext[skip3] = PieceToChar(DEMOTED piece); // trust ICS if(promoted) piece = (ChessSquare) (DEMOTED piece); c = PieceToChar(piece); if(c == '~') c = PieceToChar((ChessSquare) (DEMOTED piece)); @@ -599,7 +600,7 @@ extern void CopyBoard P((Board to, Board from)); return (int) IllegalMove; } -"+"?[A-Z][xX:-]?[a-l][0-9]=? { +"+"?[A-Z][xX:-]?[a-l][0-9]((=?\(?[A-Z]\)?)|=)? { /* * piece move, possibly ambiguous */ @@ -628,7 +629,7 @@ extern void CopyBoard P((Board to, Board from)); cl.promoCharIn = NULLCHAR; if(yyleng-skip > 3) /* [HGM] can have Shogi-style promotion */ - cl.promoCharIn = yytext[yyleng-1]; + cl.promoCharIn = yytext[yyleng-1-(yytext[yyleng-1]==')')]; if (appData.debugMode) { fprintf(debugFP, "Parser Qa1: yyleng=%d, %d(%d,%d)-(%d,%d) = %d (%c)\n", @@ -655,7 +656,7 @@ extern void CopyBoard P((Board to, Board from)); return (int) cl.kind; } -"+"?[A-Z][a-l0-9][xX:-]?[a-l][0-9]=? { +"+"?[A-Z][a-l0-9][xX:-]?[a-l][0-9]((=?\(?[A-Z]\)?)|=)? { /* * piece move with rank or file disambiguator */ @@ -694,7 +695,7 @@ extern void CopyBoard P((Board to, Board from)); cl.promoCharIn = NULLCHAR; if(yyleng-skip > 4) /* [HGM] can have Shogi-style promotion */ - cl.promoCharIn = yytext[yyleng-1]; + cl.promoCharIn = yytext[yyleng-1-(yytext[yyleng-1]==')')]; /* [HGM] do not allow values beyond board size */ if(cl.rtIn >= BOARD_HEIGHT || @@ -827,7 +828,7 @@ extern void CopyBoard P((Board to, Board from)); rf, ff, rt, ft, NULLCHAR); } -[A-Z][@*][a-l][0-9] { +[A-Za-z][@*][a-l][0-9] { /* Bughouse piece drop. */ currentMoveString[1] = '@'; currentMoveString[2] = yytext[2];