Safe Haskell | Safe |
---|---|
Language | Haskell2010 |
Deprecated: Writing your own stack machine is probably more efficient and customizable; also consider using »renderSimplyDecorated(A)« instead
This module shows how to write a custom prettyprinter backend, based on
directly converting a SimpleDocStream
to an output format using a stack
machine. For a tree serialization approach, which may be more suitable for
certain output formats, see
Data.Text.Prettyprint.Doc.Render.Tutorials.TreeRenderingTutorial.
Rendering to ANSI terminal with colors is an important use case for stack machine based rendering.
The module is written to be readable top-to-bottom in both Haddock and raw source form.
Synopsis
- data Color
- data SimpleHtml
- bold :: Doc SimpleHtml -> Doc SimpleHtml
- italics :: Doc SimpleHtml -> Doc SimpleHtml
- paragraph :: Doc SimpleHtml -> Doc SimpleHtml
- headline :: Doc SimpleHtml -> Doc SimpleHtml
- color :: Color -> Doc SimpleHtml -> Doc SimpleHtml
- renderStackMachine :: SimpleDocStream SimpleHtml -> StackMachine Builder SimpleHtml ()
- htmlTag :: SimpleHtml -> (Builder, Builder)
- render :: SimpleDocStream SimpleHtml -> Text
Documentation
bold :: Doc SimpleHtml -> Doc SimpleHtml Source #
italics :: Doc SimpleHtml -> Doc SimpleHtml Source #
paragraph :: Doc SimpleHtml -> Doc SimpleHtml Source #
headline :: Doc SimpleHtml -> Doc SimpleHtml Source #
color :: Color -> Doc SimpleHtml -> Doc SimpleHtml Source #
renderStackMachine :: SimpleDocStream SimpleHtml -> StackMachine Builder SimpleHtml () Source #
The StackMachine
type defines a stack machine suitable for many rendering
needs. It has two auxiliary parameters: the type of the end result, and the
type of the document’s annotations.
Most StackMachine
creations will look like this definition: a recursive
walk through the SimpleDocStream
, pushing styles on the stack and popping
them off again, and writing raw output.
The equivalent to this in the tree based rendering approach is
renderTree
.
htmlTag :: SimpleHtml -> (Builder, Builder) Source #
Convert a SimpleHtml
annotation to a pair of opening and closing tags.
This is where the translation of style to raw output happens.
render :: SimpleDocStream SimpleHtml -> Text Source #
We can now wrap our stack machine definition from renderStackMachine
in a
nicer interface; on successful conversion, we run the builder to give us the
final Text
, and before we do that we check that the style stack is empty
(i.e. there are no unmatched style applications) after the machine is run.
This function does only a bit of plumbing around renderStackMachine
, and is
the main API function of a stack machine renderer. The tree renderer
equivalent to this is
render
.