1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-15 10:30:25 -08:00

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.
This commit is contained in:
Jay Belanger 2015-10-11 15:35:18 -05:00
parent 358794e5a7
commit 732d259948

View file

@ -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