module Data.Text.ParagraphLayout.Internal.ProtoFragment ( ProtoFragment (direction, advance, glyphs) , protoFragmentH ) where import Data.Int (Int32) import Data.Text.Glyphize (Direction (..), GlyphInfo, GlyphPos (x_advance)) import qualified Data.Text.ParagraphLayout.Internal.BiDiLevels as BiDi -- | A box fragment which has not been positioned yet. data ProtoFragment = ProtoFragment { direction :: Maybe Direction -- ^ Text direction, which is constant within a fragment. , level :: BiDi.Level -- ^ BiDi embedding level. -- Should be even for LTR fragments and odd for RTL fragments. , advance :: Int32 -- ^ Total advance of glyphs in this fragment, -- depending on the text direction. , glyphs :: [(GlyphInfo, GlyphPos)] } -- | Construct a `ProtoFragment`, automatically calculating the total advance -- for a horizontal text direction. protoFragmentH :: Maybe Direction -> BiDi.Level -> [(GlyphInfo, GlyphPos)] -> ProtoFragment protoFragmentH dir lvl gs = ProtoFragment dir lvl adv gs where adv = sum $ map (x_advance . snd) gs instance BiDi.WithLevel ProtoFragment where level = level -- BiDi.level = ProtoFragment.level