module Language.Drasil.Printing.Helpers where
import Prelude hiding ((<>))
import Text.PrettyPrint (text, Doc, (<>))
import Data.Char (toUpper, toLower)
bslash,dbs,assign,eq,lt,gt,leq,geq,dlr,ast,pls,hat,slash,hyph,tab,unders :: Doc
bslash :: Doc
bslash = String -> Doc
text "\\"
dbs :: Doc
dbs = String -> Doc
text "\\\\"
assign :: Doc
assign = String -> Doc
text "="
eq :: Doc
eq = String -> Doc
text "=="
lt :: Doc
lt = String -> Doc
text "<"
gt :: Doc
gt = String -> Doc
text ">"
leq :: Doc
leq = String -> Doc
text "<="
geq :: Doc
geq = String -> Doc
text ">="
dlr :: Doc
dlr = String -> Doc
text "$"
ast :: Doc
ast = String -> Doc
text "*"
pls :: Doc
pls = String -> Doc
text "+"
hat :: Doc
hat = String -> Doc
text "^"
slash :: Doc
slash = String -> Doc
text "/"
hyph :: Doc
hyph = String -> Doc
text "-"
tab :: Doc
tab = String -> Doc
text "\t"
unders :: Doc
unders = String -> Doc
text "_"
sq,br :: String -> Doc
sq :: String -> Doc
sq t :: String
t = String -> Doc
text (String -> Doc) -> String -> Doc
forall a b. (a -> b) -> a -> b
$ "[" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
t String -> String -> String
forall a. [a] -> [a] -> [a]
++ "]"
br :: String -> Doc
br t :: String
t = String -> Doc
text (String -> Doc) -> String -> Doc
forall a b. (a -> b) -> a -> b
$ "{" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
t String -> String -> String
forall a. [a] -> [a] -> [a]
++ "}"
dot, comm :: Doc -> Doc
dot :: Doc -> Doc
dot = (Doc -> Doc -> Doc
<> String -> Doc
text ".")
comm :: Doc -> Doc
comm = (Doc -> Doc -> Doc
<> String -> Doc
text ",")
dollarDoc :: Doc -> Doc
dollarDoc :: Doc -> Doc
dollarDoc x :: Doc
x = Doc
dlr Doc -> Doc -> Doc
<> Doc
x Doc -> Doc -> Doc
<> Doc
dlr
paren, brace, dollar, sqbrac, angbrac :: String -> String
paren :: String -> String
paren x :: String
x = "(" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
x String -> String -> String
forall a. [a] -> [a] -> [a]
++ ")"
brace :: String -> String
brace x :: String
x = "{" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
x String -> String -> String
forall a. [a] -> [a] -> [a]
++ "}"
dollar :: String -> String
dollar x :: String
x = "$" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
x String -> String -> String
forall a. [a] -> [a] -> [a]
++ "$"
sqbrac :: String -> String
sqbrac x :: String
x = "[" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
x String -> String -> String
forall a. [a] -> [a] -> [a]
++ "]"
angbrac :: String -> String
angbrac x :: String
x = "<" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
x String -> String -> String
forall a. [a] -> [a] -> [a]
++ ">"
upcase, lowcase :: String -> Doc
upcase :: String -> Doc
upcase [] = String -> Doc
text []
upcase (c :: Char
c:cs :: String
cs) = String -> Doc
text (String -> Doc) -> String -> Doc
forall a b. (a -> b) -> a -> b
$ Char -> Char
toUpper Char
cChar -> String -> String
forall a. a -> [a] -> [a]
:String
cs
lowcase :: String -> Doc
lowcase [] = String -> Doc
text []
lowcase (c :: Char
c:cs :: String
cs) = String -> Doc
text (String -> Doc) -> String -> Doc
forall a b. (a -> b) -> a -> b
$ Char -> Char
toLower Char
cChar -> String -> String
forall a. a -> [a] -> [a]
:String
cs
sufx :: Int -> String
sufx :: Int -> String
sufx 1 = "st"
sufx 2 = "nd"
sufx 3 = "rd"
sufx _ = "th"
sufxer :: Int -> String
sufxer :: Int -> String
sufxer = (String -> String -> String
forall a. [a] -> [a] -> [a]
++ ".") (String -> String) -> (Int -> String) -> Int -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> String
sufx (Int -> String) -> (Int -> Int) -> Int -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod 10