bbcode-0.1.0.0: lib/Text/BBCode/Internal/Pretty.hs
{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-}
{-# HLINT ignore "Use record patterns" #-}
module Text.BBCode.Internal.Pretty
( pretty
)
where
import Text.BBCode.Internal.Helper
{- ORMOLU_DISABLE -}
{- | Serialize BBCode AST
Should be reversible by parsing, but it is not guaranteed
Can cause error at runtime if unrepresentable element is passed, e.g.
>>> pretty $ ElSimple HR "abc"
Prelude.undefined
-}
pretty :: BBCode -> Text
pretty (ElText x) = x
pretty (ElDocument xs) = mconcat $ fmap pretty xs
pretty (ElVoid HR) = opening HR <> "\n"
pretty (ElVoid BR) = opening BR <> "\n"
pretty (ElVoid Clear) = opening Clear <> "\n"
pretty (ElVoid ListElement) = "\n" <> opening ListElement
pretty (ElVoid _) = undefined
pretty (ElSimple Bold bb) = wrap Bold $ pretty bb
pretty (ElSimple Italic bb) = wrap Italic $ pretty bb
pretty (ElSimple Underline bb) = wrap Underline $ pretty bb
pretty (ElSimple Strikethrough bb) = wrap Strikethrough $ pretty bb
pretty (ElSimple Indent bb) = wrap Indent $ pretty bb
pretty (ElSimple NFO bb) = wrap NFO $ pretty bb
pretty (ElSimple Oneline bb) = wrap Oneline $ pretty bb
pretty (ElSimple Code bb) = wrap Code $ pretty bb
pretty (ElSimple Preformatted bb) = wrap Preformatted $ pretty bb
pretty (ElSimple Box bb) = wrap Box $ pretty bb
pretty (ElSimple Image bb) = wrap Image $ pretty bb
pretty (ElSimple Quote bb) = wrap Quote . surround "\n" $ pretty bb
pretty (ElSimple Spoiler bb) = wrap Spoiler . surround "\n" $ pretty bb
pretty (ElSimple List (ElDocument bb)) =
wrap List
. (<> "\n")
. foldl (<>) ""
$ fmap pretty bb
pretty (ElSimple _ _) = undefined
pretty (ElArg Box arg bb) = wrapArg Box arg $ pretty bb
pretty (ElArg Image arg bb) = wrapArg Image arg $ pretty bb
pretty (ElArg Quote arg bb) = wrapArg Quote (show' arg) $ pretty bb
pretty (ElArg Spoiler arg bb) = wrapArg Spoiler (show' arg) $ pretty bb
pretty (ElArg List arg (ElDocument bb)) =
wrapArg List arg
. (<> "\n")
. foldl (<>) ""
$ fmap pretty bb
pretty (ElArg Color arg bb) = wrapArg Color arg $ pretty bb
pretty (ElArg URL arg bb) = wrapArg URL arg $ pretty bb
pretty (ElArg Size arg bb) = wrapArg Size arg $ pretty bb
pretty (ElArg Align arg bb) = wrapArg Align arg $ pretty bb
pretty (ElArg Font arg bb) = wrapArg Font arg $ pretty bb
pretty (ElArg _ _ _) = undefined
{-# INLINEANBLE pretty #-}
{- ORMOLU_ENABLE -}