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 <- StateT (Encoding -> Encoding) Identity (Encoding -> Encoding)
forall (m :: * -> *) s. Monad m => StateT s m s
get
      let elem1 :: T name Encoding
elem1 =
             ([T] -> Encoding) -> T name [T] -> T name Encoding
forall a b. (a -> b) -> T name a -> T name b
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
      StateT (Encoding -> Encoding) Identity ()
-> (Encoding -> StateT (Encoding -> Encoding) Identity ())
-> Maybe Encoding
-> StateT (Encoding -> Encoding) Identity ()
forall b a. b -> (a -> b) -> Maybe a -> b
maybe
         (() -> StateT (Encoding -> Encoding) Identity ()
forall a. a -> StateT (Encoding -> Encoding) Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
         ((Encoding -> Encoding) -> StateT (Encoding -> Encoding) Identity ()
forall (m :: * -> *) s. Monad m => s -> StateT s m ()
put ((Encoding -> Encoding)
 -> StateT (Encoding -> Encoding) Identity ())
-> (Encoding -> Encoding -> Encoding)
-> Encoding
-> StateT (Encoding -> Encoding) Identity ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Encoding -> Encoding -> Encoding
getDecoder) (Maybe Encoding -> StateT (Encoding -> Encoding) Identity ())
-> Maybe Encoding -> StateT (Encoding -> Encoding) Identity ()
forall a b. (a -> b) -> a -> b
$
         (Name name -> [T name Encoding] -> Maybe Encoding
forall name.
(Tag name, Attribute name) =>
Name name -> [T name Encoding] -> Maybe Encoding
Tag.maybeMetaEncoding
             (T name Encoding -> Name name
forall name str. T name str -> Name name
name_ T name Encoding
elem1) (T name Encoding -> [T name Encoding]
forall name str. T name str -> [T name str]
attributes_ T name Encoding
elem1))
      T name Encoding -> State (Encoding -> Encoding) (T name Encoding)
forall a. a -> StateT (Encoding -> Encoding) Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return T name Encoding
elem1