module Futhark.Doc.Html
  ( primTypeHtml
  , prettyU
  , renderName
  , joinBy
  , commas
  , brackets
  , braces
  , parens
  , pipes
  )
where

import Language.Futhark
import Futhark.Util.Pretty (Doc,ppr)

import qualified Text.PrettyPrint.Mainland as PP (pretty)
import Text.Blaze.Html5 (toHtml, Html)

docToHtml :: Doc -> Html
docToHtml :: Doc -> Html
docToHtml = String -> Html
forall a. ToMarkup a => a -> Html
toHtml (String -> Html) -> (Doc -> String) -> Doc -> Html
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Doc -> String
PP.pretty Int
80

primTypeHtml :: PrimType -> Html
primTypeHtml :: PrimType -> Html
primTypeHtml = Doc -> Html
docToHtml (Doc -> Html) -> (PrimType -> Doc) -> PrimType -> Html
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PrimType -> Doc
forall a. Pretty a => a -> Doc
ppr

prettyU :: Uniqueness -> Html
prettyU :: Uniqueness -> Html
prettyU = Doc -> Html
docToHtml (Doc -> Html) -> (Uniqueness -> Doc) -> Uniqueness -> Html
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Uniqueness -> Doc
forall a. Pretty a => a -> Doc
ppr

renderName :: Name -> Html
renderName :: Name -> Html
renderName Name
name = Doc -> Html
docToHtml (Name -> Doc
forall a. Pretty a => a -> Doc
ppr Name
name)

joinBy :: Html -> [Html] -> Html
joinBy :: Html -> [Html] -> Html
joinBy Html
_ [] = Html
forall a. Monoid a => a
mempty
joinBy Html
_ [Html
x] = Html
x
joinBy Html
sep (Html
x:[Html]
xs) = Html
x Html -> Html -> Html
forall a. Semigroup a => a -> a -> a
<> (Html -> Html) -> [Html] -> Html
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap (Html
sep Html -> Html -> Html
forall a. Semigroup a => a -> a -> a
<>) [Html]
xs

commas :: [Html] -> Html
commas :: [Html] -> Html
commas = Html -> [Html] -> Html
joinBy (String -> Html
forall a. ToMarkup a => a -> Html
toHtml String
", ")

parens :: Html -> Html
parens :: Html -> Html
parens Html
x = String -> Html
forall a. ToMarkup a => a -> Html
toHtml String
"(" Html -> Html -> Html
forall a. Semigroup a => a -> a -> a
<> Html
x Html -> Html -> Html
forall a. Semigroup a => a -> a -> a
<> String -> Html
forall a. ToMarkup a => a -> Html
toHtml String
")"

braces :: Html -> Html
braces :: Html -> Html
braces Html
x = String -> Html
forall a. ToMarkup a => a -> Html
toHtml String
"{" Html -> Html -> Html
forall a. Semigroup a => a -> a -> a
<> Html
x Html -> Html -> Html
forall a. Semigroup a => a -> a -> a
<> String -> Html
forall a. ToMarkup a => a -> Html
toHtml String
"}"
brackets :: Html -> Html
brackets :: Html -> Html
brackets Html
x = String -> Html
forall a. ToMarkup a => a -> Html
toHtml String
"[" Html -> Html -> Html
forall a. Semigroup a => a -> a -> a
<> Html
x Html -> Html -> Html
forall a. Semigroup a => a -> a -> a
<> String -> Html
forall a. ToMarkup a => a -> Html
toHtml String
"]"

pipes :: [Html] -> Html
pipes :: [Html] -> Html
pipes = Html -> [Html] -> Html
joinBy (String -> Html
forall a. ToMarkup a => a -> Html
toHtml String
" | ")