balkon-1.3.0.0: Text layout engine built on top of HarfBuzz.
Safe HaskellNone
LanguageHaskell2010

Data.Text.ParagraphLayout.Rich

Description

Interface for laying out paragraphs of rich text.

The main entry point is the function layoutRich.

Synopsis

Documentation

data Paragraph d #

Text to be laid out as a single paragraph.

May be divided into a hierarchy of boxes and spans.

The input text must be encoded as UTF-8 in a contiguous byte array.

You may need to use Data.Text.Internal in order to determine the byte array and the necessary offsets to construct the paragraph without copying data.

Alternatively, you can use constructParagraph with piecewise text.

Constructors

Paragraph 

Fields

  • Array

    A byte array containing the whole text to be laid out, in UTF-8.

    This array will be passed to Data.Text.Glyphize, which passes it to hb_buffer_add_utf8().

    In the output, cluster will be a byte offset of the corresponding input character from this array.

  • Int

    Byte offset of the first text node from the start of the byte array. Any characters preceding this offset will not be shaped, but may still be used to influence the shape of neighbouring characters.

  • (RootNode Int d)

    Parts of the text to be laid out, represented as a tree. The in-order walk of this tree corresponds to the logical order of the text.

  • ParagraphOptions

    Options applying to the paragraph as a whole.

constructParagraph #

Arguments

:: Text

Optional prefix. Will not be laid out but may affect the output.

-> RootNode Text d

Parts of the text to be laid out, represented as a tree.

-> Text

Optional suffix. Will not be laid out but may affect the output.

-> ParagraphOptions

Options to apply to the paragraph as a whole.

-> Paragraph d

Constructed paragraph that can be passed to layoutRich.

Construct a Paragraph from a tree containing individual pieces of text, plus an optional prefix and suffix, all encoded as UTF-8.

This internally concatenates all input text into one contiguous byte array.

Alternatively, you can construct a Paragraph directly to avoid copying data.

data ParagraphAlignment #

Determines how the contents of the paragraph should be aligned horizontally, that is, how should fragments be stacked inside each line when there is space available.

This has no effect on lines with overflowing content.

Constructors

AlignStart

Behave like AlignLeft when the base direction of the paragraph is LTR, and like AlignRight when the base direction is RTL.

AlignEnd

Behave like AlignLeft when the base direction of the paragraph is RTL, and like AlignRight when the base direction is LTR.

AlignLeft

Stack fragments to the left edge of each line, leaving free space on the right side.

The leftmost fragment on each non-overflowing line will have its x_min equal to 0.

AlignRight

Stack fragments to the right edge of each line, leaving free space on the left side.

The rightmost fragment on each non-overflowing line will have its x_max equal to paragraphMaxWidth.

AlignCentreH

Stack fragments to the horizontal centre of each line, leaving free space split evenly between each side.

data BoxCollapse #

Determines how an inline box affects the height of a line that would otherwise be empty.

Note that for this setting to have any effect, the box must be the ancestor of at least one (possibly empty) text sequence, so that it can generate a Fragment.

For CSS-compliant behaviour:

  • Ensure that empty boxes contain empty text sequences as mentioned above. This can be achieved using the strut function.
  • Set AllowBoxCollapse for boxes with zero margins, padding, and borders.
  • Set AvoidBoxCollapse for boxes with non-zero margins, padding, or borders.

Note that BoxSpacing may contain zero values even when calculated from non-zero CSS values, because of rounding to integer values and/or because of adding together positive and negative values that cancel out. You should therefore compare the individual computed values for margins, padding, and borders with zero, and set boxCollapse to AllowBoxCollapse if and only if all these values are equal to zero.

Constructors

AllowBoxCollapse

The box should disappear when possible to make empty lines invisible.

AvoidBoxCollapse

The box should be preserved when possible, making lines visible even when they would otherwise be empty.

Instances

Instances details
Eq BoxCollapse 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.BoxOptions

Methods

(==) :: BoxCollapse -> BoxCollapse -> Bool

(/=) :: BoxCollapse -> BoxCollapse -> Bool

Read BoxCollapse 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.BoxOptions

Methods

readsPrec :: Int -> ReadS BoxCollapse

readList :: ReadS [BoxCollapse]

readPrec :: ReadPrec BoxCollapse

readListPrec :: ReadPrec [BoxCollapse]

Show BoxCollapse 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.BoxOptions

Methods

showsPrec :: Int -> BoxCollapse -> ShowS

show :: BoxCollapse -> String

showList :: [BoxCollapse] -> ShowS

data BoxSpacing #

Determines the amount of empty space to add around a box.

Constructors

BoxSpacingLeftRight

Specification using absolute directions, unaffected by text direction.

(However, text direction is still used in case of fragmentation, to determine how to map the first (last) fragment to left (right).)

Fields

  • Int32

    Amount of empty space to add to the left side of the first fragment (for LTR text) or last fragment (for RTL text) created from this box.

  • Int32

    Amount of empty space to add to the right side of the first fragment (for RTL text) or last fragment (for LTR text) created from this box.

Instances

Instances details
Eq BoxSpacing 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.BoxOptions

Methods

(==) :: BoxSpacing -> BoxSpacing -> Bool

(/=) :: BoxSpacing -> BoxSpacing -> Bool

Read BoxSpacing 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.BoxOptions

Methods

readsPrec :: Int -> ReadS BoxSpacing

readList :: ReadS [BoxSpacing]

readPrec :: ReadPrec BoxSpacing

readListPrec :: ReadPrec [BoxSpacing]

Show BoxSpacing 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.BoxOptions

Methods

showsPrec :: Int -> BoxSpacing -> ShowS

show :: BoxSpacing -> String

showList :: [BoxSpacing] -> ShowS

data VerticalAlignment #

Determines how the contents of a line should be aligned vertically, that is, how fragments should fill (and possibly extend) the vertical space inside a line.

Vertical alignment takes place after line breaking.

Constructors

AlignLineTop

Align the top of this box with the top of the line.

The top of this box is the topmost coordinate of any fragment descended from this box, except for fragments that are descended from another box with AlignLineTop or AlignLineBottom closer to them.

LineHeight is included when considering the top coordinates of descended fragments, and thus, leading is included.

This behaviour is equivalent to vertical-align: top in CSS.

AlignLineBottom

Align the bottom of this box with the bottom of the line.

The bottom of this box is the bottommost coordinate of any fragment descended from this box, except for fragments that are descended from another box with AlignLineTop or AlignLineBottom closer to them.

LineHeight is included when considering the bottom coordinates of descended fragments, and thus, leading is included.

This behaviour is equivalent to vertical-align: bottom in CSS.

AlignBaseline Int32

Align the baseline of this box with the baseline of its parent box, optionally shifting it by a specified amount upwards.

AlignBaseline 0 is equivalent to vertical-align: baseline in CSS.

AlignBaseline x is equivalent to vertical-align: <length> in CSS, after an appropriate unit conversion.

data LineHeight #

Determines the preferred line height of text in the resulting layout.

Constructors

Normal

The amount of vertical space taken up by the text in the layout will be exactly the distance between its font's ascender and descender line, with no further adjustment.

Absolute Int32

The amount of vertical space taken up by the text in the layout will be exactly the provided value. If this value is different from the distance between the font's ascender and descender line, the difference will be split in two equal parts (within a rounding error) and applied as half-leading both above and below the glyphs.

Instances

Instances details
Eq LineHeight 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.LineHeight

Methods

(==) :: LineHeight -> LineHeight -> Bool

(/=) :: LineHeight -> LineHeight -> Bool

Read LineHeight 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.LineHeight

Methods

readsPrec :: Int -> ReadS LineHeight

readList :: ReadS [LineHeight]

readPrec :: ReadPrec LineHeight

readListPrec :: ReadPrec [LineHeight]

Show LineHeight 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.LineHeight

Methods

showsPrec :: Int -> LineHeight -> ShowS

show :: LineHeight -> String

showList :: [LineHeight] -> ShowS

data ParagraphOptions #

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 }

Instances

Instances details
Eq ParagraphOptions 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.ParagraphOptions

defaultParagraphOptions :: ParagraphOptions #

ParagraphOptions with backwards-compatible values.

Note that this sets paragraphAlignment to AlignLeft, whereas the CSS default should be AlignStart.

Paragraph options

These are record selectors that can be used for reading as well as updating specific option fields.

paragraphAlignment :: ParagraphOptions -> ParagraphAlignment #

Alignment of non-overflowing lines within the paragraph.

paragraphMaxWidth :: ParagraphOptions -> 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.

Content tree

data RootNode t d #

Root of the paragraph tree.

Constructors

RootBox

The root inline box. Always present in a paragraph.

Cannot be styled directly, but can still set options for formatting text sequences directly descending from this box.

Fields

  • (Box t d)

    Contents of the box.

data InnerNode t d #

Non-root node of the paragraph tree.

Constructors

InlineBox

An inline box, nested in another box.

Fields

  • d

    User-defined data associated with the box.

  • (Box t d)

    Contents of the box.

  • BoxOptions

    Style options to apply to the inline box.

TextSequence

A leaf node containing text.

Fields

  • d

    User-defined data associated with the text node.

  • t

    Representation of the text contained by the text node.

data Box t d #

A box with content and a defined format. Corresponds to a DOM element.

Constructors

Box 

Fields

  • [InnerNode t d]

    Text nodes and other boxes contained by this box.

    Please note that boxes which are not the ancestors of any leaf nodes will have no effect on the output.

    To ensure that all boxes are represented in the output, as would be expected for DOM elements in HTML, an empty text sequence must be added to otherwise empty boxes. This can be done by using the strut function.

  • TextOptions

    Style options to apply to text sequences directly contained by this box.

class EmptyText t #

Data types that can represent an empty text sequence in a tree.

Minimal complete definition

empty

Instances

Instances details
EmptyText Int 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.Tree

Methods

empty :: Int

EmptyText Text 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.Tree

Methods

empty :: Text

strut :: EmptyText t => d -> RootNode t d -> RootNode t d #

Insert an empty text sequence with the given user data into each empty box.

data BoxOptions #

Style options to be applied to an inline box.

This record type is likely to be extended in the future. Use defaultBoxOptions and update it with specific record selectors instead of constructing BoxOptions directly.

In order to get CSS defaults, use:

defaultBoxOptions { boxVerticalAlignment = AlignBaseline 0 }

Instances

Instances details
Eq BoxOptions 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.BoxOptions

Methods

(==) :: BoxOptions -> BoxOptions -> Bool

(/=) :: BoxOptions -> BoxOptions -> Bool

defaultBoxOptions :: BoxOptions #

BoxOptions with backwards-compatible values.

Note that this sets boxVerticalAlignment to AlignLineTop, whereas the CSS default should be `AlignBaseline 0`.

data TextOptions #

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.

Instances

Instances details
Eq TextOptions 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.TextOptions

Methods

(==) :: TextOptions -> TextOptions -> Bool

(/=) :: TextOptions -> TextOptions -> Bool

defaultTextOptions #

Arguments

:: Direction

Required value for textDirection.

-> TextOptions 

TextOptions with default values.

Box options

These are record selectors that can be used for reading as well as updating specific option fields.

boxSpacing :: BoxOptions -> BoxSpacing #

Determines amount of empty space to add before the first fragment and/or after the last fragment of this box.

This can be used to reserve space for a left margin, border, and/or padding.

In order to get CSS-compliant behaviour, consider using activateBoxSpacing instead.

boxCollapse :: BoxOptions -> BoxCollapse #

Determines how this box affects the height of a line that would otherwise be empty.

boxVerticalAlignment :: BoxOptions -> VerticalAlignment #

Determines how fragments are aligned vertically within a line.

activateBoxSpacing :: BoxSpacing -> BoxOptions -> BoxOptions #

Shorthand for updating boxSpacing and setting boxCollapse to AvoidBoxCollapse.

Can be used to activate CSS-compliant rendering of empty boxes whose spacing is calculated from non-zero values.

Text options

These are record selectors that can be used for reading as well as updating specific option fields.

textFont :: TextOptions -> Font #

Font to be used for shaping and measurement. Make sure to set its scale (see optionScale) using the same units that you want in the output.

textAscender :: TextOptions -> 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 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 :: TextOptions -> 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 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 :: TextOptions -> LineHeight #

Preferred line height of the resulting fragments.

textLanguage :: TextOptions -> 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 :: TextOptions -> 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.

Verification

paragraphSpanBounds :: Paragraph d -> NonEmpty Int #

Calculate the offsets into the Paragraph's underlying Array where each text node starts and ends, in ascending order. The resulting list will be one larger than the number of text nodes in the input.

You can use this function to verify that Balkón will slice the input text correctly.

paragraphSpanTexts :: Paragraph d -> [Text] #

Turn each text node from the input Paragraph into a Text.

You can use this function to verify that Balkón will slice the input text correctly.

paragraphText :: Paragraph d -> Text #

Turn all text nodes from the input Paragraph into one combined Text.

You can use this function to verify that Balkón will slice the input text correctly.

Output layout

layoutRich :: Paragraph d -> ParagraphLayout d #

Lay out a rich text paragraph.

data ParagraphLayout d #

The resulting layout of the whole paragraph.

Constructors

ParagraphLayout 

Fields

  • paragraphRect :: Rect Int32

    The containing block (CSS3).

  • paragraphLines :: [Line]

    Information about line boxes (CSS). May describe additional empty space around text fragments.

  • paragraphFragments :: [Fragment d]

    The resulting layout of all input text, divided into fragments as required by the input structure, line breaking, text writing direction, and changes of script.

Instances

Instances details
Eq d => Eq (ParagraphLayout d) 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.Rich.ParagraphLayout

Methods

(==) :: ParagraphLayout d -> ParagraphLayout d -> Bool

(/=) :: ParagraphLayout d -> ParagraphLayout d -> Bool

Read d => Read (ParagraphLayout d) 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.Rich.ParagraphLayout

Methods

readsPrec :: Int -> ReadS (ParagraphLayout d)

readList :: ReadS [ParagraphLayout d]

readPrec :: ReadPrec (ParagraphLayout d)

readListPrec :: ReadPrec [ParagraphLayout d]

Show d => Show (ParagraphLayout d) 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.Rich.ParagraphLayout

Methods

showsPrec :: Int -> ParagraphLayout d -> ShowS

show :: ParagraphLayout d -> String

showList :: [ParagraphLayout d] -> ShowS

Paginable (ParagraphLayout d)

Implementation of paginating a rich text paragraph layout. Breaks the layout on page boundaries and automatically adjusts coordinates.

Instance details

Defined in Data.Text.ParagraphLayout.Internal.Paginable

LineHeight (ParagraphLayout d) 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.Rich.ParagraphLayout

Methods

lineHeight :: ParagraphLayout d -> Int32 #

LineNumbers (ParagraphLayout d) 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.Rich.ParagraphLayout

paragraphSafeWidth :: ParagraphLayout d -> Int32 #

Width of the widest line, including spacing.

This is the smallest paragraphMaxWidth that will not introduce new line breaks.

When paragraphMaxWidth is set to maxBound, paragraphSafeWidth can be used to determine the max-content width of the paragraph for CSS.

data Line #

Information about a line in a laid out paragraph.

Constructors

Line 

Fields

  • lineNumber :: Int

    Logical number of the line box, starting at 1 for a given paragraph.

  • lineRect :: Rect Int32

    Dimensions of the line box (CSS), containing all fragments on a given line, and matching the width of the whole paragraph.

Instances

Instances details
Eq Line 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.Line

Methods

(==) :: Line -> Line -> Bool

(/=) :: Line -> Line -> Bool

Read Line 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.Line

Methods

readsPrec :: Int -> ReadS Line

readList :: ReadS [Line]

readPrec :: ReadPrec Line

readListPrec :: ReadPrec [Line]

Show Line 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.Line

Methods

showsPrec :: Int -> Line -> ShowS

show :: Line -> String

showList :: [Line] -> ShowS

data Fragment d #

A unit of text laid out in a rectangular area.

Roughly equivalent to the term text fragment as used in CSS Display Module Level 3.

An input span (or text sequence in CSS terms) can be broken into multiple fragments because of line breaking, because of bidirectional ordering, or because it contains glyphs from multiple scripts.

Constructors

Fragment 

Fields

  • fragmentUserData :: d

    User-defined data associated with the input text span that produced this fragment.

  • fragmentLine :: Int

    Logical number of the line box holding the fragment, starting at 1. Fragments with the same line number are on the same line and will not be separated by page breaks.

  • fragmentAncestorBoxes :: [AncestorBox d]

    Information about inline boxes which contain this fragment (starting from the nearest ancestor and continuing upwards through the tree, up to but excluding the root) and the spacing required by them.

  • fragmentContentRect :: Rect Int32

    Physical position of the fragment within the paragraph, calculated using all glyph advances in this fragment and the used font's ascent and descent metrics.

    This is commonly used as the content area of inline elements in web browsers, although this behaviour is not specified in CSS 2 nor in CSS Inline Layout Module Level 3.

  • fragmentRect :: Rect Int32

    Physical position of the fragment within the paragraph, calculated using all glyph advances in this fragment and the calculated line height.

    This is the space that the glyphs "take up" and is probably what you want to use for detecting position-based events such as mouse clicks.

    Beware that actual glyphs will not be drawn exactly to the borders of this rectangle -- they may be offset inwards and they can also extend outwards!

    These are not the typographic bounding boxes that you use for determining the area to draw on -- you need FreeType or a similar library for that.

    The origin coordinates are relative to the paragraph.

    The vertical extent of this rectangle is the equivalent of layout bounds defined by CSS.

    Box spacing is not included.

  • fragmentPen :: (Int32, Int32)

    Coordinates of the initial pen position, from which the first glyph should be drawn, relative to the origin of the fragmentRect. Each glyph's x_advance or y_advance are then used to move the pen position for the next glyph.

  • fragmentGlyphs :: [(GlyphInfo, GlyphPos)]

    Glyphs contained in the fragment, as returned from HarfBuzz.

Instances

Instances details
Eq d => Eq (Fragment d) 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.Fragment

Methods

(==) :: Fragment d -> Fragment d -> Bool

(/=) :: Fragment d -> Fragment d -> Bool

Read d => Read (Fragment d) 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.Fragment

Methods

readsPrec :: Int -> ReadS (Fragment d)

readList :: ReadS [Fragment d]

readPrec :: ReadPrec (Fragment d)

readListPrec :: ReadPrec [Fragment d]

Show d => Show (Fragment d) 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.Fragment

Methods

showsPrec :: Int -> Fragment d -> ShowS

show :: Fragment d -> String

showList :: [Fragment d] -> ShowS

fragmentSpacedRect :: Fragment d -> Rect Int32 #

Physical position of the fragment within the paragraph, with spacing added to the glyph advances. This is the space that the fragment takes up in the paragraph.

data AncestorBox d #

Describes the relationship of a fragment to an inline box that contains it.

A box can have many fragments, and a fragment contained by a box is also contained by all ancestors of that box.

The root inline box, which forms the basis of each paragraph, is implied and not described by this type of record.

Constructors

AncestorBox 

Fields

  • boxUserData :: d

    User-defined data associated with the inline box.

  • boxLeftEdge :: BoxEdge

    Describes the left edge of the inline box. Typically applied to the leftmost fragment in the box, and set to NoEdge for all other fragments.

    Equal to boxStartEdge for LTR boxes.

    Equal to boxEndEdge for RTL boxes.

  • boxRightEdge :: BoxEdge

    Describes the right edge of the inline box. Typically applied to the rightmost fragment in the box, and set to NoEdge for all other fragments.

    Equal to boxStartEdge for RTL boxes.

    Equal to boxEndEdge for LTR boxes.

  • boxStartEdge :: BoxEdge

    Describes the start edge of the inline box. Typically applied to the startmost fragment in the box, and set to NoEdge for all other fragments.

    Equal to boxLeftEdge for LTR boxes.

    Equal to boxRightEdge for RTL boxes.

  • boxEndEdge :: BoxEdge

    Describes the end edge of the inline box. Typically applied to the endmost fragment in the box, and set to NoEdge for all other fragments.

    Equal to boxLeftEdge for RTL boxes.

    Equal to boxRightEdge for LTR boxes.

Instances

Instances details
Eq d => Eq (AncestorBox d) 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.AncestorBox

Methods

(==) :: AncestorBox d -> AncestorBox d -> Bool

(/=) :: AncestorBox d -> AncestorBox d -> Bool

Read d => Read (AncestorBox d) 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.AncestorBox

Methods

readsPrec :: Int -> ReadS (AncestorBox d)

readList :: ReadS [AncestorBox d]

readPrec :: ReadPrec (AncestorBox d)

readListPrec :: ReadPrec [AncestorBox d]

Show d => Show (AncestorBox d) 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.AncestorBox

Methods

showsPrec :: Int -> AncestorBox d -> ShowS

show :: AncestorBox d -> String

showList :: [AncestorBox d] -> ShowS

data BoxEdge #

Describes either the absence, or the presence and size, of a box edge at a given position.

Constructors

NoEdge

The given box does not have an edge here.

This typically means that the box was fragmented and that the given edge is associated with another fragment.

SpacedEdge Int32

The given box has an edge here, adding a given amount of empty space from the fragmentRect outward.

Instances

Instances details
Eq BoxEdge 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.AncestorBox

Methods

(==) :: BoxEdge -> BoxEdge -> Bool

(/=) :: BoxEdge -> BoxEdge -> Bool

Read BoxEdge 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.AncestorBox

Methods

readsPrec :: Int -> ReadS BoxEdge

readList :: ReadS [BoxEdge]

readPrec :: ReadPrec BoxEdge

readListPrec :: ReadPrec [BoxEdge]

Show BoxEdge 
Instance details

Defined in Data.Text.ParagraphLayout.Internal.AncestorBox

Methods

showsPrec :: Int -> BoxEdge -> ShowS

show :: BoxEdge -> String

showList :: [BoxEdge] -> ShowS