diff options
| -rw-r--r-- | chess-algebraic.el | 3 | ||||
| -rw-r--r-- | chess-pgn.el | 14 |
2 files changed, 13 insertions, 4 deletions
diff --git a/chess-algebraic.el b/chess-algebraic.el index 1f76e1a..e9145e7 100644 --- a/chess-algebraic.el +++ b/chess-algebraic.el @@ -55,6 +55,9 @@ This regexp handles both long and short form.") (defconst chess-algebraic-regexp-entire (concat chess-algebraic-regexp "$")) +(defconst chess-algebraic-regexp-ws + (concat chess-algebraic-regexp "\\s-")) + (chess-message-catalog 'english '((clarify-piece . "Clarify piece to move by rank or file") (could-not-clarify . "Could not determine which piece to use") diff --git a/chess-pgn.el b/chess-pgn.el index 5b1b977..662d156 100644 --- a/chess-pgn.el +++ b/chess-pgn.el @@ -18,18 +18,24 @@ (pgn-parse-error . "Error parsing PGN syntax"))) (defun chess-pgn-read-plies (game position &optional top-level) - (let ((plies (list t)) prevpos) + (let ((plies (list t)) (begin (point)) move-beg prevpos) (catch 'done (while (not (eobp)) (cond ((looking-at "[1-9][0-9]*\\.[. ]*") (goto-char (match-end 0))) - ((looking-at chess-algebraic-regexp) + ((looking-at chess-algebraic-regexp-ws) + (setq move-beg (point)) (goto-char (match-end 0)) + (skip-syntax-backward " ") (setq prevpos position) - (let* ((move (match-string-no-properties 0)) - (ply (chess-algebraic-to-ply position move))) + (let* ((move (buffer-substring-no-properties move-beg (point))) + (ply (condition-case err + (chess-algebraic-to-ply position move) + (error + (message "PGN: %s" (buffer-substring begin (point-max))) + (error (error-message-string err)))))) (unless ply (chess-error 'pgn-read-error move)) (setq position (chess-ply-next-pos ply)) |
