summaryrefslogtreecommitdiff
path: root/parser
diff options
context:
space:
mode:
Diffstat (limited to 'parser')
-rw-r--r--parser/parser.fnl29
1 files changed, 19 insertions, 10 deletions
diff --git a/parser/parser.fnl b/parser/parser.fnl
index 5cb64c3..15d9cd4 100644
--- a/parser/parser.fnl
+++ b/parser/parser.fnl
@@ -157,7 +157,10 @@
(if text
(let [peg (peg.Ct
(anywhere
- (* (peg.C pegs.number)
+ (* (+ (* (peg.C pegs.number)
+ (peg.S "xXхХ")
+ (peg.C pegs.number))
+ (peg.C pegs.number))
(maybe (+ (peg.P " ") " "))
(* (peg.C
(if extra-metrics
@@ -166,18 +169,24 @@
(+ (pnot pegs.letter) -1)))))]
(let [result (peg:match text)]
(if result
- (let [[number metric] result]
- (* number (if (= metric "кг") 1000 1)))
- nil)))
+ (match result
+ [multiplier weight metric] (* (tonumber multiplier)
+ (tonumber weight)
+ (if (= metric "кг") 1000 1))
+ [weight metric] (* (tonumber weight)
+ (if (= metric "кг") 1000 1)))
+ nil)))
nil))
(fn test-guess-weight []
- (assert (= nil (guess-weight "за 1")))
- (assert (= 357 (guess-weight "за 1 шт 357 гр")))
- (assert (= 1 (guess-weight "1гр")))
- (assert (= 150 (guess-weight "150 гр")))
- (assert (= 1000 (guess-weight "1кг")))
- (assert (= 150 (guess-weight "150 г" ["г"]))))
+ (assert (= nil (guess-weight "за 1")) "1")
+ (assert (= 120 (guess-weight "6x20гр")) "2")
+ (assert (= 1260 (guess-weight "за 6x210гр")) "3")
+ (assert (= 357 (guess-weight "за 1 шт 357 гр")) "4")
+ (assert (= 1 (guess-weight "1гр")) "5")
+ (assert (= 150 (guess-weight "150 гр")) "6")
+ (assert (= 1000 (guess-weight "1кг")) "7")
+ (assert (= 150 (guess-weight "150 г" ["г"])) "8"))
(fn guess-volume [text]
(if text