Mercurial > emacs
comparison lisp/calc/calc-ext.el @ 90044:cb7f41387eb3
Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-70
Merge from emacs--cvs-trunk--0
Patches applied:
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-669
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-678
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-679
Merge from gnus--rel--5.10
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-680
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-688
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-689
Merge from gnus--rel--5.10
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-690
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-691
Update from CVS
* miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-69
Merge from emacs--cvs-trunk--0
* miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-70
- miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-71
Update from CVS
author | Miles Bader <miles@gnu.org> |
---|---|
date | Fri, 12 Nov 2004 02:53:04 +0000 |
parents | f3ec05478165 ad1cd229b771 |
children | b637c617432f |
comparison
equal
deleted
inserted
replaced
90043:e24e2e78deda | 90044:cb7f41387eb3 |
---|---|
106 (define-key calc-mode-map "\C-k" 'calc-kill) | 106 (define-key calc-mode-map "\C-k" 'calc-kill) |
107 (define-key calc-mode-map "\M-k" 'calc-copy-as-kill) | 107 (define-key calc-mode-map "\M-k" 'calc-copy-as-kill) |
108 (define-key calc-mode-map "\C-w" 'calc-kill-region) | 108 (define-key calc-mode-map "\C-w" 'calc-kill-region) |
109 (define-key calc-mode-map "\M-w" 'calc-copy-region-as-kill) | 109 (define-key calc-mode-map "\M-w" 'calc-copy-region-as-kill) |
110 (define-key calc-mode-map "\C-y" 'calc-yank) | 110 (define-key calc-mode-map "\C-y" 'calc-yank) |
111 (define-key calc-mode-map [mouse-2] 'calc-yank) | |
111 (define-key calc-mode-map "\C-_" 'calc-undo) | 112 (define-key calc-mode-map "\C-_" 'calc-undo) |
112 (define-key calc-mode-map "\C-xu" 'calc-undo) | 113 (define-key calc-mode-map "\C-xu" 'calc-undo) |
113 (define-key calc-mode-map "\M-\C-m" 'calc-last-args) | 114 (define-key calc-mode-map "\M-\C-m" 'calc-last-args) |
114 | 115 |
115 (define-key calc-mode-map "a" nil) | 116 (define-key calc-mode-map "a" nil) |
660 (define-key calc-alg-map "\e" calc-alg-esc-map) | 661 (define-key calc-alg-map "\e" calc-alg-esc-map) |
661 (define-key calc-alg-map "\e\t" 'calc-roll-up) | 662 (define-key calc-alg-map "\e\t" 'calc-roll-up) |
662 (define-key calc-alg-map "\e\C-m" 'calc-last-args-stub) | 663 (define-key calc-alg-map "\e\C-m" 'calc-last-args-stub) |
663 (define-key calc-alg-map "\e\177" 'calc-pop-above) | 664 (define-key calc-alg-map "\e\177" 'calc-pop-above) |
664 | 665 |
665 ;; The following is a relic for backward compatability only. | |
666 ;; The calc-define property list is now the recommended method. | |
667 (if (and (boundp 'calc-ext-defs) | |
668 calc-ext-defs) | |
669 (progn | |
670 (calc-need-macros) | |
671 (message "Evaluating calc-ext-defs...") | |
672 (eval (cons 'progn calc-ext-defs)) | |
673 (setq calc-ext-defs nil))) | |
674 | |
675 ;;;; (Autoloads here) | 666 ;;;; (Autoloads here) |
676 (mapcar (function (lambda (x) | 667 (mapcar (function (lambda (x) |
677 (mapcar (function (lambda (func) | 668 (mapcar (function (lambda (func) |
678 (autoload func (car x)))) (cdr x)))) | 669 (autoload func (car x)))) (cdr x)))) |
679 '( | 670 '( |
1767 (let ((res (cdr (lookup-key calc-mode-map "z")))) | 1758 (let ((res (cdr (lookup-key calc-mode-map "z")))) |
1768 (if (eq (car (car res)) 27) | 1759 (if (eq (car (car res)) 27) |
1769 (cdr res) | 1760 (cdr res) |
1770 res))) | 1761 res))) |
1771 | 1762 |
1763 (defvar calc-z-prefix-buf nil) | |
1764 (defvar calc-z-prefix-msgs nil) | |
1765 | |
1772 (defun calc-z-prefix-help () | 1766 (defun calc-z-prefix-help () |
1773 (interactive) | 1767 (interactive) |
1774 (let* ((msgs nil) | 1768 (let* ((calc-z-prefix-msgs nil) |
1775 (buf "") | 1769 (calc-z-prefix-buf "") |
1776 (kmap (sort (copy-sequence (calc-user-key-map)) | 1770 (kmap (sort (copy-sequence (calc-user-key-map)) |
1777 (function (lambda (x y) (< (car x) (car y)))))) | 1771 (function (lambda (x y) (< (car x) (car y)))))) |
1778 (flags (apply 'logior | 1772 (flags (apply 'logior |
1779 (mapcar (function | 1773 (mapcar (function |
1780 (lambda (k) | 1774 (lambda (k) |
1781 (calc-user-function-classify (car k)))) | 1775 (calc-user-function-classify (car k)))) |
1782 kmap)))) | 1776 kmap)))) |
1783 (if (= (logand flags 8) 0) | 1777 (if (= (logand flags 8) 0) |
1784 (calc-user-function-list kmap 7) | 1778 (calc-user-function-list kmap 7) |
1785 (calc-user-function-list kmap 1) | 1779 (calc-user-function-list kmap 1) |
1786 (setq msgs (cons buf msgs) | 1780 (setq calc-z-prefix-msgs (cons calc-z-prefix-buf calc-z-prefix-msgs) |
1787 buf "") | 1781 calc-z-prefix-buf "") |
1788 (calc-user-function-list kmap 6)) | 1782 (calc-user-function-list kmap 6)) |
1789 (if (/= flags 0) | 1783 (if (/= flags 0) |
1790 (setq msgs (cons buf msgs))) | 1784 (setq calc-z-prefix-msgs (cons calc-z-prefix-buf calc-z-prefix-msgs))) |
1791 (calc-do-prefix-help (nreverse msgs) "user" ?z))) | 1785 (calc-do-prefix-help (nreverse calc-z-prefix-msgs) "user" ?z))) |
1792 | 1786 |
1793 (defun calc-user-function-classify (key) | 1787 (defun calc-user-function-classify (key) |
1794 (cond ((/= key (downcase key)) ; upper-case | 1788 (cond ((/= key (downcase key)) ; upper-case |
1795 (if (assq (downcase key) (calc-user-key-map)) 9 1)) | 1789 (if (assq (downcase key) (calc-user-key-map)) 9 1)) |
1796 ((/= key (upcase key)) 2) ; lower-case | 1790 ((/= key (upcase key)) 2) ; lower-case |
1820 (downcase (substring name (1+ pos)))) | 1814 (downcase (substring name (1+ pos)))) |
1821 (format "%c = %s" | 1815 (format "%c = %s" |
1822 (upcase key) | 1816 (upcase key) |
1823 (downcase name)))) | 1817 (downcase name)))) |
1824 (char-to-string (upcase key))))) | 1818 (char-to-string (upcase key))))) |
1825 (if (= (length buf) 0) | 1819 (if (= (length calc-z-prefix-buf) 0) |
1826 (setq buf (concat (if (= flags 1) "SHIFT + " "") | 1820 (setq calc-z-prefix-buf (concat (if (= flags 1) "SHIFT + " "") |
1827 desc)) | 1821 desc)) |
1828 (if (> (+ (length buf) (length desc)) 58) | 1822 (if (> (+ (length calc-z-prefix-buf) (length desc)) 58) |
1829 (setq msgs (cons buf msgs) | 1823 (setq calc-z-prefix-msgs |
1830 buf (concat (if (= flags 1) "SHIFT + " "") | 1824 (cons calc-z-prefix-buf calc-z-prefix-msgs) |
1825 calc-z-prefix-buf (concat (if (= flags 1) "SHIFT + " "") | |
1831 desc)) | 1826 desc)) |
1832 (setq buf (concat buf ", " desc)))))) | 1827 (setq calc-z-prefix-buf (concat calc-z-prefix-buf ", " desc)))))) |
1833 (calc-user-function-list (cdr map) flags)))) | 1828 (calc-user-function-list (cdr map) flags)))) |
1834 | 1829 |
1835 | 1830 |
1836 | 1831 |
1837 (defun calc-shift-Z-prefix-help () | 1832 (defun calc-shift-Z-prefix-help () |
1852 (let ((cache-prec (intern (concat (symbol-name name) "-cache-prec"))) | 1847 (let ((cache-prec (intern (concat (symbol-name name) "-cache-prec"))) |
1853 (cache-val (intern (concat (symbol-name name) "-cache"))) | 1848 (cache-val (intern (concat (symbol-name name) "-cache"))) |
1854 (last-prec (intern (concat (symbol-name name) "-last-prec"))) | 1849 (last-prec (intern (concat (symbol-name name) "-last-prec"))) |
1855 (last-val (intern (concat (symbol-name name) "-last")))) | 1850 (last-val (intern (concat (symbol-name name) "-last")))) |
1856 (list 'progn | 1851 (list 'progn |
1857 (list 'setq cache-prec (if init (math-numdigs (nth 1 init)) -100)) | 1852 (list 'defvar cache-prec (if init (math-numdigs (nth 1 init)) -100)) |
1858 (list 'setq cache-val (list 'quote init)) | 1853 (list 'defvar cache-val (list 'quote init)) |
1859 (list 'setq last-prec -100) | 1854 (list 'defvar last-prec -100) |
1860 (list 'setq last-val nil) | 1855 (list 'defvar last-val nil) |
1861 (list 'setq 'math-cache-list | 1856 (list 'setq 'math-cache-list |
1862 (list 'cons | 1857 (list 'cons |
1863 (list 'quote cache-prec) | 1858 (list 'quote cache-prec) |
1864 (list 'cons | 1859 (list 'cons |
1865 (list 'quote last-prec) | 1860 (list 'quote last-prec) |
2221 ((or (integerp (car a)) (consp (car a))) | 2216 ((or (integerp (car a)) (consp (car a))) |
2222 (if (null (cdr a)) | 2217 (if (null (cdr a)) |
2223 (math-normalize (car a)) | 2218 (math-normalize (car a)) |
2224 (error "Can't use multi-valued function in an expression"))))) | 2219 (error "Can't use multi-valued function in an expression"))))) |
2225 | 2220 |
2226 (defun math-normalize-nonstandard () ; uses "a" | 2221 (defun math-normalize-nonstandard () |
2227 (if (consp calc-simplify-mode) | 2222 (if (consp calc-simplify-mode) |
2228 (progn | 2223 (progn |
2229 (setq calc-simplify-mode 'none | 2224 (setq calc-simplify-mode 'none |
2230 math-simplify-only (car-safe (cdr-safe a))) | 2225 math-simplify-only (car-safe (cdr-safe math-normalize-a))) |
2231 nil) | 2226 nil) |
2232 (and (symbolp (car a)) | 2227 (and (symbolp (car math-normalize-a)) |
2233 (or (eq calc-simplify-mode 'none) | 2228 (or (eq calc-simplify-mode 'none) |
2234 (and (eq calc-simplify-mode 'num) | 2229 (and (eq calc-simplify-mode 'num) |
2235 (let ((aptr (setq a (cons | 2230 (let ((aptr (setq math-normalize-a |
2236 (car a) | 2231 (cons |
2237 (mapcar 'math-normalize (cdr a)))))) | 2232 (car math-normalize-a) |
2233 (mapcar 'math-normalize | |
2234 (cdr math-normalize-a)))))) | |
2238 (while (and aptr (math-constp (car aptr))) | 2235 (while (and aptr (math-constp (car aptr))) |
2239 (setq aptr (cdr aptr))) | 2236 (setq aptr (cdr aptr))) |
2240 aptr))) | 2237 aptr))) |
2241 (cons (car a) (mapcar 'math-normalize (cdr a)))))) | 2238 (cons (car math-normalize-a) |
2242 | 2239 (mapcar 'math-normalize (cdr math-normalize-a)))))) |
2243 | |
2244 | |
2245 | 2240 |
2246 | 2241 |
2247 ;;; Normalize a bignum digit list by trimming high-end zeros. [L l] | 2242 ;;; Normalize a bignum digit list by trimming high-end zeros. [L l] |
2248 (defun math-norm-bignum (a) | 2243 (defun math-norm-bignum (a) |
2249 (let ((digs a) (last nil)) | 2244 (let ((digs a) (last nil)) |
2617 (while (and (setq expr (cdr expr)) (not (math-any-floats (car expr))))) | 2612 (while (and (setq expr (cdr expr)) (not (math-any-floats (car expr))))) |
2618 expr)) | 2613 expr)) |
2619 | 2614 |
2620 (defvar var-FactorRules 'calc-FactorRules) | 2615 (defvar var-FactorRules 'calc-FactorRules) |
2621 | 2616 |
2622 (defun math-map-tree (mmt-func mmt-expr &optional mmt-many) | 2617 (defvar math-mt-many nil) |
2623 (or mmt-many (setq mmt-many 1000000)) | 2618 (defvar math-mt-func nil) |
2619 | |
2620 (defun math-map-tree (math-mt-func mmt-expr &optional math-mt-many) | |
2621 (or math-mt-many (setq math-mt-many 1000000)) | |
2624 (math-map-tree-rec mmt-expr)) | 2622 (math-map-tree-rec mmt-expr)) |
2625 | 2623 |
2626 (defun math-map-tree-rec (mmt-expr) | 2624 (defun math-map-tree-rec (mmt-expr) |
2627 (or (= mmt-many 0) | 2625 (or (= math-mt-many 0) |
2628 (let ((mmt-done nil) | 2626 (let ((mmt-done nil) |
2629 mmt-nextval) | 2627 mmt-nextval) |
2630 (while (not mmt-done) | 2628 (while (not mmt-done) |
2631 (while (and (/= mmt-many 0) | 2629 (while (and (/= math-mt-many 0) |
2632 (setq mmt-nextval (funcall mmt-func mmt-expr)) | 2630 (setq mmt-nextval (funcall math-mt-func mmt-expr)) |
2633 (not (equal mmt-expr mmt-nextval))) | 2631 (not (equal mmt-expr mmt-nextval))) |
2634 (setq mmt-expr mmt-nextval | 2632 (setq mmt-expr mmt-nextval |
2635 mmt-many (if (> mmt-many 0) (1- mmt-many) (1+ mmt-many)))) | 2633 math-mt-many (if (> math-mt-many 0) |
2634 (1- math-mt-many) | |
2635 (1+ math-mt-many)))) | |
2636 (if (or (Math-primp mmt-expr) | 2636 (if (or (Math-primp mmt-expr) |
2637 (<= mmt-many 0)) | 2637 (<= math-mt-many 0)) |
2638 (setq mmt-done t) | 2638 (setq mmt-done t) |
2639 (setq mmt-nextval (cons (car mmt-expr) | 2639 (setq mmt-nextval (cons (car mmt-expr) |
2640 (mapcar 'math-map-tree-rec | 2640 (mapcar 'math-map-tree-rec |
2641 (cdr mmt-expr)))) | 2641 (cdr mmt-expr)))) |
2642 (if (equal mmt-nextval mmt-expr) | 2642 (if (equal mmt-nextval mmt-expr) |
2883 | 2883 |
2884 | 2884 |
2885 | 2885 |
2886 ;;; Expression parsing. | 2886 ;;; Expression parsing. |
2887 | 2887 |
2888 (defun math-read-expr (exp-str) | 2888 (defvar math-expr-data) |
2889 (let ((exp-pos 0) | 2889 |
2890 (exp-old-pos 0) | 2890 (defun math-read-expr (math-exp-str) |
2891 (exp-keep-spaces nil) | 2891 (let ((math-exp-pos 0) |
2892 exp-token exp-data) | 2892 (math-exp-old-pos 0) |
2893 (while (setq exp-token (string-match "\\.\\.\\([^.]\\|.[^.]\\)" exp-str)) | 2893 (math-exp-keep-spaces nil) |
2894 (setq exp-str (concat (substring exp-str 0 exp-token) "\\dots" | 2894 math-exp-token math-expr-data) |
2895 (substring exp-str (+ exp-token 2))))) | 2895 (while (setq math-exp-token (string-match "\\.\\.\\([^.]\\|.[^.]\\)" math-exp-str)) |
2896 (setq math-exp-str (concat (substring math-exp-str 0 math-exp-token) "\\dots" | |
2897 (substring math-exp-str (+ math-exp-token 2))))) | |
2896 (math-build-parse-table) | 2898 (math-build-parse-table) |
2897 (math-read-token) | 2899 (math-read-token) |
2898 (let ((val (catch 'syntax (math-read-expr-level 0)))) | 2900 (let ((val (catch 'syntax (math-read-expr-level 0)))) |
2899 (if (stringp val) | 2901 (if (stringp val) |
2900 (list 'error exp-old-pos val) | 2902 (list 'error math-exp-old-pos val) |
2901 (if (equal exp-token 'end) | 2903 (if (equal math-exp-token 'end) |
2902 val | 2904 val |
2903 (list 'error exp-old-pos "Syntax error")))))) | 2905 (list 'error math-exp-old-pos "Syntax error")))))) |
2904 | 2906 |
2905 (defun math-read-plain-expr (exp-str &optional error-check) | 2907 (defun math-read-plain-expr (exp-str &optional error-check) |
2906 (let* ((calc-language nil) | 2908 (let* ((calc-language nil) |
2907 (math-expr-opers math-standard-opers) | 2909 (math-expr-opers math-standard-opers) |
2908 (val (math-read-expr exp-str))) | 2910 (val (math-read-expr exp-str))) |
2911 (error "%s: %s" (nth 2 val) exp-str)) | 2913 (error "%s: %s" (nth 2 val) exp-str)) |
2912 val)) | 2914 val)) |
2913 | 2915 |
2914 | 2916 |
2915 (defun math-read-string () | 2917 (defun math-read-string () |
2916 (let ((str (read-from-string (concat exp-data "\"")))) | 2918 (let ((str (read-from-string (concat math-expr-data "\"")))) |
2917 (or (and (= (cdr str) (1+ (length exp-data))) | 2919 (or (and (= (cdr str) (1+ (length math-expr-data))) |
2918 (stringp (car str))) | 2920 (stringp (car str))) |
2919 (throw 'syntax "Error in string constant")) | 2921 (throw 'syntax "Error in string constant")) |
2920 (math-read-token) | 2922 (math-read-token) |
2921 (append '(vec) (car str) nil))) | 2923 (append '(vec) (car str) nil))) |
2922 | 2924 |