{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiWayIf #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Zenacy.HTML.Internal.Filter
( htmlSpaceRemove
) where
import Zenacy.HTML.Internal.Core
import Zenacy.HTML.Internal.HTML
import Zenacy.HTML.Internal.Oper
import Data.Maybe
( mapMaybe
)
htmlSpaceRemove :: HTMLNode -> Maybe HTMLNode
htmlSpaceRemove :: HTMLNode -> Maybe HTMLNode
htmlSpaceRemove = HTMLNode -> Maybe HTMLNode
go
where
go :: HTMLNode -> Maybe HTMLNode
go HTMLNode
x = case HTMLNode
x of
HTMLText {}
| HTMLNode -> Bool
htmlTextSpace HTMLNode
x ->
Maybe HTMLNode
forall a. Maybe a
Nothing
| Bool
otherwise ->
HTMLNode -> Maybe HTMLNode
forall a. a -> Maybe a
Just HTMLNode
x
HTMLElement Text
n HTMLNamespace
s [HTMLAttr]
a [HTMLNode]
c
| Text
n Text -> Text -> Bool
forall a. Eq a => a -> a -> Bool
== Text
"pre" Bool -> Bool -> Bool
|| Text
n Text -> Text -> Bool
forall a. Eq a => a -> a -> Bool
== Text
"code" Bool -> Bool -> Bool
|| Text
n Text -> Text -> Bool
forall a. Eq a => a -> a -> Bool
== Text
"samp" Bool -> Bool -> Bool
|| Text
n Text -> Text -> Bool
forall a. Eq a => a -> a -> Bool
== Text
"kbd" ->
HTMLNode -> Maybe HTMLNode
forall a. a -> Maybe a
Just HTMLNode
x
| Bool
otherwise ->
HTMLNode -> Maybe HTMLNode
forall a. a -> Maybe a
Just (HTMLNode -> Maybe HTMLNode) -> HTMLNode -> Maybe HTMLNode
forall a b. (a -> b) -> a -> b
$ Text -> HTMLNamespace -> [HTMLAttr] -> [HTMLNode] -> HTMLNode
HTMLElement Text
n HTMLNamespace
s [HTMLAttr]
a ([HTMLNode] -> HTMLNode) -> [HTMLNode] -> HTMLNode
forall a b. (a -> b) -> a -> b
$ (HTMLNode -> Maybe HTMLNode) -> [HTMLNode] -> [HTMLNode]
forall a b. (a -> Maybe b) -> [a] -> [b]
mapMaybe HTMLNode -> Maybe HTMLNode
go [HTMLNode]
c
HTMLNode
_otherwise ->
Maybe HTMLNode
forall a. Maybe a
Nothing