module Penny.Cabin.Colors where
import qualified Penny.Lincoln as L
import qualified Penny.Lincoln.Balance as Bal
import qualified Penny.Lincoln.Bits as Bits
import qualified Penny.Cabin.Chunk as C
import qualified Penny.Cabin.Meta as M
data DrCrColors =
DrCrColors { evenDebit :: !C.TextSpec
, evenCredit :: !C.TextSpec
, oddDebit :: !C.TextSpec
, oddCredit :: !C.TextSpec
, evenZero :: !C.TextSpec
, oddZero :: !C.TextSpec }
data BaseColors =
BaseColors { evenColors :: !C.TextSpec
, oddColors :: !C.TextSpec }
colors :: M.VisibleNum -> BaseColors -> C.TextSpec
colors vn b = let n = L.forward . M.unVisibleNum $ vn in
if odd n then oddColors b else evenColors b
drCrToBaseColors :: Bits.DrCr -> DrCrColors -> BaseColors
drCrToBaseColors dc col = case dc of
Bits.Debit -> BaseColors (evenDebit col) (oddDebit col)
Bits.Credit -> BaseColors (evenCredit col) (oddCredit col)
bottomLineToBaseColors :: DrCrColors -> Bal.BottomLine -> BaseColors
bottomLineToBaseColors col no = case no of
Bal.Zero -> BaseColors (evenZero col) (oddZero col)
Bal.NonZero column -> drCrToBaseColors (Bal.drCr column) col
noBalanceColors :: M.VisibleNum -> DrCrColors -> C.TextSpec
noBalanceColors vn dc =
if odd . L.forward . M.unVisibleNum $ vn
then oddZero dc
else evenZero dc