{-# LANGUAGE Trustworthy, NoImplicitPrelude, OverloadedStrings, UnicodeSyntax, QuasiQuotes #-} 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)