{-# LANGUAGE FlexibleInstances #-}
module Text.XML (
module Text.XML,
module Text.XML.Types,
module Text.XML.Proc,
module Text.XML.Input,
module Text.XML.Output
) where
import Common
import Text.XML.Input
import Text.XML.Output
import Text.XML.Proc
import Text.XML.Types
import qualified Data.Text.Short as TS
add_attr :: Attr -> Element -> Element
add_attr a e = add_attrs [a] e
add_attrs :: [Attr] -> Element -> Element
add_attrs as e = e { elAttribs = as ++ elAttribs e }
unqual :: LName -> QName
unqual x = blank_name { qLName = x }
class Node t where
node :: QName -> t -> Element
instance Node [Attr] where node n as = node n (as,[]::[Content])
instance Node Attr where node n a = node n [a]
instance Node () where node n () = node n ([]::[Attr])
instance Node ([Attr],[Content]) where node n (as,cs) = Element n as cs
instance Node ([Attr],Content) where node n (as,c) = node n (as,[c])
instance Node (Attr,Content) where node n (a,c) = node n ([a],[c])
instance Node [Content] where node n cs = node n ([]::[Attr],cs)
instance Node Content where node n c = node n [c]
instance Node ([Attr],[Element]) where node n (as,cs) = node n (as,map Elem cs)
instance Node ([Attr],Element) where node n (as,c) = node n (as,[c])
instance Node (Attr,Element) where node n (a,c) = node n ([a],c)
instance Node ([Element]) where node n es = node n ([]::[Attr],es)
instance Node (Element) where node n e = node n [e]
instance Node ([Attr],[CData]) where node n (as,cs) = node n (as,map Text cs)
instance Node ([Attr],CData) where node n (as,c) = node n (as,[c])
instance Node (Attr,CData) where node n (a,c) = node n ([a],c)
instance Node [CData] where node n es = node n ([]::[Attr],es)
instance Node CData where node n e = node n [e]
instance Node ([Attr],Text) where node n (as,t) = node n (as,blank_cdata { cdData = t })
instance Node (Attr,Text) where node n (a,t) = node n ([a],t)
instance Node Text where node n t = node n ([]::[Attr],t)
instance Node ([Attr],ShortText) where node n (as,t) = node n (as,blank_cdata { cdData = TS.toText t })
instance Node (Attr,ShortText) where node n (a,t) = node n ([a],t)
instance Node ShortText where node n t = node n ([]::[Attr],t)
unode :: Node t => LName -> t -> Element
unode = node . unqual