diff options
| author | unwox <me@unwox.com> | 2024-12-19 16:27:32 +0600 |
|---|---|---|
| committer | unwox <me@unwox.com> | 2024-12-19 16:28:18 +0600 |
| commit | bd40c328d08ec40c363029972837451b7993199f (patch) | |
| tree | 024dbc90108da1f5a94afd422051c7cbd14d4a5c /parser/parser.fnl | |
| parent | 441d7fd5a5a0ccf8d53238d717ec5119024cbbfa (diff) | |
improve weight parsing to also account for kilograms
Diffstat (limited to 'parser/parser.fnl')
| -rw-r--r-- | parser/parser.fnl | 23 |
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] |
