module HTMLTokenizer.Rendering.Text.Builder
(
token,
attribute,
name,
)
where
import HTMLTokenizer.Prelude hiding (takeWhile)
import HTMLTokenizer.Data.Types
import Text.Builder
import qualified Data.Text as D
import qualified HTMLEntities.Text as B
encodedText :: Text -> Builder
encodedText =
text . B.text
name :: Name -> Builder
name =
\ case
UnprefixedName localName ->
encodedText localName
PrefixedName space localName ->
encodedText space <> char ':' <> encodedText localName
attribute :: Attribute -> Builder
attribute (Attribute attributeName content) =
if D.null content
then name attributeName
else name attributeName <> text "=\"" <> encodedText content <> char '"'
token :: Token -> Builder
token =
\ case
OpeningTagToken tagName attrVec closed ->
char '<' <> name tagName <> attrs <> closing
where
attrs =
foldMap (\ x -> char ' ' <> attribute x) attrVec
closing =
if closed
then text "/>"
else char '>'
ClosingTagToken tagName ->
text "" <> name tagName <> char '>'
TextToken theText ->
encodedText theText
CommentToken commentText ->
text ""
DoctypeToken doctypeText ->
text "
(if D.null doctypeText then mempty else char ' ' <> encodedText doctypeText) <>
char '>'