[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/metar a4c5807 11/16: Fix the case where the metar recor
From: |
Stefan Monnier |
Subject: |
[elpa] externals/metar a4c5807 11/16: Fix the case where the metar record contains M01 (bug#19401). |
Date: |
Sat, 28 Nov 2020 23:16:37 -0500 (EST) |
branch: externals/metar
commit a4c5807895f797dee3c33ff95d9074eac9c0400c
Author: Wolfgang Jenkner <wjenkner@inode.at>
Commit: Wolfgang Jenkner <wjenkner@inode.at>
Fix the case where the metar record contains M01 (bug#19401).
* packages/metar/metar.el (metar-convert-unit): New optional argument.
(metar-convert-temperature): Use it to rewrite this function in terms of
metar-convert-unit.
Pass t as last argument to the underlying calc conversion functions so
that they return only the number, not the unit, thereby fixing the bug
in question.
---
metar.el | 66 +++++++++++++++++++++++++++++++---------------------------------
1 file changed, 32 insertions(+), 34 deletions(-)
diff --git a/metar.el b/metar.el
index 7b78f07..9575313 100644
--- a/metar.el
+++ b/metar.el
@@ -239,45 +239,43 @@ If no match if found, nil is returned."
(when station-code
(cons station-code (round best-distance))))))
-(defun metar-convert-unit (value new-unit)
+(defun metar-convert-unit (value new-unit &optional convert-units-function)
"Convert VALUE to NEW-UNIT.
VALUE is a string with the value followed by the unit, like \"5 knot\"
-and NEW-UNIT should be a unit name like \"kph\" or similar."
+and NEW-UNIT should be a unit name like \"kph\" or similar.
+CONVERT-UNITS-FUNCTION designates the function actually doing the conversion.
+It must have the signature of `math-convert-units', which is the default."
(cl-check-type value string)
- (cl-check-type new-unit (or string symbol))
- (cl-multiple-value-bind (value unit)
- (split-string
- (math-format-value
- (math-convert-units (math-simplify (math-read-expr value))
- (math-read-expr
- (cl-etypecase new-unit
- (string new-unit)
- (symbol (symbol-name new-unit))))))
- " ")
- (cons (string-to-number value) (intern unit))))
+ (unless (symbolp new-unit)
+ (setq new-unit (intern new-unit)))
+ (let ((expr (math-simplify (math-read-expr value))))
+ (cl-assert (or (math-zerop expr)
+ (not (memq (math-single-units-in-expr-p expr) '(nil wrong))))
+ nil
+ "Metar: Not exactly one unit in expression: %S" expr)
+ (let ((res (math-simplify-units
+ (funcall (or convert-units-function 'math-convert-units)
+ expr
+ (math-build-var-name new-unit)
+ t))))
+ (cl-assert (math-realp res) nil
+ "Metar: Not a Calc real number: %S" res)
+ (cons (string-to-number (math-format-value (if (integerp res)
+ res
+ (math-float res))))
+ new-unit))))
(defun metar-convert-temperature (string &optional unit)
- (let* ((value (concat (if (= (aref string 0) ?M)
- (concat "-" (substring string 1))
- string)
- "degC"))
- (expr (math-read-expr value))
- (old-unit (math-single-units-in-expr-p expr))
- (new-unit (or unit (cdr (assq 'temperature metar-units)))))
- (if old-unit
- (cl-multiple-value-bind (value unit)
- (split-string
- (math-format-value
- (math-simplify-units
- (math-convert-temperature
- expr
- (list 'var
- (car old-unit)
- (intern (concat "var-" (symbol-name (car old-unit)))))
- (math-read-expr (cl-etypecase new-unit
- (string new-unit)
- (symbol (symbol-name new-unit))))))) " ")
- (cons (string-to-number value) (intern unit))))))
+ (metar-convert-unit (concat (if (= (aref string 0) ?M)
+ (concat "-" (substring string 1))
+ string)
+ "degC")
+ (or unit (cdr (assq 'temperature metar-units)))
+ (lambda (expr new-unit-var pure)
+ (math-convert-temperature expr
+ (math-build-var-name 'degC)
+ new-unit-var
+ pure))))
(defcustom metar-url
"http://weather.noaa.gov/pub/data/observations/metar/stations/%s.TXT"
- [elpa] externals/metar 7307c42 01/16: Add metar.el., (continued)
- [elpa] externals/metar 7307c42 01/16: Add metar.el., Stefan Monnier, 2020/11/28
- [elpa] externals/metar 258272f 13/16: * packages/metar/metar.el: Bump version for last two changes., Stefan Monnier, 2020/11/28
- [elpa] externals/metar e0b58d1 12/16: Add a work-around for bug#19582, present before Emacs 24.5., Stefan Monnier, 2020/11/28
- [elpa] externals/metar 5b8b9b7 14/16: Adjust for NOAA server changes., Stefan Monnier, 2020/11/28
- [elpa] externals/metar 3b05cb3 16/16: * .gitignore: New file, Stefan Monnier, 2020/11/28
- [elpa] externals/metar 8c6596d 03/16: * packages/metar/metar.el (metar-latitude-longitude-distance-haversine):, Stefan Monnier, 2020/11/28
- [elpa] externals/metar e1a8e1c 08/16: [metar] Fix metar-convert-temperature to actually DTRT, Stefan Monnier, 2020/11/28
- [elpa] externals/metar e891727 09/16: [metar] Unify station lat/lon conversion., Stefan Monnier, 2020/11/28
- [elpa] externals/metar 0f998f5 06/16: [metar] defcustom for metar-units, Stefan Monnier, 2020/11/28
- [elpa] externals/metar 6820f4e 10/16: Release 0.1., Stefan Monnier, 2020/11/28
- [elpa] externals/metar a4c5807 11/16: Fix the case where the metar record contains M01 (bug#19401).,
Stefan Monnier <=
- [elpa] externals/metar 623639e 15/16: * packages/metar/metar.el: Bump version., Stefan Monnier, 2020/11/28