diff options
| author | unwox <me@unwox.com> | 2025-04-08 20:34:13 +0600 |
|---|---|---|
| committer | unwox <me@unwox.com> | 2025-04-08 20:35:37 +0600 |
| commit | a7ec526534548f42d452e83c6c573202703fd932 (patch) | |
| tree | 2a177d4a4e0d37e6c32ce4f9d6fc37b12ed202f4 | |
| parent | bd40987bfc1d02a87f8979b2ef85f7e0948e2bcb (diff) | |
multiply weight when it contains "x"
example: 6x20гр. = 120гр
| -rw-r--r-- | parser/parser.fnl | 29 |
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 |
