From 24bba96ea2321b5939dc4233ee2b6b20a54b3a4a Mon Sep 17 00:00:00 2001 From: Dmitry Astapov Date: Sat, 12 Oct 2019 10:16:38 +0100 Subject: [PATCH] lib: more robust multi-line joining in csv parser --- hledger-lib/Hledger/Utils/String.hs | 4 ++-- tests/csv.test | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/hledger-lib/Hledger/Utils/String.hs b/hledger-lib/Hledger/Utils/String.hs index 2490be6b7..03342317d 100644 --- a/hledger-lib/Hledger/Utils/String.hs +++ b/hledger-lib/Hledger/Utils/String.hs @@ -77,9 +77,9 @@ rstrip = reverse . lstrip . reverse chomp :: String -> String chomp = reverse . dropWhile (`elem` "\r\n") . reverse --- | Remove line breaks +-- | Remove consequtive line breaks, replacing them with single space singleline :: String -> String -singleline = map (\c -> if c `elem` "\r\n" then ' ' else c) +singleline = unwords . filter (/="") . (map strip) . lines stripbrackets :: String -> String stripbrackets = dropWhile (`elem` "([") . reverse . dropWhile (`elem` "])") . reverse :: String -> String diff --git a/tests/csv.test b/tests/csv.test index d05de86bf..9fcc29271 100644 --- a/tests/csv.test +++ b/tests/csv.test @@ -145,7 +145,7 @@ $ printf 'account1 Assets:MyAccount\ndate %%1\ndate-format %%d/%%Y/%%m\ndescrip >=0 # 14. multiline descriptions -$ printf 'fields date, description, amount\ndate-format %%d/%%Y/%%m\ncurrency $\naccount1 assets:myacct\n' >t.$$.csv.rules; printf '10/2009/09,"Flubber Co\nCo\nCo",50\n' | hledger -f csv:- --rules-file t.$$.csv.rules print && rm -rf t.$$.csv.rules +$ printf 'fields date, description, amount\ndate-format %%d/%%Y/%%m\ncurrency $\naccount1 assets:myacct\n' >t.$$.csv.rules; printf '10/2009/09,"Flubber Co\n\n\n\nCo\nCo\n\n\n\n\n",50\n' | hledger -f csv:- --rules-file t.$$.csv.rules print && rm -rf t.$$.csv.rules 2009/09/10 Flubber Co Co Co assets:myacct $50 expense:unknown