(math-read-replacement-list, math-read-superscripts): New variables.

(math-read-preprocess-string): New function.
(math-read-expr): Filter input through math-read-preprocess-string.
This commit is contained in:
Jay Belanger 2004-11-23 05:56:40 +00:00
parent 5e92b1caaf
commit 66c2cf664e

View file

@ -2886,11 +2886,79 @@ calc-kill calc-kill-region calc-yank))))
(defvar math-expr-data)
(defvar math-read-replacement-list
'(;; Misc symbols
("±" "+/-") ; plus or minus
("×" "*") ; multiplication sign
("÷" ":") ; division sign
("" "-") ; subtraction sign
("" "/") ; division sign
("" "*") ; asterisk multiplication
("" "inf") ; infinity symbol
("" "<=")
("" ">=")
("" "<=")
("" ">=")
;; fractions
("¼" "(1:4)") ; 1/4
("½" "(1:2)") ; 1/2
("¾" "(3:4)") ; 3/4
("" "(1:3)") ; 1/3
("" "(2:3)") ; 2/3
("" "(1:5)") ; 1/5
("" "(2:5)") ; 2/5
("" "(3:5)") ; 3/5
("" "(4:5)") ; 4/5
("" "(1:6)") ; 1/6
("" "(5:6)") ; 5/6
("" "(1:8)") ; 1/8
("" "(3:8)") ; 3/8
("" "(5:8)") ; 5/8
("" "(7:8)") ; 7/8
("" "1:") ; 1/...
;; superscripts
("" "0") ; 0
("¹" "1") ; 1
("²" "2") ; 2
("³" "3") ; 3
("" "4") ; 4
("" "5") ; 5
("" "6") ; 6
("" "7") ; 7
("" "8") ; 8
("" "9") ; 9
("" "+") ; +
("" "-") ; -
("" "(") ; (
("" ")") ; )
("" "n") ; n
("" "i")) ; i
"A list whose elements (old new) indicate replacements to make
in Calc algebraic input.")
(defvar math-read-superscripts
"⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁽⁾ⁿⁱ" ; 0123456789+-()ni
"A string consisting of the superscripts allowed by Calc.")
(defun math-read-preprocess-string (str)
"Replace some substrings of STR by Calc equivalents."
(setq str
(replace-regexp-in-string (concat "[" math-read-superscripts "]+")
"^(\\&)" str))
(let ((rep-list math-read-replacement-list))
(while rep-list
(setq str
(replace-regexp-in-string (nth 0 (car rep-list))
(nth 1 (car rep-list)) str))
(setq rep-list (cdr rep-list))))
str)
(defun math-read-expr (math-exp-str)
(let ((math-exp-pos 0)
(math-exp-old-pos 0)
(math-exp-keep-spaces nil)
math-exp-token math-expr-data)
(setq math-exp-str (math-read-preprocess-string math-exp-str))
(while (setq math-exp-token (string-match "\\.\\.\\([^.]\\|.[^.]\\)" math-exp-str))
(setq math-exp-str (concat (substring math-exp-str 0 math-exp-token) "\\dots"
(substring math-exp-str (+ math-exp-token 2)))))