changeset 87269:59fee65281f5

(math-restore-underscores, math-string-restore-underscores): New functions. (math-read-factor): Properly check variable names with underscores for entries in `math-expr-variable-mapping'.
author Jay Belanger <jay.p.belanger@gmail.com>
date Wed, 12 Dec 2007 04:53:27 +0000
parents 176116c3fd05
children 3355fd74a93d
files lisp/calc/calc-aent.el
diffstat 1 files changed, 17 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/calc/calc-aent.el	Wed Dec 12 01:18:26 2007 +0000
+++ b/lisp/calc/calc-aent.el	Wed Dec 12 04:53:27 2007 +0000
@@ -1015,6 +1015,19 @@
        (concat (math-match-substring x 1) "-" (math-match-substring x 2)))
     x))
 
+(defun math-restore-underscores (x)
+  "Replace pound signs by underscores in the symbol x.
+If the current Calc language does not allow underscores, return nil."
+  (if (memq calc-language calc-lang-allow-underscores)
+      (intern-soft (math-string-restore-underscores (symbol-name x)))))
+
+(defun math-string-restore-underscores (x)
+  "Replace pound signs by underscores in the string x."
+  (if (string-match "\\`\\(.*\\)#\\(.*\\)\\'" x)
+      (math-string-restore-underscores
+       (concat (math-match-substring x 1) "_" (math-match-substring x 2)))
+    x))
+
 (defun math-read-if (cond op)
   (let ((then (math-read-expr-level 0)))
     (or (equal math-expr-data ":")
@@ -1116,7 +1129,10 @@
 				      sym
 				    (intern (concat "var-"
 						    (symbol-name sym)))))))
-		   (let ((v (assq (nth 1 val) math-expr-variable-mapping)))
+		   (let ((v (or
+                             (assq (nth 1 val) math-expr-variable-mapping)
+                             (assq (math-restore-underscores (nth 1 val))
+                                   math-expr-variable-mapping))))
 		     (and v (setq val (if (consp (cdr v))
 					  (funcall (car (cdr v)) v val)
 					(list 'var