wraxml-0.4.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 :
[]