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
}