module Text.HTML.WraXML.Element (
   module Text.HTML.WraXML.Element,
   T, name_, attributes_,
   Elem.cons, Elem.name, Elem.attributes,
   Elem.checkName, Elem.format,
   ) where

import Text.XML.WraXML.Element (T, name_, attributes_, )

import qualified Text.XML.WraXML.Element as Elem

import qualified Text.XML.Basic.Name as Name
import qualified Text.XML.WraXML.String as XmlString

import qualified Text.HTML.Basic.Tag as Tag
import qualified Text.HTML.Basic.Character as HtmlChar
import qualified Text.HTML.Basic.String as HtmlString

import Control.Monad.Trans.State (State, put, get, )


-- * decode

decodeAdaptive ::
   (Name.Attribute name, Name.Tag name) =>
   (XmlString.Encoding -> XmlString.Encoded -> String) ->
   T name [HtmlChar.T] ->
   State (HtmlString.Encoded -> String) (T name String)
decodeAdaptive :: forall name.
(Attribute name, Tag name) =>
(Encoding -> Encoding -> Encoding)
-> T name [T] -> State (Encoding -> Encoding) (T name Encoding)
decodeAdaptive Encoding -> Encoding -> Encoding
getDecoder T name [T]
elem0 =
   do Encoding -> Encoding
decoder <- forall (m :: * -> *) s. Monad m => StateT s m s
get
      let elem1 :: T name Encoding
elem1 =
             forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Encoding -> Encoding) -> [T] -> Encoding
HtmlString.decode Encoding -> Encoding
decoder) T name [T]
elem0
      forall b a. b -> (a -> b) -> Maybe a -> b
maybe
         (forall (m :: * -> *) a. Monad m => a -> m a
return ())
         (forall (m :: * -> *) s. Monad m => s -> StateT s m ()
put forall b c a. (b -> c) -> (a -> b) -> a -> c
. Encoding -> Encoding -> Encoding
getDecoder) forall a b. (a -> b) -> a -> b
$
         (forall name.
(Tag name, Attribute name) =>
Name name -> [T name Encoding] -> Maybe Encoding
Tag.maybeMetaEncoding
             (forall name str. T name str -> Name name
name_ T name Encoding
elem1) (forall name str. T name str -> [T name str]
attributes_ T name Encoding
elem1))
      forall (m :: * -> *) a. Monad m => a -> m a
return T name Encoding
elem1