module Data.Text.ParagraphLayout.Internal.TextOptions ( TextOptions (..) , defaultTextOptions ) where import Data.Int (Int32) import Data.Text.Glyphize (Direction, Font, emptyFont) import Data.Text.ParagraphLayout.Internal.LineHeight -- | Style options to be applied to a text sequence. -- -- This record type is likely to be extended in the future. -- Use `defaultTextOptions` and update it with specific record selectors -- instead of constructing `TextOptions` directly. data TextOptions = TextOptions { textFont :: Font -- ^ Font to be used for shaping and measurement. -- Make sure to set its scale (see `Data.Text.Glyphize.optionScale`) using -- the same units that you want in the output. , textAscender :: Maybe Int32 -- ^ How much to add to the text's baseline coordinate to reach its -- ascender line. This is usually a positive value. -- -- If set to `Nothing`, the font's own `Data.Text.Glyphize.ascender` -- metric will be used. -- -- Setting an explicit value with @`Just` x@ is intended as an override -- for situations where the text is intended to be replaced by an object -- with differently calculated dimensions. , textDescender :: Maybe Int32 -- ^ How much to add to the text's baseline coordinate to reach its -- descender line. Note that this is usually a negative value because -- the descender is usually below the baseline. -- -- If set to `Nothing`, the font's own `Data.Text.Glyphize.descender` -- metric will be used. -- -- Setting an explicit value with @`Just` x@ is intended as an override -- for situations where the text is intended to be replaced by an object -- with differently calculated dimensions. , textLineHeight :: LineHeight -- ^ Preferred line height of the resulting fragments. , textLanguage :: String -- ^ IETF BCP 47 language tag, such as the value expected to be found in -- the HTML @lang@ attribute, specifying the primary language for the -- span's text content. An empty string explicitly means "language unknown". -- -- Used for selecting the appropriate glyphs and line breaking rules, -- primarily in East Asian languages. , textDirection :: Direction -- ^ Base text direction. -- -- Used to determine which box fragment gets the left spacing and which -- gets the right spacing when broken over multiple lines. -- -- When applied to the root box in a paragraph, this is also used to -- determine the base direction of the paragraph. -- TODO: textLetterSpacing -- TODO: textWordSpacing -- TODO: textFontFeatures -- TODO: textSoftBreaks } deriving (Eq) -- | `TextOptions` with default values. defaultTextOptions :: Direction -- ^ Required value for `textDirection`. -> TextOptions defaultTextOptions dir = TextOptions { textFont = emptyFont , textAscender = Nothing , textDescender = Nothing , textLineHeight = Normal , textLanguage = "" , textDirection = dir }