From: Jay Belanger Date: Sun, 11 Oct 2015 20:35:18 +0000 (-0500) Subject: Have calc-yank recognize numbers in different bases. X-Git-Tag: emacs-25.0.90~1160 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=732d259948833935c343ed88b08316253e12b306;p=emacs.git Have calc-yank recognize numbers in different bases. * lisp/calc/calc-yank.el (math-number-regexp): New function. (calc-yank): Use `math-number-regexp' to recognize numbers. --- diff --git a/lisp/calc/calc-yank.el b/lisp/calc/calc-yank.el index cd447500ffe..5105ba9366c 100644 --- a/lisp/calc/calc-yank.el +++ b/lisp/calc/calc-yank.el @@ -107,6 +107,46 @@ (interactive "r") (calc-kill-region top bot t)) +(defun math-number-regexp (radix-num) + "Return a regexp which will match a Calc number base RADIX-NUM." + (let* ((digit-range + (cond + ;; radix 2 to 10 + ((and (<= 2 radix-num) + (>= 10 radix-num)) + (concat "[0-" + (number-to-string (1- radix-num)) + "]")) + ;; radix 11 + ((= 11 radix-num) "[0-9aA]") + ;; radix 12+ + (t + (concat "[0-9" + "a-" (format "%c" (+ (- ?a 11) radix-num)) + "A-" (format "%c" (+ (- ?A 11) radix-num)) + "]")))) + (integer-regexp (concat digit-range "+")) + (decimal-regexp (concat digit-range "+\\." digit-range "*"))) + (concat + " *\\(" + ;; "e" notation + "[-_+]?" decimal-regexp "[eE][-+]?[0-9]+" + "\\|" + "[-_+]?" integer-regexp "[eE][-+]?[0-9]+" + "\\|" + ;; Integer+fractions + "[-_+]?" integer-regexp "*[:/]" integer-regexp "[:/]" integer-regexp + "\\|" + ;; Fractions + "[-_+]?" integer-regexp "[:/]" integer-regexp + "\\|" + ;; Decimal point + "[-_+]?" decimal-regexp + "\\|" + ;; Integers + "[-_+]?" integer-regexp + "\\) *\\(\n\\|\\'\\)"))) + ;; This function uses calc-last-kill if possible to get an exact result, ;; otherwise it just parses the yanked string. ;; Modified to use Emacs 19 extended concept of kill-ring. -- daveg 12/15/96 @@ -171,21 +211,7 @@ alteration." (setq radix-notation (concat (number-to-string radix-num) "#")) (setq valid-num-regexp - (cond - ;; radix 2 to 10 - ((and (<= 2 radix-num) - (>= 10 radix-num)) - (concat "[0-" - (number-to-string (1- radix-num)) - "]+")) - ;; radix 11 - ((= 11 radix-num) "[0-9aA]+") - ;; radix 12+ - (t - (concat "[0-9" - "a-" (format "%c" (+ (- ?a 11) radix-num)) - "A-" (format "%c" (+ (- ?A 11) radix-num)) - "]+")))) + (math-number-regexp radix-num)) ;; Ensure that the radix-notation is prefixed ;; correctly even for multi-line yanks like below, ;; 111