summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Belanger <jay.p.belanger@gmail.com>2015-10-11 15:35:18 -0500
committerJay Belanger <jay.p.belanger@gmail.com>2015-10-11 15:35:18 -0500
commit732d259948833935c343ed88b08316253e12b306 (patch)
treea961474ae1e480ac9586fed31f00f61d1d16a712
parent358794e5a75e96eb512ec3c64efcc10deaa8383a (diff)
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.
-rw-r--r--lisp/calc/calc-yank.el56
1 files changed, 41 insertions, 15 deletions
diff --git a/lisp/calc/calc-yank.el b/lisp/calc/calc-yank.el
index cd447500ff..5105ba9366 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