{-# OPTIONS_GHC -Wno-missing-signatures #-} {-# LANGUAGE LambdaCase #-} module Language.Cimple.PrettyCommon where import Data.Text (Text) import qualified Data.Text as Text import qualified Data.Text.Lazy as TL import Language.Cimple (AssignOp (..), BinaryOp (..), Comment, CommentF (..), CommentStyle (..), Lexeme (..), LexemeClass (..), Node, NodeF (..), Nullability (..), Scope (..), UnaryOp (..), lexemeLine, lexemeText) import Language.Cimple.PrettyColor (dullcyan, dullgreen, dullred, dullyellow) import Prettyprinter import Prettyprinter.Render.Terminal (AnsiStyle) import qualified Prettyprinter.Render.Terminal as Term kwBitwise :: Doc AnsiStyle kwBitwise = Doc AnsiStyle -> Doc AnsiStyle dullgreen (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "bitwise" kwBreak :: Doc AnsiStyle kwBreak = Doc AnsiStyle -> Doc AnsiStyle dullred (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "break" kwCase :: Doc AnsiStyle kwCase = Doc AnsiStyle -> Doc AnsiStyle dullred (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "case" kwConst :: Doc AnsiStyle kwConst = Doc AnsiStyle -> Doc AnsiStyle dullgreen (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "const" kwContinue :: Doc AnsiStyle kwContinue = Doc AnsiStyle -> Doc AnsiStyle dullred (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "continue" kwDefault :: Doc AnsiStyle kwDefault = Doc AnsiStyle -> Doc AnsiStyle dullred (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "default" kwDo :: Doc AnsiStyle kwDo = Doc AnsiStyle -> Doc AnsiStyle dullred (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "do" kwElse :: Doc AnsiStyle kwElse = Doc AnsiStyle -> Doc AnsiStyle dullred (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "else" kwEnum :: Doc AnsiStyle kwEnum = Doc AnsiStyle -> Doc AnsiStyle dullgreen (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "enum" kwExtern :: Doc AnsiStyle kwExtern = Doc AnsiStyle -> Doc AnsiStyle dullgreen (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "extern" kwFor :: Doc AnsiStyle kwFor = Doc AnsiStyle -> Doc AnsiStyle dullred (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "for" kwForce :: Doc AnsiStyle kwForce = Doc AnsiStyle -> Doc AnsiStyle dullgreen (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "force" kwGnuPrintf :: Doc AnsiStyle kwGnuPrintf = Doc AnsiStyle -> Doc AnsiStyle dullgreen (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "GNU_PRINTF" kwGoto :: Doc AnsiStyle kwGoto = Doc AnsiStyle -> Doc AnsiStyle dullred (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "goto" kwIf :: Doc AnsiStyle kwIf = Doc AnsiStyle -> Doc AnsiStyle dullred (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "if" kwNonnull :: Doc AnsiStyle kwNonnull = Doc AnsiStyle -> Doc AnsiStyle dullgreen (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "_Nonnull" kwNullable :: Doc AnsiStyle kwNullable = Doc AnsiStyle -> Doc AnsiStyle dullgreen (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "_Nullable" kwOwner :: Doc AnsiStyle kwOwner = Doc AnsiStyle -> Doc AnsiStyle dullgreen (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "owner" kwReturn :: Doc AnsiStyle kwReturn = Doc AnsiStyle -> Doc AnsiStyle dullred (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "return" kwSizeof :: Doc AnsiStyle kwSizeof = Doc AnsiStyle -> Doc AnsiStyle dullred (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "sizeof" kwStaticAssert :: Doc AnsiStyle kwStaticAssert = Doc AnsiStyle -> Doc AnsiStyle dullred (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "static_assert" kwStatic :: Doc AnsiStyle kwStatic = Doc AnsiStyle -> Doc AnsiStyle dullgreen (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "static" kwStruct :: Doc AnsiStyle kwStruct = Doc AnsiStyle -> Doc AnsiStyle dullgreen (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "struct" kwSwitch :: Doc AnsiStyle kwSwitch = Doc AnsiStyle -> Doc AnsiStyle dullred (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "switch" kwTypedef :: Doc AnsiStyle kwTypedef = Doc AnsiStyle -> Doc AnsiStyle dullgreen (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "typedef" kwUnion :: Doc AnsiStyle kwUnion = Doc AnsiStyle -> Doc AnsiStyle dullgreen (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "union" kwWhile :: Doc AnsiStyle kwWhile = Doc AnsiStyle -> Doc AnsiStyle dullred (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "while" kwDocAttention :: Doc AnsiStyle kwDocAttention = Doc AnsiStyle -> Doc AnsiStyle dullcyan (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "@attention" kwDocBrief :: Doc AnsiStyle kwDocBrief = Doc AnsiStyle -> Doc AnsiStyle dullcyan (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "@brief" kwDocDeprecated :: Doc AnsiStyle kwDocDeprecated = Doc AnsiStyle -> Doc AnsiStyle dullcyan (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "@deprecated" kwDocFile :: Doc AnsiStyle kwDocFile = Doc AnsiStyle -> Doc AnsiStyle dullcyan (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "@file" kwDocExtends :: Doc AnsiStyle kwDocExtends = Doc AnsiStyle -> Doc AnsiStyle dullcyan (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "@extends" kwDocImplements :: Doc AnsiStyle kwDocImplements = Doc AnsiStyle -> Doc AnsiStyle dullcyan (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "@implements" kwDocParam :: Doc AnsiStyle kwDocParam = Doc AnsiStyle -> Doc AnsiStyle dullcyan (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "@param" kwDocPrivate :: Doc AnsiStyle kwDocPrivate = Doc AnsiStyle -> Doc AnsiStyle dullcyan (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "@private" kwDocRef :: Doc AnsiStyle kwDocRef = Doc AnsiStyle -> Doc AnsiStyle dullcyan (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "@ref" kwDocReturn :: Doc AnsiStyle kwDocReturn = Doc AnsiStyle -> Doc AnsiStyle dullcyan (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "@return" kwDocRetval :: Doc AnsiStyle kwDocRetval = Doc AnsiStyle -> Doc AnsiStyle dullcyan (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "@retval" kwDocP :: Doc AnsiStyle kwDocP = Doc AnsiStyle -> Doc AnsiStyle dullcyan (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "@p" kwDocSee :: Doc AnsiStyle kwDocSee = Doc AnsiStyle -> Doc AnsiStyle dullcyan (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "@see" kwDocSecurityRank :: Doc AnsiStyle kwDocSecurityRank = Doc AnsiStyle -> Doc AnsiStyle dullcyan (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "@security_rank" kwDocNote :: Doc AnsiStyle kwDocNote = Doc AnsiStyle -> Doc AnsiStyle dullcyan (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "@note" kwDocSection :: Doc AnsiStyle kwDocSection = Doc AnsiStyle -> Doc AnsiStyle dullcyan (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "@section" kwDocSubsection :: Doc AnsiStyle kwDocSubsection = Doc AnsiStyle -> Doc AnsiStyle dullcyan (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "@subsection" kwDocCode :: Doc AnsiStyle kwDocCode = Doc AnsiStyle -> Doc AnsiStyle dullcyan (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "@code" kwDocEndCode :: Doc AnsiStyle kwDocEndCode = Doc AnsiStyle -> Doc AnsiStyle dullcyan (Doc AnsiStyle -> Doc AnsiStyle) -> Doc AnsiStyle -> Doc AnsiStyle forall a b. (a -> b) -> a -> b $ [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "@endcode" ppAssignOp :: AssignOp -> Doc AnsiStyle ppAssignOp :: AssignOp -> Doc AnsiStyle ppAssignOp = \case AssignOp AopEq -> Doc AnsiStyle forall ann. Doc ann equals AssignOp AopMul -> [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "*=" AssignOp AopDiv -> [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "/=" AssignOp AopPlus -> [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "+=" AssignOp AopMinus -> [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "-=" AssignOp AopBitAnd -> [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "&=" AssignOp AopBitOr -> [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "|=" AssignOp AopBitXor -> [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "^=" AssignOp AopMod -> [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "%=" AssignOp AopLsh -> [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] ">>=" AssignOp AopRsh -> [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "<<=" ppBinaryOp :: BinaryOp -> Doc AnsiStyle ppBinaryOp :: BinaryOp -> Doc AnsiStyle ppBinaryOp = \case BinaryOp BopNe -> [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "!=" BinaryOp BopEq -> [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "==" BinaryOp BopOr -> [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "||" BinaryOp BopBitXor -> Char -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty Char '^' BinaryOp BopBitOr -> Char -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty Char '|' BinaryOp BopAnd -> [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "&&" BinaryOp BopBitAnd -> Char -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty Char '&' BinaryOp BopDiv -> Char -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty Char '/' BinaryOp BopMul -> Char -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty Char '*' BinaryOp BopMod -> Char -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty Char '%' BinaryOp BopPlus -> Char -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty Char '+' BinaryOp BopMinus -> Char -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty Char '-' BinaryOp BopLt -> Char -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty Char '<' BinaryOp BopLe -> [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "<=" BinaryOp BopLsh -> [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "<<" BinaryOp BopGt -> Char -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty Char '>' BinaryOp BopGe -> [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] ">=" BinaryOp BopRsh -> [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] ">>" ppUnaryOp :: UnaryOp -> Doc AnsiStyle ppUnaryOp :: UnaryOp -> Doc AnsiStyle ppUnaryOp = \case UnaryOp UopNot -> Char -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty Char '!' UnaryOp UopNeg -> Char -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty Char '~' UnaryOp UopMinus -> Char -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty Char '-' UnaryOp UopAddress -> Char -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty Char '&' UnaryOp UopDeref -> Char -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty Char '*' UnaryOp UopIncr -> [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "++" UnaryOp UopDecr -> [Char] -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty [Char] "--" cmtPrefix :: Doc AnsiStyle cmtPrefix :: Doc AnsiStyle cmtPrefix = Doc AnsiStyle -> Doc AnsiStyle dullyellow (Char -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty Char '*') ppLexeme :: Pretty a => Lexeme a -> Doc AnsiStyle ppLexeme :: Lexeme a -> Doc AnsiStyle ppLexeme = a -> Doc AnsiStyle forall a ann. Pretty a => a -> Doc ann pretty (a -> Doc AnsiStyle) -> (Lexeme a -> a) -> Lexeme a -> Doc AnsiStyle forall b c a. (b -> c) -> (a -> b) -> a -> c . Lexeme a -> a forall text. Lexeme text -> text lexemeText commaSep :: [Doc AnsiStyle] -> Doc AnsiStyle commaSep :: [Doc AnsiStyle] -> Doc AnsiStyle commaSep = [Doc AnsiStyle] -> Doc AnsiStyle forall ann. [Doc ann] -> Doc ann hsep ([Doc AnsiStyle] -> Doc AnsiStyle) -> ([Doc AnsiStyle] -> [Doc AnsiStyle]) -> [Doc AnsiStyle] -> Doc AnsiStyle forall b c a. (b -> c) -> (a -> b) -> a -> c . Doc AnsiStyle -> [Doc AnsiStyle] -> [Doc AnsiStyle] forall ann. Doc ann -> [Doc ann] -> [Doc ann] punctuate Doc AnsiStyle forall ann. Doc ann comma plain :: Doc ann -> Doc xxx plain :: Doc ann -> Doc xxx plain = Doc ann -> Doc xxx forall ann xxx. Doc ann -> Doc xxx unAnnotate renderSmart :: Float -> Int -> Doc AnsiStyle -> SimpleDocStream AnsiStyle renderSmart :: Float -> Int -> Doc AnsiStyle -> SimpleDocStream AnsiStyle renderSmart Float ribbonFraction Int widthPerLine = LayoutOptions -> Doc AnsiStyle -> SimpleDocStream AnsiStyle forall ann. LayoutOptions -> Doc ann -> SimpleDocStream ann layoutSmart LayoutOptions :: PageWidth -> LayoutOptions LayoutOptions { layoutPageWidth :: PageWidth layoutPageWidth = Int -> Double -> PageWidth AvailablePerLine Int widthPerLine (Float -> Double forall a b. (Real a, Fractional b) => a -> b realToFrac Float ribbonFraction) } renderS :: Doc AnsiStyle -> String renderS :: Doc AnsiStyle -> [Char] renderS = Text -> [Char] Text.unpack (Text -> [Char]) -> (Doc AnsiStyle -> Text) -> Doc AnsiStyle -> [Char] forall b c a. (b -> c) -> (a -> b) -> a -> c . Doc AnsiStyle -> Text render render :: Doc AnsiStyle -> Text render :: Doc AnsiStyle -> Text render = Text -> Text TL.toStrict (Text -> Text) -> (Doc AnsiStyle -> Text) -> Doc AnsiStyle -> Text forall b c a. (b -> c) -> (a -> b) -> a -> c . SimpleDocStream AnsiStyle -> Text Term.renderLazy (SimpleDocStream AnsiStyle -> Text) -> (Doc AnsiStyle -> SimpleDocStream AnsiStyle) -> Doc AnsiStyle -> Text forall b c a. (b -> c) -> (a -> b) -> a -> c . Float -> Int -> Doc AnsiStyle -> SimpleDocStream AnsiStyle renderSmart Float 1 Int 120