module Text.XML.HaXml.Verbatim where
import Text.XML.HaXml.Types
import Text.XML.HaXml.Namespaces
qname :: QName -> String
qname :: QName -> String
qname n :: 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 c :: Char
c = [Char
c]
instance (Verbatim a, Verbatim b) => Verbatim (Either a b) where
verbatim :: Either a b -> String
verbatim (Left v :: a
v) = a -> String
forall a. Verbatim a => a -> String
verbatim a
v
verbatim (Right v :: b
v) = b -> String
forall a. Verbatim a => a -> String
verbatim b
v
instance Verbatim (Content i) where
verbatim :: Content i -> String
verbatim (CElem c :: Element i
c _) = Element i -> String
forall a. Verbatim a => a -> String
verbatim Element i
c
verbatim (CString _ c :: String
c _) = String
c
verbatim (CRef c :: Reference
c _) = Reference -> String
forall a. Verbatim a => a -> String
verbatim Reference
c
verbatim (CMisc (Comment c :: String
c) _) = "<!--"String -> String -> String
forall a. [a] -> [a] -> [a]
++String
cString -> String -> String
forall a. [a] -> [a] -> [a]
++"-->"
verbatim (CMisc _ _) = "<? ?>"
instance Verbatim (Element i) where
verbatim :: Element i -> String
verbatim (Elem nam :: QName
nam att :: [Attribute]
att []) = "<" 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]
++ "/>"
verbatim (Elem nam :: QName
nam att :: [Attribute]
att cont :: [Content i]
cont) = "<" 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
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
forall a. [a] -> [a] -> [a]
++ QName -> String
qname QName
nam String -> String -> String
forall a. [a] -> [a] -> [a]
++ ">"
instance Verbatim Reference where
verbatim :: Reference -> String
verbatim (RefEntity r :: String
r) = "&" 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]
++ ";"
verbatim (RefChar c :: CharRef
c) = "&#" 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]
++ ";"
instance Verbatim AttValue where
verbatim :: AttValue -> String
verbatim (AttValue v :: [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 (n :: QName
n, AttValue v :: [Either String Reference]
v) = " " String -> String -> String
forall a. [a] -> [a] -> [a]
++ QName -> String
qname QName
n String -> String -> String
forall a. [a] -> [a] -> [a]
++ "=\"" 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]
++ "\""