From bd40c328d08ec40c363029972837451b7993199f Mon Sep 17 00:00:00 2001 From: unwox Date: Thu, 19 Dec 2024 16:27:32 +0600 Subject: improve weight parsing to also account for kilograms --- parser/parser.fnl | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) (limited to 'parser/parser.fnl') 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] -- cgit v1.2.3