GenericPretty-1.1.6: Text/PrettyPrint/MyPretty.hs
{-| MyPretty is a library that can be used in conjuncture with "Text.PrettyPrint.GenericPretty".
The Pretty library(<http://www.haskell.org/ghc/docs/7.0.4/html/libraries/ghc-7.0.4/Pretty.html>)
plans to incorporate a 'Style' datatype to control details
of printing (such as line length). The library MyPretty is provided as a
thin wrapper around the Pretty library, to support 'Style' related features.
Once the Pretty library supports 'Style', MyPretty will become obsolete and
be replaced by Pretty.
This library can be imported if the user wants to make custom pretty printing definitions for
his types or define a custom printing 'Style'.
The syntax used for defining custom documents is that of Pretty and Text.PrettyPrint.HughesPJ.
For an example of a custom definition for a data type and usage of a custom Style
see the README file and the haskell source files under TestSuite, both included in the package.
-}
module Text.PrettyPrint.MyPretty(
module Pretty,
Style(..), renderStyle, style
)where
import Pretty
import FastString
-- | A rendering style
data Style
= Style { mode :: Mode -- ^ The rendering mode
, lineLength :: Int -- ^ Length of line, in chars
, ribbonsPerLine :: Float -- ^ Ratio of ribbon length to line length
}
-- | Render a document using a particular style.
renderStyle :: Style -> Doc -> String
renderStyle s = fullRender (mode s) (lineLength s) (ribbonsPerLine s) outputStr ""
where
outputStr :: TextDetails -> String -> String
outputStr td str = decode td ++ str
where
decode :: TextDetails -> String
decode (PStr s1) = unpackFS s1
decode (LStr s1 _) = unpackLitString s1
decode (Chr c) = [c]
decode (Str s) = s
-- | The default 'Style' used for "Text.PrettyPrint.GenericPretty"
-- (mode=PageMode, lineLength=80, ribbonsPerLine=1.5)
style :: Style
style = Style {mode = PageMode, lineLength = 80, ribbonsPerLine = 1.5}