mirror of
https://github.com/simonmichael/hledger.git
synced 2024-11-08 07:09:28 +03:00
lib: In quarterdatespanp, use yearp and allow uppercase Q.
This commit is contained in:
parent
22091dfd31
commit
08ad220448
@ -85,7 +85,7 @@ import Control.Applicative (liftA2)
|
||||
import Control.Applicative.Permutations
|
||||
import Control.Monad (guard, unless)
|
||||
import "base-compat-batteries" Data.List.Compat
|
||||
import Data.Char (isDigit)
|
||||
import Data.Char (digitToInt, isDigit, ord)
|
||||
import Data.Default
|
||||
import Data.Foldable (asum)
|
||||
import Data.Function (on)
|
||||
@ -997,15 +997,17 @@ doubledatespanp rdate = liftA2 fromToSpan
|
||||
-- |
|
||||
-- >>> parsewith (quarterdatespanp (parsedate "2018/01/01") <* eof) "q1"
|
||||
-- Right DateSpan 2018Q1
|
||||
-- >>> parsewith (quarterdatespanp (parsedate "2018/01/01") <* eof) "Q1"
|
||||
-- Right DateSpan 2018Q1
|
||||
-- >>> parsewith (quarterdatespanp (parsedate "2018/01/01") <* eof) "2020q4"
|
||||
-- Right DateSpan 2020Q4
|
||||
quarterdatespanp :: Day -> TextParser m DateSpan
|
||||
quarterdatespanp rdate = do
|
||||
let defaultYear = first3 $ toGregorian rdate
|
||||
y <- maybe defaultYear read <$> optional (count 4 digitChar)
|
||||
char 'q'
|
||||
q <- oneOf ("1234"::[Char])
|
||||
return $ periodAsDateSpan $ QuarterPeriod y $ read [q]
|
||||
y <- yearp <|> pure (first3 $ toGregorian rdate)
|
||||
q <- char' 'q' *> satisfy is4Digit
|
||||
return . periodAsDateSpan $ QuarterPeriod y (digitToInt q)
|
||||
where
|
||||
is4Digit c = (fromIntegral (ord c - ord '1') :: Word) <= 3
|
||||
|
||||
fromdatespanp :: Day -> TextParser m DateSpan
|
||||
fromdatespanp rdate = fromSpan <$> choice
|
||||
|
Loading…
Reference in New Issue
Block a user