module Text.XML.HaXml.Verbatim where
import Text.XML.HaXml.Types
import Text.XML.HaXml.Namespaces
qname :: QName -> String
qname :: QName -> String
qname QName
n = QName -> String
printableName QName
n
class Verbatim a where
verbatim :: a -> String
instance (Verbatim a) => Verbatim [a] where
verbatim :: [a] -> String
verbatim = [String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([String] -> String) -> ([a] -> [String]) -> [a] -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((a -> String) -> [a] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map a -> String
forall a. Verbatim a => a -> String
verbatim)
instance Verbatim Char where
verbatim :: Char -> String
verbatim Char
c = [Char
c]
instance (Verbatim a, Verbatim b) => Verbatim (Either a b) where
verbatim :: Either a b -> String
verbatim (Left a
v) = a -> String
forall a. Verbatim a => a -> String
verbatim a
v
verbatim (Right b
v) = b -> String
forall a. Verbatim a => a -> String
verbatim b
v
instance Verbatim (Content i) where
verbatim :: Content i -> String
verbatim (CElem Element i
c i
_) = Element i -> String
forall a. Verbatim a => a -> String
verbatim Element i
c
verbatim (CString Bool
_ String
c i
_) = String
c
verbatim (CRef Reference
c i
_) = Reference -> String
forall a. Verbatim a => a -> String
verbatim Reference
c
verbatim (CMisc (Comment String
c) i
_) = String
"<!--"String -> String -> String
forall a. [a] -> [a] -> [a]
++String
cString -> String -> String
forall a. [a] -> [a] -> [a]
++String
"-->"
verbatim (CMisc Misc
_ i
_) = String
"<? ?>"
instance Verbatim (Element i) where
verbatim :: Element i -> String
verbatim (Elem QName
nam [Attribute]
att []) = String
"<" String -> String -> String
forall a. [a] -> [a] -> [a]
++ QName -> String
qname QName
nam
String -> String -> String
forall a. [a] -> [a] -> [a]
++ ([String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([String] -> String)
-> ([Attribute] -> [String]) -> [Attribute] -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Attribute -> String) -> [Attribute] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map Attribute -> String
verbAttr)) [Attribute]
att
String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"/>"
verbatim (Elem QName
nam [Attribute]
att [Content i]
cont) = String
"<" String -> String -> String
forall a. [a] -> [a] -> [a]
++ QName -> String
qname QName
nam
String -> String -> String
forall a. [a] -> [a] -> [a]
++ ([String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([String] -> String)
-> ([Attribute] -> [String]) -> [Attribute] -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Attribute -> String) -> [Attribute] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map Attribute -> String
verbAttr)) [Attribute]
att
String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
">" String -> String -> String
forall a. [a] -> [a] -> [a]
++ [Content i] -> String
forall a. Verbatim a => a -> String
verbatim [Content i]
cont String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"</"
String -> String -> String
forall a. [a] -> [a] -> [a]
++ QName -> String
qname QName
nam String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
">"
instance Verbatim Reference where
verbatim :: Reference -> String
verbatim (RefEntity String
r) = String
"&" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
forall a. Verbatim a => a -> String
verbatim String
r String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
";"
verbatim (RefChar CharRef
c) = String
"&#" String -> String -> String
forall a. [a] -> [a] -> [a]
++ CharRef -> String
forall a. Show a => a -> String
show CharRef
c String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
";"
instance Verbatim AttValue where
verbatim :: AttValue -> String
verbatim (AttValue [Either String Reference]
v) = [Either String Reference] -> String
forall a. Verbatim a => a -> String
verbatim [Either String Reference]
v
verbAttr :: Attribute -> String
verbAttr :: Attribute -> String
verbAttr (QName
n, AttValue [Either String Reference]
v) = String
" " String -> String -> String
forall a. [a] -> [a] -> [a]
++ QName -> String
qname QName
n String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"=\"" String -> String -> String
forall a. [a] -> [a] -> [a]
++ [Either String Reference] -> String
forall a. Verbatim a => a -> String
verbatim [Either String Reference]
v String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"\""