module Data.Microformats2.Parser.UnsafeUtil (
module Data.Microformats2.Parser.UnsafeUtil
, module X
) where
import Prelude.Compat
import Data.Aeson
import Data.Aeson.Types as X
import Data.Default as X
import Data.Maybe (fromMaybe)
import qualified Data.Text as T
import qualified Data.Text.Lazy as TL
import qualified Data.Vector as V
import qualified Data.HashMap.Strict as HMS
import Text.Regex.PCRE.Heavy
import Text.XML.Lens as X hiding (re, (.=))
import Text.HTML.DOM as X (sinkDoc, parseLBS)
import Text.Blaze
import Text.Blaze.Renderer.Text
collapseWhitespace ∷ T.Text → T.Text
collapseWhitespace = gsub [re|(\s| )+|] (" " ∷ String)
emptyVal ∷ Value → Bool
emptyVal (Object o) = HMS.null o
emptyVal (Array v) = V.null v
emptyVal (String s) = T.null s
emptyVal Null = True
emptyVal _ = False
renderInner ∷ Element → T.Text
renderInner = T.concat . map renderNode . elementNodes
where renderNode (NodeContent c) = c
renderNode (NodeElement e) = TL.toStrict $ renderMarkup $ toMarkup e
renderNode _ = ""
vsingleton ∷ Maybe T.Text → Value
vsingleton x = fromMaybe Null $ (Array . V.singleton . String) <$> x
extractVector ∷ Value → Array
extractVector (Array v) = v
extractVector _ = V.empty
mergeProps ∷ (τ, [(α, Value)]) → (τ, Value)
mergeProps (n, vs) = (n, Array $ V.concat $ reverse $ map (extractVector . snd) vs)