{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE DeriveGeneric #-} module Codec.Xlsx.Types.Internal.CfPair where import GHC.Generics (Generic) import Text.XML.Cursor import Codec.Xlsx.Parser.Internal import Codec.Xlsx.Types.Common import Codec.Xlsx.Types.ConditionalFormatting import Codec.Xlsx.Writer.Internal -- | Internal helper type for parsing "conditionalFormatting recods -- TODO: pivot, extList -- Implementing those will need this implementation to be changed -- -- See 18.3.1.18 "conditionalFormatting (Conditional Formatting)" (p. 1610) newtype CfPair = CfPair { unCfPair :: (SqRef, ConditionalFormatting) } deriving (Eq, Show, Generic) instance FromCursor CfPair where fromCursor cur = do sqref <- fromAttribute "sqref" cur let cfRules = cur $/ element (n_ "cfRule") >=> fromCursor return $ CfPair (sqref, cfRules) instance FromXenoNode CfPair where fromXenoNode root = do sqref <- parseAttributes root $ fromAttr "sqref" cfRules <- collectChildren root $ fromChildList "cfRule" return $ CfPair (sqref, cfRules) instance ToElement CfPair where toElement nm (CfPair (sqRef, cfRules)) = elementList nm [ "sqref" .= toAttrVal sqRef ] (map (toElement "cfRule") cfRules)