Sophie

Sophie

distrib > * > 2008.0 > x86_64 > by-pkgid > 9407abb27b352ffb07592cef723a395f > files > 1

pgn-extract-16.2-1mdv2008.0.src.rpm

--- pgn-extract-15.0/grammar.c.checkmate	2001-09-14 16:36:03.000000000 +0800
+++ pgn-extract-15.0/grammar.c	2005-08-22 15:48:07.000000000 +0800
@@ -449,9 +449,12 @@ ParseMoveUnit(void)
 	    strcat((char *) move_details->move,"+");
 	    Symbol = next_token();
 	    /* Sometimes + is followed by #, so cover this case. */
-	    if(Symbol == CHECK_SYMBOL){
+	    if((Symbol == CHECK_SYMBOL) || (Symbol == CHECKMATE_SYMBOL)){
 		Symbol = next_token();
 	    }
+	} else if(Symbol == CHECKMATE_SYMBOL){
+	    strcat((char *) move_details->move,"#");
+	    Symbol = next_token();
 	}
 	move_details->Comment = ParseOptCommentList();
     }
--- pgn-extract-15.0/lex.c.checkmate	2001-09-14 16:36:03.000000000 +0800
+++ pgn-extract-15.0/lex.c	2005-08-22 15:39:15.000000000 +0800
@@ -225,7 +225,7 @@ init_lex_tables(void)
     ChTab['!'] = ANNOTATE;
     ChTab['?'] = ANNOTATE;
     ChTab['+'] = CHECK_SYMBOL;
-    ChTab['#'] = CHECK_SYMBOL;
+    ChTab['#'] = CHECKMATE_SYMBOL;
     ChTab['.'] = DOT;
     ChTab['('] = RAV_START;
     ChTab[')'] = RAV_END;
@@ -721,8 +721,10 @@ get_next_symbol(void)
                     }
                     break;
                 case CHECK_SYMBOL:
-                    /* Allow ++ */
-                    while(ChTab[(unsigned)*linep] == CHECK_SYMBOL){
+                case CHECKMATE_SYMBOL:
+                    /* Allow ++ and +# */
+                    while((ChTab[(unsigned)*linep] == CHECK_SYMBOL) ||
+			  (ChTab[(unsigned)*linep] == CHECKMATE_SYMBOL)){
                         linep++;
                     }
                     break;
--- pgn-extract-15.0/tokens.h.checkmate	2005-08-21 16:25:35.000000000 +0800
+++ pgn-extract-15.0/tokens.h	2005-08-21 16:25:43.000000000 +0800
@@ -28,7 +28,7 @@ typedef enum {
      * returned to the parser as complete token identifications.
      */
     EOF_TOKEN, TAG, STRING, COMMENT, NAG,
-    CHECK_SYMBOL, MOVE_NUMBER, RAV_START, RAV_END,
+    CHECK_SYMBOL, CHECKMATE_SYMBOL, MOVE_NUMBER, RAV_START, RAV_END,
     MOVE, TERMINATING_RESULT,
     /* The remaining tokens are those that are used to
      * perform the identification.  They are not handled by