Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Conversion of the linked-list-like
SimpleDocStream
to a tree-like
SimpleDocTree
.
Synopsis
- data SimpleDocTree ann
- treeForm :: SimpleDocStream ann -> SimpleDocTree ann
- unAnnotateST :: SimpleDocTree ann -> SimpleDocTree xxx
- reAnnotateST :: (ann -> ann') -> SimpleDocTree ann -> SimpleDocTree ann'
- alterAnnotationsST :: (ann -> [ann']) -> SimpleDocTree ann -> SimpleDocTree ann'
- renderSimplyDecorated :: Monoid out => ( Text -> out) -> (ann -> out -> out) -> SimpleDocTree ann -> out
- renderSimplyDecoratedA :: ( Applicative f, Monoid out) => ( Text -> f out) -> (ann -> f out -> f out) -> SimpleDocTree ann -> f out
Type and conversion
data SimpleDocTree ann Source #
A
SimpleDocStream
is a linked list of different annotated cons cells
(
SText
and then some further
SimpleDocStream
,
SLine
and then some
further
SimpleDocStream
, …). This format is very suitable as a target for a
layout engine, but not very useful for rendering to a structured format such
as HTML, where we don’t want to do a lookahead until the end of some markup.
These formats benefit from a tree-like structure that explicitly marks its
contents as annotated.
SimpleDocTree
is that format.
STEmpty | |
STChar Char | |
STText ! Int Text | |
STLine ! Int |
|
STAnn ann ( SimpleDocTree ann) |
Annotate the contained document. |
STConcat [ SimpleDocTree ann] |
Horizontal concatenation of multiple documents. |
Instances
treeForm :: SimpleDocStream ann -> SimpleDocTree ann Source #
Convert a
SimpleDocStream
to its
SimpleDocTree
representation.
Manipulating annotations
unAnnotateST :: SimpleDocTree ann -> SimpleDocTree xxx Source #
Remove all annotations.
unAnnotate
for
SimpleDocTree
.
reAnnotateST :: (ann -> ann') -> SimpleDocTree ann -> SimpleDocTree ann' Source #
Change the annotation of a document.
reAnnotate
for
SimpleDocTree
.
alterAnnotationsST :: (ann -> [ann']) -> SimpleDocTree ann -> SimpleDocTree ann' Source #
Change the annotation of a document to a different annotation, or none at
all.
alterAnnotations
for
SimpleDocTree
.
Note that this is as powerful as
alterAnnotations
, allowing one annotation
to become multiple ones, contrary to
alterAnnotationsS
, which cannot do
this.
Common use case shortcut definitions
renderSimplyDecorated Source #
:: Monoid out | |
=> ( Text -> out) |
Render plain
|
-> (ann -> out -> out) |
How to modify an element with an annotation |
-> SimpleDocTree ann | |
-> out |
Simplest possible tree-based renderer.
For example, here is a document annotated with
()
, and the behaviour is to
surround annotated regions with »>>>« and »<<<«:
>>>
let doc = "hello" <+> annotate () "world" <> "!"
>>>
let stdoc = treeForm (layoutPretty defaultLayoutOptions doc)
>>>
T.putStrLn (renderSimplyDecorated id (\() x -> ">>>" <> x <> "<<<") stdoc)
hello >>>world<<<!
renderSimplyDecoratedA Source #
:: ( Applicative f, Monoid out) | |
=> ( Text -> f out) |
Render plain
|
-> (ann -> f out -> f out) |
How to modify an element with an annotation |
-> SimpleDocTree ann | |
-> f out |
Version of
renderSimplyDecoratedA
that allows for
Applicative
effects.