{-# 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 ->
forall a. Maybe a
Nothing
| Bool
otherwise ->
forall a. a -> Maybe a
Just HTMLNode
x
HTMLElement Text
n HTMLNamespace
s [HTMLAttr]
a [HTMLNode]
c
| Text
n forall a. Eq a => a -> a -> Bool
== Text
"pre" Bool -> Bool -> Bool
|| Text
n forall a. Eq a => a -> a -> Bool
== Text
"code" Bool -> Bool -> Bool
|| Text
n forall a. Eq a => a -> a -> Bool
== Text
"samp" Bool -> Bool -> Bool
|| Text
n forall a. Eq a => a -> a -> Bool
== Text
"kbd" ->
forall a. a -> Maybe a
Just HTMLNode
x
| Bool
otherwise ->
forall a. a -> Maybe a
Just forall a b. (a -> b) -> a -> b
$ Text -> HTMLNamespace -> [HTMLAttr] -> [HTMLNode] -> HTMLNode
HTMLElement Text
n HTMLNamespace
s [HTMLAttr]
a forall a b. (a -> b) -> a -> b
$ forall a b. (a -> Maybe b) -> [a] -> [b]
mapMaybe HTMLNode -> Maybe HTMLNode
go [HTMLNode]
c
HTMLNode
_otherwise ->
forall a. Maybe a
Nothing