module Data.Text.ParagraphLayout.Internal.ParagraphOptions ( ParagraphOptions (..) , defaultParagraphOptions ) where import Data.Int (Int32) import Data.Text.Glyphize (Font, emptyFont) import Data.Text.ParagraphLayout.Internal.LineHeight import Data.Text.ParagraphLayout.Internal.ParagraphAlignment -- | Defines options relevant to the entire paragraph. -- -- This record type is likely to be extended in the future. -- Use `defaultParagraphOptions` and update it with specific record selectors -- instead of constructing `ParagraphOptions` directly. -- -- In order to get CSS defaults, use: -- -- > defaultParagraphOptions { paragraphAlignment = AlignStart } data ParagraphOptions = ParagraphOptions { paragraphFont :: 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. , paragraphLineHeight :: LineHeight -- ^ Preferred line height of the resulting fragments. , paragraphAlignment :: ParagraphAlignment -- ^ Alignment of non-overflowing lines within the paragraph. , paragraphMaxWidth :: Int32 -- ^ Line width at which line breaking should occur. -- Lines will be broken at language-appropriate boundaries. -- If a line still exceeds this limit then, it will be broken at character -- boundaries, and if it already consists of a single cluster that cannot -- be further broken down, it will overflow. } deriving (Eq) -- | `ParagraphOptions` with backwards-compatible values. -- -- Note that this sets `paragraphAlignment` to `AlignLeft`, -- whereas the CSS default should be `AlignStart`. defaultParagraphOptions :: ParagraphOptions defaultParagraphOptions = ParagraphOptions { paragraphFont = emptyFont , paragraphLineHeight = Normal , paragraphAlignment = AlignLeft , paragraphMaxWidth = maxBound }