summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunwox <me@unwox.com>2024-12-19 16:27:32 +0600
committerunwox <me@unwox.com>2024-12-19 16:28:18 +0600
commitbd40c328d08ec40c363029972837451b7993199f (patch)
tree024dbc90108da1f5a94afd422051c7cbd14d4a5c
parent441d7fd5a5a0ccf8d53238d717ec5119024cbbfa (diff)
improve weight parsing to also account for kilograms
-rw-r--r--parser/parser.fnl23
1 files changed, 14 insertions, 9 deletions
diff --git a/parser/parser.fnl b/parser/parser.fnl
index 55296f2..78df882 100644
--- a/parser/parser.fnl
+++ b/parser/parser.fnl
@@ -139,12 +139,18 @@
(fn guess-weight [text]
(if text
- (number.string->number
- (: (anywhere
- ;; FIXME: also account for kilograms
- (* (peg.C pegs.number) (maybe " ") "гр"))
- :match text))
- nil))
+ (let [peg (peg.Ct
+ (anywhere
+ (* (peg.C pegs.number)
+ (maybe " ")
+ (+ (* (peg.C (+ (peg.P "гр") "кг"))
+ (+ (peg.P " ") "." "\n" -1))))))]
+ (let [result (peg:match text)]
+ (if result
+ (let [[number metric] result]
+ (* number (if (= metric "кг") 1000 1)))
+ nil)))
+ nil))
(fn guess-volume [text]
(if text
@@ -152,9 +158,8 @@
(anywhere
(* (peg.C pegs.number)
(maybe " ")
- ;; also account for litres
- (+ (* (peg.C "л") (+ (peg.P " ") "\n" -1))
- (peg.C "мл")))))]
+ (+ (* (peg.C (+ (peg.P "мл") "л"))
+ (+ (peg.P " ") "." "\n" -1))))))]
(let [result (peg:match text)]
(if result
(let [[number metric] result]