From f2d3b3e1d4cc71aba9ef159e91fe3d5cddc54f79 Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Wed, 18 Apr 2018 07:35:47 -0700 Subject: [PATCH] csv: handle the other double negation cases: -(N), ((N)) (fix #736) --- hledger-lib/Hledger/Read/CsvReader.hs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/hledger-lib/Hledger/Read/CsvReader.hs b/hledger-lib/Hledger/Read/CsvReader.hs index 86f0031b0..cbcade5b6 100644 --- a/hledger-lib/Hledger/Read/CsvReader.hs +++ b/hledger-lib/Hledger/Read/CsvReader.hs @@ -732,10 +732,26 @@ getAmountStr rules record = type CsvAmountString = String -- | Canonicalise the sign in a CSV amount string. --- Such strings can be parenthesized, which is equivalent to having a minus sign. --- Also they can end up with a double minus sign, which cancels out. +-- Such strings can have a minus sign, negating parentheses, +-- or any two of these (which cancels out). +-- +-- >>> simplifySign "1" +-- "1" +-- >>> simplifySign "-1" +-- "-1" +-- >>> simplifySign "(1)" +-- "-1" +-- >>> simplifySign "--1" +-- "1" +-- >>> simplifySign "-(1)" +-- "1" +-- >>> simplifySign "(-1)" +-- "1" +-- >>> simplifySign "((1))" +-- "1" simplifySign :: CsvAmountString -> CsvAmountString simplifySign ('(':s) | lastMay s == Just ')' = simplifySign $ negateStr $ init s +simplifySign ('-':'(':s) | lastMay s == Just ')' = simplifySign $ init s simplifySign ('-':'-':s) = s simplifySign s = s