wraxml-0.3: src/Text/XML/WraXML/String/HaXml.hs
module Text.XML.WraXML.String.HaXml where
import Text.XML.HaXml(AttValue(AttValue), Reference, )
import qualified Text.XML.HaXml as HaXml
import qualified Text.XML.WraXML.String as XmlString
import qualified Text.XML.Basic.Character as XMLChar
import Data.Maybe.HT (alternatives, (?->), )
toXmlString :: AttValue -> XmlString.T
toXmlString (AttValue s) =
concatMap (either XmlString.fromString ((:[]) . refToXmlAtom)) s
fromXmlString :: XmlString.T -> AttValue
fromXmlString =
AttValue .
XMLChar.switchUnicodeRuns
Left
(Right . HaXml.RefChar)
(Right . HaXml.RefEntity)
lift :: (XmlString.T -> XmlString.T) -> (AttValue -> AttValue)
lift f = fromXmlString . f . toXmlString
refToXmlAtom :: HaXml.Reference -> XmlString.Atom
refToXmlAtom ref =
case ref of
HaXml.RefChar num -> XMLChar.fromCharRef num
HaXml.RefEntity name -> XMLChar.fromEntityRef name
charFromXmlAtom' :: XMLChar.T -> Either Char Reference
charFromXmlAtom' c =
case c of
XMLChar.Unicode char -> Left char
XMLChar.EntityRef name -> Right (HaXml.RefEntity name)
XMLChar.CharRef num -> Right (HaXml.RefChar num)
charFromXmlAtom :: XMLChar.T -> Either Char Reference
charFromXmlAtom c =
alternatives
(error "HaXml.charFromXmlAtom: unsupported constructor in XMLChar.T") $
XMLChar.maybeUnicode c ?-> Left :
XMLChar.maybeEntityRef c ?-> Right . HaXml.RefEntity :
XMLChar.maybeCharRef c ?-> Right . HaXml.RefChar :
[]