module Data.Text.ParagraphLayout.Internal.Span
(Span(..)
,SpanLayout(..)
,SpanOptions(..)
,spanRects
)
where
import Data.Int (Int32)
import Data.Text.ParagraphLayout.Internal.Fragment
import Data.Text.ParagraphLayout.Internal.Rect
-- | A paragraph is broken into spans by the caller.
--
-- Each span could have a different font family, size, style, text decoration,
-- colour, language, etc.
data Span = Span
{ spanLength :: Int
-- ^ Byte offset to the next span or the end of the paragraph text.
, spanOptions :: SpanOptions
-- ^ Options applying to this specific span.
}
deriving (Eq, Read, Show)
-- TODO: Add all relevant attributes.
data SpanOptions = SpanOptions
{ spanLanguage :: String
-- ^ Used for selecting the appropriate glyphs and line breaking rules.
}
deriving (Eq, Read, Show)
-- | The resulting layout of each span, which may include multiple fragments if
-- broken over multiple lines.
data SpanLayout = SpanLayout [Fragment]
-- TODO: Consider merging. fragments created by script changes.
deriving (Eq, Read, Show)
spanRects :: SpanLayout -> [Rect Int32]
spanRects (SpanLayout frags) = map fragmentRect frags