{-| MyPretty is a library that can be used in conjuncture with "Text.PrettyPrint.GenericPretty". The Pretty library() 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}