From e4add6df83bbbdeca8e83caf7c8cd21687ee2490 Mon Sep 17 00:00:00 2001 From: Dmitry Astapov Date: Sat, 12 Oct 2019 00:50:06 +0100 Subject: [PATCH] lib: fix for multiline descriptions in csv (fixes #841, #416) --- hledger-lib/Hledger/Read/CsvReader.hs | 8 ++++---- hledger-lib/Hledger/Utils/String.hs | 5 +++++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/hledger-lib/Hledger/Read/CsvReader.hs b/hledger-lib/Hledger/Read/CsvReader.hs index 0ab169f6e..f0c2ac684 100644 --- a/hledger-lib/Hledger/Read/CsvReader.hs +++ b/hledger-lib/Hledger/Read/CsvReader.hs @@ -709,10 +709,10 @@ transactionFromCsvRecord sourcepos rules record = t ["error: could not parse \""++str++"\" as a cleared status (should be *, ! or empty)" ,"the parse error is: "++customErrorBundlePretty err ] - code = maybe "" render $ mfieldtemplate "code" - description = maybe "" render $ mfieldtemplate "description" - comment = maybe "" render $ mfieldtemplate "comment" - precomment = maybe "" render $ mfieldtemplate "precomment" + code = singleline $ maybe "" render $ mfieldtemplate "code" + description = singleline $ maybe "" render $ mfieldtemplate "description" + comment = singleline $ maybe "" render $ mfieldtemplate "comment" + precomment = singleline $ maybe "" render $ mfieldtemplate "precomment" s `or` def = if null s then def else s parsebalance currency n str diff --git a/hledger-lib/Hledger/Utils/String.hs b/hledger-lib/Hledger/Utils/String.hs index 23fb31638..2490be6b7 100644 --- a/hledger-lib/Hledger/Utils/String.hs +++ b/hledger-lib/Hledger/Utils/String.hs @@ -21,6 +21,7 @@ module Hledger.Utils.String ( lstrip, rstrip, chomp, + singleline, elideLeft, elideRight, formatString, @@ -76,6 +77,10 @@ rstrip = reverse . lstrip . reverse chomp :: String -> String chomp = reverse . dropWhile (`elem` "\r\n") . reverse +-- | Remove line breaks +singleline :: String -> String +singleline = map (\c -> if c `elem` "\r\n" then ' ' else c) + stripbrackets :: String -> String stripbrackets = dropWhile (`elem` "([") . reverse . dropWhile (`elem` "])") . reverse :: String -> String