{-# OPTIONS_GHC -fno-warn-orphans #-}

-- | Compatibility shims for mainland-pretty; the prettyprinting
-- library used by language-c-quote.
module Futhark.CodeGen.Backends.GenericC.Pretty
  ( expText,
    definitionsText,
    typeText,
    idText,
    funcText,
    funcsText,
  )
where

import Data.Text qualified as T
import Language.C.Pretty ()
import Language.C.Syntax qualified as C
import Text.PrettyPrint.Mainland qualified as MPP
import Text.PrettyPrint.Mainland.Class qualified as MPP

expText :: C.Exp -> T.Text
expText :: Exp -> Text
expText = String -> Text
T.pack forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Doc -> String
MPP.pretty Int
8000 forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Pretty a => a -> Doc
MPP.ppr

definitionsText :: [C.Definition] -> T.Text
definitionsText :: [Definition] -> Text
definitionsText = [Text] -> Text
T.unlines forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a -> b) -> [a] -> [b]
map (String -> Text
T.pack forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Doc -> String
MPP.pretty Int
8000 forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Pretty a => a -> Doc
MPP.ppr)

typeText :: C.Type -> T.Text
typeText :: Type -> Text
typeText = String -> Text
T.pack forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Doc -> String
MPP.pretty Int
8000 forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Pretty a => a -> Doc
MPP.ppr

idText :: C.Id -> T.Text
idText :: Id -> Text
idText = String -> Text
T.pack forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Doc -> String
MPP.pretty Int
8000 forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Pretty a => a -> Doc
MPP.ppr

funcText :: C.Func -> T.Text
funcText :: Func -> Text
funcText = String -> Text
T.pack forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Doc -> String
MPP.pretty Int
8000 forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Pretty a => a -> Doc
MPP.ppr

funcsText :: [C.Func] -> T.Text
funcsText :: [Func] -> Text
funcsText = [Text] -> Text
T.unlines forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a -> b) -> [a] -> [b]
map Func -> Text
funcText