From 72b8747b4fb41633284f9bcf1d9544eda69519aa Mon Sep 17 00:00:00 2001 From: David Engster Date: Mon, 31 Oct 2011 09:00:32 +0800 Subject: [PATCH] * admin/grammars/bovine-grammar.el: Avoid using old-style backquotes. --- admin/ChangeLog | 4 ++++ admin/grammars/bovine-grammar.el | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/admin/ChangeLog b/admin/ChangeLog index 7c2f1a743b2..f91d53194ce 100644 --- a/admin/ChangeLog +++ b/admin/ChangeLog @@ -1,3 +1,7 @@ +2011-10-31 David Engster + + * grammars/bovine-grammar.el: Avoid using old-style backquotes. + 2011-10-28 Eli Zaretskii * nt/README-ftp-server: Mention UNICOWS.DLL as prerequisite for diff --git a/admin/grammars/bovine-grammar.el b/admin/grammars/bovine-grammar.el index 5a948608671..0e8756e1c5b 100644 --- a/admin/grammars/bovine-grammar.el +++ b/admin/grammars/bovine-grammar.el @@ -109,6 +109,14 @@ NAME, ALIASCLASS, DEFINITION and ATTRIBUTES." ;; Cache of macro definitions currently in use. (defvar bovine--grammar-macros nil) +;; Detect if we have an Emacs with newstyle unquotes allowed outside +;; of backquote. +;; This should probably be changed to a test to (= emacs-major-version 24) +;; when it is released, but at the moment it might be possible that people +;; are using an older snapshot. +(defvar bovine--grammar-newstyle-unquote + (equal '(, test) (read ",test"))) + (defun bovine-grammar-expand-form (form quotemode &optional inplace) "Expand FORM into a new one suitable to the bovine parser. FORM is a list in which we are substituting. @@ -142,6 +150,17 @@ expanded from elsewhere." (while form (setq first (car form) form (cdr form)) + ;; Hack for dealing with new reading of unquotes outside of + ;; backquote (introduced in rev. 102591 in emacs-bzr). + (when (and bovine--grammar-newstyle-unquote + (listp first) + (or (equal (car first) '\,) + (equal (car first) '\,@))) + (if (listp (cadr first)) + (setq form (append (cdr first) form) + first (car first)) + (setq first (intern (concat (symbol-name (car first)) + (symbol-name (cadr first))))))) (cond ((eq first nil) (when (and (not inlist) (not inplace))