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 = (a -> String) -> [a] -> String
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap 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]
++ (Attribute -> String) -> [Attribute] -> String
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap 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]
++ (Attribute -> String) -> [Attribute] -> String
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap 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
"\""