wraxml-0.3: src/Text/XML/WraXML/Document.hs
module Text.XML.WraXML.Document where
import qualified Text.XML.WraXML.Tree as XmlTree
import qualified Text.XML.WraXML.String as XmlString
import qualified Text.XML.Basic.Attribute as Attr
import qualified Text.XML.Basic.Name as Name
import qualified Text.XML.Basic.Format as ShowXML
data T i name str = Cons {
xmlDeclaration :: Maybe [Attr.T name str],
docType :: Maybe String,
content :: [XmlTree.T i name str]}
deriving Show
instance
(Name.Tag name, Name.Attribute name, Ord name) =>
Functor (T i name) where
fmap f = lift f (map (fmap f))
lift ::
(Name.Tag name, Name.Attribute name, Ord name) =>
(str0 -> str1) ->
([XmlTree.T i name str0] -> [XmlTree.T i name str1]) ->
T i name str0 -> T i name str1
lift g f (Cons xml dtd trees) =
Cons (fmap (map (fmap g)) xml) dtd $ f trees
showXMLDeclaration ::
(Name.Tag name, Name.Attribute name, Ord name) =>
[Attr.T name XmlString.T] -> ShowS
showXMLDeclaration attrs =
showString "<?xml" . Attr.formatListBlankHead attrs . showString "?>" .
ShowXML.nl
showDocType :: String -> ShowS
showDocType dtdStr =
showString "<!DOCTYPE " . showString dtdStr . showString ">" .
ShowXML.nl
show ::
(Name.Tag name, Name.Attribute name, Ord name) =>
T i name XmlString.T -> String
show (Cons xml dtd trees) =
maybe id showXMLDeclaration xml .
maybe id showDocType dtd .
XmlTree.showsMany trees $
""