From bf6a2a7ccf0e5a42242f16205ad28fd12fe57bf0 Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Wed, 21 Dec 2022 22:01:11 -1000 Subject: [PATCH] imp: journal: ignore commodity subdirectives other than format --- hledger-lib/Hledger/Read/JournalReader.hs | 6 ++++-- hledger/hledger.m4.md | 2 ++ hledger/test/journal/directive-commodity.test | 13 ++++++++----- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/hledger-lib/Hledger/Read/JournalReader.hs b/hledger-lib/Hledger/Read/JournalReader.hs index abb951033..5e732e964 100644 --- a/hledger-lib/Hledger/Read/JournalReader.hs +++ b/hledger-lib/Hledger/Read/JournalReader.hs @@ -79,7 +79,7 @@ import Control.Monad.Except (ExceptT(..), runExceptT) import Control.Monad.State.Strict (evalStateT,get,modify',put) import Control.Monad.Trans.Class (lift) import Data.Char (toLower) -import Data.Either (isRight) +import Data.Either (isRight, lefts) import qualified Data.Map.Strict as M import Data.Text (Text) import Data.String @@ -489,7 +489,9 @@ commoditydirectivemultilinep = do lift skipNonNewlineSpaces1 sym <- lift commoditysymbolp _ <- lift followingcommentp - mfmt <- lastMay <$> many (indented $ formatdirectivep sym) + -- read all subdirectives, saving format subdirectives as Lefts + subdirectives <- many $ indented (eitherP (formatdirectivep sym) (lift restofline)) + let mfmt = lastMay $ lefts subdirectives let comm = Commodity{csymbol=sym, cformat=mfmt} modify' (\j -> j{jcommodities=M.insert sym comm $ jcommodities j}) where diff --git a/hledger/hledger.m4.md b/hledger/hledger.m4.md index bb96ae389..d65978032 100644 --- a/hledger/hledger.m4.md +++ b/hledger/hledger.m4.md @@ -2186,6 +2186,8 @@ commodity INR format INR 1,00,00,000.00 ``` +Any indented subdirectives other than `format` are currently ignored. + Remember that if the commodity symbol contains spaces, numbers, or punctuation, it must be enclosed in double quotes (cf [Commodity](#commodity)). diff --git a/hledger/test/journal/directive-commodity.test b/hledger/test/journal/directive-commodity.test index 24d970636..be44bbf2b 100644 --- a/hledger/test/journal/directive-commodity.test +++ b/hledger/test/journal/directive-commodity.test @@ -64,10 +64,13 @@ $ hledger -f - commodities >2 /unexpected 'f'/ >=1 -# 10 it rejects unrecognised subdirectives (should be permissive like account, TODO) +# 10 it ignores unrecognised subdirectives < -commodity A - note a a +commodity USD + note American Dollars + format USD 1,000.00 + nomarket + alias DOLLARS + default $ hledger -f - commodities ->2 /expecting "format"/ ->=1 +USD