This is a prettyprinting library designed for laying out
plain-text documents. It originated in the pandoc module
Text.Pandoc.Pretty, and its development has been guided by
pandoc’s needs in rendering wrapped textual documents.
In supports wrapping of text on breaking spaces, indentation
and other line prefixes, blank lines, and tabular content.
Example:
Text.DocLayout> mydoc = hang 2 "- " (text "foo" <+> text "bar")
Text.DocLayout> putStrLn $ render (Just 20) mydoc
- foo bar
Text.DocLayout> putStrLn $ render (Just 10) (prefixed "> " (mydoc $+$ mydoc))
> - foo
> bar
>
> - foo
> bar
The Doc type may be parameterized to either String or
(strict or lazy) Text, depending on the desired render target.
Changes
doclayout
0.3.0.2
NOINLINE literal instead of fromString (#2, sjakobi).
This produces a further reduction in allocations and
pandoc compile time.
0.3.0.1
NOINLINE fromString (#1).
@sjakobi reports that this change reduced total allocations
for building pandoc-2.12 with GHC 8.10.4 by 8.5% and reduced
peak allocations are reduced from 3854MB to 3389MB.
0.3
Add foldlChar to signature of HasChars [API change].
Use foldlChar in realLength. This avoids a stack overflow
we were getting with long strings in the previous version
(with foldrChar). See jgm/pandoc#6031.
Replace isBlank with isBreakable and improved startsWithBlank.
Previously isBlank was used in the layout algorithm where
what we really wanted was isBreakable.
Avoid unnecessary calculation in updateColumns.
Replace a right fold with a strict left fold.
Add strictness annotations in realLength and updateColumn.
0.2.0.1
Made realLength smarter about combining characters.
If a string starts with a combining character, that character
takes up a width of 1; if the combining character occurs after
another character, it takes 0. See jgm/pandoc#5863.
Improve isBlank, re-use in rendering code for BreakingSpace.
Fixed incorrect Text width in renderig blocks.
0.2
Add instances for Doc: Data, Typeable, Ord, Read, Generic.
Add literal (like text, but polymorphic).
Change some IsString constraints to HasChars.
Add some default definitions for methods in HasChars.
Change offset and minOffset to be more efficient (in
simple cases they no longer render and count line lengths).
Add updateColumn.
Fix problem with lblock/cblock/rblock when chop is
invoked. This caused very strange behavior in which text
got reversed in certain circumstances.