module Futhark.Doc.Html
( primTypeHtml
, prettyTypeName
, prettyU
, renderName
, joinBy
, commas
, brackets
, braces
, parens
)
where
import Data.Semigroup ((<>))
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 = toHtml . PP.pretty 80
primTypeHtml :: PrimType -> Html
primTypeHtml = docToHtml . ppr
prettyTypeName :: TypeName -> Html
prettyTypeName et = (docToHtml . ppr) (baseName <$> qualNameFromTypeName et)
prettyU :: Uniqueness -> Html
prettyU = docToHtml . ppr
renderName :: Name -> Html
renderName name = docToHtml (ppr name)
joinBy :: Html -> [Html] -> Html
joinBy _ [] = mempty
joinBy _ [x] = x
joinBy sep (x:xs) = x <> foldMap (sep <>) xs
commas :: [Html] -> Html
commas = joinBy (toHtml ", ")
parens :: Html -> Html
parens x = toHtml "(" <> x <> toHtml ")"
braces :: Html -> Html
braces x = toHtml "{" <> x <> toHtml "}"
brackets :: Html -> Html
brackets x = toHtml "[" <> x <> toHtml "]"