lib: prevent the parsing of prices of prices
This commit is contained in:
parent
edf9cc2366
commit
2a492696a9
@ -506,7 +506,14 @@ test_spaceandamountormissingp = do
|
||||
-- right, optional unit or total price, and optional (ignored)
|
||||
-- ledger-style balance assertion or fixed lot price declaration.
|
||||
amountp :: Monad m => JournalParser m Amount
|
||||
amountp = try leftsymbolamountp <|> try rightsymbolamountp <|> nosymbolamountp
|
||||
amountp = do
|
||||
amount <- amountwithoutpricep
|
||||
price <- priceamountp
|
||||
pure $ amount { aprice = price }
|
||||
|
||||
amountwithoutpricep :: Monad m => JournalParser m Amount
|
||||
amountwithoutpricep =
|
||||
try leftsymbolamountp <|> try rightsymbolamountp <|> nosymbolamountp
|
||||
|
||||
#ifdef TESTS
|
||||
test_amountp = do
|
||||
@ -560,8 +567,7 @@ leftsymbolamountp = do
|
||||
commodityspaced <- lift $ skipMany' spacenonewline
|
||||
(q,prec,mdec,mgrps) <- lift $ numberp suggestedStyle
|
||||
let s = amountstyle{ascommodityside=L, ascommodityspaced=commodityspaced, asprecision=prec, asdecimalpoint=mdec, asdigitgroups=mgrps}
|
||||
p <- priceamountp
|
||||
return $ Amount c (sign q) p s m
|
||||
return $ Amount c (sign q) NoPrice s m
|
||||
<?> "left-symbol amount"
|
||||
|
||||
rightsymbolamountp :: Monad m => JournalParser m Amount
|
||||
@ -579,9 +585,8 @@ rightsymbolamountp = do
|
||||
Left errMsg -> fail errMsg
|
||||
Right res -> pure res
|
||||
|
||||
p <- priceamountp
|
||||
let s = amountstyle{ascommodityside=R, ascommodityspaced=commodityspaced, asprecision=prec, asdecimalpoint=mdec, asdigitgroups=mgrps}
|
||||
return $ Amount c (sign q) p s m
|
||||
return $ Amount c (sign q) NoPrice s m
|
||||
<?> "right-symbol amount"
|
||||
|
||||
nosymbolamountp :: Monad m => JournalParser m Amount
|
||||
@ -589,13 +594,12 @@ nosymbolamountp = do
|
||||
m <- lift multiplierp
|
||||
suggestedStyle <- getDefaultAmountStyle
|
||||
(q,prec,mdec,mgrps) <- lift $ numberp suggestedStyle
|
||||
p <- priceamountp
|
||||
-- apply the most recently seen default commodity and style to this commodityless amount
|
||||
defcs <- getDefaultCommodityAndStyle
|
||||
let (c,s) = case defcs of
|
||||
Just (defc,defs) -> (defc, defs{asprecision=max (asprecision defs) prec})
|
||||
Nothing -> ("", amountstyle{asprecision=prec, asdecimalpoint=mdec, asdigitgroups=mgrps})
|
||||
return $ Amount c q p s m
|
||||
return $ Amount c q NoPrice s m
|
||||
<?> "no-symbol amount"
|
||||
|
||||
commoditysymbolp :: TextParser m CommoditySymbol
|
||||
@ -620,7 +624,7 @@ priceamountp = option NoPrice $ try $ do
|
||||
Nothing -> UnitPrice
|
||||
|
||||
lift (skipMany spacenonewline)
|
||||
priceAmount <- amountp -- XXX can parse more prices ad infinitum, shouldn't
|
||||
priceAmount <- amountwithoutpricep
|
||||
|
||||
pure $ priceConstructor priceAmount
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user