module Text.XML.Monad.Name
where
import Control.Monad.Error.Class
import Control.Monad.Reader.Class
import Data.Char
import Data.Function
import Text.XML.Monad.Core
import Text.XML.Monad.Error
import qualified Text.XML.Light as L
findElementNameG :: (MonadReader L.Element m, MonadError e m, FromXmlError e) => (L.QName -> L.QName -> Bool) -> L.QName -> m L.Element
findElementNameG cmp name = asksMaybeXml (XmlElementNotFoundQ name) $ L.filterElementName (cmp name)
findElementName :: (MonadReader L.Element m, MonadError e m, FromXmlError e) => L.QName -> m L.Element
findElementName = findElementNameG (==)
findElementNameU :: (MonadReader L.Element m, MonadError e m, FromXmlError e) => String -> m L.Element
findElementNameU = findElementNameG unqualEq . L.unqual
findElementNameUI :: (MonadReader L.Element m, MonadError e m, FromXmlError e) => String -> m L.Element
findElementNameUI = findElementNameG unqualEqI . L.unqual
findElementsNameG :: (MonadReader L.Element m) => (L.QName -> L.QName -> Bool) -> L.QName -> m [L.Element]
findElementsNameG cmp name = asks $ L.filterElementsName (cmp name)
findElementsName :: (MonadReader L.Element m) => L.QName -> m [L.Element]
findElementsName = findElementsNameG (==)
findElementsNameU :: (MonadReader L.Element m) => String -> m [L.Element]
findElementsNameU = findElementsNameG unqualEq . L.unqual
findElementsNameUI :: (MonadReader L.Element m) => String -> m [L.Element]
findElementsNameUI = findElementsNameG unqualEqI . L.unqual
testElementNameG :: (MonadReader L.Element m, MonadError e m, FromXmlError e) => (L.QName -> L.QName -> Bool) -> L.QName -> m ()
testElementNameG cmp expectedName = do
actualName <- elName
case expectedName `cmp` actualName of
True -> return ()
False -> raiseXml (UnexpectedElementNameQ actualName expectedName)
testElementName :: (MonadReader L.Element m, MonadError e m, FromXmlError e) => L.QName -> m ()
testElementName = testElementNameG (==)
testElementNameU :: (MonadReader L.Element m, MonadError e m, FromXmlError e) => String -> m ()
testElementNameU = testElementNameG unqualEq . L.unqual
testElementNameUI :: (MonadReader L.Element m, MonadError e m, FromXmlError e) => String -> m ()
testElementNameUI = testElementNameG unqualEqI . L.unqual
unqualEq :: L.QName -> L.QName -> Bool
unqualEq = (==) `on` L.qName
unqualEqI :: L.QName -> L.QName -> Bool
unqualEqI = (==) `on` (map toLower . L.qName)