module Data.Text.ParagraphLayout.Internal.ResolvedBox ( ResolvedBox (..) , boxEndSpacing , boxLeftSpacing , boxRightSpacing , boxStartSpacing ) where import Data.Int (Int32) import Data.Text.Glyphize (Direction (DirLTR, DirRTL)) import Data.Text.ParagraphLayout.Internal.BoxOptions -- | Internal structure describing an inline box. -- May be shared by multiple fragments. data ResolvedBox d = ResolvedBox { boxUserData :: d , boxIndex :: Int , boxOptions :: BoxOptions , boxDirection :: Direction } instance Eq (ResolvedBox d) where a == b = boxIndex a == boxIndex b boxLeftSpacing :: ResolvedBox d -> Int32 boxLeftSpacing rb = case boxSpacing $ boxOptions rb of BoxSpacingLeftRight s _ -> s boxRightSpacing :: ResolvedBox d -> Int32 boxRightSpacing rb = case boxSpacing $ boxOptions rb of BoxSpacingLeftRight _ s -> s -- | Spacing at the start of the given box. boxStartSpacing :: ResolvedBox d -> Int32 boxStartSpacing rb = case (boxDirection rb, boxSpacing $ boxOptions rb) of (DirLTR, BoxSpacingLeftRight s _) -> s (DirRTL, BoxSpacingLeftRight _ s) -> s (_, _) -> 0 -- | Spacing at the end of the given box. boxEndSpacing :: ResolvedBox d -> Int32 boxEndSpacing rb = case (boxDirection rb, boxSpacing $ boxOptions rb) of (DirLTR, BoxSpacingLeftRight _ s) -> s (DirRTL, BoxSpacingLeftRight s _) -> s (_, _) -> 0