{-# LANGUAGE OverloadedStrings #-} module Drasil.Printers.Common ( wrap, paren, brak, brace, pipes, dpipes, angbrac, dollar, quote, dquote, ddollars, underscores, asterisks, dasterisks, fSlashes, CanCarryText(..) ) where import Data.Text (Text) import Data.Text qualified as T import Prettyprinter qualified as PNew import Text.PrettyPrint qualified as PLegacy class CanCarryText t where holdText :: Text -> t instance CanCarryText String where holdText :: Text -> String holdText = Text -> String T.unpack {-# INLINE holdText #-} instance CanCarryText Text where holdText :: Text -> Text holdText = Text -> Text forall a. a -> a id {-# INLINE holdText #-} instance CanCarryText PLegacy.Doc where holdText :: Text -> Doc holdText = String -> Doc PLegacy.text (String -> Doc) -> (Text -> String) -> Text -> Doc forall b c a. (b -> c) -> (a -> b) -> a -> c . Text -> String T.unpack {-# INLINE holdText #-} instance CanCarryText (PNew.Doc ann) where holdText :: Text -> Doc ann holdText = Text -> Doc ann forall ann. Text -> Doc ann forall a ann. Pretty a => a -> Doc ann PNew.pretty {-# INLINE holdText #-} type CanTextWrap dt = (Semigroup dt, CanCarryText dt) wrap :: (CanTextWrap a) => Text -> Text -> a -> a wrap :: forall a. CanTextWrap a => Text -> Text -> a -> a wrap Text l Text r a e = Text -> a forall t. CanCarryText t => Text -> t holdText Text l a -> a -> a forall a. Semigroup a => a -> a -> a <> a e a -> a -> a forall a. Semigroup a => a -> a -> a <> Text -> a forall t. CanCarryText t => Text -> t holdText Text r {-# INLINE wrap #-} paren, brak, brace, pipes, dpipes, angbrac, dollar, quote, dquote, ddollars, underscores, asterisks, dasterisks, fSlashes :: (CanTextWrap a) => a -> a paren :: forall a. CanTextWrap a => a -> a paren = Text -> Text -> a -> a forall a. CanTextWrap a => Text -> Text -> a -> a wrap Text "(" Text ")" brak :: forall a. CanTextWrap a => a -> a brak = Text -> Text -> a -> a forall a. CanTextWrap a => Text -> Text -> a -> a wrap Text "[" Text "]" brace :: forall a. CanTextWrap a => a -> a brace = Text -> Text -> a -> a forall a. CanTextWrap a => Text -> Text -> a -> a wrap Text "{" Text "}" pipes :: forall a. CanTextWrap a => a -> a pipes = Text -> Text -> a -> a forall a. CanTextWrap a => Text -> Text -> a -> a wrap Text "|" Text "|" dpipes :: forall a. CanTextWrap a => a -> a dpipes = a -> a forall a. CanTextWrap a => a -> a pipes (a -> a) -> (a -> a) -> a -> a forall b c a. (b -> c) -> (a -> b) -> a -> c . a -> a forall a. CanTextWrap a => a -> a pipes angbrac :: forall a. CanTextWrap a => a -> a angbrac = Text -> Text -> a -> a forall a. CanTextWrap a => Text -> Text -> a -> a wrap Text "<" Text ">" dollar :: forall a. CanTextWrap a => a -> a dollar = Text -> Text -> a -> a forall a. CanTextWrap a => Text -> Text -> a -> a wrap Text "$" Text "$" quote :: forall a. CanTextWrap a => a -> a quote = Text -> Text -> a -> a forall a. CanTextWrap a => Text -> Text -> a -> a wrap Text "'" Text "'" dquote :: forall a. CanTextWrap a => a -> a dquote = Text -> Text -> a -> a forall a. CanTextWrap a => Text -> Text -> a -> a wrap Text "\"" Text "\"" ddollars :: forall a. CanTextWrap a => a -> a ddollars = a -> a forall a. CanTextWrap a => a -> a dollar (a -> a) -> (a -> a) -> a -> a forall b c a. (b -> c) -> (a -> b) -> a -> c . a -> a forall a. CanTextWrap a => a -> a dollar underscores :: forall a. CanTextWrap a => a -> a underscores = Text -> Text -> a -> a forall a. CanTextWrap a => Text -> Text -> a -> a wrap Text "_" Text "_" asterisks :: forall a. CanTextWrap a => a -> a asterisks = Text -> Text -> a -> a forall a. CanTextWrap a => Text -> Text -> a -> a wrap Text "*" Text "*" dasterisks :: forall a. CanTextWrap a => a -> a dasterisks = a -> a forall a. CanTextWrap a => a -> a asterisks (a -> a) -> (a -> a) -> a -> a forall b c a. (b -> c) -> (a -> b) -> a -> c . a -> a forall a. CanTextWrap a => a -> a asterisks fSlashes :: forall a. CanTextWrap a => a -> a fSlashes = Text -> Text -> a -> a forall a. CanTextWrap a => Text -> Text -> a -> a wrap Text "/" Text "/"