calc-units.el (math-default-units-table): Remove initial value.
(calc-convert-units): Treat expressions where all the units cancel as if they didn't have units.
This commit is contained in:
parent
f0a9dee778
commit
7c3fb76fc9
2 changed files with 52 additions and 44 deletions
|
|
@ -1,3 +1,9 @@
|
|||
2013-01-30 Jay Belanger <jay.p.belanger@gmail.com>
|
||||
|
||||
* calc-units.el (math-default-units-table): Remove initial value.
|
||||
(calc-convert-units): Treat expressions where all the units cancel as
|
||||
if they didn't have units.
|
||||
|
||||
2013-01-30 Michael Albinus <michael.albinus@gmx.de>
|
||||
|
||||
* net/tramp.el (tramp-process-connection-type): Fix docstring.
|
||||
|
|
|
|||
|
|
@ -404,7 +404,7 @@ If EXPR is nil, return nil."
|
|||
(math-composition-to-string cexpr))))))
|
||||
|
||||
(defvar math-default-units-table
|
||||
#s(hash-table test equal data (1 (1)))
|
||||
(make-hash-table :test 'equal)
|
||||
"A table storing previously converted units.")
|
||||
|
||||
(defun math-get-default-units (expr)
|
||||
|
|
@ -442,13 +442,19 @@ If COMP or STD is non-nil, put that in the units table instead."
|
|||
(calc-slow-wrapper
|
||||
(let ((expr (calc-top-n 1))
|
||||
(uoldname nil)
|
||||
(unitscancel nil)
|
||||
unew
|
||||
units
|
||||
defunits)
|
||||
(unless (math-units-in-expr-p expr t)
|
||||
(if (or (not (math-units-in-expr-p expr t))
|
||||
(setq unitscancel (eq (math-get-standard-units expr) 1)))
|
||||
(let ((uold (or old-units
|
||||
(progn
|
||||
(setq uoldname (read-string "Old units: "))
|
||||
(setq uoldname
|
||||
(if unitscancel
|
||||
(read-string
|
||||
"(The expression is unitless when simplified) Old Units: ")
|
||||
(read-string "Old units: ")))
|
||||
(if (equal uoldname "")
|
||||
(progn
|
||||
(setq uoldname "1")
|
||||
|
|
@ -460,47 +466,43 @@ If COMP or STD is non-nil, put that in the units table instead."
|
|||
(error "Bad format in units expression: %s" (nth 1 uold)))
|
||||
(setq expr (math-mul expr uold))))
|
||||
(setq defunits (math-get-default-units expr))
|
||||
(if (equal defunits "1")
|
||||
(progn
|
||||
(calc-enter-result 1 "cvun" (math-simplify-units expr))
|
||||
(message "All units in expression cancel"))
|
||||
(unless new-units
|
||||
(setq new-units
|
||||
(read-string (concat
|
||||
(if uoldname
|
||||
(concat "Old units: "
|
||||
uoldname
|
||||
", new units")
|
||||
"New units")
|
||||
(if defunits
|
||||
(concat
|
||||
" (default "
|
||||
defunits
|
||||
"): ")
|
||||
": "))))
|
||||
(if (and
|
||||
(string= new-units "")
|
||||
defunits)
|
||||
(setq new-units defunits)))
|
||||
(when (string-match "\\` */" new-units)
|
||||
(setq new-units (concat "1" new-units)))
|
||||
(setq units (math-read-expr new-units))
|
||||
(when (eq (car-safe units) 'error)
|
||||
(error "Bad format in units expression: %s" (nth 2 units)))
|
||||
(if calc-ensure-consistent-units
|
||||
(math-check-unit-consistency expr units))
|
||||
(let ((unew (math-units-in-expr-p units t))
|
||||
(std (and (eq (car-safe units) 'var)
|
||||
(assq (nth 1 units) math-standard-units-systems)))
|
||||
(comp (eq (car-safe units) '+)))
|
||||
(unless (or unew std)
|
||||
(error "No units specified"))
|
||||
(let ((res
|
||||
(if std
|
||||
(math-simplify-units (math-to-standard-units expr (nth 1 std)))
|
||||
(math-convert-units expr units (and uoldname (not (equal uoldname "1")))))))
|
||||
(math-put-default-units res (if comp units))
|
||||
(calc-enter-result 1 "cvun" res)))))))
|
||||
(unless new-units
|
||||
(setq new-units
|
||||
(read-string (concat
|
||||
(if uoldname
|
||||
(concat "Old units: "
|
||||
uoldname
|
||||
", new units")
|
||||
"New units")
|
||||
(if defunits
|
||||
(concat
|
||||
" (default "
|
||||
defunits
|
||||
"): ")
|
||||
": "))))
|
||||
(if (and
|
||||
(string= new-units "")
|
||||
defunits)
|
||||
(setq new-units defunits)))
|
||||
(when (string-match "\\` */" new-units)
|
||||
(setq new-units (concat "1" new-units)))
|
||||
(setq units (math-read-expr new-units))
|
||||
(when (eq (car-safe units) 'error)
|
||||
(error "Bad format in units expression: %s" (nth 2 units)))
|
||||
(if calc-ensure-consistent-units
|
||||
(math-check-unit-consistency expr units))
|
||||
(let ((unew (math-units-in-expr-p units t))
|
||||
(std (and (eq (car-safe units) 'var)
|
||||
(assq (nth 1 units) math-standard-units-systems)))
|
||||
(comp (eq (car-safe units) '+)))
|
||||
(unless (or unew std)
|
||||
(error "No units specified"))
|
||||
(let ((res
|
||||
(if std
|
||||
(math-simplify-units (math-to-standard-units expr (nth 1 std)))
|
||||
(math-convert-units expr units (and uoldname (not (equal uoldname "1")))))))
|
||||
(math-put-default-units res (if comp units))
|
||||
(calc-enter-result 1 "cvun" res))))))
|
||||
|
||||
(defun calc-autorange-units (arg)
|
||||
(interactive "P")
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue